682bf063ca
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.
140 lines
4.1 KiB
TOML
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",
|
|
]
|