honeybee-schema 1.59.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. honeybee_schema/__init__.py +1 -0
  2. honeybee_schema/__main__.py +4 -0
  3. honeybee_schema/_base.py +42 -0
  4. honeybee_schema/altnumber.py +18 -0
  5. honeybee_schema/boundarycondition.py +81 -0
  6. honeybee_schema/cli.py +115 -0
  7. honeybee_schema/comparison.py +208 -0
  8. honeybee_schema/doe2/__init__.py +0 -0
  9. honeybee_schema/doe2/properties.py +75 -0
  10. honeybee_schema/energy/__init__.py +0 -0
  11. honeybee_schema/energy/_base.py +64 -0
  12. honeybee_schema/energy/construction.py +324 -0
  13. honeybee_schema/energy/constructionset.py +359 -0
  14. honeybee_schema/energy/daylight.py +62 -0
  15. honeybee_schema/energy/designday.py +212 -0
  16. honeybee_schema/energy/generator.py +140 -0
  17. honeybee_schema/energy/global_constructionset.py +129 -0
  18. honeybee_schema/energy/hvac/__init__.py +0 -0
  19. honeybee_schema/energy/hvac/_template.py +38 -0
  20. honeybee_schema/energy/hvac/allair.py +257 -0
  21. honeybee_schema/energy/hvac/detailed.py +20 -0
  22. honeybee_schema/energy/hvac/doas.py +248 -0
  23. honeybee_schema/energy/hvac/heatcool.py +309 -0
  24. honeybee_schema/energy/hvac/idealair.py +107 -0
  25. honeybee_schema/energy/internalmass.py +25 -0
  26. honeybee_schema/energy/load.py +627 -0
  27. honeybee_schema/energy/material.py +949 -0
  28. honeybee_schema/energy/programtype.py +117 -0
  29. honeybee_schema/energy/properties.py +382 -0
  30. honeybee_schema/energy/schedule.py +350 -0
  31. honeybee_schema/energy/shw.py +53 -0
  32. honeybee_schema/energy/simulation.py +440 -0
  33. honeybee_schema/energy/ventcool.py +337 -0
  34. honeybee_schema/geometry.py +161 -0
  35. honeybee_schema/model.py +473 -0
  36. honeybee_schema/projectinfo.py +94 -0
  37. honeybee_schema/radiance/__init__.py +0 -0
  38. honeybee_schema/radiance/_base.py +22 -0
  39. honeybee_schema/radiance/asset.py +191 -0
  40. honeybee_schema/radiance/global_modifierset.py +92 -0
  41. honeybee_schema/radiance/modifier.py +373 -0
  42. honeybee_schema/radiance/modifierset.py +296 -0
  43. honeybee_schema/radiance/properties.py +149 -0
  44. honeybee_schema/radiance/state.py +69 -0
  45. honeybee_schema/updater/__init__.py +0 -0
  46. honeybee_schema/updater/version_1_39_12.py +14 -0
  47. honeybee_schema/updater/version_1_40_1.py +153 -0
  48. honeybee_schema/updater/version_1_43_1.py +18 -0
  49. honeybee_schema/updater/version_1_43_2.py +12 -0
  50. honeybee_schema/updater/version_1_43_5.py +11 -0
  51. honeybee_schema/validation.py +205 -0
  52. honeybee_schema-1.59.1.dist-info/METADATA +108 -0
  53. honeybee_schema-1.59.1.dist-info/RECORD +57 -0
  54. honeybee_schema-1.59.1.dist-info/WHEEL +5 -0
  55. honeybee_schema-1.59.1.dist-info/entry_points.txt +2 -0
  56. honeybee_schema-1.59.1.dist-info/licenses/LICENSE +23 -0
  57. honeybee_schema-1.59.1.dist-info/top_level.txt +1 -0
@@ -0,0 +1,324 @@
1
+ """Construction Schema"""
2
+ from pydantic import Field, constr
3
+ from typing import List, Union
4
+ from enum import Enum
5
+
6
+ from ._base import IDdEnergyBaseModel
7
+ from .material import EnergyMaterial, EnergyMaterialNoMass, EnergyMaterialVegetation, \
8
+ EnergyWindowMaterialGas, EnergyWindowMaterialGasCustom, \
9
+ EnergyWindowMaterialGasMixture, EnergyWindowMaterialSimpleGlazSys, \
10
+ EnergyWindowMaterialGlazing, EnergyWindowFrame, \
11
+ EnergyWindowMaterialShade, EnergyWindowMaterialBlind
12
+ from .schedule import ScheduleRuleset, ScheduleFixedInterval
13
+
14
+
15
+ class OpaqueConstructionAbridged(IDdEnergyBaseModel):
16
+ """Construction for opaque objects (Face, Shade, Door)."""
17
+
18
+ type: constr(regex='^OpaqueConstructionAbridged$') = 'OpaqueConstructionAbridged'
19
+
20
+ materials: List[constr(min_length=1, max_length=100)] = Field(
21
+ ...,
22
+ description='List of strings for opaque material identifiers. The order '
23
+ 'of the materials is from exterior to interior.',
24
+ min_items=1,
25
+ max_items=10
26
+ )
27
+
28
+
29
+ class OpaqueConstruction(OpaqueConstructionAbridged):
30
+ """Construction for opaque objects (Face, Shade, Door)."""
31
+
32
+ type: constr(regex='^OpaqueConstruction$') = 'OpaqueConstruction'
33
+
34
+ materials: List[
35
+ Union[EnergyMaterial, EnergyMaterialNoMass, EnergyMaterialVegetation]
36
+ ] = Field(
37
+ ...,
38
+ description='List of opaque material definitions. The order '
39
+ 'of the materials is from exterior to interior.',
40
+ min_items=1,
41
+ max_items=10
42
+ )
43
+
44
+
45
+ class WindowConstructionAbridged(IDdEnergyBaseModel):
46
+ """Construction for window objects (Aperture, Door)."""
47
+
48
+ type: constr(regex='^WindowConstructionAbridged$') = 'WindowConstructionAbridged'
49
+
50
+ materials: List[constr(min_length=1, max_length=100)] = Field(
51
+ ...,
52
+ description='List of strings for glazing or gas material identifiers. The '
53
+ 'order of the materials is from exterior to interior. If a SimpleGlazSys '
54
+ 'material is used, it must be the only material in the construction. '
55
+ 'For multi-layered constructions, adjacent glass layers must be separated '
56
+ 'by one and only one gas layer.',
57
+ min_items=1,
58
+ max_items=8
59
+ )
60
+
61
+ frame: str = Field(
62
+ None,
63
+ min_length=1,
64
+ max_length=100,
65
+ description='An optional identifier for a frame material that '
66
+ 'surrounds the window construction.'
67
+ )
68
+
69
+
70
+ class WindowConstruction(WindowConstructionAbridged):
71
+ """Construction for window objects (Aperture, Door)."""
72
+
73
+ type: constr(regex='^WindowConstruction$') = 'WindowConstruction'
74
+
75
+ materials: List[
76
+ Union[
77
+ EnergyWindowMaterialSimpleGlazSys, EnergyWindowMaterialGlazing,
78
+ EnergyWindowMaterialGas, EnergyWindowMaterialGasCustom,
79
+ EnergyWindowMaterialGasMixture
80
+ ]
81
+ ] = Field(
82
+ ...,
83
+ description='List of glazing and gas material definitions. The order '
84
+ 'of the materials is from exterior to interior. If a SimpleGlazSys '
85
+ 'material is used, it must be the only material in the construction. '
86
+ 'For multi-layered constructions, adjacent glass layers must be separated '
87
+ 'by one and only one gas layer.',
88
+ min_items=1,
89
+ max_items=8
90
+ )
91
+
92
+ frame: EnergyWindowFrame = Field(
93
+ None,
94
+ description='An optional window frame material for the frame that '
95
+ 'surrounds the window construction.'
96
+ )
97
+
98
+
99
+ class ShadeLocation(str, Enum):
100
+ """Choices for where a shade material is located in a window assembly."""
101
+ interior = 'Interior'
102
+ between = 'Between'
103
+ exterior = 'Exterior'
104
+
105
+
106
+ class ControlType(str, Enum):
107
+ """Choices for how the shading device is controlled."""
108
+ always_on = 'AlwaysOn'
109
+ on_if_high_solar_on_window = 'OnIfHighSolarOnWindow'
110
+ on_if_high_horizontal_solar = 'OnIfHighHorizontalSolar'
111
+ on_if_high_outdoor_air_temperature = 'OnIfHighOutdoorAirTemperature'
112
+ on_if_high_zone_air_temperature = 'OnIfHighZoneAirTemperature'
113
+ on_if_high_zone_cooling = 'OnIfHighZoneCooling'
114
+ on_night_if_low_outdoor_temp_and_off_day = 'OnNightIfLowOutdoorTempAndOffDay'
115
+ on_night_if_low_inside_temp_and_off_day = 'OnNightIfLowInsideTempAndOffDay'
116
+ on_night_if_heating_and_off_day = 'OnNightIfHeatingAndOffDay'
117
+
118
+
119
+ class WindowConstructionShadeAbridged(IDdEnergyBaseModel):
120
+ """Construction for window objects with an included shade layer."""
121
+
122
+ type: constr(regex='^WindowConstructionShadeAbridged$') = \
123
+ 'WindowConstructionShadeAbridged'
124
+
125
+ window_construction: WindowConstructionAbridged = Field(
126
+ ...,
127
+ description='A WindowConstructionAbridged object that serves as the '
128
+ '"switched off" version of the construction (aka. the "bare construction"). '
129
+ 'The shade_material and shade_location will be used to modify this '
130
+ 'starting construction.'
131
+ )
132
+
133
+ shade_material: str = Field(
134
+ ...,
135
+ min_length=1,
136
+ max_length=100,
137
+ description='Identifier of a An EnergyWindowMaterialShade or an '
138
+ 'EnergyWindowMaterialBlind that serves as the shading layer for this '
139
+ 'construction. This can also be an EnergyWindowMaterialGlazing, which '
140
+ 'will indicate that the WindowConstruction has a dynamically-controlled '
141
+ 'glass pane like an electrochromic window assembly.'
142
+ )
143
+
144
+ shade_location: ShadeLocation = Field(
145
+ ShadeLocation.interior,
146
+ description='Text to indicate where in the window assembly the shade_material '
147
+ 'is located. Note that the WindowConstruction must have at least one gas '
148
+ 'gap to use the "Between" option. Also note that, for a WindowConstruction '
149
+ 'with more than one gas gap, the "Between" option defaults to using the '
150
+ 'inner gap as this is the only option that EnergyPlus supports.'
151
+ )
152
+
153
+ control_type: ControlType = Field(
154
+ ControlType.always_on,
155
+ description='Text to indicate how the shading device is controlled, which '
156
+ 'determines when the shading is “on” or “off.”'
157
+ )
158
+
159
+ setpoint: float = Field(
160
+ None,
161
+ description='A number that corresponds to the specified control_type. '
162
+ 'This can be a value in (W/m2), (C) or (W) depending upon the control type.'
163
+ 'Note that this value cannot be None for any control type except "AlwaysOn."'
164
+ )
165
+
166
+ schedule: str = Field(
167
+ None,
168
+ min_length=1,
169
+ max_length=100,
170
+ description='An optional schedule identifier to be applied on top of the '
171
+ 'control_type. If None, the control_type will govern all behavior of '
172
+ 'the construction.'
173
+ )
174
+
175
+
176
+ class WindowConstructionShade(WindowConstructionShadeAbridged):
177
+ """Construction for window objects (Aperture, Door)."""
178
+
179
+ type: constr(regex='^WindowConstructionShade$') = 'WindowConstructionShade'
180
+
181
+ window_construction: WindowConstruction = Field(
182
+ ...,
183
+ description='A WindowConstruction object that serves as the "switched off" '
184
+ 'version of the construction (aka. the "bare construction"). '
185
+ 'The shade_material and shade_location will be used to modify this '
186
+ 'starting construction.'
187
+ )
188
+
189
+ shade_material: Union[
190
+ EnergyWindowMaterialShade, EnergyWindowMaterialBlind,
191
+ EnergyWindowMaterialGlazing
192
+ ] = Field(
193
+ ...,
194
+ description='Identifier of a An EnergyWindowMaterialShade or an '
195
+ 'EnergyWindowMaterialBlind that serves as the shading layer for this '
196
+ 'construction. This can also be an EnergyWindowMaterialGlazing, which '
197
+ 'will indicate that the WindowConstruction has a dynamically-controlled '
198
+ 'glass pane like an electrochromic window assembly.'
199
+ )
200
+
201
+ schedule: Union[ScheduleRuleset, ScheduleFixedInterval] = Field(
202
+ None,
203
+ description='An optional ScheduleRuleset or ScheduleFixedInterval to be '
204
+ 'applied on top of the control_type. If None, the control_type will govern '
205
+ 'all behavior of the construction.'
206
+ )
207
+
208
+
209
+ class WindowConstructionDynamicAbridged(IDdEnergyBaseModel):
210
+ """Construction for window objects with an included shade layer."""
211
+
212
+ type: constr(regex='^WindowConstructionDynamicAbridged$') = \
213
+ 'WindowConstructionDynamicAbridged'
214
+
215
+ constructions: List[WindowConstructionAbridged] = Field(
216
+ ...,
217
+ description='A list of WindowConstructionAbridged objects that define the '
218
+ 'various states that the dynamic window can assume.'
219
+ )
220
+
221
+ schedule: str = Field(
222
+ ...,
223
+ min_length=1,
224
+ max_length=100,
225
+ description='An identifier for a control schedule that dictates which '
226
+ 'constructions are active at given times throughout the simulation. The values '
227
+ 'of the schedule should be integers and range from 0 to one less then the '
228
+ 'number of constructions. Zero indicates that the first construction is active, '
229
+ 'one indicates that the second on is active, etc. The schedule type limits '
230
+ 'of this schedule should be "Control Level." If building custom schedule '
231
+ 'type limits that describe a particular range of states, the type limits '
232
+ 'should be "Discrete" and the unit type should be "Mode," "Control," or '
233
+ 'some other fractional unit.'
234
+ )
235
+
236
+
237
+ class WindowConstructionDynamic(IDdEnergyBaseModel):
238
+ """Construction for window objects with an included shade layer."""
239
+
240
+ type: constr(regex='^WindowConstructionDynamic$') = \
241
+ 'WindowConstructionDynamic'
242
+
243
+ constructions: List[WindowConstruction] = Field(
244
+ ...,
245
+ description='A list of WindowConstruction objects that define the '
246
+ 'various states that the dynamic window can assume.'
247
+ )
248
+
249
+ schedule: Union[ScheduleRuleset, ScheduleFixedInterval] = Field(
250
+ ...,
251
+ description='A control schedule that dictates which constructions '
252
+ 'are active at given times throughout the simulation. The values of the '
253
+ 'schedule should be integers and range from 0 to one less then the number '
254
+ 'of constructions. Zero indicates that the first construction is active, '
255
+ 'one indicates that the second on is active, etc. The schedule type limits '
256
+ 'of this schedule should be "Control Level." If building custom schedule '
257
+ 'type limits that describe a particular range of states, the type limits '
258
+ 'should be "Discrete" and the unit type should be "Mode," "Control," or '
259
+ 'some other fractional unit.'
260
+ )
261
+
262
+
263
+ class ShadeConstruction(IDdEnergyBaseModel):
264
+ """Construction for Shade objects."""
265
+
266
+ type: constr(regex='^ShadeConstruction$') = 'ShadeConstruction'
267
+
268
+ solar_reflectance: float = Field(
269
+ 0.2,
270
+ ge=0,
271
+ le=1,
272
+ description='A number for the solar reflectance of the construction.'
273
+ )
274
+
275
+ visible_reflectance: float = Field(
276
+ 0.2,
277
+ ge=0,
278
+ le=1,
279
+ description='A number for the visible reflectance of the construction.'
280
+ )
281
+
282
+ is_specular: bool = Field(
283
+ default=False,
284
+ description='Boolean to note whether the reflection off the shade is diffuse '
285
+ '(False) or specular (True). Set to True if the construction is '
286
+ 'representing a glass facade or a mirror material.'
287
+ )
288
+
289
+
290
+ class AirBoundaryConstructionAbridged(IDdEnergyBaseModel):
291
+ """Construction for Air Boundary objects."""
292
+
293
+ type: constr(regex='^AirBoundaryConstructionAbridged$') = \
294
+ 'AirBoundaryConstructionAbridged'
295
+
296
+ air_mixing_per_area: float = Field(
297
+ 0.1,
298
+ ge=0,
299
+ description='A positive number for the amount of air mixing between Rooms '
300
+ 'across the air boundary surface [m3/s-m2]. Default: 0.1 corresponds '
301
+ 'to average indoor air speeds of 0.1 m/s (roughly 20 fpm), which is '
302
+ 'typical of what would be induced by a HVAC system.'
303
+ )
304
+
305
+ air_mixing_schedule: str = Field(
306
+ default=None,
307
+ min_length=1,
308
+ max_length=100,
309
+ description='Identifier of a fractional schedule for the air mixing schedule '
310
+ 'across the construction. If unspecified, an Always On schedule will be assumed.'
311
+ )
312
+
313
+
314
+ class AirBoundaryConstruction(AirBoundaryConstructionAbridged):
315
+ """Construction for Air Boundary objects."""
316
+
317
+ type: constr(regex='^AirBoundaryConstruction$') = 'AirBoundaryConstruction'
318
+
319
+ air_mixing_schedule: Union[ScheduleRuleset, ScheduleFixedInterval] = Field(
320
+ default=None,
321
+ description='A fractional schedule as a ScheduleRuleset or '
322
+ 'ScheduleFixedInterval for the air mixing schedule across '
323
+ 'the construction. If unspecified, an Always On schedule will be assumed.'
324
+ )
@@ -0,0 +1,359 @@
1
+ """ConstructionSet Schema"""
2
+ from pydantic import Field, constr
3
+ from typing import Union
4
+
5
+ from .._base import NoExtraBaseModel
6
+ from ._base import IDdEnergyBaseModel
7
+ from .construction import OpaqueConstruction, WindowConstruction, ShadeConstruction, \
8
+ AirBoundaryConstruction, WindowConstructionShade, WindowConstructionDynamic
9
+
10
+
11
+ class _FaceSubSetAbridged(NoExtraBaseModel):
12
+ """A set of constructions for wall, floor, or roof assemblies."""
13
+
14
+ interior_construction: str = Field(
15
+ default=None,
16
+ min_length=1,
17
+ max_length=100,
18
+ description='Identifier for an OpaqueConstruction for faces with a Surface or '
19
+ 'Adiabatic boundary condition.'
20
+ )
21
+
22
+ exterior_construction: str = Field(
23
+ default=None,
24
+ min_length=1,
25
+ max_length=100,
26
+ description='Identifier for an OpaqueConstruction for faces with an Outdoors '
27
+ 'boundary condition.'
28
+ )
29
+
30
+ ground_construction: str = Field(
31
+ default=None,
32
+ min_length=1,
33
+ max_length=100,
34
+ description='Identifier for an OpaqueConstruction for faces with a Ground '
35
+ 'boundary condition.'
36
+ )
37
+
38
+
39
+ class WallConstructionSetAbridged(_FaceSubSetAbridged):
40
+ """A set of constructions for wall assemblies."""
41
+
42
+ type: constr(regex='^WallConstructionSetAbridged$') = \
43
+ 'WallConstructionSetAbridged'
44
+
45
+
46
+ class FloorConstructionSetAbridged(_FaceSubSetAbridged):
47
+ """A set of constructions for floor assemblies."""
48
+
49
+ type: constr(regex='^FloorConstructionSetAbridged$') = \
50
+ 'FloorConstructionSetAbridged'
51
+
52
+
53
+ class RoofCeilingConstructionSetAbridged(_FaceSubSetAbridged):
54
+ """A set of constructions for roof and ceiling assemblies."""
55
+
56
+ type: constr(regex='^RoofCeilingConstructionSetAbridged$') = \
57
+ 'RoofCeilingConstructionSetAbridged'
58
+
59
+
60
+ class _FaceSubSet(NoExtraBaseModel):
61
+ """A set of constructions for wall, floor, or roof assemblies."""
62
+
63
+ interior_construction: OpaqueConstruction = Field(
64
+ default=None,
65
+ description='An OpaqueConstruction for walls with a Surface or '
66
+ 'Adiabatic boundary condition.'
67
+ )
68
+
69
+ exterior_construction: OpaqueConstruction = Field(
70
+ default=None,
71
+ description='An OpaqueConstruction for walls with an Outdoors '
72
+ 'boundary condition.'
73
+ )
74
+
75
+ ground_construction: OpaqueConstruction = Field(
76
+ default=None,
77
+ description='An OpaqueConstruction for walls with a Ground '
78
+ 'boundary condition.'
79
+ )
80
+
81
+
82
+ class WallConstructionSet(_FaceSubSet):
83
+ """A set of constructions for wall assemblies."""
84
+
85
+ type: constr(regex='^WallConstructionSet$') = 'WallConstructionSet'
86
+
87
+
88
+ class FloorConstructionSet(_FaceSubSet):
89
+ """A set of constructions for floor assemblies."""
90
+
91
+ type: constr(regex='^FloorConstructionSet$') = 'FloorConstructionSet'
92
+
93
+
94
+ class RoofCeilingConstructionSet(_FaceSubSet):
95
+ """A set of constructions for roof and ceiling assemblies."""
96
+
97
+ type: constr(regex='^RoofCeilingConstructionSet$') = 'RoofCeilingConstructionSet'
98
+
99
+
100
+ class ApertureConstructionSetAbridged(NoExtraBaseModel):
101
+ """A set of constructions for aperture assemblies."""
102
+
103
+ type: constr(regex='^ApertureConstructionSetAbridged$') = \
104
+ 'ApertureConstructionSetAbridged'
105
+
106
+ interior_construction: str = Field(
107
+ default=None,
108
+ min_length=1,
109
+ max_length=100,
110
+ description='Identifier for a WindowConstruction for all apertures with a '
111
+ 'Surface boundary condition.'
112
+ )
113
+
114
+ window_construction: str = Field(
115
+ default=None,
116
+ min_length=1,
117
+ max_length=100,
118
+ description='Identifier for a WindowConstruction for apertures with an '
119
+ 'Outdoors boundary condition, False is_operable property, and a Wall '
120
+ 'face type for their parent face.'
121
+ )
122
+
123
+ skylight_construction: str = Field(
124
+ default=None,
125
+ min_length=1,
126
+ max_length=100,
127
+ description='Identifier for a WindowConstruction for apertures with a Outdoors '
128
+ 'boundary condition, False is_operable property, and a RoofCeiling or '
129
+ 'Floor face type for their parent face.'
130
+ )
131
+
132
+ operable_construction: str = Field(
133
+ default=None,
134
+ min_length=1,
135
+ max_length=100,
136
+ description='Identifier for a WindowConstruction for all apertures with an '
137
+ 'Outdoors boundary condition and True is_operable property.'
138
+ )
139
+
140
+
141
+ class ApertureConstructionSet(NoExtraBaseModel):
142
+ """A set of constructions for aperture assemblies."""
143
+
144
+ type: constr(regex='^ApertureConstructionSet$') = 'ApertureConstructionSet'
145
+
146
+ interior_construction: Union[
147
+ WindowConstruction, WindowConstructionShade, WindowConstructionDynamic
148
+ ] = Field(
149
+ default=None, description='A WindowConstruction for all apertures with a '
150
+ 'Surface boundary condition.'
151
+ )
152
+
153
+ window_construction: Union[
154
+ WindowConstruction, WindowConstructionShade, WindowConstructionDynamic
155
+ ] = Field(
156
+ default=None, description='A WindowConstruction for apertures with an '
157
+ 'Outdoors boundary condition, False is_operable property, and a Wall '
158
+ 'face type for their parent face.'
159
+ )
160
+
161
+ skylight_construction: Union[
162
+ WindowConstruction, WindowConstructionShade, WindowConstructionDynamic
163
+ ] = Field(
164
+ default=None,
165
+ description='A WindowConstruction for apertures with a Outdoors boundary '
166
+ 'condition, False is_operable property, and a RoofCeiling or '
167
+ 'Floor face type for their parent face.'
168
+ )
169
+
170
+ operable_construction: Union[
171
+ WindowConstruction, WindowConstructionShade, WindowConstructionDynamic
172
+ ] = Field(
173
+ default=None,
174
+ description='A WindowConstruction for all apertures with an '
175
+ 'Outdoors boundary condition and True is_operable property.'
176
+ )
177
+
178
+
179
+ class DoorConstructionSetAbridged(NoExtraBaseModel):
180
+ """A set of constructions for door assemblies."""
181
+
182
+ type: constr(regex='^DoorConstructionSetAbridged$') = 'DoorConstructionSetAbridged'
183
+
184
+ interior_construction: str = Field(
185
+ default=None,
186
+ min_length=1,
187
+ max_length=100,
188
+ description='Identifier for an OpaqueConstruction for all opaque doors with a '
189
+ 'Surface boundary condition.'
190
+ )
191
+
192
+ exterior_construction: str = Field(
193
+ default=None,
194
+ min_length=1,
195
+ max_length=100,
196
+ description='Identifier for an OpaqueConstruction for opaque doors with an '
197
+ 'Outdoors boundary condition and a Wall face type for their parent face.'
198
+ )
199
+
200
+ overhead_construction: str = Field(
201
+ default=None,
202
+ min_length=1,
203
+ max_length=100,
204
+ description='Identifier for an OpaqueConstruction for opaque doors with an '
205
+ 'Outdoors boundary condition and a RoofCeiling or Floor type for '
206
+ 'their parent face.'
207
+ )
208
+
209
+ exterior_glass_construction: str = Field(
210
+ default=None,
211
+ min_length=1,
212
+ max_length=100,
213
+ description='Identifier for a WindowConstruction for all glass doors with an '
214
+ 'Outdoors boundary condition.'
215
+ )
216
+
217
+ interior_glass_construction: str = Field(
218
+ default=None,
219
+ min_length=1,
220
+ max_length=100,
221
+ description='Identifier for a WindowConstruction for all glass doors with a '
222
+ 'Surface boundary condition.'
223
+ )
224
+
225
+
226
+ class DoorConstructionSet(NoExtraBaseModel):
227
+ """A set of constructions for door assemblies."""
228
+
229
+ type: constr(regex='^DoorConstructionSet$') = 'DoorConstructionSet'
230
+
231
+ interior_construction: OpaqueConstruction = Field(
232
+ default=None,
233
+ description='An OpaqueConstruction for all opaque doors with a '
234
+ 'Surface boundary condition.'
235
+ )
236
+
237
+ exterior_construction: OpaqueConstruction = Field(
238
+ default=None,
239
+ description='An OpaqueConstruction for opaque doors with an '
240
+ 'Outdoors boundary condition and a Wall face type for their parent face.'
241
+ )
242
+
243
+ overhead_construction: OpaqueConstruction = Field(
244
+ default=None,
245
+ description='An OpaqueConstruction for opaque doors with an '
246
+ 'Outdoors boundary condition and a RoofCeiling or Floor type for '
247
+ 'their parent face.'
248
+ )
249
+
250
+ exterior_glass_construction: Union[
251
+ WindowConstruction, WindowConstructionShade, WindowConstructionDynamic
252
+ ] = Field(
253
+ default=None,
254
+ description='A WindowConstruction for all glass doors with an '
255
+ 'Outdoors boundary condition.'
256
+ )
257
+
258
+ interior_glass_construction: Union[
259
+ WindowConstruction, WindowConstructionShade, WindowConstructionDynamic
260
+ ] = Field(
261
+ default=None,
262
+ description='A WindowConstruction for all glass doors with a '
263
+ 'Surface boundary condition.'
264
+ )
265
+
266
+
267
+ class ConstructionSetAbridged(IDdEnergyBaseModel):
268
+ """A set of constructions for different surface types and boundary conditions."""
269
+
270
+ type: constr(regex='^ConstructionSetAbridged$') = 'ConstructionSetAbridged'
271
+
272
+ wall_set: WallConstructionSetAbridged = Field(
273
+ default=None,
274
+ description='A WallConstructionSetAbridged object for this ConstructionSet.'
275
+ )
276
+
277
+ floor_set: FloorConstructionSetAbridged = Field(
278
+ default=None,
279
+ description='A FloorConstructionSetAbridged object for this ConstructionSet.'
280
+ )
281
+
282
+ roof_ceiling_set: RoofCeilingConstructionSetAbridged = Field(
283
+ default=None,
284
+ description='A RoofCeilingConstructionSetAbridged object for this '
285
+ 'ConstructionSet.'
286
+ )
287
+
288
+ aperture_set: ApertureConstructionSetAbridged = Field(
289
+ default=None,
290
+ description='A ApertureConstructionSetAbridged object for this ConstructionSet.'
291
+ )
292
+
293
+ door_set: DoorConstructionSetAbridged = Field(
294
+ default=None,
295
+ description='A DoorConstructionSetAbridged object for this ConstructionSet.'
296
+ )
297
+
298
+ shade_construction: str = Field(
299
+ default=None,
300
+ min_length=1,
301
+ max_length=100,
302
+ description='The identifier of a ShadeConstruction to set the reflectance '
303
+ 'properties of all outdoor shades of all objects to which this '
304
+ 'ConstructionSet is assigned.'
305
+ )
306
+
307
+ air_boundary_construction: str = Field(
308
+ default=None,
309
+ min_length=1,
310
+ max_length=100,
311
+ description='The identifier of an AirBoundaryConstruction or OpaqueConstruction '
312
+ 'to set the properties of Faces with an AirBoundary type.'
313
+ )
314
+
315
+
316
+ class ConstructionSet(ConstructionSetAbridged):
317
+ """A set of constructions for different surface types and boundary conditions."""
318
+
319
+ type: constr(regex='^ConstructionSet$') = 'ConstructionSet'
320
+
321
+ wall_set: WallConstructionSet = Field(
322
+ default=None,
323
+ description='A WallConstructionSet object for this ConstructionSet.'
324
+ )
325
+
326
+ floor_set: FloorConstructionSet = Field(
327
+ default=None,
328
+ description='A FloorConstructionSet object for this ConstructionSet.'
329
+ )
330
+
331
+ roof_ceiling_set: RoofCeilingConstructionSet = Field(
332
+ default=None,
333
+ description='A RoofCeilingConstructionSet object for this ConstructionSet.'
334
+ )
335
+
336
+ aperture_set: ApertureConstructionSet = Field(
337
+ default=None,
338
+ description='A ApertureConstructionSet object for this ConstructionSet.'
339
+ )
340
+
341
+ door_set: DoorConstructionSet = Field(
342
+ default=None,
343
+ description='A DoorConstructionSet object for this ConstructionSet.'
344
+ )
345
+
346
+ shade_construction: ShadeConstruction = Field(
347
+ default=None,
348
+ description='A ShadeConstruction to set the reflectance '
349
+ 'properties of all outdoor shades of all objects to which this '
350
+ 'ConstructionSet is assigned.'
351
+ )
352
+
353
+ air_boundary_construction: Union[
354
+ AirBoundaryConstruction, OpaqueConstruction
355
+ ] = Field(
356
+ default=None,
357
+ description='An AirBoundaryConstruction or OpaqueConstruction to set '
358
+ 'the properties of Faces with an AirBoundary type.'
359
+ )