Oracle
------
tulipy (unmaintained, no wheels for CPython >=3.12) broke the testing-oracle
CI job on Python 3.12-3.14. Snapshot its deterministic output once into
tests/fixtures/tulipy_oracle.json (generator: generate_tulipy_oracle.py, run
on CPython <3.12) and compare native output against the frozen arrays on every
Python version. Remove tulipy from the oracle extra and drop the live tulipy
import from the CI smoke-check; ta-lib remains the live primary oracle. MSW
oracle tolerance loosened to 1e-3 to absorb ~1e-4 numpy-version float drift in
that recursive trig indicator.
Deprecation
-----------
df.ta.ticker(), ta.yf() and ta.av() now emit a FutureWarning and will be
removed in a future release; data fetching is out of scope for a TA library.
Add examples/fetch_market_data.py showing the yfinance / alpha-vantage
replacement patterns. The data extra remains available during the window.
Update CHANGELOG and installation docs.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- parse .pre-commit-config.yaml rev fields with a regex instead of
yaml.safe_load; the file is repo-controlled and flat, so stdlib
covers it and the lint extra stays two pins (pyyaml removed)
- normalize YAML-quoted and v-prefixed revs so a quoting change
can't produce a false mismatch
- derive the checked tool list from REPO_TO_TOOL instead of a
third hardcoded copy
- drop the Makefile PyYAML probe made moot by the above
- halve persist-step comments in ci.yml; kept detached-HEAD reset,
never-reopen, and sed fail-by-name rationale
- replace star imports with explicit imports + __all__ in
__init__.py, core.py, utils/__init__.py; incidental namespace
leaks (ta.np, ta.pd, ta.DataFrame, ta.logger) are gone
- rename ambiguous vars: O -> O_ in candle loops, l -> low in tests
- drop sys.path bootstrap hacks from tools/, tests/fixtures/, and
docs/conf.py; the editable install makes them redundant
- reorder notebook cells to import-first
- use pandas-safe .eq(False) where ruff's suggested `not series`
fix would raise on elementwise comparison
requires-python floor raised to >=3.10: 3.9 was never in the CI
matrix (LATEST-4..LATEST = 3.10-3.14) and AGENTS.md documents 3.10
as the minimum. mypy derives its target from requires-python via
make typecheck instead of a second hardcoded copy, and the global
ignore_missing_imports is now scoped to the six stub-less packages.
CI: pypi-publish opens a follow-up PR bumping requires-python after
each release so the committed floor cannot drift stale again;
code-quality enforces black/ruff pin parity between pyproject.toml
and .pre-commit-config.yaml (tools/check_lint_versions.py, also run
by make lint); mirror.yml's force-push assumption documented.
* `.pre-commit-config.yaml`: black + ruff (critical-only) on
`pandas_ta_classic/`, plus a local hook that regenerates `core.pyi`
before commit so the stub never drifts from Category.
* `code-quality` CI job runs the same stub regeneration and
`git diff --exit-code core.pyi` to fail the build if a contributor
added an indicator without updating the stub.
move concurrency group from workflow-level to documentation job only
(was incorrectly blocking the whole pipeline); drop setup-python from
generate-matrix (pure-bash script needs none); remove debug echo steps
- Introduced `test_native_indicators.py` to validate purely-native indicators with additional assertions for non-None results, valid rows, and finite last values.
- Implemented checks for known mathematical constraints on certain indicators.
- Excluded tests for known-broken indicators (`pmax` and `vfi`) with appropriate comments.
- Created `test_regression.py` to perform snapshot regression tests on indicators, comparing computed values against stored golden snapshots at specific indices.
- Enhanced test coverage for various indicators across multiple categories including Overlap, Momentum, Volatility, Trend, Volume, Statistics, Cycles, Performance, and Candles.
- Added a new sample CSV file containing historical stock data to examples/data/sample.csv.
- Updated the data loading path in example.ipynb to reflect the new location of the sample data.
- Adjusted the sample data path in watchlist.py to point to examples/data/SPY_D.csv.
- Corrected the image path in index.md to point to the correct documentation folder.
- Modified package data configuration in pyproject.toml to include the new sample data location.
- Removed setup.py as it is no longer needed for the project structure.
- Updated test configuration to load sample data from examples/data/SPY_D.csv.
- Deleted validate_structure.py as it is no longer required.
- Set SETUPTOOLS_SCM_PRETEND_VERSION from release tag to prevent .dev versions
- This fixes PyPI releases showing dev versions (e.g., 0.3.36.dev0) instead of clean versions
- The issue occurred because pyproject.toml modifications during build made working directory dirty
- Update CHANGELOG.md with PyPI Release Version fix
- Update CONTRIBUTING.md with new CI/CD consideration for release builds with modified files
feat: Add UV Package Manager support and parameterized package configuration
- Updated documentation to include installation instructions for both `uv` and `pip`.
- Implemented dynamic version and Python classifiers in `pyproject.toml`.
refactor: Enhance dynamic category discovery for indicators
- Replaced hardcoded Category dictionary with a dynamic discovery method in `_meta.py`.
- Updated total indicator counts in documentation and README.
docs: Create CONTRIBUTING.md for contribution guidelines
- Added detailed instructions for code contributions, testing, documentation, and code style.
build: Revise Makefile for improved development workflow
- Added installation and testing targets, along with documentation build commands.
docs: Update README and installation instructions
- Corrected indicator counts and added support for `uv` package manager in installation instructions.
fix: Update project metadata in pyproject.toml
- Changed version placeholder for CI/CD integration and updated development status to Production/Stable.
chore: Remove requirements.txt in favor of pyproject.toml
- Consolidated dependency management into pyproject.toml for better compatibility with modern Python packaging.
- Disabled Jekyll theme in `_config.yml` and added `.nojekyll` file to prevent Jekyll processing in the `docs/` directory.
- Updated `conf.py` for Sphinx configuration, including project metadata and theme settings.
- Created new documentation files: `dataframe_api.rst`, `indicators.rst`, `installation.rst`, `performance.rst`, `strategies.rst`, and `usage.rst` to provide comprehensive usage instructions and reference for the Pandas TA Classic library.
- Enhanced `index.rst` to include a detailed introduction, quick start guide, and table of contents for better navigation.
- Added performance metrics section to document new features and backtesting integration with vectorbt.
Moves the code quality checks job before the matrix generation job to ensure code quality is validated prior to generating the Python version test matrix. Updates workflow dependencies for more robust CI sequencing and improves maintainability by grouping related steps logically.