code: def execute(self):
      cost = 0
      memo = self.optimizer_context.memo
      grp = memo.get_group_by_id(self.root_expr.group_id)
      for child_id in self.root_expr.children:
          child_grp = memo.get_group_by_id(child_id)
          if child_grp.get_best_expr(PropertyType.DEFAULT):
              # Note: May never get hit when using EvaDB on Ray
              cost += child_grp.get_best_expr_cost(PropertyType.DEFAULT)
          else:
              self.optimizer_context.task_stack.push(
                  OptimizeInputs(self.root_expr, self.optimizer_context)
              )
              self.optimizer_context.task_stack.push(
                  OptimizeGroup(child_grp, self.optimizer_context)
              )
              return
  
      cost += self.optimizer_context.cost_model.calculate_cost(
          self.root_expr
      )
      grp.add_expr_cost(self.root_expr, PropertyType.DEFAULT, cost)
  
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 OptimizeInputs obj's underlying member method code with example usage: obj.execute() without return types