code: def evaluate(self, *args, **kwargs):
      batch: Batch = self.get_child(0).evaluate(*args, **kwargs)
      if self.etype == ExpressionType.AGGREGATION_FIRST:
          batch = batch[0]
      elif self.etype == ExpressionType.AGGREGATION_LAST:
          batch = batch[-1]
      elif self.etype == ExpressionType.AGGREGATION_SEGMENT:
          batch = Batch.stack(batch)
      elif self.etype == ExpressionType.AGGREGATION_SUM:
          batch.aggregate("sum")
      elif self.etype == ExpressionType.AGGREGATION_COUNT:
          batch.aggregate("count")
      elif self.etype == ExpressionType.AGGREGATION_AVG:
          batch.aggregate("mean")
      elif self.etype == ExpressionType.AGGREGATION_MIN:
          batch.aggregate("min")
      elif self.etype == ExpressionType.AGGREGATION_MAX:
          batch.aggregate("max")
      batch.reset_index()
  
      column_name = self.etype.name
      if column_name.find("AGGREGATION_") != -1:
          # AGGREGATION_MAX -> MAX
          updated_column_name = column_name.replace("AGGREGATION_", "")
          batch.modify_column_alias(updated_column_name)
  
      # TODO: Raise exception if data type doesn't match
      return batch
  
file_path: evadb/evadb/expression/aggregation_expression.py
imports: from evadb.expression.abstract_expression import AbstractExpression, ExpressionReturnType, ExpressionType
  from evadb.models.storage.batch import Batch
label_desc: Use image node_id 2 for calling the AggregationExpression obj's underlying member method code with example usage: obj.evaluate() and returns: batch