From: Jérôme Benoit Date: Thu, 13 Nov 2025 21:22:21 +0000 (+0100) Subject: docs(reforcexy): update tests documentation X-Git-Url: https://git.piment-noir.org/?a=commitdiff_plain;h=bdac6b83bea0d23f9b238cd798e0d2358f505f3c;p=freqai-strategies.git docs(reforcexy): update tests documentation Signed-off-by: Jérôme Benoit --- diff --git a/ReforceXY/reward_space_analysis/pyproject.toml b/ReforceXY/reward_space_analysis/pyproject.toml index 5e58647..45f00bd 100644 --- a/ReforceXY/reward_space_analysis/pyproject.toml +++ b/ReforceXY/reward_space_analysis/pyproject.toml @@ -42,7 +42,6 @@ python_functions = [ ] markers = [ "components: component-level reward computations", - "transforms: transform logic within components", "robustness: stress and edge-case behavior", "api: public API surface and helpers", "cli: command-line interface behaviors", diff --git a/ReforceXY/reward_space_analysis/tests/README.md b/ReforceXY/reward_space_analysis/tests/README.md index e7b6567..3f4d554 100644 --- a/ReforceXY/reward_space_analysis/tests/README.md +++ b/ReforceXY/reward_space_analysis/tests/README.md @@ -20,7 +20,6 @@ Single ownership per invariant is tracked in the Coverage Mapping section of thi | Directory | Marker | Scope | | -------------- | ----------- | ------------------------------------------- | | `components/` | components | Component math & transforms | -| `transforms/` | transforms | Transform function behavior | | `robustness/` | robustness | Edge cases, stability, progression | | `api/` | api | Public API helpers & parsing | | `cli/` | cli | CLI parameter propagation & artifacts | @@ -65,36 +64,34 @@ uv run pytest -m "statistics and slow" -q Columns: -- ID: Stable identifier (`--NNN`) or numeric-only legacy (statistics block). +- ID: Stable identifier (`--NNN`). - Category: Taxonomy directory marker. - Description: Concise invariant statement. - Owning File: Path:line of primary declaration (prefer comment line `# Owns invariant:` when present; otherwise docstring line). - Notes: Clarifications (sub-modes, extensions, non-owning references elsewhere, line clusters for multi-path coverage). -| ID | Category | Description | Owning File | Notes | -| -------------------------------------------- | ----------- | ----------------------------------------------------------------------------------- | --------------------------------------- | -------------------------------------------------------------------------------------------- | -| report-abs-shaping-line-091 | integration | Abs Σ Shaping Reward line present & formatted | integration/test_report_formatting.py:4 | PBRS report may render line; formatting owned here (core assertion lines 84–103) | -| report-additives-deterministic-092 | components | Additives deterministic report section | components/test_additives.py:4 | Integration/PBRS may reference outcome non-owning | -| robustness-decomposition-integrity-101 | robustness | Single active core component equals total reward under mutually exclusive scenarios | robustness/test_robustness.py:35 | Scenarios: idle, hold, exit, invalid; non-owning refs integration/test_reward_calculation.py | -| robustness-exit-mode-fallback-102 | robustness | Unknown exit_attenuation_mode falls back to linear w/ warning | robustness/test_robustness.py:519 | Comment line (function at :520) | -| robustness-negative-grace-clamp-103 | robustness | Negative exit_plateau_grace clamps to 0.0 w/ warning | robustness/test_robustness.py:549 | | -| robustness-invalid-power-tau-104 | robustness | Invalid power tau falls back alpha=1.0 w/ warning | robustness/test_robustness.py:586 | Line updated (was 585) | -| robustness-near-zero-half-life-105 | robustness | Near-zero half life yields no attenuation (factor≈base) | robustness/test_robustness.py:615 | Line updated (was 613) | -| pbrs-canonical-drift-correction-106 | pbrs | Canonical drift correction enforces near zero-sum shaping | pbrs/test_pbrs.py:447 | Multi-path: extension fallback (475), comparison path (517) | -| pbrs-canonical-near-zero-report-116 | pbrs | Canonical near-zero cumulative shaping classification | pbrs/test_pbrs.py:747 | Full report classification | -| statistics-partial-deps-skip-107 | statistics | skip_partial_dependence => empty PD structures | statistics/test_statistics.py:28 | Docstring line | -| helpers-duplicate-rows-drop-108 | helpers | Duplicate rows dropped w/ warning counting removals | helpers/test_utilities.py:26 | Docstring line | -| helpers-missing-cols-fill-109 | helpers | Missing required columns filled with NaN + single warning | helpers/test_utilities.py:50 | Docstring line | -| statistics-binned-stats-min-edges-110 | statistics | <2 bin edges raises ValueError | statistics/test_statistics.py:45 | Docstring line | -| statistics-constant-cols-exclusion-111 | statistics | Constant columns excluded & listed | statistics/test_statistics.py:57 | Docstring line | -| statistics-degenerate-distribution-shift-112 | statistics | Degenerate dist: zero shift metrics & KS p=1.0 | statistics/test_statistics.py:74 | Docstring line | -| statistics-constant-dist-widened-ci-113a | statistics | Non-strict: widened CI with warning | statistics/test_statistics.py:529 | Test docstring labels "Invariant 113 (non-strict)" | -| statistics-constant-dist-strict-omit-113b | statistics | Strict: omit metrics (no widened CI) | statistics/test_statistics.py:562 | Test docstring labels "Invariant 113 (strict)" | -| statistics-fallback-diagnostics-115 | statistics | Fallback diagnostics constant distribution (qq_r2=1.0 etc.) | statistics/test_statistics.py:190 | Docstring line | -| robustness-exit-pnl-only-117 | robustness | Only exit actions have non-zero PnL | robustness/test_robustness.py:125 | Newly assigned ID (previously unnumbered) | -| pbrs-absence-shift-placeholder-118 | pbrs | Placeholder shift line present (absence displayed) | pbrs/test_pbrs.py:975 | Ensures placeholder appears when shaping shift absent | - -Note: `transforms/` directory has no owned invariants; future transform-specific invariants should follow the ID pattern and be added here before test implementation. +| ID | Category | Description | Owning File | Notes | +| -------------------------------------------- | ----------- | ----------------------------------------------------------------------------------- | --------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- | +| report-abs-shaping-line-091 | integration | Abs Σ Shaping Reward line present & formatted | integration/test_report_formatting.py:4 | Module docstring; primary test at line 84. PBRS report may render line; formatting owned here (core assertion lines 84–103) | +| report-additives-deterministic-092 | components | Additives deterministic report section | components/test_additives.py:4 | Integration/PBRS may reference outcome non-owning | +| robustness-decomposition-integrity-101 | robustness | Single active core component equals total reward under mutually exclusive scenarios | robustness/test_robustness.py:36 | Scenarios: idle, hold, exit, invalid; non-owning refs integration/test_reward_calculation.py | +| robustness-exit-mode-fallback-102 | robustness | Unknown exit_attenuation_mode falls back to linear w/ warning | robustness/test_robustness.py:525 | Comment line (function at :526) | +| robustness-negative-grace-clamp-103 | robustness | Negative exit_plateau_grace clamps to 0.0 w/ warning | robustness/test_robustness.py:555 | | +| robustness-invalid-power-tau-104 | robustness | Invalid power tau falls back alpha=1.0 w/ warning | robustness/test_robustness.py:592 | | +| robustness-near-zero-half-life-105 | robustness | Near-zero half life yields no attenuation (factor≈base) | robustness/test_robustness.py:621 | | +| pbrs-canonical-drift-correction-106 | pbrs | Canonical drift correction enforces near zero-sum shaping | pbrs/test_pbrs.py:449 | Multi-path: extension fallback (475), comparison path (517) | +| pbrs-canonical-near-zero-report-116 | pbrs | Canonical near-zero cumulative shaping classification | pbrs/test_pbrs.py:748 | Full report classification | +| statistics-partial-deps-skip-107 | statistics | skip_partial_dependence => empty PD structures | statistics/test_statistics.py:28 | Docstring line | +| helpers-duplicate-rows-drop-108 | helpers | Duplicate rows dropped w/ warning counting removals | helpers/test_utilities.py:26 | Docstring line | +| helpers-missing-cols-fill-109 | helpers | Missing required columns filled with NaN + single warning | helpers/test_utilities.py:50 | Docstring line | +| statistics-binned-stats-min-edges-110 | statistics | <2 bin edges raises ValueError | statistics/test_statistics.py:45 | Docstring line | +| statistics-constant-cols-exclusion-111 | statistics | Constant columns excluded & listed | statistics/test_statistics.py:57 | Docstring line | +| statistics-degenerate-distribution-shift-112 | statistics | Degenerate dist: zero shift metrics & KS p=1.0 | statistics/test_statistics.py:74 | Docstring line | +| statistics-constant-dist-widened-ci-113a | statistics | Non-strict: widened CI with warning | statistics/test_statistics.py:533 | Test docstring labels "Invariant 113 (non-strict)" | +| statistics-constant-dist-strict-omit-113b | statistics | Strict: omit metrics (no widened CI) | statistics/test_statistics.py:565 | Test docstring labels "Invariant 113 (strict)" | +| statistics-fallback-diagnostics-115 | statistics | Fallback diagnostics constant distribution (qq_r2=1.0 etc.) | statistics/test_statistics.py:190 | Docstring line | +| robustness-exit-pnl-only-117 | robustness | Only exit actions have non-zero PnL | robustness/test_robustness.py:126 | Newly assigned ID (previously unnumbered) | +| pbrs-absence-shift-placeholder-118 | pbrs | Placeholder shift line present (absence displayed) | pbrs/test_pbrs.py:979 | Ensures placeholder appears when shaping shift absent | ### Non-Owning Smoke / Reference Checks @@ -108,15 +105,15 @@ Table tracks approximate line ranges and source ownership: | File | Lines (approx) | References | Ownership Source | | -------------------------------------- | -------------- | -------------------------------------------------------- | ------------------------------------------------------------------- | -| integration/test_reward_calculation.py | 15-22 | Decomposition identity (sum components) | robustness/test_robustness.py:35 | +| integration/test_reward_calculation.py | 15-22 | Decomposition identity (sum components) | robustness/test_robustness.py:36 | | components/test_reward_components.py | 212-242 | Exit factor finiteness & plateau behavior | robustness/test_robustness.py:156+ | -| pbrs/test_pbrs.py | 591-630 | Canonical vs non-canonical classification formatting | robustness/test_robustness.py:35, robustness/test_robustness.py:125 | +| pbrs/test_pbrs.py | 591-630 | Canonical vs non-canonical classification formatting | robustness/test_robustness.py:36, robustness/test_robustness.py:126 | | pbrs/test_pbrs.py | 616,624,799 | Abs Σ Shaping Reward line formatting | integration/test_report_formatting.py:84-103 | -| pbrs/test_pbrs.py | 742-806 | Canonical near-zero cumulative shaping classification | robustness/test_robustness.py:35 | -| pbrs/test_pbrs.py | 807-860 | Canonical warning classification (Σ shaping > tolerance) | robustness/test_robustness.py:35 | -| pbrs/test_pbrs.py | 861-915 | Non-canonical full report reason aggregation | robustness/test_robustness.py:35 | -| pbrs/test_pbrs.py | 916-969 | Non-canonical mode-only reason (additives disabled) | robustness/test_robustness.py:35 | -| statistics/test_statistics.py | 292 | Mean decomposition consistency | robustness/test_robustness.py:35 | +| pbrs/test_pbrs.py | 742-806 | Canonical near-zero cumulative shaping classification | robustness/test_robustness.py:36 | +| pbrs/test_pbrs.py | 807-860 | Canonical warning classification (Σ shaping > tolerance) | robustness/test_robustness.py:36 | +| pbrs/test_pbrs.py | 861-915 | Non-canonical full report reason aggregation | robustness/test_robustness.py:36 | +| pbrs/test_pbrs.py | 916-969 | Non-canonical mode-only reason (additives disabled) | robustness/test_robustness.py:36 | +| statistics/test_statistics.py | 292 | Mean decomposition consistency | robustness/test_robustness.py:36 | ### Deprecated / Reserved IDs