Source code for gaggle.problem.environment.environment_factory

from typing import Callable
import gym
from gaggle.arguments import ProblemArgs


[docs]class GymWrapper: """ Callable wrapper that returns the gym environment""" def __init__(self, environment_name: str): self.environment_name = environment_name def __call__(self, *args, **kwargs): return gym.make(self.environment_name)
[docs]class EnvironmentFactory: r"""Factory that generates available environments. EnvironmentFactory.environments stores said environments as a dictionary with their name as key and the uninitialized Environment object as value. See Also: Environment Class """ environments = { "cartpole": GymWrapper("CartPole-v1"), }
[docs] @classmethod def get_keys(cls): r"""Gets the keys (environment names) for the available pre-built environment. Returns: list of strings that are the keys to EnvironmentFactory.environments """ return list(cls.environments.keys())
[docs] @classmethod def update(cls, key, environment): r"""Add a new dataset to the dictionary of datasets that can be created. It is added to EnvironmentFactory.environments Args: key: dataset name that will be used as the dictionary lookup key environment: environment class object, it needs to not be already initialized """ assert isinstance(environment, Callable) cls.environments[key] = environment
[docs] @classmethod def from_problem_args(cls, problem_args: ProblemArgs): environment = cls.environments.get(problem_args.problem_name, None) if environment is None: raise ValueError(problem_args.problem_name) return environment(problem_args)
[docs] @classmethod def from_gym_env_id(cls, env_id: str): """ Takes in a gym env id and returns the associated OpenAI Gym Environment Args: env_id: gym environment id Returns: Gym environment """ return gym.make(env_id)