Source code for honeybee_energy.lib.constructionsets
"""Collection of construction sets."""
from honeybee_energy.constructionset import ConstructionSet
from ._loadconstructionsets import _construction_sets, _construction_set_standards_dict
import honeybee_energy.lib.constructions as _c
# establish variables for the default construction sets used across the library
generic_construction_set = _construction_sets['Default Generic Construction Set']
# make lists of program types to look up items in the library
CONSTRUCTION_SETS = tuple(_construction_sets.keys()) + \
tuple(_construction_set_standards_dict.keys())
[docs]
def construction_set_by_identifier(construction_set_identifier):
"""Get a construction_set from the library given its identifier.
Args:
construction_set_identifier: A text string for the identifier of the
ConstructionSet.
"""
try:
return _construction_sets[construction_set_identifier]
except KeyError:
try: # search the extension data
con_set_dict = _construction_set_standards_dict[construction_set_identifier]
constrs = _constrs_from_set_dict(con_set_dict)
return ConstructionSet.from_dict_abridged(con_set_dict, constrs)
except KeyError: # construction is nowhere to be found; raise an error
raise ValueError(
'"{}" was not found in the construction set library.'.format(
construction_set_identifier))
def _constrs_from_set_dict(con_set_dict):
"""Get a dictionary of constructions used in a ConstructionSetAbridged dictionary.
"""
constrs = {}
for key in con_set_dict:
if isinstance(con_set_dict[key], dict):
sub_dict = con_set_dict[key]
for sub_key in sub_dict:
if sub_key != 'type':
try:
constrs[sub_dict[sub_key]] = \
_c.opaque_construction_by_identifier(sub_dict[sub_key])
except ValueError:
constrs[sub_dict[sub_key]] = \
_c.window_construction_by_identifier(sub_dict[sub_key])
elif key == 'shade_construction':
constrs[con_set_dict[key]] = \
_c.shade_construction_by_identifier(con_set_dict[key])
elif key == 'air_boundary_construction':
constrs[con_set_dict[key]] = \
_c.opaque_construction_by_identifier(con_set_dict[key])
return constrs
[docs]
def lib_dict_abridged_to_construction_set(con_set_dict, constructions):
"""Get a Python object of a ConstructionSet from an abridged dictionary.
When the sub-objects needed to create the construction set are not available
in the resources provided, the current standards library will be searched.
Args:
con_set_dict: An abridged dictionary of a Honeybee ConstructionSet.
constructions: Dictionary of all construction objects that might be used in the
construction set with the construction identifiers as the keys.
Returns:
A Python object derived from the input con_set_dict.
"""
for key in con_set_dict:
if isinstance(con_set_dict[key], dict):
sub_dict = con_set_dict[key]
for sub_key in sub_dict:
if sub_key == 'type' or sub_key in constructions:
continue
if sub_dict[sub_key] not in constructions:
try:
constructions[sub_dict[sub_key]] = \
_c.opaque_construction_by_identifier(sub_dict[sub_key])
except ValueError:
constructions[sub_dict[sub_key]] = \
_c.window_construction_by_identifier(sub_dict[sub_key])
elif key == 'shade_construction' and con_set_dict[key] not in constructions:
constructions[con_set_dict[key]] = \
_c.shade_construction_by_identifier(con_set_dict[key])
elif key == 'air_boundary_construction' \
and con_set_dict[key] not in constructions:
constructions[con_set_dict[key]] = \
_c.opaque_construction_by_identifier(con_set_dict[key])
return ConstructionSet.from_dict_abridged(con_set_dict, constructions)