-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathelement.py
70 lines (54 loc) · 2.02 KB
/
element.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
from abc import ABC, abstractmethod
from datetime import datetime
from typing import List, TYPE_CHECKING
from enum import Enum
import asyncio
from .utils.class_searcher import class_deep_search
from .utils.speed_analyser import astep_timer
if TYPE_CHECKING:
from .environments import AbstractTradingEnv
class Mode(Enum):
SIMULATION = 0
PRODUCTION = 1
class AbstractEnvironmentElement(ABC):
def __init__(self) -> None:
super().__init__()
self.__trading_env = None
@property
def simulation_warmup_steps(self) -> int:
return 0
def set_trading_env(self, trading_env):
self.__trading_env = trading_env
def get_trading_env(self) -> "AbstractTradingEnv":
if self.__trading_env is None:
ValueError("""
Please provide the related trading_env during
initialization using the method .set_trading_env()
This is usually not necessary when the instance is directly
or indirectly linked to the trading environment, as
it is automatically set up.
""")
return self.__trading_env
@property
def order_index(self):
return 0
async def __reset__(self, seed = None, **kwargs):
return await self.reset(seed= seed)
async def reset(self, seed = None):
pass
async def __forward__(self, date : datetime, seed = None, **kwargs):
return await self.forward(date= date, seed= seed)
async def forward(self, date : datetime, seed = None):
pass
# Utils
async def gather(self, *tasks):
if self.get_trading_env().mode == Mode.PRODUCTION:
return await asyncio.gather(*tasks)
else:
return [await task for task in tasks]
return self.__class__.__name__
def element_deep_search(element, excluded_classes = []) -> List[AbstractEnvironmentElement]:
return list(class_deep_search(
condition = lambda elem : isinstance(elem, AbstractEnvironmentElement),
element= element
))