class_docstr: Class for a single sub-env to be vectorized into RemoteBaseEnv.
  
  If you specify this class directly under the "env" config key, RLlib
  will auto-wrap
  
  Note that you may implement your own custom APIs. Here, we demonstrate
  using RLlib's TaskSettableEnv API (which is a simple sub-class
  of gym.Env).
class_docstr_tok: ["Class","for","a","single","sub-env","to","be","vectorized","into","RemoteBaseEnv",".","If","you","specify","this","class","directly","under","the","``","env","''","config","key",",","RLlib","will","auto-wrap","Note","that","you","may","implement","your","own","custom","APIs",".","Here",",","we","demonstrate","using","RLlib","'s","TaskSettableEnv","API","(","which","is","a","simple","sub-class","of","gym.Env",")","."]
code: def __init__(self, config=None):
      super().__init__()
      self.action_space = gym.spaces.Box(0, 1, shape=(1,))
      self.observation_space = gym.spaces.Box(0, 1, shape=(2,))
      self.task = 1
  
file_path: ray/rllib/examples/remote_base_env_with_custom_api.py
imports: import argparse
  import gymnasium
  import os
  import ray
  from ray import air, tune
  from ray.rllib.algorithms.callbacks import DefaultCallbacks
  from ray.rllib.env.apis.task_settable_env import TaskSettableEnv
  from ray.rllib.utils.test_utils import check_learning_achieved
  from ray.tune.registry import get_trainable_cls
label_desc: Use image node_id 1 to create a new NonVectorizedEnvToBeVectorizedIntoRemoteBaseEnv object from inherited base classes: TaskSettableEnv with example: obj = NonVectorizedEnvToBeVectorizedIntoRemoteBaseEnv(config)