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)
Exemple #2
0
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)
Exemple #5
0
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()
Exemple #6
0
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))
Exemple #7
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
    """
Exemple #9
0
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)