release: cut v1.0.0
Prepare the first public 1.0.0 release and finish the remaining CI hardening work. Highlights: - align Python, Rust, WASM, Conda, API, MCP, and docs version metadata to 1.0.0 - promote package metadata to Production/Stable and update stability/versioning docs for the stable series - move the accumulated Unreleased notes into a dated 1.0.0 changelog section and keep a fresh top-level Unreleased block - strengthen the changelog checker so it validates a single top-level Unreleased section - fix the CI/package support mismatch by declaring Python >=3.10 consistently and gating pandas-ta extras to Python 3.12+ - restore Sphinx autodoc compatibility for documented ferro_ta.<module> imports by registering module aliases - make the TA-Lib benchmark guardrail less flaky by checking median and tail-percentile speedups instead of failing on a single mild outlier - switch PyPI publishing to OIDC-only trusted publishing and wire the changelog check into the required CI gate - apply the Ruff-driven cleanup across the Python and test tree and refresh uv/cargo lockfiles Validated locally: - python3 scripts/check_changelog.py - uv run --with ruff ruff check python tests - uv run --with ruff ruff format --check python tests - uv lock --check - sphinx-build -b html docs docs/_build -W --keep-going - build/install the ferro_ta 1.0.0 wheel successfully
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
"""Unit tests for ferro_ta.indicators.price_transform"""
|
||||
|
||||
import numpy as np
|
||||
import pytest
|
||||
|
||||
from ferro_ta.indicators.price_transform import AVGPRICE, MEDPRICE, TYPPRICE, WCLPRICE
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
@@ -17,6 +18,7 @@ C = np.array([11.0, 12.0, 13.0, 14.0])
|
||||
# AVGPRICE
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
|
||||
class TestAVGPRICE:
|
||||
def test_known_formula(self):
|
||||
result = AVGPRICE(O, H, L, C)
|
||||
@@ -39,6 +41,7 @@ class TestAVGPRICE:
|
||||
# MEDPRICE
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
|
||||
class TestMEDPRICE:
|
||||
def test_known_formula(self):
|
||||
result = MEDPRICE(H, L)
|
||||
@@ -61,6 +64,7 @@ class TestMEDPRICE:
|
||||
# TYPPRICE
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
|
||||
class TestTYPPRICE:
|
||||
def test_known_formula(self):
|
||||
result = TYPPRICE(H, L, C)
|
||||
@@ -83,6 +87,7 @@ class TestTYPPRICE:
|
||||
# WCLPRICE
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
|
||||
class TestWCLPRICE:
|
||||
def test_known_formula(self):
|
||||
result = WCLPRICE(H, L, C)
|
||||
@@ -99,7 +104,6 @@ class TestWCLPRICE:
|
||||
|
||||
def test_close_weight_double(self):
|
||||
# WCLPRICE weights close twice vs TYPPRICE
|
||||
typ = TYPPRICE(H, L, C)
|
||||
wcl = WCLPRICE(H, L, C)
|
||||
# On a rising series (H > L > 0), WCLPRICE > TYPPRICE when C > (H+L)/2
|
||||
# Just verify formula correctness already done above
|
||||
|
||||
Reference in New Issue
Block a user