class_docstr: Detect the ``reduce_sum`` ---> ``mul/real_div`` pattern than can be mapped to ``reduce_mean``.
  That is, the operation ``reduce_sum/count == reduce_mean``.
  
  `Input graph`
  
  .. code-block::
  
                                  const (scalar)
                                      |
      input ----> reduce_sum ----> mul/real_div -----------> output
  
  
  `Output graph`
  
  .. code-block::
  
      input --------> reduce_mean ---------> output
code: def _fuse_reduce_mean_block(self, block):
      fusion_status = False
      for i, op in enumerate(list(block.operations)):
          for b in op.blocks:
              block_changed = True
              while block_changed:
                  block_changed = self._fuse_reduce_mean_block(b)
          if len(op.blocks) > 0:
              continue
  
          # start pattern match if mul op is encountered
          if op.op_type == "reduce_sum":
              fusion_status = self._try_to_transform(op, block)
              # has to break as the downstream iterator is affected.
              if fusion_status:
                  return fusion_status
      return fusion_status
  
file_path: coremltools/coremltools/converters/mil/mil/passes/defs/cleanup/fuse_reduce_mean.py
imports: from coremltools.converters.mil.mil import Builder
  from coremltools.converters.mil.mil.passes.graph_pass import AbstractGraphPass
  from coremltools.converters.mil.mil.passes.helper import _check_child_op_type, _check_var_scalar_value, block_context_manager
  from coremltools.converters.mil.mil.passes.pass_registry import register_pass
  from coremltools.converters.mil.mil.types.symbolic import is_symbolic
label_desc: Use image node_id 3 for calling the fuse_reduce_mean obj's underlying member method code with example usage: obj._fuse_reduce_mean_block(block) and returns: fusion_status, fusion_status