class_docstr: Tensor Operation
  
  This is a lazily constructed mapping for tensor operation graphs.
  This defines a dictionary using an operation and an indexing pattern.
  It is built for many operations like elementwise, transpose, tensordot, and
  so on.  We choose to keep these as symbolic mappings rather than raw
  dictionaries because we are able to fuse them during optimization,
  sometimes resulting in much lower overhead.
  
  Parameters
  ----------
  output: str
      The name of the output collection.  Used in keynames
  output_indices: tuple
      The output indices, like ``('i', 'j', 'k')`` used to determine the
      structure of the block computations
  dsk: dict
      A small graph to apply per-output-block.  May include keys from the
      input indices.
  indices: tuple[tuple[str, tuple[str, ...] | None], ...]
      An ordered mapping from input key name, like ``'x'``
      to input indices, like ``('i', 'j')``
      Or includes literals, which have ``None`` for an index value.
      In place of input-key names, the first tuple element may also be a
      ``BlockwiseDep`` object.
  numblocks: Mapping[key, Sequence[int]]
      Number of blocks along each dimension for each input
  concatenate: bool
      Whether or not to pass contracted dimensions as a list of inputs or a
      single input to the block function
  new_axes: Mapping
      New index dimensions that may have been created and their size,
      e.g. ``{'j': 2, 'k': 3}``
  output_blocks: set[tuple[int, ...]]
      Specify a specific set of required output blocks. Since the graph
      will only contain the necessary tasks to generate these outputs,
      this kwarg can be used to "cull" the abstract layer (without needing
      to materialize the low-level graph).
  annotations: dict (optional)
      Layer annotations
  io_deps: dict[str, BlockwiseDep] (optional)
      Dictionary containing the mapping between "place-holder" collection
      keys and ``BlockwiseDep``-based objects.
      **WARNING**: This argument should only be used internally (for culling,
      fusion and cloning of existing Blockwise layers). Explicit use of this
      argument will be deprecated in the future.
  
  See Also
  --------
  dask.blockwise.blockwise
  dask.array.blockwise
class_docstr_tok: ["Tensor","Operation","This","is","a","lazily","constructed","mapping","for","tensor","operation","graphs",".","This","defines","a","dictionary","using","an","operation","and","an","indexing","pattern",".","It","is","built","for","many","operations","like","elementwise",",","transpose",",","tensordot",",","and","so","on",".","We","choose","to","keep","these","as","symbolic","mappings","rather","than","raw","dictionaries","because","we","are","able","to","fuse","them","during","optimization",",","sometimes","resulting","in","much","lower","overhead",".","Parameters","--","--","--","--","--","output",":","str","The","name","of","the","output","collection",".","Used","in","keynames","output_indices",":","tuple","The","output","indices",",","like","``","(","'","i","'",",","'","j","'",",","'","k","'",")","``","used","to","determine","the","structure","of","the","block","computations","dsk",":","dict","A","small","graph","to","apply","per-output-block",".","May","include","keys","from","the","input","indices",".","indices",":","tuple","[","tuple","[","str",",","tuple","[","str",",","...","]","|","None","]",",","...","]","An","ordered","mapping","from","input","key","name",",","like","``","'","x","'","``","to","input","indices",",","like","``","(","'","i","'",",","'","j","'",")","``","Or","includes","literals",",","which","have","``","None","``","for","an","index","value",".","In","place","of","input-key","names",",","the","first","tuple","element","may","also","be","a","``","BlockwiseDep","``","object",".","numblocks",":","Mapping","[","key",",","Sequence","[","int","]","]","Number","of","blocks","along","each","dimension","for","each","input","concatenate",":","bool","Whether","or","not","to","pass","contracted","dimensions","as","a","list","of","inputs","or","a","single","input","to","the","block","function","new_axes",":","Mapping","New","index","dimensions","that","may","have","been","created","and","their","size",",","e.g",".","``","{","'","j","'",":","2",",","'","k","'",":","3","}","``","output_blocks",":","set","[","tuple","[","int",",","...","]","]","Specify","a","specific","set","of","required","output","blocks",".","Since","the","graph","will","only","contain","the","necessary","tasks","to","generate","these","outputs",",","this","kwarg","can","be","used","to","``","cull","''","the","abstract","layer","(","without","needing","to","materialize","the","low-level","graph",")",".","annotations",":","dict","(","optional",")","Layer","annotations","io_deps",":","dict","[","str",",","BlockwiseDep","]","(","optional",")","Dictionary","containing","the","mapping","between","``","place-holder","''","collection","keys","and","``","BlockwiseDep","``","-based","objects",".","*","*","WARNING","*","*",":","This","argument","should","only","be","used","internally","(","for","culling",",","fusion","and","cloning","of","existing","Blockwise","layers",")",".","Explicit","use","of","this","argument","will","be","deprecated","in","the","future",".","See","Also","--","--","--","--","dask.blockwise.blockwise","dask.array.blockwise"]
code: def is_materialized(self):
      return hasattr(self, "_cached_dict")
  
imports: from __future__ import annotations
  import itertools
  import os
  from collections.abc import Hashable, Iterable, Mapping, Sequence
  from itertools import product
  from math import prod
  from typing import Any
  import tlz
  import dask
  from dask.base import clone_key, get_name_from_key, tokenize
  from dask.core import flatten, ishashable, keys_in_tasks, reverse_dict
  from dask.highlevelgraph import HighLevelGraph, Layer
  from dask.optimization import SubgraphCallable, fuse
  from dask.typing import Graph, Key
  from dask.utils import _deprecated, apply, ensure_dict, homogeneous_deepmap, stringify_collection_keys
label_desc: Use image node_id 9 for calling the Blockwise obj's underlying member method code with example usage: obj.is_materialized() and returns: hasattr