From 6f78387d9538732bab4950087b619f7fa5450dec Mon Sep 17 00:00:00 2001 From: Dongdong Tian Date: Sat, 23 Mar 2024 09:33:08 +0800 Subject: [PATCH 1/3] Wrap GMT_Inquire_VirtualFile to get the family of virtualfiles --- pygmt/clib/session.py | 29 +++++++++++++++++++++++++++ pygmt/tests/test_clib_virtualfiles.py | 28 ++++++++++++++++++++++++++ 2 files changed, 57 insertions(+) diff --git a/pygmt/clib/session.py b/pygmt/clib/session.py index a9ea8c65f27..332cc4e7e25 100644 --- a/pygmt/clib/session.py +++ b/pygmt/clib/session.py @@ -1709,6 +1709,35 @@ def virtualfile_out( with self.open_virtualfile(family, geometry, "GMT_OUT", None) as vfile: yield vfile + def inquire_virtualfile(self, vfname: str) -> int: + """ + Get the family of a virtual file. + + Parameters + ---------- + vfname + Name of the virtual file to inquire. + + Returns + ------- + family + The family of the virtual file. + + Examples + -------- + >>> from pygmt.clib import Session + >>> with Session() as lib: + ... with lib.virtualfile_out(kind="dataset") as vfile: + ... family = lib.inquire_virtualfile(vfile) + ... assert family == lib["GMT_IS_DATASET"] + """ + c_inquire_virtualfile = self.get_libgmt_func( + "GMT_Inquire_VirtualFile", + argtypes=[ctp.c_void_p, ctp.c_char_p], + restype=ctp.c_uint, + ) + return c_inquire_virtualfile(self.session_pointer, vfname.encode()) + def read_virtualfile( self, vfname: str, kind: Literal["dataset", "grid", None] = None ): diff --git a/pygmt/tests/test_clib_virtualfiles.py b/pygmt/tests/test_clib_virtualfiles.py index 7e7822f99e5..4ef32753cf3 100644 --- a/pygmt/tests/test_clib_virtualfiles.py +++ b/pygmt/tests/test_clib_virtualfiles.py @@ -379,3 +379,31 @@ def test_virtualfile_from_vectors_arraylike(): bounds = "\t".join([f"<{min(i):.0f}/{max(i):.0f}>" for i in (x, y, z)]) expected = f": N = {size}\t{bounds}\n" assert output == expected + + +def test_inquire_virtualfile(): + """ + Test that the inquire_virtualfile method returns the correct family. + + Currently, only ouptut virtualfiles are tested. + """ + with clib.Session() as lib: + for family in [ + "GMT_IS_DATASET", + "GMT_IS_DATASET|GMT_VIA_MATRIX", + "GMT_IS_DATASET|GMT_VIA_VECTOR", + ]: + with lib.open_virtualfile( + family, "GMT_IS_PLP", "GMT_OUT|GMT_IS_REFERENCE", None + ) as vfile: + assert lib.inquire_virtualfile(vfile) == lib["GMT_IS_DATASET"] + + for family, geometry in [ + ("GMT_IS_GRID", "GMT_IS_SURFACE"), + ("GMT_IS_IMAGE", "GMT_IS_SURFACE"), + ("GMT_IS_CUBE", "GMT_IS_VOLUME"), + ("GMT_IS_PALETTE", "GMT_IS_NONE"), + ("GMT_IS_POSTSCRIPT", "GMT_IS_NONE"), + ]: + with lib.open_virtualfile(family, geometry, "GMT_OUT", None) as vfile: + assert lib.inquire_virtualfile(vfile) == lib[family] From ec367ceb5ad43e526a652874023fb56b7861705d Mon Sep 17 00:00:00 2001 From: Dongdong Tian Date: Mon, 1 Apr 2024 22:30:29 +0800 Subject: [PATCH 2/3] Typos MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Yvonne Fröhlich <94163266+yvonnefroehlich@users.noreply.github.com> --- pygmt/tests/test_clib_virtualfiles.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pygmt/tests/test_clib_virtualfiles.py b/pygmt/tests/test_clib_virtualfiles.py index 4ef32753cf3..26ebfc5d379 100644 --- a/pygmt/tests/test_clib_virtualfiles.py +++ b/pygmt/tests/test_clib_virtualfiles.py @@ -385,7 +385,7 @@ def test_inquire_virtualfile(): """ Test that the inquire_virtualfile method returns the correct family. - Currently, only ouptut virtualfiles are tested. + Currently, only output virtual files are tested. """ with clib.Session() as lib: for family in [ From f8f66a8c962bc0e4ea8d5481a861658ad08dd141 Mon Sep 17 00:00:00 2001 From: Dongdong Tian Date: Tue, 2 Apr 2024 09:24:39 +0800 Subject: [PATCH 3/3] Update pygmt/clib/session.py --- pygmt/clib/session.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pygmt/clib/session.py b/pygmt/clib/session.py index 332cc4e7e25..50c7ad8368c 100644 --- a/pygmt/clib/session.py +++ b/pygmt/clib/session.py @@ -1721,7 +1721,7 @@ def inquire_virtualfile(self, vfname: str) -> int: Returns ------- family - The family of the virtual file. + The integer value for the family of the virtual file. Examples --------