code: def test_two_symbolic_concat(self) -> None:
      concat1 = helper.make_node(
          "Concat",
          inputs=["A", "B"],
          outputs=["C"],
          name="Concat",
          axis=1,
      )
      concat2 = helper.make_node(
          "Concat",
          inputs=["C", "D"],
          outputs=["E"],
          name="Concat",
          axis=1,
      )
      cast = onnx.helper.make_node(
          "Cast", inputs=["E"], outputs=["output"], to=TensorProto.FLOAT
      )
      graph_def = helper.make_graph(
          name="test_graph",
          nodes=[concat1, concat2, cast],
          inputs=[
              helper.make_tensor_value_info(
                  "A", TensorProto.FLOAT, [2, "A"]
              ),
              helper.make_tensor_value_info(
                  "B", TensorProto.FLOAT, [2, 3]
              ),
              helper.make_tensor_value_info(
                  "D", TensorProto.FLOAT, [2, "D"]
              ),
          ],
          outputs=[
              helper.make_tensor_value_info(
                  "output", TensorProto.FLOAT, [2, None]
              )
          ],
      )
  
      onnx_model = make_model(graph_def)
      inferred_model = onnx.shape_inference.infer_shapes(
          onnx_model, strict_mode=True
      )
      self._assert_valueinfo_shape(
          inferred_model,
          [
              make_tensor_value_info("C", TensorProto.FLOAT, (2, -1)),
              make_tensor_value_info("E", TensorProto.FLOAT, (2, -1)),
          ],
      )
      # the symbolic shape of E and output should be the same
      assert self._get_shape_from_name(
          inferred_model, "E"
      ) == self._get_shape_from_name(inferred_model, "output")
  
file_path: onnx/onnx/test/symbolic_shape_test.py
imports: import unittest
  from typing import List, Optional
  import onnx.shape_inference
  from onnx import ModelProto, TensorProto, TensorShapeProto, ValueInfoProto, helper
  from onnx.helper import make_model, make_tensor_value_info
label_desc: Use image node_id 5 for calling the TestSymbolicShape obj's underlying member method code with example usage: obj.test_two_symbolic_concat() without return types