Skip to content

Commit a32049d

Browse files
Wrap GMT_Inquire_VirtualFile to get the family of virtualfiles (#3152)
Co-authored-by: Yvonne Fröhlich <[email protected]>
1 parent 6069ebc commit a32049d

File tree

2 files changed

+57
-0
lines changed

2 files changed

+57
-0
lines changed

pygmt/clib/session.py

+29
Original file line numberDiff line numberDiff line change
@@ -1709,6 +1709,35 @@ def virtualfile_out(
17091709
with self.open_virtualfile(family, geometry, "GMT_OUT", None) as vfile:
17101710
yield vfile
17111711

1712+
def inquire_virtualfile(self, vfname: str) -> int:
1713+
"""
1714+
Get the family of a virtual file.
1715+
1716+
Parameters
1717+
----------
1718+
vfname
1719+
Name of the virtual file to inquire.
1720+
1721+
Returns
1722+
-------
1723+
family
1724+
The integer value for the family of the virtual file.
1725+
1726+
Examples
1727+
--------
1728+
>>> from pygmt.clib import Session
1729+
>>> with Session() as lib:
1730+
... with lib.virtualfile_out(kind="dataset") as vfile:
1731+
... family = lib.inquire_virtualfile(vfile)
1732+
... assert family == lib["GMT_IS_DATASET"]
1733+
"""
1734+
c_inquire_virtualfile = self.get_libgmt_func(
1735+
"GMT_Inquire_VirtualFile",
1736+
argtypes=[ctp.c_void_p, ctp.c_char_p],
1737+
restype=ctp.c_uint,
1738+
)
1739+
return c_inquire_virtualfile(self.session_pointer, vfname.encode())
1740+
17121741
def read_virtualfile(
17131742
self, vfname: str, kind: Literal["dataset", "grid", None] = None
17141743
):

pygmt/tests/test_clib_virtualfiles.py

+28
Original file line numberDiff line numberDiff line change
@@ -379,3 +379,31 @@ def test_virtualfile_from_vectors_arraylike():
379379
bounds = "\t".join([f"<{min(i):.0f}/{max(i):.0f}>" for i in (x, y, z)])
380380
expected = f"<vector memory>: N = {size}\t{bounds}\n"
381381
assert output == expected
382+
383+
384+
def test_inquire_virtualfile():
385+
"""
386+
Test that the inquire_virtualfile method returns the correct family.
387+
388+
Currently, only output virtual files are tested.
389+
"""
390+
with clib.Session() as lib:
391+
for family in [
392+
"GMT_IS_DATASET",
393+
"GMT_IS_DATASET|GMT_VIA_MATRIX",
394+
"GMT_IS_DATASET|GMT_VIA_VECTOR",
395+
]:
396+
with lib.open_virtualfile(
397+
family, "GMT_IS_PLP", "GMT_OUT|GMT_IS_REFERENCE", None
398+
) as vfile:
399+
assert lib.inquire_virtualfile(vfile) == lib["GMT_IS_DATASET"]
400+
401+
for family, geometry in [
402+
("GMT_IS_GRID", "GMT_IS_SURFACE"),
403+
("GMT_IS_IMAGE", "GMT_IS_SURFACE"),
404+
("GMT_IS_CUBE", "GMT_IS_VOLUME"),
405+
("GMT_IS_PALETTE", "GMT_IS_NONE"),
406+
("GMT_IS_POSTSCRIPT", "GMT_IS_NONE"),
407+
]:
408+
with lib.open_virtualfile(family, geometry, "GMT_OUT", None) as vfile:
409+
assert lib.inquire_virtualfile(vfile) == lib[family]

0 commit comments

Comments
 (0)