|
3 | 3 | """
|
4 | 4 | import pytest
|
5 | 5 |
|
6 |
| -from .. import Figure, which |
7 |
| -from ..datasets import load_earth_relief |
| 6 | +from .. import Figure, grdcut, which |
8 | 7 | from ..exceptions import GMTInvalidInput
|
9 |
| -from ..helpers import data_kind |
| 8 | +from ..helpers import GMTTempFile, data_kind |
| 9 | +from ..helpers.testing import check_figures_equal |
10 | 10 |
|
11 | 11 |
|
12 |
| -@pytest.fixture(scope="module", name="grid") |
13 |
| -def fixture_grid(): |
14 |
| - "Load the grid data from the sample earth_relief file" |
15 |
| - return load_earth_relief(registration="gridline").sel( |
16 |
| - lat=slice(-49, -42), lon=slice(-118, -107) |
17 |
| - ) |
| 12 | +@pytest.fixture(scope="module", name="region") |
| 13 | +def fixture_region(): |
| 14 | + "Test region as lonmin, lonmax, latmin, latmax" |
| 15 | + return (-116, -109, -47, -44) |
18 | 16 |
|
19 | 17 |
|
20 |
| -@pytest.mark.xfail( |
21 |
| - reason="Baseline image generated using Cartesian instead of Geographic coordinates" |
22 |
| -) |
23 |
| -@pytest.mark.mpl_image_compare |
24 |
| -def test_grdview_grid_dataarray(grid): |
| 18 | +@pytest.fixture(scope="module", name="gridfile") |
| 19 | +def fixture_gridfile(region): |
| 20 | + """ |
| 21 | + Load the NetCDF grid file from the sample earth_relief file |
| 22 | + """ |
| 23 | + with GMTTempFile(suffix=".nc") as tmpfile: |
| 24 | + grdcut(grid="@earth_relief_01d_g", region=region, outgrid=tmpfile.name) |
| 25 | + yield tmpfile.name |
| 26 | + |
| 27 | + |
| 28 | +@pytest.fixture(scope="module", name="xrgrid") |
| 29 | +def fixture_xrgrid(region): |
| 30 | + """ |
| 31 | + Load the xarray.DataArray grid from the sample earth_relief file |
| 32 | + """ |
| 33 | + return grdcut(grid="@earth_relief_01d_g", region=region) |
| 34 | + |
| 35 | + |
| 36 | +@check_figures_equal() |
| 37 | +def test_grdview_grid_dataarray(gridfile, xrgrid): |
25 | 38 | """
|
26 | 39 | Run grdview by passing in a grid as an xarray.DataArray.
|
27 | 40 | """
|
28 |
| - fig = Figure() |
29 |
| - fig.grdview(grid=grid) |
30 |
| - return fig |
| 41 | + fig_ref, fig_test = Figure(), Figure() |
| 42 | + fig_ref.grdview(grid=gridfile) |
| 43 | + fig_test.grdview(grid=xrgrid) |
| 44 | + return fig_ref, fig_test |
31 | 45 |
|
32 | 46 |
|
33 |
| -@pytest.mark.xfail( |
34 |
| - reason="Baseline image not updated to use earth relief grid in GMT 6.1.0", |
35 |
| -) |
36 | 47 | @pytest.mark.mpl_image_compare
|
37 |
| -def test_grdview_grid_file_with_region_subset(): |
| 48 | +def test_grdview_grid_file_with_region_subset(region): |
38 | 49 | """
|
39 | 50 | Run grdview by passing in a grid filename, and cropping it to a region.
|
40 | 51 | """
|
41 | 52 | gridfile = which("@earth_relief_01d_g", download="a")
|
42 | 53 |
|
43 | 54 | fig = Figure()
|
44 |
| - fig.grdview(grid=gridfile, region=[-116, -109, -47, -44]) |
| 55 | + fig.grdview(grid=gridfile, region=region) |
45 | 56 | return fig
|
46 | 57 |
|
47 | 58 |
|
48 |
| -def test_grdview_wrong_kind_of_grid(grid): |
| 59 | +def test_grdview_wrong_kind_of_grid(xrgrid): |
49 | 60 | """
|
50 | 61 | Run grdview using grid input that is not an xarray.DataArray or file.
|
51 | 62 | """
|
52 |
| - dataset = grid.to_dataset() # convert xarray.DataArray to xarray.Dataset |
| 63 | + dataset = xrgrid.to_dataset() # convert xarray.DataArray to xarray.Dataset |
53 | 64 | assert data_kind(dataset) == "matrix"
|
54 | 65 |
|
55 | 66 | fig = Figure()
|
56 | 67 | with pytest.raises(GMTInvalidInput):
|
57 | 68 | fig.grdview(grid=dataset)
|
58 | 69 |
|
59 | 70 |
|
60 |
| -@pytest.mark.xfail( |
61 |
| - reason="Baseline image generated using Cartesian instead of Geographic coordinates" |
62 |
| -) |
63 |
| -@pytest.mark.mpl_image_compare |
64 |
| -def test_grdview_with_perspective(grid): |
| 71 | +@check_figures_equal() |
| 72 | +def test_grdview_with_perspective(gridfile, xrgrid): |
65 | 73 | """
|
66 | 74 | Run grdview by passing in a grid and setting a perspective viewpoint with
|
67 | 75 | an azimuth from the SouthEast and an elevation angle 15 degrees from the
|
68 | 76 | z-plane.
|
69 | 77 | """
|
70 |
| - fig = Figure() |
71 |
| - fig.grdview(grid=grid, perspective=[135, 15]) |
72 |
| - return fig |
| 78 | + fig_ref, fig_test = Figure(), Figure() |
| 79 | + fig_ref.grdview(grid=gridfile, perspective=[135, 15]) |
| 80 | + fig_test.grdview(grid=xrgrid, perspective=[135, 15]) |
| 81 | + return fig_ref, fig_test |
73 | 82 |
|
74 | 83 |
|
75 |
| -@pytest.mark.xfail( |
76 |
| - reason="Baseline image not updated to use earth relief grid in GMT 6.1.0", |
77 |
| -) |
78 |
| -@pytest.mark.mpl_image_compare |
79 |
| -def test_grdview_with_perspective_and_zscale(grid): |
| 84 | +@check_figures_equal() |
| 85 | +def test_grdview_with_perspective_and_zscale(gridfile, xrgrid): |
80 | 86 | """
|
81 | 87 | Run grdview by passing in a grid and setting a perspective viewpoint with
|
82 | 88 | an azimuth from the SouthWest and an elevation angle 30 degrees from the
|
83 | 89 | z-plane, plus a z-axis scaling factor of 0.005.
|
84 | 90 | """
|
85 |
| - fig = Figure() |
86 |
| - fig.grdview(grid=grid, perspective=[225, 30], zscale=0.005) |
87 |
| - return fig |
| 91 | + fig_ref, fig_test = Figure(), Figure() |
| 92 | + kwargs = dict(perspective=[225, 30], zscale=0.005) |
| 93 | + fig_ref.grdview(grid=gridfile, **kwargs) |
| 94 | + fig_test.grdview(grid=xrgrid, **kwargs) |
| 95 | + return fig_ref, fig_test |
88 | 96 |
|
89 | 97 |
|
90 |
| -@pytest.mark.xfail( |
91 |
| - reason="Baseline image not updated to use earth relief grid in GMT 6.1.0", |
92 |
| -) |
93 |
| -@pytest.mark.mpl_image_compare |
94 |
| -def test_grdview_with_perspective_and_zsize(grid): |
| 98 | +@check_figures_equal() |
| 99 | +def test_grdview_with_perspective_and_zsize(gridfile, xrgrid): |
95 | 100 | """
|
96 | 101 | Run grdview by passing in a grid and setting a perspective viewpoint with
|
97 | 102 | an azimuth from the SouthWest and an elevation angle 30 degrees from the
|
98 | 103 | z-plane, plus a z-axis size of 10cm.
|
99 | 104 | """
|
100 |
| - fig = Figure() |
101 |
| - fig.grdview(grid=grid, perspective=[225, 30], zsize="10c") |
102 |
| - return fig |
| 105 | + fig_ref, fig_test = Figure(), Figure() |
| 106 | + kwargs = dict(perspective=[225, 30], zsize="10c") |
| 107 | + fig_ref.grdview(grid=gridfile, **kwargs) |
| 108 | + fig_test.grdview(grid=xrgrid, **kwargs) |
| 109 | + return fig_ref, fig_test |
103 | 110 |
|
104 | 111 |
|
105 |
| -@pytest.mark.xfail( |
106 |
| - reason="Baseline image not updated to use earth relief grid in GMT 6.1.0", |
107 |
| -) |
108 |
| -@pytest.mark.mpl_image_compare |
109 |
| -def test_grdview_with_cmap_for_image_plot(grid): |
| 112 | +@check_figures_equal() |
| 113 | +def test_grdview_with_cmap_for_image_plot(gridfile, xrgrid): |
110 | 114 | """
|
111 | 115 | Run grdview by passing in a grid and setting a colormap for producing an
|
112 | 116 | image plot.
|
113 | 117 | """
|
114 |
| - fig = Figure() |
115 |
| - fig.grdview(grid=grid, cmap="oleron", surftype="i") |
116 |
| - return fig |
| 118 | + fig_ref, fig_test = Figure(), Figure() |
| 119 | + kwargs = dict(cmap="oleron", surftype="i") |
| 120 | + fig_ref.grdview(grid=gridfile, **kwargs) |
| 121 | + fig_test.grdview(grid=xrgrid, **kwargs) |
| 122 | + return fig_ref, fig_test |
117 | 123 |
|
118 | 124 |
|
119 |
| -@pytest.mark.xfail( |
120 |
| - reason="Baseline image not updated to use earth relief grid in GMT 6.1.0", |
121 |
| -) |
122 |
| -@pytest.mark.mpl_image_compare |
123 |
| -def test_grdview_with_cmap_for_surface_monochrome_plot(grid): |
| 125 | +@check_figures_equal() |
| 126 | +def test_grdview_with_cmap_for_surface_monochrome_plot(gridfile, xrgrid): |
124 | 127 | """
|
125 | 128 | Run grdview by passing in a grid and setting a colormap for producing a
|
126 | 129 | surface monochrome plot.
|
127 | 130 | """
|
128 |
| - fig = Figure() |
129 |
| - fig.grdview(grid=grid, cmap="oleron", surftype="s+m") |
130 |
| - return fig |
| 131 | + fig_ref, fig_test = Figure(), Figure() |
| 132 | + kwargs = dict(cmap="oleron", surftype="s+m") |
| 133 | + fig_ref.grdview(grid=gridfile, **kwargs) |
| 134 | + fig_test.grdview(grid=xrgrid, **kwargs) |
| 135 | + return fig_ref, fig_test |
131 | 136 |
|
132 | 137 |
|
133 |
| -@pytest.mark.xfail( |
134 |
| - reason="Baseline image not updated to use earth relief grid in GMT 6.1.0", |
135 |
| -) |
136 |
| -@pytest.mark.mpl_image_compare |
137 |
| -def test_grdview_with_cmap_for_perspective_surface_plot(grid): |
| 138 | +@check_figures_equal() |
| 139 | +def test_grdview_with_cmap_for_perspective_surface_plot(gridfile, xrgrid): |
138 | 140 | """
|
139 | 141 | Run grdview by passing in a grid and setting a colormap for producing a
|
140 | 142 | surface plot with a 3D perspective viewpoint.
|
141 | 143 | """
|
142 |
| - fig = Figure() |
143 |
| - fig.grdview( |
144 |
| - grid=grid, cmap="oleron", surftype="s", perspective=[225, 30], zscale=0.005 |
145 |
| - ) |
146 |
| - return fig |
| 144 | + fig_ref, fig_test = Figure(), Figure() |
| 145 | + kwargs = dict(cmap="oleron", surftype="s", perspective=[225, 30], zscale=0.005) |
| 146 | + fig_ref.grdview(grid=gridfile, **kwargs) |
| 147 | + fig_test.grdview(grid=xrgrid, **kwargs) |
| 148 | + return fig_ref, fig_test |
147 | 149 |
|
148 | 150 |
|
149 |
| -@pytest.mark.xfail( |
150 |
| - reason="Baseline image not updated to use earth relief grid in GMT 6.1.0", |
151 |
| -) |
152 |
| -@pytest.mark.mpl_image_compare |
153 |
| -def test_grdview_on_a_plane(grid): |
| 151 | +@check_figures_equal() |
| 152 | +def test_grdview_on_a_plane(gridfile, xrgrid): |
154 | 153 | """
|
155 | 154 | Run grdview by passing in a grid and plotting it on a z-plane, while
|
156 | 155 | setting a 3D perspective viewpoint.
|
157 | 156 | """
|
158 |
| - fig = Figure() |
159 |
| - fig.grdview(grid=grid, plane=-4000, perspective=[225, 30], zscale=0.005) |
160 |
| - return fig |
| 157 | + fig_ref, fig_test = Figure(), Figure() |
| 158 | + kwargs = dict(plane=-4000, perspective=[225, 30], zscale=0.005) |
| 159 | + fig_ref.grdview(grid=gridfile, **kwargs) |
| 160 | + fig_test.grdview(grid=xrgrid, **kwargs) |
| 161 | + return fig_ref, fig_test |
161 | 162 |
|
162 | 163 |
|
163 |
| -@pytest.mark.xfail( |
164 |
| - reason="Baseline image not updated to use earth relief grid in GMT 6.1.0", |
165 |
| -) |
166 |
| -@pytest.mark.mpl_image_compare |
167 |
| -def test_grdview_on_a_plane_with_colored_frontal_facade(grid): |
| 164 | +@check_figures_equal() |
| 165 | +def test_grdview_on_a_plane_with_colored_frontal_facade(gridfile, xrgrid): |
168 | 166 | """
|
169 | 167 | Run grdview by passing in a grid and plotting it on a z-plane whose frontal
|
170 | 168 | facade is colored gray, while setting a 3D perspective viewpoint.
|
171 | 169 | """
|
172 |
| - fig = Figure() |
173 |
| - fig.grdview(grid=grid, plane="-4000+ggray", perspective=[225, 30], zscale=0.005) |
174 |
| - return fig |
| 170 | + fig_ref, fig_test = Figure(), Figure() |
| 171 | + kwargs = dict(plane="-4000+ggray", perspective=[225, 30], zscale=0.005) |
| 172 | + fig_ref.grdview(grid=gridfile, **kwargs) |
| 173 | + fig_test.grdview(grid=xrgrid, **kwargs) |
| 174 | + return fig_ref, fig_test |
175 | 175 |
|
176 | 176 |
|
177 |
| -@pytest.mark.xfail( |
178 |
| - reason="Baseline image not updated to use earth relief grid in GMT 6.1.0", |
179 |
| -) |
180 |
| -@pytest.mark.mpl_image_compare |
181 |
| -def test_grdview_with_perspective_and_zaxis_frame(grid): |
| 177 | +@check_figures_equal() |
| 178 | +def test_grdview_with_perspective_and_zaxis_frame(gridfile, xrgrid, region): |
182 | 179 | """
|
183 | 180 | Run grdview by passing in a grid and plotting an annotated vertical
|
184 |
| - z-axis frame. |
| 181 | + z-axis frame on a Transverse Mercator (T) projection. |
185 | 182 | """
|
186 |
| - fig = Figure() |
187 |
| - fig.grdview(grid=grid, perspective=[225, 30], zscale=0.005, frame="zaf") |
188 |
| - return fig |
| 183 | + fig_ref, fig_test = Figure(), Figure() |
| 184 | + projection = f"T{(region[0]+region[1])/2}/{abs((region[2]+region[3])/2)}" |
| 185 | + kwargs = dict( |
| 186 | + projection=projection, |
| 187 | + perspective=[225, 30], |
| 188 | + zscale=0.005, |
| 189 | + frame=["xaf", "yaf", "zaf"], |
| 190 | + ) |
| 191 | + fig_ref.grdview(grid=gridfile, **kwargs) |
| 192 | + fig_test.grdview(grid=xrgrid, **kwargs) |
| 193 | + return fig_ref, fig_test |
189 | 194 |
|
190 | 195 |
|
191 |
| -@pytest.mark.xfail( |
192 |
| - reason="Baseline image not updated to use earth relief grid in GMT 6.1.0", |
193 |
| -) |
194 |
| -@pytest.mark.mpl_image_compare |
195 |
| -def test_grdview_surface_plot_styled_with_contourpen(grid): |
| 196 | +@check_figures_equal() |
| 197 | +def test_grdview_surface_plot_styled_with_contourpen(gridfile, xrgrid): |
196 | 198 | """
|
197 | 199 | Run grdview by passing in a grid with styled contour lines plotted on top
|
198 | 200 | of a surface plot.
|
199 | 201 | """
|
200 |
| - fig = Figure() |
201 |
| - fig.grdview(grid=grid, cmap="relief", surftype="s", contourpen="0.5p,black,dash") |
202 |
| - return fig |
| 202 | + fig_ref, fig_test = Figure(), Figure() |
| 203 | + kwargs = dict(cmap="relief", surftype="s", contourpen="0.5p,black,dash") |
| 204 | + fig_ref.grdview(grid=gridfile, **kwargs) |
| 205 | + fig_test.grdview(grid=xrgrid, **kwargs) |
| 206 | + return fig_ref, fig_test |
203 | 207 |
|
204 | 208 |
|
205 |
| -@pytest.mark.xfail( |
206 |
| - reason="Baseline image not updated to use earth relief grid in GMT 6.1.0", |
207 |
| -) |
208 |
| -@pytest.mark.mpl_image_compare |
209 |
| -def test_grdview_surface_mesh_plot_styled_with_meshpen(grid): |
| 209 | +@check_figures_equal() |
| 210 | +def test_grdview_surface_mesh_plot_styled_with_meshpen(gridfile, xrgrid): |
210 | 211 | """
|
211 | 212 | Run grdview by passing in a grid with styled mesh lines plotted on top of a
|
212 | 213 | surface mesh plot.
|
213 | 214 | """
|
214 |
| - fig = Figure() |
215 |
| - fig.grdview(grid=grid, cmap="relief", surftype="sm", meshpen="0.5p,black,dash") |
216 |
| - return fig |
| 215 | + fig_ref, fig_test = Figure(), Figure() |
| 216 | + kwargs = dict(cmap="relief", surftype="sm", meshpen="0.5p,black,dash") |
| 217 | + fig_ref.grdview(grid=gridfile, **kwargs) |
| 218 | + fig_test.grdview(grid=xrgrid, **kwargs) |
| 219 | + return fig_ref, fig_test |
217 | 220 |
|
218 | 221 |
|
219 |
| -@pytest.mark.xfail( |
220 |
| - reason="Baseline image not updated to use earth relief grid in GMT 6.1.0", |
221 |
| -) |
222 |
| -@pytest.mark.mpl_image_compare |
223 |
| -def test_grdview_on_a_plane_styled_with_facadepen(grid): |
| 222 | +@check_figures_equal() |
| 223 | +def test_grdview_on_a_plane_styled_with_facadepen(gridfile, xrgrid): |
224 | 224 | """
|
225 | 225 | Run grdview by passing in a grid and plotting it on a z-plane with styled
|
226 | 226 | lines for the frontal facade.
|
227 | 227 | """
|
228 |
| - fig = Figure() |
229 |
| - fig.grdview( |
230 |
| - grid=grid, |
231 |
| - plane=-4000, |
232 |
| - perspective=[225, 30], |
233 |
| - zscale=0.005, |
234 |
| - facadepen="0.5p,blue,dash", |
| 228 | + fig_ref, fig_test = Figure(), Figure() |
| 229 | + kwargs = dict( |
| 230 | + plane=-4000, perspective=[225, 30], zscale=0.005, facadepen="0.5p,blue,dash" |
235 | 231 | )
|
236 |
| - return fig |
| 232 | + fig_ref.grdview(grid=gridfile, **kwargs) |
| 233 | + fig_test.grdview(grid=xrgrid, **kwargs) |
| 234 | + return fig_ref, fig_test |
237 | 235 |
|
238 | 236 |
|
239 |
| -@pytest.mark.xfail( |
240 |
| - reason="Baseline image not updated to use earth relief grid in GMT 6.1.0", |
241 |
| -) |
242 |
| -@pytest.mark.mpl_image_compare |
243 |
| -def test_grdview_drapegrid_dataarray(grid): |
| 237 | +@check_figures_equal() |
| 238 | +def test_grdview_drapegrid_dataarray(gridfile, xrgrid): |
244 | 239 | """
|
245 | 240 | Run grdview by passing in both a grid and drapegrid as an xarray.DataArray,
|
246 | 241 | setting a colormap for producing an image plot.
|
247 | 242 | """
|
248 |
| - drapegrid = 1.1 * grid |
| 243 | + drapegrid = 1.1 * xrgrid |
249 | 244 |
|
250 |
| - fig = Figure() |
251 |
| - fig.grdview(grid=grid, drapegrid=drapegrid, cmap="oleron", surftype="c") |
252 |
| - return fig |
| 245 | + fig_ref, fig_test = Figure(), Figure() |
| 246 | + fig_ref.grdview(grid=gridfile, drapegrid=drapegrid, cmap="oleron", surftype="c") |
| 247 | + fig_test.grdview(grid=xrgrid, drapegrid=drapegrid, cmap="oleron", surftype="c") |
| 248 | + return fig_ref, fig_test |
253 | 249 |
|
254 | 250 |
|
255 |
| -def test_grdview_wrong_kind_of_drapegrid(grid): |
| 251 | +def test_grdview_wrong_kind_of_drapegrid(xrgrid): |
256 | 252 | """
|
257 | 253 | Run grdview using drapegrid input that is not an xarray.DataArray or file.
|
258 | 254 | """
|
259 |
| - dataset = grid.to_dataset() # convert xarray.DataArray to xarray.Dataset |
| 255 | + dataset = xrgrid.to_dataset() # convert xarray.DataArray to xarray.Dataset |
260 | 256 | assert data_kind(dataset) == "matrix"
|
261 | 257 |
|
262 | 258 | fig = Figure()
|
263 | 259 | with pytest.raises(GMTInvalidInput):
|
264 |
| - fig.grdview(grid=grid, drapegrid=dataset) |
| 260 | + fig.grdview(grid=xrgrid, drapegrid=dataset) |
0 commit comments