コード例 #1
0
ファイル: test_box.py プロジェクト: sadielbartholomew/JUNE
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
コード例 #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,
    )
コード例 #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))
コード例 #4
0
ファイル: world.py プロジェクト: sadielbartholomew/JUNE
def _populate_areas(areas: Areas, demography):
    people = Population()
    for area in areas:
        area.populate(demography)
        people.extend(area.people)
    return people
コード例 #5
0
def make_pop():
    people = Population([])
    for i in range(100):
        people.add(Person.from_attributes(age=i))
    return people
コード例 #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)
コード例 #7
0
ファイル: conftest.py プロジェクト: sadielbartholomew/JUNE
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
コード例 #8
0
ファイル: population_saver.py プロジェクト: IDAS-Durham/JUNE
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)
コード例 #9
0
ファイル: test_logger.py プロジェクト: sadielbartholomew/JUNE
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