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'])
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) )
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
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
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'])
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'])
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'])