Пример #1
0
 def _flush_pending_families(self):
     self.done = True
     for schema, family in self.pending:
         flag = False
         for human in family:
             if isinstance(human, Adult) or isinstance(human, Elder):
                 flag = True
                 break
         if not flag:
             family.append(Human.factory(self.covid_model, 30))
         self.families.append(family)
         self.human_count += len(family)
Пример #2
0
def check_spread(sample_location,
                 spreading_states=None,
                 check_step=True,
                 in_social_event=False):
    if spreading_states is None:
        spreading_states = list(SimulationState)
    # Creates an infected and a susceptible human
    sample_human_1 = Human.factory(covid_model=model, forced_age=20)
    sample_human_1.infection_status = InfectionStatus.INFECTED
    sample_human_1.infection_days_count = 1
    sample_human_1.infection_latency = 0
    assert sample_human_1.is_infected() and sample_human_1.is_contagious()
    sample_human_2 = Adult(covid_model=model,
                           age=50,
                           msp=0.05,
                           hsp=0.1,
                           mfd=False)
    sample_human_2.strid = 'human_2'
    sample_human_2.infection_status = InfectionStatus.SUSCEPTIBLE
    assert not sample_human_2.is_infected()
    # If in social event
    if in_social_event:
        sample_human_1.social_event = sample_location
        sample_human_2.social_event = sample_location
    # Adding humans to location
    sample_location.humans += [sample_human_1, sample_human_2]
    # Changing location contagion probability to 1
    sample_location.set_custom_parameters([('contagion_probability', 1.0)],
                                          {'contagion_probability': 1.0})
    for state in SimulationState:
        sample_location.covid_model.current_state = state
        if sample_location.covid_model.current_state in spreading_states:
            print(state)
            if check_step:
                sample_location.step()
            else:
                sample_location.check_spreading(sample_human_1, sample_human_2)
            assert sample_human_2.is_infected()
            sample_human_2.infection_status = InfectionStatus.SUSCEPTIBLE
        else:
            print(state)
            if check_step:
                sample_location.step()
            assert not sample_human_2.is_infected()
        print(spreading_states)
    return True
Пример #3
0
 def __init__(self, unique_id, covid_model, size):
     super().__init__(unique_id, covid_model)
     self.size = size
     self.covid_model = covid_model
     self.custom_parameters = {}
     count = 0
     for i in range(size):
         human = Human.factory(covid_model, self)
         self.covid_model.global_count.non_infected_people.append(human)
         self.covid_model.global_count.non_infected_count += 1
         if human.immune:
             self.covid_model.global_count.immune_count += 1
         else:
             self.covid_model.global_count.susceptible_count += 1
         if not flip_coin(self.get_parameter('initial_infection_rate')):
             count += 1
         else:
             self.covid_model.global_count.non_infected_people[
                 count].infect(count)
Пример #4
0
def test_location():
    sample_hb_1 = location.Location(model, '', '')
    sample_hb_2 = location.Location(model, '', '')
    assert sample_hb_1.strid == 'Location'
    # Tests get_parameter
    assert sample_hb_1.get_parameter('contagion_probability') == 0.0
    # Tests set_custom_parameter
    sample_hb_1.set_custom_parameters([('contagion_probability', 1.0)],
                                      {'contagion_probability': 1.0})
    assert sample_hb_1.get_parameter('contagion_probability') == 1.0
    # Test move_to
    sample_human_1 = Human.factory(covid_model=model, forced_age=20)
    sample_hb_1.humans.append(sample_human_1)
    assert sample_human_1 in sample_hb_1.humans
    assert not sample_hb_2.humans
    sample_hb_1.move_to(sample_human_1, sample_hb_2)
    assert sample_human_1 not in sample_hb_1.humans
    assert sample_human_1 in sample_hb_2.humans
    # Test check_spreading
    assert check_spread(sample_hb_1, [SimulationState.POST_WORK_ACTIVITY],
                        check_step=False)
Пример #5
0
 def factory(self, population_size):
     for i in range(population_size):
         self._push(Human.factory(self.covid_model, None))
     self._flush_pending_families()
Пример #6
0
def test_district():
    sample_district_1 = location.District(name="district",
                                          covid_model=model,
                                          strid_prefix='dummy',
                                          strid_suffix='')
    assert isinstance(sample_district_1, location.District)
    # Test get_buildings
    sample_human_1 = Human.factory(covid_model=model, forced_age=20)
    sample_hb_1 = location.HomogeneousBuilding(building_capacity=capacity,
                                               covid_model=model,
                                               strid_prefix='dummy',
                                               strid_suffix='1')
    sample_hb_1.humans.append(sample_human_1)
    sample_district_1.locations.append(sample_hb_1)
    sample_hb_1.allocation[sample_human_1] = sample_hb_1
    sample_district_1.allocation[sample_human_1] = [sample_hb_1]
    assert sample_district_1.get_buildings(sample_human_1) == [sample_hb_1]
    # Test get_available_restaurant
    sample_restaurant = location.Restaurant(
        capacity=capacity,
        restaurant_type=RestaurantType.FAST_FOOD,
        is_outdoor=False,
        covid_model=model,
        strid_prefix='dummy',
        strid_suffix='')
    sample_restaurant.available = 100
    sample_district_1.locations.append(sample_restaurant)
    assert sample_district_1.get_available_restaurant(
        people_count=100,
        outdoor=False,
        restaurant_type=RestaurantType.FAST_FOOD) == sample_restaurant
    assert not sample_district_1.get_available_restaurant(
        people_count=101,
        outdoor=False,
        restaurant_type=RestaurantType.FAST_FOOD)
    assert not sample_district_1.get_available_restaurant(
        people_count=100,
        outdoor=True,
        restaurant_type=RestaurantType.FAST_FOOD)
    assert not sample_district_1.get_available_restaurant(
        people_count=100, outdoor=False, restaurant_type=RestaurantType.FANCY)
    # Test move_to
    sample_district_2 = location.District(name="district",
                                          covid_model=model,
                                          strid_prefix='dummy',
                                          strid_suffix='')
    sample_human_2 = Human.factory(covid_model=model, forced_age=20)
    sample_hb_2 = location.HomogeneousBuilding(building_capacity=capacity,
                                               covid_model=model,
                                               strid_prefix='dummy',
                                               strid_suffix='2')
    sample_hb_2.humans.append(sample_human_2)
    sample_district_2.locations.append(sample_hb_2)
    sample_district_2.allocation[sample_human_2] = sample_hb_2
    sample_district_1.move_to(sample_human_1, sample_hb_2)
    assert sample_human_1 in sample_hb_2.humans
    assert sample_human_2 in sample_hb_2.humans
    # Test allocate
    sample_bu_1 = location.BuildingUnit(capacity=capacity,
                                        covid_model=model,
                                        strid_prefix='dummy',
                                        strid_suffix='')
    sample_district_1.locations.append(sample_bu_1)
    sample_hb_1.locations.append(sample_bu_1)
    sample_district_1.allocate([sample_human_1, sample_human_2], True, True,
                               True)
    assert sample_human_1 in sample_district_1.allocation.keys()
    assert sample_human_2 in sample_district_1.allocation.keys()