@@ -47,6 +47,15 @@ class _Aritst(Protocol):
47
47
axes : _Axes
48
48
49
49
50
+ def _make_identity (k ):
51
+ def identity (** kwargs ):
52
+ (_ ,) = kwargs .values ()
53
+ return _
54
+
55
+ identity .__signature__ = inspect .Signature ([inspect .Parameter (k , inspect .Parameter .POSITIONAL_OR_KEYWORD )])
56
+ return identity
57
+
58
+
50
59
def _forwarder (forwards , cls = None ):
51
60
if cls is None :
52
61
return partial (_forwarder , forwards )
@@ -90,6 +99,7 @@ class ProxyWrapperBase:
90
99
axes : _Axes
91
100
stale : bool
92
101
required_keys : set = set ()
102
+ expected_keys : set = set ()
93
103
94
104
@_stale_wrapper
95
105
def draw (self , renderer ):
@@ -143,8 +153,6 @@ def _query_and_transform(self, renderer, *, xunits: List[str], yunits: List[str]
143
153
for k , (nu , sig ) in self ._sigs .items ():
144
154
to_pass = set (sig .parameters )
145
155
transformed_data [k ] = nu (** {k : data [k ] for k in to_pass })
146
- for k , v in data .items ():
147
- transformed_data .setdefault (k , v )
148
156
149
157
self ._cache [cache_key ] = transformed_data
150
158
return transformed_data
@@ -156,16 +164,11 @@ def __init__(self, data, nus, **kwargs):
156
164
# TODO make sure mutating this will invalidate the cache!
157
165
self ._nus = nus or {}
158
166
for k in self .required_keys :
159
-
160
- def identity (** kwargs ):
161
- (_ ,) = kwargs .values ()
162
- return _
163
-
164
- identity .__signature__ = inspect .Signature (
165
- [inspect .Parameter (k , inspect .Parameter .POSITIONAL_OR_KEYWORD )]
166
- )
167
-
168
- self ._nus .setdefault (k , identity )
167
+ self ._nus .setdefault (k , _make_identity (k ))
168
+ desc = data .describe ()
169
+ for k in self .expected_keys :
170
+ if k in desc :
171
+ self ._nus .setdefault (k , _make_identity (k ))
169
172
self ._sigs = {k : (nu , inspect .signature (nu )) for k , nu in self ._nus .items ()}
170
173
self .stale = True
171
174
@@ -325,6 +328,9 @@ def get_children(self):
325
328
326
329
327
330
class ErrorbarWrapper (MultiProxyWrapper ):
331
+ required_keys = {"x" , "y" }
332
+ expected_keys = {f"{ axis } { dirc } " for axis in ["x" , "y" ] for dirc in ["upper" , "lower" ]}
333
+
328
334
def __init__ (self , data : DataContainer , nus = None , / , ** kwargs ):
329
335
super ().__init__ (data , nus )
330
336
# TODO all of the kwarg teasing apart that is needed
0 commit comments