diff --git a/src/gstools/normalizer/methods.py b/src/gstools/normalizer/methods.py index ded75eb7..bcedb8e3 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 9ab0f45e..62173e4f 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(