code: def match_operand(self, op: OperandType) -> bool:
      node = op.outputs[0]
      input_node = self._graph.predecessors(node)[0]
      successors = self._graph.successors(input_node)
      return self._all_successor_prune_pushdown(successors)
  
file_path: mars/mars/optimization/logical/common/column_pruning.py
imports: from abc import ABCMeta, abstractmethod
  from typing import Any, List
  from ..core import OperandBasedOptimizationRule, OptimizationRecord, OptimizationRecordType
  from ....core import OperandType, TileableType, CHUNK_TYPE
  from ....dataframe.datasource.core import ColumnPruneSupportedDataSourceMixin
  from ....dataframe.utils import parse_index
  from ....utils import implements
label_desc: Use image node_id 2 for calling the PruneDataSource obj's underlying member method code with example usage: obj.match_operand(op) and returns: self