code: def testKeepDims(self):
      input_array = [
          ["this", "is", "a", "test"],
          ["please", "do", "not", "panic"],
      ]
      truth_dim_zero = [["thisplease", "isdo", "anot", "testpanic"]]
      truth_shape_dim_zero = [1, 4]
      truth_dim_one = [["thisisatest"], ["pleasedonotpanic"]]
      truth_shape_dim_one = [2, 1]
  
      self._testReduceJoin(
          input_array,
          truth_dim_zero,
          truth_shape_dim_zero,
          axis=0,
          keep_dims=True,
      )
      self._testReduceJoin(
          input_array,
          truth_dim_one,
          truth_shape_dim_one,
          axis=1,
          keep_dims=True,
      )
  
      expected_val = [["thisisatestpleasedonotpanic"]]
      expected_shape = [1, 1]
      self._testReduceJoin(
          constant_op.constant(input_array),
          expected_val,
          expected_shape,
          keep_dims=True,
          axis=None,
      )
  
      # Using axis=[] is a no-op.
      expected_val = input_array
      expected_shape = [2, 4]
      self._testReduceJoin(
          input_array,
          expected_val,
          expected_shape,
          keep_dims=True,
          axis=[],
      )
  
imports: import itertools
  import numpy
  from tensorflow.python.framework import constant_op
  from tensorflow.python.framework import dtypes
  from tensorflow.python.framework import test_util
  from tensorflow.python.ops import array_ops
  from tensorflow.python.ops import string_ops
  from tensorflow.python.platform import test
label_desc: Use image node_id 11 for calling the ReduceJoinTest obj's underlying member method code with example usage: obj.testKeepDims() without return types