From 47297c4aac5c3b43d8f593e6764bc9f3da600f3d Mon Sep 17 00:00:00 2001 From: Anton Soloviev Date: Fri, 16 Oct 2026 13:06:35 -0700 Subject: [PATCH] Fix Manly inverse domain for negative parameters --- src/gstools/normalizer/methods.py | 2 +- tests/test_normalizer.py | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/gstools/normalizer/methods.py b/src/gstools/normalizer/methods.py index ded75eb7d..bcedb8e35 100644 --- a/src/gstools/normalizer/methods.py +++ b/src/gstools/normalizer/methods.py @@ -345,7 +345,7 @@ def denormalize_range(self): if np.isclose(self.lmbda, 0): return (-np.inf, np.inf) if self.lmbda < 0: - return (-np.inf, np.divide(1, self.lmbda)) + return (-np.inf, -np.divide(1, self.lmbda)) return (-np.divide(1, self.lmbda), np.inf) def _denormalize(self, data): diff --git a/tests/test_normalizer.py b/tests/test_normalizer.py index 9ab0f45e0..62173e4f6 100644 --- a/tests/test_normalizer.py +++ b/tests/test_normalizer.py @@ -145,6 +145,26 @@ def test_manly(self): ) ) + def test_manly_negative_lambda(self): + values = np.array([-2.0, -1.0, 0.0, 1.0, 2.0, np.nan]) + for lmbda in (-1.0, -0.5, -0.1): + with self.subTest(lmbda=lmbda): + normalizer = gs.normalizer.Manly(lmbda=lmbda) + np.testing.assert_allclose( + normalizer.denormalize(normalizer.normalize(values)), + values, + ) + + def test_manly_inverse_domain(self): + normalizer = gs.normalizer.Manly(lmbda=-1.0) + np.testing.assert_allclose( + normalizer.denormalize([-1.0, 0.0, 0.5]), + [-np.log(2.0), 0.0, np.log(2.0)], + ) + with self.assertWarns(UserWarning): + result = normalizer.denormalize([1.0, 2.0]) + self.assertTrue(np.all(np.isnan(result))) + def test_parameterless(self): no = gs.normalizer.LogNormal() self.assertTrue(