Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
assert self.action_space == env.action_space, \
"Error: the environment passed must have at least the same action space as the model was trained on."
if self._requires_vec_env:
assert isinstance(env, VecEnv), \
"Error: the environment passed is not a vectorized environment, however {} requires it".format(
self.__class__.__name__)
assert not self.policy.recurrent or self.n_envs == env.num_envs, \
"Error: the environment passed must have the same number of environments as the model was trained on." \
"This is due to the Lstm policy not being capable of changing the number of environments."
self.n_envs = env.num_envs
else:
# for models that dont want vectorized environment, check if they make sense and adapt them.
# Otherwise tell the user about this issue
if isinstance(env, VecEnv):
if env.num_envs == 1:
env = _UnvecWrapper(env)
self._vectorize_action = True
else:
raise ValueError("Error: the model requires a non vectorized environment or a single vectorized "
"environment.")
else:
self._vectorize_action = False
self.n_envs = 1
self.env = env
# Invalidated by environment change.
self.episode_reward = None
self.ep_info_buf = None
self.observation_space = env.observation_space
self.action_space = env.action_space
if requires_vec_env:
if isinstance(env, VecEnv):
self.n_envs = env.num_envs
else:
# The model requires a VecEnv
# wrap it in a DummyVecEnv to avoid error
self.env = DummyVecEnv([lambda: env])
if self.verbose >= 1:
print("Wrapping the env in a DummyVecEnv.")
self.n_envs = 1
else:
if isinstance(env, VecEnv):
if env.num_envs == 1:
self.env = _UnvecWrapper(env)
self._vectorize_action = True
else:
raise ValueError("Error: the model requires a non vectorized environment or a single vectorized"
" environment.")
self.n_envs = 1