code: def testRaggedDeepStringJoinReduction(self):
      test_data = ragged_factory_ops.constant(
          [
              [[["a", "b", "c"]], [["dd", "ee"]]],
              [[["f", "g"], ["h", "i", "j"]], [["k", "l"]]],
          ]
      )
      op = ngrams_op.ngrams(
          test_data,
          width=2,
          axis=-1,
          reduction_type=ngrams_op.Reduction.STRING_JOIN,
          string_separator="|",
      )
      expected_values = [
          [[[b"a|b", b"b|c"]], [[b"dd|ee"]]],
          [[[b"f|g"], [b"h|i", b"i|j"]], [[b"k|l"]]],
      ]
  
      self.assertAllEqual(expected_values, op)
  
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  import numpy
  import tensorflow
  import tensorflow_text
  from tensorflow.lite.python import interpreter
  from tensorflow.python.framework import constant_op
  from tensorflow.python.framework import errors
  from tensorflow.python.framework import test_util
  from tensorflow.python.ops.ragged import ragged_factory_ops
  from tensorflow.python.platform import test
  from tensorflow_text.core.pybinds import tflite_registrar
  from tensorflow_text.python.ops import ngrams_op
label_desc: Use image node_id 10 for calling the NgramsV2OpTest obj's underlying member method code with example usage: obj.testRaggedDeepStringJoinReduction() without return types