code: def execute(cls, ctx, op):
      inputs, device_id, xp = as_same_device(
          [ctx[c.key] for c in op.inputs],
          device=op.device,
          ret_extra=True,
      )
  
      with device(device_id):
          kw = {"casting": op.casting}
  
          inputs_iter = iter(inputs)
          input = next(inputs_iter)
          if op.out1 is not None:
              out1 = next(inputs_iter)
          else:
              out1 = None
          if op.out2 is not None:
              out2 = next(inputs_iter)
          else:
              out2 = None
          if op.where is not None:
              where = kw["where"] = next(inputs_iter)
          else:
              where = None
          kw["order"] = op.order
  
          try:
              args = [input]
              if out1 is not None:
                  args.append(out1.copy())
              if out2 is not None:
                  args.append(out2.copy())
              y1, y2 = xp.modf(*args, **kw)
          except TypeError:
              if where is None:
                  raise
              y1, y2 = xp.modf(input)
              y1, y2 = xp.where(where, y1, out1), xp.where(
                  where, y2, out2
              )
  
          for c, res in zip(op.outputs, (y1, y2)):
              ctx[c.key] = res
  
file_path: mars/mars/tensor/arithmetic/modf.py
imports: import numpy
  from ...None import opcodes
  from ..array_utils import as_same_device, device
  from ..datasource import tensor
  from .core import TensorOutBinOp
label_desc: Use image node_id 3 for calling the TensorModf obj's underlying member method code with example usage: obj.execute(cls, ctx, op) without return types