code: def zeros(stype, shape, ctx=None, dtype=None, **kwargs):
      
      # pylint: disable= no-member, protected-access
      if stype == 'default':
          return _zeros_ndarray(shape, ctx=ctx, dtype=dtype, **kwargs)
      if ctx is None:
          ctx = current_context()
      dtype = mx_real_t if dtype is None else dtype
      if stype in ('row_sparse', 'csr'):
          aux_types = _STORAGE_AUX_TYPES[stype]
      else:
          raise ValueError("unknown storage type" + stype)
      out = _ndarray_cls(_new_alloc_handle(stype, shape, ctx, True, dtype, aux_types))
      return _internal._zeros(shape=shape, ctx=ctx, dtype=dtype, out=out, **kwargs)
docs: Return a new array of given shape and type, filled with zeros.
  
      Parameters
      ----------
      stype: string
          The storage type of the empty array, such as 'row_sparse', 'csr', etc
      shape : int or tuple of int
          The shape of the empty array
      ctx : Context, optional
          An optional device context (default is the current default context)
      dtype : str or numpy.dtype, optional
          An optional value type (default is `float32`)
  
      Returns
      -------
      RowSparseNDArray or CSRNDArray
          A created array
      Examples
      --------
      >>> mx.nd.sparse.zeros('csr', (1,2))
      <CSRNDArray 1x2 @cpu(0)>
      >>> mx.nd.sparse.zeros('row_sparse', (1,2), ctx=mx.cpu(), dtype='float16').asnumpy()
      array([[ 0.,  0.]], dtype=float16)