def test_check_duplicate_modifier_identifiers(): """Test the check_duplicate_modifier_identifiers method.""" room = Room.from_box('Tiny_House_Zone', 5, 10, 3) high_ref_ceil = Plastic.from_single_reflectance('CustomModifier', 0.9) room[-1].properties.radiance.modifier = high_ref_ceil north_face = room[1] aperture_verts = [Point3D(4.5, 10, 1), Point3D(2.5, 10, 1), Point3D(2.5, 10, 2.5), Point3D(4.5, 10, 2.5)] aperture = Aperture('Front_Aperture', Face3D(aperture_verts)) aperture.is_operable = True triple_pane = Glass.from_single_transmittance('CustomTriplePane', 0.3) aperture.properties.radiance.modifier = triple_pane north_face.add_aperture(aperture) model = Model('Tiny_House', [room]) assert model.properties.radiance.check_duplicate_modifier_identifiers(False) == '' triple_pane.unlock() triple_pane.identifier = 'CustomModifier' triple_pane.lock() assert model.properties.radiance.check_duplicate_modifier_identifiers(False) != '' with pytest.raises(ValueError): model.properties.radiance.check_duplicate_modifier_identifiers(True)
def test_check_duplicate_construction_names(): """Test the check_duplicate_construction_names method.""" room = Room.from_box('Tiny House Zone', 5, 10, 3) stone = EnergyMaterial('Thick Stone', 0.3, 2.31, 2322, 832, 'Rough', 0.95, 0.75, 0.8) thermal_mass_constr = OpaqueConstruction('Custom Construction', [stone]) room[0].properties.energy.construction = thermal_mass_constr north_face = room[1] aperture_verts = [ Point3D(4.5, 10, 1), Point3D(2.5, 10, 1), Point3D(2.5, 10, 2.5), Point3D(4.5, 10, 2.5) ] aperture = Aperture('Front Aperture', Face3D(aperture_verts)) aperture.is_operable = True triple_pane = WindowConstruction( 'Custom Window Construction', [clear_glass, air_gap, clear_glass, air_gap, clear_glass]) aperture.properties.energy.construction = triple_pane north_face.add_aperture(aperture) model = Model('Tiny House', [room]) assert model.properties.energy.check_duplicate_construction_names(False) triple_pane.unlock() triple_pane.name = 'Custom Construction' triple_pane.lock() assert not model.properties.energy.check_duplicate_construction_names( False) with pytest.raises(ValueError): model.properties.energy.check_duplicate_construction_names(True)
def test_to_from_dict(): """Test the Model to_dict and from_dict method with a single zone model.""" room = Room.from_box('Tiny_House_Room', 5, 10, 3) dark_floor = Plastic.from_single_reflectance('DarkFloor', 0.1) room[0].properties.radiance.modifier = dark_floor south_face = room[3] south_face.apertures_by_ratio(0.4, 0.01) south_face.apertures[0].overhang(0.5, indoor=False) south_face.apertures[0].overhang(0.5, indoor=True) south_face.apertures[0].move_shades(Vector3D(0, 0, -0.5)) light_shelf_out = Plastic.from_single_reflectance('OutdoorLightShelf', 0.5) light_shelf_in = Plastic.from_single_reflectance('IndoorLightShelf', 0.7) south_face.apertures[0].shades[0].properties.radiance.modifier = light_shelf_out south_face.apertures[0].shades[1].properties.radiance.modifier = light_shelf_in north_face = room[1] door_verts = [Point3D(2, 10, 0.1), Point3D(1, 10, 0.1), Point3D(1, 10, 2.5), Point3D(2, 10, 2.5)] door = Door('FrontDoor', Face3D(door_verts)) north_face.add_door(door) aperture_verts = [Point3D(4.5, 10, 1), Point3D(2.5, 10, 1), Point3D(2.5, 10, 2.5), Point3D(4.5, 10, 2.5)] aperture = Aperture('FrontAperture', Face3D(aperture_verts)) aperture.is_operable = True triple_pane = Glass.from_single_transmittance('CustomTriplePane', 0.3) aperture.properties.radiance.modifier = triple_pane north_face.add_aperture(aperture) tree_canopy_geo = Face3D.from_regular_polygon( 6, 2, Plane(Vector3D(0, 0, 1), Point3D(5, -3, 4))) tree_canopy = Shade('TreeCanopy', tree_canopy_geo) tree_trans = Glass.from_single_transmittance('TreeTransmittance', 0.75) tree_canopy.properties.radiance.modifier = tree_trans model = Model('TinyHouse', [room], orphaned_shades=[tree_canopy]) model_dict = model.to_dict(included_prop=['radiance']) new_model = Model.from_dict(model_dict) assert model_dict == new_model.to_dict(included_prop=['radiance']) assert dark_floor in new_model.properties.radiance.modifiers assert new_model.rooms[0][0].properties.radiance.modifier == dark_floor assert new_model.rooms[0][3].apertures[0].indoor_shades[0].properties.radiance.modifier == light_shelf_in assert new_model.rooms[0][3].apertures[0].outdoor_shades[0].properties.radiance.modifier == light_shelf_out assert triple_pane in new_model.properties.radiance.modifiers assert new_model.rooms[0][1].apertures[0].properties.radiance.modifier == triple_pane assert new_model.rooms[0][1].apertures[0].is_operable assert len(new_model.orphaned_shades) == 1 assert new_model.rooms[0][0].type == face_types.floor assert new_model.rooms[0][1].type == face_types.wall assert isinstance(new_model.rooms[0][0].boundary_condition, Ground) assert isinstance(new_model.rooms[0][1].boundary_condition, Outdoors) assert new_model.orphaned_shades[0].properties.radiance.modifier == tree_trans
def test_to_from_dict(): """Test the Model to_dict and from_dict method with a single zone model.""" room = Room.from_box('Tiny House Zone', 5, 10, 3) room.properties.energy.program_type = office_program room.properties.energy.hvac = IdealAirSystem() stone = EnergyMaterial('Thick Stone', 0.3, 2.31, 2322, 832, 'Rough', 0.95, 0.75, 0.8) thermal_mass_constr = OpaqueConstruction('Thermal Mass Floor', [stone]) room[0].properties.energy.construction = thermal_mass_constr south_face = room[3] south_face.apertures_by_ratio(0.4, 0.01) south_face.apertures[0].overhang(0.5, indoor=False) south_face.apertures[0].overhang(0.5, indoor=True) south_face.apertures[0].move_shades(Vector3D(0, 0, -0.5)) light_shelf_out = ShadeConstruction('Outdoor Light Shelf', 0.5, 0.5) light_shelf_in = ShadeConstruction('Indoor Light Shelf', 0.7, 0.7) south_face.apertures[0].shades[ 0].properties.energy.construction = light_shelf_out south_face.apertures[0].shades[ 1].properties.energy.construction = light_shelf_in north_face = room[1] door_verts = [ Point3D(2, 10, 0.1), Point3D(1, 10, 0.1), Point3D(1, 10, 2.5), Point3D(2, 10, 2.5) ] door = Door('Front Door', Face3D(door_verts)) north_face.add_door(door) aperture_verts = [ Point3D(4.5, 10, 1), Point3D(2.5, 10, 1), Point3D(2.5, 10, 2.5), Point3D(4.5, 10, 2.5) ] aperture = Aperture('Front Aperture', Face3D(aperture_verts)) aperture.is_operable = True triple_pane = WindowConstruction( 'Triple Pane Window', [clear_glass, air_gap, clear_glass, air_gap, clear_glass]) aperture.properties.energy.construction = triple_pane north_face.add_aperture(aperture) tree_canopy_geo = Face3D.from_regular_polygon( 6, 2, Plane(Vector3D(0, 0, 1), Point3D(5, -3, 4))) tree_canopy = Shade('Tree Canopy', tree_canopy_geo) tree_trans = ScheduleRuleset.from_constant_value('Tree Transmittance', 0.75, schedule_types.fractional) tree_canopy.properties.energy.transmittance_schedule = tree_trans model = Model('Tiny House', [room], orphaned_shades=[tree_canopy]) model.north_angle = 15 model_dict = model.to_dict() new_model = Model.from_dict(model_dict) assert model_dict == new_model.to_dict() assert stone in new_model.properties.energy.materials assert thermal_mass_constr in new_model.properties.energy.constructions assert new_model.rooms[0][ 0].properties.energy.construction == thermal_mass_constr assert new_model.rooms[0][3].apertures[0].indoor_shades[ 0].properties.energy.construction == light_shelf_in assert new_model.rooms[0][3].apertures[0].outdoor_shades[ 0].properties.energy.construction == light_shelf_out assert triple_pane in new_model.properties.energy.constructions assert new_model.rooms[0][1].apertures[ 0].properties.energy.construction == triple_pane assert new_model.rooms[0][1].apertures[0].is_operable assert len(new_model.orphaned_shades) == 1 assert new_model.north_angle == 15 assert new_model.rooms[0][0].type == face_types.floor assert new_model.rooms[0][1].type == face_types.wall assert isinstance(new_model.rooms[0][0].boundary_condition, Ground) assert isinstance(new_model.rooms[0][1].boundary_condition, Outdoors) assert new_model.rooms[0].properties.energy.program_type == office_program assert len(new_model.properties.energy.schedule_type_limits) == 3 assert len(model.properties.energy.schedules) == 8 assert new_model.rooms[0].properties.energy.is_conditioned assert new_model.rooms[0].properties.energy.hvac == IdealAirSystem() assert new_model.orphaned_shades[ 0].properties.energy.transmittance_schedule == tree_trans