code: def tile(cls, op):
      out_shape = op.outputs[0].shape
      paths = (
          op.filepath
          if isinstance(op.filepath, (tuple, list))
          else glob(op.filepath)
      )
      chunk_size = op.outputs[0].extra_params.raw_chunk_size
      n_chunks = ceildiv(len(paths), chunk_size)
      if len(paths) > 1:
          chunks = []
          splits = []
          for i in range(n_chunks):
              chunk_op = op.copy().reset_key()
              chunk_op._filepath = paths[
                  i * chunk_size : (i + 1) * chunk_size
              ]
              file_nums = len(chunk_op._filepath)
              shape = (file_nums,) + out_shape[1:]
              chunk = chunk_op.new_chunk(
                  None,
                  shape=shape,
                  index=(i,) + (0,) * (len(out_shape) - 1),
              )
              chunks.append(chunk)
              splits.append(file_nums)
          nsplits = (tuple(splits),) + tuple(
              (s,) for s in out_shape[1:]
          )
      else:
          chunk_op = op.copy().reset_key()
          chunks = [
              chunk_op.new_chunk(
                  None, shape=out_shape, index=(0,) * len(out_shape)
              )
          ]
          nsplits = tuple((s,) for s in out_shape)
      new_op = op.copy()
      return new_op.new_tensors(
          None, shape=out_shape, chunks=chunks, nsplits=nsplits
      )
  
file_path: mars/mars/tensor/images/imread.py
imports: import numpy
  from ...None import opcodes
  from ...serialization.serializables import AnyField
  from ...config import options
  from ...lib.filesystem import open_file, glob, file_size
  from ...utils import ceildiv, ModulePlaceholder
  from ..operands import TensorOperandMixin, TensorOperand
label_desc: Use image node_id 3 for calling the TensorImread obj's underlying member method code with example usage: obj.tile(cls, op) and returns: new_op