def _step(simulation, time_step, time_step_emitter, time_step__prepare_emitter, time_step__cleanup_emitter): _log.debug(simulation.current_time) time_step__prepare_emitter(Event(simulation.population.population.index)) time_step_emitter(Event(simulation.population.population.index)) time_step__cleanup_emitter(Event(simulation.population.population.index)) simulation.current_time += time_step
def test_split_event(): index1 = pd.Index(range(10)) index2 = pd.Index(range(5)) e1 = Event(index1) e2 = e1.split(index2) assert e1.index is index1 assert e2.index is index2
def test_split_event(event_init): event_data = event_init['orig'] e1 = Event(event_data['index'], event_data['user_data'], event_data['time'], event_data['step_size']) new_idx = event_init['new_val']['index'] e2 = e1.split(new_idx) assert e1.index is event_data['index'] assert e2.index is new_idx
def test_listener_priority(): signal = [False, False, False] def listener1(*_, **__): signal[0] = True assert not signal[1] assert not signal[2] def listener2(*_, **__): signal[1] = True assert signal[0] assert not signal[2] def listener3(*_, **__): signal[2] = True assert signal[0] assert signal[1] manager = EventManager() manager.clock = lambda: pd.Timestamp(1990, 1, 1) manager.step_size = lambda: pd.Timedelta(30, 'D') emitter = manager.get_emitter('test_event') manager.register_listener('test_event', listener1, priority=0) manager.register_listener('test_event', listener2) manager.register_listener('test_event', listener3, priority=9) emitter(Event(None)) assert np.all(signal)
def test_listener_priority(): signal = [False, False, False] def listener1(*args, **kwargs): signal[0] = True assert not signal[1] assert not signal[2] def listener2(*args, **kwargs): signal[1] = True assert signal[0] assert not signal[2] def listener3(*args, **kwargs): signal[2] = True assert signal[0] assert signal[1] manager = EventManager() manager.clock = lambda: datetime(1990, 1, 1) emitter = manager.get_emitter('test_event') manager.register_listener('test_event', listener1, priority=0) manager.register_listener('test_event', listener2) manager.register_listener('test_event', listener3, priority=9) emitter(Event(None)) assert np.all(signal)
def test_emission(): signal = [False] def listener(*args, **kwargs): signal[0] = True manager = EventManager() manager.clock = lambda: datetime(1990, 1, 1) emitter = manager.get_emitter('test_event') manager.register_listener('test_event', listener) emitter(Event(None)) assert signal[0] signal[0] = False emitter = manager.get_emitter('test_unheard_event') emitter(Event(None)) assert not signal[0]
def test_emission(): signal = [False] def listener(*_, **__): signal[0] = True manager = EventManager() manager.clock = lambda: pd.Timestamp(1990, 1, 1) manager.step_size = lambda: pd.Timedelta(30, unit='D') emitter = manager.get_emitter('test_event') manager.register_listener('test_event', listener) emitter(Event(None)) assert signal[0] signal[0] = False emitter = manager.get_emitter('test_unheard_event') emitter(Event(None)) assert not signal[0]
def test_proper_access(event_init): # Event attributes are meant to be read-only event_data = event_init['orig'] e1 = Event(event_data['index'], event_data['user_data'], event_data['time'], event_data['step_size']) assert (event_data['index'] == e1.index).all() assert event_data['user_data'] == e1.user_data assert event_data['time'] == e1.time assert event_data['step_size'] == e1.step_size attribute_data = event_init['new_val'] for key, value in attribute_data.items(): with pytest.raises(AttributeError) as _: setattr(e1, key, value)
def event_loop(simulation, simulant_creator, end_emitter): start = _get_time('start') stop = _get_time('end') time_step = config.simulation_parameters.time_step time_step = timedelta(days=time_step) simulation.current_time = start population_size = config.simulation_parameters.population_size if config.simulation_parameters.initial_age is not None and config.simulation_parameters.pop_age_start is None: simulant_creator(population_size, population_configuration={ 'initial_age': config.simulation_parameters.initial_age}) else: simulant_creator(population_size) while simulation.current_time < stop: gc.collect() # TODO: Actually figure out where the memory leak is. _step(simulation, time_step) end_emitter(Event(simulation.population.population.index))