From 4560629bbfd0477b5251508d4772354259fd7936 Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=B4me=20Benoit?= Date: Thu, 19 Feb 2026 01:15:08 +0100 Subject: [PATCH] fix(normalization): use eps-based threshold for minmax numerical stability --- .../user_data/freqaimodels/QuickAdapterRegressorV3.py | 2 +- quickadapter/user_data/strategies/Utils.py | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/quickadapter/user_data/freqaimodels/QuickAdapterRegressorV3.py b/quickadapter/user_data/freqaimodels/QuickAdapterRegressorV3.py index da2f4c3..dc1386f 100644 --- a/quickadapter/user_data/freqaimodels/QuickAdapterRegressorV3.py +++ b/quickadapter/user_data/freqaimodels/QuickAdapterRegressorV3.py @@ -2851,7 +2851,7 @@ class QuickAdapterRegressorV3(BaseRegressionModel): finite_max_val = np.max(finite_col) finite_range_val = finite_max_val - finite_min_val - if np.isclose(finite_range_val, 0.0): + if finite_range_val < 10 * np.finfo(float).eps: if np.any(is_pos_inf_mask) and np.any(is_neg_inf_mask): normalized_matrix[is_finite_mask, i] = 0.5 elif np.any(is_pos_inf_mask): diff --git a/quickadapter/user_data/strategies/Utils.py b/quickadapter/user_data/strategies/Utils.py index 8351eb1..70327d1 100644 --- a/quickadapter/user_data/strategies/Utils.py +++ b/quickadapter/user_data/strategies/Utils.py @@ -1743,10 +1743,11 @@ def zigzag( min_val = np.nanmin(arr) max_val = np.nanmax(arr) - if np.isclose(min_val, max_val): + range_val = max_val - min_val + if range_val < 10 * np.finfo(float).eps: return [0.5 if np.isfinite(v) else np.nan for v in values] - scaled_arr = (arr - min_val) / (max_val - min_val) + scaled_arr = (arr - min_val) / range_val return scaled_arr.tolist() def calculate_pivot_metrics( -- 2.53.0