Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

customized water quality results interface #238

Merged
merged 1 commit into from
Aug 13, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion HISTORY.rst
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ History
2.3.1 (unreleased)
------------------

- Nothing changed yet.
- Add customized water quality results NetCDF interface.


2.3.0 (2024-08-07)
Expand Down
11 changes: 11 additions & 0 deletions tests/test_customized_gridresultadmin.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,17 @@ def grc_breach():
grc.close()


def test_overriden_grc_properties(grc: CustomizedResultAdmin):
assert grc.levees is None
assert grc.nodes_embedded is None
assert grc.cross_sections is None
assert grc.cells is None


def test_grc_areas(grc: CustomizedResultAdmin):
assert grc.areas == ["area1", "area2"]


def test_grc_root_node_ids(grc: CustomizedResultAdmin):
assert_array_equal(
grc.nodes.id,
Expand Down
Git LFS file not shown
3 changes: 3 additions & 0 deletions tests/test_files/water_quality/gridadmin.h5
Git LFS file not shown
3 changes: 3 additions & 0 deletions tests/test_files/water_quality/water_quality_results_3di.nc
Git LFS file not shown
137 changes: 137 additions & 0 deletions tests/test_water_quality_gridresultadmin.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,137 @@
from os.path import join

import numpy as np
import pytest
from numpy.testing import assert_array_equal

from threedigrid.admin.gridresultadmin import (
CustomizedWaterQualityResultAdmin,
GridH5WaterQualityResultAdmin,
)

from .conftest import test_file_dir


@pytest.fixture
def wqa():
return GridH5WaterQualityResultAdmin(
join(test_file_dir, "water_quality/gridadmin.h5"),
join(test_file_dir, "water_quality/water_quality_results_3di.nc"),
)


@pytest.fixture
def cwqa():
return CustomizedWaterQualityResultAdmin(
join(test_file_dir, "water_quality/gridadmin.h5"),
join(test_file_dir, "water_quality/customized_water_quality_results_3di.nc"),
)


def test_concentration_values(wqa):
assert_array_equal(
wqa.substance1.concentration[:, 1:], wqa.netcdf_file["substance1_1D"][:]
)
assert_array_equal(
wqa.substance2.concentration[:, 1:], wqa.netcdf_file["substance2_1D"][:]
)
assert_array_equal(
wqa.substance3.concentration[:, 1:], wqa.netcdf_file["substance3_1D"][:]
)


def test_substance_names(wqa):
assert wqa.substance1.name == "test1"
assert wqa.substance2.name == "test2"
assert wqa.substance3.name == "test3"


def test_units(wqa):
assert wqa.substance1.units == ""
assert wqa.substance2.units == "kg/m3"
assert wqa.substance3.units == "g/ml"


def test_overriden_properties(cwqa: CustomizedWaterQualityResultAdmin):
assert cwqa.nodes is None
assert cwqa.lines is None
assert cwqa.breaches is None
assert cwqa.pumps is None
assert cwqa.levees is None
assert cwqa.nodes_embedded is None
assert cwqa.cross_sections is None
assert cwqa.cells is None


def test_substance_names_customized(cwqa: CustomizedWaterQualityResultAdmin):
assert cwqa.substance1.name == "test1"
assert cwqa.substance2.name == "test2"
assert cwqa.substance3.name == "test3"
assert cwqa.area1.substance1.name == "test1"
assert cwqa.area1.substance2.name == "test2"
assert cwqa.area1.substance3.name == "test3"
assert cwqa.area2.substance1.name == "test1"
assert cwqa.area2.substance2.name == "test2"
assert cwqa.area2.substance3.name == "test3"


def test_substance_units_customized(cwqa: CustomizedWaterQualityResultAdmin):
assert cwqa.substance1.units == ""
assert cwqa.substance2.units == "kg/m3"
assert cwqa.substance3.units == "g/ml"
assert cwqa.area1.substance1.units == ""
assert cwqa.area1.substance2.units == "kg/m3"
assert cwqa.area1.substance3.units == "g/ml"
assert cwqa.area2.substance1.units == ""
assert cwqa.area2.substance2.units == "kg/m3"
assert cwqa.area2.substance3.units == "g/ml"


def test_areas_list(cwqa: CustomizedWaterQualityResultAdmin):
assert cwqa.areas == ["area1", "area2"]


def test_node_ids(cwqa: CustomizedWaterQualityResultAdmin):
assert_array_equal(cwqa.substance1.id, np.array([0, 1, 2, 3, 301, 303]))
assert_array_equal(cwqa.area1.substance2.id, np.array([0, 1, 3, 303]))
assert_array_equal(cwqa.area2.substance3.id, np.array([0, 2, 301, 303]))


def test_concentration_values_customized(cwqa: CustomizedWaterQualityResultAdmin):
cwqa.set_timeseries_chunk_size(20)
assert_array_equal(
cwqa.substance1.concentration[:, 1:], cwqa.netcdf_file["substance1_1D"][:20]
)
assert_array_equal(
cwqa.substance2.concentration[:, 1:], cwqa.netcdf_file["substance2_1D"][:20]
)
assert_array_equal(
cwqa.substance3.concentration[:, 1:], cwqa.netcdf_file["substance3_1D"][:20]
)

cwqa.set_timeseries_chunk_size(30)
assert_array_equal(
cwqa.area1.substance1.concentration[:, 1:],
np.take(cwqa.netcdf_file["substance1_1D"][:30], [0, 2, 4], axis=1),
)
assert_array_equal(
cwqa.area1.substance2.concentration[:, 1:],
np.take(cwqa.netcdf_file["substance2_1D"][:30], [0, 2, 4], axis=1),
)
assert_array_equal(
cwqa.area1.substance3.concentration[:, 1:],
np.take(cwqa.netcdf_file["substance3_1D"][:30], [0, 2, 4], axis=1),
)

assert_array_equal(
cwqa.area2.substance1.concentration[:, 1:],
np.take(cwqa.netcdf_file["substance1_1D"][:30], [1, 3, 4], axis=1),
)
assert_array_equal(
cwqa.area2.substance2.concentration[:, 1:],
np.take(cwqa.netcdf_file["substance2_1D"][:30], [1, 3, 4], axis=1),
)
assert_array_equal(
cwqa.area2.substance3.concentration[:, 1:],
np.take(cwqa.netcdf_file["substance3_1D"][:30], [1, 3, 4], axis=1),
)
Loading
Loading