class_docstr: Base abstract class for all zero-copy map fusion rules.
  
  A zero-copy map fusion rule is a rule that optimizes the transform_fn chain of
  a fused MapOperator. The optimization is usually done by removing unnecessary
  data conversions.
  
  This base abstract class defines the common util functions. And subclasses
  should implement the `_optimize` method for the concrete optimization
  strategy.
code: def apply(self, plan: PhysicalPlan) -> PhysicalPlan:
      self._traverse(plan.dag)
      return plan
  
file_path: ray/python/ray/data/_internal/logical/rules/zero_copy_map_fusion.py
imports: from abc import abstractmethod
  from typing import List
  from ray.data._internal.execution.operators.map_operator import MapOperator
  from ray.data._internal.execution.operators.map_transformer import BuildOutputBlocksMapTransformFn, MapTransformFn, MapTransformFnDataType
  from ray.data._internal.logical.interfaces.optimizer import Rule
  from ray.data._internal.logical.interfaces.physical_plan import PhysicalPlan
label_desc: Use image node_id 1 for calling the ZeroCopyMapFusionRule obj's underlying member method code with example usage: obj.apply(plan) and returns: plan