code: def test_gather_per_row_3d(self):
      example_feature = [
          [[1.0, 2.0, 3.0], [4.0, 5.0, 6.0], [7.0, 8.0, 9.0]],
          [[10.0, 20.0, 30.0], [40.0, 50.0, 60.0], [70.0, 80.0, 90.0]],
      ]
      indices = [[1, 2, 0], [2, 1, 0]]
      gathered_example_feature = utils.gather_per_row(
          inputs=example_feature, indices=indices
      )
      self.assertAllEqual(
          gathered_example_feature,
          [
              [[4.0, 5.0, 6.0], [7.0, 8.0, 9.0], [1.0, 2.0, 3.0]],
              [
                  [70.0, 80.0, 90.0],
                  [40.0, 50.0, 60.0],
                  [10.0, 20.0, 30.0],
              ],
          ],
      )
  
      indices = [[2, 0], [1, 0]]
      gathered_example_feature = utils.gather_per_row(
          inputs=example_feature, indices=indices
      )
      self.assertAllEqual(
          gathered_example_feature,
          [
              [[7.0, 8.0, 9.0], [1.0, 2.0, 3.0]],
              [[40.0, 50.0, 60.0], [10.0, 20.0, 30.0]],
          ],
      )
  
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  import math
  import tensorflow
  from tensorflow_ranking.python import utils
label_desc: Use image node_id 3 for calling the UtilsTest obj's underlying member method code with example usage: obj.test_gather_per_row_3d() without return types