Skip to content

Commit 0a52353

Browse files
committed
add test
1 parent 3f2afdb commit 0a52353

1 file changed

Lines changed: 66 additions & 31 deletions

File tree

test/test_cross_sections.py

Lines changed: 66 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import numpy as np
44
from pathlib import Path
55
import os
6+
import xarray as xr
67

78
import numpy.testing as nt
89

@@ -13,82 +14,89 @@
1314
quad_hex_node_data = current_path / 'meshfiles' / "ugrid" / "quad-hexagon" / 'random-node-data.nc'
1415
cube_sphere_grid = current_path / "meshfiles" / "ugrid" / "outCSne30" / "outCSne30.ug"
1516

17+
18+
csne8_grid = current_path / "meshfiles" / "scrip" / "ne30pg2" / "grid.nc"
19+
csne8_data = current_path / "meshfiles" / "scrip" / "ne30pg2" / "data.nc"
20+
21+
22+
23+
1624
from uxarray.grid.intersections import constant_lat_intersections_face_bounds
1725

1826

1927

2028

2129

22-
def test_constant_lat_cross_section_grid():
30+
def test_constant_lat_subset_grid():
2331
uxgrid = ux.open_grid(quad_hex_grid_path)
2432

25-
grid_top_two = uxgrid.cross_section.constant_latitude(lat=0.1)
33+
grid_top_two = uxgrid.subset.constant_latitude(lat=0.1)
2634
assert grid_top_two.n_face == 2
2735

28-
grid_bottom_two = uxgrid.cross_section.constant_latitude(lat=-0.1)
36+
grid_bottom_two = uxgrid.subset.constant_latitude(lat=-0.1)
2937
assert grid_bottom_two.n_face == 2
3038

31-
grid_all_four = uxgrid.cross_section.constant_latitude(lat=0.0)
39+
grid_all_four = uxgrid.subset.constant_latitude(lat=0.0)
3240
assert grid_all_four.n_face == 4
3341

3442
with pytest.raises(ValueError):
35-
uxgrid.cross_section.constant_latitude(lat=10.0)
43+
uxgrid.subset.constant_latitude(lat=10.0)
3644

37-
def test_constant_lon_cross_section_grid():
45+
def test_constant_lon_subset_grid():
3846
uxgrid = ux.open_grid(quad_hex_grid_path)
3947

40-
grid_left_two = uxgrid.cross_section.constant_longitude(lon=-0.1)
48+
grid_left_two = uxgrid.subset.constant_longitude(lon=-0.1)
4149
assert grid_left_two.n_face == 2
4250

43-
grid_right_two = uxgrid.cross_section.constant_longitude(lon=0.2)
51+
grid_right_two = uxgrid.subset.constant_longitude(lon=0.2)
4452
assert grid_right_two.n_face == 2
4553

4654
with pytest.raises(ValueError):
47-
uxgrid.cross_section.constant_longitude(lon=10.0)
55+
uxgrid.subset.constant_longitude(lon=10.0)
4856

49-
def test_constant_lat_cross_section_uxds():
57+
def test_constant_lat_subset_uxds():
5058
uxds = ux.open_dataset(quad_hex_grid_path, quad_hex_data_path)
5159
uxds.uxgrid.normalize_cartesian_coordinates()
5260

53-
da_top_two = uxds['t2m'].cross_section.constant_latitude(lat=0.1)
61+
da_top_two = uxds['t2m'].subset.constant_latitude(lat=0.1)
5462
np.testing.assert_array_equal(da_top_two.data, uxds['t2m'].isel(n_face=[1, 2]).data)
5563

56-
da_bottom_two = uxds['t2m'].cross_section.constant_latitude(lat=-0.1)
64+
da_bottom_two = uxds['t2m'].subset.constant_latitude(lat=-0.1)
5765
np.testing.assert_array_equal(da_bottom_two.data, uxds['t2m'].isel(n_face=[0, 3]).data)
5866

59-
da_all_four = uxds['t2m'].cross_section.constant_latitude(lat=0.0)
67+
da_all_four = uxds['t2m'].subset.constant_latitude(lat=0.0)
6068
np.testing.assert_array_equal(da_all_four.data, uxds['t2m'].data)
6169

6270
with pytest.raises(ValueError):
63-
uxds['t2m'].cross_section.constant_latitude(lat=10.0)
71+
uxds['t2m'].subset.constant_latitude(lat=10.0)
6472

65-
def test_constant_lon_cross_section_uxds():
73+
def test_constant_lon_subset_uxds():
6674
uxds = ux.open_dataset(quad_hex_grid_path, quad_hex_data_path)
6775
uxds.uxgrid.normalize_cartesian_coordinates()
6876

69-
da_left_two = uxds['t2m'].cross_section.constant_longitude(lon=-0.1)
77+
da_left_two = uxds['t2m'].subset.constant_longitude(lon=-0.1)
7078
np.testing.assert_array_equal(da_left_two.data, uxds['t2m'].isel(n_face=[0, 2]).data)
7179

72-
da_right_two = uxds['t2m'].cross_section.constant_longitude(lon=0.2)
80+
da_right_two = uxds['t2m'].subset.constant_longitude(lon=0.2)
7381
np.testing.assert_array_equal(da_right_two.data, uxds['t2m'].isel(n_face=[1, 3]).data)
7482

7583
with pytest.raises(ValueError):
76-
uxds['t2m'].cross_section.constant_longitude(lon=10.0)
84+
uxds['t2m'].subset.constant_longitude(lon=10.0)
7785

7886
def test_north_pole():
7987
uxgrid = ux.open_grid(cube_sphere_grid)
8088
lats = [89.85, 89.9, 89.95, 89.99]
8189

8290
for lat in lats:
83-
cross_grid = uxgrid.cross_section.constant_latitude(lat=lat)
91+
cross_grid = uxgrid.subset.constant_latitude(lat=lat)
8492
assert cross_grid.n_face == 4
8593

8694
def test_south_pole():
8795
uxgrid = ux.open_grid(cube_sphere_grid)
8896
lats = [-89.85, -89.9, -89.95, -89.99]
8997

9098
for lat in lats:
91-
cross_grid = uxgrid.cross_section.constant_latitude(lat=lat)
99+
cross_grid = uxgrid.subset.constant_latitude(lat=lat)
92100
assert cross_grid.n_face == 4
93101

94102
def test_constant_lat():
@@ -130,39 +138,39 @@ def test_const_lat_interval_da():
130138
uxds = ux.open_dataset(quad_hex_grid_path, quad_hex_data_path)
131139
uxds.uxgrid.normalize_cartesian_coordinates()
132140

133-
res = uxds['t2m'].cross_section.constant_latitude_interval(lats=(-10, 10))
141+
res = uxds['t2m'].subset.constant_latitude_interval(lats=(-10, 10))
134142

135143
assert len(res) == 4
136144

137145

138146
def test_const_lat_interval_grid():
139147
uxgrid = ux.open_grid(quad_hex_grid_path)
140148

141-
res = uxgrid.cross_section.constant_latitude_interval(lats=(-10, 10))
149+
res = uxgrid.subset.constant_latitude_interval(lats=(-10, 10))
142150

143151
assert res.n_face == 4
144152

145-
res, indices = uxgrid.cross_section.constant_latitude_interval(lats=(-10, 10), return_face_indices=True)
153+
res, indices = uxgrid.subset.constant_latitude_interval(lats=(-10, 10), return_face_indices=True)
146154

147155
assert len(indices) == 4
148156

149157
def test_const_lon_interva_da():
150158
uxds = ux.open_dataset(quad_hex_grid_path, quad_hex_data_path)
151159
uxds.uxgrid.normalize_cartesian_coordinates()
152160

153-
res = uxds['t2m'].cross_section.constant_longitude_interval(lons=(-10, 10))
161+
res = uxds['t2m'].subset.constant_longitude_interval(lons=(-10, 10))
154162

155163
assert len(res) == 4
156164

157165

158166
def test_const_lon_interval_grid():
159167
uxgrid = ux.open_grid(quad_hex_grid_path)
160168

161-
res = uxgrid.cross_section.constant_longitude_interval(lons=(-10, 10))
169+
res = uxgrid.subset.constant_longitude_interval(lons=(-10, 10))
162170

163171
assert res.n_face == 4
164172

165-
res, indices = uxgrid.cross_section.constant_longitude_interval(lons=(-10, 10), return_face_indices=True)
173+
res, indices = uxgrid.subset.constant_longitude_interval(lons=(-10, 10), return_face_indices=True)
166174

167175
assert len(indices) == 4
168176

@@ -185,22 +193,49 @@ def test_latitude_along_arc(self):
185193

186194

187195

188-
def test_double_cross_section():
196+
def test_double_subset():
189197
uxgrid = ux.open_grid(quad_hex_grid_path)
190198

191199
# construct edges
192-
sub_lat = uxgrid.cross_section.constant_latitude(0.0)
200+
sub_lat = uxgrid.subset.constant_latitude(0.0)
193201

194-
sub_lat_lon = sub_lat.cross_section.constant_longitude(0.0)
202+
sub_lat_lon = sub_lat.subset.constant_longitude(0.0)
195203

196204
assert "n_edge" not in sub_lat_lon._ds.dims
197205

198206
_ = uxgrid.face_edge_connectivity
199207
_ = uxgrid.edge_node_connectivity
200208
_ = uxgrid.edge_lon
201209

202-
sub_lat = uxgrid.cross_section.constant_latitude(0.0)
210+
sub_lat = uxgrid.subset.constant_latitude(0.0)
203211

204-
sub_lat_lon = sub_lat.cross_section.constant_longitude(0.0)
212+
sub_lat_lon = sub_lat.subset.constant_longitude(0.0)
205213

206214
assert "n_edge" in sub_lat_lon._ds.dims
215+
216+
217+
def test_cross_section():
218+
uxds = ux.open_dataset(csne8_grid, csne8_data)
219+
220+
# Tributary GCA
221+
ss_gca = uxds['RELHUM'].cross_section(start=(-45, -45), end=(45, 45))
222+
assert isinstance(ss_gca, xr.DataArray)
223+
224+
# Constant Latitude
225+
ss_clat = uxds['RELHUM'].cross_section(lat=45)
226+
assert isinstance(ss_clat, xr.DataArray)
227+
228+
# Constat Longitude
229+
ss_clon = uxds['RELHUM'].cross_section(lon=45)
230+
assert isinstance(ss_clon, xr.DataArray)
231+
232+
# Constat Longitude with increased samples
233+
ss_clon = uxds['RELHUM'].cross_section(lon=45, steps=3)
234+
assert isinstance(ss_clon, xr.DataArray)
235+
236+
237+
with pytest.raises(ValueError):
238+
_ = uxds['RELHUM'].cross_section(end=(45, 45))
239+
_ = uxds['RELHUM'].cross_section(start=(45, 45))
240+
_ = uxds['RELHUM'].cross_section(lon = 45, end=(45, 45))
241+
_ = uxds['RELHUM'].cross_section()

0 commit comments

Comments
 (0)