예제 #1
0
파일: engine.py 프로젝트: aflaxman/vivarium
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
예제 #2
0
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
예제 #3
0
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
예제 #4
0
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)
예제 #5
0
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)
예제 #6
0
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]
예제 #7
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]
예제 #8
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)
예제 #9
0
파일: engine.py 프로젝트: afcarl/vivarium
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))