File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 44import pytest
55import os
66import xarray as xr
7+ import pandas as pd
78from pathlib import Path
89
910
@@ -38,6 +39,17 @@ def test_boundaries(resolution_level):
3839 # check for the correct number of boundary nodes
3940 assert (uxgrid .n_node == uxgrid .n_face + 2 )
4041
42+ @pytest .mark .parametrize ("pixels_only" , [True , False ])
43+ def test_time_dimension_roundtrip (pixels_only ):
44+ ds = xr .open_dataset (ds_path )
45+ dummy_time = pd .to_datetime (["2025-01-01T00:00:00" ])
46+ ds_time = ds .expand_dims (time = dummy_time )
47+ uxds = ux .UxDataset .from_healpix (ds_time , pixels_only = pixels_only )
48+
49+ # Ensure time dimension is preserved and that the conversion worked
50+ assert "time" in uxds .dims
51+ assert uxds .sizes ["time" ] == 1
52+
4153def test_dataset ():
4254 uxds = ux .UxDataset .from_healpix (ds_path )
4355
Original file line number Diff line number Diff line change @@ -44,21 +44,17 @@ def _map_dims_to_ugrid(
4444 # drop dimensions not present in the original dataset
4545 _source_dims_dict .pop (key )
4646
47- # only check edge dimension if it is present (to avoid overhead of computing connectivity)
48- if "n_edge" in grid ._ds .dims :
49- n_edge = grid ._ds .sizes ["n_edge" ]
50- else :
51- n_edge = None
52-
53- for dim in set (ds .dims ) ^ _source_dims_dict .keys ():
54- # obtain dimensions that were not parsed source_dims_dict and attempt to match to a grid element
55- if ds .sizes [dim ] == grid .n_face :
56- _source_dims_dict [dim ] = "n_face"
57- elif ds .sizes [dim ] == grid .n_node :
58- _source_dims_dict [dim ] = "n_node"
59- elif n_edge is not None :
60- if ds .sizes [dim ] == n_edge :
61- _source_dims_dict [dim ] = "n_edge"
47+ # build a reverse map
48+ size_to_name = {
49+ grid ._ds .sizes [name ]: name
50+ for name in ("n_face" , "n_node" , "n_edge" )
51+ if name in grid ._ds .dims
52+ }
53+
54+ for dim in set (ds .dims ) - _source_dims_dict .keys ():
55+ name = size_to_name .get (ds .sizes [dim ])
56+ if name :
57+ _source_dims_dict [dim ] = name
6258
6359 # rename dimensions to follow the UGRID conventions
6460 ds = ds .swap_dims (_source_dims_dict )
Original file line number Diff line number Diff line change @@ -817,6 +817,8 @@ def attrs(self) -> dict:
817817 @property
818818 def n_node (self ) -> int :
819819 """Total number of nodes."""
820+ if "face_node_connectivity" not in self ._ds :
821+ _ = self .face_node_connectivity
820822 return self ._ds .sizes ["n_node" ]
821823
822824 @property
You can’t perform that action at this time.
0 commit comments