code: def nancumprod(a, axis=None, dtype=None, out=None):
      """
      Return the cumulative product of tensor elements over a given axis treating Not a
      Numbers (NaNs) as one.  The cumulative product does not change when NaNs are
      encountered and leading NaNs are replaced by ones.
  
      Ones are returned for slices that are all-NaN or empty.
  
      Parameters
      ----------
      a : array_like
          Input tensor.
      axis : int, optional
          Axis along which the cumulative product is computed.  By default
          the input is flattened.
      dtype : dtype, optional
          Type of the returned tensor, as well as of the accumulator in which
          the elements are multiplied.  If *dtype* is not specified, it
          defaults to the dtype of `a`, unless `a` has an integer dtype with
          a precision less than that of the default platform integer.  In
          that case, the default platform integer is used instead.
      out : Tensor, optional
          Alternative output tensor in which to place the result. It must
          have the same shape and buffer length as the expected output
          but the type of the resulting values will be cast if necessary.
  
      Returns
      -------
      nancumprod : Tensor
          A new array holding the result is returned unless `out` is
          specified, in which case it is returned.
  
      See Also
      --------
      mt.cumprod : Cumulative product across array propagating NaNs.
      isnan : Show which elements are NaN.
  
      Examples
      --------
      >>> import mars.tensor as mt
  
      >>> mt.nancumprod(1).execute()
      array([1])
      >>> mt.nancumprod([1]).execute()
      array([1])
      >>> mt.nancumprod([1, mt.nan]).execute()
      array([ 1.,  1.])
      >>> a = mt.array([[1, 2], [3, mt.nan]])
      >>> mt.nancumprod(a).execute()
      array([ 1.,  2.,  6.,  6.])
      >>> mt.nancumprod(a, axis=0).execute()
      array([[ 1.,  2.],
             [ 3.,  2.]])
      >>> mt.nancumprod(a, axis=1).execute()
      array([[ 1.,  2.],
             [ 3.,  3.]])
  
      """
      a = astensor(a)
      if dtype is None:
          dtype = np.nancumprod(np.empty((1,), dtype=a.dtype)).dtype
      op = TensorNanCumprod(axis=axis, dtype=dtype)
      return op(a, out=out)
  
file_path: mars/mars/tensor/reduction/nancumprod.py
imports: import numpy
  from ...None import opcodes
  from ..datasource import tensor
  from ..arithmetic.multiply import TensorTreeMultiply
  from .core import TensorCumReduction, TensorCumReductionMixin
label_desc: Use image node_id 1 for calling a global function with example usage: nancumprod(a, axis, dtype, out) and returns: op