code: def tile(cls, op):
      tensor = op.outputs[0]
      in_tensor = op.inputs[0]
      shape = op.shape
      new_dim = tensor.ndim - in_tensor.ndim
  
      out_chunks = []
      for c in in_tensor.chunks:
          chunk_shape = shape[:new_dim] + tuple(
              s if in_tensor.shape[idx] != 1 else shape[new_dim + idx]
              for idx, s in enumerate(c.shape)
          )
          chunk_idx = (0,) * new_dim + c.index
          chunk_op = op.copy().reset_key()
          chunk_op._shape = chunk_shape
          out_chunk = chunk_op.new_chunk(
              [c],
              shape=chunk_shape,
              index=chunk_idx,
              order=tensor.order,
          )
          out_chunks.append(out_chunk)
  
      nsplits = [
          tuple(
              c.shape[i]
              for c in out_chunks
              if all(
                  idx == 0 for j, idx in enumerate(c.index) if j != i
              )
          )
          for i in range(len(out_chunks[0].shape))
      ]
      new_op = op.copy()
      return new_op.new_tensors(
          [in_tensor],
          tensor.shape,
          order=tensor.order,
          chunks=out_chunks,
          nsplits=nsplits,
      )
  
file_path: mars/mars/tensor/base/broadcast_to.py
imports: import numpy
  from ...None import opcodes
  from ...serialization.serializables import KeyField, TupleField
  from ..operands import TensorHasInput, TensorOperandMixin
  from ..datasource import tensor
  from ..array_utils import get_array_module, device
label_desc: Use image node_id 4 for calling the TensorBroadcastTo obj's underlying member method code with example usage: obj.tile(cls, op) and returns: new_op