|
1 | | -import six |
| 1 | +import functools |
2 | 2 |
|
3 | 3 | from matplotlib import ( |
4 | 4 | artist as martist, collections as mcoll, transforms as mtransforms, |
@@ -40,32 +40,21 @@ def cla(self): |
40 | 40 | self.yaxis.set_zorder(2.5) |
41 | 41 |
|
42 | 42 |
|
43 | | -_parasite_axes_classes = {} |
| 43 | +@functools.lru_cache(None) |
44 | 44 | def parasite_axes_class_factory(axes_class=None): |
45 | 45 | if axes_class is None: |
46 | 46 | axes_class = Axes |
47 | 47 |
|
48 | | - new_class = _parasite_axes_classes.get(axes_class) |
49 | | - if new_class is None: |
50 | | - def _get_base_axes_attr(self, attrname): |
51 | | - return getattr(axes_class, attrname) |
| 48 | + def _get_base_axes_attr(self, attrname): |
| 49 | + return getattr(axes_class, attrname) |
52 | 50 |
|
53 | | - new_class = type(str("%sParasite" % (axes_class.__name__)), |
54 | | - (ParasiteAxesBase, axes_class), |
55 | | - {'_get_base_axes_attr': _get_base_axes_attr}) |
56 | | - _parasite_axes_classes[axes_class] = new_class |
| 51 | + return type("%sParasite" % axes_class.__name__, |
| 52 | + (ParasiteAxesBase, axes_class), |
| 53 | + {'_get_base_axes_attr': _get_base_axes_attr}) |
57 | 54 |
|
58 | | - return new_class |
59 | 55 |
|
60 | 56 | ParasiteAxes = parasite_axes_class_factory() |
61 | 57 |
|
62 | | -# #class ParasiteAxes(ParasiteAxesBase, Axes): |
63 | | - |
64 | | -# @classmethod |
65 | | -# def _get_base_axes_attr(cls, attrname): |
66 | | -# return getattr(Axes, attrname) |
67 | | - |
68 | | - |
69 | 58 |
|
70 | 59 | class ParasiteAxesAuxTransBase(object): |
71 | 60 | def __init__(self, parent_axes, aux_transform, viewlim_mode=None, |
@@ -189,30 +178,22 @@ def apply_aspect(self, position=None): |
189 | 178 | #ParasiteAxes.apply_aspect() |
190 | 179 |
|
191 | 180 |
|
192 | | - |
193 | | -_parasite_axes_auxtrans_classes = {} |
| 181 | +@functools.lru_cache(None) |
194 | 182 | def parasite_axes_auxtrans_class_factory(axes_class=None): |
195 | 183 | if axes_class is None: |
196 | 184 | parasite_axes_class = ParasiteAxes |
197 | 185 | elif not issubclass(axes_class, ParasiteAxesBase): |
198 | 186 | parasite_axes_class = parasite_axes_class_factory(axes_class) |
199 | 187 | else: |
200 | 188 | parasite_axes_class = axes_class |
201 | | - |
202 | | - new_class = _parasite_axes_auxtrans_classes.get(parasite_axes_class) |
203 | | - if new_class is None: |
204 | | - new_class = type(str("%sParasiteAuxTrans" % (parasite_axes_class.__name__)), |
205 | | - (ParasiteAxesAuxTransBase, parasite_axes_class), |
206 | | - {'_parasite_axes_class': parasite_axes_class, |
207 | | - 'name': 'parasite_axes'}) |
208 | | - _parasite_axes_auxtrans_classes[parasite_axes_class] = new_class |
209 | | - |
210 | | - return new_class |
211 | | - |
212 | | - |
213 | | -ParasiteAxesAuxTrans = parasite_axes_auxtrans_class_factory(axes_class=ParasiteAxes) |
| 189 | + return type("%sParasiteAuxTrans" % parasite_axes_class.__name__, |
| 190 | + (ParasiteAxesAuxTransBase, parasite_axes_class), |
| 191 | + {'_parasite_axes_class': parasite_axes_class, |
| 192 | + 'name': 'parasite_axes'}) |
214 | 193 |
|
215 | 194 |
|
| 195 | +ParasiteAxesAuxTrans = parasite_axes_auxtrans_class_factory( |
| 196 | + axes_class=ParasiteAxes) |
216 | 197 |
|
217 | 198 |
|
218 | 199 | def _get_handles(ax): |
@@ -391,33 +372,29 @@ def get_tightbbox(self, renderer, call_axes_locator=True): |
391 | 372 | return _bbox |
392 | 373 |
|
393 | 374 |
|
394 | | -_host_axes_classes = {} |
| 375 | +@functools.lru_cache(None) |
395 | 376 | def host_axes_class_factory(axes_class=None): |
396 | 377 | if axes_class is None: |
397 | 378 | axes_class = Axes |
398 | 379 |
|
399 | | - new_class = _host_axes_classes.get(axes_class) |
400 | | - if new_class is None: |
401 | | - def _get_base_axes(self): |
402 | | - return axes_class |
| 380 | + def _get_base_axes(self): |
| 381 | + return axes_class |
403 | 382 |
|
404 | | - def _get_base_axes_attr(self, attrname): |
405 | | - return getattr(axes_class, attrname) |
| 383 | + def _get_base_axes_attr(self, attrname): |
| 384 | + return getattr(axes_class, attrname) |
406 | 385 |
|
407 | | - new_class = type(str("%sHostAxes" % (axes_class.__name__)), |
408 | | - (HostAxesBase, axes_class), |
409 | | - {'_get_base_axes_attr': _get_base_axes_attr, |
410 | | - '_get_base_axes': _get_base_axes}) |
| 386 | + return type("%sHostAxes" % axes_class.__name__, |
| 387 | + (HostAxesBase, axes_class), |
| 388 | + {'_get_base_axes_attr': _get_base_axes_attr, |
| 389 | + '_get_base_axes': _get_base_axes}) |
411 | 390 |
|
412 | | - _host_axes_classes[axes_class] = new_class |
413 | | - |
414 | | - return new_class |
415 | 391 |
|
416 | 392 | def host_subplot_class_factory(axes_class): |
417 | 393 | host_axes_class = host_axes_class_factory(axes_class=axes_class) |
418 | 394 | subplot_host_class = subplot_class_factory(host_axes_class) |
419 | 395 | return subplot_host_class |
420 | 396 |
|
| 397 | + |
421 | 398 | HostAxes = host_axes_class_factory(axes_class=Axes) |
422 | 399 | SubplotHost = subplot_class_factory(HostAxes) |
423 | 400 |
|
|
0 commit comments