class_docstr: Base class to define any optimization rule
  
  Arguments:
      rule_type(RuleType): type of the rule, can be rewrite,
          logical->physical
      pattern: the match pattern for the rule
docstr: Transform the before expression to the after expression
  
  Args:
      before (Operator): the before expression
  
  Returns:
      Operator: the transformed expression
docstr_tok: ["Transform","the","before","expression","to","the","after","expression","Args",":","before","(","Operator",")",":","the","before","expression","Returns",":","Operator",":","the","transformed","expression"]
code: def apply(self, before: Operator) -> Operator:
      """Transform the before expression to the after expression
  
      Args:
          before (Operator): the before expression
  
      Returns:
          Operator: the transformed expression
      """
      raise NotImplementedError
  
imports: from __future__ import annotations
  from abc import ABC, abstractmethod
  from enum import Flag, IntEnum, auto
  from typing import TYPE_CHECKING
  from evadb.optimizer.operators import Operator
label_desc: Use image node_id 11 for calling the Rule obj's underlying member method code with example usage: obj.apply(before) without return types