Files
ferro-ta/pyproject.toml
T
Pratik Bhadane 682bf063ca release: cut v1.0.1
Prepare the first patch release after v1.0.0 by finalizing the outstanding release, packaging, and workflow fixes.

This release keeps PyPI and crates.io publishing anchored to CI.yml, splits the large CI workflow into focused rust/python/wasm/docs suites, fixes the ci-complete gate, and updates the release SBOM action pin.

It also switches the npm publish workflow to GitHub OIDC, installs the wasm32 target required for packaging, ensures the WASM npm tarball includes pkg/ artifacts during prepack, and adds a dedicated README plus docs.rs metadata for ferro_ta_core.

Finally, bump all published package versions to 1.0.1 and record the patch release notes in CHANGELOG.md.
2026-03-24 00:38:50 +05:30

140 lines
4.1 KiB
TOML

[build-system]
requires = ["maturin>=1.0,<2.0"]
build-backend = "maturin"
[project]
name = "ferro-ta"
version = "1.0.1"
description = "A fast Technical Analysis library — TA-Lib alternative powered by Rust and PyO3"
readme = "README.md"
license = { text = "MIT" }
requires-python = ">=3.10"
keywords = [
"technical-analysis", "trading", "finance", "rust", "pyo3",
"ta-lib", "indicators", "candlestick", "pandas", "numpy",
]
classifiers = [
"Development Status :: 5 - Production/Stable",
"Intended Audience :: Financial and Insurance Industry",
"Intended Audience :: Developers",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Programming Language :: Rust",
"Topic :: Office/Business :: Financial",
"Topic :: Scientific/Engineering :: Mathematics",
"Typing :: Typed",
]
dependencies = ["numpy>=1.20"]
[project.optional-dependencies]
test = ["pytest>=7.0", "hypothesis>=6.0"]
benchmark = ["pytest>=7.0", "pytest-benchmark>=4.0"]
pandas = ["pandas>=1.0"]
polars = ["polars>=0.19"]
docs = ["sphinx>=7.0", "sphinx-rtd-theme>=1.3"]
comparison = [
"pytest>=7.0",
"ta-lib>=0.4",
"pandas-ta>=0.3; python_version >= '3.12'",
"ta>=0.10",
"pandas>=1.0",
]
gpu = ["torch>=2.0"]
options = []
mcp = ["mcp>=1.0"]
all = ["pandas>=1.0", "polars>=0.19", "pytest>=7.0", "pytest-benchmark>=4.0"]
dev = [
"pytest>=7.0",
"hypothesis>=6.0",
"pandas>=1.0",
"polars>=0.19",
"ruff>=0.3",
"mypy>=1.0",
"pyright>=1.1",
"maturin>=1.0,<2.0",
"pyyaml>=6.0",
"matplotlib>=3.5",
"fastapi>=0.135.1",
"httpx>=0.24",
]
[project.urls]
Homepage = "https://github.com/pratikbhadane24/ferro-ta"
Repository = "https://github.com/pratikbhadane24/ferro-ta"
"Bug Tracker" = "https://github.com/pratikbhadane24/ferro-ta/issues"
[tool.pytest.ini_options]
testpaths = ["tests/unit", "tests/integration"]
[tool.maturin]
python-source = "python"
module-name = "ferro_ta._ferro_ta"
features = ["pyo3/extension-module"]
# Include the PEP 561 py.typed marker so type checkers recognize this package
include = [{ path = "python/ferro_ta/py.typed", format = "wheel" }]
[tool.mypy]
python_version = "3.10"
warn_return_any = true
ignore_missing_imports = true
# Strictness: step toward strict; fix critical issues first
disallow_untyped_defs = false
check_untyped_defs = true
# Allow for now; tighten once missing-return and no-any-return are fixed
disable_error_code = ["return", "no-any-return"]
[tool.ruff]
target-version = "py310"
line-length = 88
src = ["python", "tests"]
[tool.ruff.lint]
select = ["E", "F", "I", "N", "W", "UP"]
ignore = ["E501", "UP006", "UP045", "UP007"]
# Tests: allow underscore in class names (TestCHANDELIER_EXIT), late imports (E402), uppercase helpers (N802)
# Stubs: public API names are uppercase (SMA, RSI, etc.); Tuple used for compatibility
[tool.ruff.lint.per-file-ignores]
"tests/*" = ["N801", "N802", "N806", "E402", "E741", "F811"]
"tests/unit/*" = ["N801", "N802", "N806", "E402", "E741", "F811"]
"tests/integration/*" = ["N801", "N802", "N806", "E402", "E741", "F811"]
"python/ferro_ta/*.py" = ["N802"] # Public API: SMA, RSI, ATR, etc.
"python/ferro_ta/__init__.pyi" = ["N802", "E402"]
[tool.ruff.format]
quote-style = "double"
[tool.pyright]
pythonVersion = "3.10"
typeCheckingMode = "basic"
reportMissingImports = false
reportMissingTypeStubs = false
reportMissingModuleSource = false
[tool.uv]
# Use uv for dependency resolution, locking, and running commands.
# Install: pip install uv (or curl -Lsf https://astral.sh/uv/install.sh | sh)
# Sync: uv sync --extra dev
# Tests: uv run pytest tests/
# Build: uv run maturin build --release --out dist
[dependency-groups]
dev = [
"pytest>=7.0",
"hypothesis>=6.0",
"pandas>=1.0",
"polars>=0.19",
"ruff>=0.3",
"mypy>=1.0",
"pyright>=1.1",
"maturin>=1.0,<2.0",
"pyyaml>=6.0",
"pandas-ta>=0.3; python_version >= '3.12'",
"ta>=0.10",
]