mirror of
https://github.com/Farama-Foundation/Gymnasium.git
synced 2025-08-30 17:57:30 +00:00
@@ -1,7 +1,6 @@
|
|||||||
import re
|
import re
|
||||||
import copy
|
import copy
|
||||||
import importlib
|
import importlib
|
||||||
import warnings
|
|
||||||
|
|
||||||
from gym import error, logger
|
from gym import error, logger
|
||||||
|
|
||||||
@@ -104,16 +103,6 @@ class EnvRegistry(object):
|
|||||||
logger.info("Making new env: %s", path)
|
logger.info("Making new env: %s", path)
|
||||||
spec = self.spec(path)
|
spec = self.spec(path)
|
||||||
env = spec.make(**kwargs)
|
env = spec.make(**kwargs)
|
||||||
# We used to have people override _reset/_step rather than
|
|
||||||
# reset/step. Set _gym_disable_underscore_compat = True on
|
|
||||||
# your environment if you use these methods and don't want
|
|
||||||
# compatibility code to be invoked.
|
|
||||||
if (
|
|
||||||
hasattr(env, "_reset")
|
|
||||||
and hasattr(env, "_step")
|
|
||||||
and not getattr(env, "_gym_disable_underscore_compat", False)
|
|
||||||
):
|
|
||||||
patch_deprecated_methods(env)
|
|
||||||
if env.spec.max_episode_steps is not None:
|
if env.spec.max_episode_steps is not None:
|
||||||
from gym.wrappers.time_limit import TimeLimit
|
from gym.wrappers.time_limit import TimeLimit
|
||||||
|
|
||||||
@@ -125,11 +114,10 @@ class EnvRegistry(object):
|
|||||||
|
|
||||||
def spec(self, path):
|
def spec(self, path):
|
||||||
if ":" in path:
|
if ":" in path:
|
||||||
mod_name, _sep, id = path.partition(":")
|
mod_name, _, id = path.partition(":")
|
||||||
try:
|
try:
|
||||||
importlib.import_module(mod_name)
|
importlib.import_module(mod_name)
|
||||||
# catch ImportError for python2.7 compatibility
|
except ModuleNotFoundError:
|
||||||
except ImportError:
|
|
||||||
raise error.Error(
|
raise error.Error(
|
||||||
"A module ({}) was specified for the environment but was not found, make sure the package is installed with `pip install` before calling `gym.make()`".format(
|
"A module ({}) was specified for the environment but was not found, make sure the package is installed with `pip install` before calling `gym.make()`".format(
|
||||||
mod_name
|
mod_name
|
||||||
@@ -182,7 +170,7 @@ class EnvRegistry(object):
|
|||||||
|
|
||||||
def register(self, id, **kwargs):
|
def register(self, id, **kwargs):
|
||||||
if id in self.env_specs:
|
if id in self.env_specs:
|
||||||
raise error.Error("Cannot re-register id: {}".format(id))
|
logger.warn("Overriding environment {}".format(id))
|
||||||
self.env_specs[id] = EnvSpec(id, **kwargs)
|
self.env_specs[id] = EnvSpec(id, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
@@ -200,32 +188,3 @@ def make(id, **kwargs):
|
|||||||
|
|
||||||
def spec(id):
|
def spec(id):
|
||||||
return registry.spec(id)
|
return registry.spec(id)
|
||||||
|
|
||||||
|
|
||||||
warn_once = True
|
|
||||||
|
|
||||||
|
|
||||||
def patch_deprecated_methods(env):
|
|
||||||
"""
|
|
||||||
Methods renamed from '_method' to 'method', render() no longer has 'close' parameter, close is a separate method.
|
|
||||||
For backward compatibility, this makes it possible to work with unmodified environments.
|
|
||||||
"""
|
|
||||||
global warn_once
|
|
||||||
if warn_once:
|
|
||||||
logger.warn(
|
|
||||||
"Environment '%s' has deprecated methods '_step' and '_reset' rather than 'step' and 'reset'. Compatibility code invoked. Set _gym_disable_underscore_compat = True to disable this behavior."
|
|
||||||
% str(type(env))
|
|
||||||
)
|
|
||||||
warn_once = False
|
|
||||||
env.reset = env._reset
|
|
||||||
env.step = env._step
|
|
||||||
env.seed = env._seed
|
|
||||||
|
|
||||||
def render(mode):
|
|
||||||
return env._render(mode, close=False)
|
|
||||||
|
|
||||||
def close():
|
|
||||||
env._render("human", close=True)
|
|
||||||
|
|
||||||
env.render = render
|
|
||||||
env.close = close
|
|
||||||
|
Reference in New Issue
Block a user