code: def test_reversible_permute(self):
      layer = sparsity.ReversibleRandomPermute()
      x = np.array(
          [
              [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13],
              [0, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 11, 12, 13],
              [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13],
          ]
      )
      layer.init(shapes.signature(x))
      ys = layer(x)
      # this assert will fail once per ~87B runs, but it's okay
      self.assertNotEqual(tl.to_list(ys), tl.to_list(x))
  
      self.assertEqual(tl.to_list(ys[0]), tl.to_list(ys[2]))
      self.assertNotEqual(tl.to_list(ys[0]), tl.to_list(ys[1]))
      rev_x = layer.reverse(ys, weights=layer.weights)
      self.assertEqual(tl.to_list(x), tl.to_list(rev_x))
  
imports: import functools
  from absl.testing import parameterized
  import jax
  import numpy
  from tensorflow import test
  from trax import fastmath
  from trax import shapes
  import trax.layers
  from trax.layers import test_utils
  from trax.layers.research import sparsity
label_desc: Use image node_id 1 for calling the ReversibleRandomPermuteTest obj's underlying member method code with example usage: obj.test_reversible_permute() without return types