From aeea98bae5e707d688fb14591cc4b42b716ee219 Mon Sep 17 00:00:00 2001 From: Wei Ji Date: Mon, 7 Sep 2020 11:50:35 +1200 Subject: [PATCH 1/8] Remove xfail on test_grdview_grid_file_with_region_subset which xpasses --- pygmt/tests/test_grdview.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/pygmt/tests/test_grdview.py b/pygmt/tests/test_grdview.py index 65af6e6eef3..d72103e5e10 100644 --- a/pygmt/tests/test_grdview.py +++ b/pygmt/tests/test_grdview.py @@ -30,9 +30,6 @@ def test_grdview_grid_dataarray(grid): return fig -@pytest.mark.xfail( - reason="Baseline image not updated to use earth relief grid in GMT 6.1.0", -) @pytest.mark.mpl_image_compare def test_grdview_grid_file_with_region_subset(): """ From 9b01e1e932601f5db561eae2de8a8c8694a996ec Mon Sep 17 00:00:00 2001 From: Wei Ji Date: Mon, 7 Sep 2020 13:05:21 +1200 Subject: [PATCH 2/8] Add region fixture and use check_figures_equal on two tests --- pygmt/tests/test_grdview.py | 39 ++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 20 deletions(-) diff --git a/pygmt/tests/test_grdview.py b/pygmt/tests/test_grdview.py index d72103e5e10..e80e55067b8 100644 --- a/pygmt/tests/test_grdview.py +++ b/pygmt/tests/test_grdview.py @@ -7,38 +7,41 @@ from ..datasets import load_earth_relief from ..exceptions import GMTInvalidInput from ..helpers import data_kind +from ..helpers.testing import check_figures_equal + + +@pytest.fixture(scope="module", name="region") +def fixture_region(): + "Test region as lonmin, lonmax, latmin, latmax" + return (-116, -109, -47, -44) @pytest.fixture(scope="module", name="grid") -def fixture_grid(): +def fixture_grid(region): "Load the grid data from the sample earth_relief file" return load_earth_relief(registration="gridline").sel( - lat=slice(-49, -42), lon=slice(-118, -107) + lat=slice(region[2], region[3]), lon=slice(region[0], region[1]) ) -@pytest.mark.xfail( - reason="Baseline image generated using Cartesian instead of Geographic coordinates" -) -@pytest.mark.mpl_image_compare -def test_grdview_grid_dataarray(grid): +@check_figures_equal() +def test_grdview_grid_dataarray(grid, region, fig_ref, fig_test): """ Run grdview by passing in a grid as an xarray.DataArray. """ - fig = Figure() - fig.grdview(grid=grid) - return fig + fig_ref.grdview(grid="@earth_relief_01d_g", region=region) + fig_test.grdview(grid=grid) @pytest.mark.mpl_image_compare -def test_grdview_grid_file_with_region_subset(): +def test_grdview_grid_file_with_region_subset(region): """ Run grdview by passing in a grid filename, and cropping it to a region. """ gridfile = which("@earth_relief_01d_g", download="a") fig = Figure() - fig.grdview(grid=gridfile, region=[-116, -109, -47, -44]) + fig.grdview(grid=gridfile, region=region) return fig @@ -54,19 +57,15 @@ def test_grdview_wrong_kind_of_grid(grid): fig.grdview(grid=dataset) -@pytest.mark.xfail( - reason="Baseline image generated using Cartesian instead of Geographic coordinates" -) -@pytest.mark.mpl_image_compare -def test_grdview_with_perspective(grid): +@check_figures_equal() +def test_grdview_with_perspective(grid, region, fig_ref, fig_test): """ Run grdview by passing in a grid and setting a perspective viewpoint with an azimuth from the SouthEast and an elevation angle 15 degrees from the z-plane. """ - fig = Figure() - fig.grdview(grid=grid, perspective=[135, 15]) - return fig + fig_ref.grdview(grid="@earth_relief_01d_g", region=region, perspective=[135, 15]) + fig_test.grdview(grid=grid, perspective=[135, 15]) @pytest.mark.xfail( From ac26993fb2a230bfa88357996048d6ea88fa3b1c Mon Sep 17 00:00:00 2001 From: Wei Ji Date: Mon, 7 Sep 2020 18:01:31 +1200 Subject: [PATCH 3/8] Refactor test to use new check_figures_equal syntax from #590 --- pygmt/tests/test_grdview.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/pygmt/tests/test_grdview.py b/pygmt/tests/test_grdview.py index e80e55067b8..c87fdce82fd 100644 --- a/pygmt/tests/test_grdview.py +++ b/pygmt/tests/test_grdview.py @@ -25,12 +25,15 @@ def fixture_grid(region): @check_figures_equal() -def test_grdview_grid_dataarray(grid, region, fig_ref, fig_test): +def test_grdview_grid_dataarray(grid, region): """ Run grdview by passing in a grid as an xarray.DataArray. """ + fig_ref = Figure() fig_ref.grdview(grid="@earth_relief_01d_g", region=region) + fig_test = Figure() fig_test.grdview(grid=grid) + return fig_ref, fig_test @pytest.mark.mpl_image_compare @@ -58,14 +61,17 @@ def test_grdview_wrong_kind_of_grid(grid): @check_figures_equal() -def test_grdview_with_perspective(grid, region, fig_ref, fig_test): +def test_grdview_with_perspective(grid, region): """ Run grdview by passing in a grid and setting a perspective viewpoint with an azimuth from the SouthEast and an elevation angle 15 degrees from the z-plane. """ + fig_ref = Figure() fig_ref.grdview(grid="@earth_relief_01d_g", region=region, perspective=[135, 15]) + fig_test = Figure() fig_test.grdview(grid=grid, perspective=[135, 15]) + return fig_ref, fig_test @pytest.mark.xfail( From cb7ff983ddb1b8838bea49fbf2ced9c6740d8532 Mon Sep 17 00:00:00 2001 From: Wei Ji Date: Mon, 7 Sep 2020 18:27:48 +1200 Subject: [PATCH 4/8] Use check_figures_equal on previously xfailing grdview tests --- pygmt/tests/test_grdview.py | 242 ++++++++++++++++++++++-------------- 1 file changed, 146 insertions(+), 96 deletions(-) diff --git a/pygmt/tests/test_grdview.py b/pygmt/tests/test_grdview.py index c87fdce82fd..f60f2be59ae 100644 --- a/pygmt/tests/test_grdview.py +++ b/pygmt/tests/test_grdview.py @@ -74,184 +74,234 @@ def test_grdview_with_perspective(grid, region): return fig_ref, fig_test -@pytest.mark.xfail( - reason="Baseline image not updated to use earth relief grid in GMT 6.1.0", -) -@pytest.mark.mpl_image_compare -def test_grdview_with_perspective_and_zscale(grid): +@check_figures_equal() +def test_grdview_with_perspective_and_zscale(grid, region): """ Run grdview by passing in a grid and setting a perspective viewpoint with an azimuth from the SouthWest and an elevation angle 30 degrees from the z-plane, plus a z-axis scaling factor of 0.005. """ - fig = Figure() - fig.grdview(grid=grid, perspective=[225, 30], zscale=0.005) - return fig + fig_ref = Figure() + fig_ref.grdview( + grid="@earth_relief_01d_g", region=region, perspective=[225, 30], zscale=0.005 + ) + fig_test = Figure() + fig_test.grdview(grid=grid, perspective=[225, 30], zscale=0.005) + return fig_ref, fig_test -@pytest.mark.xfail( - reason="Baseline image not updated to use earth relief grid in GMT 6.1.0", -) -@pytest.mark.mpl_image_compare -def test_grdview_with_perspective_and_zsize(grid): +@check_figures_equal() +def test_grdview_with_perspective_and_zsize(grid, region): """ Run grdview by passing in a grid and setting a perspective viewpoint with an azimuth from the SouthWest and an elevation angle 30 degrees from the z-plane, plus a z-axis size of 10cm. """ - fig = Figure() - fig.grdview(grid=grid, perspective=[225, 30], zsize="10c") - return fig + fig_ref = Figure() + fig_ref.grdview( + grid="@earth_relief_01d_g", region=region, perspective=[225, 30], zsize="10c" + ) + fig_test = Figure() + fig_test.grdview(grid=grid, perspective=[225, 30], zsize="10c") + return fig_ref, fig_test -@pytest.mark.xfail( - reason="Baseline image not updated to use earth relief grid in GMT 6.1.0", -) -@pytest.mark.mpl_image_compare -def test_grdview_with_cmap_for_image_plot(grid): +@check_figures_equal() +def test_grdview_with_cmap_for_image_plot(grid, region): """ Run grdview by passing in a grid and setting a colormap for producing an image plot. """ - fig = Figure() - fig.grdview(grid=grid, cmap="oleron", surftype="i") - return fig + fig_ref = Figure() + fig_ref.grdview( + grid="@earth_relief_01d_g", region=region, cmap="oleron", surftype="i" + ) + fig_test = Figure() + fig_test.grdview(grid=grid, cmap="oleron", surftype="i") + return fig_ref, fig_test -@pytest.mark.xfail( - reason="Baseline image not updated to use earth relief grid in GMT 6.1.0", -) -@pytest.mark.mpl_image_compare -def test_grdview_with_cmap_for_surface_monochrome_plot(grid): +@check_figures_equal() +def test_grdview_with_cmap_for_surface_monochrome_plot(grid, region): """ Run grdview by passing in a grid and setting a colormap for producing a surface monochrome plot. """ - fig = Figure() - fig.grdview(grid=grid, cmap="oleron", surftype="s+m") - return fig + fig_ref = Figure() + fig_ref.grdview( + grid="@earth_relief_01d_g", region=region, cmap="oleron", surftype="s+m" + ) + fig_test = Figure() + fig_test.grdview(grid=grid, cmap="oleron", surftype="s+m") + return fig_ref, fig_test -@pytest.mark.xfail( - reason="Baseline image not updated to use earth relief grid in GMT 6.1.0", -) -@pytest.mark.mpl_image_compare -def test_grdview_with_cmap_for_perspective_surface_plot(grid): +@check_figures_equal() +def test_grdview_with_cmap_for_perspective_surface_plot(grid, region): """ Run grdview by passing in a grid and setting a colormap for producing a surface plot with a 3D perspective viewpoint. """ - fig = Figure() - fig.grdview( + fig_ref = Figure() + fig_ref.grdview( + grid="@earth_relief_01d_g", + region=region, + cmap="oleron", + surftype="s", + perspective=[225, 30], + zscale=0.005, + ) + fig_test = Figure() + fig_test.grdview( grid=grid, cmap="oleron", surftype="s", perspective=[225, 30], zscale=0.005 ) - return fig + return fig_ref, fig_test -@pytest.mark.xfail( - reason="Baseline image not updated to use earth relief grid in GMT 6.1.0", -) -@pytest.mark.mpl_image_compare -def test_grdview_on_a_plane(grid): +@check_figures_equal() +def test_grdview_on_a_plane(grid, region): """ Run grdview by passing in a grid and plotting it on a z-plane, while setting a 3D perspective viewpoint. """ - fig = Figure() - fig.grdview(grid=grid, plane=-4000, perspective=[225, 30], zscale=0.005) - return fig + fig_ref = Figure() + fig_ref.grdview( + grid="@earth_relief_01d_g", + region=region, + plane=-4000, + perspective=[225, 30], + zscale=0.005, + ) + fig_test = Figure() + fig_test.grdview(grid=grid, plane=-4000, perspective=[225, 30], zscale=0.005) + return fig_ref, fig_test -@pytest.mark.xfail( - reason="Baseline image not updated to use earth relief grid in GMT 6.1.0", -) -@pytest.mark.mpl_image_compare -def test_grdview_on_a_plane_with_colored_frontal_facade(grid): +@check_figures_equal() +def test_grdview_on_a_plane_with_colored_frontal_facade(grid, region): """ Run grdview by passing in a grid and plotting it on a z-plane whose frontal facade is colored gray, while setting a 3D perspective viewpoint. """ - fig = Figure() - fig.grdview(grid=grid, plane="-4000+ggray", perspective=[225, 30], zscale=0.005) - return fig + fig_ref = Figure() + fig_ref.grdview( + grid="@earth_relief_01d_g", + region=region, + plane="-4000+ggray", + perspective=[225, 30], + zscale=0.005, + ) + fig_test = Figure() + fig_test.grdview( + grid=grid, plane="-4000+ggray", perspective=[225, 30], zscale=0.005 + ) + return fig_ref, fig_test -@pytest.mark.xfail( - reason="Baseline image not updated to use earth relief grid in GMT 6.1.0", -) -@pytest.mark.mpl_image_compare -def test_grdview_with_perspective_and_zaxis_frame(grid): +@check_figures_equal() +def test_grdview_with_perspective_and_zaxis_frame(grid, region): """ Run grdview by passing in a grid and plotting an annotated vertical z-axis frame. """ - fig = Figure() - fig.grdview(grid=grid, perspective=[225, 30], zscale=0.005, frame="zaf") - return fig + fig_ref = Figure() + fig_ref.grdview( + grid="@earth_relief_01d_g", + region=region, + perspective=[225, 30], + zscale=0.005, + frame="zaf", + ) + fig_test = Figure() + fig_test.grdview(grid=grid, perspective=[225, 30], zscale=0.005, frame="zaf") + return fig_ref, fig_test -@pytest.mark.xfail( - reason="Baseline image not updated to use earth relief grid in GMT 6.1.0", -) -@pytest.mark.mpl_image_compare -def test_grdview_surface_plot_styled_with_contourpen(grid): +@check_figures_equal() +def test_grdview_surface_plot_styled_with_contourpen(grid, region): """ Run grdview by passing in a grid with styled contour lines plotted on top of a surface plot. """ - fig = Figure() - fig.grdview(grid=grid, cmap="relief", surftype="s", contourpen="0.5p,black,dash") - return fig + fig_ref = Figure() + fig_ref.grdview( + grid="@earth_relief_01d_g", + region=region, + cmap="relief", + surftype="s", + contourpen="0.5p,black,dash", + ) + fig_test = Figure() + fig_test.grdview( + grid=grid, cmap="relief", surftype="s", contourpen="0.5p,black,dash" + ) + return fig_ref, fig_test -@pytest.mark.xfail( - reason="Baseline image not updated to use earth relief grid in GMT 6.1.0", -) -@pytest.mark.mpl_image_compare -def test_grdview_surface_mesh_plot_styled_with_meshpen(grid): +@check_figures_equal() +def test_grdview_surface_mesh_plot_styled_with_meshpen(grid, region): """ Run grdview by passing in a grid with styled mesh lines plotted on top of a surface mesh plot. """ - fig = Figure() - fig.grdview(grid=grid, cmap="relief", surftype="sm", meshpen="0.5p,black,dash") - return fig + fig_ref = Figure() + fig_ref.grdview( + grid="@earth_relief_01d_g", + region=region, + cmap="relief", + surftype="sm", + meshpen="0.5p,black,dash", + ) + fig_test = Figure() + fig_test.grdview(grid=grid, cmap="relief", surftype="sm", meshpen="0.5p,black,dash") + return fig_ref, fig_test -@pytest.mark.xfail( - reason="Baseline image not updated to use earth relief grid in GMT 6.1.0", -) -@pytest.mark.mpl_image_compare -def test_grdview_on_a_plane_styled_with_facadepen(grid): +@check_figures_equal() +def test_grdview_on_a_plane_styled_with_facadepen(grid, region): """ Run grdview by passing in a grid and plotting it on a z-plane with styled lines for the frontal facade. """ - fig = Figure() - fig.grdview( + fig_ref = Figure() + fig_ref.grdview( + grid="@earth_relief_01d_g", + region=region, + plane=-4000, + perspective=[225, 30], + zscale=0.005, + facadepen="0.5p,blue,dash", + ) + fig_test = Figure() + fig_test.grdview( grid=grid, plane=-4000, perspective=[225, 30], zscale=0.005, facadepen="0.5p,blue,dash", ) - return fig + return fig_ref, fig_test -@pytest.mark.xfail( - reason="Baseline image not updated to use earth relief grid in GMT 6.1.0", -) -@pytest.mark.mpl_image_compare -def test_grdview_drapegrid_dataarray(grid): +@check_figures_equal() +def test_grdview_drapegrid_dataarray(grid, region): """ Run grdview by passing in both a grid and drapegrid as an xarray.DataArray, setting a colormap for producing an image plot. """ drapegrid = 1.1 * grid - fig = Figure() - fig.grdview(grid=grid, drapegrid=drapegrid, cmap="oleron", surftype="c") - return fig + fig_ref = Figure() + fig_ref.grdview( + grid="@earth_relief_01d_g", + region=region, + drapegrid=drapegrid, + cmap="oleron", + surftype="c", + ) + fig_test = Figure() + fig_test.grdview(grid=grid, drapegrid=drapegrid, cmap="oleron", surftype="c") + return fig_ref, fig_test def test_grdview_wrong_kind_of_drapegrid(grid): From ba67c4fdca79f41e91c66e40246bf425bda8d296 Mon Sep 17 00:00:00 2001 From: Wei Ji Date: Mon, 7 Sep 2020 20:56:46 +1200 Subject: [PATCH 5/8] Refactor grdview test to use grdcut instead of load_earth_relief The xarray based slicing isn't as precise as grdcut, so some images were a few pixels off when plotted in 3D. --- pygmt/tests/test_grdview.py | 123 +++++++++++++----------------------- 1 file changed, 44 insertions(+), 79 deletions(-) diff --git a/pygmt/tests/test_grdview.py b/pygmt/tests/test_grdview.py index f60f2be59ae..8f50aeffdf3 100644 --- a/pygmt/tests/test_grdview.py +++ b/pygmt/tests/test_grdview.py @@ -3,10 +3,9 @@ """ import pytest -from .. import Figure, which -from ..datasets import load_earth_relief +from .. import Figure, grdcut, which from ..exceptions import GMTInvalidInput -from ..helpers import data_kind +from ..helpers import GMTTempFile, data_kind from ..helpers.testing import check_figures_equal @@ -16,21 +15,31 @@ def fixture_region(): return (-116, -109, -47, -44) +@pytest.fixture(scope="module", name="gridfile") +def fixture_gridfile(region): + """ + Load the NetCDF grid file from the sample earth_relief file + """ + with GMTTempFile(suffix=".nc") as tmpfile: + grdcut(grid="@earth_relief_01d_g", region=region, outgrid=tmpfile.name) + yield tmpfile.name + + @pytest.fixture(scope="module", name="grid") def fixture_grid(region): - "Load the grid data from the sample earth_relief file" - return load_earth_relief(registration="gridline").sel( - lat=slice(region[2], region[3]), lon=slice(region[0], region[1]) - ) + """ + Load the xarray.DataArray grid from the sample earth_relief file + """ + return grdcut(grid="@earth_relief_01d_g", region=region) @check_figures_equal() -def test_grdview_grid_dataarray(grid, region): +def test_grdview_grid_dataarray(gridfile, grid): """ Run grdview by passing in a grid as an xarray.DataArray. """ fig_ref = Figure() - fig_ref.grdview(grid="@earth_relief_01d_g", region=region) + fig_ref.grdview(grid=gridfile) fig_test = Figure() fig_test.grdview(grid=grid) return fig_ref, fig_test @@ -61,95 +70,82 @@ def test_grdview_wrong_kind_of_grid(grid): @check_figures_equal() -def test_grdview_with_perspective(grid, region): +def test_grdview_with_perspective(gridfile, grid): """ Run grdview by passing in a grid and setting a perspective viewpoint with an azimuth from the SouthEast and an elevation angle 15 degrees from the z-plane. """ fig_ref = Figure() - fig_ref.grdview(grid="@earth_relief_01d_g", region=region, perspective=[135, 15]) + fig_ref.grdview(grid=gridfile, perspective=[135, 15]) fig_test = Figure() fig_test.grdview(grid=grid, perspective=[135, 15]) return fig_ref, fig_test @check_figures_equal() -def test_grdview_with_perspective_and_zscale(grid, region): +def test_grdview_with_perspective_and_zscale(gridfile, grid): """ Run grdview by passing in a grid and setting a perspective viewpoint with an azimuth from the SouthWest and an elevation angle 30 degrees from the z-plane, plus a z-axis scaling factor of 0.005. """ fig_ref = Figure() - fig_ref.grdview( - grid="@earth_relief_01d_g", region=region, perspective=[225, 30], zscale=0.005 - ) + fig_ref.grdview(grid=gridfile, perspective=[225, 30], zscale=0.005) fig_test = Figure() fig_test.grdview(grid=grid, perspective=[225, 30], zscale=0.005) return fig_ref, fig_test @check_figures_equal() -def test_grdview_with_perspective_and_zsize(grid, region): +def test_grdview_with_perspective_and_zsize(gridfile, grid): """ Run grdview by passing in a grid and setting a perspective viewpoint with an azimuth from the SouthWest and an elevation angle 30 degrees from the z-plane, plus a z-axis size of 10cm. """ fig_ref = Figure() - fig_ref.grdview( - grid="@earth_relief_01d_g", region=region, perspective=[225, 30], zsize="10c" - ) + fig_ref.grdview(grid=gridfile, perspective=[225, 30], zsize="10c") fig_test = Figure() fig_test.grdview(grid=grid, perspective=[225, 30], zsize="10c") return fig_ref, fig_test @check_figures_equal() -def test_grdview_with_cmap_for_image_plot(grid, region): +def test_grdview_with_cmap_for_image_plot(gridfile, grid): """ Run grdview by passing in a grid and setting a colormap for producing an image plot. """ fig_ref = Figure() - fig_ref.grdview( - grid="@earth_relief_01d_g", region=region, cmap="oleron", surftype="i" - ) + fig_ref.grdview(grid=gridfile, cmap="oleron", surftype="i") fig_test = Figure() fig_test.grdview(grid=grid, cmap="oleron", surftype="i") return fig_ref, fig_test @check_figures_equal() -def test_grdview_with_cmap_for_surface_monochrome_plot(grid, region): +def test_grdview_with_cmap_for_surface_monochrome_plot(gridfile, grid): """ Run grdview by passing in a grid and setting a colormap for producing a surface monochrome plot. """ fig_ref = Figure() - fig_ref.grdview( - grid="@earth_relief_01d_g", region=region, cmap="oleron", surftype="s+m" - ) + fig_ref.grdview(grid=gridfile, cmap="oleron", surftype="s+m") fig_test = Figure() fig_test.grdview(grid=grid, cmap="oleron", surftype="s+m") return fig_ref, fig_test @check_figures_equal() -def test_grdview_with_cmap_for_perspective_surface_plot(grid, region): +def test_grdview_with_cmap_for_perspective_surface_plot(gridfile, grid): """ Run grdview by passing in a grid and setting a colormap for producing a surface plot with a 3D perspective viewpoint. """ fig_ref = Figure() fig_ref.grdview( - grid="@earth_relief_01d_g", - region=region, - cmap="oleron", - surftype="s", - perspective=[225, 30], - zscale=0.005, + grid=gridfile, cmap="oleron", surftype="s", perspective=[225, 30], zscale=0.005 ) fig_test = Figure() fig_test.grdview( @@ -159,37 +155,27 @@ def test_grdview_with_cmap_for_perspective_surface_plot(grid, region): @check_figures_equal() -def test_grdview_on_a_plane(grid, region): +def test_grdview_on_a_plane(gridfile, grid): """ Run grdview by passing in a grid and plotting it on a z-plane, while setting a 3D perspective viewpoint. """ fig_ref = Figure() - fig_ref.grdview( - grid="@earth_relief_01d_g", - region=region, - plane=-4000, - perspective=[225, 30], - zscale=0.005, - ) + fig_ref.grdview(grid=gridfile, plane=-4000, perspective=[225, 30], zscale=0.005) fig_test = Figure() fig_test.grdview(grid=grid, plane=-4000, perspective=[225, 30], zscale=0.005) return fig_ref, fig_test @check_figures_equal() -def test_grdview_on_a_plane_with_colored_frontal_facade(grid, region): +def test_grdview_on_a_plane_with_colored_frontal_facade(gridfile, grid): """ Run grdview by passing in a grid and plotting it on a z-plane whose frontal facade is colored gray, while setting a 3D perspective viewpoint. """ fig_ref = Figure() fig_ref.grdview( - grid="@earth_relief_01d_g", - region=region, - plane="-4000+ggray", - perspective=[225, 30], - zscale=0.005, + grid=gridfile, plane="-4000+ggray", perspective=[225, 30], zscale=0.005 ) fig_test = Figure() fig_test.grdview( @@ -199,37 +185,27 @@ def test_grdview_on_a_plane_with_colored_frontal_facade(grid, region): @check_figures_equal() -def test_grdview_with_perspective_and_zaxis_frame(grid, region): +def test_grdview_with_perspective_and_zaxis_frame(gridfile, grid): """ Run grdview by passing in a grid and plotting an annotated vertical z-axis frame. """ fig_ref = Figure() - fig_ref.grdview( - grid="@earth_relief_01d_g", - region=region, - perspective=[225, 30], - zscale=0.005, - frame="zaf", - ) + fig_ref.grdview(grid=gridfile, perspective=[225, 30], zscale=0.005, frame="zaf") fig_test = Figure() fig_test.grdview(grid=grid, perspective=[225, 30], zscale=0.005, frame="zaf") return fig_ref, fig_test @check_figures_equal() -def test_grdview_surface_plot_styled_with_contourpen(grid, region): +def test_grdview_surface_plot_styled_with_contourpen(gridfile, grid): """ Run grdview by passing in a grid with styled contour lines plotted on top of a surface plot. """ fig_ref = Figure() fig_ref.grdview( - grid="@earth_relief_01d_g", - region=region, - cmap="relief", - surftype="s", - contourpen="0.5p,black,dash", + grid=gridfile, cmap="relief", surftype="s", contourpen="0.5p,black,dash" ) fig_test = Figure() fig_test.grdview( @@ -239,18 +215,14 @@ def test_grdview_surface_plot_styled_with_contourpen(grid, region): @check_figures_equal() -def test_grdview_surface_mesh_plot_styled_with_meshpen(grid, region): +def test_grdview_surface_mesh_plot_styled_with_meshpen(gridfile, grid): """ Run grdview by passing in a grid with styled mesh lines plotted on top of a surface mesh plot. """ fig_ref = Figure() fig_ref.grdview( - grid="@earth_relief_01d_g", - region=region, - cmap="relief", - surftype="sm", - meshpen="0.5p,black,dash", + grid=gridfile, cmap="relief", surftype="sm", meshpen="0.5p,black,dash" ) fig_test = Figure() fig_test.grdview(grid=grid, cmap="relief", surftype="sm", meshpen="0.5p,black,dash") @@ -258,15 +230,14 @@ def test_grdview_surface_mesh_plot_styled_with_meshpen(grid, region): @check_figures_equal() -def test_grdview_on_a_plane_styled_with_facadepen(grid, region): +def test_grdview_on_a_plane_styled_with_facadepen(gridfile, grid): """ Run grdview by passing in a grid and plotting it on a z-plane with styled lines for the frontal facade. """ fig_ref = Figure() fig_ref.grdview( - grid="@earth_relief_01d_g", - region=region, + grid=gridfile, plane=-4000, perspective=[225, 30], zscale=0.005, @@ -284,7 +255,7 @@ def test_grdview_on_a_plane_styled_with_facadepen(grid, region): @check_figures_equal() -def test_grdview_drapegrid_dataarray(grid, region): +def test_grdview_drapegrid_dataarray(gridfile, grid): """ Run grdview by passing in both a grid and drapegrid as an xarray.DataArray, setting a colormap for producing an image plot. @@ -292,13 +263,7 @@ def test_grdview_drapegrid_dataarray(grid, region): drapegrid = 1.1 * grid fig_ref = Figure() - fig_ref.grdview( - grid="@earth_relief_01d_g", - region=region, - drapegrid=drapegrid, - cmap="oleron", - surftype="c", - ) + fig_ref.grdview(grid=gridfile, drapegrid=drapegrid, cmap="oleron", surftype="c") fig_test = Figure() fig_test.grdview(grid=grid, drapegrid=drapegrid, cmap="oleron", surftype="c") return fig_ref, fig_test From 08380a5f680e04c614fe638cd1a45f1e1e2e078c Mon Sep 17 00:00:00 2001 From: Wei Ji Date: Mon, 7 Sep 2020 23:45:55 +1200 Subject: [PATCH 6/8] Add result_images folder to gitignore and make clean list --- .gitignore | 1 + Makefile | 1 + 2 files changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 6e945270565..4c9e1fd1d05 100644 --- a/.gitignore +++ b/.gitignore @@ -11,6 +11,7 @@ MANIFEST .pytest_cache/ .ipynb_checkpoints/ .vscode/ +result_images/ tmp-test-dir-with-unique-name/ coverage.xml htmlcov diff --git a/Makefile b/Makefile index 3f643a7d2ad..82dd1d560aa 100644 --- a/Makefile +++ b/Makefile @@ -50,3 +50,4 @@ clean: rm -rvf build dist MANIFEST *.egg-info __pycache__ .coverage .cache htmlcov coverage.xml rm -rvf $(TESTDIR) rm -rvf baseline + rm -rvf result_images From 611d0a3050af87c71ba867852efa7ed8f88eb81b Mon Sep 17 00:00:00 2001 From: Wei Ji Date: Tue, 8 Sep 2020 10:01:06 +1200 Subject: [PATCH 7/8] Rename grid explicitly to xrgrid, and use kwargs to reduce code length --- pygmt/tests/test_grdview.py | 173 +++++++++++++++--------------------- 1 file changed, 73 insertions(+), 100 deletions(-) diff --git a/pygmt/tests/test_grdview.py b/pygmt/tests/test_grdview.py index 8f50aeffdf3..0b7f97be217 100644 --- a/pygmt/tests/test_grdview.py +++ b/pygmt/tests/test_grdview.py @@ -25,8 +25,8 @@ def fixture_gridfile(region): yield tmpfile.name -@pytest.fixture(scope="module", name="grid") -def fixture_grid(region): +@pytest.fixture(scope="module", name="xrgrid") +def fixture_xrgrid(region): """ Load the xarray.DataArray grid from the sample earth_relief file """ @@ -34,14 +34,13 @@ def fixture_grid(region): @check_figures_equal() -def test_grdview_grid_dataarray(gridfile, grid): +def test_grdview_grid_dataarray(gridfile, xrgrid): """ Run grdview by passing in a grid as an xarray.DataArray. """ - fig_ref = Figure() + fig_ref, fig_test = Figure(), Figure() fig_ref.grdview(grid=gridfile) - fig_test = Figure() - fig_test.grdview(grid=grid) + fig_test.grdview(grid=xrgrid) return fig_ref, fig_test @@ -57,11 +56,11 @@ def test_grdview_grid_file_with_region_subset(region): return fig -def test_grdview_wrong_kind_of_grid(grid): +def test_grdview_wrong_kind_of_grid(xrgrid): """ Run grdview using grid input that is not an xarray.DataArray or file. """ - dataset = grid.to_dataset() # convert xarray.DataArray to xarray.Dataset + dataset = xrgrid.to_dataset() # convert xarray.DataArray to xarray.Dataset assert data_kind(dataset) == "matrix" fig = Figure() @@ -70,212 +69,186 @@ def test_grdview_wrong_kind_of_grid(grid): @check_figures_equal() -def test_grdview_with_perspective(gridfile, grid): +def test_grdview_with_perspective(gridfile, xrgrid): """ Run grdview by passing in a grid and setting a perspective viewpoint with an azimuth from the SouthEast and an elevation angle 15 degrees from the z-plane. """ - fig_ref = Figure() + fig_ref, fig_test = Figure(), Figure() fig_ref.grdview(grid=gridfile, perspective=[135, 15]) - fig_test = Figure() - fig_test.grdview(grid=grid, perspective=[135, 15]) + fig_test.grdview(grid=xrgrid, perspective=[135, 15]) return fig_ref, fig_test @check_figures_equal() -def test_grdview_with_perspective_and_zscale(gridfile, grid): +def test_grdview_with_perspective_and_zscale(gridfile, xrgrid): """ Run grdview by passing in a grid and setting a perspective viewpoint with an azimuth from the SouthWest and an elevation angle 30 degrees from the z-plane, plus a z-axis scaling factor of 0.005. """ - fig_ref = Figure() - fig_ref.grdview(grid=gridfile, perspective=[225, 30], zscale=0.005) - fig_test = Figure() - fig_test.grdview(grid=grid, perspective=[225, 30], zscale=0.005) + fig_ref, fig_test = Figure(), Figure() + kwargs = dict(perspective=[225, 30], zscale=0.005) + fig_ref.grdview(grid=gridfile, **kwargs) + fig_test.grdview(grid=xrgrid, **kwargs) return fig_ref, fig_test @check_figures_equal() -def test_grdview_with_perspective_and_zsize(gridfile, grid): +def test_grdview_with_perspective_and_zsize(gridfile, xrgrid): """ Run grdview by passing in a grid and setting a perspective viewpoint with an azimuth from the SouthWest and an elevation angle 30 degrees from the z-plane, plus a z-axis size of 10cm. """ - fig_ref = Figure() - fig_ref.grdview(grid=gridfile, perspective=[225, 30], zsize="10c") - fig_test = Figure() - fig_test.grdview(grid=grid, perspective=[225, 30], zsize="10c") + fig_ref, fig_test = Figure(), Figure() + kwargs = dict(perspective=[225, 30], zsize="10c") + fig_ref.grdview(grid=gridfile, **kwargs) + fig_test.grdview(grid=xrgrid, **kwargs) return fig_ref, fig_test @check_figures_equal() -def test_grdview_with_cmap_for_image_plot(gridfile, grid): +def test_grdview_with_cmap_for_image_plot(gridfile, xrgrid): """ Run grdview by passing in a grid and setting a colormap for producing an image plot. """ - fig_ref = Figure() - fig_ref.grdview(grid=gridfile, cmap="oleron", surftype="i") - fig_test = Figure() - fig_test.grdview(grid=grid, cmap="oleron", surftype="i") + fig_ref, fig_test = Figure(), Figure() + kwargs = dict(cmap="oleron", surftype="i") + fig_ref.grdview(grid=gridfile, **kwargs) + fig_test.grdview(grid=xrgrid, **kwargs) return fig_ref, fig_test @check_figures_equal() -def test_grdview_with_cmap_for_surface_monochrome_plot(gridfile, grid): +def test_grdview_with_cmap_for_surface_monochrome_plot(gridfile, xrgrid): """ Run grdview by passing in a grid and setting a colormap for producing a surface monochrome plot. """ - fig_ref = Figure() - fig_ref.grdview(grid=gridfile, cmap="oleron", surftype="s+m") - fig_test = Figure() - fig_test.grdview(grid=grid, cmap="oleron", surftype="s+m") + fig_ref, fig_test = Figure(), Figure() + kwargs = dict(cmap="oleron", surftype="s+m") + fig_ref.grdview(grid=gridfile, **kwargs) + fig_test.grdview(grid=xrgrid, **kwargs) return fig_ref, fig_test @check_figures_equal() -def test_grdview_with_cmap_for_perspective_surface_plot(gridfile, grid): +def test_grdview_with_cmap_for_perspective_surface_plot(gridfile, xrgrid): """ Run grdview by passing in a grid and setting a colormap for producing a surface plot with a 3D perspective viewpoint. """ - fig_ref = Figure() - fig_ref.grdview( - grid=gridfile, cmap="oleron", surftype="s", perspective=[225, 30], zscale=0.005 - ) - fig_test = Figure() - fig_test.grdview( - grid=grid, cmap="oleron", surftype="s", perspective=[225, 30], zscale=0.005 - ) + fig_ref, fig_test = Figure(), Figure() + kwargs = dict(cmap="oleron", surftype="s", perspective=[225, 30], zscale=0.005) + fig_ref.grdview(grid=gridfile, **kwargs) + fig_test.grdview(grid=xrgrid, **kwargs) return fig_ref, fig_test @check_figures_equal() -def test_grdview_on_a_plane(gridfile, grid): +def test_grdview_on_a_plane(gridfile, xrgrid): """ Run grdview by passing in a grid and plotting it on a z-plane, while setting a 3D perspective viewpoint. """ - fig_ref = Figure() - fig_ref.grdview(grid=gridfile, plane=-4000, perspective=[225, 30], zscale=0.005) - fig_test = Figure() - fig_test.grdview(grid=grid, plane=-4000, perspective=[225, 30], zscale=0.005) + fig_ref, fig_test = Figure(), Figure() + kwargs = dict(plane=-4000, perspective=[225, 30], zscale=0.005) + fig_ref.grdview(grid=gridfile, **kwargs) + fig_test.grdview(grid=xrgrid, **kwargs) return fig_ref, fig_test @check_figures_equal() -def test_grdview_on_a_plane_with_colored_frontal_facade(gridfile, grid): +def test_grdview_on_a_plane_with_colored_frontal_facade(gridfile, xrgrid): """ Run grdview by passing in a grid and plotting it on a z-plane whose frontal facade is colored gray, while setting a 3D perspective viewpoint. """ - fig_ref = Figure() - fig_ref.grdview( - grid=gridfile, plane="-4000+ggray", perspective=[225, 30], zscale=0.005 - ) - fig_test = Figure() - fig_test.grdview( - grid=grid, plane="-4000+ggray", perspective=[225, 30], zscale=0.005 - ) + fig_ref, fig_test = Figure(), Figure() + kwargs = dict(plane="-4000+ggray", perspective=[225, 30], zscale=0.005) + fig_ref.grdview(grid=gridfile, **kwargs) + fig_test.grdview(grid=xrgrid, **kwargs) return fig_ref, fig_test @check_figures_equal() -def test_grdview_with_perspective_and_zaxis_frame(gridfile, grid): +def test_grdview_with_perspective_and_zaxis_frame(gridfile, xrgrid): """ Run grdview by passing in a grid and plotting an annotated vertical z-axis frame. """ - fig_ref = Figure() - fig_ref.grdview(grid=gridfile, perspective=[225, 30], zscale=0.005, frame="zaf") - fig_test = Figure() - fig_test.grdview(grid=grid, perspective=[225, 30], zscale=0.005, frame="zaf") + fig_ref, fig_test = Figure(), Figure() + kwargs = dict(perspective=[225, 30], zscale=0.005, frame="zaf") + fig_ref.grdview(grid=gridfile, **kwargs) + fig_test.grdview(grid=xrgrid, **kwargs) return fig_ref, fig_test @check_figures_equal() -def test_grdview_surface_plot_styled_with_contourpen(gridfile, grid): +def test_grdview_surface_plot_styled_with_contourpen(gridfile, xrgrid): """ Run grdview by passing in a grid with styled contour lines plotted on top of a surface plot. """ - fig_ref = Figure() - fig_ref.grdview( - grid=gridfile, cmap="relief", surftype="s", contourpen="0.5p,black,dash" - ) - fig_test = Figure() - fig_test.grdview( - grid=grid, cmap="relief", surftype="s", contourpen="0.5p,black,dash" - ) + fig_ref, fig_test = Figure(), Figure() + kwargs = dict(cmap="relief", surftype="s", contourpen="0.5p,black,dash") + fig_ref.grdview(grid=gridfile, **kwargs) + fig_test.grdview(grid=xrgrid, **kwargs) return fig_ref, fig_test @check_figures_equal() -def test_grdview_surface_mesh_plot_styled_with_meshpen(gridfile, grid): +def test_grdview_surface_mesh_plot_styled_with_meshpen(gridfile, xrgrid): """ Run grdview by passing in a grid with styled mesh lines plotted on top of a surface mesh plot. """ - fig_ref = Figure() - fig_ref.grdview( - grid=gridfile, cmap="relief", surftype="sm", meshpen="0.5p,black,dash" - ) - fig_test = Figure() - fig_test.grdview(grid=grid, cmap="relief", surftype="sm", meshpen="0.5p,black,dash") + fig_ref, fig_test = Figure(), Figure() + kwargs = dict(cmap="relief", surftype="sm", meshpen="0.5p,black,dash") + fig_ref.grdview(grid=gridfile, **kwargs) + fig_test.grdview(grid=xrgrid, **kwargs) return fig_ref, fig_test @check_figures_equal() -def test_grdview_on_a_plane_styled_with_facadepen(gridfile, grid): +def test_grdview_on_a_plane_styled_with_facadepen(gridfile, xrgrid): """ Run grdview by passing in a grid and plotting it on a z-plane with styled lines for the frontal facade. """ - fig_ref = Figure() - fig_ref.grdview( - grid=gridfile, - plane=-4000, - perspective=[225, 30], - zscale=0.005, - facadepen="0.5p,blue,dash", - ) - fig_test = Figure() - fig_test.grdview( - grid=grid, - plane=-4000, - perspective=[225, 30], - zscale=0.005, - facadepen="0.5p,blue,dash", + fig_ref, fig_test = Figure(), Figure() + kwargs = dict( + plane=-4000, perspective=[225, 30], zscale=0.005, facadepen="0.5p,blue,dash" ) + fig_ref.grdview(grid=gridfile, **kwargs) + fig_test.grdview(grid=xrgrid, **kwargs) return fig_ref, fig_test @check_figures_equal() -def test_grdview_drapegrid_dataarray(gridfile, grid): +def test_grdview_drapegrid_dataarray(gridfile, xrgrid): """ Run grdview by passing in both a grid and drapegrid as an xarray.DataArray, setting a colormap for producing an image plot. """ - drapegrid = 1.1 * grid + drapegrid = 1.1 * xrgrid - fig_ref = Figure() + fig_ref, fig_test = Figure(), Figure() fig_ref.grdview(grid=gridfile, drapegrid=drapegrid, cmap="oleron", surftype="c") - fig_test = Figure() - fig_test.grdview(grid=grid, drapegrid=drapegrid, cmap="oleron", surftype="c") + fig_test.grdview(grid=xrgrid, drapegrid=drapegrid, cmap="oleron", surftype="c") return fig_ref, fig_test -def test_grdview_wrong_kind_of_drapegrid(grid): +def test_grdview_wrong_kind_of_drapegrid(xrgrid): """ Run grdview using drapegrid input that is not an xarray.DataArray or file. """ - dataset = grid.to_dataset() # convert xarray.DataArray to xarray.Dataset + dataset = xrgrid.to_dataset() # convert xarray.DataArray to xarray.Dataset assert data_kind(dataset) == "matrix" fig = Figure() with pytest.raises(GMTInvalidInput): - fig.grdview(grid=grid, drapegrid=dataset) + fig.grdview(grid=xrgrid, drapegrid=dataset) From 79248c04b18407aefae54c3223424dbd6d0bca70 Mon Sep 17 00:00:00 2001 From: Wei Ji Date: Tue, 8 Sep 2020 10:55:09 +1200 Subject: [PATCH 8/8] Set a Transverse Mercator projection for zaxis_frame test Otherwise GMT (fig_ref) might plot double-lined x and y axis frame, while PyGMT (fig_test) plots a single-lined frame. --- pygmt/tests/test_grdview.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/pygmt/tests/test_grdview.py b/pygmt/tests/test_grdview.py index 0b7f97be217..f9166b57b90 100644 --- a/pygmt/tests/test_grdview.py +++ b/pygmt/tests/test_grdview.py @@ -175,13 +175,19 @@ def test_grdview_on_a_plane_with_colored_frontal_facade(gridfile, xrgrid): @check_figures_equal() -def test_grdview_with_perspective_and_zaxis_frame(gridfile, xrgrid): +def test_grdview_with_perspective_and_zaxis_frame(gridfile, xrgrid, region): """ Run grdview by passing in a grid and plotting an annotated vertical - z-axis frame. + z-axis frame on a Transverse Mercator (T) projection. """ fig_ref, fig_test = Figure(), Figure() - kwargs = dict(perspective=[225, 30], zscale=0.005, frame="zaf") + projection = f"T{(region[0]+region[1])/2}/{abs((region[2]+region[3])/2)}" + kwargs = dict( + projection=projection, + perspective=[225, 30], + zscale=0.005, + frame=["xaf", "yaf", "zaf"], + ) fig_ref.grdview(grid=gridfile, **kwargs) fig_test.grdview(grid=xrgrid, **kwargs) return fig_ref, fig_test