code: def test_rlms_and_preprocessing(self):
      config = (
          ppo.PPOConfig()
          .experimental(_enable_new_api_stack=True)
          .framework("tf2")
          .environment(
              env="ray.rllib.examples.env.random_env.RandomEnv",
              env_config={
                  "config": {
                      "observation_space": Box(
                          -1.0, 1.0, (1,), dtype=np.int32
                      ),
                  },
              },
          )
          # Run this very quickly locally.
          .rollouts(num_rollout_workers=0)
          .training(
              train_batch_size=10,
              sgd_minibatch_size=1,
              num_sgd_iter=1,
          )
          # Set this to True to enforce no preprocessors being used.
          .experimental(_disable_preprocessor_api=True)
      )
  
      for _ in framework_iterator(config, frameworks=("torch", "tf2")):
          algo = config.build()
          results = algo.train()
          check_train_results(results)
          check_compute_single_action(algo)
          algo.stop()
  
imports: import gymnasium
  from gymnasium.spaces import Box, Dict, Discrete, MultiDiscrete, Tuple, MultiBinary
  import numpy
  import unittest
  import ray
  import ray.rllib.algorithms.ppo
  from ray.rllib.models.catalog import ModelCatalog
  from ray.rllib.models.preprocessors import DictFlatteningPreprocessor, get_preprocessor, NoPreprocessor, TupleFlatteningPreprocessor, OneHotPreprocessor, AtariRamPreprocessor, GenericPixelPreprocessor, MultiBinaryPreprocessor
  from ray.rllib.utils.test_utils import check, check_compute_single_action, check_train_results, framework_iterator
  from ray.rllib.utils.framework import try_import_tf
label_desc: Use image node_id 3 for calling the TestPreprocessors obj's underlying member method code with example usage: obj.test_rlms_and_preprocessing() without return types