docstr: Test a pattern of:
  
      %1 = conv_1(%x)
      %2 = conv_2(%x)
      %3 = transpose(%2, [0, 3, 2, 1])
      %4 = einsum(%1, %3)
  
  If ``%x`` has symbolic shape and ``conv_1, conv_2`` have the same
  configuration, the above program should pass the type inference.
docstr_tok: ["Test","a","pattern","of",":","%","1","=","conv_1","(","%","x",")","%","2","=","conv_2","(","%","x",")","%","3","=","transpose","(","%","2",",","[","0",",","3",",","2",",","1","]",")","%","4","=","einsum","(","%","1",",","%","3",")","If","``","%","x","``","has","symbolic","shape","and","``","conv_1",",","conv_2","``","have","the","same","configuration",",","the","above","program","should","pass","the","type","inference","."]
code: def test_symbolic_input_conv_and_einsum(self, backend):
      """
      Test a pattern of:
  
          %1 = conv_1(%x)
          %2 = conv_2(%x)
          %3 = transpose(%2, [0, 3, 2, 1])
          %4 = einsum(%1, %3)
  
      If ``%x`` has symbolic shape and ``conv_1, conv_2`` have the same
      configuration, the above program should pass the type inference.
      """
  
      @mb.program(
          input_specs=[
              mb.TensorSpec(
                  shape=(1, 3, get_new_symbol(), get_new_symbol()),
                  dtype=types.fp32,
              )
          ],
          opset_version=backend.opset_version,
      )
      def prog(x):
          weight = np.random.rand(2, 3, 2, 2)
          conv_1 = mb.conv(x=x, weight=weight)
          conv_2 = mb.conv(x=x, weight=weight)
          conv_2_transpose = mb.transpose(x=conv_2, perm=[0, 3, 2, 1])
          return mb.einsum(
              values=(conv_1, conv_2_transpose),
              equation="abcd,adce->abce",
          )
  
      assert prog is not None
  
imports: import itertools
  import platform
  import numpy
  import pytest
  import coremltools
  from coremltools.converters.mil.mil import Builder
  from coremltools.converters.mil.mil import get_new_symbol, types
  from coremltools.converters.mil.mil.ops.tests.iOS14 import backends
  from coremltools.converters.mil.mil.ops.tests.testing_utils import run_compare_builder
  from coremltools.converters.mil.mil.types import builtin_to_string, nptype_from_builtin
  from coremltools.converters.mil.testing_reqs import compute_units
  from coremltools.converters.mil.testing_utils import random_gen, ssa_fn
label_desc: Use image node_id 4 for calling the TestEinsum obj's underlying member method code with example usage: obj.test_symbolic_input_conv_and_einsum(backend) and returns: mb