Error make_vec for vector entry point with non-empty additional wrappers (#983)

This commit is contained in:
Mark Towers
2024-03-25 10:11:14 +00:00
committed by GitHub
parent b600896b4d
commit 373ccf0e00
2 changed files with 43 additions and 3 deletions

View File

@@ -934,9 +934,13 @@ def make_vec(
raise error.Error(
f"Custom vector environment can be passed arguments only through kwargs and `vector_kwargs` is not empty ({vector_kwargs})"
)
if len(wrappers) > 0:
elif len(wrappers) > 0:
raise error.Error(
"Cannot use `vector_entry_point` vectorization mode with the wrappers argument."
f"Cannot use `vector_entry_point` vectorization mode with the wrappers argument ({wrappers})."
)
elif len(env_spec.additional_wrappers) > 0:
raise error.Error(
f"Cannot use `vector_entry_point` vectorization mode with the additional_wrappers parameter in spec being not empty ({env_spec.additional_wrappers})."
)
entry_point = env_spec.vector_entry_point

View File

@@ -4,7 +4,7 @@ import re
import pytest
import gymnasium as gym
from gymnasium import VectorizeMode
from gymnasium import VectorizeMode, error, wrappers
from gymnasium.envs.classic_control import CartPoleEnv
from gymnasium.envs.classic_control.cartpole import CartPoleVectorEnv
from gymnasium.vector import AsyncVectorEnv, SyncVectorEnv
@@ -232,3 +232,39 @@ def test_async_with_dynamically_registered_env(ctx):
)
del gym.registry["TestEnv-v0"]
def test_make_vec_with_spec_additional_wrappers():
gym.register(
"TestEnv-v0",
entry_point=CartPoleEnv,
additional_wrappers=(
wrappers.ClipReward.wrapper_spec(min_reward=-0.5, max_reward=0.5),
),
)
env = gym.make("TestEnv-v0")
assert isinstance(env, wrappers.ClipReward)
env.close()
envs = gym.make_vec("TestEnv-v0")
assert isinstance(envs.envs[0], wrappers.ClipReward)
envs.close()
gym.register(
"TestEnv-v1",
vector_entry_point=CartPoleVectorEnv,
additional_wrappers=(
wrappers.ClipReward.wrapper_spec(min_reward=-0.5, max_reward=0.5),
),
)
with pytest.raises(
error.Error,
match=re.escape(
"Cannot use `vector_entry_point` vectorization mode with the additional_wrappers parameter in spec being not empty"
),
):
gym.make_vec("TestEnv-v1")
del gym.registry["TestEnv-v0"]
del gym.registry["TestEnv-v1"]