code: def execute(self):
      # Todo: Get the property from the context
      if self.group.get_best_expr(PropertyType.DEFAULT):
          return
  
      # optimize all the logical exprs with the same context
      for expr in self.group.logical_exprs:
          self.optimizer_context.task_stack.push(
              OptimizeExpression(
                  expr, self.optimizer_context, explore=False
              )
          )
  
      # cost all the physical exprs with the same context
      for expr in self.group.physical_exprs:
          self.optimizer_context.task_stack.push(
              OptimizeInputs(expr, self.optimizer_context)
          )
  
imports: from __future__ import annotations
  from abc import abstractmethod
  from enum import IntEnum, auto
  from typing import TYPE_CHECKING, List
  from evadb.optimizer.binder import Binder
  from evadb.optimizer.group import Group
  from evadb.optimizer.group_expression import GroupExpression
  from evadb.optimizer.property import PropertyType
  from evadb.optimizer.rules.rules_base import Rule
  from evadb.utils.logging_manager import logger
label_desc: Use image node_id 2 for calling the OptimizeGroup obj's underlying member method code with example usage: obj.execute() without return types