Skip to content

Commit ca6270b

Browse files
committed
get _ensure_systematics daskified
1 parent 066f040 commit ca6270b

File tree

1 file changed

+36
-8
lines changed

1 file changed

+36
-8
lines changed

Diff for: coffea/nanoevents/methods/base.py

+36-8
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,12 @@
1717
class _ClassMethodFn:
1818
def __init__(self, attr: str, **kwargs: Any) -> None:
1919
self.attr = attr
20+
self.kwargs = kwargs
2021

2122
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)
2326

2427

2528
@awkward.mixin_class(behavior)
@@ -35,12 +38,35 @@ def add_kind(cls, kind: str):
3538
"""
3639
cls._systematic_kinds.add(kind)
3740

38-
def _ensure_systematics(self):
41+
def _ensure_systematics(self, _dask_array_=None):
3942
"""
4043
Make sure that the parent object always has a field called '__systematics__'.
4144
"""
4245
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__"] = {}
4470

4571
@property
4672
def systematics(self):
@@ -109,11 +135,13 @@ def add_systematic(
109135
print("vf ", varying_function)
110136
print("da ", _dask_array_, type(_dask_array_))
111137
_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,
117145
)
118146

119147
self._ensure_systematics()

0 commit comments

Comments
 (0)