code: def _can_push_down(self, op: OperandType) -> bool:
      input_nodes = self._graph.predecessors(op.outputs[0])
      accept_types = (
          HeadOptimizedDataSource,
          DataFrameSortOperand,
          DataFrameValueCounts,
      )
      if (
          len(input_nodes) == 1
          and op.can_be_optimized()
          and isinstance(input_nodes[0].op, accept_types)
          and input_nodes[0] not in self._graph.results
      ):
          return True
      return False
  
file_path: mars/mars/optimization/logical/common/head.py
imports: from typing import List
  from ....core import OperandType, TileableType, CHUNK_TYPE
  from ....dataframe.base.value_counts import DataFrameValueCounts
  from ....dataframe.datasource.core import HeadOptimizedDataSource
  from ....dataframe.sort.core import DataFrameSortOperand
  from ....dataframe.utils import parse_index
  from ....utils import implements
  from ..core import OperandBasedOptimizationRule, OptimizationRecord, OptimizationRecordType
label_desc: Use image node_id 3 for calling the HeadPushDown obj's underlying member method code with example usage: obj._can_push_down(op) and returns: False, True