Spaces:
Running
Running
| from abc import ABC, abstractmethod | |
| from collections import namedtuple | |
| from typing import Any | |
| EnvElementInfo = namedtuple('EnvElementInfo', ['shape', 'value']) | |
| class IEnvElement(ABC): | |
| def __repr__(self) -> str: | |
| raise NotImplementedError | |
| def info(self) -> Any: | |
| raise NotImplementedError | |
| class EnvElement(IEnvElement): | |
| _instance = None | |
| _name = 'EnvElement' | |
| def __init__(self, *args, **kwargs) -> None: | |
| # placeholder | |
| # self._shape = None | |
| # self._value = None | |
| # self._to_agent_processor = None | |
| # self._from_agent_processor = None | |
| self._init(*args, **kwargs) | |
| self._check() | |
| def _init(*args, **kwargs) -> None: | |
| raise NotImplementedError | |
| def __repr__(self) -> str: | |
| return '{}: {}'.format(self._name, self._details()) | |
| def _details(self) -> str: | |
| raise NotImplementedError | |
| def _check(self) -> None: | |
| flag = [ | |
| hasattr(self, '_shape'), | |
| hasattr(self, '_value'), | |
| # hasattr(self, '_to_agent_processor'), | |
| # hasattr(self, '_from_agent_processor'), | |
| ] | |
| assert all(flag), 'this class {} is not a legal subclass of EnvElement({})'.format(self.__class__, flag) | |
| def info(self) -> 'EnvElementInfo': | |
| return EnvElementInfo( | |
| shape=self._shape, | |
| value=self._value, | |
| # to_agent_processor=self._to_agent_processor, | |
| # from_agent_processor=self._from_agent_processor | |
| ) | |