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,8 +1,14 @@
|
||||
"""Unit tests for ferro_ta.indicators.cycle"""
|
||||
|
||||
import numpy as np
|
||||
import pytest
|
||||
|
||||
from ferro_ta.indicators.cycle import (
|
||||
HT_DCPERIOD, HT_DCPHASE, HT_PHASOR, HT_SINE, HT_TRENDLINE, HT_TRENDMODE,
|
||||
HT_DCPERIOD,
|
||||
HT_DCPHASE,
|
||||
HT_PHASOR,
|
||||
HT_SINE,
|
||||
HT_TRENDLINE,
|
||||
HT_TRENDMODE,
|
||||
)
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
@@ -11,7 +17,7 @@ from ferro_ta.indicators.cycle import (
|
||||
|
||||
N = 200
|
||||
t = np.linspace(0, 10 * np.pi, N)
|
||||
SINE_CLOSE = 100 + 10 * np.sin(t) # clean sine wave
|
||||
SINE_CLOSE = 100 + 10 * np.sin(t) # clean sine wave
|
||||
|
||||
|
||||
def _warmup_end(arr):
|
||||
@@ -24,6 +30,7 @@ def _warmup_end(arr):
|
||||
# HT_DCPERIOD
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
|
||||
class TestHT_DCPERIOD:
|
||||
def test_length(self):
|
||||
result = HT_DCPERIOD(SINE_CLOSE)
|
||||
@@ -53,6 +60,7 @@ class TestHT_DCPERIOD:
|
||||
# HT_DCPHASE
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
|
||||
class TestHT_DCPHASE:
|
||||
def test_length(self):
|
||||
assert len(HT_DCPHASE(SINE_CLOSE)) == N
|
||||
@@ -72,6 +80,7 @@ class TestHT_DCPHASE:
|
||||
# HT_PHASOR
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
|
||||
class TestHT_PHASOR:
|
||||
def test_returns_two_arrays(self):
|
||||
result = HT_PHASOR(SINE_CLOSE)
|
||||
@@ -98,6 +107,7 @@ class TestHT_PHASOR:
|
||||
# HT_SINE
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
|
||||
class TestHT_SINE:
|
||||
def test_returns_two_arrays(self):
|
||||
result = HT_SINE(SINE_CLOSE)
|
||||
@@ -130,6 +140,7 @@ class TestHT_SINE:
|
||||
# HT_TRENDLINE
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
|
||||
class TestHT_TRENDLINE:
|
||||
def test_length(self):
|
||||
assert len(HT_TRENDLINE(SINE_CLOSE)) == N
|
||||
@@ -157,6 +168,7 @@ class TestHT_TRENDLINE:
|
||||
# HT_TRENDMODE
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
|
||||
class TestHT_TRENDMODE:
|
||||
def test_length(self):
|
||||
assert len(HT_TRENDMODE(SINE_CLOSE)) == N
|
||||
|
||||
Reference in New Issue
Block a user