Tianshou/tianshou/env/utils.py
Markus Krimmel 6c6c872523
Gymnasium Integration (#789)
Changes:
- Disclaimer in README
- Replaced all occurences of Gym with Gymnasium
- Removed code that is now dead since we no longer need to support the
old step API
- Updated type hints to only allow new step API
- Increased required version of envpool to support Gymnasium
- Increased required version of PettingZoo to support Gymnasium
- Updated `PettingZooEnv` to only use the new step API, removed hack to
also support old API
- I had to add some `# type: ignore` comments, due to new type hinting
in Gymnasium. I'm not that familiar with type hinting but I believe that
the issue is on the Gymnasium side and we are looking into it.
- Had to update `MyTestEnv` to support `options` kwarg
- Skip NNI tests because they still use OpenAI Gym
- Also allow `PettingZooEnv` in vector environment
- Updated doc page about ReplayBuffer to also talk about terminated and
truncated flags.

Still need to do: 
- Update the Jupyter notebooks in docs
- Check the entire code base for more dead code (from compatibility
stuff)
- Check the reset functions of all environments/wrappers in code base to
make sure they use the `options` kwarg
- Someone might want to check test_env_finite.py
- Is it okay to allow `PettingZooEnv` in vector environments? Might need
to update docs?
2023-02-03 11:57:27 -08:00

29 lines
714 B
Python

from typing import TYPE_CHECKING, Any, Tuple, Union
import cloudpickle
import gymnasium
import numpy as np
from tianshou.env.pettingzoo_env import PettingZooEnv
if TYPE_CHECKING:
import gym
ENV_TYPE = Union[gymnasium.Env, "gym.Env", PettingZooEnv]
gym_new_venv_step_type = Tuple[np.ndarray, np.ndarray, np.ndarray, np.ndarray,
np.ndarray]
class CloudpickleWrapper(object):
"""A cloudpickle wrapper used in SubprocVectorEnv."""
def __init__(self, data: Any) -> None:
self.data = data
def __getstate__(self) -> str:
return cloudpickle.dumps(self.data)
def __setstate__(self, data: str) -> None:
self.data = cloudpickle.loads(data)