code: def estimate_size(cls, ctx, op):
      chunk = op.outputs[0]
      shape = chunk.shape
  
      if any(np.isnan(s) for s in shape):
          return super().estimate_size(ctx, op)
  
      new_indexes = [
          index for index in op._indexes if index is not None
      ]
      new_shape = []
      first_fancy_index = False
      for index in new_indexes:
          if isinstance(index, ENTITY_TYPE):
              if index.dtype != np.bool_:
                  if not first_fancy_index:
                      first_fancy_index = True
                  else:
                      continue
              new_shape.append(
                  ctx[index.key][0] // index.dtype.itemsize
              )
  
      rough_shape = []
      idx = 0
      for s in shape:
          if np.isnan(s):
              rough_shape.append(new_shape[idx])
              idx += 1
          else:
              rough_shape.append(s)
      result = int(np.prod(rough_shape) * chunk.dtype.itemsize)
      ctx[chunk.key] = (result, result)
  
imports: from numbers import Integral
  import numpy
  from ...None import opcodes
  from ...core import ENTITY_TYPE
  from ...core.operand import OperandStage
  from ...serialization.serializables import FieldTypes, KeyField, ListField, TupleField, Int32Field
  from ..core import TENSOR_TYPE, TensorOrder
  from ..utils import split_indexes_into_chunks, calc_pos, filter_inputs
  from ..operands import TensorHasInput, TensorOperandMixin, TensorMapReduceOperand
  from ..array_utils import get_array_module
  from .core import process_index, calc_shape
  from .index_lib import TensorIndexesHandler
label_desc: Use image node_id 10 for calling the TensorIndex obj's underlying member method code with example usage: obj.estimate_size(cls, ctx, op) and returns: super