code: def execute(cls, ctx, op):
      inp = ctx[op.input.key]
      index_obj = (
          ctx[op.index_obj.key]
          if hasattr(op.index_obj, "key")
          else op.index_obj
      )
      if op.offset_on_axis is None:
          ctx[op.outputs[0].key] = np.delete(
              inp, index_obj, axis=op.axis
          )
      else:
          index_obj = np.array(index_obj)
          part_index = [
              idx - op.offset_on_axis
              for idx in index_obj
              if (
                  (idx >= op.offset_on_axis)
                  and idx
                  < (op.offset_on_axis + inp.shape[op.axis or 0])
              )
          ]
  
          ctx[op.outputs[0].key] = np.delete(
              inp, part_index, axis=op.axis
          )
  
imports: from collections import defaultdict
  import numpy
  from ...None import opcodes
  from ...core import ENTITY_TYPE, recursive_tile
  from ...serialization.serializables import Int32Field, Int64Field, AnyField, KeyField
  from ...utils import has_unknown_shape
  from ..datasource import tensor
  from ..operands import TensorHasInput, TensorOperandMixin
  from ..utils import filter_inputs, validate_axis, slice_split, calc_object_length
label_desc: Use image node_id 7 for calling the TensorDelete obj's underlying member method code with example usage: obj.execute(cls, ctx, op) without return types