code: def _tensordot_scipy_sparse(a, b, axes):
      assert a.ndim == b.ndim == 2
      assert len(axes[0]) == len(axes[1]) == 1
      (a_axis,) = axes[0]
      (b_axis,) = axes[1]
      assert a_axis in (0, 1) and b_axis in (0, 1)
      assert a.shape[a_axis] == b.shape[b_axis]
      if a_axis == 0 and b_axis == 0:
          return a.T * b
      elif a_axis == 0 and b_axis == 1:
          return a.T * b.T
      elif a_axis == 1 and b_axis == 0:
          return a * b
      elif a_axis == 1 and b_axis == 1:
          return a * b.T
  
imports: from __future__ import annotations
  import math
  import numpy
  from dask.array import chunk
  from dask.array.core import Array
  from dask.array.dispatch import concatenate_lookup, divide_lookup, einsum_lookup, empty_lookup, nannumel_lookup, numel_lookup, percentile_lookup, tensordot_lookup, to_cupy_dispatch, to_numpy_dispatch
  from dask.array.numpy_compat import divide
  from dask.array.numpy_compat import ma_divide
  from dask.array.percentile import _percentile
  from dask.backends import CreationDispatch, DaskBackendEntrypoint
label_desc: Use image node_id 8 for calling a global function with example usage: _tensordot_scipy_sparse(a, b, axes) and returns: unknown, unknown, unknown, unknown