code: def __new__(cls, iterable=None, shape=None, **kwargs):
      shape, flat_list = cls._handle_ndarray_creation_inputs(
          iterable, shape, **kwargs
      )
      shape = Tuple(*map(_sympify, shape))
      cls._check_special_bounds(flat_list, shape)
      loop_size = (
          functools.reduce(lambda x, y: x * y, shape)
          if shape
          else len(flat_list)
      )
  
      # Sparse array:
      if isinstance(flat_list, (dict, Dict)):
          sparse_array = Dict(flat_list)
      else:
          sparse_array = {}
          for i, el in enumerate(flatten(flat_list)):
              if el != 0:
                  sparse_array[i] = _sympify(el)
  
      sparse_array = Dict(sparse_array)
  
      self = Basic.__new__(cls, sparse_array, shape, **kwargs)
      self._shape = shape
      self._rank = len(shape)
      self._loop_size = loop_size
      self._sparse_array = sparse_array
  
      return self
  
imports: from sympy.core.basic import Basic
  from sympy.core.containers import Dict, Tuple
  from sympy.core.singleton import S
  from sympy.core.sympify import _sympify
  from sympy.tensor.array.mutable_ndim_array import MutableNDimArray
  from sympy.tensor.array.ndim_array import NDimArray, ImmutableNDimArray
  from sympy.utilities.iterables import flatten
  import functools
label_desc: Use image node_id 1 for calling the ImmutableSparseNDimArray obj's underlying member method code with example usage: obj.__new__(cls, iterable, shape) and returns: self