コード例 #1
0
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
コード例 #2
0
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)