code: def _tile_2d(cls, op, val):
      from ..datasource import diag
  
      d = yield from recursive_tile(diag(op.input))
      index_to_diag_chunk = {c.inputs[0].index: c for c in d.chunks}
      cum_sizes = [0] + np.cumsum(d.nsplits[0]).tolist()
  
      out_chunks = []
      for chunk in op.input.chunks:
          if chunk.index not in index_to_diag_chunk:
              out_chunks.append(chunk)
          else:
              diag_chunk = index_to_diag_chunk[chunk.index]
              diag_idx = diag_chunk.index[0]
              input_chunks = [chunk]
              chunk_val = cls._gen_val(val, diag_idx, cum_sizes)
              if len(op.inputs) == 2:
                  input_chunks.append(chunk_val)
              chunk_op = op.copy().reset_key()
              chunk_op._wrap = False
              chunk_op._k = diag_chunk.op.k
              chunk_op._val = chunk_val
              out_chunk = chunk_op.new_chunk(
                  input_chunks,
                  shape=chunk.shape,
                  order=chunk.order,
                  index=chunk.index,
              )
              out_chunks.append(out_chunk)
  
      out = op.outputs[0]
      new_op = op.copy()
      return new_op.new_tensors(
          op.inputs,
          shape=out.shape,
          order=out.order,
          chunks=out_chunks,
          nsplits=op.input.nsplits,
      )
  
imports: import numpy
  from ...None import opcodes
  from ...core import ENTITY_TYPE, recursive_tile
  from ...serialization.serializables import KeyField, AnyField, BoolField, Int32Field
  from ...utils import has_unknown_shape, ceildiv
  from ..operands import TensorOperand, TensorOperandMixin
  from ..datasource import tensor
  from ..array_utils import as_same_device, device
  from ..core import Tensor, TENSOR_TYPE
  from ..utils import decide_unify_split
label_desc: Use image node_id 10 for calling the TensorFillDiagonal obj's underlying member method code with example usage: obj._tile_2d(cls, op, val) and returns: new_op