def test__do_not_visit_dead_people(world_visits, leisure): # look for a person in carehome found = False for area in world_visits.areas: for person in area.people: if person.residence.group.spec == "care_home": found = True break assert found person2 = Person.from_attributes() household = Household(type="family") household.add(person2) household.relatives_in_care_homes = [person] person2.residence.group.social_venues = {"care_home_visits" : [person.residence.group[2]]} person.dead = True leisure.update_household_and_care_home_visits_targets([person2]) for _ in range(0, 100): care_home = leisure.get_subgroup_for_person_and_housemates(person2) assert care_home is None
def load_households_from_hdf5(file_path: str, chunk_size=50000): """ Loads households 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 households from hdf5 ", end="") with h5py.File(file_path, "r", libver="latest", swmr=True) as f: households = f["households"] households_list = [] n_households = households.attrs["n_households"] n_chunks = int(np.ceil(n_households / chunk_size)) for chunk in range(n_chunks): print(".", end="") idx1 = chunk * chunk_size idx2 = min((chunk + 1) * chunk_size, n_households) ids = households["id"][idx1:idx2] types = households["type"][idx1:idx2] areas = households["area"][idx1:idx2] max_sizes = households["max_size"][idx1:idx2] # TODO: household_complacencies = households["household_complacency"][idx1:idx2] relatives_in_households = households["relatives_in_households"][ idx1:idx2] relatives_in_care_homes = households["relatives_in_care_homes"][ idx1:idx2] social_venues_specs = households["social_venues_specs"][idx1:idx2] social_venues_ids = households["social_venues_ids"][idx1:idx2] for k in range(idx2 - idx1): area = areas[k] if area == nan_integer: area = None type = types[k] if type.decode() == " ": type = None else: type = type.decode() household = Household( type=type, area=area, max_size=max_sizes[k], household_complacency=np.random.rand() # TODO: :household_complacency=household_complacencies[k] ) household.id = ids[k] if relatives_in_households[k][0] == nan_integer: household.relatives_in_households = () else: household.relatives_in_households = relatives_in_households[ k] if relatives_in_care_homes[k][0] == nan_integer: household.relatives_in_care_homes = () else: household.relatives_in_care_homes = relatives_in_care_homes[ k] household.social_venues = defaultdict(list) for sv_spec, sv_id in zip(social_venues_specs[k], social_venues_ids[k]): household.social_venues[sv_spec.decode()].append(sv_id) households_list.append(household) print("\n", end="") return Households(households_list)