class_docstr: ngram op test
docstr: test batch 3-order ngram 
docstr_tok: ["test","batch","3-order","ngram"]
code: def test_batch_ngram_op_3_order(self):
      """test batch 3-order ngram"""
  
      ground_truth_3 = [
          [0, 0, 0, 0, 0, 0, 0, 0, 0],
          [223, 0, 0, 0, 0, 0, 0, 0, 0],
          [0, 8, 5008, 0, 0, 0, 0, 0, 0],
          [4, 8, 102492, 0, 0, 0, 0, 0, 0],
          [0, 0, 10, 5000, 5010, 5010, 0, 0, 0],
          [2, 5, 3, 103747, 43140, 51858, 0, 0, 0],
          [7, 2, 1, 24, 50599, 73230, 103743, 45677, 54395],
      ]
  
      word_ngram = 3
      t_input = tf.placeholder(shape=(7, 4), dtype=tf.int32)
      t_ngram = py_x_ops.ngram(
          t_input,
          word_ngrams=word_ngram,
          vocab_size=5000,
          bucket_size=100000,
      )
      logging.info("batch t_ngram: {}".format(t_ngram))
      with tf.Session() as sess:
          sess.run(tf.global_variables_initializer())
          ngram_result = sess.run(
              t_ngram, feed_dict={t_input: self.testcase}
          )
          ngram_result = [list(res) for res in ngram_result]
          self.assertAllEqual(ngram_result, ground_truth_3)
  
file_path: delta/core/ops/kernels/ngram_op_test.py
imports: import delta.compat
  from absl import logging
  from delta.layers.ops import py_x_ops
label_desc: Use image node_id 4 for calling the NGramOpsTest obj's underlying member method code with example usage: obj.test_batch_ngram_op_3_order() without return types