def load_universities_from_hdf5(file_path: str, chunk_size: int = 50000): """ Loads universities 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 """ with h5py.File(file_path, "r", libver="latest", swmr=True) as f: universities = f["universities"] universities_list = [] n_universities = universities.attrs["n_universities"] ids = universities["id"] n_students_max = universities["n_students_max"] n_years = universities["n_years"] coordinates = universities["coordinates"] ukprns = universities["ukprns"] for k in range(n_universities): university = University( coordinates=coordinates[k], n_students_max=n_students_max[k], n_years=n_years[k], ukprn=ukprns[k] ) university.id = ids[k] universities_list.append(university) return Universities(universities_list)
def load_universities_from_hdf5(file_path: str, chunk_size: int = 50000, domain_areas=None): """ Loads universities 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 """ with h5py.File(file_path, "r", libver="latest", swmr=True) as f: universities = f["universities"] universities_list = [] n_universities = universities.attrs["n_universities"] ids = read_dataset(universities["id"]) n_students_max = read_dataset(universities["n_students_max"]) n_years = read_dataset(universities["n_years"]) ukprns = read_dataset(universities["ukprns"]) areas = read_dataset(universities["area"]) coordinates = read_dataset(universities["coordinates"]) for k in range(n_universities): if domain_areas is not None: area = areas[k] if area == nan_integer: raise ValueError( "if ``domain_areas`` is True, I expect not Nones areas." ) if area not in domain_areas: continue university = University(n_students_max=n_students_max[k], n_years=n_years[k], ukprn=ukprns[k], coordinates=coordinates[k]) university.id = ids[k] universities_list.append(university) return Universities(universities_list)
def test__university_for_super_areas(): super_area = SuperArea(name="durham", areas=None, coordinates=[54.768, -1.571868]) super_areas = SuperAreas([super_area]) unis = Universities.for_super_areas(super_areas) durham_uni = unis[0] assert durham_uni.n_students_max == 19025
def make_world(geography): geography.hospitals = Hospitals.for_geography(geography) geography.schools = Schools.for_geography(geography) geography.companies = Companies.for_geography(geography) geography.care_homes = CareHomes.for_geography(geography) geography.universities = Universities.for_super_areas( geography.super_areas) world = generate_world_from_geography(geography, include_households=False, include_commute=False) return world
def create_world(geography_h5): with h5py.File("test.hdf5", "w"): pass # reset file geography = geography_h5 geography.hospitals = Hospitals.for_geography(geography) geography.schools = Schools.for_geography(geography) geography.companies = Companies.for_geography(geography) geography.care_homes = CareHomes.for_geography(geography) geography.universities = Universities.for_super_areas(geography.super_areas) world = generate_world_from_geography( geography=geography, include_households=True, include_commute=True ) world.pubs = Pubs.for_geography(geography) world.cinemas = Cinemas.for_geography(geography) world.groceries = Groceries.for_geography(geography) leisure = generate_leisure_for_world( ["pubs", "cinemas", "groceries", "household_visits", "care_home_vists"], world ) leisure.distribute_social_venues_to_households(world.households) return world
geography = Geography.from_file({ "super_area": [ "E02003282", "E02001720", "E00088544", "E02002560", "E02002559", "E02004314", ] }) geography.hospitals = Hospitals.for_geography(geography) geography.schools = Schools.for_geography(geography) geography.companies = Companies.for_geography(geography) geography.care_homes = CareHomes.for_geography(geography) geography.universities = Universities.for_super_areas(geography.super_areas) world = generate_world_from_geography(geography, include_households=True, include_commute=True) print("World length", len(world.people)) world.to_hdf5("world.hdf5") world = generate_world_from_hdf5("world.hdf5") # leisure geography = load_geography_from_hdf5("world.hdf5") world.cinemas = Cinemas.for_geography(geography) world.pubs = Pubs.for_geography(geography) world.groceries = Groceries.for_super_areas(world.super_areas, venues_per_capita=1 / 500)
)) t1 = time.time() # default config path config_path = "./config_simulation.yaml" # define geography, let's run the first 20 super areas of london geography = Geography.from_file({"super_area": london_areas}) #geography = Geography.from_file({"region": ["North East"]}) # add buildings geography.hospitals = Hospitals.for_geography(geography) geography.companies = Companies.for_geography(geography) geography.schools = Schools.for_geography(geography) geography.universities = Universities.for_geography(geography) geography.care_homes = CareHomes.for_geography(geography) ## generate world world = generate_world_from_geography(geography, include_households=True) # ## some leisure activities world.pubs = Pubs.for_geography(geography) world.cinemas = Cinemas.for_geography(geography) world.groceries = Groceries.for_geography(geography) leisure = generate_leisure_for_config(world, config_filename=config_path) leisure.distribute_social_venues_to_areas( areas=world.areas, super_areas=world.super_areas ) # this assigns possible social venues to people. travel = Travel() travel.initialise_commute(world) t2 = time.time()
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