code: def apply(self):
      self._build_context()
      pruned_nodes = self._prune_columns()
      self._update_tileable_params(pruned_nodes)
  
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 10 for calling the ColumnPruningRule obj's underlying member method code with example usage: obj.apply() without return types