From a23e3f170f2119b3651a0e25496e6c060b44239e Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=B4me=20Benoit?= Date: Sun, 31 Aug 2025 13:15:31 +0200 Subject: [PATCH] perf(qav3): add integer fastpath to round_to_step() MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Jérôme Benoit --- quickadapter/user_data/strategies/Utils.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/quickadapter/user_data/strategies/Utils.py b/quickadapter/user_data/strategies/Utils.py index b8e64c0..840b323 100644 --- a/quickadapter/user_data/strategies/Utils.py +++ b/quickadapter/user_data/strategies/Utils.py @@ -1015,10 +1015,18 @@ def round_to_step(value: float | int, step: int) -> int: """ if not isinstance(value, (int, float)): raise ValueError("value must be an integer or float") - if not np.isfinite(value): - raise ValueError("value must be finite") if not isinstance(step, int) or step <= 0: raise ValueError("step must be a positive integer") + if isinstance(value, (int, np.integer)): + q, r = divmod(value, step) + twice_r = r * 2 + if twice_r < step: + return q * step + if twice_r > step: + return (q + 1) * step + return int(round(value / step) * step) + if not np.isfinite(value): + raise ValueError("value must be finite") return int(round(float(value) / step) * step) -- 2.43.0