Determine the necessary dependencies to produce `output_blocks`. This method does not require graph materialization.
(self, output_blocks)
| 655 | return hasattr(self, "_cached_dict") |
| 656 | |
| 657 | def _cull_dependencies(self, output_blocks): |
| 658 | """Determine the necessary dependencies to produce `output_blocks`. |
| 659 | |
| 660 | This method does not require graph materialization. |
| 661 | """ |
| 662 | |
| 663 | # Check `concatenate` option |
| 664 | concatenate = None |
| 665 | if self.concatenate is True: |
| 666 | from dask.array.core import concatenate_axes as concatenate |
| 667 | |
| 668 | # Generate coordinate map |
| 669 | coord_maps, concat_axes, dummies = _get_coord_mapping( |
| 670 | self.dims, |
| 671 | self.output_indices, |
| 672 | self.numblocks, |
| 673 | self.indices, |
| 674 | concatenate, |
| 675 | ) |
| 676 | |
| 677 | # Gather constant dependencies (for all output keys) |
| 678 | const_deps = set() |
| 679 | for arg, _ in self.indices: |
| 680 | if isinstance(arg, TaskRef): |
| 681 | const_deps.add(arg.key) |
| 682 | |
| 683 | # Get dependencies for each output block |
| 684 | key_deps = {} |
| 685 | for out_coords in output_blocks: |
| 686 | deps = set() |
| 687 | coords = out_coords + dummies |
| 688 | for cmap, axes, (arg, ind) in zip(coord_maps, concat_axes, self.indices): |
| 689 | if ind is not None and arg not in self.io_deps: |
| 690 | arg_coords = tuple(coords[c] for c in cmap) |
| 691 | if axes: |
| 692 | tups = _lol_product((arg,), arg_coords) |
| 693 | deps.update(flatten(tups)) |
| 694 | if concatenate: |
| 695 | tups = (concatenate, tups, axes) |
| 696 | else: |
| 697 | tups = (arg,) + arg_coords |
| 698 | deps.add(tups) |
| 699 | key_deps[(self.output,) + out_coords] = deps | const_deps |
| 700 | |
| 701 | # Add valid-key dependencies from io_deps |
| 702 | for key, io_dep in self.io_deps.items(): |
| 703 | if io_dep.produces_keys: |
| 704 | for out_coords in output_blocks: |
| 705 | key = (self.output,) + out_coords |
| 706 | valid_key_dep = io_dep[out_coords] |
| 707 | if isinstance(valid_key_dep, TaskRef): |
| 708 | valid_key_dep = valid_key_dep.key |
| 709 | key_deps[key] |= {valid_key_dep} |
| 710 | |
| 711 | return key_deps |
| 712 | |
| 713 | def _cull(self, output_blocks): |
| 714 | return Blockwise( |
no test coverage detected