Skip to content

Commit 802ece7

Browse files
committed
bugfixes
1 parent 8d31b85 commit 802ece7

File tree

2 files changed

+29
-27
lines changed

2 files changed

+29
-27
lines changed

dask/graph_manipulation.py

Lines changed: 25 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,7 @@ def _bind_one(
228228
seed: Hashable,
229229
) -> T:
230230
try:
231-
name = get_collection_name(child)
231+
prev_coll_name = get_collection_name(child)
232232
except KeyError:
233233
return child # Collection with no keys; e.g. Array of size 0
234234

@@ -241,11 +241,11 @@ def _bind_one(
241241
all_keys = dsk.get_all_external_keys()
242242
else:
243243
dsk = ensure_dict(dsk)
244-
prev_layers = {name: dsk}
245-
prev_deps = {name: set()}
244+
prev_layers = {prev_coll_name: dsk}
245+
prev_deps = {prev_coll_name: set()}
246246
all_keys = dsk.keys()
247247

248-
replace_keys = all_keys - omit_keys
248+
clone_keys = all_keys - omit_keys
249249

250250
if blocker is not None:
251251
blocker_key = blocker.key
@@ -259,52 +259,53 @@ def _bind_one(
259259
try:
260260
deps_to_clone = set(child.__dask_layers__())
261261
except AttributeError:
262-
deps_to_clone = {name}
262+
deps_to_clone = {prev_coll_name}
263263
deps_to_copy_verbatim = set()
264264

265265
while deps_to_clone:
266-
name = deps_to_clone.pop()
267-
new_name = clone_key(name, seed=seed)
268-
if new_name in new_layers:
266+
prev_layer_name = deps_to_clone.pop()
267+
new_layer_name = clone_key(prev_layer_name, seed=seed)
268+
if new_layer_name in new_layers:
269269
continue
270270

271-
layer = prev_layers[name]
272-
layer_deps = prev_deps[name]
271+
layer = prev_layers[prev_layer_name]
272+
layer_deps = prev_deps[prev_layer_name]
273273
layer_deps_to_omit = layer_deps & omit_layers
274274
layer_deps_to_clone = layer_deps - omit_layers
275275
deps_to_clone |= layer_deps_to_clone
276276
deps_to_copy_verbatim |= layer_deps_to_omit
277277

278-
omit_keys_from_layers = {
279-
key
280-
for dep in layer_deps_to_omit
281-
for key in new_layers[dep].get_output_keys()
282-
}
283-
new_layers[new_name], bound = layer.clone(
284-
keys=replace_keys - omit_keys_from_layers,
278+
layer_clone_keys = clone_keys.copy()
279+
for dep in layer_deps_to_omit:
280+
layer_clone_keys -= new_layers[dep].get_output_keys()
281+
282+
new_layers[new_layer_name], bound = layer.clone(
283+
keys=layer_clone_keys,
285284
seed=seed,
286285
bind_to=blocker_key,
287286
)
288-
new_deps[new_name] = {
287+
new_deps[new_layer_name] = {
289288
clone_key(dep, seed=seed) for dep in layer_deps_to_clone
290289
} | layer_deps_to_omit
291290
if bound:
292-
new_deps[new_name].add(blocker_key)
291+
new_deps[new_layer_name].add(blocker_key)
293292

294293
# Add the layers of the collections from omit from child.dsk. Note that, when
295294
# assume_layers=False, it would be unsafe to simply do HighLevelGraph.merge(dsk,
296295
# omit[i].dsk). Also, collections in omit may or may not be parents of this specific
297296
# child, or of any children at all.
298297
while deps_to_copy_verbatim:
299-
name = deps_to_clone.pop()
300-
layer_deps = prev_deps[name]
298+
layer_name = deps_to_clone.pop()
299+
layer_deps = prev_deps[layer_name]
301300
deps_to_copy_verbatim |= layer_deps
302-
new_deps[name] = layer_deps
303-
new_layers[name] = prev_layers[name]
301+
new_deps[layer_name] = layer_deps
302+
new_layers[layer_name] = prev_layers[layer_name]
304303

305304
rebuild, args = child.__dask_postpersist__()
306305
return rebuild(
307-
HighLevelGraph(new_layers, new_deps), *args, name=clone_key(name, seed)
306+
HighLevelGraph(new_layers, new_deps),
307+
*args,
308+
name=clone_key(prev_coll_name, seed),
308309
)
309310

310311

dask/highlevelgraph.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -246,11 +246,12 @@ def clone_value(o):
246246
return {k: clone_value(v) for k, v in o.items()}
247247
else:
248248
try:
249-
if o in keys:
250-
is_leaf = False
251-
return clone_key(o, seed)
249+
if o not in keys:
250+
return o
252251
except TypeError:
253252
return o
253+
is_leaf = False
254+
return clone_key(o, seed)
254255

255256
dsk_new = {}
256257
bound = False

0 commit comments

Comments
 (0)