code: def execute(cls, ctx, op):
      xp = array_module(op.gpu)
      if xp is np:
          device_id = -1
      else:
          device_id = op.device or 0
  
      with device(device_id):
          rs = xp.random.RandomState(op.seed)
  
          args = []
          for k in op.args:
              val = getattr(op, k, None)
              if isinstance(val, TENSOR_CHUNK_TYPE):
                  args.append(ctx[val.key])
              else:
                  args.append(val)
          mean, cov = args[:2]
          kw = {}
          if args[2] is not None:
              kw["size"] = args[2]
          if args[3] is not None:
              kw["check_valid"] = args[3]
          if args[4] is not None:
              kw["tol"] = args[4]
  
          try:
              res = rs.multivariate_normal(mean, cov, **kw)
              if xp is not np:
                  ctx[op.outputs[0].key] = xp.asarray(res)
              else:
                  ctx[op.outputs[0].key] = res
          except AttributeError:
              if xp is not np:
                  # cupy cannot generate data, fallback to numpy first
                  rs = np.random.RandomState(op.seed)
                  res = rs.multivariate_normal(mean, cov, **kw)
                  ctx[op.outputs[0].key] = xp.asarray(res)
              else:
                  raise
  
file_path: mars/mars/tensor/random/multivariate_normal.py
imports: import itertools
  import numpy
  from ...None import opcodes
  from ...serialization.serializables import NDArrayField, StringField, Float64Field
  from ...config import options
  from ..utils import decide_chunk_sizes, gen_random_seeds
  from ..array_utils import array_module, device
  from .core import TensorRandomOperandMixin, TensorDistribution, TENSOR_CHUNK_TYPE
label_desc: Use image node_id 3 for calling the TensorMultivariateNormal obj's underlying member method code with example usage: obj.execute(cls, ctx, op) without return types