pygmt.clib.Session.open_virtual_file

Session.open_virtual_file(self, family, geometry, direction, data)[source]

Open a GMT Virtual File to pass data to and from a module.

GMT uses a virtual file scheme to pass in data to API modules. Use it to pass in your GMT data structure (created using create_data) to a module that expects an input or output file.

Use in a with block. Will automatically close the virtual file when leaving the with block. Because of this, no wrapper for GMT_Close_VirtualFile is provided.

Parameters:
family : str

A valid GMT data family name (e.g., 'GMT_IS_DATASET'). Should be the same as the one you used to create your data structure.

geometry : str

A valid GMT data geometry name (e.g., 'GMT_IS_POINT'). Should be the same as the one you used to create your data structure.

direction : str

Either 'GMT_IN' or 'GMT_OUT' to indicate if passing data to GMT or getting it out of GMT, respectively.

data : int

The ctypes void pointer to your GMT data structure.

Yields:
vfname : str

The name of the virtual file that you can pass to a GMT module.

Examples

>>> from pygmt.helpers import GMTTempFile
>>> import os
>>> import numpy as np
>>> x = np.array([0, 1, 2, 3, 4])
>>> y = np.array([5, 6, 7, 8, 9])
>>> with Session() as lib:
...     family = 'GMT_IS_DATASET|GMT_VIA_VECTOR'
...     geometry = 'GMT_IS_POINT'
...     dataset = lib.create_data(
...         family=family,
...         geometry=geometry,
...         mode='GMT_CONTAINER_ONLY',
...         dim=[2, 5, 1, 0],  # columns, lines, segments, type
...     )
...     lib.put_vector(dataset, column=0, vector=x)
...     lib.put_vector(dataset, column=1, vector=y)
...     # Add the dataset to a virtual file
...     vfargs = (family, geometry, 'GMT_IN', dataset)
...     with lib.open_virtual_file(*vfargs) as vfile:
...         # Send the output to a temp file so that we can read it
...         with GMTTempFile() as ofile:
...             args = '{} ->{}'.format(vfile, ofile.name)
...             lib.call_module('info', args)
...             print(ofile.read().strip())
<vector memory>: N = 5 <0/4> <5/9>