Beispiel #1
0
def test_ActivityPolicy_verifies_for_appropriate_probabilities(mocker):
    mocker.patch.object(probability_samplers, 'verify_probability')
    policies.ActivityPolicy(modifiers.RemoveActivity(['']), 0.5)

    probability_samplers.verify_probability.assert_called_once_with(
        0.5, (probability_samplers.HouseholdProbability,
              probability_samplers.PersonProbability))
Beispiel #2
0
def test_attribute_based_remove_activity_policy_does_not_remove_matching_activities_from_non_strictly_irrelevant_people(
        home_education_home_university_student):
    household = instantiate_household_with(
        [home_education_home_university_student])

    def age_condition_under_0(attribute_value):
        return attribute_value < 0

    def job_condition_wasevrrr(attribute_value):
        return attribute_value == 'wasevrrr'

    assert_correct_activities(
        person=household.people['1'],
        ordered_activities_list=['home', 'education', 'home'])
    assert not age_condition_under_0(household.people['1'].attributes['age'])
    assert not job_condition_wasevrrr(household.people['1'].attributes['job'])

    policy_remove_higher_education = policies.ActivityPolicy(
        modifiers.RemoveActivity(['education']),
        probability_samplers.ActivityProbability(['education'], 1),
        filters.PersonAttributeFilter(conditions={
            'age': age_condition_under_0,
            'job': job_condition_wasevrrr
        },
                                      how='any'))

    policy_remove_higher_education.apply_to(household)

    assert_correct_activities(
        person=household.people['1'],
        ordered_activities_list=['home', 'education', 'home'])
Beispiel #3
0
def test_attribute_based_remove_activity_policy_removes_all_matching_activities_from_strictly_relevant_people(
        home_education_home_university_student):
    household = instantiate_household_with(
        [home_education_home_university_student])

    def age_condition_over_17(attribute_value):
        return attribute_value > 17

    def job_condition_education(attribute_value):
        return attribute_value == 'education'

    assert_correct_activities(
        person=household.people[1],
        ordered_activities_list=['home', 'education', 'home'])
    assert age_condition_over_17(household.people[1].attributes['age'])
    assert job_condition_education(household.people[1].attributes['job'])

    policy_remove_higher_education = policies.ActivityPolicy(
        modifiers.RemoveActivity(['education']),
        probability_samplers.ActivityProbability(['education'], 1),
        filters.PersonAttributeFilter(conditions={
            'age': age_condition_over_17,
            'job': job_condition_education
        },
                                      how='all'))

    policy_remove_higher_education.apply_to(household)
    assert_correct_activities(person=household.people[1],
                              ordered_activities_list=['home'])
Beispiel #4
0
def test_ActivityPolicy_does_nothing_if_not_selected_for_single_probability(
        mocker, SmithHousehold):
    mocker.patch.object(modifiers.RemoveActivity, 'apply_to')
    mocker.patch.object(random, 'random', return_value=0.7)

    policy = policies.ActivityPolicy(modifiers.RemoveActivity(['work']), 0.5)
    household = SmithHousehold

    policy.apply_to(household)

    assert not modifiers.RemoveActivity.apply_to.called, 'method should not have been called'
Beispiel #5
0
def test_home_education_home_removal_of_education_act(
        person_home_education_home):
    household = instantiate_household_with([person_home_education_home])
    assert_correct_activities(
        person=household.people['1'],
        ordered_activities_list=['home', 'education', 'home'])

    policy = policies.ActivityPolicy(
        modifiers.RemoveActivity(activities=['education']), 1)
    policy.apply_to(household)
    assert_correct_activities(person=household.people['1'],
                              ordered_activities_list=['home'])
Beispiel #6
0
def test_ActivityPolicy_apply_to_delegates_to_modifier_policy_apply_to_for_list_of_probabilities(
        mocker, SmithHousehold):
    mocker.patch.object(modifiers.RemoveActivity, 'apply_to')
    mocker.patch.object(probability_samplers.SimpleProbability,
                        'p',
                        return_value=1)

    policy = policies.ActivityPolicy(modifiers.RemoveActivity(
        ['']), [1., probability_samplers.SimpleProbability(1.)])
    household = SmithHousehold

    policy.apply_to(household)

    assert modifiers.RemoveActivity.apply_to.call_count == 4
Beispiel #7
0
def test_ActivityPolicy_does_nothing_if_attribute_filter_condition_not_satisfied(
        mocker, SmithHousehold):
    mocker.patch.object(modifiers.RemoveActivity, 'apply_to')
    mocker.patch.object(filters.Filter,
                        'satisfies_conditions',
                        return_value=False)

    policy = policies.ActivityPolicy(modifiers.RemoveActivity(['']), 0.5,
                                     filters.Filter())
    household = SmithHousehold

    policy.apply_to(household)

    assert not modifiers.RemoveActivity.apply_to.called, 'method should not have been called'
Beispiel #8
0
def test_evaluate_activity_policy_selects_steve_for_individual_activity_removal(
        mocker, SmithHousehold):
    mocker.patch.object(random, 'random', side_effect=[1] + [0] + [1] * 18)
    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'])

    # i.e. First of Steve's work activities is affected and only that activity is affected
    policy = policies.ActivityPolicy(
        modifiers.RemoveActivity(
            ['education', 'escort', 'leisure', 'shop', 'work']),
        probability_samplers.ActivityProbability(
            ['education', 'escort', 'leisure', 'shop', 'work'], 0.5))
    policy.apply_to(household)

    assert_correct_activities(
        person=steve,
        ordered_activities_list=['home', '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'])
Beispiel #9
0
def test_home_work_home_education_home_removal_of_education_act():
    person = Person(1)
    person.add(
        Activity(seq=1,
                 act='home',
                 area='a',
                 start_time=mtdt(0),
                 end_time=mtdt(60)))
    person.add(
        Leg(seq=1,
            mode='car',
            start_area='a',
            end_area='b',
            start_time=mtdt(60),
            end_time=mtdt(90)))
    person.add(
        Activity(seq=2,
                 act='work',
                 area='b',
                 start_time=mtdt(90),
                 end_time=mtdt(120)))
    person.add(
        Leg(seq=2,
            mode='car',
            start_area='b',
            end_area='a',
            start_time=mtdt(120),
            end_time=mtdt(180)))
    person.add(
        Activity(seq=3,
                 act='home',
                 area='a',
                 start_time=mtdt(180),
                 end_time=mtdt(300)))
    person.add(
        Leg(seq=3,
            mode='car',
            start_area='a',
            end_area='b',
            start_time=mtdt(300),
            end_time=mtdt(390)))
    person.add(
        Activity(seq=2,
                 act='education',
                 area='b',
                 start_time=mtdt(390),
                 end_time=mtdt(520)))
    person.add(
        Leg(seq=2,
            mode='car',
            start_area='b',
            end_area='a',
            start_time=mtdt(520),
            end_time=mtdt(580)))
    person.add(
        Activity(seq=3,
                 act='home',
                 area='a',
                 start_time=mtdt(680),
                 end_time=END_OF_DAY))
    household = instantiate_household_with([person])
    assert_correct_activities(
        person=household.people['1'],
        ordered_activities_list=['home', 'work', 'home', 'education', 'home'])

    policy = policies.ActivityPolicy(
        modifiers.RemoveActivity(activities=['education']), 1)
    policy.apply_to(household)
    assert_correct_activities(person=household.people['1'],
                              ordered_activities_list=['home', 'work', 'home'])