Skip to content

Commit

Permalink
Merge pull request #1500 from pnnl/RCT/YJ/get_swh_uses_associated_wit…
Browse files Browse the repository at this point in the history
…h_each_building_segment
  • Loading branch information
yunjoonjung-PNNL authored Aug 20, 2024
2 parents 1189516 + b8b4656 commit ac0791d
Show file tree
Hide file tree
Showing 2 changed files with 93 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
from rct229.utils.jsonpath_utils import find_all


def get_swh_uses_associated_with_each_building_segment(
rmd: dict, building_segment_id: str
) -> list[str]:
"""
This function gets all the SWH uses connected to a building segment or an empty list if no service water heating uses are found in the building segment. This function is primarily to encapsulate getting service water heating uses in one function so that if a change is made in the schema as to how service water heating use is specified,
the RCT only needs to change in one place .
Parameters
----------
rmd: dict
RMD at RuleSetModelDescription level
building_segment_id: str
building segment id
Returns
-------
swh_uses_list: list
A list containing the ids of all service water heating uses associated with a building segment
"""

swh_uses_list = find_all(
f'$.buildings[*].building_segments[*][?(@.id="{building_segment_id}")].zones[*].spaces[*].service_water_heating_uses[*].id',
rmd,
)
return swh_uses_list
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
from rct229.rulesets.ashrae9012019.ruleset_functions.get_swh_uses_associated_with_each_building_segment import (
get_swh_uses_associated_with_each_building_segment,
)
from rct229.schema.schema_utils import quantify_rmd
from rct229.schema.validate import schema_validate_rmd

TEST_RMD = {
"id": "test_rmd",
"buildings": [
{
"id": "Building 1",
"building_open_schedule": "Required Building Schedule 1",
"building_segments": [
{
"id": "Building Segment 1",
"zones": [
{
"id": "Zone 1",
"spaces": [
{
"id": "Space 1",
"service_water_heating_uses": [
{"id": "service water heating uses 1"},
{"id": "service water heating uses 2"},
],
},
],
}
],
}
],
}
],
"type": "BASELINE_0",
}

TEST_RPD_FULL = {
"id": "229",
"ruleset_model_descriptions": [TEST_RMD],
"data_timestamp": "2024-02-12T09:00Z",
}

TEST_RMD = quantify_rmd(TEST_RPD_FULL)["ruleset_model_descriptions"][0]


def test__TEST_RPD__is_valid():
schema_validation_result = schema_validate_rmd(TEST_RPD_FULL)
assert schema_validation_result[
"passed"
], f"Schema error: {schema_validation_result['error']}"


def test__get_swh_uses_associated_with_each_building_segment__bldg_segment_ids_exist():
assert get_swh_uses_associated_with_each_building_segment(
TEST_RMD, "Building Segment 1"
) == ["service water heating uses 1", "service water heating uses 2"]


def test__get_swh_uses_associated_with_each_building_segment__bldg_segment_id_not_exist():
assert (
get_swh_uses_associated_with_each_building_segment(
TEST_RMD, "Building Segment 2"
)
== []
)

0 comments on commit ac0791d

Please sign in to comment.