class_docstr: NeuralNetwork does not support conv1d natively,
  instead it decomposes conv1d into expand_dims -> conv2d -> squeeze
  
  Let us decompose conv1d for NN,
  so we may have a chance to optimize expand_dims -> conv2d -> squeeze
  
  Given:
      %2 = conv(%1), %1.rank = 3
      ...
  
  Result:
      %3 = expand_dims(%1, axes=-2)
      %4 = conv(%3)
      %2 = squeeze(%4, axes=-2)
      ...
class_docstr_tok: ["NeuralNetwork","does","not","support","conv1d","natively",",","instead","it","decomposes","conv1d","into","expand_dims","-",">","conv2d","-",">","squeeze","Let","us","decompose","conv1d","for","NN",",","so","we","may","have","a","chance","to","optimize","expand_dims","-",">","conv2d","-",">","squeeze","Given",":","%","2","=","conv","(","%","1",")",",","%","1.rank","=","3","...","Result",":","%","3","=","expand_dims","(","%","1",",","axes=-2",")","%","4","=","conv","(","%","3",")","%","2","=","squeeze","(","%","4",",","axes=-2",")","..."]
code: def _decompose_conv1d_block(self, block: Block):
      def help_decompose_conv1d_block(block: Block) -> bool:
          for op in list(block.operations):
              for b in op.blocks:
                  block_changed = True
                  while block_changed:
                      block_changed = help_decompose_conv1d_block(b)
  
              # must be conv1d
              if op.op_type != "conv" or op.x.rank != 3:
                  continue
  
              if self._try_apply_transform(op, block):
                  # has to break as the downstream iterator is affected
                  return True
  
          return False
  
      block_changed = True
      while block_changed:
          block_changed = help_decompose_conv1d_block(block)
  
file_path: coremltools/coremltools/converters/mil/backend/nn/passes/conv1d_decomposition.py
imports: from coremltools.converters.mil.mil import Block
  from coremltools.converters.mil.mil import Builder
  from coremltools.converters.mil.mil import Operation
  from coremltools.converters.mil.mil.passes.graph_pass import AbstractGraphPass
  from coremltools.converters.mil.mil.passes.helper import block_context_manager
  from coremltools.converters.mil.mil.passes.pass_registry import register_pass
label_desc: Use image node_id 2 for calling the decompose_conv1d obj's underlying member method code with example usage: obj._decompose_conv1d_block(block) and returns: False, True