code: def testGatherRagged(
      self, params, indices, axis, batch_dims, expected
  ):
      params = StructuredTensor.from_pyval(params)
      # Shouldn't need to do this, but see cl/366396997
      indices = ragged_factory_ops.constant(indices)
      # validate_indices isn't actually used, and we aren't testing names
      actual = array_ops.gather(
          params,
          indices,
          validate_indices=True,
          axis=axis,
          name=None,
          batch_dims=batch_dims,
      )
      self.assertAllEqual(actual, expected)
  
imports: from absl.testing import parameterized
  from tensorflow.python.eager import def_function
  from tensorflow.python.framework import dtypes
  from tensorflow.python.framework import random_seed
  from tensorflow.python.framework import tensor
  from tensorflow.python.framework import tensor_shape
  from tensorflow.python.framework import test_util
  from tensorflow.python.ops import array_ops
  from tensorflow.python.ops import math_ops
  from tensorflow.python.ops import random_ops
  from tensorflow.python.ops.ragged import ragged_factory_ops
  from tensorflow.python.ops.ragged import ragged_tensor
  from tensorflow.python.ops.ragged import row_partition
  from tensorflow.python.ops.ragged.dynamic_ragged_shape import DynamicRaggedShape
  from tensorflow.python.ops.structured import structured_array_ops
  from tensorflow.python.ops.structured import structured_tensor
  from tensorflow.python.ops.structured.structured_tensor import StructuredTensor
  from tensorflow.python.platform import googletest
  from tensorflow.python.util import nest
label_desc: Use image node_id 36 for calling the StructuredArrayOpsTest obj's underlying member method code with example usage: obj.testGatherRagged(params, indices, axis, batch_dims, expected) without return types