code: def execute_sparse(cls, ctx, op):
      from ...lib.sparse import SparseNDArray
      from ...lib.sparse.core import cps, sps
  
      xp = array_module(op.gpu)
      if op.seed:
          rs = np.random.RandomState(op.seed)
      else:
          rs = None
  
      chunk = op.outputs[0]
      if chunk.ndim > 2:
          raise NotImplementedError
  
      low = 1 if op.low == 0 else op.low
  
      rs = rs or xp.random
      size = int(np.ceil(np.prod(chunk.shape) * op.density))
      xps = cps if op.gpu else sps
      ij = xp.empty((2, size))
      ij[0] = rs.randint(chunk.shape[0], size=size)
      ij[1] = rs.randint(chunk.shape[1], size=size)
      data = rs.randint(low, op.high, size=size).astype(op.dtype)
      m = xps.coo_matrix((data, ij), chunk.shape).tocsr()
      m.data[m.data >= op.high] = op.high - 1
  
      # scipy.sparse is too slow, we remove the precise version due to the performance
      # m = sps.random(*chunk.shape, density=op.density, format='csr')
      # m.data = (rs or xp.random).randint(low, op.high, size=m.data.size)\
      #     .astype(op.dtype)
  
      ctx[chunk.key] = SparseNDArray(m)
  
file_path: mars/mars/tensor/random/randint.py
imports: import numpy
  from ...None import opcodes
  from ...serialization.serializables import Int64Field, Float64Field
  from ..array_utils import array_module
  from ..utils import gen_random_seeds
  from .core import TensorRandomOperandMixin, TensorSimpleRandomData
label_desc: Use image node_id 3 for calling the TensorRandint obj's underlying member method code with example usage: obj.execute_sparse(cls, ctx, op) without return types