@@ -79,6 +79,17 @@ def limit_range_for_scale(self, vmin, vmax, minpos):
7979 return vmin , vmax
8080
8181
82+ class _CopyableTransformMixin ():
83+ """
84+ Mixin to support copy and deep copy on transforms. This alows scales,
85+ and hence norms, to be copyable.
86+ """
87+ def __deepcopy__ (self , memo ):
88+ return self .frozen ()
89+
90+ __copy__ = __deepcopy__
91+
92+
8293class LinearScale (ScaleBase ):
8394 """
8495 The default linear scale.
@@ -113,9 +124,9 @@ def get_transform(self):
113124 return IdentityTransform ()
114125
115126
116- class FuncTransform (Transform ):
127+ class FuncTransform (_CopyableTransformMixin , Transform ):
117128 """
118- A simple transform that takes and arbitrary function for the
129+ A transform that takes and arbitrary function for the
119130 forward and inverse transform.
120131 """
121132
@@ -191,7 +202,7 @@ def set_default_locators_and_formatters(self, axis):
191202 axis .set_minor_locator (NullLocator ())
192203
193204
194- class LogTransform (Transform ):
205+ class LogTransform (_CopyableTransformMixin , Transform ):
195206 input_dims = output_dims = 1
196207
197208 @_api .rename_parameter ("3.3" , "nonpos" , "nonpositive" )
@@ -233,7 +244,7 @@ def inverted(self):
233244 return InvertedLogTransform (self .base )
234245
235246
236- class InvertedLogTransform (Transform ):
247+ class InvertedLogTransform (_CopyableTransformMixin , Transform ):
237248 input_dims = output_dims = 1
238249
239250 def __init__ (self , base ):
@@ -359,7 +370,7 @@ def get_transform(self):
359370 return self ._transform
360371
361372
362- class SymmetricalLogTransform (Transform ):
373+ class SymmetricalLogTransform (_CopyableTransformMixin , Transform ):
363374 input_dims = output_dims = 1
364375
365376 def __init__ (self , base , linthresh , linscale ):
@@ -391,7 +402,7 @@ def inverted(self):
391402 self .linscale )
392403
393404
394- class InvertedSymmetricalLogTransform (Transform ):
405+ class InvertedSymmetricalLogTransform (_CopyableTransformMixin , Transform ):
395406 input_dims = output_dims = 1
396407
397408 def __init__ (self , base , linthresh , linscale ):
@@ -494,7 +505,7 @@ def get_transform(self):
494505 return self ._transform
495506
496507
497- class LogitTransform (Transform ):
508+ class LogitTransform (_CopyableTransformMixin , Transform ):
498509 input_dims = output_dims = 1
499510
500511 @_api .rename_parameter ("3.3" , "nonpos" , "nonpositive" )
@@ -520,7 +531,7 @@ def __str__(self):
520531 return "{}({!r})" .format (type (self ).__name__ , self ._nonpositive )
521532
522533
523- class LogisticTransform (Transform ):
534+ class LogisticTransform (_CopyableTransformMixin , Transform ):
524535 input_dims = output_dims = 1
525536
526537 @_api .rename_parameter ("3.3" , "nonpos" , "nonpositive" )
0 commit comments