def update_env(self, env_update): """Update the environments. If passed a list (*inside* this list passed to the Sampler itself), distributes the environments across the "vectorization" dimension. Args: env_update(Environment or EnvUpdate or None): The environment to replace the existing env with. Note that other implementations of `Worker` may take different types for this parameter. Raises: TypeError: If env_update is not one of the documented types. ValueError: If the wrong number of updates is passed. """ if isinstance(env_update, list): if len(env_update) != self._n_envs: raise ValueError('If separate environments are passed for ' 'each worker, there must be exactly n_envs ' '({}) environments, but received {} ' 'environments.'.format( self._n_envs, len(env_update))) elif env_update is not None: env_update = [ copy.deepcopy(env_update) for _ in range(self._n_envs) ] if env_update: for env_index, env_up in enumerate(env_update): self._envs[env_index], up = _apply_env_update( self._envs[env_index], env_up) self._needs_env_reset |= up
def update_env(self, env_update): """Use any non-None env_update as a new environment. A simple env update function. If env_update is not None, it should be the complete new environment. This allows changing environments by passing the new environment as `env_update` into `obtain_samples`. Args: env_update(Environment or EnvUpdate or None): The environment to replace the existing env with. Note that other implementations of `Worker` may take different types for this parameter. Raises: TypeError: If env_update is not one of the documented types. """ self.env, _ = _apply_env_update(self.env, env_update)