From f8b1a9af53e1ad47adcd6215e54e4f0b8259ee39 Mon Sep 17 00:00:00 2001 From: Antony Lee Date: Tue, 20 Sep 2016 00:28:58 -0700 Subject: [PATCH 1/2] Cleanup of style.<>Transforms; catch nan warning. --- lib/matplotlib/scale.py | 134 +++++++++------------------------------- 1 file changed, 30 insertions(+), 104 deletions(-) diff --git a/lib/matplotlib/scale.py b/lib/matplotlib/scale.py index 8784ca495905..f6b0c985bae2 100644 --- a/lib/matplotlib/scale.py +++ b/lib/matplotlib/scale.py @@ -84,24 +84,6 @@ def get_transform(self): return IdentityTransform() -def _mask_non_positives(a): - """ - Return a Numpy array where all non-positive values are - replaced with NaNs. If there are no non-positive values, the - original array is returned. - """ - mask = a <= 0.0 - if mask.any(): - return np.where(mask, np.nan, a) - return a - - -def _clip_non_positives(a): - a = np.array(a, float) - a[a <= 0.0] = 1e-300 - return a - - class LogTransformBase(Transform): input_dims = 1 output_dims = 1 @@ -111,31 +93,35 @@ class LogTransformBase(Transform): def __init__(self, nonpos): Transform.__init__(self) if nonpos == 'mask': - self._handle_nonpos = _mask_non_positives + self._fill_value = np.nan else: - self._handle_nonpos = _clip_non_positives - - -class Log10Transform(LogTransformBase): - base = 10.0 + self._fill_value = 1e-300 def transform_non_affine(self, a): - a = self._handle_nonpos(a * 10.0) - return np.log10(a) - - def inverted(self): - return InvertedLog10Transform() + with np.errstate(invalid="ignore"): + a = np.where(a <= 0, self._fill_value, a) + return np.divide(np.log(a, out=a), np.log(self.base), out=a) -class InvertedLog10Transform(Transform): +class InvertedLogTransformBase(Transform): input_dims = 1 output_dims = 1 is_separable = True has_inverse = True - base = 10.0 def transform_non_affine(self, a): - return ma.power(10.0, a) / 10.0 + return ma.power(self.base, a) + + +class Log10Transform(LogTransformBase): + base = 10.0 + + def inverted(self): + return InvertedLog10Transform() + + +class InvertedLog10Transform(InvertedLogTransformBase): + base = 10.0 def inverted(self): return Log10Transform() @@ -144,24 +130,13 @@ def inverted(self): class Log2Transform(LogTransformBase): base = 2.0 - def transform_non_affine(self, a): - a = self._handle_nonpos(a * 2.0) - return np.log2(a) - def inverted(self): return InvertedLog2Transform() -class InvertedLog2Transform(Transform): - input_dims = 1 - output_dims = 1 - is_separable = True - has_inverse = True +class InvertedLog2Transform(InvertedLogTransformBase): base = 2.0 - def transform_non_affine(self, a): - return ma.power(2.0, a) / 2.0 - def inverted(self): return Log2Transform() @@ -169,63 +144,31 @@ def inverted(self): class NaturalLogTransform(LogTransformBase): base = np.e - def transform_non_affine(self, a): - a = self._handle_nonpos(a * np.e) - return np.log(a) - def inverted(self): return InvertedNaturalLogTransform() -class InvertedNaturalLogTransform(Transform): - input_dims = 1 - output_dims = 1 - is_separable = True - has_inverse = True +class InvertedNaturalLogTransform(InvertedLogTransformBase): base = np.e - def transform_non_affine(self, a): - return ma.power(np.e, a) / np.e - def inverted(self): return NaturalLogTransform() -class LogTransform(Transform): - input_dims = 1 - output_dims = 1 - is_separable = True - has_inverse = True - +class LogTransform(LogTransformBase): def __init__(self, base, nonpos): - Transform.__init__(self) + LogTransformBase.__init__(self, nonpos) self.base = base - if nonpos == 'mask': - self._handle_nonpos = _mask_non_positives - else: - self._handle_nonpos = _clip_non_positives - - def transform_non_affine(self, a): - a = self._handle_nonpos(a * self.base) - return np.log(a) / np.log(self.base) def inverted(self): return InvertedLogTransform(self.base) -class InvertedLogTransform(Transform): - input_dims = 1 - output_dims = 1 - is_separable = True - has_inverse = True - +class InvertedLogTransform(InvertedLogTransformBase): def __init__(self, base): - Transform.__init__(self) + InvertedLogTransformBase.__init__(self) self.base = base - def transform_non_affine(self, a): - return ma.power(self.base, a) / self.base - def inverted(self): return LogTransform(self.base) @@ -474,25 +417,6 @@ def get_transform(self): return self._transform -def _mask_non_logit(a): - """ - Return a Numpy array where all values outside ]0, 1[ are - replaced with NaNs. If all values are inside ]0, 1[, the original - array is returned. - """ - mask = (a <= 0.0) | (a >= 1.0) - if mask.any(): - return np.where(mask, np.nan, a) - return a - - -def _clip_non_logit(a): - a = np.array(a, float) - a[a <= 0.0] = 1e-300 - a[a >= 1.0] = 1 - 1e-300 - return a - - class LogitTransform(Transform): input_dims = 1 output_dims = 1 @@ -502,15 +426,17 @@ class LogitTransform(Transform): def __init__(self, nonpos): Transform.__init__(self) if nonpos == 'mask': - self._handle_nonpos = _mask_non_logit + self._fill_value = np.nan else: - self._handle_nonpos = _clip_non_logit + self._fill_value = 1e-300 self._nonpos = nonpos def transform_non_affine(self, a): """logit transform (base 10), masked or clipped""" - a = self._handle_nonpos(a) - return np.log10(1.0 * a / (1.0 - a)) + with np.errstate(invalid="ignore"): + a = np.select( + [a <= 0, a >= 1], [self._fill_value, 1 - self._fill_value], a) + return np.log10(a / (1 - a)) def inverted(self): return LogisticTransform(self._nonpos) From 7e0811d3dbc06f07bd9fcdb07cde59ca006fee65 Mon Sep 17 00:00:00 2001 From: Antony Lee Date: Sat, 5 Nov 2016 16:03:12 -0700 Subject: [PATCH 2/2] Fix slightly imprecise test image. --- .../baseline_images/test_axes/loglog.png | Bin 16914 -> 16944 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/lib/matplotlib/tests/baseline_images/test_axes/loglog.png b/lib/matplotlib/tests/baseline_images/test_axes/loglog.png index 351f6886425a22c38b0f91da62b3cdfae431a632..f65499fc572fb9f4be9e7ca7a1d35ef8055e8b7a 100644 GIT binary patch literal 16944 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 Bhb;gA literal 16914 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