code: def __init__(
      self,
      graph: EntityGraph,
      records: OptimizationRecords,
      optimizer_cls: Type[Optimizer],
  ):
      super().__init__(graph, records, optimizer_cls)
      self._context: Dict[
          TileableData, Dict[TileableData, Set[Any]]
      ] = {}
  
imports: from typing import List, Dict, Set, Any, Type, Union, Optional
  import pandas
  from .input_column_selector import InputColumnSelector
  from .self_column_selector import SelfColumnSelector
  from ..core import register_optimization_rule
  from ...core import OptimizationRecord, OptimizationRecordType, OptimizationRule, OptimizationRecords, Optimizer
  from .....core import TileableData
  from .....core.graph import EntityGraph
  from .....dataframe.core import parse_index, BaseSeriesData, BaseDataFrameData
  from .....dataframe.datasource.core import ColumnPruneSupportedDataSourceMixin
  from .....dataframe.groupby.aggregation import DataFrameGroupByAgg
  from .....dataframe.indexing.getitem import DataFrameIndex
  from .....dataframe.merge import DataFrameMerge
  from .....utils import implements
label_desc: Use image node_id 1 to create a new ColumnPruningRule object from inherited base classes: OptimizationRule with example: obj = ColumnPruningRule(graph, records, optimizer_cls)