]> Piment Noir Git Repositories - freqai-strategies.git/commitdiff
test(reforcexy): cleanup constants
authorJérôme Benoit <jerome.benoit@piment-noir.org>
Fri, 14 Nov 2025 00:47:13 +0000 (01:47 +0100)
committerJérôme Benoit <jerome.benoit@piment-noir.org>
Fri, 14 Nov 2025 00:47:13 +0000 (01:47 +0100)
Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
ReforceXY/reward_space_analysis/tests/constants.py
ReforceXY/reward_space_analysis/tests/helpers/assertions.py
ReforceXY/reward_space_analysis/tests/robustness/test_robustness.py
ReforceXY/reward_space_analysis/tests/test_base.py

index ddfe8ace88213834450f2bda90f83cdf14bd2060..faf0f305bc0b1c1e1d2428ad4e924958bebdbff1 100644 (file)
@@ -144,7 +144,6 @@ class TestParameters:
         RISK_REWARD_RATIO_HIGH: High risk/reward ratio for stress tests (2.0)
         PNL_STD: Standard deviation for PnL generation (0.02)
         PNL_DUR_VOL_SCALE: Duration-based volatility scaling factor (0.001)
-        EPS_BASE: Base epsilon for near-zero checks (1e-10)
     """
 
     BASE_FACTOR: float = 90.0
@@ -153,7 +152,6 @@ class TestParameters:
     RISK_REWARD_RATIO_HIGH: float = 2.0
     PNL_STD: float = 0.02
     PNL_DUR_VOL_SCALE: float = 0.001
-    EPS_BASE: float = 1e-10
 
 
 @dataclass(frozen=True)
index 11c8a3b2d13c3e4785d1c41fd069d9b8bb8a2c6a..f407463f976e7d3d29368412605993245382a5db 100644 (file)
@@ -6,6 +6,8 @@ single invariant ownership and reduce duplication across taxonomy modules.
 
 from typing import Any, Dict, List, Sequence, Tuple
 
+import numpy as np
+
 from reward_space_analysis import (
     _get_exit_factor,
     _get_pnl_factor,
@@ -649,8 +651,9 @@ def assert_exit_mode_mathematical_validation(
     observed_exit_factor = _get_exit_factor(
         base_factor, context.pnl, pnl_factor_hl, duration_ratio, params
     )
-    eps_base = 1e-8
-    observed_half_life_factor = observed_exit_factor / (base_factor * max(pnl_factor_hl, eps_base))
+    observed_half_life_factor = observed_exit_factor / (
+        base_factor * max(pnl_factor_hl, np.finfo(float).eps)
+    )
     expected_half_life_factor = 2 ** (-duration_ratio / params["exit_half_life"])
     test_case.assertAlmostEqual(
         observed_half_life_factor,
index 3ec81481a3b28002466a88f194e8611278348145..6213e0126d0fde03484ccb1aed0a9bc6bb36d468 100644 (file)
@@ -147,13 +147,15 @@ class TestRewardRobustnessAndBoundaries(RewardSpaceTestBase):
             places=10,
             msg="PnL invariant violation: total PnL != sum of exit PnL",
         )
-        non_zero_pnl_actions = set(np.unique(df[df["pnl"].abs() > self.EPS_BASE]["action"]))
+        non_zero_pnl_actions = set(np.unique(df[df["pnl"].abs() > np.finfo(float).eps]["action"]))
         expected_exit_actions = {2.0, 4.0}
         self.assertTrue(
             non_zero_pnl_actions.issubset(expected_exit_actions),
             f"Non-exit actions have PnL: {non_zero_pnl_actions - expected_exit_actions}",
         )
-        invalid_combinations = df[(df["pnl"].abs() <= self.EPS_BASE) & (df["reward_exit"] != 0)]
+        invalid_combinations = df[
+            (df["pnl"].abs() <= np.finfo(float).eps) & (df["reward_exit"] != 0)
+        ]
         self.assertEqual(len(invalid_combinations), 0)
 
     def test_exit_factor_comprehensive(self):
index c243e55569674f215ec6c7c39072b02c6889ef1c..99913dcb06809e1b94246ad764b4c97503e54b66 100644 (file)
@@ -98,10 +98,9 @@ class RewardSpaceTestBase(unittest.TestCase):
     # Exit factor constants
     MIN_EXIT_POWER_TAU = EXIT_FACTOR.MIN_POWER_TAU
 
-    # Test-specific constants (not in constants.py)
+    # Test-specific constants
     PBRS_TERMINAL_PROB = 0.08
     PBRS_SWEEP_ITER = 120
-    EPS_BASE = TOLERANCE.IDENTITY_STRICT  # Alias for backward compatibility
     JS_DISTANCE_UPPER_BOUND = math.sqrt(math.log(2.0))
 
     def make_ctx(