code: def test_dense_input_rank_3(self):
      data = [[[b"a", b"z"], [b"b", b""]], [[b"b", b""], [b"e", b"f"]]]
      data_tensor = constant_op.constant(data)
      ngram_op = ragged_string_ops.ngrams(
          data_tensor,
          ngram_width=3,
          separator=b"|",
          pad_values=(b"LP", b"RP"),
      )
      result = self.evaluate(ngram_op)
      expected_ngrams = [
          [
              [b"LP|LP|a", b"LP|a|z", b"a|z|RP", b"z|RP|RP"],
              [b"LP|LP|b", b"LP|b|", b"b||RP", b"|RP|RP"],
          ],
          [
              [b"LP|LP|b", b"LP|b|", b"b||RP", b"|RP|RP"],
              [b"LP|LP|e", b"LP|e|f", b"e|f|RP", b"f|RP|RP"],
          ],
      ]
      self.assertIsInstance(ngram_op, tensor.Tensor)
      self.assertAllEqual(expected_ngrams, result)
  
imports: from absl.testing import parameterized
  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 tensor
  from tensorflow.python.framework import test_util
  from tensorflow.python.ops.ragged import ragged_factory_ops
  from tensorflow.python.ops.ragged import ragged_string_ops
  from tensorflow.python.platform import test
label_desc: Use image node_id 17 for calling the StringNgramsTest obj's underlying member method code with example usage: obj.test_dense_input_rank_3() without return types