class_docstr: Used for building Physical Plan from Logical Plan.
class_docstr_tok: ["Used","for","building","Physical","Plan","from","Logical","Plan","."]
code: def __init__(
      self,
      db: EvaDBDatabase,
      rules_manager: RulesManager = None,
      cost_model: CostModel = None,
  ) -> None:
      self.db = db
      # check if ray is enabled
      is_ray_enabled = (
          self.db.catalog().get_configuration_catalog_value("ray")
      )
      self.rules_manager = rules_manager or RulesManager(
          {"ray": is_ray_enabled}
      )
      self.cost_model = cost_model or CostModel()
  
file_path: evadb/evadb/optimizer/plan_generator.py
imports: from evadb.database import EvaDBDatabase
  from evadb.optimizer.cost_model import CostModel
  from evadb.optimizer.operators import Operator
  from evadb.optimizer.optimizer_context import OptimizerContext
  from evadb.optimizer.optimizer_task_stack import OptimizerTaskStack
  from evadb.optimizer.optimizer_tasks import BottomUpRewrite, OptimizeGroup, TopDownRewrite
  from evadb.optimizer.property import PropertyType
  from evadb.optimizer.rules.rules_manager import RulesManager
label_desc: Use image node_id 1 to create a new PlanGenerator object  with example: obj = PlanGenerator(db, rules_manager, cost_model)