Esempio n. 1
0
def test_remove_household_activities_removes_Bettys_shopping_shared_activities(
        mocker, Betty, Bobber):
    mocker.patch.object(random, 'choice', return_value=Betty)
    hhld = instantiate_household_with([Betty, Bobber])
    policy = modifiers.ReduceSharedActivity(['shop_1', 'shop_2'])

    assert_correct_activities(person=Betty,
                              ordered_activities_list=[
                                  'home', 'escort', 'work', 'leisure',
                                  'escort', 'home', 'shop_1', 'shop_2', 'home'
                              ])
    assert_correct_activities(person=Bobber,
                              ordered_activities_list=[
                                  'home', 'education', 'home', 'shop_1',
                                  'shop_2', 'home'
                              ])

    policy.remove_household_activities(hhld)

    assert_correct_activities(person=Betty,
                              ordered_activities_list=[
                                  'home', 'escort', 'work', 'leisure',
                                  'escort', 'home', 'shop_1', 'shop_2', 'home'
                              ])
    assert_correct_activities(
        person=Bobber, ordered_activities_list=['home', 'education', 'home'])
Esempio n. 2
0
 def __init__(self,
              activities: list,
              probability: Union[float, int,
                                 probability_samplers.SamplingProbability],
              attribute_filter: filters.Filter = None):
     super().__init__(modifiers.ReduceSharedActivity(activities),
                      probability, attribute_filter)
Esempio n. 3
0
def test_apply_to_delegates_to_remove_activities_when_given_household(
        mocker, SmithHousehold):
    mocker.patch.object(modifiers.ReduceSharedActivity,
                        'remove_household_activities')

    policy = modifiers.ReduceSharedActivity([''])
    policy.apply_to(SmithHousehold)

    modifiers.ReduceSharedActivity.remove_household_activities.assert_called_once_with(
        SmithHousehold)
Esempio n. 4
0
def test_people_who_share_activities_for_removal_identifies_both_people_as_sharing_activities(
        Betty, Bobber):
    hhld = instantiate_household_with([Betty, Bobber])

    ppl = modifiers.ReduceSharedActivity(
        ['shop_1', 'shop_2']).people_who_share_activities_for_removal(hhld)

    assert ppl
    assert Betty in ppl
    assert Bobber in ppl
Esempio n. 5
0
def test_remove_activities_removes_adjoining_activities(Betty):
    assert_correct_activities(person=Betty,
                              ordered_activities_list=[
                                  'home', 'escort', 'work', 'leisure',
                                  'escort', 'home', 'shop_1', 'shop_2', 'home'
                              ])
    modifiers.ReduceSharedActivity(['shop_1', 'shop_2']).remove_activities(
        Betty, shared_activities_for_removal=[Betty.plan[12], Betty.plan[14]])
    assert_correct_activities(person=Betty,
                              ordered_activities_list=[
                                  'home', 'escort', 'work', 'leisure',
                                  'escort', 'home'
                              ])
Esempio n. 6
0
def test_remove_activities_removes_relevant_shared_activities(Betty):
    Betty.plan[6].act = 'shop_1'
    Betty.plan[6].location = Betty.plan[12].location
    assert_correct_activities(person=Betty,
                              ordered_activities_list=[
                                  'home', 'escort', 'work', 'shop_1', 'escort',
                                  'home', 'shop_1', 'shop_2', 'home'
                              ])
    modifiers.ReduceSharedActivity(['shop_1', 'shop_2']).remove_activities(
        Betty, shared_activities_for_removal=[Betty.plan[12], Betty.plan[14]])
    assert_correct_activities(person=Betty,
                              ordered_activities_list=[
                                  'home', 'escort', 'work', 'shop_1', 'escort',
                                  'home'
                              ])
Esempio n. 7
0
def test_remove_household_activities_does_nothing_if_one_person_in_hhld(Betty):
    household = instantiate_household_with([Betty])
    assert_correct_activities(person=Betty,
                              ordered_activities_list=[
                                  'home', 'escort', 'work', 'leisure',
                                  'escort', 'home', 'shop_1', 'shop_2', 'home'
                              ])

    policy = modifiers.ReduceSharedActivity([''])
    shared_acts = policy.shared_activities_for_removal(household)
    assert not shared_acts

    policy.remove_household_activities(household)
    assert_correct_activities(person=Betty,
                              ordered_activities_list=[
                                  'home', 'escort', 'work', 'leisure',
                                  'escort', 'home', 'shop_1', 'shop_2', 'home'
                              ])
Esempio n. 8
0
def test_remove_household_activities_delegates_to_several_methods(
        mocker, SmithHousehold):
    mocker.patch.object(modifiers.ReduceSharedActivity,
                        'shared_activities_for_removal',
                        return_value=[''])
    mocker.patch.object(modifiers.ReduceSharedActivity,
                        'people_who_share_activities_for_removal',
                        return_value=[''])
    mocker.patch.object(random, 'choice')
    mocker.patch.object(modifiers.ReduceSharedActivity, 'remove_activities')

    policy = modifiers.ReduceSharedActivity([''])
    policy.remove_household_activities(SmithHousehold)

    modifiers.ReduceSharedActivity.shared_activities_for_removal.assert_called_once_with(
        SmithHousehold)
    assert modifiers.ReduceSharedActivity.people_who_share_activities_for_removal.call_count == 2
    random.choice.assert_called_once_with([''])
    assert modifiers.ReduceSharedActivity.remove_activities.call_count == 4
Esempio n. 9
0
def test_shared_activities_for_removal_finds_shared_activities(Betty, Bobber):
    hhld = instantiate_household_with([Betty, Bobber])
    act_1 = Activity(8,
                     'shop_2',
                     'b',
                     start_time=mtdt(19 * 60),
                     end_time=mtdt(19 * 60 + 50))
    act_2 = Activity(7,
                     'shop_1',
                     'b',
                     start_time=mtdt(18 * 60 + 20),
                     end_time=mtdt(18 * 60 + 50))

    shared_acts = modifiers.ReduceSharedActivity(
        ['shop_1', 'shop_2']).shared_activities_for_removal(hhld)

    assert shared_acts
    assert act_1.isin_exact(shared_acts)
    assert act_2.isin_exact(shared_acts)
Esempio n. 10
0
def test_remove_household_activities_does_nothing_if_people_in_hhld_dont_share_acts(
        SmithHousehold):
    household = SmithHousehold
    steve = household.people[1]
    hilda = household.people[2]
    timmy = household.people[3]
    bobby = household.people[4]
    assert_correct_activities(
        person=steve,
        ordered_activities_list=['home', 'work', 'leisure', 'work', 'home'])
    assert_correct_activities(person=hilda,
                              ordered_activities_list=[
                                  'home', 'escort_education', 'shop',
                                  'leisure', 'escort_education', 'home'
                              ])
    assert_correct_activities(person=timmy,
                              ordered_activities_list=[
                                  'home', 'education', 'shop', 'education',
                                  'leisure', 'home'
                              ])
    assert_correct_activities(
        person=bobby, ordered_activities_list=['home', 'education', 'home'])

    policy = modifiers.ReduceSharedActivity([''])
    shared_acts = policy.shared_activities_for_removal(household)
    assert not shared_acts

    policy.remove_household_activities(household)
    assert_correct_activities(
        person=steve,
        ordered_activities_list=['home', 'work', 'leisure', 'work', 'home'])
    assert_correct_activities(person=hilda,
                              ordered_activities_list=[
                                  'home', 'escort_education', 'shop',
                                  'leisure', 'escort_education', 'home'
                              ])
    assert_correct_activities(person=timmy,
                              ordered_activities_list=[
                                  'home', 'education', 'shop', 'education',
                                  'leisure', 'home'
                              ])
    assert_correct_activities(
        person=bobby, ordered_activities_list=['home', 'education', 'home'])
Esempio n. 11
0
def test_is_activity_for_removal_activity_does_not_match_ReduceSharedActivity_activities(
):
    activity = Activity(act='other_activity')
    policy_remove_activity = modifiers.ReduceSharedActivity(['some_activity'])

    assert not policy_remove_activity.is_activity_for_removal(activity)
Esempio n. 12
0
def test_throws_exception_if_apply_to_given_wrong_input(Bobby):
    policy = modifiers.ReduceSharedActivity([''])
    with pytest.raises(NotImplementedError) as e:
        policy.apply_to(Bobby)
    assert 'Types passed incorrectly: <class \'pam.core.Person\'>, <class \'NoneType\'>, <class \'NoneType\'>. ' \
           'This modifier exists only for Households' in str(e.value)