diff --git a/README.md b/README.md index d01500c82..590b574ae 100644 --- a/README.md +++ b/README.md @@ -51,46 +51,51 @@ MIKE IO is tested extensively. See detailed test coverage report below: ``` ----------- coverage: platform linux, python 3.11.1-final-0 ----------- -Name Stmts Miss Cover ------------------------------------------------------ -mikeio/__init__.py 38 2 95% -mikeio/base.py 26 5 81% -mikeio/data_utils.py 111 5 95% -mikeio/dataarray.py 992 152 85% -mikeio/dataset.py 772 100 87% -mikeio/dfs0.py 299 24 92% -mikeio/dfs1.py 67 3 96% -mikeio/dfs2.py 188 8 96% -mikeio/dfs3.py 186 26 86% -mikeio/dfs.py 288 36 88% -mikeio/dfsu/__init__.py 3 0 100% -mikeio/dfsu/dfsu.py 592 56 91% -mikeio/dfsu/factory.py 41 2 95% -mikeio/dfsu/layered.py 180 20 89% -mikeio/dfsu/spectral.py 127 6 95% -mikeio/dfsutil.py 129 15 88% -mikeio/eum.py 1324 12 99% -mikeio/exceptions.py 25 8 68% -mikeio/generic.py 433 16 96% -mikeio/interpolation.py 60 5 92% -mikeio/pfs/__init__.py 4 0 100% -mikeio/pfs/pfsdocument.py 242 16 93% -mikeio/pfs/pfssection.py 220 9 96% -mikeio/spatial/FM_geometry.py 1118 102 91% -mikeio/spatial/FM_utils.py 293 30 90% -mikeio/spatial/__init__.py 0 0 100% -mikeio/spatial/crs.py 50 4 92% -mikeio/spatial/geometry.py 90 33 63% -mikeio/spatial/grid_geometry.py 558 42 92% -mikeio/spatial/utils.py 38 0 100% -mikeio/spectral.py 90 5 94% -mikeio/track.py 100 14 86% -mikeio/xyz.py 12 0 100% ------------------------------------------------------ -TOTAL 8696 756 91% - -=========== 697 passed, 3 warnings in 46.01s ======== +---------- coverage: platform linux, python 3.12.4-final-0 ----------- +Name Stmts Miss Cover +------------------------------------------------------------- +mikeio/__init__.py 31 3 90% +mikeio/_interpolation.py 68 6 91% +mikeio/_spectral.py 97 7 93% +mikeio/_time.py 29 1 97% +mikeio/_track.py 103 14 86% +mikeio/dataset/__init__.py 3 0 100% +mikeio/dataset/_data_plot.py 358 38 89% +mikeio/dataset/_data_utils.py 20 0 100% +mikeio/dataset/_dataarray.py 730 52 93% +mikeio/dataset/_dataset.py 734 57 92% +mikeio/dfs/__init__.py 5 0 100% +mikeio/dfs/_dfs0.py 198 13 93% +mikeio/dfs/_dfs1.py 58 2 97% +mikeio/dfs/_dfs2.py 132 3 98% +mikeio/dfs/_dfs3.py 147 9 94% +mikeio/dfs/_dfs.py 290 18 94% +mikeio/dfsu/__init__.py 6 0 100% +mikeio/dfsu/_common.py 36 1 97% +mikeio/dfsu/_dfsu.py 223 7 97% +mikeio/dfsu/_factory.py 20 1 95% +mikeio/dfsu/_layered.py 190 7 96% +mikeio/dfsu/_mesh.py 54 8 85% +mikeio/dfsu/_spectral.py 214 36 83% +mikeio/eum/__init__.py 2 0 100% +mikeio/eum/_eum.py 1334 9 99% +mikeio/exceptions.py 24 4 83% +mikeio/generic.py 451 17 96% +mikeio/pfs/__init__.py 8 0 100% +mikeio/pfs/_pfsdocument.py 248 13 95% +mikeio/pfs/_pfssection.py 223 9 96% +mikeio/spatial/_FM_geometry.py 521 24 95% +mikeio/spatial/_FM_geometry_layered.py 415 30 93% +mikeio/spatial/_FM_geometry_spectral.py 94 9 90% +mikeio/spatial/_FM_utils.py 275 22 92% +mikeio/spatial/__init__.py 6 0 100% +mikeio/spatial/_geometry.py 78 8 90% +mikeio/spatial/_grid_geometry.py 639 45 93% +mikeio/spatial/_utils.py 39 0 100% +mikeio/spatial/crs.py 51 5 90% +mikeio/xyz.py 14 0 100% +------------------------------------------------------------- +TOTAL 8168 478 94% ``` ## Cloud enabled diff --git a/docs/_quarto.yml b/docs/_quarto.yml index 7cb6179b6..0babb602d 100644 --- a/docs/_quarto.yml +++ b/docs/_quarto.yml @@ -109,6 +109,7 @@ quartodoc: - dataset._data_plot._DataArrayPlotterGrid2D - dataset._data_plot._DataArrayPlotterFM - dataset._data_plot._DataArrayPlotterFMVerticalProfile + - dataset._data_plot._DataArrayPlotterFMVerticalColumn - title: Geometry desc: "" contents: diff --git a/mikeio/dataset/_data_plot.py b/mikeio/dataset/_data_plot.py index f72d7f58e..a99416cda 100644 --- a/mikeio/dataset/_data_plot.py +++ b/mikeio/dataset/_data_plot.py @@ -563,13 +563,22 @@ class _DataArrayPlotterFMVerticalColumn(_DataArrayPlotter): Examples -------- - >>> ds = mikeio.read("oresund_sigma_z.dfsu") - >>> dsp = ds.sel(x=333934.1, y=6158101.5) - >>> da = dsp["Temperature"] - >>> dsp.plot() - >>> dsp.plot(extrapolate=False, marker='o') - >>> dsp.plot.pcolormesh() - >>> dsp.plot.hist() + ```{python} + import mikeio + ds = mikeio.read("../data/oresund_sigma_z.dfsu") + dsp = ds.sel(x=333934.1, y=6158101.5) + da = dsp["Temperature"] + da.plot() + ``` + ```{python} + da.plot(extrapolate=False, marker='o') + ``` + ```{python} + da.plot.pcolormesh() + ``` + ```{python} + da.plot.hist() + ``` """ def __call__( @@ -659,10 +668,14 @@ class _DataArrayPlotterFMVerticalProfile(_DataArrayPlotter): Examples -------- - >>> da = mikeio.read("oresund_vertical_slice.dfsu")["Temperature"] - >>> da.plot() - >>> da.plot.mesh() - >>> da.plot.hist() + ```{python} + import mikeio + da = mikeio.read("../data/oresund_vertical_slice.dfsu")["Temperature"] + da.plot() + ``` + ```{python} + da.plot.hist() + ``` """ def __call__( diff --git a/mikeio/dataset/_dataset.py b/mikeio/dataset/_dataset.py index 00e1b1974..1201e9b1e 100644 --- a/mikeio/dataset/_dataset.py +++ b/mikeio/dataset/_dataset.py @@ -1166,24 +1166,6 @@ def interp_like( # ============= Combine/concat =========== - def _append_items(self, other: "Dataset") -> "Dataset": - item_names = {item.name for item in self.items} - other_names = {item.name for item in other.items} - - overlap = other_names.intersection(item_names) - if len(overlap) != 0: - raise ValueError("Can not append items, names are not unique") - - if not np.all(self.time == other.time): - # if not: create common time? - raise ValueError("All timesteps must match") - - for key, value in other._data_vars.items(): - if key != "Z coordinate": - self[key] = value - - return self - @staticmethod def concat( datasets: Sequence["Dataset"], keep: Literal["last"] = "last" diff --git a/tests/test_dfsu_plot.py b/tests/test_dfsu_plot.py index 9687229ea..d42a4b1a6 100644 --- a/tests/test_dfsu_plot.py +++ b/tests/test_dfsu_plot.py @@ -139,3 +139,36 @@ def test_plot_non_utm_file(): ds = mikeio.read("tests/testdata/FakeLake_NONUTM.dfsu") da = ds[0] da.plot() + + +def test_plot_timeseries(): + ds = mikeio.read("tests/testdata/HD2D.dfsu") + + # just make sure it runs + ds["Surface elevation"].isel(element=0).plot.line() + ds["Surface elevation"].isel(time=-1).plot.line() + + +def test_plot_vertical_transect(): + ds = mikeio.read("tests/testdata/oresund_sigma_z.dfsu") + + dsp = ds.sel(x=333934.1, y=6158101.5) + da = dsp["Temperature"] + da.plot.pcolormesh() + + +def test_plot_point_spectrum(): + # directional spectra + da = mikeio.read("tests/testdata/line_dir_spectra.dfsu")[0] + da.isel(node=4).plot() + + # frequency spectra + da2 = mikeio.read("tests/testdata/line_freq_spectra.dfsu")[0] + da2_pt = da2.isel(node=4) + da2_pt.plot() + + # 2d spectra + da_pt = mikeio.read("tests/testdata/pt_spectra.dfsu")[0] + da_pt.plot.patch() + da_pt.plot.contour() + da_pt.plot.contourf() diff --git a/tests/test_geometry_grid.py b/tests/test_geometry_grid.py index 73035859a..68b6bfa01 100644 --- a/tests/test_geometry_grid.py +++ b/tests/test_geometry_grid.py @@ -3,7 +3,7 @@ import numpy as np import pytest from mikeio import Mesh -from mikeio import Grid2D, Grid1D +from mikeio import Grid2D, Grid1D, Grid3D from mikeio.spatial._FM_geometry import GeometryFM2D from mikeio.spatial import GeometryUndefined from mikeio.exceptions import OutsideModelDomainError @@ -413,3 +413,8 @@ def test_bad_projection_raises_error(): with pytest.raises(ValueError, match="proj"): Grid2D(nx=2, ny=2, dx=0.1, projection="Not a WKT projection string") + + +def test_grid3d_repr(): + g = Grid3D(nx=2, ny=2, nz=2, dx=1, dy=1, dz=1, projection="UTM-33") + assert "Grid3D" in repr(g)