class_docstr: For each op that has overridden the default target max block size,
  propagate to upstream ops until we reach an op that has also overridden the
  target max block size.
code: def apply(self, plan: PhysicalPlan) -> PhysicalPlan:
      self._propagate_target_max_block_size_to_upstream_ops(plan.dag)
      return plan
  
imports: from typing import Optional
  from ray.data._internal.execution.interfaces import PhysicalOperator
  from ray.data._internal.logical.interfaces import PhysicalPlan, Rule
label_desc: Use image node_id 1 for calling the InheritTargetMaxBlockSizeRule obj's underlying member method code with example usage: obj.apply(plan) and returns: plan