semvec/pypi-packages huggingface dataset:
rustalib 0.3.4
Python wrapper for rustalib-core, a high-performance technical analysis library written in Rust.
License: MIT
Requires Python: >=3.8

# rustalib

📈 High-performance technical indicators for trading, written in Rust and exposed to Python.  
Designed for time series analysis, backtesting, and real-time execution.

---

## 🚀 Installation

### 🔧 For Python users (from PyPI)

If you just want to use the library in your Python projects:

```bash
pip install rustalib
```

> This will install the precompiled Rust extension (wheels) published on PyPI.  
> Requires Python ≥ 3.8.

---

### 🛠️ For contributors or internal development

> ⚠️ The Rust core of this project is private.  
> You will not be able to build this project from source unless you have access to the Rust codebase.

If you are part of the internal team or have access to the Rust core, you can:

1. Make sure [Rust](https://rustup.rs) and [maturin](https://github.com/PyO3/maturin) are installed.
2. Clone the repo and install in development mode:

```bash
pip install maturin
maturin develop
```

To build a distributable wheel:

```bash
maturin build
pip install target/wheels/rustalib-*.whl
```
---

## 📋 Requirements

To run the example scripts, you need to install the Python dependencies listed in:

```bash
examples/requirements.txt
```

You can install them with:

```bash
pip install -r examples/requirements.txt
```

---

## 📁 Data source

All examples use SPY historical data downloaded via [Yahoo Finance](https://finance.yahoo.com/quote/SPY), saved to:

```
examples/data/SPY_1D.csv
examples/data/SPY_1D_2000_2024.csv
```

You can regenerate the CSV by running:

```bash
python examples/data/download_data.py
```

---


## 🧪 Example: Simple Moving Average (SMA)

Example file: [`examples/sma_example.py`](https://github.com/cuantilab/rustalib/blob/main/examples/sma_example.py)  
Uses real SPY data from 2020 to 2024.

```python
import pandas as pd
import numpy as np

import rustalib as rl

df = pd.read_csv("examples/data/SPY_1D.csv")
close = df["Close"].to_numpy(dtype=np.float64)

PERIOD = 20
df["SMA20"] =  rl.SMA(PERIOD, close)
print(df.tail())
```

>💡 This is just one of the available indicators.
>For more examples, check the [`examples`](https://github.com/cuantilab/rustalib/tree/main/examples) folder in the repository.

---

## 📦 Available indicators

| Indicator | Description                          |
|-----------|--------------------------------------|
| `EMA`     | Exponential Moving Average           |
| `MACD`    | Moving Average Convergence Divergence|
| `SMA`     | Simple Moving Average                |

> Upcoming indicators: RSI, ATR, SuperTrend...

---

## 💡 Suggest new indicators

The Rust core is private and not open to external contributions.

If you’d like a new indicator to be included, open an issue in the [rustalib repo](https://github.com/cuantilab/rustalib/issues) with a clear description. Requests are welcome!

---

## 🧰 Features

- Backtest-friendly
- Ultra-fast thanks to Rust core
- Simple and consistent Python API

---

## 🪪 License

MIT © [Cuantilab](https://github.com/cuantilab)
obs-scoreboard 1.1
Simple python-powered scoreboard for use with my online webcasts.
License: MIT

# obs-scoreboard
![GitHub Release #](https://img.shields.io/github/v/release/gsl4295/scores?include_prereleases&sort=date&display_name=tag)
![GitHub Commits](https://img.shields.io/github/commit-activity/t/gsl4295/scores)
![GitHub Issues](https://img.shields.io/github/issues/gsl4295/scores)<br>
Simple python-powered scoreboard for use with my online webcasts.

<img src="scores/images/GUI.png" width=500 /><br>

### Setup
- This program is available on pip:
```commandline
pip install obs-scoreboard
```

### Features
- User-inputted:
  - Team names
  - Team colors
  - Score
    - +1, -1, or by text input

| Hotkeys  | Team 1  | Team 2  |
|:--------:|:-------:|:-------:|
| Score +1 | numpad7 | numpad9 |
| Score -1 | numpad1 | numpad3 |

- Streaming-friendly outputs
  - Background (for using color key): `#252526`
  - Find an example of how I'm using this program in `images/OBS-overlay-example.png`
  - This program also outputs each score and team name to its respective text file in `outputs/`
  - To update a text source with this data, set "Add Data Mode" to "from file" and find the files in this project.
aiocryptopay 0.4.8
@cryptobot api asynchronous python wrapper
License: MIT
Requires Python: <4.0,>=3.8
Keywords: aiocryptopay, cryptobot, cryptopay, cryptopay api, cryptobot api

## **[@cryptobot](https://t.me/CryptoBot) asynchronous api wrapper**
**Docs:** https://help.crypt.bot/crypto-pay-api

 - MainNet - [@CryptoBot](http://t.me/CryptoBot)
 - TestNet - [@CryptoTestnetBot](http://t.me/CryptoTestnetBot)


**Install**
``` bash
pip install aiocryptopay
poetry add aiocryptopay
```

**Basic methods**
``` python
from aiocryptopay import AioCryptoPay, Networks

crypto = AioCryptoPay(token='1337:JHigdsaASq', network=Networks.MAIN_NET)

profile = await crypto.get_me()
currencies = await crypto.get_currencies()
balance = await crypto.get_balance()
rates = await crypto.get_exchange_rates()
stats = await crypto.get_stats()

print(profile, currencies, balance, rates, stats, sep='\n')
```

**Create, get and delete invoice methods**
``` python
from aiocryptopay import AioCryptoPay, Networks

crypto = AioCryptoPay(token='1337:JHigdsaASq', network=Networks.MAIN_NET)

invoice = await crypto.create_invoice(asset='TON', amount=1.5)
print(invoice.bot_invoice_url)

# Create invoice in fiat
fiat_invoice = await crypto.create_invoice(amount=5, fiat='USD', currency_type='fiat')
print(fiat_invoice)

old_invoice = await crypto.get_invoices(invoice_ids=invoice.invoice_id)
print(old_invoice.status)

deleted_invoice = await crypto.delete_invoice(invoice_id=invoice.invoice_id)
print(deleted_invoice)
```

**Create, get and delete check methods**
``` python
# The check creation method works when enabled in the application settings

from aiocryptopay import AioCryptoPay, Networks

crypto = AioCryptoPay(token='1337:JHigdsaASq', network=Networks.MAIN_NET)

check = await crypto.create_check(asset='USDT', amount=1)
print(check)

old_check = await crypto.get_checks(check_ids=check.check_id)
print(old_check)

deleted_check = await crypto.delete_check(check_id=check.check_id)
print(deleted_check)
```


**WebHook usage**
``` python
from aiohttp import web

from aiocryptopay import AioCryptoPay, Networks
from aiocryptopay.models.update import Update


web_app = web.Application()
crypto = AioCryptoPay(token='1337:JHigdsaASq', network=Networks.MAIN_NET)


@crypto.pay_handler()
async def invoice_paid(update: Update, app) -> None:
    print(update)

async def create_invoice(app) -> None:
    invoice = await crypto.create_invoice(asset='TON', amount=1.5)
    print(invoice.bot_invoice_url)

async def close_session(app) -> None:
    await crypto.close()


web_app.add_routes([web.post('/crypto-secret-path', crypto.get_updates)])
web_app.on_startup.append(create_invoice)
web_app.on_shutdown.append(close_session)
web.run_app(app=web_app, host='localhost', port=3001)
```