code: def add_expr(self, expr: GroupExpression):
      if expr.group_id == UNDEFINED_GROUP_ID:
          expr.group_id = self.group_id
  
      if expr.group_id != self.group_id:
          logger.error(
              "Expected group id {}, found {}".format(
                  self.group_id, expr.group_id
              )
          )
          return
  
      if expr.opr.is_logical():
          self._add_logical_expr(expr)
      else:
          self._add_physical_expr(expr)
  
imports: from __future__ import annotations
  from typing import Dict, List
  from evadb.constants import UNDEFINED_GROUP_ID
  from evadb.optimizer.group_expression import GroupExpression
  from evadb.optimizer.property import Property
  from evadb.utils.logging_manager import logger
label_desc: Use image node_id 9 for calling the Group obj's underlying member method code with example usage: obj.add_expr(expr) without return types