code: def testShapeWithUnknownConcatDim(self):
      p1 = array_ops.placeholder(dtypes.float32)
      c1 = constant_op.constant(10.0, shape=[4, 4, 4, 4])
      p2 = array_ops.placeholder(dtypes.float32)
      c2 = constant_op.constant(20.0, shape=[4, 4, 4, 4])
      dim = array_ops.placeholder(dtypes.int32)
      concat = array_ops.concat([p1, c1, p2, c2], dim)
      self.assertEqual(4, concat.get_shape().ndims)
  
      # All dimensions unknown.
      concat2 = array_ops.concat([p1, p2], dim)
      self.assertEqual(None, concat2.get_shape())
  
      # Rank doesn't match.
      c3 = constant_op.constant(30.0, shape=[4, 4, 4])
      with self.assertRaises(ValueError):
          array_ops.concat([p1, c1, p2, c3], dim)
  
imports: import numpy
  from tensorflow.python.eager import def_function
  from tensorflow.python.framework import constant_op
  from tensorflow.python.framework import dtypes
  from tensorflow.python.framework import errors_impl
  from tensorflow.python.framework import ops
  from tensorflow.python.framework import test_util
  from tensorflow.python.ops import array_ops
  from tensorflow.python.ops import gen_array_ops
  from tensorflow.python.ops import gradient_checker
  from tensorflow.python.ops import gradients_impl
  from tensorflow.python.ops import math_ops
  from tensorflow.python.ops import nn_ops
  from tensorflow.python.ops import variables
  from tensorflow.python.platform import test
label_desc: Use image node_id 21 for calling the ConcatOpTest obj's underlying member method code with example usage: obj.testShapeWithUnknownConcatDim() without return types