示例#1
0
def generate_world_from_hdf5(file_path: str, chunk_size=500000) -> World:
    """
    Loads the world from an hdf5 file. All id references are substituted
    by actual references to the relevant instances.
    Parameters
    ----------
    file_path
        path of the hdf5 file
    chunk_size
        how many units of supergroups to process at a time.
        It is advise to keep it around 1e6
    """
    logger.info("loading world from HDF5")
    world = World()
    with h5py.File(file_path, "r", libver="latest", swmr=True) as f:
        f_keys = list(f.keys()).copy()
    geography = load_geography_from_hdf5(file_path=file_path,
                                         chunk_size=chunk_size)
    world.areas = geography.areas
    world.super_areas = geography.super_areas
    world.regions = geography.regions
    if "hospitals" in f_keys:
        logger.info("loading hospitals...")
        world.hospitals = load_hospitals_from_hdf5(file_path=file_path,
                                                   chunk_size=chunk_size)
    if "schools" in f_keys:
        logger.info("loading schools...")
        world.schools = load_schools_from_hdf5(file_path=file_path,
                                               chunk_size=chunk_size)
    if "companies" in f_keys:
        world.companies = load_companies_from_hdf5(file_path=file_path,
                                                   chunk_size=chunk_size)
    if "care_homes" in f_keys:
        logger.info("loading care homes...")
        world.care_homes = load_care_homes_from_hdf5(file_path=file_path,
                                                     chunk_size=chunk_size)
    if "universities" in f_keys:
        logger.info("loading universities...")
        world.universities = load_universities_from_hdf5(file_path=file_path,
                                                         chunk_size=chunk_size)
    if "cities" in f_keys:
        logger.info("loading cities...")
        world.cities = load_cities_from_hdf5(file_path)
    if "stations" in f_keys:
        logger.info("loading stations...")
        (
            world.stations,
            world.inter_city_transports,
            world.city_transports,
        ) = load_stations_from_hdf5(file_path)
    if "households" in f_keys:
        world.households = load_households_from_hdf5(file_path,
                                                     chunk_size=chunk_size)
    if "population" in f_keys:
        world.people = load_population_from_hdf5(file_path,
                                                 chunk_size=chunk_size)
    if "social_venues" in f_keys:
        logger.info("loading social venues...")
        social_venues_dict = load_social_venues_from_hdf5(file_path)
        for social_venues_spec, social_venues in social_venues_dict.items():
            setattr(world, social_venues_spec, social_venues)

    # restore world
    logger.info("restoring world...")
    restore_geography_properties_from_hdf5(world=world,
                                           file_path=file_path,
                                           chunk_size=chunk_size)
    if "population" in f_keys:
        restore_population_properties_from_hdf5(world=world,
                                                file_path=file_path,
                                                chunk_size=chunk_size)
    if "households" in f_keys:
        restore_households_properties_from_hdf5(world=world,
                                                file_path=file_path,
                                                chunk_size=chunk_size)
    if "care_homes" in f_keys:
        logger.info("restoring care homes...")
        restore_care_homes_properties_from_hdf5(world=world,
                                                file_path=file_path,
                                                chunk_size=chunk_size)
    if "hospitals" in f_keys:
        logger.info("restoring hospitals...")
        restore_hospital_properties_from_hdf5(world=world,
                                              file_path=file_path,
                                              chunk_size=chunk_size)
    if "cities" and "stations" in f_keys:
        logger.info("restoring commute...")
        restore_cities_and_stations_properties_from_hdf5(world=world,
                                                         file_path=file_path,
                                                         chunk_size=chunk_size)
    if "companies" in f_keys:
        logger.info("restoring companies...")
        restore_companies_properties_from_hdf5(
            world=world,
            file_path=file_path,
            chunk_size=chunk_size,
        )
    if "schools" in f_keys:
        logger.info("restoring schools...")
        restore_school_properties_from_hdf5(
            world=world,
            file_path=file_path,
            chunk_size=chunk_size,
        )
    if "universities" in f_keys:
        logger.info("restoring unis...")
        restore_universities_properties_from_hdf5(world=world,
                                                  file_path=file_path)

    if "social_venues" in f_keys:
        logger.info("restoring social venues...")
        restore_social_venues_properties_from_hdf5(world=world,
                                                   file_path=file_path)
    world.cemeteries = Cemeteries()
    return world
示例#2
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
示例#3
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