code: def test_inverse(self, transform, invertible, use_metatensor):
      data = {k: MetaTensor((i + 1) * 10.0) for i, k in enumerate(KEYS)}
      fwd_data1 = transform(data)
      # test call twice won't affect inverse
      fwd_data2 = transform(data)
  
      if invertible:
          for k in KEYS:
              t = fwd_data1[k].applied_operations[-1]
              # make sure the RandomOrder applied_order was stored
              self.assertEqual(
                  t[TraceKeys.CLASS_NAME], RandomOrder.__name__
              )
  
      # call the inverse
      fwd_inv_data1 = transform.inverse(fwd_data1)
      fwd_inv_data2 = transform.inverse(fwd_data2)
  
      fwd_data = [fwd_data1, fwd_data2]
      fwd_inv_data = [fwd_inv_data1, fwd_inv_data2]
      for i, _fwd_inv_data in enumerate(fwd_inv_data):
          if invertible:
              for k in KEYS:
                  # check data is same as original (and different from forward)
                  self.assertEqual(_fwd_inv_data[k], data[k])
                  self.assertNotEqual(_fwd_inv_data[k], fwd_data[i][k])
          else:
              # if not invertible, should not change the data
              self.assertDictEqual(fwd_data[i], _fwd_inv_data)
  
imports: from __future__ import annotations
  import unittest
  from copy import deepcopy
  import numpy
  import torch
  from parameterized import parameterized
  import monai.transforms.intensity.array
  import monai.transforms.spatial.array
  import monai.transforms.spatial.dictionary
  from monai.data import MetaTensor
  from monai.transforms import RandomOrder
  from monai.transforms.compose import Compose
  from monai.utils import set_determinism
  from monai.utils.enums import TraceKeys
  from tests.test_one_of import A, B, C, Inv, NonInv, X, Y
label_desc: Use image node_id 3 for calling the TestRandomOrder obj's underlying member method code with example usage: obj.test_inverse(transform, invertible, use_metatensor) without return types