code: def estimate_size(cls, ctx, op):
      if op.stage == OperandStage.map:
          input_size = ctx[op.inputs[0].key][0]
          pos_size = ctx[op.inputs[0].key][0]
          ctx[op.outputs[0].key] = (
              input_size + pos_size,
              input_size + pos_size * 2,
          )
      else:
          chunk = op.outputs[0]
          input_sizes = [
              ctx[c.key][0] for c in op.inputs[0].inputs or ()
          ]
          ctx[chunk.key] = chunk.nbytes, chunk.nbytes + sum(input_sizes)
  
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 8 for calling the FancyIndexingConcat obj's underlying member method code with example usage: obj.estimate_size(cls, ctx, op) without return types