text: import unittest
  from os import path
  
  import numpy as np
  from pyrep.const import RenderMode
  
  from rlbench import Environment
  from rlbench.action_modes.action_mode import MoveArmThenGripper
  from rlbench.action_modes.arm_action_modes import JointVelocity
  from rlbench.action_modes.gripper_action_modes import Discrete
  from rlbench.observation_config import ObservationConfig, CameraConfig
  from rlbench.sim2real.domain_randomization import RandomizeEvery, \
      VisualRandomizationConfig
  from rlbench.tasks.open_microwave import OpenMicrowave
  
  ASSET_DIR = path.join(path.dirname(path.abspath(__file__)), 'assets', 'textures')
  
  
  class TestDomainRandomizaionEnvironment(unittest.TestCase):
  
      def tearDown(self):
          self.env.shutdown()
  
      def get_task(self, randomize_every, frequency, visual_config=None,
                   dynamics_config=None):
          cam_config = CameraConfig(render_mode=RenderMode.OPENGL)
          obs_config = ObservationConfig(right_shoulder_camera=cam_config)
          obs_config.set_all(False)
          obs_config.set_all_low_dim(True)
          obs_config.right_shoulder_camera.rgb = True
          mode = MoveArmThenGripper(JointVelocity(), Discrete())
          self.env = Environment(
              mode, ASSET_DIR, obs_config, True, True, 'panda',
              randomize_every, frequency, visual_config, dynamics_config)
          self.env.launch()
          return self.env.get_task(OpenMicrowave)
  
      def test_visual_randomize_every_2_episodes(self):
          visual_config = VisualRandomizationConfig(ASSET_DIR)
          task = self.get_task(RandomizeEvery.EPISODE, 2, visual_config)
          _, obs1 = task.reset()
          _, obs2 = task.reset()
          _, obs3 = task.reset()
          # obs1 and obs2 should be almost identical
          self.assertLess(
              np.mean(np.abs(obs1.right_shoulder_rgb - obs2.right_shoulder_rgb)),
              5)
          # obs2 and obs3 should be very different
          self.assertGreater(
              np.mean(np.abs(obs2.right_shoulder_rgb - obs3.right_shoulder_rgb)),
              5)
  
      def test_visual_randomize_every_2_transitions(self):
          visual_config = VisualRandomizationConfig(ASSET_DIR)
          task = self.get_task(RandomizeEvery.TRANSITION, 2, visual_config)
          _, _ = task.reset()
          a = ([0.0] * 7) + [1.0]
          obs1, _, _ = task.step(a)
          obs2, _, _ = task.step(a)
          obs3, _, _ = task.step(a)
          # obs1 and obs2 should be almost identical
          self.assertLess(
              np.mean(np.abs(obs1.right_shoulder_rgb - obs2.right_shoulder_rgb)),
              5)
          # obs2 and obs3 should be very different
          self.assertGreater(
              np.mean(np.abs(obs2.right_shoulder_rgb - obs3.right_shoulder_rgb)),
              5)
  