class_docstr: This graph pass does const folding to a chain of supported ops starts with a
  tensor-wise ``constexpr_affine_dequantize`` op. i.e., both ``scale`` and
  ``zero_point`` are scalar (rank 0).
  
  For example:
  Input graph:
      data -> constexpr_affine_dequantize -> transpose -> expand_dims -> out
  
  Output graph:
      new_data -> constexpr_affine_dequantize -> out
  
  where ``new_data`` is computed by ``data -> transpose -> expand_dims``.
  
  Note that, the graph pass only supports const folding of a single linked list pattern.
  For example, the following pattern will not be changed:
  
      data ---> constexpr_affine_dequantize -> transpose -> out
            |
            --> constexpr_affine_dequantize -> reshape -> out_2
class_docstr_tok: ["This","graph","pass","does","const","folding","to","a","chain","of","supported","ops","starts","with","a","tensor-wise","``","constexpr_affine_dequantize","``","op",".","i.e.",",","both","``","scale","``","and","``","zero_point","``","are","scalar","(","rank","0",")",".","For","example",":","Input","graph",":","data","-",">","constexpr_affine_dequantize","-",">","transpose","-",">","expand_dims","-",">","out","Output","graph",":","new_data","-",">","constexpr_affine_dequantize","-",">","out","where","``","new_data","``","is","computed","by","``","data","-",">","transpose","-",">","expand_dims","``",".","Note","that",",","the","graph","pass","only","supports","const","folding","of","a","single","linked","list","pattern",".","For","example",",","the","following","pattern","will","not","be","changed",":","data","--","-",">","constexpr_affine_dequantize","-",">","transpose","-",">","out","|","--",">","constexpr_affine_dequantize","-",">","reshape","-",">","out_2"]
code: def merge_tensorwise_affine_dequantize_with_consecutive_ops_block(
      self, block
  ):
      fusion_status = False
      for op in list(block.operations):
          for b in op.blocks:
              block_changed = True
              while block_changed:
                  block_changed = self.merge_tensorwise_affine_dequantize_with_consecutive_ops_block(
                      b
                  )
  
          if op.op_type != "constexpr_affine_dequantize":
              continue
  
          fusion_status = self._try_to_transform(op, block)
          if fusion_status:
              return fusion_status
      return fusion_status
  
imports: from typing import Tuple
  import numpy
  import coremltools.converters.mil.mil.types
  from coremltools.converters.mil._deployment_compatibility import AvailableTarget
  from coremltools.converters.mil.mil import Block
  from coremltools.converters.mil.mil import Builder
  from coremltools.converters.mil.mil import Operation, Var
  from coremltools.converters.mil.mil.passes.graph_pass import AbstractGraphPass
  from coremltools.converters.mil.mil.passes.helper import _check_child_op_type, _check_no_output_connection, block_context_manager
  from coremltools.converters.mil.mil.passes.pass_registry import register_pass
label_desc: Use image node_id 2 for calling the merge_tensorwise_affine_dequantize_with_consecutive_ops obj's underlying member method code with example usage: obj.merge_tensorwise_affine_dequantize_with_consecutive_ops_block(block) and returns: fusion_status, fusion_status