Ejemplo n.º 1
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 = modify.ActivityPolicy(
        modify.RemoveActivity(['education']),
        modify.ActivityProbability(['education'], 1),
        modify.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'])
Ejemplo n.º 2
0
def test_ActivityPolicy_verifies_for_appropriate_probabilities(mocker):
    mocker.patch.object(modify, 'verify_probability')
    modify.ActivityPolicy(modify.RemoveActivity(['']), 0.5)

    modify.verify_probability.assert_called_once_with(
        0.5,
        (float, list, modify.SimpleProbability, modify.ActivityProbability)
    )
Ejemplo n.º 3
0
def test_ActivityPolicy_apply_to_delegates_to_modifier_policy_apply_to_for_list_of_probabilities(mocker, SmithHousehold):
    mocker.patch.object(modify.RemoveActivity, 'apply_to')
    mocker.patch.object(modify.SimpleProbability, 'p', return_value=1)

    policy = modify.ActivityPolicy(modify.RemoveActivity(['']), [1., modify.SimpleProbability(1.)])
    household = SmithHousehold

    policy.apply_to(household)

    assert modify.RemoveActivity.apply_to.call_count == 4
Ejemplo n.º 4
0
def test_ActivityPolicy_apply_to_delegates_to_modifier_policy_apply_to_for_single_probability(mocker, SmithHousehold):
    mocker.patch.object(modify.RemoveActivity, 'apply_to')
    mocker.patch.object(modify.SimpleProbability, 'sample', return_value=True)

    policy = modify.ActivityPolicy(modify.RemoveActivity(['']), modify.SimpleProbability(1.))
    household = SmithHousehold

    policy.apply_to(household)

    assert modify.RemoveActivity.apply_to.call_count == 4
Ejemplo n.º 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 = modify.ActivityPolicy(
        modify.RemoveActivity(activities=['education']), 1)
    policy.apply_to(household)
    assert_correct_activities(person=household.people['1'],
                              ordered_activities_list=['home'])
Ejemplo n.º 6
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', 'shop', 'leisure',
                                  'escort', '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 = modify.ActivityPolicy(
        modify.RemoveActivity(
            ['education', 'escort', 'leisure', 'shop', 'work']),
        modify.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', 'shop', 'leisure',
                                  'escort', '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'])
Ejemplo n.º 7
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 = modify.ActivityPolicy(
        modify.RemoveActivity(activities=['education']), 1)
    policy.apply_to(household)
    assert_correct_activities(person=household.people['1'],
                              ordered_activities_list=['home', 'work', 'home'])