4
4
5
5
import csv
6
6
from collections import defaultdict
7
- from typing import Callable , List , Optional
7
+ from typing import Callable , List , Optional , cast
8
8
9
+ from ..common import BaseAction , BaseDecisionEvent
9
10
from .event import ActualEvent , AtomEvent , CascadeEvent
10
11
from .event_linked_list import EventLinkedList
11
12
from .event_pool import EventPool
@@ -122,9 +123,7 @@ def gen_atom_event(self, tick: int, event_type: object, payload: object = None)
122
123
Returns:
123
124
AtomEvent: Atom event object
124
125
"""
125
- event = self ._event_pool .gen (tick , event_type , payload , False )
126
- assert isinstance (event , AtomEvent )
127
- return event
126
+ return cast (AtomEvent , self ._event_pool .gen (tick , event_type , payload , is_cascade = False ))
128
127
129
128
def gen_cascade_event (self , tick : int , event_type : object , payload : object ) -> CascadeEvent :
130
129
"""Generate an cascade event that used to hold immediate events that
@@ -138,31 +137,32 @@ def gen_cascade_event(self, tick: int, event_type: object, payload: object) -> C
138
137
Returns:
139
138
CascadeEvent: Cascade event object.
140
139
"""
141
- event = self ._event_pool .gen (tick , event_type , payload , True )
142
- assert isinstance (event , CascadeEvent )
143
- return event
140
+ return cast (CascadeEvent , self ._event_pool .gen (tick , event_type , payload , is_cascade = True ))
144
141
145
- def gen_decision_event (self , tick : int , payload : object ) -> CascadeEvent :
142
+ def gen_decision_event (self , tick : int , payload : BaseDecisionEvent ) -> CascadeEvent :
146
143
"""Generate a decision event that will stop current simulation, and ask agent for action.
147
144
148
145
Args:
149
146
tick (int): Tick that the event will be processed.
150
- payload (object ): Payload of event, used to pass data to handlers.
147
+ payload (BaseDecisionEvent ): Payload of event, used to pass data to handlers.
151
148
Returns:
152
149
CascadeEvent: Event object
153
150
"""
151
+ assert isinstance (payload , BaseDecisionEvent )
154
152
return self .gen_cascade_event (tick , MaroEvents .PENDING_DECISION , payload )
155
153
156
- def gen_action_event (self , tick : int , payload : object ) -> CascadeEvent :
154
+ def gen_action_event (self , tick : int , payloads : List [ BaseAction ] ) -> CascadeEvent :
157
155
"""Generate an event that used to dispatch action to business engine.
158
156
159
157
Args:
160
158
tick (int): Tick that the event will be processed.
161
- payload (object ): Payload of event, used to pass data to handlers.
159
+ payloads (List[BaseAction] ): Payloads of event, used to pass data to handlers.
162
160
Returns:
163
161
CascadeEvent: Event object
164
162
"""
165
- return self .gen_cascade_event (tick , MaroEvents .TAKE_ACTION , payload )
163
+ assert isinstance (payloads , list )
164
+ assert all (isinstance (p , BaseAction ) for p in payloads )
165
+ return self .gen_cascade_event (tick , MaroEvents .TAKE_ACTION , payloads )
166
166
167
167
def register_event_handler (self , event_type : object , handler : Callable ) -> None :
168
168
"""Register an event with handler, when there is an event need to be processed,
0 commit comments