@@ -97,7 +97,8 @@ def test_vecenv_custom_calls(vec_env_class, vec_env_wrapper):
97
97
"""Test access to methods/attributes of vectorized environments"""
98
98
99
99
def make_env ():
100
- return CustomGymEnv (spaces .Box (low = np .zeros (2 ), high = np .ones (2 )))
100
+ # Wrap the env to check that get_attr and set_attr are working properly
101
+ return Monitor (CustomGymEnv (spaces .Box (low = np .zeros (2 ), high = np .ones (2 ))))
101
102
102
103
vec_env = vec_env_class ([make_env for _ in range (N_ENVS )])
103
104
@@ -133,21 +134,23 @@ def make_env():
133
134
134
135
assert not vec_env .has_attr ("dummy2" )
135
136
# Set the value on the original env
137
+ # Note: doesn't work anymore with gym >= 1.1,
138
+ # the value needs to exists before
136
139
# `set_wrapper_attr` doesn't exist before v1.0
137
140
if gym .__version__ > "1" :
138
141
vec_env .env_method ("set_wrapper_attr" , "dummy2" , 2 )
139
142
assert vec_env .get_attr ("dummy2" ) == [2 ] * N_ENVS
140
- if vec_env_class == DummyVecEnv :
141
- assert vec_env .envs [0 ].unwrapped .dummy2 == 2
143
+ # if vec_env_class == DummyVecEnv:
144
+ # assert vec_env.envs[0].unwrapped.dummy2 == 2
142
145
143
146
env_method_results = vec_env .env_method ("custom_method" , 1 , indices = None , dim_1 = 2 )
144
147
setattr_results = []
145
- # Set current_step to an arbitrary value
148
+ # Set new variable dummy1 of the last wrapper to an arbitrary value
146
149
for env_idx in range (N_ENVS ):
147
- setattr_results .append (vec_env .set_attr ("current_step " , env_idx , indices = env_idx ))
150
+ setattr_results .append (vec_env .set_attr ("dummy1 " , env_idx , indices = env_idx ))
148
151
# Retrieve the value for each environment
149
- assert vec_env .has_attr ("current_step " )
150
- getattr_results = vec_env .get_attr ("current_step " )
152
+ assert vec_env .has_attr ("dummy1 " )
153
+ getattr_results = vec_env .get_attr ("dummy1 " )
151
154
152
155
assert len (env_method_results ) == N_ENVS
153
156
assert len (setattr_results ) == N_ENVS
@@ -165,28 +168,31 @@ def make_env():
165
168
assert len (env_method_subset ) == 2
166
169
167
170
# Test to change value for all the environments
168
- setattr_result = vec_env .set_attr ("current_step " , 42 , indices = None )
169
- getattr_result = vec_env .get_attr ("current_step " )
171
+ setattr_result = vec_env .set_attr ("dummy1 " , 42 , indices = None )
172
+ getattr_result = vec_env .get_attr ("dummy1 " )
170
173
assert setattr_result is None
171
174
assert getattr_result == [42 for _ in range (N_ENVS )]
172
175
173
176
# Additional tests for setattr that does not affect all the environments
174
177
vec_env .reset ()
175
- setattr_result = vec_env .set_attr ("current_step" , 12 , indices = [0 , 1 ])
176
- getattr_result = vec_env .get_attr ("current_step" )
177
- getattr_result_subset = vec_env .get_attr ("current_step" , indices = [0 , 1 ])
178
- assert setattr_result is None
179
- assert getattr_result == [12 for _ in range (2 )] + [0 for _ in range (N_ENVS - 2 )]
180
- assert getattr_result_subset == [12 , 12 ]
181
- assert vec_env .get_attr ("current_step" , indices = [0 , 2 ]) == [12 , 0 ]
182
-
183
- vec_env .reset ()
184
- # Change value only for first and last environment
185
- setattr_result = vec_env .set_attr ("current_step" , 12 , indices = [0 , - 1 ])
186
- getattr_result = vec_env .get_attr ("current_step" )
187
- assert setattr_result is None
188
- assert getattr_result == [12 ] + [0 for _ in range (N_ENVS - 2 )] + [12 ]
189
- assert vec_env .get_attr ("current_step" , indices = [- 1 ]) == [12 ]
178
+ # Since gym >= 0.29, set_attr only sets the attribute on the last wrapper
179
+ # but `set_wrapper_attr` doesn't exist before v1.0
180
+ if gym .__version__ > "1" :
181
+ setattr_result = vec_env .env_method ("set_wrapper_attr" , "current_step" , 12 , indices = [0 , 1 ])
182
+ getattr_result = vec_env .get_attr ("current_step" )
183
+ getattr_result_subset = vec_env .get_attr ("current_step" , indices = [0 , 1 ])
184
+ assert setattr_result == [True , True ]
185
+ assert getattr_result == [12 for _ in range (2 )] + [0 for _ in range (N_ENVS - 2 )]
186
+ assert getattr_result_subset == [12 , 12 ]
187
+ assert vec_env .get_attr ("current_step" , indices = [0 , 2 ]) == [12 , 0 ]
188
+
189
+ vec_env .reset ()
190
+ # Change value only for first and last environment
191
+ setattr_result = vec_env .env_method ("set_wrapper_attr" , "current_step" , 12 , indices = [0 , - 1 ])
192
+ getattr_result = vec_env .get_attr ("current_step" )
193
+ assert setattr_result == [True , True ]
194
+ assert getattr_result == [12 ] + [0 for _ in range (N_ENVS - 2 )] + [12 ]
195
+ assert vec_env .get_attr ("current_step" , indices = [- 1 ]) == [12 ]
190
196
191
197
# Checks that options are correctly passed
192
198
assert vec_env .get_attr ("current_options" )[0 ] is None
@@ -281,7 +287,7 @@ def test_vecenv_terminal_obs(vec_env_class, vec_env_wrapper):
281
287
("discrete" , spaces .Discrete (2 )),
282
288
("multidiscrete" , spaces .MultiDiscrete ([2 , 3 ])),
283
289
("multibinary" , spaces .MultiBinary (3 )),
284
- ("continuous" , spaces .Box (low = np .zeros (2 ), high = np .ones (2 ))),
290
+ ("continuous" , spaces .Box (low = np .zeros (2 , dtype = np . float32 ), high = np .ones (2 , dtype = np . float32 ))),
285
291
]
286
292
)
287
293
0 commit comments