def schedule_primary_school_occupancy(directory): weekday_school = ScheduleDay('Weekday School Year', [0, 1, 0.5, 0], [Time(0, 0), Time(8, 0), Time(15, 0), Time(18, 0)]) weekend_school = ScheduleDay('Weekend School Year', [0]) weekday_summer = ScheduleDay('Weekday Summer', [0, 0.5, 0], [Time(0, 0), Time(9, 0), Time(17, 0)]) weekend_summer = ScheduleDay('Weekend Summer', [0]) summer_weekday_rule = ScheduleRule( weekday_summer, start_date=Date(7, 1), end_date=Date(9, 1)) summer_weekday_rule.apply_weekday = True summer_weekend_rule = ScheduleRule( weekend_summer, start_date=Date(7, 1), end_date=Date(9, 1)) summer_weekend_rule.apply_weekend = True school_weekend_rule = ScheduleRule(weekend_school) school_weekend_rule.apply_weekend = True summer_design = ScheduleDay('School Summer Design', [0, 1, 0.25], [Time(0, 0), Time(6, 0), Time(18, 0)]) winter_design = ScheduleDay('School Winter Design', [0]) schedule = ScheduleRuleset('School Occupancy', weekday_school, [summer_weekday_rule, summer_weekend_rule, school_weekend_rule], schedule_types.fractional, weekend_summer, summer_design, winter_design) dest_file = os.path.join(directory, 'schedule_primary_school_occupancy.json') with open(dest_file, 'w') as fp: json.dump(schedule.to_dict(True), fp, indent=4)
def test_schedule_ruleset_to_from_idf(): """Test the ScheduleRuleset to_idf and from_idf methods.""" weekday_office = ScheduleDay( 'Weekday Office Occupancy', [0, 1, 0], [Time(0, 0), Time(9, 0), Time(17, 0)]) saturday_office = ScheduleDay( 'Saturday Office Occupancy', [0, 0.25, 0], [Time(0, 0), Time(9, 0), Time(17, 0)]) sunday_office = ScheduleDay('Sunday Office Occupancy', [0]) week_rule = ScheduleRule(weekday_office) week_rule.apply_weekday = True sat_rule = ScheduleRule(saturday_office, apply_saturday=True) summer_office = ScheduleDay( 'Summer Office Occupancy', [0, 1, 0.25], [Time(0, 0), Time(6, 0), Time(22, 0)]) winter_office = ScheduleDay('Winter Office Occupancy', [0]) schedule = ScheduleRuleset('Office Occupancy', sunday_office, [week_rule, sat_rule], schedule_types.fractional, summer_office, winter_office) year_sched, week_scheds = schedule.to_idf() assert len(week_scheds) == 1 day_scheds = (weekday_office.to_idf(), saturday_office.to_idf(), sunday_office.to_idf(), summer_office.to_idf(), winter_office.to_idf()) sch_type = schedule_types.fractional.to_idf() rebuilt_schedule = ScheduleRuleset.from_idf(year_sched, week_scheds, day_scheds, sch_type) rebuilt_year_sched, rebuilt_week_scheds = rebuilt_schedule.to_idf() assert rebuilt_year_sched == year_sched assert rebuilt_week_scheds[0] == week_scheds[0]
def test_schedule_ruleset_average_schedules_date_range(): """Test the ScheduleRuleset average_schedules method with schedules over a date range.""" weekday_school = ScheduleDay( 'Weekday School Year', [0.1, 1, 0.1], [Time(0, 0), Time(8, 0), Time(17, 0)]) weekend_school = ScheduleDay('Weekend School Year', [0.1]) weekday_summer = ScheduleDay( 'Weekday Summer', [0, 0.5, 0], [Time(0, 0), Time(9, 0), Time(17, 0)]) weekend_summer = ScheduleDay('Weekend Summer', [0]) summer_weekday_rule = ScheduleRule(weekday_summer, start_date=Date(7, 1), end_date=Date(9, 1)) summer_weekday_rule.apply_weekday = True summer_weekend_rule = ScheduleRule(weekend_summer, start_date=Date(7, 1), end_date=Date(9, 1)) summer_weekend_rule.apply_weekend = True summer_weekend_rule.apply_holiday = True school_weekend_rule = ScheduleRule(weekend_school) school_weekend_rule.apply_weekend = True school_weekend_rule.apply_holiday = True summer_design = ScheduleDay( 'School Summer Design', [0, 1, 0.25], [Time(0, 0), Time(6, 0), Time(18, 0)]) winter_design = ScheduleDay('School Winter Design', [0]) all_rules = [summer_weekday_rule, summer_weekend_rule, school_weekend_rule] school_schedule = ScheduleRuleset('School Occupancy', weekday_school, all_rules, schedule_types.fractional, summer_design, winter_design) lobby_schedule = ScheduleRuleset.from_constant_value( 'Lobby Occupancy', 0.1, schedule_types.fractional) school_avg = ScheduleRuleset.average_schedules( 'Office Average', [school_schedule, lobby_schedule]) week_vals = school_avg.values(end_date=Date(1, 7)) avg_vals = [ 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.55, 0.55, 0.55, 0.55, 0.55, 0.55, 0.55, 0.55, 0.55, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1 ] assert week_vals[:24] == [0.1] * 24 assert week_vals[24:48] == avg_vals week_vals = school_avg.values(start_date=Date(7, 1), end_date=Date(7, 7)) avg_vals = [ 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05 ] assert week_vals[:24] == [0.05] * 24 assert week_vals[24:48] == avg_vals
def test_schedule_does_rule_apply(): """Test the ScheduleRule does_rule_apply properties.""" weekday_school = ScheduleDay( 'Weekday School Year', [0, 1, 0.5, 0], [Time(0, 0), Time(8, 0), Time(15, 0), Time(18, 0)]) weekend_school = ScheduleDay('Weekend School Year', [0]) weekday_summer = ScheduleDay( 'Weekday Summer', [0, 0.5, 0], [Time(0, 0), Time(9, 0), Time(17, 0)]) weekend_summer = ScheduleDay('Weekend Summer', [0]) school_weekday_rule = ScheduleRule(weekday_school) school_weekday_rule.apply_weekday = True school_weekend_rule = ScheduleRule(weekend_school) school_weekend_rule.apply_weekend = True school_weekend_rule.apply_holiday = True summer_weekday_rule = ScheduleRule(weekday_summer, start_date=Date(7, 1), end_date=Date(9, 1)) summer_weekday_rule.apply_weekday = True summer_weekend_rule = ScheduleRule(weekend_summer, start_date=Date(7, 1), end_date=Date(9, 1)) summer_weekend_rule.apply_weekend = True summer_weekend_rule.apply_holiday = True assert school_weekday_rule.does_rule_apply(1, 4) assert not school_weekday_rule.does_rule_apply(1, 1) assert school_weekend_rule.does_rule_apply(1, 1) assert not school_weekend_rule.does_rule_apply(1, 4) assert summer_weekday_rule.does_rule_apply(Date(7, 15).doy, 4) assert not summer_weekday_rule.does_rule_apply(Date(7, 15).doy, 1) assert not summer_weekday_rule.does_rule_apply(1, 4) assert school_weekend_rule.does_rule_apply(Date(7, 15).doy, 1) assert not school_weekend_rule.does_rule_apply(Date(7, 15).doy, 4) assert not summer_weekday_rule.does_rule_apply(1, 1)
def test_schedule_day_dict_methods(): """Test the to/from dict methods.""" simple_office = ScheduleDay( 'Simple Office Occupancy', [0, 1, 0], [Time(0, 0), Time(9, 0), Time(17, 0)]) sched_rule = ScheduleRule(simple_office) sched_rule.apply_weekday = True rule_dict = sched_rule.to_dict() new_sched_rule = ScheduleRule.from_dict(rule_dict) assert new_sched_rule == sched_rule assert rule_dict == new_sched_rule.to_dict()
def test_schedule_rule_lockability(): """Test the lockability of the ScheduleRule.""" weekday_office = ScheduleDay( 'Weekday Office Occupancy', [0, 1, 0], [Time(0, 0), Time(9, 0), Time(17, 0)]) weekday_rule = ScheduleRule(weekday_office) weekday_rule.apply_weekday = True weekday_rule.apply_monday = False weekday_rule.lock() with pytest.raises(AttributeError): weekday_rule.apply_monday = True with pytest.raises(AttributeError): weekday_rule.schedule_day.remove_value_by_time(Time(17, 0)) weekday_rule.unlock() weekday_rule.apply_monday = True weekday_rule.schedule_day.remove_value_by_time(Time(17, 0))
def test_schedule_rule_equality(): """Test the equality of ScheduleRule objects.""" weekday_office = ScheduleDay( 'Weekday Office Occupancy', [0, 1, 0], [Time(0, 0), Time(9, 0), Time(17, 0)]) saturday_office = ScheduleDay( 'Saturday Office Occupancy', [0, 0.25, 0], [Time(0, 0), Time(9, 0), Time(17, 0)]) weekday_rule = ScheduleRule(weekday_office) weekday_rule.apply_weekday = True weekday_rule_dup = weekday_rule.duplicate() sat_rule = ScheduleRule(saturday_office, apply_saturday=True) assert weekday_rule is weekday_rule assert weekday_rule is not weekday_rule_dup assert weekday_rule == weekday_rule_dup weekday_rule_dup.apply_friday = False assert weekday_rule != weekday_rule_dup assert weekday_rule != sat_rule
def test_schedule_ruleset_to_idf_date_range(): """Test the ScheduleRuleset to_idf and from_idf methods.""" weekday_school = ScheduleDay( 'Weekday School Year', [0, 1, 0.5, 0], [Time(0, 0), Time(8, 0), Time(15, 0), Time(18, 0)]) weekend_school = ScheduleDay('Weekend School Year', [0]) weekday_summer = ScheduleDay( 'Weekday Summer', [0, 0.5, 0], [Time(0, 0), Time(9, 0), Time(17, 0)]) weekend_summer = ScheduleDay('Weekend Summer', [0]) summer_weekday_rule = ScheduleRule(weekday_summer, start_date=Date(7, 1), end_date=Date(9, 1)) summer_weekday_rule.apply_weekday = True summer_weekend_rule = ScheduleRule(weekend_summer, start_date=Date(7, 1), end_date=Date(9, 1)) summer_weekend_rule.apply_weekend = True summer_weekend_rule.apply_holiday = True school_weekend_rule = ScheduleRule(weekend_school) school_weekend_rule.apply_weekend = True school_weekend_rule.apply_holiday = True summer_design = ScheduleDay( 'School Summer Design', [0, 1, 0.25], [Time(0, 0), Time(6, 0), Time(18, 0)]) winter_design = ScheduleDay('School Winter Design', [0]) schedule = ScheduleRuleset( 'School Occupancy', weekday_school, [summer_weekday_rule, summer_weekend_rule, school_weekend_rule], schedule_types.fractional, summer_design, winter_design) year_sched, week_scheds = schedule.to_idf() assert len(year_sched.split(',')) > 6 assert len(week_scheds) == 2 """
def test_schedule_rule_init(): """Test the ScheduleRule initialization and basic properties.""" simple_office = ScheduleDay( 'Simple Office Occupancy', [0, 1, 0], [Time(0, 0), Time(9, 0), Time(17, 0)]) sched_rule = ScheduleRule(simple_office) sched_rule.apply_weekday = True str(sched_rule) # test the string representation assert not sched_rule.apply_sunday assert sched_rule.apply_monday assert sched_rule.apply_tuesday assert sched_rule.apply_wednesday assert sched_rule.apply_thursday assert sched_rule.apply_friday assert not sched_rule.apply_saturday assert sched_rule.apply_weekday assert not sched_rule.apply_weekend assert sched_rule.start_date == Date(1, 1) assert sched_rule.end_date == Date(12, 31)