code: def full(shape, fill_value, *args, **kwargs):
      # np.isscalar has somewhat strange behavior:
      # https://docs.scipy.org/doc/numpy/reference/generated/numpy.isscalar.html
      if np.ndim(fill_value) != 0:
          raise ValueError(
              f"fill_value must be scalar. Received {type(fill_value).__name__} instead."
          )
      if kwargs.get("dtype", None) is None:
          if hasattr(fill_value, "dtype"):
              kwargs["dtype"] = fill_value.dtype
          else:
              kwargs["dtype"] = type(fill_value)
      return _full(*args, shape=shape, fill_value=fill_value, **kwargs)
  
file_path: dask/dask/array/wrap.py
imports: from __future__ import annotations
  from functools import partial
  from itertools import product
  import numpy
  from tlz import curry
  from dask.array.backends import array_creation_dispatch
  from dask.array.core import Array, normalize_chunks
  from dask.array.utils import meta_from_array
  from dask.base import tokenize
  from dask.blockwise import blockwise
  from dask.layers import ArrayChunkShapeDep
  from dask.utils import funcname
label_desc: Use image node_id 7 for calling a global function with example usage: full(shape, fill_value) and returns: _full