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_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_service_hot_water_init_from_idf(): """Test the initialization of Lighting from_idf.""" weekday_office = ScheduleDay('Weekday Office Water Use', [0, 1, 0], [Time(0, 0), Time(9, 0), Time(17, 0)]) saturday_office = ScheduleDay('Saturday Office Water Use', [0, 0.25, 0], [Time(0, 0), Time(9, 0), Time(17, 0)]) weekend_rule = ScheduleRule(saturday_office) weekend_rule.apply_weekend = True schedule = ScheduleRuleset('Office Water Use', weekday_office, [weekend_rule], schedule_types.fractional) shw = ServiceHotWater('Open Office Zone Hot Water', 0.1, schedule) sched_dict = {schedule.identifier: schedule} room = Room.from_box('Test_Zone', 10, 10, 3) idf_str, sch_strs = shw.to_idf(room) for sch in sch_strs: sch_obj = ScheduleRuleset.from_idf_constant(sch) sched_dict[sch_obj.identifier] = sch_obj rebuilt_shw, room_id, flow = ServiceHotWater.from_idf( idf_str, room.floor_area, sched_dict) if (sys.version_info >= (3, 0)): assert shw == rebuilt_shw assert room_id == room.identifier assert flow == shw.flow_per_area * room.floor_area
def test_lighting_lockability(): """Test the lockability of Lighting objects.""" weekday_office = ScheduleDay( 'Weekday Office Lighting', [0, 1, 0], [Time(0, 0), Time(9, 0), Time(17, 0)]) saturday_office = ScheduleDay( 'Saturday Office Lighting', [0, 0.25, 0], [Time(0, 0), Time(9, 0), Time(17, 0)]) weekend_rule = ScheduleRule(saturday_office) weekend_rule.apply_weekend = True schedule = ScheduleRuleset('Office Lighting', weekday_office, [weekend_rule], schedule_types.fractional) lighting = Lighting('Open Office Zone Lighting', 10, schedule) lighting.watts_per_area = 6 lighting.lock() with pytest.raises(AttributeError): lighting.watts_per_area = 8 with pytest.raises(AttributeError): lighting.schedule.default_day_schedule.remove_value_by_time(Time( 17, 0)) lighting.unlock() lighting.watts_per_area = 8 with pytest.raises(AttributeError): lighting.schedule.default_day_schedule.remove_value_by_time(Time( 17, 0))
def test_lighting_equality(): """Test the equality of Lighting objects.""" weekday_office = ScheduleDay( 'Weekday Office Lighting', [0, 1, 0], [Time(0, 0), Time(9, 0), Time(17, 0)]) saturday_office = ScheduleDay( 'Saturday Office Lighting', [0, 0.25, 0], [Time(0, 0), Time(9, 0), Time(17, 0)]) weekend_rule = ScheduleRule(saturday_office) weekend_rule.apply_weekend = True schedule = ScheduleRuleset('Office Lighting', weekday_office, [weekend_rule], schedule_types.fractional) lighting = Lighting('Open Office Zone Lighting', 10, schedule) lighting_dup = lighting.duplicate() lighting_alt = Lighting( 'Open Office Zone Lighting', 10, ScheduleRuleset.from_constant_value('Constant', 1, schedule_types.fractional)) assert lighting is lighting assert lighting is not lighting_dup assert lighting == lighting_dup lighting_dup.watts_per_area = 6 assert lighting != lighting_dup assert lighting != lighting_alt
def test_equipment_equality(): """Test the equality of ElectricEquipment objects.""" weekday_office = ScheduleDay( 'Weekday Office Equip', [0, 1, 0], [Time(0, 0), Time(9, 0), Time(17, 0)]) saturday_office = ScheduleDay( 'Saturday Office Equip', [0, 0.25, 0], [Time(0, 0), Time(9, 0), Time(17, 0)]) weekend_rule = ScheduleRule(saturday_office) weekend_rule.apply_weekend = True schedule = ScheduleRuleset('Office Equip', weekday_office, [weekend_rule], schedule_types.fractional) equipment = ElectricEquipment('Open Office Zone Equip', 10, schedule) equipment_dup = equipment.duplicate() equipment_alt = ElectricEquipment( 'Open Office Zone Equip', 10, ScheduleRuleset.from_constant_value('Constant', 1, schedule_types.fractional)) assert equipment is equipment assert equipment is not equipment_dup assert equipment == equipment_dup equipment_dup.watts_per_area = 6 assert equipment != equipment_dup assert equipment != equipment_alt
def test_equipment_lockability(): """Test the lockability of ElectricEquipment objects.""" weekday_office = ScheduleDay( 'Weekday Office Equip', [0, 1, 0], [Time(0, 0), Time(9, 0), Time(17, 0)]) saturday_office = ScheduleDay( 'Saturday Office Equip', [0, 0.25, 0], [Time(0, 0), Time(9, 0), Time(17, 0)]) weekend_rule = ScheduleRule(saturday_office) weekend_rule.apply_weekend = True schedule = ScheduleRuleset('Office Equip', weekday_office, [weekend_rule], schedule_types.fractional) equipment = ElectricEquipment('Open Office Zone Equip', 10, schedule) equipment.watts_per_area = 6 equipment.lock() with pytest.raises(AttributeError): equipment.watts_per_area = 8 with pytest.raises(AttributeError): equipment.schedule.default_day_schedule.remove_value_by_time( Time(17, 0)) equipment.unlock() equipment.watts_per_area = 8 with pytest.raises(AttributeError): equipment.schedule.default_day_schedule.remove_value_by_time( Time(17, 0))
def test_people_lockability(): """Test the lockability of People 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)]) weekend_rule = ScheduleRule(saturday_office) weekend_rule.apply_weekend = True occ_schedule = ScheduleRuleset('Office Occupancy', weekday_office, [weekend_rule], schedule_types.fractional) people = People('Open Office Zone People', 0.05, occ_schedule) people.people_per_area = 0.1 people.lock() with pytest.raises(AttributeError): people.people_per_area = 0.1 with pytest.raises(AttributeError): people.occupancy_schedule.default_day_schedule.remove_value_by_time( Time(17, 0)) people.unlock() people.people_per_area = 0.05 with pytest.raises(AttributeError): people.occupancy_schedule.default_day_schedule.remove_value_by_time( Time(17, 0))
def test_people_equality(): """Test the equality of People 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)]) weekend_rule = ScheduleRule(saturday_office) weekend_rule.apply_weekend = True occ_schedule = ScheduleRuleset('Office Occupancy', weekday_office, [weekend_rule], schedule_types.fractional) people = People('Open Office Zone People', 0.05, occ_schedule) people_dup = people.duplicate() people_alt = People( 'Open Office Zone People', 0.05, ScheduleRuleset.from_constant_value('Constant', 1, schedule_types.fractional)) assert people is people assert people is not people_dup assert people == people_dup people_dup.people_per_area = 0.06 assert people != people_dup assert people != people_alt
def test_schedule_ruleset_equality(): """Test the equality of ScheduleRuleset 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)]) weekend_rule = ScheduleRule(saturday_office) weekend_rule.apply_weekend = True schedule = ScheduleRuleset('Office Occupancy', weekday_office, [weekend_rule], schedule_types.fractional) schedule_dup = schedule.duplicate() residential_schedule = ScheduleRuleset.from_daily_values( 'Residence Occupancy', [ 1, 1, 1, 1, 1, 1, 1, 0.5, 0, 0, 0, 0, 0, 0, 0, 0, 0.25, 0.5, 0.5, 0.5, 0.5, 1, 1, 1 ]) assert schedule is schedule assert schedule is not schedule_dup assert schedule == schedule_dup schedule_dup.schedule_rules[0].apply_friday = True assert schedule != schedule_dup assert schedule != residential_schedule
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_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_lighting_dict_methods(): """Test the to/from dict methods.""" weekday_office = ScheduleDay('Weekday Office Lighting', [0, 1, 0], [Time(0, 0), Time(9, 0), Time(17, 0)]) saturday_office = ScheduleDay('Saturday Office Lighting', [0, 0.25, 0], [Time(0, 0), Time(9, 0), Time(17, 0)]) weekend_rule = ScheduleRule(saturday_office) weekend_rule.apply_weekend = True schedule = ScheduleRuleset('Office Lighting', weekday_office, [weekend_rule], schedule_types.fractional) lighting = Lighting('Open Office Zone Lighting', 10, schedule) light_dict = lighting.to_dict() new_lighting = Lighting.from_dict(light_dict) assert new_lighting == lighting assert light_dict == new_lighting.to_dict()
def test_service_hot_water_dict_methods(): """Test the to/from dict methods.""" weekday_office = ScheduleDay('Weekday Office Water Use', [0, 1, 0], [Time(0, 0), Time(9, 0), Time(17, 0)]) saturday_office = ScheduleDay('Saturday Office Water Use', [0, 0.25, 0], [Time(0, 0), Time(9, 0), Time(17, 0)]) weekend_rule = ScheduleRule(saturday_office) weekend_rule.apply_weekend = True schedule = ScheduleRuleset('Office Water Use', weekday_office, [weekend_rule], schedule_types.fractional) shw = ServiceHotWater('Open Office Zone Hot Water', 0.1, schedule) shw_dict = shw.to_dict() new_shw = ServiceHotWater.from_dict(shw_dict) assert new_shw == shw assert shw_dict == new_shw.to_dict()
def test_equipment_dict_methods(): """Test the to/from dict methods.""" weekday_office = ScheduleDay( 'Weekday Office Equip', [0, 1, 0], [Time(0, 0), Time(9, 0), Time(17, 0)]) saturday_office = ScheduleDay( 'Saturday Office Equip', [0, 0.25, 0], [Time(0, 0), Time(9, 0), Time(17, 0)]) weekend_rule = ScheduleRule(saturday_office) weekend_rule.apply_weekend = True schedule = ScheduleRuleset('Office Equip', weekday_office, [weekend_rule], schedule_types.fractional) equipment = ElectricEquipment('Open Office Zone Equip', 10, schedule) equip_dict = equipment.to_dict() new_equipment = ElectricEquipment.from_dict(equip_dict) assert new_equipment == equipment assert equip_dict == new_equipment.to_dict()
def test_people_dict_methods(): """Test the to/from dict 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)]) weekend_rule = ScheduleRule(saturday_office) weekend_rule.apply_weekend = True occ_schedule = ScheduleRuleset('Office Occupancy', weekday_office, [weekend_rule], schedule_types.fractional) people = People('Open Office Zone People', 0.05, occ_schedule) ppl_dict = people.to_dict() new_people = People.from_dict(ppl_dict) assert new_people == people assert ppl_dict == new_people.to_dict()
def test_lighting_init_from_idf(): """Test the initialization of Lighting from_idf.""" weekday_office = ScheduleDay('Weekday Office Lighting', [0, 1, 0], [Time(0, 0), Time(9, 0), Time(17, 0)]) saturday_office = ScheduleDay('Saturday Office Lighting', [0, 0.25, 0], [Time(0, 0), Time(9, 0), Time(17, 0)]) weekend_rule = ScheduleRule(saturday_office) weekend_rule.apply_weekend = True schedule = ScheduleRuleset('Office Lighting', weekday_office, [weekend_rule], schedule_types.fractional) lighting = Lighting('Open Office Zone Lighting', 10, schedule) sched_dict = {schedule.identifier: schedule} zone_id = 'Test Zone' idf_str = lighting.to_idf(zone_id) rebuilt_lighting, rebuilt_zone_id = Lighting.from_idf(idf_str, sched_dict) assert lighting == rebuilt_lighting assert zone_id == rebuilt_zone_id
def test_people_init_from_idf(): """Test the initialization of People from_idf.""" 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)]) weekend_rule = ScheduleRule(saturday_office) weekend_rule.apply_weekend = True occ_schedule = ScheduleRuleset('Office Occupancy', weekday_office, [weekend_rule], schedule_types.fractional) people = People('Open Office Zone People', 0.05, occ_schedule) sched_dict = {occ_schedule.identifier: occ_schedule} zone_id = 'Test Zone' idf_str = people.to_idf(zone_id) rebuilt_people, rebuilt_zone_id = People.from_idf(idf_str, sched_dict) assert people == rebuilt_people assert zone_id == rebuilt_zone_id
def test_equipment_init_from_idf(): """Test the initialization of ElectricEquipment from_idf.""" weekday_office = ScheduleDay( 'Weekday Office Equip', [0, 1, 0], [Time(0, 0), Time(9, 0), Time(17, 0)]) saturday_office = ScheduleDay( 'Saturday Office Equip', [0, 0.25, 0], [Time(0, 0), Time(9, 0), Time(17, 0)]) weekend_rule = ScheduleRule(saturday_office) weekend_rule.apply_weekend = True schedule = ScheduleRuleset('Office Equip', weekday_office, [weekend_rule], schedule_types.fractional) equipment = ElectricEquipment('Open Office Zone Equip', 10, schedule) sched_dict = {schedule.name: schedule} zone_name = 'Test Zone' idf_str = equipment.to_idf(zone_name) rebuilt_equipment, rebuilt_zone_name = ElectricEquipment.from_idf( idf_str, sched_dict) assert equipment == rebuilt_equipment assert zone_name == rebuilt_zone_name
def test_schedule_ruleset_lockability(): """Test the lockability of ScheduleRuleset 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)]) weekend_rule = ScheduleRule(saturday_office) weekend_rule.apply_weekend = True schedule = ScheduleRuleset('Office Occupancy', weekday_office, [weekend_rule], schedule_types.fractional) schedule.schedule_rules[0].apply_monday = True schedule.lock() with pytest.raises(AttributeError): schedule.schedule_rules[0].apply_monday = False with pytest.raises(AttributeError): schedule.default_day_schedule.remove_value_by_time(Time(17, 0)) schedule.unlock() schedule.schedule_rules[0].apply_monday = False schedule.default_day_schedule.remove_value_by_time(Time(17, 0))
def test_service_hot_water_lockability(): """Test the lockability of ServiceHotWater objects.""" weekday_office = ScheduleDay('Weekday Office Water Use', [0, 1, 0], [Time(0, 0), Time(9, 0), Time(17, 0)]) saturday_office = ScheduleDay('Saturday Office Water Use', [0, 0.25, 0], [Time(0, 0), Time(9, 0), Time(17, 0)]) weekend_rule = ScheduleRule(saturday_office) weekend_rule.apply_weekend = True schedule = ScheduleRuleset('Office Water Use', weekday_office, [weekend_rule], schedule_types.fractional) shw = ServiceHotWater('Open Office Zone Hot Water', 0.1, schedule) shw.flow_per_area = 0.2 shw.lock() with pytest.raises(AttributeError): shw.flow_per_area = 0.25 with pytest.raises(AttributeError): shw.schedule.default_day_schedule.remove_value_by_time(Time(17, 0)) shw.unlock() shw.flow_per_area = 0.25 with pytest.raises(AttributeError): shw.schedule.default_day_schedule.remove_value_by_time(Time(17, 0))
def test_service_hot_water_equality(): """Test the equality of ServiceHotWater objects.""" weekday_office = ScheduleDay('Weekday Office Water Use', [0, 1, 0], [Time(0, 0), Time(9, 0), Time(17, 0)]) saturday_office = ScheduleDay('Saturday Office Water Use', [0, 0.25, 0], [Time(0, 0), Time(9, 0), Time(17, 0)]) weekend_rule = ScheduleRule(saturday_office) weekend_rule.apply_weekend = True schedule = ScheduleRuleset('Office Water Use', weekday_office, [weekend_rule], schedule_types.fractional) shw = ServiceHotWater('Open Office Zone Hot Water', 0.1, schedule) shw_dup = shw.duplicate() shw_alt = ServiceHotWater( 'Open Office Zone Hot Water', 0.1, ScheduleRuleset.from_constant_value('Constant', 1, schedule_types.fractional)) assert shw is shw assert shw is not shw_dup assert shw == shw_dup shw_dup.flow_per_area = 0.2 assert shw != shw_dup assert shw != shw_alt