def blockwise(
        self,
        func: Callable[..., Any],
        out_ind: Iterable[Any],
        *args: Any,  # can't type this as mypy assumes args are all same type, but dask blockwise args alternate types
        adjust_chunks: dict[Any, Callable[..., Any]] | None = None,
        new_axes: dict[Any, int] | None = None,
        align_arrays: bool = True,
        **kwargs: Any,
    ) -> Any:
        """
        Tensor operation: Generalized inner and outer products.

        A broad class of blocked algorithms and patterns can be specified with a
        concise multi-index notation.  The ``blockwise`` function applies an in-memory
        function across multiple blocks of multiple inputs in a variety of ways.
        Many chunked array operations are special cases of blockwise including
        elementwise, broadcasting, reductions, tensordot, and transpose.

        Currently only called explicitly in xarray when performing multidimensional interpolation.

        Parameters
        ----------
        func : callable
            Function to apply to individual tuples of blocks
        out_ind : iterable
            Block pattern of the output, something like 'ijk' or (1, 2, 3)
        *args : sequence of Array, index pairs
            You may also pass literal arguments, accompanied by None index
            e.g. (x, 'ij', y, 'jk', z, 'i', some_literal, None)
        **kwargs : dict
            Extra keyword arguments to pass to function
        adjust_chunks : dict
            Dictionary mapping index to function to be applied to chunk sizes
        new_axes : dict, keyword only
            New indexes and their dimension lengths
        align_arrays: bool
            Whether or not to align chunks along equally sized dimensions when
            multiple arrays are provided.  This allows for larger chunks in some
            arrays to be broken into smaller ones that match chunk sizes in other
            arrays such that they are compatible for block function mapping. If
            this is false, then an error will be thrown if arrays do not already
            have the same number of blocks in each dimension.

        See Also
        --------
        dask.array.blockwise
        cubed.core.blockwise
        """
        raise NotImplementedError()

        Tensor operation: Generalized inner and outer products.

        A broad class of blocked algorithms and patterns can be specified with a
        concise multi-index notation.  The ``blockwise`` function applies an in-memory
        function across multiple blocks of multiple inputs in a variety of ways.
        Many chunked array operations are special cases of blockwise including
        elementwise, broadcasting, reductions, tensordot, and transpose.

        Currently only called explicitly in xarray when performing multidimensional interpolation.

        Parameters
        ----------
        func : callable
            Function to apply to individual tuples of blocks
        out_ind : iterable
            Block pattern of the output, something like 'ijk' or (1, 2, 3)
        *args : sequence of Array, index pairs
            You may also pass literal arguments, accompanied by None index
            e.g. (x, 'ij', y, 'jk', z, 'i', some_literal, None)
        **kwargs : dict
            Extra keyword arguments to pass to function
        adjust_chunks : dict
            Dictionary mapping index to function to be applied to chunk sizes
        new_axes : dict, keyword only
            New indexes and their dimension lengths
        align_arrays: bool
            Whether or not to align chunks along equally sized dimensions when
            multiple arrays are provided.  This allows for larger chunks in some
            arrays to be broken into smaller ones that match chunk sizes in other
            arrays such that they are compatible for block function mapping. If
            this is false, then an error will be thrown if arrays do not already
            have the same number of blocks in each dimension.

        See Also
        --------
        dask.array.blockwise
        cubed.core.blockwise
        
xarray/namedarray/parallelcompat.py