17
17
class _ClassMethodFn :
18
18
def __init__ (self , attr : str , ** kwargs : Any ) -> None :
19
19
self .attr = attr
20
+ self .kwargs = kwargs
20
21
21
22
def __call__ (self , coll : awkward .Array , * args : Any , ** kwargs : Any ) -> awkward .Array :
22
- return getattr (coll , self .attr )(* args , ** kwargs )
23
+ allkwargs = self .kwargs
24
+ allkwargs .update (kwargs )
25
+ return getattr (coll , self .attr )(* args , ** allkwargs )
23
26
24
27
25
28
@awkward .mixin_class (behavior )
@@ -35,12 +38,35 @@ def add_kind(cls, kind: str):
35
38
"""
36
39
cls ._systematic_kinds .add (kind )
37
40
38
- def _ensure_systematics (self ):
41
+ def _ensure_systematics (self , _dask_array_ = None ):
39
42
"""
40
43
Make sure that the parent object always has a field called '__systematics__'.
41
44
"""
42
45
if "__systematics__" not in awkward .fields (self ):
43
- self ["__systematics__" ] = {}
46
+ if _dask_array_ is not None :
47
+ x = awkward .Array (
48
+ awkward .Array ([{}]).layout .to_typetracer (forget_length = True )
49
+ )
50
+ _dask_array_ ._meta ["__systematics__" ] = x
51
+
52
+ def add_systematics_hack (array ):
53
+ if awkward .backend (array ) == "typetracer" :
54
+ array ["__systematics__" ] = x
55
+ return array
56
+ array ["__systematics__" ] = {}
57
+ return array
58
+
59
+ temp = dask_awkward .map_partitions (
60
+ add_systematics_hack ,
61
+ _dask_array_ ,
62
+ label = "ensure-systematics" ,
63
+ meta = _dask_array_ ._meta ,
64
+ )
65
+ _dask_array_ ._meta = temp ._meta
66
+ _dask_array_ ._dask = temp ._dask
67
+ _dask_array_ ._name = temp ._name
68
+ else :
69
+ self ["__systematics__" ] = {}
44
70
45
71
@property
46
72
def systematics (self ):
@@ -109,11 +135,13 @@ def add_systematic(
109
135
print ("vf " , varying_function )
110
136
print ("da " , _dask_array_ , type (_dask_array_ ))
111
137
_dask_array_ .map_partitions (
112
- _ClassMethodFn ("add_systematic" ),
113
- name ,
114
- kind ,
115
- what ,
116
- varying_function ,
138
+ _ClassMethodFn (
139
+ "add_systematic" ,
140
+ name = name ,
141
+ kind = kind ,
142
+ varying_function = varying_function ,
143
+ ),
144
+ what = what ,
117
145
)
118
146
119
147
self ._ensure_systematics ()
0 commit comments