mirror of
https://github.com/Farama-Foundation/Gymnasium.git
synced 2025-08-01 06:07:08 +00:00
Revert "ENH: allow metadata["render_modes"] to be a set" (#251)
This commit is contained in:
@@ -100,7 +100,7 @@ from gymnasium import spaces
|
||||
|
||||
|
||||
class GridWorldEnv(gym.Env):
|
||||
metadata = {"render_modes": {"human", "rgb_array"}, "render_fps": 4}
|
||||
metadata = {"render_modes": ["human", "rgb_array"], "render_fps": 4}
|
||||
|
||||
def __init__(self, render_mode=None, size=5):
|
||||
self.size = size # The size of the square grid
|
||||
@@ -130,6 +130,7 @@ class GridWorldEnv(gym.Env):
|
||||
3: np.array([0, -1]),
|
||||
}
|
||||
|
||||
assert render_mode is None or render_mode in self.metadata["render_modes"]
|
||||
self.render_mode = render_mode
|
||||
|
||||
"""
|
||||
|
@@ -47,7 +47,7 @@ class Env(Generic[ObsType, ActType]):
|
||||
"""
|
||||
|
||||
# Set this in SOME subclasses
|
||||
metadata: dict[str, Any] = {"render_modes": {}}
|
||||
metadata: dict[str, Any] = {"render_modes": []}
|
||||
# define render_mode if your environment supports rendering
|
||||
render_mode: str | None = None
|
||||
reward_range = (-float("inf"), float("inf"))
|
||||
|
@@ -166,7 +166,7 @@ class BipedalWalker(gym.Env, EzPickle):
|
||||
"""
|
||||
|
||||
metadata = {
|
||||
"render_modes": {"human", "rgb_array"},
|
||||
"render_modes": ["human", "rgb_array"],
|
||||
"render_fps": FPS,
|
||||
}
|
||||
|
||||
|
@@ -193,11 +193,11 @@ class CarRacing(gym.Env, EzPickle):
|
||||
"""
|
||||
|
||||
metadata = {
|
||||
"render_modes": {
|
||||
"render_modes": [
|
||||
"human",
|
||||
"rgb_array",
|
||||
"state_pixels",
|
||||
},
|
||||
],
|
||||
"render_fps": FPS,
|
||||
}
|
||||
|
||||
|
@@ -190,7 +190,7 @@ class LunarLander(gym.Env, EzPickle):
|
||||
"""
|
||||
|
||||
metadata = {
|
||||
"render_modes": {"human", "rgb_array"},
|
||||
"render_modes": ["human", "rgb_array"],
|
||||
"render_fps": FPS,
|
||||
}
|
||||
|
||||
|
@@ -141,7 +141,7 @@ class AcrobotEnv(Env):
|
||||
"""
|
||||
|
||||
metadata = {
|
||||
"render_modes": {"human", "rgb_array"},
|
||||
"render_modes": ["human", "rgb_array"],
|
||||
"render_fps": 15,
|
||||
}
|
||||
|
||||
|
@@ -82,7 +82,7 @@ class CartPoleEnv(gym.Env[np.ndarray, Union[int, np.ndarray]]):
|
||||
"""
|
||||
|
||||
metadata = {
|
||||
"render_modes": {"human", "rgb_array"},
|
||||
"render_modes": ["human", "rgb_array"],
|
||||
"render_fps": 50,
|
||||
}
|
||||
|
||||
|
@@ -105,7 +105,7 @@ class Continuous_MountainCarEnv(gym.Env):
|
||||
"""
|
||||
|
||||
metadata = {
|
||||
"render_modes": {"human", "rgb_array"},
|
||||
"render_modes": ["human", "rgb_array"],
|
||||
"render_fps": 30,
|
||||
}
|
||||
|
||||
|
@@ -97,7 +97,7 @@ class MountainCarEnv(gym.Env):
|
||||
"""
|
||||
|
||||
metadata = {
|
||||
"render_modes": {"human", "rgb_array"},
|
||||
"render_modes": ["human", "rgb_array"],
|
||||
"render_fps": 30,
|
||||
}
|
||||
|
||||
|
@@ -93,7 +93,7 @@ class PendulumEnv(gym.Env):
|
||||
"""
|
||||
|
||||
metadata = {
|
||||
"render_modes": {"human", "rgb_array"},
|
||||
"render_modes": ["human", "rgb_array"],
|
||||
"render_fps": 30,
|
||||
}
|
||||
|
||||
|
@@ -7,11 +7,11 @@ from gymnasium.spaces import Box
|
||||
|
||||
class AntEnv(MuJocoPyEnv, utils.EzPickle):
|
||||
metadata = {
|
||||
"render_modes": {
|
||||
"render_modes": [
|
||||
"human",
|
||||
"rgb_array",
|
||||
"depth_array",
|
||||
},
|
||||
],
|
||||
"render_fps": 20,
|
||||
}
|
||||
|
||||
|
@@ -12,11 +12,11 @@ DEFAULT_CAMERA_CONFIG = {
|
||||
|
||||
class AntEnv(MuJocoPyEnv, utils.EzPickle):
|
||||
metadata = {
|
||||
"render_modes": {
|
||||
"render_modes": [
|
||||
"human",
|
||||
"rgb_array",
|
||||
"depth_array",
|
||||
},
|
||||
],
|
||||
"render_fps": 20,
|
||||
}
|
||||
|
||||
|
@@ -182,11 +182,11 @@ class AntEnv(MujocoEnv, utils.EzPickle):
|
||||
"""
|
||||
|
||||
metadata = {
|
||||
"render_modes": {
|
||||
"render_modes": [
|
||||
"human",
|
||||
"rgb_array",
|
||||
"depth_array",
|
||||
},
|
||||
],
|
||||
"render_fps": 20,
|
||||
}
|
||||
|
||||
|
@@ -7,11 +7,11 @@ from gymnasium.spaces import Box
|
||||
|
||||
class HalfCheetahEnv(MuJocoPyEnv, utils.EzPickle):
|
||||
metadata = {
|
||||
"render_modes": {
|
||||
"render_modes": [
|
||||
"human",
|
||||
"rgb_array",
|
||||
"depth_array",
|
||||
},
|
||||
],
|
||||
"render_fps": 20,
|
||||
}
|
||||
|
||||
|
@@ -14,11 +14,11 @@ DEFAULT_CAMERA_CONFIG = {
|
||||
|
||||
class HalfCheetahEnv(MuJocoPyEnv, utils.EzPickle):
|
||||
metadata = {
|
||||
"render_modes": {
|
||||
"render_modes": [
|
||||
"human",
|
||||
"rgb_array",
|
||||
"depth_array",
|
||||
},
|
||||
],
|
||||
"render_fps": 20,
|
||||
}
|
||||
|
||||
|
@@ -136,11 +136,11 @@ class HalfCheetahEnv(MujocoEnv, utils.EzPickle):
|
||||
"""
|
||||
|
||||
metadata = {
|
||||
"render_modes": {
|
||||
"render_modes": [
|
||||
"human",
|
||||
"rgb_array",
|
||||
"depth_array",
|
||||
},
|
||||
],
|
||||
"render_fps": 20,
|
||||
}
|
||||
|
||||
|
@@ -7,11 +7,11 @@ from gymnasium.spaces import Box
|
||||
|
||||
class HopperEnv(MuJocoPyEnv, utils.EzPickle):
|
||||
metadata = {
|
||||
"render_modes": {
|
||||
"render_modes": [
|
||||
"human",
|
||||
"rgb_array",
|
||||
"depth_array",
|
||||
},
|
||||
],
|
||||
"render_fps": 125,
|
||||
}
|
||||
|
||||
|
@@ -17,11 +17,11 @@ DEFAULT_CAMERA_CONFIG = {
|
||||
|
||||
class HopperEnv(MuJocoPyEnv, utils.EzPickle):
|
||||
metadata = {
|
||||
"render_modes": {
|
||||
"render_modes": [
|
||||
"human",
|
||||
"rgb_array",
|
||||
"depth_array",
|
||||
},
|
||||
],
|
||||
"render_fps": 125,
|
||||
}
|
||||
|
||||
|
@@ -142,11 +142,11 @@ class HopperEnv(MujocoEnv, utils.EzPickle):
|
||||
"""
|
||||
|
||||
metadata = {
|
||||
"render_modes": {
|
||||
"render_modes": [
|
||||
"human",
|
||||
"rgb_array",
|
||||
"depth_array",
|
||||
},
|
||||
],
|
||||
"render_fps": 125,
|
||||
}
|
||||
|
||||
|
@@ -13,11 +13,11 @@ def mass_center(model, sim):
|
||||
|
||||
class HumanoidEnv(MuJocoPyEnv, utils.EzPickle):
|
||||
metadata = {
|
||||
"render_modes": {
|
||||
"render_modes": [
|
||||
"human",
|
||||
"rgb_array",
|
||||
"depth_array",
|
||||
},
|
||||
],
|
||||
"render_fps": 67,
|
||||
}
|
||||
|
||||
|
@@ -21,11 +21,11 @@ def mass_center(model, sim):
|
||||
|
||||
class HumanoidEnv(MuJocoPyEnv, utils.EzPickle):
|
||||
metadata = {
|
||||
"render_modes": {
|
||||
"render_modes": [
|
||||
"human",
|
||||
"rgb_array",
|
||||
"depth_array",
|
||||
},
|
||||
],
|
||||
"render_fps": 67,
|
||||
}
|
||||
|
||||
|
@@ -216,11 +216,11 @@ class HumanoidEnv(MujocoEnv, utils.EzPickle):
|
||||
"""
|
||||
|
||||
metadata = {
|
||||
"render_modes": {
|
||||
"render_modes": [
|
||||
"human",
|
||||
"rgb_array",
|
||||
"depth_array",
|
||||
},
|
||||
],
|
||||
"render_fps": 67,
|
||||
}
|
||||
|
||||
|
@@ -7,11 +7,11 @@ from gymnasium.spaces import Box
|
||||
|
||||
class HumanoidStandupEnv(MuJocoPyEnv, utils.EzPickle):
|
||||
metadata = {
|
||||
"render_modes": {
|
||||
"render_modes": [
|
||||
"human",
|
||||
"rgb_array",
|
||||
"depth_array",
|
||||
},
|
||||
],
|
||||
"render_fps": 67,
|
||||
}
|
||||
|
||||
|
@@ -192,11 +192,11 @@ class HumanoidStandupEnv(MujocoEnv, utils.EzPickle):
|
||||
"""
|
||||
|
||||
metadata = {
|
||||
"render_modes": {
|
||||
"render_modes": [
|
||||
"human",
|
||||
"rgb_array",
|
||||
"depth_array",
|
||||
},
|
||||
],
|
||||
"render_fps": 67,
|
||||
}
|
||||
|
||||
|
@@ -7,11 +7,11 @@ from gymnasium.spaces import Box
|
||||
|
||||
class InvertedDoublePendulumEnv(MuJocoPyEnv, utils.EzPickle):
|
||||
metadata = {
|
||||
"render_modes": {
|
||||
"render_modes": [
|
||||
"human",
|
||||
"rgb_array",
|
||||
"depth_array",
|
||||
},
|
||||
],
|
||||
"render_fps": 20,
|
||||
}
|
||||
|
||||
|
@@ -125,11 +125,11 @@ class InvertedDoublePendulumEnv(MujocoEnv, utils.EzPickle):
|
||||
"""
|
||||
|
||||
metadata = {
|
||||
"render_modes": {
|
||||
"render_modes": [
|
||||
"human",
|
||||
"rgb_array",
|
||||
"depth_array",
|
||||
},
|
||||
],
|
||||
"render_fps": 20,
|
||||
}
|
||||
|
||||
|
@@ -7,11 +7,11 @@ from gymnasium.spaces import Box
|
||||
|
||||
class InvertedPendulumEnv(MuJocoPyEnv, utils.EzPickle):
|
||||
metadata = {
|
||||
"render_modes": {
|
||||
"render_modes": [
|
||||
"human",
|
||||
"rgb_array",
|
||||
"depth_array",
|
||||
},
|
||||
],
|
||||
"render_fps": 25,
|
||||
}
|
||||
|
||||
|
@@ -94,11 +94,11 @@ class InvertedPendulumEnv(MujocoEnv, utils.EzPickle):
|
||||
"""
|
||||
|
||||
metadata = {
|
||||
"render_modes": {
|
||||
"render_modes": [
|
||||
"human",
|
||||
"rgb_array",
|
||||
"depth_array",
|
||||
},
|
||||
],
|
||||
"render_fps": 25,
|
||||
}
|
||||
|
||||
|
@@ -56,11 +56,11 @@ class BaseMujocoEnv(gym.Env):
|
||||
|
||||
self.frame_skip = frame_skip
|
||||
|
||||
assert self.metadata["render_modes"] == {
|
||||
assert self.metadata["render_modes"] == [
|
||||
"human",
|
||||
"rgb_array",
|
||||
"depth_array",
|
||||
}, self.metadata["render_modes"]
|
||||
], self.metadata["render_modes"]
|
||||
assert (
|
||||
int(np.round(1.0 / self.dt)) == self.metadata["render_fps"]
|
||||
), f'Expected value: {int(np.round(1.0 / self.dt))}, Actual value: {self.metadata["render_fps"]}'
|
||||
|
@@ -7,11 +7,11 @@ from gymnasium.spaces import Box
|
||||
|
||||
class PusherEnv(MuJocoPyEnv, utils.EzPickle):
|
||||
metadata = {
|
||||
"render_modes": {
|
||||
"render_modes": [
|
||||
"human",
|
||||
"rgb_array",
|
||||
"depth_array",
|
||||
},
|
||||
],
|
||||
"render_fps": 20,
|
||||
}
|
||||
|
||||
|
@@ -140,11 +140,11 @@ class PusherEnv(MujocoEnv, utils.EzPickle):
|
||||
"""
|
||||
|
||||
metadata = {
|
||||
"render_modes": {
|
||||
"render_modes": [
|
||||
"human",
|
||||
"rgb_array",
|
||||
"depth_array",
|
||||
},
|
||||
],
|
||||
"render_fps": 20,
|
||||
}
|
||||
|
||||
|
@@ -7,11 +7,11 @@ from gymnasium.spaces import Box
|
||||
|
||||
class ReacherEnv(MuJocoPyEnv, utils.EzPickle):
|
||||
metadata = {
|
||||
"render_modes": {
|
||||
"render_modes": [
|
||||
"human",
|
||||
"rgb_array",
|
||||
"depth_array",
|
||||
},
|
||||
],
|
||||
"render_fps": 50,
|
||||
}
|
||||
|
||||
|
@@ -122,11 +122,11 @@ class ReacherEnv(MujocoEnv, utils.EzPickle):
|
||||
"""
|
||||
|
||||
metadata = {
|
||||
"render_modes": {
|
||||
"render_modes": [
|
||||
"human",
|
||||
"rgb_array",
|
||||
"depth_array",
|
||||
},
|
||||
],
|
||||
"render_fps": 50,
|
||||
}
|
||||
|
||||
|
@@ -7,11 +7,11 @@ from gymnasium.spaces import Box
|
||||
|
||||
class SwimmerEnv(MuJocoPyEnv, utils.EzPickle):
|
||||
metadata = {
|
||||
"render_modes": {
|
||||
"render_modes": [
|
||||
"human",
|
||||
"rgb_array",
|
||||
"depth_array",
|
||||
},
|
||||
],
|
||||
"render_fps": 25,
|
||||
}
|
||||
|
||||
|
@@ -12,11 +12,11 @@ DEFAULT_CAMERA_CONFIG = {}
|
||||
|
||||
class SwimmerEnv(MuJocoPyEnv, utils.EzPickle):
|
||||
metadata = {
|
||||
"render_modes": {
|
||||
"render_modes": [
|
||||
"human",
|
||||
"rgb_array",
|
||||
"depth_array",
|
||||
},
|
||||
],
|
||||
"render_fps": 25,
|
||||
}
|
||||
|
||||
|
@@ -125,11 +125,11 @@ class SwimmerEnv(MujocoEnv, utils.EzPickle):
|
||||
"""
|
||||
|
||||
metadata = {
|
||||
"render_modes": {
|
||||
"render_modes": [
|
||||
"human",
|
||||
"rgb_array",
|
||||
"depth_array",
|
||||
},
|
||||
],
|
||||
"render_fps": 25,
|
||||
}
|
||||
|
||||
|
@@ -7,11 +7,11 @@ from gymnasium.spaces import Box
|
||||
|
||||
class Walker2dEnv(MuJocoPyEnv, utils.EzPickle):
|
||||
metadata = {
|
||||
"render_modes": {
|
||||
"render_modes": [
|
||||
"human",
|
||||
"rgb_array",
|
||||
"depth_array",
|
||||
},
|
||||
],
|
||||
"render_fps": 125,
|
||||
}
|
||||
|
||||
|
@@ -15,11 +15,11 @@ DEFAULT_CAMERA_CONFIG = {
|
||||
|
||||
class Walker2dEnv(MuJocoPyEnv, utils.EzPickle):
|
||||
metadata = {
|
||||
"render_modes": {
|
||||
"render_modes": [
|
||||
"human",
|
||||
"rgb_array",
|
||||
"depth_array",
|
||||
},
|
||||
],
|
||||
"render_fps": 125,
|
||||
}
|
||||
|
||||
|
@@ -147,11 +147,11 @@ class Walker2dEnv(MujocoEnv, utils.EzPickle):
|
||||
"""
|
||||
|
||||
metadata = {
|
||||
"render_modes": {
|
||||
"render_modes": [
|
||||
"human",
|
||||
"rgb_array",
|
||||
"depth_array",
|
||||
},
|
||||
],
|
||||
"render_fps": 125,
|
||||
}
|
||||
|
||||
|
@@ -240,7 +240,7 @@ class CartPoleFunctional(
|
||||
class CartPoleJaxEnv(FunctionalJaxEnv, EzPickle):
|
||||
"""Jax-based implementation of the CartPole environment."""
|
||||
|
||||
metadata = {"render_modes": {"rgb_array"}, "render_fps": 50}
|
||||
metadata = {"render_modes": ["rgb_array"], "render_fps": 50}
|
||||
|
||||
def __init__(self, render_mode: str | None = None, **kwargs: Any):
|
||||
"""Constructor for the CartPole where the kwargs are applied to the functional environment."""
|
||||
|
@@ -192,7 +192,7 @@ class PendulumFunctional(
|
||||
class PendulumJaxEnv(FunctionalJaxEnv, EzPickle):
|
||||
"""Jax-based pendulum environment using the functional version as base."""
|
||||
|
||||
metadata = {"render_modes": {"rgb_array"}, "render_fps": 30}
|
||||
metadata = {"render_modes": ["rgb_array"], "render_fps": 30}
|
||||
|
||||
def __init__(self, render_mode: str | None = None, **kwargs: Any):
|
||||
"""Constructor where the kwargs are passed to the base environment to modify the parameters."""
|
||||
|
@@ -145,7 +145,7 @@ class BlackjackEnv(gym.Env):
|
||||
"""
|
||||
|
||||
metadata = {
|
||||
"render_modes": {"human", "rgb_array"},
|
||||
"render_modes": ["human", "rgb_array"],
|
||||
"render_fps": 4,
|
||||
}
|
||||
|
||||
|
@@ -91,7 +91,7 @@ class CliffWalkingEnv(Env):
|
||||
"""
|
||||
|
||||
metadata = {
|
||||
"render_modes": {"human", "rgb_array", "ansi"},
|
||||
"render_modes": ["human", "rgb_array", "ansi"],
|
||||
"render_fps": 4,
|
||||
}
|
||||
|
||||
|
@@ -211,7 +211,7 @@ class FrozenLakeEnv(Env):
|
||||
"""
|
||||
|
||||
metadata = {
|
||||
"render_modes": {"human", "ansi", "rgb_array"},
|
||||
"render_modes": ["human", "ansi", "rgb_array"],
|
||||
"render_fps": 4,
|
||||
}
|
||||
|
||||
|
@@ -152,7 +152,7 @@ class TaxiEnv(Env):
|
||||
"""
|
||||
|
||||
metadata = {
|
||||
"render_modes": {"human", "ansi", "rgb_array"},
|
||||
"render_modes": ["human", "ansi", "rgb_array"],
|
||||
"render_fps": 4,
|
||||
}
|
||||
|
||||
|
@@ -341,9 +341,9 @@ def env_render_passive_checker(env):
|
||||
"No render modes was declared in the environment (env.metadata['render_modes'] is None or not defined), you may have trouble when calling `.render()`."
|
||||
)
|
||||
else:
|
||||
if not isinstance(render_modes, (set, list, tuple)):
|
||||
if not isinstance(render_modes, (list, tuple)):
|
||||
logger.warn(
|
||||
f"Expects the render_modes to be a set, list or tuple, actual type: {type(render_modes)}"
|
||||
f"Expects the render_modes to be a sequence (i.e. list, tuple), actual type: {type(render_modes)}"
|
||||
)
|
||||
elif not all(isinstance(mode, str) for mode in render_modes):
|
||||
logger.warn(
|
||||
|
@@ -68,7 +68,7 @@ class EnvCompatibility(gym.Env):
|
||||
"The `gymnasium.make(..., apply_api_compatibility=...)` parameter is deprecated and will be removed in v28. "
|
||||
"Instead use `gym.make('GymV22Environment-v0', env_name=...)` or `from shimmy import GymV26CompatibilityV0`"
|
||||
)
|
||||
self.metadata = getattr(old_env, "metadata", {"render_modes": {}})
|
||||
self.metadata = getattr(old_env, "metadata", {"render_modes": []})
|
||||
self.render_mode = render_mode
|
||||
self.reward_range = getattr(old_env, "reward_range", None)
|
||||
self.spec = getattr(old_env, "spec", None)
|
||||
|
@@ -62,9 +62,7 @@ class HumanRendering(gym.Wrapper):
|
||||
|
||||
self.metadata = copy.deepcopy(self.env.metadata)
|
||||
if "human" not in self.metadata["render_modes"]:
|
||||
self.metadata["render_modes"] = set(self.metadata["render_modes"]).add(
|
||||
"human"
|
||||
)
|
||||
self.metadata["render_modes"].append("human")
|
||||
|
||||
@property
|
||||
def render_mode(self):
|
||||
|
@@ -26,7 +26,7 @@ class RenderCollection(gym.Wrapper):
|
||||
|
||||
self.metadata = copy.deepcopy(self.env.metadata)
|
||||
if f"{self.env.render_mode}_list" not in self.metadata["render_modes"]:
|
||||
set(self.metadata["render_modes"]).add(f"{self.env.render_mode}_list")
|
||||
self.metadata["render_modes"].append(f"{self.env.render_mode}_list")
|
||||
|
||||
@property
|
||||
def render_mode(self):
|
||||
|
@@ -250,10 +250,11 @@ def test_make_render_mode(register_make_testing_envs):
|
||||
env.close()
|
||||
|
||||
assert len(valid_render_modes) > 0
|
||||
valid_mode = next(iter(valid_render_modes))
|
||||
with warnings.catch_warnings(record=True) as caught_warnings:
|
||||
env = gym.make("CartPole-v1", render_mode=valid_mode, disable_env_checker=True)
|
||||
assert env.render_mode == valid_mode
|
||||
env = gym.make(
|
||||
"CartPole-v1", render_mode=valid_render_modes[0], disable_env_checker=True
|
||||
)
|
||||
assert env.render_mode == valid_render_modes[0]
|
||||
env.close()
|
||||
|
||||
for warning in caught_warnings:
|
||||
@@ -313,7 +314,7 @@ def test_make_render_mode(register_make_testing_envs):
|
||||
with pytest.warns(
|
||||
UserWarning,
|
||||
match=re.escape(
|
||||
"\x1b[33mWARN: The environment is being initialised with render_mode='rgb_array' that is not in the possible render_modes ({}).\x1b[0m"
|
||||
"\x1b[33mWARN: The environment is being initialised with render_mode='rgb_array' that is not in the possible render_modes ([]).\x1b[0m"
|
||||
),
|
||||
):
|
||||
gym.make("test/NoRenderModesMetadata-v0", render_mode="rgb_array")
|
||||
|
@@ -23,7 +23,7 @@ class ArgumentEnv(gym.Env):
|
||||
class NoHuman(gym.Env):
|
||||
"""Environment that does not have human-rendering."""
|
||||
|
||||
metadata = {"render_modes": {"rgb_array_list"}, "render_fps": 4}
|
||||
metadata = {"render_modes": ["rgb_array_list"], "render_fps": 4}
|
||||
|
||||
def __init__(self, render_mode=None):
|
||||
assert render_mode in self.metadata["render_modes"]
|
||||
@@ -33,7 +33,7 @@ class NoHuman(gym.Env):
|
||||
class NoHumanOldAPI(gym.Env):
|
||||
"""Environment that does not have human-rendering."""
|
||||
|
||||
metadata = {"render_modes": {"rgb_array_list"}, "render_fps": 4}
|
||||
metadata = {"render_modes": ["rgb_array_list"], "render_fps": 4}
|
||||
|
||||
def __init__(self):
|
||||
pass
|
||||
@@ -42,7 +42,7 @@ class NoHumanOldAPI(gym.Env):
|
||||
class NoHumanNoRGB(gym.Env):
|
||||
"""Environment that has neither human- nor rgb-rendering"""
|
||||
|
||||
metadata = {"render_modes": {"ascii"}, "render_fps": 4}
|
||||
metadata = {"render_modes": ["ascii"], "render_fps": 4}
|
||||
|
||||
def __init__(self, render_mode=None):
|
||||
assert render_mode in self.metadata["render_modes"]
|
||||
|
@@ -136,7 +136,7 @@ properties = [
|
||||
},
|
||||
{"action_space": spaces.Discrete(2)},
|
||||
{"reward_range": (-1.0, 1.0)},
|
||||
{"metadata": {"render_modes": {"human", "rgb_array_list"}}},
|
||||
{"metadata": {"render_modes": ["human", "rgb_array_list"]}},
|
||||
{
|
||||
"observation_space": spaces.Box(
|
||||
low=0.0, high=1.0, shape=(64, 64, 3), dtype=np.float32
|
||||
@@ -207,7 +207,7 @@ def test_gymnasium_env():
|
||||
"""Tests a gymnasium environment."""
|
||||
env = ExampleEnv()
|
||||
|
||||
assert env.metadata == {"render_modes": {}}
|
||||
assert env.metadata == {"render_modes": []}
|
||||
assert env.render_mode is None
|
||||
assert env.reward_range == (-float("inf"), float("inf"))
|
||||
assert env.spec is None
|
||||
@@ -247,7 +247,7 @@ def test_gymnasium_wrapper():
|
||||
wrapper_env = ExampleWrapper(env)
|
||||
|
||||
assert env.metadata == wrapper_env.metadata
|
||||
wrapper_env.metadata = {"render_modes": {"rgb_array"}}
|
||||
wrapper_env.metadata = {"render_modes": ["rgb_array"]}
|
||||
assert env.metadata != wrapper_env.metadata
|
||||
|
||||
assert env.render_mode == wrapper_env.render_mode
|
||||
|
@@ -48,7 +48,7 @@ class GenericTestEnv(gym.Env):
|
||||
reset_func: callable = basic_reset_func,
|
||||
step_func: callable = new_step_func,
|
||||
render_func: callable = basic_render_func,
|
||||
metadata: dict[str, Any] = {"render_modes": {}},
|
||||
metadata: dict[str, Any] = {"render_modes": []},
|
||||
render_mode: str | None = None,
|
||||
spec: EnvSpec = EnvSpec(
|
||||
"TestingEnv-v0", "testing-env-no-entry-point", max_episode_steps=100
|
||||
|
@@ -402,7 +402,7 @@ def test_passive_env_step_checker(
|
||||
[
|
||||
UserWarning,
|
||||
GenericTestEnv(metadata={"render_modes": "Testing mode"}),
|
||||
"Expects the render_modes to be a set, list or tuple, actual type: <class 'str'>",
|
||||
"Expects the render_modes to be a sequence (i.e. list, tuple), actual type: <class 'str'>",
|
||||
],
|
||||
[
|
||||
UserWarning,
|
||||
@@ -414,7 +414,7 @@ def test_passive_env_step_checker(
|
||||
[
|
||||
UserWarning,
|
||||
GenericTestEnv(
|
||||
metadata={"render_modes": {"Testing mode"}, "render_fps": None},
|
||||
metadata={"render_modes": ["Testing mode"], "render_fps": None},
|
||||
render_mode="Testing mode",
|
||||
render_func=lambda self: 0,
|
||||
),
|
||||
@@ -423,24 +423,24 @@ def test_passive_env_step_checker(
|
||||
[
|
||||
UserWarning,
|
||||
GenericTestEnv(
|
||||
metadata={"render_modes": {"Testing mode"}, "render_fps": "fps"}
|
||||
metadata={"render_modes": ["Testing mode"], "render_fps": "fps"}
|
||||
),
|
||||
"Expects the `env.metadata['render_fps']` to be an integer or a float, actual type: <class 'str'>",
|
||||
],
|
||||
[
|
||||
AssertionError,
|
||||
GenericTestEnv(
|
||||
metadata={"render_modes": set(), "render_fps": 30}, render_mode="Test"
|
||||
metadata={"render_modes": [], "render_fps": 30}, render_mode="Test"
|
||||
),
|
||||
"With no render_modes, expects the Env.render_mode to be None, actual value: Test",
|
||||
],
|
||||
[
|
||||
AssertionError,
|
||||
GenericTestEnv(
|
||||
metadata={"render_modes": {"Testing mode"}, "render_fps": 30},
|
||||
metadata={"render_modes": ["Testing mode"], "render_fps": 30},
|
||||
render_mode="Non mode",
|
||||
),
|
||||
"The environment was initialized successfully however with an unsupported render mode. Render mode: Non mode, modes: {'Testing mode'}",
|
||||
"The environment was initialized successfully however with an unsupported render mode. Render mode: Non mode, modes: ['Testing mode']",
|
||||
],
|
||||
],
|
||||
)
|
||||
|
@@ -20,7 +20,7 @@ IRRELEVANT_KEY = 1
|
||||
|
||||
PlayableEnv = partial(
|
||||
GenericTestEnv,
|
||||
metadata={"render_modes": {"rgb_array"}},
|
||||
metadata={"render_modes": ["rgb_array"]},
|
||||
render_func=lambda self: np.ones((10, 10, 3)),
|
||||
)
|
||||
|
||||
|
@@ -95,7 +95,7 @@ def test_api_failures():
|
||||
|
||||
with pytest.warns(
|
||||
UserWarning,
|
||||
match=r"Expects the render_modes to be a set, list or tuple, actual type: <class 'str'>",
|
||||
match=r"Expects the render_modes to be a sequence \(i\.e\. list, tuple\), actual type: <class 'str'>",
|
||||
):
|
||||
env.render()
|
||||
assert env.checked_render
|
||||
|
@@ -8,7 +8,7 @@ from gymnasium.wrappers.monitoring.video_recorder import VideoRecorder
|
||||
|
||||
|
||||
class BrokenRecordableEnv(gym.Env):
|
||||
metadata = {"render_modes": {"rgb_array_list"}}
|
||||
metadata = {"render_modes": ["rgb_array_list"]}
|
||||
|
||||
def __init__(self, render_mode="rgb_array_list"):
|
||||
self.render_mode = render_mode
|
||||
@@ -18,7 +18,7 @@ class BrokenRecordableEnv(gym.Env):
|
||||
|
||||
|
||||
class UnrecordableEnv(gym.Env):
|
||||
metadata = {"render_modes": {}}
|
||||
metadata = {"render_modes": [None]}
|
||||
|
||||
def __init__(self, render_mode=None):
|
||||
self.render_mode = render_mode
|
||||
|
Reference in New Issue
Block a user