Skip to content

Commit 32a6c87

Browse files
committed
MNT: refactor to have a new private method on wrappers
This will allow composition via Has-A with the parent owning the Container and being responsible for calling query once.
1 parent af8cef5 commit 32a6c87

File tree

1 file changed

+30
-12
lines changed

1 file changed

+30
-12
lines changed

data_prototype/wrappers.py

Lines changed: 30 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,9 @@ class ProxyWrapperBase:
9292
def draw(self, renderer):
9393
raise NotImplementedError
9494

95+
def _update_wrapped(self, data):
96+
raise NotImplementedError
97+
9598
def _query_and_transform(self, renderer, *, xunits: List[str], yunits: List[str]) -> Dict[str, Any]:
9699
"""
97100
Helper to centralize the data querying and python-side transforms
@@ -104,7 +107,7 @@ def _query_and_transform(self, renderer, *, xunits: List[str], yunits: List[str]
104107
"""
105108
# extract what we need to about the axes to query the data
106109
ax = self.axes
107-
if getattr(ax, '_axesfraction_to_data', None) is None:
110+
if getattr(ax, "_axesfraction_to_data", None) is None:
108111
ax._axesfraction_to_data = ax.transAxes - ax.transData
109112
# TODO do we want to trust the implicit renderer on the Axes?
110113
ax_bbox = ax.get_window_extent(renderer)
@@ -178,10 +181,14 @@ def __init__(self, data: DataContainer, nus=None, /, **kwargs):
178181

179182
@_stale_wrapper
180183
def draw(self, renderer):
181-
data = self._query_and_transform(renderer, xunits=["x"], yunits=["y"])
182-
self._wrapped_instance.set_data(data["x"], data["y"])
184+
self._update_wrapped(
185+
self._query_and_transform(renderer, xunits=["x"], yunits=["y"]),
186+
)
183187
return self._wrapped_instance.draw(renderer)
184188

189+
def _update_wrapped(self, data):
190+
self._wrapped_instance.set_data(data["x"], data["y"])
191+
185192

186193
class ImageWrapper(ProxyWrapper):
187194
_wrapped_class = _AxesImage
@@ -193,10 +200,14 @@ def __init__(self, data: DataContainer, nus=None, /, **kwargs):
193200

194201
@_stale_wrapper
195202
def draw(self, renderer):
196-
data = self._query_and_transform(renderer, xunits=["xextent"], yunits=["yextent"])
203+
data = self._update_wrapped(
204+
self._query_and_transform(renderer, xunits=["xextent"], yunits=["yextent"]),
205+
)
206+
return self._wrapped_instance.draw(renderer)
207+
208+
def _update_wrapped(self, data):
197209
self._wrapped_instance.set_array(data["image"])
198210
self._wrapped_instance.set_extent([*data["xextent"], *data["yextent"]])
199-
return self._wrapped_instance.draw(renderer)
200211

201212

202213
class StepWrapper(ProxyWrapper):
@@ -209,10 +220,14 @@ def __init__(self, data: DataContainer, nus=None, /, **kwargs):
209220

210221
@_stale_wrapper
211222
def draw(self, renderer):
212-
data = self._query_and_transform(renderer, xunits=["edges"], yunits=["density"])
213-
self._wrapped_instance.set_data(data["density"], data["edges"])
223+
self._update_wrapped(
224+
self._query_and_transform(renderer, xunits=["edges"], yunits=["density"]),
225+
)
214226
return self._wrapped_instance.draw(renderer)
215227

228+
def _update_wrapped(self, data):
229+
self._wrapped_instance.set_data(data["density"], data["edges"])
230+
216231

217232
@_forwarder(
218233
(
@@ -278,9 +293,15 @@ def __init__(self, data: DataContainer, nus=None, /, **kwargs):
278293

279294
@_stale_wrapper
280295
def draw(self, renderer):
281-
data = self._query_and_transform(
282-
renderer, xunits=["x", "xupper", "xlower"], yunits=["y", "yupper", "ylower"]
296+
self._update_wrapped(
297+
self._query_and_transform(
298+
renderer, xunits=["x", "xupper", "xlower"], yunits=["y", "yupper", "ylower"]
299+
),
283300
)
301+
for k, v in self._wrapped_instances.items():
302+
v.draw(renderer)
303+
304+
def _update_wrapped(self, data):
284305
self._wrapped_instances["l0"].set_data(data["x"], data["y"])
285306

286307
def set_or_hide(check_key, artist, xkey, ykey):
@@ -318,6 +339,3 @@ def set_or_hide(check_key, artist, xkey, ykey):
318339

319340
else:
320341
self._wrapped_instances["xbars"].set_visible(False)
321-
322-
for k, v in self._wrapped_instances.items():
323-
v.draw(renderer)

0 commit comments

Comments
 (0)