From a31be021f6bda8a8fe4d7d8f42fe366ec34ec0be Mon Sep 17 00:00:00 2001 From: Fabian Kloosterman Date: Sat, 13 Jan 2018 14:32:29 +0100 Subject: [PATCH 1/7] Added missing constructor default values. Added missing __str__ methods. --- lib/matplotlib/scale.py | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/lib/matplotlib/scale.py b/lib/matplotlib/scale.py index d9026a619212..21cf7823f0d2 100644 --- a/lib/matplotlib/scale.py +++ b/lib/matplotlib/scale.py @@ -93,7 +93,7 @@ class LogTransformBase(Transform): is_separable = True has_inverse = True - def __init__(self, nonpos): + def __init__(self, nonpos='mask'): Transform.__init__(self) self._clip = {"clip": True, "mask": False}[nonpos] @@ -114,6 +114,8 @@ def transform_non_affine(self, a): out[a <= 0] = -1000 return out + def __str__(self): + return "{}({!r})".format(type(self).__name__, "clip" if self._clip else "mask") class InvertedLogTransformBase(Transform): input_dims = 1 @@ -124,6 +126,9 @@ class InvertedLogTransformBase(Transform): def transform_non_affine(self, a): return ma.power(self.base, a) + def __str__(self): + return "{}()".format(type(self).__name__) + class Log10Transform(LogTransformBase): base = 10.0 @@ -168,7 +173,7 @@ def inverted(self): class LogTransform(LogTransformBase): - def __init__(self, base, nonpos): + def __init__(self, base, nonpos='mask'): LogTransformBase.__init__(self, nonpos) self.base = base @@ -448,7 +453,7 @@ class LogitTransform(Transform): is_separable = True has_inverse = True - def __init__(self, nonpos): + def __init__(self, nonpos='mask'): Transform.__init__(self) self._nonpos = nonpos self._clip = {"clip": True, "mask": False}[nonpos] @@ -465,6 +470,9 @@ def transform_non_affine(self, a): def inverted(self): return LogisticTransform(self._nonpos) + def __str__(self): + return "{}({!r})".format(type(self).__name__, "clip" if self._clip else "mask") + class LogisticTransform(Transform): input_dims = 1 @@ -483,6 +491,9 @@ def transform_non_affine(self, a): def inverted(self): return LogitTransform(self._nonpos) + def __str__(self): + return "{}({!r})".format(type(self).__name__, self._nonpos) + class LogitScale(ScaleBase): """ From b2dfa40da9edff13a1528e531d0e0742738f6c72 Mon Sep 17 00:00:00 2001 From: Fabian Kloosterman Date: Sat, 13 Jan 2018 14:43:27 +0100 Subject: [PATCH 2/7] Added tests. --- lib/matplotlib/tests/test_scale.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/lib/matplotlib/tests/test_scale.py b/lib/matplotlib/tests/test_scale.py index 9b78377b26bc..87c33ed5e71b 100644 --- a/lib/matplotlib/tests/test_scale.py +++ b/lib/matplotlib/tests/test_scale.py @@ -74,6 +74,17 @@ def test_extra_kwargs_raise(): ax.set_yscale('log', nonpos='mask') +def test_logscale_invert_transform(): + fig, ax = plt.subplots() + ax.set_yscale('log') + tform = ax.transData.inverted() + +def test_logscale_transform_repr(): + fig, ax = plt.subplots() + ax.set_yscale('log') + s = repr(ax.transData) + + @image_comparison(baseline_images=['logscale_nonpos_values'], remove_text=True, extensions=['png'], style='mpl20') def test_logscale_nonpos_values(): From b5652bf93aabc9d249f743e77fd522e267837492 Mon Sep 17 00:00:00 2001 From: Fabian Kloosterman Date: Sat, 13 Jan 2018 14:49:50 +0100 Subject: [PATCH 3/7] fix test --- lib/matplotlib/tests/test_scale.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/matplotlib/tests/test_scale.py b/lib/matplotlib/tests/test_scale.py index 87c33ed5e71b..4bd2b5fca5b7 100644 --- a/lib/matplotlib/tests/test_scale.py +++ b/lib/matplotlib/tests/test_scale.py @@ -77,7 +77,8 @@ def test_extra_kwargs_raise(): def test_logscale_invert_transform(): fig, ax = plt.subplots() ax.set_yscale('log') - tform = ax.transData.inverted() + # get transformation from data to axes + tform = (ax.transAxes + ax.transData.inverted()).inverted() def test_logscale_transform_repr(): fig, ax = plt.subplots() From 8418f09fe91a27bbd3df1d5afe24992344b7476e Mon Sep 17 00:00:00 2001 From: Fabian Kloosterman Date: Thu, 18 Jan 2018 23:00:50 +0100 Subject: [PATCH 4/7] PEP8 compatibility fixes. Changed nonpos default for LogTransform. --- lib/matplotlib/scale.py | 11 +++++++---- lib/matplotlib/tests/test_scale.py | 1 + 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/lib/matplotlib/scale.py b/lib/matplotlib/scale.py index 21cf7823f0d2..9d1054fd9a86 100644 --- a/lib/matplotlib/scale.py +++ b/lib/matplotlib/scale.py @@ -93,7 +93,7 @@ class LogTransformBase(Transform): is_separable = True has_inverse = True - def __init__(self, nonpos='mask'): + def __init__(self, nonpos='clip'): Transform.__init__(self) self._clip = {"clip": True, "mask": False}[nonpos] @@ -115,7 +115,9 @@ def transform_non_affine(self, a): return out def __str__(self): - return "{}({!r})".format(type(self).__name__, "clip" if self._clip else "mask") + return "{}({!r})".format(type(self).__name__, + "clip" if self._clip else "mask") + class InvertedLogTransformBase(Transform): input_dims = 1 @@ -173,7 +175,7 @@ def inverted(self): class LogTransform(LogTransformBase): - def __init__(self, base, nonpos='mask'): + def __init__(self, base, nonpos='clip'): LogTransformBase.__init__(self, nonpos) self.base = base @@ -471,7 +473,8 @@ def inverted(self): return LogisticTransform(self._nonpos) def __str__(self): - return "{}({!r})".format(type(self).__name__, "clip" if self._clip else "mask") + return "{}({!r})".format(type(self).__name__, + "clip" if self._clip else "mask") class LogisticTransform(Transform): diff --git a/lib/matplotlib/tests/test_scale.py b/lib/matplotlib/tests/test_scale.py index 4bd2b5fca5b7..d95e8e18d744 100644 --- a/lib/matplotlib/tests/test_scale.py +++ b/lib/matplotlib/tests/test_scale.py @@ -80,6 +80,7 @@ def test_logscale_invert_transform(): # get transformation from data to axes tform = (ax.transAxes + ax.transData.inverted()).inverted() + def test_logscale_transform_repr(): fig, ax = plt.subplots() ax.set_yscale('log') From c4f25e9d9a562eff2beb8a7196fc371fbffce68d Mon Sep 17 00:00:00 2001 From: Fabian Kloosterman Date: Fri, 26 Jan 2018 11:44:08 +0100 Subject: [PATCH 5/7] enhanced tests --- lib/matplotlib/tests/test_scale.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lib/matplotlib/tests/test_scale.py b/lib/matplotlib/tests/test_scale.py index d95e8e18d744..20f26156729f 100644 --- a/lib/matplotlib/tests/test_scale.py +++ b/lib/matplotlib/tests/test_scale.py @@ -2,6 +2,7 @@ from matplotlib.testing.decorators import image_comparison import matplotlib.pyplot as plt +from matplotlib.scale import Log10Transform, InvertedLog10Transform import numpy as np import io import pytest @@ -80,12 +81,19 @@ def test_logscale_invert_transform(): # get transformation from data to axes tform = (ax.transAxes + ax.transData.inverted()).inverted() + # direct test of log transform inversion + assert isinstance(Log10Transform().inverted(), InvertedLog10Transform) def test_logscale_transform_repr(): + # check that repr of log transform succeeds fig, ax = plt.subplots() ax.set_yscale('log') s = repr(ax.transData) + # check that repr of log transform returns correct string + s = repr(Log10Transform(nonpos='clip')) + assert s == "Log10Transform('clip')" + @image_comparison(baseline_images=['logscale_nonpos_values'], remove_text=True, extensions=['png'], style='mpl20') From aea1d94b6a0c1d6ef90d82cd1723e991cb2d8cc2 Mon Sep 17 00:00:00 2001 From: Fabian Kloosterman Date: Fri, 26 Jan 2018 13:46:35 +0100 Subject: [PATCH 6/7] fixed errors exposed by checks on PR --- lib/matplotlib/tests/test_scale.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/matplotlib/tests/test_scale.py b/lib/matplotlib/tests/test_scale.py index 20f26156729f..d252d04fec7b 100644 --- a/lib/matplotlib/tests/test_scale.py +++ b/lib/matplotlib/tests/test_scale.py @@ -84,6 +84,7 @@ def test_logscale_invert_transform(): # direct test of log transform inversion assert isinstance(Log10Transform().inverted(), InvertedLog10Transform) + def test_logscale_transform_repr(): # check that repr of log transform succeeds fig, ax = plt.subplots() @@ -92,7 +93,7 @@ def test_logscale_transform_repr(): # check that repr of log transform returns correct string s = repr(Log10Transform(nonpos='clip')) - assert s == "Log10Transform('clip')" + assert s == "Log10Transform({!r})".format('clip') @image_comparison(baseline_images=['logscale_nonpos_values'], remove_text=True, From dc1f60bfd3a375a3f52c062da4ef4a29c14fd33c Mon Sep 17 00:00:00 2001 From: Fabian Kloosterman Date: Fri, 26 Jan 2018 14:15:55 +0100 Subject: [PATCH 7/7] fixed py27 unicode test error. --- lib/matplotlib/tests/test_scale.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/matplotlib/tests/test_scale.py b/lib/matplotlib/tests/test_scale.py index d252d04fec7b..c50a0a89609c 100644 --- a/lib/matplotlib/tests/test_scale.py +++ b/lib/matplotlib/tests/test_scale.py @@ -1,4 +1,4 @@ -from __future__ import print_function +from __future__ import print_function, unicode_literals from matplotlib.testing.decorators import image_comparison import matplotlib.pyplot as plt