TaCuda — Python Bindings
Python package for the native tacuda CUDA library.
TA-Lib 0.7.1 baseline coverage (161 functions): indicators, MACDEXT, 19 vector math kernels,
candlestick patterns, plus typed core APIs with runtime dtype selection and the
zero-copy device API.
Prerequisites
- NVIDIA GPU (Compute Capability >= 6.0)
- CUDA Toolkit 11.x or 12.x
- Built
tacudashared library (tacuda.dll/libtacuda.so/libtacuda.dylib) - Python >= 3.8, NumPy >= 1.20
Package Scope
- High-level NumPy wrappers for indicator functions
- Precision-aware core indicators (
sma,ema,rsi,macd,atr,bbands) viadtype="float16|float32|float64" OHLCVconvenience container and input validation helpers
Installation
pip install tacuda
Note: The
tacudanative library must be built separately and placed where the Python bindings can find it. See "Library Location" below.
Quick Start
import numpy as np
from tacuda import sma, ema, rsi, macd, bbands, OHLCV
# Generate sample data
prices = np.random.randn(100_000).cumsum().astype(np.float32) + 100
# Moving averages
sma20 = sma(prices, 20)
ema12 = ema(prices, 12)
# RSI
rsi14 = rsi(prices, 14)
# MACD (returns macd_line, signal, histogram)
macd_line, signal, hist = macd(prices, 12, 26, 9)
# Bollinger Bands (returns upper, middle, lower)
upper, middle, lower = bbands(prices, 20, 2.0, 2.0)
# OHLCV container
ohlcv = OHLCV.from_columns(open_arr, high_arr, low_arr, close_arr, volume_arr)
MACDEXT and vector math
import tacuda
# Independent MA types per line (0=SMA 1=EMA 2=WMA ... 8=T3)
ext_macd, ext_signal, ext_hist = tacuda.macdext(
prices, fastPeriod=12, fastType=1, slowPeriod=26, slowType=0,
signalPeriod=9, signalType=2)
# Element-wise GPU kernels
log_prices = tacuda.ln(prices)
spread = tacuda.sub(high_arr, low_arr)
Zero-copy device pipeline
n = len(prices)
d_in = tacuda.device_alloc(n)
d_out = tacuda.device_alloc(n)
try:
tacuda.device_upload(prices, d_in, n) # 1 PCIe transfer in
tacuda.sma_d(d_in, d_out, n, 20) # compute on GPU
tacuda.sin_d(d_out, d_out, n) # chain kernels, zero copies
tacuda.device_sync()
result = tacuda.device_download(d_out, n) # 1 PCIe transfer out
finally:
tacuda.device_free(d_in)
tacuda.device_free(d_out)
Available Indicators (TA-Lib 0.7.1 baseline coverage)
| Category | Indicators |
|---|---|
| Moving Averages | SMA, EMA, WMA, DEMA, TEMA, TRIMA, KAMA, T3, MAMA, MAVP, MA |
| Momentum | RSI, MACD, MACDEXT, MACDFIX, Stochastic, StochF, StochRSI, CCI, CMO, ROC, ROCP, ROCR, ROCR100, MOM, WILLR, APO, PPO, PVO, TRIX, ULTOSC, BOP |
| Volatility | ATR, NATR, TRANGE, BBANDS, ACCBANDS, StdDev, VAR |
| Trend | ADX, ADXR, DX, +DI, -DI, +DM, -DM, SAR, SAREXT, Aroon, AroonOsc |
| Volume | AD, ADOSC, OBV, MFI, IMI, NVI, PVI |
| Statistical | LINEARREG, SLOPE, INTERCEPT, ANGLE, TSF, CORREL, BETA, AVGDEV, SUM, MAX, MIN |
| Price Transform | AVGPRICE, MEDPRICE, TYPPRICE, WCLPRICE, MIDPRICE |
| Hilbert Transform | HT_DCPERIOD, HT_DCPHASE, HT_PHASOR, HT_SINE, HT_TRENDLINE, HT_TRENDMODE |
| Vector Math (19) | SIN, COS, TAN, ASIN, ACOS, ATAN, SINH, COSH, TANH, EXP, LN, LOG10, SQRT, CEIL, FLOOR, ADD, SUB, MULT, DIV |
| Candlestick | 63 patterns (Doji, Hammer, Engulfing, MorningStar, etc.) |
| Device API | ct_*_d variants of the above + device_alloc/upload/download/sync/free and buffer-pool controls |
Library Location
The bindings search for the native library in this order:
TACUDA_LIBRARYenvironment variable (full path to shared library)TACUDA_LIBRARY_PATH/TACUDA_LIBRARY_DIR+ library name- System library path (
ctypes.util.find_library) - Common build directories relative to the package
Regenerating Metadata
When the C header changes, regenerate from the repository root:
python bindings/generate_bindings.py
Build & Publish (PyPI)
Releases are built and published only by the release-packages workflow
(see CONTRIBUTING.md): one
platform wheel per native plus a source-only sdist. For a local build, make
the sdist before any native is in tacuda/ (setuptools packs package data
into it), then put exactly one native there and build only the wheel. Wipe
the setuptools cache before each build: build/lib is never pruned, so a
second wheel would otherwise also carry the previous build's native:
cd bindings/python
rm -rf build dist ./*.egg-info
python -m build --sdist # tacuda/ must not contain a native yet
rm -rf build ./*.egg-info
cp /path/to/libtacuda.so tacuda/ # or tacuda.dll for a Windows wheel
python -m build --wheel
python -m twine check dist/*
Changelog
Canonical release history is maintained in CHANGELOG.md.
License
Apache License 2.0 — see LICENSE.
Streaming and version pairing
The 0.8.0 bindings add incremental single-series and portfolio updates for 10 indicator families. Use a matching 0.8.0 native library; an older binary does not export the streaming functions. See the Streaming API guide. The 161-function compatibility baseline is native TA-Lib 0.7.1, not TA-Lib 0.8.1.
Metadata
Release files for tacuda 0.8.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| tacuda-0.8.0.tar.gz | 37.4 kB | Without provenance | Details for tacuda-0.8.0.tar.gz |
Built distributions (wheels)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| tacuda-0.8.0-py3-none-win_amd64.whl | Python 3 | none | Windows x86-64 | Details for tacuda-0.8.0-py3-none-win_amd64.whl |
| tacuda-0.8.0-py3-none-manylinux_2_35_x86_64.whl | Python 3 | none | Linux glibc 2.35+ x86-64 | Details for tacuda-0.8.0-py3-none-manylinux_2_35_x86_64.whl |
Total release size: 48.5 MB
Release files / tacuda-0.8.0.tar.gz
| Download URL | tacuda-0.8.0.tar.gz |
|---|---|
| Size | 37.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2772b45f6457652a9b1be015528c882463d58e4fe4e982fb9b4be9cffa1fb07e
|
|
BLAKE2b-256 checksum How to use checksums |
97ecdb6f95a0a5e0327fb85d73bf6ab09e97a8fd23cef253e23bc5e64b579008
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.16
|
Release files / tacuda-0.8.0-py3-none-win_amd64.whl
| Download URL | tacuda-0.8.0-py3-none-win_amd64.whl |
|---|---|
| Size | 24.1 MB |
| Tags | Python 3 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
f933754ee5b11d4574d2f7b47b59b4ce266984a7512cbf80a025284d6b66db11
|
|
BLAKE2b-256 checksum How to use checksums |
1570c9e0182131c49a276b2c9401cca9b6c7fd557619d308311257ecdb43b029
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.16
|
Release files / tacuda-0.8.0-py3-none-manylinux_2_35_x86_64.whl
| Download URL | tacuda-0.8.0-py3-none-manylinux_2_35_x86_64.whl |
|---|---|
| Size | 24.4 MB |
| Tags | Linux glibc 2.35+ x86-64 Python 3 |
|
SHA-256 checksum How to use checksums |
41cd138293acaa9b010acbaedbd6796d89e1a3bf391b364b8f228398ac2a3487
|
|
BLAKE2b-256 checksum How to use checksums |
e1cd21c17f2dca4719e8e25b07bd2258b0896dfcc4a879482a652bcf4e363b95
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.16
|
Security for tacuda 0.8.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.