From: Jérôme Benoit Date: Fri, 14 Nov 2025 00:47:13 +0000 (+0100) Subject: test(reforcexy): cleanup constants X-Git-Url: https://git.piment-noir.org/?a=commitdiff_plain;h=dcd8dc4d243597181c900930c7744ba4f80270ae;p=freqai-strategies.git test(reforcexy): cleanup constants Signed-off-by: Jérôme Benoit --- diff --git a/ReforceXY/reward_space_analysis/tests/constants.py b/ReforceXY/reward_space_analysis/tests/constants.py index ddfe8ac..faf0f30 100644 --- a/ReforceXY/reward_space_analysis/tests/constants.py +++ b/ReforceXY/reward_space_analysis/tests/constants.py @@ -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) diff --git a/ReforceXY/reward_space_analysis/tests/helpers/assertions.py b/ReforceXY/reward_space_analysis/tests/helpers/assertions.py index 11c8a3b..f407463 100644 --- a/ReforceXY/reward_space_analysis/tests/helpers/assertions.py +++ b/ReforceXY/reward_space_analysis/tests/helpers/assertions.py @@ -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, diff --git a/ReforceXY/reward_space_analysis/tests/robustness/test_robustness.py b/ReforceXY/reward_space_analysis/tests/robustness/test_robustness.py index 3ec8148..6213e01 100644 --- a/ReforceXY/reward_space_analysis/tests/robustness/test_robustness.py +++ b/ReforceXY/reward_space_analysis/tests/robustness/test_robustness.py @@ -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): diff --git a/ReforceXY/reward_space_analysis/tests/test_base.py b/ReforceXY/reward_space_analysis/tests/test_base.py index c243e55..99913dc 100644 --- a/ReforceXY/reward_space_analysis/tests/test_base.py +++ b/ReforceXY/reward_space_analysis/tests/test_base.py @@ -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(