Example #1
0
def make_population():
    geography = Geography.from_file({"area": ["E00062194"]})
    demography = Demography.for_geography(geography)
    population = Population()
    for area in geography.areas:
        population.people += demography.populate(area.name)
    return population
Example #2
0
def make_dummy_world():
    teacher = Person.from_attributes(age=100, sex="f")
    pupil_shift_1 = Person.from_attributes(age=12, sex="f")
    pupil_shift_2 = Person.from_attributes(age=5, sex="m")
    pupil_shift_3 = Person.from_attributes(age=11, sex="f")
    learning_center = LearningCenter(coordinates=None, n_pupils_max=None)
    household = Household()
    household.add(person=teacher)
    household.add(person=pupil_shift_1)
    household.add(person=pupil_shift_2)
    household.add(person=pupil_shift_3)
    learning_center.add(person=teacher,
                        shift=0,
                        subgroup_type=learning_center.SubgroupType.teachers)
    learning_center.add(person=teacher,
                        shift=1,
                        subgroup_type=learning_center.SubgroupType.teachers)
    learning_center.add(person=teacher,
                        shift=2,
                        subgroup_type=learning_center.SubgroupType.teachers)
    learning_center.add(person=pupil_shift_1, shift=0)
    learning_center.add(person=pupil_shift_2, shift=1)
    learning_center.add(person=pupil_shift_3, shift=2)
    world = World()
    world.learning_centers = LearningCenters([learning_center],
                                             learning_centers_tree=False,
                                             n_shifts=3)
    world.households = Households([household])
    world.people = Population(
        [teacher, pupil_shift_1, pupil_shift_2, pupil_shift_3])
    for person in world.people.members:
        person.busy = False
    learning_center.clear()
    household.clear()
    return (
        teacher,
        pupil_shift_1,
        pupil_shift_2,
        pupil_shift_3,
        learning_center,
        household,
        world,
    )
Example #3
0
    def infect_super_areas(
        self, n_cases_per_super_area: pd.DataFrame, record: Optional["Record"] = None
    ):
        """
        Infect super areas with numer of cases given by data frame

        Parameters
        ----------
        n_cases_per_super_area:
            data frame containig the number of cases per super area
        """
        for super_area in self.world.super_areas:
            try:
                n_cases = int(n_cases_per_super_area[super_area.name])
                self.unleash_virus(
                    Population(super_area.people), n_cases=n_cases, record=record
                )
            except KeyError as e:
                raise KeyError("There is no data on cases for super area: %s" % str(e))
Example #4
0
def _populate_areas(areas: Areas, demography):
    people = Population()
    for area in areas:
        area.populate(demography)
        people.extend(area.people)
    return people
def make_pop():
    people = Population([])
    for i in range(100):
        people.add(Person.from_attributes(age=i))
    return people
Example #6
0
def load_population_from_hdf5(file_path: str, chunk_size=100000):
    """
    Loads the population from an hdf5 file located at ``file_path``.
    Note that this object will not be ready to use, as the links to
    object instances of other classes need to be restored first.
    This function should be rarely be called oustide world.py
    """
    print("loading population from hdf5 ", end="")
    with h5py.File(file_path, "r", libver="latest", swmr=True) as f:
        people = []
        population = f["population"]
        # read in chunks of 100k people
        n_people = population.attrs["n_people"]
        n_chunks = int(np.ceil(n_people / chunk_size))
        for chunk in range(n_chunks):
            print(".", end="")
            idx1 = chunk * chunk_size
            idx2 = min((chunk + 1) * chunk_size, n_people)
            ids = population["id"][idx1:idx2]
            ages = population["age"][idx1:idx2]
            sexes = population["sex"][idx1:idx2]
            ethns = population["ethnicity"][idx1:idx2]
            socioecon_indices = population["socioecon_index"][idx1:idx2]
            home_city = population["home_city"][idx1:idx2]
            group_ids = population["group_ids"][idx1:idx2]
            group_specs = population["group_specs"][idx1:idx2]
            subgroup_types = population["subgroup_types"][idx1:idx2]
            sectors = population["sector"][idx1:idx2]
            sub_sectors = population["sub_sector"][idx1:idx2]
            lockdown_status = population["lockdown_status"][idx1:idx2]
            mode_of_transport_is_public_list = population[
                "mode_of_transport_is_public"][idx1:idx2]
            mode_of_transport_description_list = population[
                "mode_of_transport_description"][idx1:idx2]
            areas = population["area"][idx1:idx2]
            for k in range(idx2 - idx1):
                if ethns[k].decode() == " ":
                    ethnicity = None
                else:
                    ethnicity = ethns[k].decode()
                if socioecon_indices[k] == nan_integer:
                    socioecon_index = None
                else:
                    socioecon_index = socioecon_indices[k]
                person = Person.from_attributes(
                    id=ids[k],
                    age=ages[k],
                    sex=sexes[k].decode(),
                    ethnicity=ethnicity,
                    socioecon_index=socioecon_index,
                )
                mode_of_transport_description = mode_of_transport_description_list[
                    k]
                mode_of_transport_is_public = mode_of_transport_is_public_list[
                    k]
                # mode of transport
                if mode_of_transport_description.decode() == " ":
                    person.mode_of_transport = None
                else:
                    person.mode_of_transport = ModeOfTransport(
                        description=mode_of_transport_description.decode(),
                        is_public=mode_of_transport_is_public,
                    )
                hc = home_city[k]
                if hc == nan_integer:
                    person.home_city = None
                else:
                    person.home_city = hc
                subgroups = []
                for group_id, subgroup_type, group_spec in zip(
                        group_ids[k], subgroup_types[k], group_specs[k]):
                    if group_id == nan_integer:
                        group_id = None
                        subgroup_type = None
                        group_spec = None
                    else:
                        group_spec = group_spec.decode()
                    subgroups.append([group_spec, group_id, subgroup_type])
                person.subgroups = subgroups
                person.area = areas[k]
                if sectors[k].decode() == " ":
                    person.sector = None
                else:
                    person.sector = sectors[k].decode()
                if sub_sectors[k].decode() == " ":
                    person.sub_sector = None
                else:
                    person.sub_sector = sub_sectors[k].decode()
                if lockdown_status[k].decode() == " ":
                    person.lockdown_status = None
                else:
                    person.lockdown_status = lockdown_status[k].decode()
                people.append(person)
    print("\n", end="")
    return Population(people)
Example #7
0
def make_dummy_world():
    g = Geography.from_file(filter_key={"super_area": ["E02002559"]})
    super_area = g.super_areas.members[0]
    company = Company(super_area=super_area, n_workers_max=100, sector="Q")
    school = School(
        coordinates=super_area.coordinates,
        n_pupils_max=100,
        age_min=4,
        age_max=10,
        sector="primary",
    )
    household = Household()
    household.area = super_area.areas[0]
    hospital = Hospital(
        n_beds=40,
        n_icu_beds=5,
        super_area=super_area.name,
        coordinates=super_area.coordinates,
    )
    worker = Person.from_attributes(age=40)
    worker.area = super_area
    household.add(worker, subgroup_type=household.SubgroupType.adults)
    worker.sector = "Q"
    company.add(worker)

    pupil = Person.from_attributes(age=6)
    pupil.area = super_area
    household.add(pupil, subgroup_type=household.SubgroupType.kids)
    household.area = super_area
    school.add(pupil)

    student = Person.from_attributes(age=21)
    student.area = super_area
    household.add(student, subgroup_type=household.SubgroupType.adults)
    university = University(
        coordinates=super_area.coordinates,
        n_students_max=100,
    )
    university.add(student)

    commuter = Person.from_attributes(sex="m", age=30)
    commuter.mode_of_transport = ModeOfTransport(description="bus",
                                                 is_public=True)
    commuter.mode_of_transport = "public"
    household.add(commuter)

    world = World()
    world.schools = Schools([school])
    world.hospitals = Hospitals([hospital])
    world.households = Households([household])
    world.universities = Universities([])
    world.companies = Companies([company])
    world.universities = Universities([university])
    world.care_homes = CareHomes([CareHome()])
    world.people = Population([worker, pupil, student, commuter])
    world.areas = Areas([super_area.areas[0]])
    world.areas[0].people = world.people
    world.super_areas = SuperAreas([super_area])
    cinema = Cinema()
    cinema.coordinates = super_area.coordinates
    world.cinemas = Cinemas([cinema])
    pub = Pub()
    pub.coordinates = super_area.coordinates
    world.pubs = Pubs([pub])
    grocery = Grocery()
    grocery.coordinates = super_area.coordinates
    world.groceries = Groceries([grocery])
    # commute
    city = CommuteCity()
    hub = CommuteHub(None, None)
    city.commutehubs = [hub]
    world.commutehubs = CommuteHubs([city])
    world.commutehubs.members = [hub]
    world.commutecities = CommuteCities()
    world.commutecities.members = [city]
    world.commutehubs[0].add(commuter)
    world.commuteunits = CommuteUnits(world.commutehubs.members)
    world.commuteunits.init_units()
    world.commutecityunits = CommuteCityUnits(world.commutecities)
    world.cemeteries = Cemeteries()
    return world
Example #8
0
def load_population_from_hdf5(file_path: str,
                              chunk_size=100000,
                              domain_super_areas=None):
    """
    Loads the population from an hdf5 file located at ``file_path``.
    Note that this object will not be ready to use, as the links to
    object instances of other classes need to be restored first.
    This function should be rarely be called oustide world.py
    """
    people = []
    logger.info("loading population...")
    with h5py.File(file_path, "r", libver="latest", swmr=True) as f:
        # people = []
        population = f["population"]
        # read in chunks of 100k people
        n_people = population.attrs["n_people"]
        n_chunks = int(np.ceil(n_people / chunk_size))
        for chunk in range(n_chunks):
            logger.info(f"Loaded chunk {chunk} of {n_chunks}")
            idx1 = chunk * chunk_size
            idx2 = min((chunk + 1) * chunk_size, n_people)
            length = idx2 - idx1
            ids = read_dataset(population["id"], idx1, idx2)
            ages = read_dataset(population["age"], idx1, idx2)
            sexes = read_dataset(population["sex"], idx1, idx2)
            ethns = read_dataset(population["ethnicity"], idx1, idx2)
            socioecon_indices = read_dataset(population["socioecon_index"],
                                             idx1, idx2)
            super_areas = read_dataset(population["super_area"], idx1, idx2)
            sectors = read_dataset(population["sector"], idx1, idx2)
            sub_sectors = read_dataset(population["sub_sector"], idx1, idx2)
            lockdown_status = read_dataset(population["lockdown_status"], idx1,
                                           idx2)
            mode_of_transport_is_public_list = read_dataset(
                population["mode_of_transport_is_public"], idx1, idx2)
            mode_of_transport_description_list = read_dataset(
                population["mode_of_transport_description"], idx1, idx2)
            for k in range(idx2 - idx1):
                if domain_super_areas is not None:
                    super_area = super_areas[k]
                    if super_area == nan_integer:
                        raise ValueError(
                            "if ``domain_super_areas`` is True, I expect not Nones super areas."
                        )
                    if super_area not in domain_super_areas:
                        continue
                if ethns[k].decode() == " ":
                    ethn = None
                else:
                    ethn = ethns[k].decode()
                if socioecon_indices[k] == nan_integer:
                    socioecon_index = None
                else:
                    socioecon_index = socioecon_indices[k]
                person = Person.from_attributes(
                    id=ids[k],
                    age=ages[k],
                    sex=sexes[k].decode(),
                    ethnicity=ethn,
                    socioecon_index=socioecon_index,
                )
                people.append(person)
                mode_of_transport_description = mode_of_transport_description_list[
                    k]
                mode_of_transport_is_public = mode_of_transport_is_public_list[
                    k]
                # mode of transport
                if mode_of_transport_description.decode() == " ":
                    person.mode_of_transport = None
                else:
                    person.mode_of_transport = ModeOfTransport(
                        description=mode_of_transport_description.decode(),
                        is_public=mode_of_transport_is_public,
                    )
                if sectors[k].decode() == " ":
                    person.sector = None
                else:
                    person.sector = sectors[k].decode()
                if sub_sectors[k].decode() == " ":
                    person.sub_sector = None
                else:
                    person.sub_sector = sub_sectors[k].decode()
                if lockdown_status[k].decode() == " ":
                    person.lockdown_status = None
                else:
                    person.lockdown_status = lockdown_status[k].decode()
    return Population(people)
Example #9
0
def make_dummy_world(geog):
    super_area = geog.super_areas.members[0]
    company = Company(super_area=super_area, n_workers_max=100, sector="Q")

    household1 = Household()
    household1.area = super_area.areas[0]
    hospital = Hospital(
        n_beds=40,
        n_icu_beds=5,
        super_area=super_area.name,
        coordinates=super_area.coordinates,
    )
    uni = University(
        coordinates=super_area.coordinates,
        n_students_max=2500,
    )

    worker1 = Person.from_attributes(age=44,
                                     sex='f',
                                     ethnicity='A1',
                                     socioecon_index=5)
    worker1.area = super_area.areas[0]
    household1.add(worker1, subgroup_type=household1.SubgroupType.adults)
    worker1.sector = "Q"
    company.add(worker1)

    worker2 = Person.from_attributes(age=42,
                                     sex='m',
                                     ethnicity='B1',
                                     socioecon_index=5)
    worker2.area = super_area.areas[0]
    household1.add(worker2, subgroup_type=household1.SubgroupType.adults)
    worker2.sector = "Q"
    company.add(worker2)

    student1 = Person.from_attributes(age=20,
                                      sex='f',
                                      ethnicity='A1',
                                      socioecon_index=5)
    student1.area = super_area.areas[0]
    household1.add(student1, subgroup_type=household1.SubgroupType.adults)
    uni.add(student1)

    pupil1 = Person.from_attributes(age=8,
                                    sex='m',
                                    ethnicity='C1',
                                    socioecon_index=5)
    pupil1.area = super_area.areas[0]
    household1.add(pupil1, subgroup_type=household1.SubgroupType.kids)
    #school.add(pupil1)

    pupil2 = Person.from_attributes(age=5,
                                    sex='f',
                                    ethnicity='A1',
                                    socioecon_index=5)
    pupil2.area = super_area.areas[0]
    household1.add(pupil2, subgroup_type=household1.SubgroupType.kids)
    #school.add(pupil2)

    world = World()
    world.schools = Schools([])
    world.hospitals = Hospitals([hospital])
    world.households = Households([household1])
    world.universities = Universities([uni])
    world.companies = Companies([company])
    world.people = Population([worker1, worker2, student1, pupil1, pupil2])
    world.super_areas = geog.super_areas
    world.areas = geog.areas
    world.cemeteries = Cemeteries()
    cinema = Cinema()
    cinema.coordinates = super_area.coordinates
    world.cinemas = Cinemas([cinema])
    pub = Pub()
    pub.coordinates = super_area.coordinates
    world.pubs = Pubs([pub])

    world.areas[0].people = world.people

    return world