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
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
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