From f7fe56228ffa0ece898ea94d3361579cb8098bef Mon Sep 17 00:00:00 2001 From: Dongdong Tian Date: Thu, 21 Mar 2024 17:44:26 +0800 Subject: [PATCH 1/4] Refactor all wrappers to pass an argument list to Session.call_module --- pygmt/figure.py | 15 +++++---------- pygmt/session_management.py | 6 +++--- pygmt/src/basemap.py | 4 ++-- pygmt/src/binstats.py | 4 ++-- pygmt/src/blockm.py | 4 ++-- pygmt/src/coast.py | 4 ++-- pygmt/src/colorbar.py | 4 ++-- pygmt/src/config.py | 13 +++++++------ pygmt/src/contour.py | 4 ++-- pygmt/src/dimfilter.py | 4 ++-- pygmt/src/filter1d.py | 4 ++-- pygmt/src/grd2cpt.py | 6 +++--- pygmt/src/grd2xyz.py | 4 ++-- pygmt/src/grdclip.py | 4 ++-- pygmt/src/grdcontour.py | 4 ++-- pygmt/src/grdcut.py | 4 ++-- pygmt/src/grdfill.py | 4 ++-- pygmt/src/grdfilter.py | 4 ++-- pygmt/src/grdgradient.py | 4 ++-- pygmt/src/grdhisteq.py | 6 +++--- pygmt/src/grdimage.py | 4 ++-- pygmt/src/grdinfo.py | 4 ++-- pygmt/src/grdlandmask.py | 4 ++-- pygmt/src/grdproject.py | 4 ++-- pygmt/src/grdsample.py | 4 ++-- pygmt/src/grdtrack.py | 4 ++-- pygmt/src/grdview.py | 4 ++-- pygmt/src/grdvolume.py | 4 ++-- pygmt/src/histogram.py | 4 ++-- pygmt/src/image.py | 4 ++-- pygmt/src/info.py | 4 ++-- pygmt/src/inset.py | 9 +++++---- pygmt/src/legend.py | 4 ++-- pygmt/src/logo.py | 4 ++-- pygmt/src/makecpt.py | 6 +++--- pygmt/src/meca.py | 4 ++-- pygmt/src/nearneighbor.py | 4 ++-- pygmt/src/plot.py | 4 ++-- pygmt/src/plot3d.py | 6 ++---- pygmt/src/project.py | 4 ++-- pygmt/src/rose.py | 4 ++-- pygmt/src/select.py | 4 ++-- pygmt/src/shift_origin.py | 2 +- pygmt/src/solar.py | 4 ++-- pygmt/src/sph2grd.py | 4 ++-- pygmt/src/sphdistance.py | 4 ++-- pygmt/src/sphinterpolate.py | 4 ++-- pygmt/src/subplot.py | 18 +++++++++++------- pygmt/src/surface.py | 4 ++-- pygmt/src/ternary.py | 4 ++-- pygmt/src/text.py | 11 +++-------- pygmt/src/tilemap.py | 4 ++-- pygmt/src/timestamp.py | 4 ++-- pygmt/src/triangulate.py | 6 +++--- pygmt/src/velo.py | 4 ++-- pygmt/src/which.py | 7 +++---- pygmt/src/wiggle.py | 6 ++---- pygmt/src/x2sys_cross.py | 6 ++---- pygmt/src/x2sys_init.py | 4 ++-- pygmt/src/xyz2grd.py | 4 ++-- pygmt/tests/test_geopandas.py | 2 +- 61 files changed, 147 insertions(+), 158 deletions(-) diff --git a/pygmt/figure.py b/pygmt/figure.py index ebeccc90287..5190c4acf77 100644 --- a/pygmt/figure.py +++ b/pygmt/figure.py @@ -18,7 +18,7 @@ from pygmt.clib import Session from pygmt.exceptions import GMTError, GMTInvalidInput from pygmt.helpers import ( - build_arg_string, + build_arg_list, fmt_docstring, kwargs_to_strings, launch_external_viewer, @@ -108,7 +108,7 @@ def _activate_figure(self): # Passing format '-' tells pygmt.end to not produce any files. fmt = "-" with Session() as lib: - lib.call_module(module="figure", args=f"{self._name} {fmt}") + lib.call_module(module="figure", args=[self._name, fmt]) def _preprocess(self, **kwargs): """ @@ -234,15 +234,12 @@ def psconvert(self, **kwargs): # Default cropping the figure to True if kwargs.get("A") is None: kwargs["A"] = "" - # Manually handle prefix -F argument so spaces aren't converted to \040 - # by build_arg_string function. For more information, see - # https://github.com/GenericMappingTools/pygmt/pull/1487 - prefix = kwargs.pop("F", None) + + prefix = kwargs.get("F") if prefix in ["", None, False, True]: raise GMTInvalidInput( "The 'prefix' parameter must be specified with a valid value." ) - prefix_arg = f'-F"{prefix}"' # check if the parent directory exists prefix_path = Path(prefix).parent @@ -252,9 +249,7 @@ def psconvert(self, **kwargs): ) with Session() as lib: - lib.call_module( - module="psconvert", args=f"{prefix_arg} {build_arg_string(kwargs)}" - ) + lib.call_module(module="psconvert", args=build_arg_list(kwargs)) def savefig( # noqa: PLR0912 self, diff --git a/pygmt/session_management.py b/pygmt/session_management.py index 9b598c72d73..87055bb44e8 100644 --- a/pygmt/session_management.py +++ b/pygmt/session_management.py @@ -23,9 +23,9 @@ def begin(): prefix = "pygmt-session" with Session() as lib: - lib.call_module(module="begin", args=prefix) + lib.call_module(module="begin", args=[prefix]) # pygmt relies on GMT modern mode with GMT_COMPATIBILITY at version 6 - lib.call_module(module="set", args="GMT_COMPATIBILITY 6") + lib.call_module(module="set", args=["GMT_COMPATIBILITY=6"]) def end(): @@ -38,4 +38,4 @@ def end(): ``pygmt.begin``), and bring the figures to the working directory. """ with Session() as lib: - lib.call_module(module="end", args="") + lib.call_module(module="end", args=[]) diff --git a/pygmt/src/basemap.py b/pygmt/src/basemap.py index 25ea7cb408e..6355e2e02f7 100644 --- a/pygmt/src/basemap.py +++ b/pygmt/src/basemap.py @@ -3,7 +3,7 @@ """ from pygmt.clib import Session -from pygmt.helpers import build_arg_string, fmt_docstring, kwargs_to_strings, use_alias +from pygmt.helpers import build_arg_list, fmt_docstring, kwargs_to_strings, use_alias @fmt_docstring @@ -84,4 +84,4 @@ def basemap(self, **kwargs): """ kwargs = self._preprocess(**kwargs) with Session() as lib: - lib.call_module(module="basemap", args=build_arg_string(kwargs)) + lib.call_module(module="basemap", args=build_arg_list(kwargs)) diff --git a/pygmt/src/binstats.py b/pygmt/src/binstats.py index f34ad8ca911..3a7af3644de 100644 --- a/pygmt/src/binstats.py +++ b/pygmt/src/binstats.py @@ -5,7 +5,7 @@ from pygmt.clib import Session from pygmt.helpers import ( GMTTempFile, - build_arg_string, + build_arg_list, fmt_docstring, kwargs_to_strings, use_alias, @@ -116,7 +116,7 @@ def binstats(data, **kwargs): if (outgrid := kwargs.get("G")) is None: kwargs["G"] = outgrid = tmpfile.name # output to tmpfile lib.call_module( - module="binstats", args=build_arg_string(kwargs, infile=vintbl) + module="binstats", args=build_arg_list(kwargs, infile=vintbl) ) return load_dataarray(outgrid) if outgrid == tmpfile.name else None diff --git a/pygmt/src/blockm.py b/pygmt/src/blockm.py index 1798da62e9e..a8b35d6c942 100644 --- a/pygmt/src/blockm.py +++ b/pygmt/src/blockm.py @@ -8,7 +8,7 @@ import pandas as pd from pygmt.clib import Session from pygmt.helpers import ( - build_arg_string, + build_arg_list, fmt_docstring, kwargs_to_strings, use_alias, @@ -61,7 +61,7 @@ def _blockm( ): lib.call_module( module=block_method, - args=build_arg_string(kwargs, infile=vintbl, outfile=vouttbl), + args=build_arg_list(kwargs, infile=vintbl, outfile=vouttbl), ) return lib.virtualfile_to_dataset( vfname=vouttbl, output_type=output_type, column_names=column_names diff --git a/pygmt/src/coast.py b/pygmt/src/coast.py index 897f9ed5c03..aef178ea74c 100644 --- a/pygmt/src/coast.py +++ b/pygmt/src/coast.py @@ -6,7 +6,7 @@ from pygmt.exceptions import GMTInvalidInput from pygmt.helpers import ( args_in_kwargs, - build_arg_string, + build_arg_list, fmt_docstring, kwargs_to_strings, use_alias, @@ -227,4 +227,4 @@ def coast(self, **kwargs): lakes, land, water, rivers, borders, dcw, Q, or shorelines""" ) with Session() as lib: - lib.call_module(module="coast", args=build_arg_string(kwargs)) + lib.call_module(module="coast", args=build_arg_list(kwargs)) diff --git a/pygmt/src/colorbar.py b/pygmt/src/colorbar.py index d3c96486216..c5e6f3fb5a9 100644 --- a/pygmt/src/colorbar.py +++ b/pygmt/src/colorbar.py @@ -3,7 +3,7 @@ """ from pygmt.clib import Session -from pygmt.helpers import build_arg_string, fmt_docstring, kwargs_to_strings, use_alias +from pygmt.helpers import build_arg_list, fmt_docstring, kwargs_to_strings, use_alias __doctest_skip__ = ["colorbar"] @@ -146,4 +146,4 @@ def colorbar(self, **kwargs): """ kwargs = self._preprocess(**kwargs) with Session() as lib: - lib.call_module(module="colorbar", args=build_arg_string(kwargs)) + lib.call_module(module="colorbar", args=build_arg_list(kwargs)) diff --git a/pygmt/src/config.py b/pygmt/src/config.py index 9d647ff83d1..f38402e80dc 100644 --- a/pygmt/src/config.py +++ b/pygmt/src/config.py @@ -199,9 +199,10 @@ def __init__(self, **kwargs): self.old_defaults[key] = lib.get_default(key) # call gmt set to change GMT defaults - arg_str = " ".join([f'{key}="{value}"' for key, value in kwargs.items()]) with Session() as lib: - lib.call_module(module="set", args=arg_str) + lib.call_module( + module="set", args=[f"{key}={value}" for key, value in kwargs.items()] + ) def __enter__(self): """ @@ -213,8 +214,8 @@ def __exit__(self, exc_type, exc_value, traceback): """ Revert GMT configurations to initial values. """ - arg_str = " ".join( - [f'{key}="{value}"' for key, value in self.old_defaults.items()] - ) with Session() as lib: - lib.call_module(module="set", args=arg_str) + lib.call_module( + module="set", + args=[f"{key}={value}" for key, value in self.old_defaults.items()], + ) diff --git a/pygmt/src/contour.py b/pygmt/src/contour.py index 9a481a167fa..cf5b2007c66 100644 --- a/pygmt/src/contour.py +++ b/pygmt/src/contour.py @@ -3,7 +3,7 @@ """ from pygmt.clib import Session -from pygmt.helpers import build_arg_string, fmt_docstring, kwargs_to_strings, use_alias +from pygmt.helpers import build_arg_list, fmt_docstring, kwargs_to_strings, use_alias @fmt_docstring @@ -119,5 +119,5 @@ def contour(self, data=None, x=None, y=None, z=None, **kwargs): check_kind="vector", data=data, x=x, y=y, z=z, required_z=True ) as vintbl: lib.call_module( - module="contour", args=build_arg_string(kwargs, infile=vintbl) + module="contour", args=build_arg_list(kwargs, infile=vintbl) ) diff --git a/pygmt/src/dimfilter.py b/pygmt/src/dimfilter.py index fc9355b7f43..4d3774683a6 100644 --- a/pygmt/src/dimfilter.py +++ b/pygmt/src/dimfilter.py @@ -6,7 +6,7 @@ from pygmt.exceptions import GMTInvalidInput from pygmt.helpers import ( GMTTempFile, - build_arg_string, + build_arg_list, fmt_docstring, kwargs_to_strings, use_alias, @@ -155,7 +155,7 @@ def dimfilter(grid, **kwargs): if (outgrid := kwargs.get("G")) is None: kwargs["G"] = outgrid = tmpfile.name # output to tmpfile lib.call_module( - module="dimfilter", args=build_arg_string(kwargs, infile=vingrd) + module="dimfilter", args=build_arg_list(kwargs, infile=vingrd) ) return load_dataarray(outgrid) if outgrid == tmpfile.name else None diff --git a/pygmt/src/filter1d.py b/pygmt/src/filter1d.py index 32e046e2e59..0469385dcf9 100644 --- a/pygmt/src/filter1d.py +++ b/pygmt/src/filter1d.py @@ -9,7 +9,7 @@ from pygmt.clib import Session from pygmt.exceptions import GMTInvalidInput from pygmt.helpers import ( - build_arg_string, + build_arg_list, fmt_docstring, use_alias, validate_output_table_type, @@ -121,6 +121,6 @@ def filter1d( ): lib.call_module( module="filter1d", - args=build_arg_string(kwargs, infile=vintbl, outfile=vouttbl), + args=build_arg_list(kwargs, infile=vintbl, outfile=vouttbl), ) return lib.virtualfile_to_dataset(vfname=vouttbl, output_type=output_type) diff --git a/pygmt/src/grd2cpt.py b/pygmt/src/grd2cpt.py index 9ba6c5aa5bf..de4a9ab5248 100644 --- a/pygmt/src/grd2cpt.py +++ b/pygmt/src/grd2cpt.py @@ -4,7 +4,7 @@ from pygmt.clib import Session from pygmt.exceptions import GMTInvalidInput -from pygmt.helpers import build_arg_string, fmt_docstring, kwargs_to_strings, use_alias +from pygmt.helpers import build_arg_list, fmt_docstring, kwargs_to_strings, use_alias __doctest_skip__ = ["grd2cpt"] @@ -186,10 +186,10 @@ def grd2cpt(grid, **kwargs): with Session() as lib: with lib.virtualfile_in(check_kind="raster", data=grid) as vingrd: if kwargs.get("H") is None: # if no output is set - arg_str = build_arg_string(kwargs, infile=vingrd) + arg_str = build_arg_list(kwargs, infile=vingrd) else: # if output is set outfile, kwargs["H"] = kwargs["H"], True if not outfile or not isinstance(outfile, str): raise GMTInvalidInput("'output' should be a proper file name.") - arg_str = build_arg_string(kwargs, infile=vingrd, outfile=outfile) + arg_str = build_arg_list(kwargs, infile=vingrd, outfile=outfile) lib.call_module(module="grd2cpt", args=arg_str) diff --git a/pygmt/src/grd2xyz.py b/pygmt/src/grd2xyz.py index 4c6d3eb224f..04e4d21d848 100644 --- a/pygmt/src/grd2xyz.py +++ b/pygmt/src/grd2xyz.py @@ -10,7 +10,7 @@ from pygmt.clib import Session from pygmt.exceptions import GMTInvalidInput from pygmt.helpers import ( - build_arg_string, + build_arg_list, fmt_docstring, kwargs_to_strings, use_alias, @@ -165,7 +165,7 @@ def grd2xyz( ): lib.call_module( module="grd2xyz", - args=build_arg_string(kwargs, infile=vingrd, outfile=vouttbl), + args=build_arg_list(kwargs, infile=vingrd, outfile=vouttbl), ) return lib.virtualfile_to_dataset( vfname=vouttbl, output_type=output_type, column_names=column_names diff --git a/pygmt/src/grdclip.py b/pygmt/src/grdclip.py index 03a75421bf4..d12f7c974c0 100644 --- a/pygmt/src/grdclip.py +++ b/pygmt/src/grdclip.py @@ -5,7 +5,7 @@ from pygmt.clib import Session from pygmt.helpers import ( GMTTempFile, - build_arg_string, + build_arg_list, fmt_docstring, kwargs_to_strings, use_alias, @@ -101,7 +101,7 @@ def grdclip(grid, **kwargs): if (outgrid := kwargs.get("G")) is None: kwargs["G"] = outgrid = tmpfile.name # output to tmpfile lib.call_module( - module="grdclip", args=build_arg_string(kwargs, infile=vingrd) + module="grdclip", args=build_arg_list(kwargs, infile=vingrd) ) return load_dataarray(outgrid) if outgrid == tmpfile.name else None diff --git a/pygmt/src/grdcontour.py b/pygmt/src/grdcontour.py index 89268d8fe51..53e6b32ced8 100644 --- a/pygmt/src/grdcontour.py +++ b/pygmt/src/grdcontour.py @@ -3,7 +3,7 @@ """ from pygmt.clib import Session -from pygmt.helpers import build_arg_string, fmt_docstring, kwargs_to_strings, use_alias +from pygmt.helpers import build_arg_list, fmt_docstring, kwargs_to_strings, use_alias __doctest_skip__ = ["grdcontour"] @@ -125,5 +125,5 @@ def grdcontour(self, grid, **kwargs): with Session() as lib: with lib.virtualfile_in(check_kind="raster", data=grid) as vingrd: lib.call_module( - module="grdcontour", args=build_arg_string(kwargs, infile=vingrd) + module="grdcontour", args=build_arg_list(kwargs, infile=vingrd) ) diff --git a/pygmt/src/grdcut.py b/pygmt/src/grdcut.py index 9ffcda213d6..6aed8dad680 100644 --- a/pygmt/src/grdcut.py +++ b/pygmt/src/grdcut.py @@ -5,7 +5,7 @@ from pygmt.clib import Session from pygmt.helpers import ( GMTTempFile, - build_arg_string, + build_arg_list, fmt_docstring, kwargs_to_strings, use_alias, @@ -105,7 +105,7 @@ def grdcut(grid, **kwargs): if (outgrid := kwargs.get("G")) is None: kwargs["G"] = outgrid = tmpfile.name # output to tmpfile lib.call_module( - module="grdcut", args=build_arg_string(kwargs, infile=vingrd) + module="grdcut", args=build_arg_list(kwargs, infile=vingrd) ) return load_dataarray(outgrid) if outgrid == tmpfile.name else None diff --git a/pygmt/src/grdfill.py b/pygmt/src/grdfill.py index 4eae3818257..a8debe3e02f 100644 --- a/pygmt/src/grdfill.py +++ b/pygmt/src/grdfill.py @@ -6,7 +6,7 @@ from pygmt.exceptions import GMTInvalidInput from pygmt.helpers import ( GMTTempFile, - build_arg_string, + build_arg_list, fmt_docstring, kwargs_to_strings, use_alias, @@ -83,7 +83,7 @@ def grdfill(grid, **kwargs): if (outgrid := kwargs.get("G")) is None: kwargs["G"] = outgrid = tmpfile.name # output to tmpfile lib.call_module( - module="grdfill", args=build_arg_string(kwargs, infile=vingrd) + module="grdfill", args=build_arg_list(kwargs, infile=vingrd) ) return load_dataarray(outgrid) if outgrid == tmpfile.name else None diff --git a/pygmt/src/grdfilter.py b/pygmt/src/grdfilter.py index a6e49c65001..7608970b48e 100644 --- a/pygmt/src/grdfilter.py +++ b/pygmt/src/grdfilter.py @@ -5,7 +5,7 @@ from pygmt.clib import Session from pygmt.helpers import ( GMTTempFile, - build_arg_string, + build_arg_list, fmt_docstring, kwargs_to_strings, use_alias, @@ -138,7 +138,7 @@ def grdfilter(grid, **kwargs): if (outgrid := kwargs.get("G")) is None: kwargs["G"] = outgrid = tmpfile.name # output to tmpfile lib.call_module( - module="grdfilter", args=build_arg_string(kwargs, infile=vingrd) + module="grdfilter", args=build_arg_list(kwargs, infile=vingrd) ) return load_dataarray(outgrid) if outgrid == tmpfile.name else None diff --git a/pygmt/src/grdgradient.py b/pygmt/src/grdgradient.py index 783ef7de48c..6687234dcb8 100644 --- a/pygmt/src/grdgradient.py +++ b/pygmt/src/grdgradient.py @@ -7,7 +7,7 @@ from pygmt.helpers import ( GMTTempFile, args_in_kwargs, - build_arg_string, + build_arg_list, fmt_docstring, kwargs_to_strings, use_alias, @@ -173,7 +173,7 @@ def grdgradient(grid, **kwargs): if (outgrid := kwargs.get("G")) is None: kwargs["G"] = outgrid = tmpfile.name # output to tmpfile lib.call_module( - module="grdgradient", args=build_arg_string(kwargs, infile=vingrd) + module="grdgradient", args=build_arg_list(kwargs, infile=vingrd) ) return load_dataarray(outgrid) if outgrid == tmpfile.name else None diff --git a/pygmt/src/grdhisteq.py b/pygmt/src/grdhisteq.py index 44d191a417e..44436bd907c 100644 --- a/pygmt/src/grdhisteq.py +++ b/pygmt/src/grdhisteq.py @@ -10,7 +10,7 @@ from pygmt.exceptions import GMTInvalidInput from pygmt.helpers import ( GMTTempFile, - build_arg_string, + build_arg_list, fmt_docstring, kwargs_to_strings, use_alias, @@ -129,7 +129,7 @@ def equalize_grid(grid, **kwargs): if (outgrid := kwargs.get("G")) is None: kwargs["G"] = outgrid = tmpfile.name # output to tmpfile lib.call_module( - module="grdhisteq", args=build_arg_string(kwargs, infile=vingrd) + module="grdhisteq", args=build_arg_list(kwargs, infile=vingrd) ) return load_dataarray(outgrid) if outgrid == tmpfile.name else None @@ -235,7 +235,7 @@ def compute_bins( ): kwargs["D"] = vouttbl # -D for output file name lib.call_module( - module="grdhisteq", args=build_arg_string(kwargs, infile=vingrd) + module="grdhisteq", args=build_arg_list(kwargs, infile=vingrd) ) return lib.virtualfile_to_dataset( diff --git a/pygmt/src/grdimage.py b/pygmt/src/grdimage.py index 281bc5a9016..a1ba783ab6c 100644 --- a/pygmt/src/grdimage.py +++ b/pygmt/src/grdimage.py @@ -5,7 +5,7 @@ from pygmt.clib import Session from pygmt.exceptions import GMTInvalidInput from pygmt.helpers import ( - build_arg_string, + build_arg_list, fmt_docstring, kwargs_to_strings, use_alias, @@ -172,5 +172,5 @@ def grdimage(self, grid, **kwargs): ): kwargs["I"] = vshadegrid lib.call_module( - module="grdimage", args=build_arg_string(kwargs, infile=vingrd) + module="grdimage", args=build_arg_list(kwargs, infile=vingrd) ) diff --git a/pygmt/src/grdinfo.py b/pygmt/src/grdinfo.py index 02de4924775..7ebb8bfdd03 100644 --- a/pygmt/src/grdinfo.py +++ b/pygmt/src/grdinfo.py @@ -5,7 +5,7 @@ from pygmt.clib import Session from pygmt.helpers import ( GMTTempFile, - build_arg_string, + build_arg_list, fmt_docstring, kwargs_to_strings, use_alias, @@ -115,7 +115,7 @@ def grdinfo(grid, **kwargs): with lib.virtualfile_in(check_kind="raster", data=grid) as vingrd: lib.call_module( module="grdinfo", - args=build_arg_string(kwargs, infile=vingrd, outfile=outfile.name), + args=build_arg_list(kwargs, infile=vingrd, outfile=outfile.name), ) result = outfile.read() return result diff --git a/pygmt/src/grdlandmask.py b/pygmt/src/grdlandmask.py index 29bfef73fd6..21679a58b9b 100644 --- a/pygmt/src/grdlandmask.py +++ b/pygmt/src/grdlandmask.py @@ -6,7 +6,7 @@ from pygmt.exceptions import GMTInvalidInput from pygmt.helpers import ( GMTTempFile, - build_arg_string, + build_arg_list, fmt_docstring, kwargs_to_strings, use_alias, @@ -109,6 +109,6 @@ def grdlandmask(**kwargs): with Session() as lib: if (outgrid := kwargs.get("G")) is None: kwargs["G"] = outgrid = tmpfile.name # output to tmpfile - lib.call_module(module="grdlandmask", args=build_arg_string(kwargs)) + lib.call_module(module="grdlandmask", args=build_arg_list(kwargs)) return load_dataarray(outgrid) if outgrid == tmpfile.name else None diff --git a/pygmt/src/grdproject.py b/pygmt/src/grdproject.py index 7903a090f67..f4def849597 100644 --- a/pygmt/src/grdproject.py +++ b/pygmt/src/grdproject.py @@ -6,7 +6,7 @@ from pygmt.exceptions import GMTInvalidInput from pygmt.helpers import ( GMTTempFile, - build_arg_string, + build_arg_list, fmt_docstring, kwargs_to_strings, use_alias, @@ -117,7 +117,7 @@ def grdproject(grid, **kwargs): if (outgrid := kwargs.get("G")) is None: kwargs["G"] = outgrid = tmpfile.name # output to tmpfile lib.call_module( - module="grdproject", args=build_arg_string(kwargs, infile=vingrd) + module="grdproject", args=build_arg_list(kwargs, infile=vingrd) ) return load_dataarray(outgrid) if outgrid == tmpfile.name else None diff --git a/pygmt/src/grdsample.py b/pygmt/src/grdsample.py index 350da05ff84..3f4373f37c4 100644 --- a/pygmt/src/grdsample.py +++ b/pygmt/src/grdsample.py @@ -5,7 +5,7 @@ from pygmt.clib import Session from pygmt.helpers import ( GMTTempFile, - build_arg_string, + build_arg_list, fmt_docstring, kwargs_to_strings, use_alias, @@ -93,7 +93,7 @@ def grdsample(grid, **kwargs): if (outgrid := kwargs.get("G")) is None: kwargs["G"] = outgrid = tmpfile.name # output to tmpfile lib.call_module( - module="grdsample", args=build_arg_string(kwargs, infile=vingrd) + module="grdsample", args=build_arg_list(kwargs, infile=vingrd) ) return load_dataarray(outgrid) if outgrid == tmpfile.name else None diff --git a/pygmt/src/grdtrack.py b/pygmt/src/grdtrack.py index 930cf00656f..c8693308edf 100644 --- a/pygmt/src/grdtrack.py +++ b/pygmt/src/grdtrack.py @@ -9,7 +9,7 @@ from pygmt.clib import Session from pygmt.exceptions import GMTInvalidInput from pygmt.helpers import ( - build_arg_string, + build_arg_list, fmt_docstring, kwargs_to_strings, use_alias, @@ -315,7 +315,7 @@ def grdtrack( kwargs["G"] = vingrd lib.call_module( module="grdtrack", - args=build_arg_string(kwargs, infile=vintbl, outfile=vouttbl), + args=build_arg_list(kwargs, infile=vintbl, outfile=vouttbl), ) return lib.virtualfile_to_dataset( vfname=vouttbl, diff --git a/pygmt/src/grdview.py b/pygmt/src/grdview.py index 44a654b5690..5e6256a0b1f 100644 --- a/pygmt/src/grdview.py +++ b/pygmt/src/grdview.py @@ -3,7 +3,7 @@ """ from pygmt.clib import Session -from pygmt.helpers import build_arg_string, fmt_docstring, kwargs_to_strings, use_alias +from pygmt.helpers import build_arg_list, fmt_docstring, kwargs_to_strings, use_alias __doctest_skip__ = ["grdview"] @@ -153,5 +153,5 @@ def grdview(self, grid, **kwargs): ): kwargs["G"] = vdrapegrid lib.call_module( - module="grdview", args=build_arg_string(kwargs, infile=vingrd) + module="grdview", args=build_arg_list(kwargs, infile=vingrd) ) diff --git a/pygmt/src/grdvolume.py b/pygmt/src/grdvolume.py index c651163076c..3439bef69b5 100644 --- a/pygmt/src/grdvolume.py +++ b/pygmt/src/grdvolume.py @@ -8,7 +8,7 @@ import pandas as pd from pygmt.clib import Session from pygmt.helpers import ( - build_arg_string, + build_arg_list, fmt_docstring, kwargs_to_strings, use_alias, @@ -109,6 +109,6 @@ def grdvolume( ): lib.call_module( module="grdvolume", - args=build_arg_string(kwargs, infile=vingrd, outfile=vouttbl), + args=build_arg_list(kwargs, infile=vingrd, outfile=vouttbl), ) return lib.virtualfile_to_dataset(vfname=vouttbl, output_type=output_type) diff --git a/pygmt/src/histogram.py b/pygmt/src/histogram.py index 93b4fff2345..54cc94283c9 100644 --- a/pygmt/src/histogram.py +++ b/pygmt/src/histogram.py @@ -3,7 +3,7 @@ """ from pygmt.clib import Session -from pygmt.helpers import build_arg_string, fmt_docstring, kwargs_to_strings, use_alias +from pygmt.helpers import build_arg_list, fmt_docstring, kwargs_to_strings, use_alias @fmt_docstring @@ -137,5 +137,5 @@ def histogram(self, data, **kwargs): with Session() as lib: with lib.virtualfile_in(check_kind="vector", data=data) as vintbl: lib.call_module( - module="histogram", args=build_arg_string(kwargs, infile=vintbl) + module="histogram", args=build_arg_list(kwargs, infile=vintbl) ) diff --git a/pygmt/src/image.py b/pygmt/src/image.py index 80bc7552b0c..601c09d7eff 100644 --- a/pygmt/src/image.py +++ b/pygmt/src/image.py @@ -3,7 +3,7 @@ """ from pygmt.clib import Session -from pygmt.helpers import build_arg_string, fmt_docstring, kwargs_to_strings, use_alias +from pygmt.helpers import build_arg_list, fmt_docstring, kwargs_to_strings, use_alias @fmt_docstring @@ -69,4 +69,4 @@ def image(self, imagefile, **kwargs): """ kwargs = self._preprocess(**kwargs) with Session() as lib: - lib.call_module(module="image", args=build_arg_string(kwargs, infile=imagefile)) + lib.call_module(module="image", args=build_arg_list(kwargs, infile=imagefile)) diff --git a/pygmt/src/info.py b/pygmt/src/info.py index e0497d3b162..f9fa73c62f7 100644 --- a/pygmt/src/info.py +++ b/pygmt/src/info.py @@ -6,7 +6,7 @@ from pygmt.clib import Session from pygmt.helpers import ( GMTTempFile, - build_arg_string, + build_arg_list, fmt_docstring, kwargs_to_strings, use_alias, @@ -85,7 +85,7 @@ def info(data, **kwargs): with lib.virtualfile_in(check_kind="vector", data=data) as vintbl: lib.call_module( module="info", - args=build_arg_string(kwargs, infile=vintbl, outfile=tmpfile.name), + args=build_arg_list(kwargs, infile=vintbl, outfile=tmpfile.name), ) result = tmpfile.read() diff --git a/pygmt/src/inset.py b/pygmt/src/inset.py index 97b9825c1d1..e05b038c5ac 100644 --- a/pygmt/src/inset.py +++ b/pygmt/src/inset.py @@ -5,7 +5,7 @@ import contextlib from pygmt.clib import Session -from pygmt.helpers import build_arg_string, fmt_docstring, kwargs_to_strings, use_alias +from pygmt.helpers import build_arg_list, fmt_docstring, kwargs_to_strings, use_alias __doctest_skip__ = ["inset"] @@ -137,8 +137,9 @@ def inset(self, **kwargs): kwargs = self._preprocess(**kwargs) with Session() as lib: try: - lib.call_module(module="inset", args=f"begin {build_arg_string(kwargs)}") + lib.call_module(module="inset", args=["begin", *build_arg_list(kwargs)]) yield finally: - v_arg = build_arg_string({"V": kwargs.get("V")}) - lib.call_module(module="inset", args=f"end {v_arg}".strip()) + lib.call_module( + module="inset", args=["end", *build_arg_list({"V": kwargs.get("V")})] + ) diff --git a/pygmt/src/legend.py b/pygmt/src/legend.py index 8f58112d6d7..fcf5afac82d 100644 --- a/pygmt/src/legend.py +++ b/pygmt/src/legend.py @@ -5,7 +5,7 @@ from pygmt.clib import Session from pygmt.exceptions import GMTInvalidInput from pygmt.helpers import ( - build_arg_string, + build_arg_list, data_kind, fmt_docstring, kwargs_to_strings, @@ -81,4 +81,4 @@ def legend(self, spec=None, position="JTR+jTR+o0.2c", box="+gwhite+p1p", **kwarg specfile = spec else: raise GMTInvalidInput(f"Unrecognized data type: {type(spec)}") - lib.call_module(module="legend", args=build_arg_string(kwargs, infile=specfile)) + lib.call_module(module="legend", args=build_arg_list(kwargs, infile=specfile)) diff --git a/pygmt/src/logo.py b/pygmt/src/logo.py index 8c73a8f69ce..bab9c5dcd36 100644 --- a/pygmt/src/logo.py +++ b/pygmt/src/logo.py @@ -3,7 +3,7 @@ """ from pygmt.clib import Session -from pygmt.helpers import build_arg_string, fmt_docstring, kwargs_to_strings, use_alias +from pygmt.helpers import build_arg_list, fmt_docstring, kwargs_to_strings, use_alias @fmt_docstring @@ -56,4 +56,4 @@ def logo(self, **kwargs): """ kwargs = self._preprocess(**kwargs) with Session() as lib: - lib.call_module(module="logo", args=build_arg_string(kwargs)) + lib.call_module(module="logo", args=build_arg_list(kwargs)) diff --git a/pygmt/src/makecpt.py b/pygmt/src/makecpt.py index 9e8a07e6f95..695ea4c5afa 100644 --- a/pygmt/src/makecpt.py +++ b/pygmt/src/makecpt.py @@ -4,7 +4,7 @@ from pygmt.clib import Session from pygmt.exceptions import GMTInvalidInput -from pygmt.helpers import build_arg_string, fmt_docstring, kwargs_to_strings, use_alias +from pygmt.helpers import build_arg_list, fmt_docstring, kwargs_to_strings, use_alias @fmt_docstring @@ -157,10 +157,10 @@ def makecpt(**kwargs): if kwargs.get("W") is not None and kwargs.get("Ww") is not None: raise GMTInvalidInput("Set only categorical or cyclic to True, not both.") if kwargs.get("H") is None: # if no output is set - arg_str = build_arg_string(kwargs) + arg_str = build_arg_list(kwargs) else: # if output is set outfile, kwargs["H"] = kwargs.pop("H"), True if not outfile or not isinstance(outfile, str): raise GMTInvalidInput("'output' should be a proper file name.") - arg_str = build_arg_string(kwargs, outfile=outfile) + arg_str = build_arg_list(kwargs, outfile=outfile) lib.call_module(module="makecpt", args=arg_str) diff --git a/pygmt/src/meca.py b/pygmt/src/meca.py index 9161e0dcd0d..e44f3cb00a4 100644 --- a/pygmt/src/meca.py +++ b/pygmt/src/meca.py @@ -6,7 +6,7 @@ import pandas as pd from pygmt.clib import Session from pygmt.exceptions import GMTError, GMTInvalidInput -from pygmt.helpers import build_arg_string, fmt_docstring, kwargs_to_strings, use_alias +from pygmt.helpers import build_arg_list, fmt_docstring, kwargs_to_strings, use_alias def convention_code(convention, component="full"): @@ -490,4 +490,4 @@ def meca( # noqa: PLR0912, PLR0913, PLR0915 kwargs["S"] = f"{data_format}{scale}" with Session() as lib: with lib.virtualfile_in(check_kind="vector", data=spec) as vintbl: - lib.call_module(module="meca", args=build_arg_string(kwargs, infile=vintbl)) + lib.call_module(module="meca", args=build_arg_list(kwargs, infile=vintbl)) diff --git a/pygmt/src/nearneighbor.py b/pygmt/src/nearneighbor.py index a9c7a22ca14..1af42f3605b 100644 --- a/pygmt/src/nearneighbor.py +++ b/pygmt/src/nearneighbor.py @@ -5,7 +5,7 @@ from pygmt.clib import Session from pygmt.helpers import ( GMTTempFile, - build_arg_string, + build_arg_list, fmt_docstring, kwargs_to_strings, use_alias, @@ -151,7 +151,7 @@ def nearneighbor(data=None, x=None, y=None, z=None, **kwargs): if (outgrid := kwargs.get("G")) is None: kwargs["G"] = outgrid = tmpfile.name # output to tmpfile lib.call_module( - module="nearneighbor", args=build_arg_string(kwargs, infile=vintbl) + module="nearneighbor", args=build_arg_list(kwargs, infile=vintbl) ) return load_dataarray(outgrid) if outgrid == tmpfile.name else None diff --git a/pygmt/src/plot.py b/pygmt/src/plot.py index 3206c5c053a..e660f370848 100644 --- a/pygmt/src/plot.py +++ b/pygmt/src/plot.py @@ -7,7 +7,7 @@ from pygmt.clib import Session from pygmt.exceptions import GMTInvalidInput from pygmt.helpers import ( - build_arg_string, + build_arg_list, data_kind, fmt_docstring, is_nonstr_iter, @@ -258,4 +258,4 @@ def plot( # noqa: PLR0912 with lib.virtualfile_in( check_kind="vector", data=data, x=x, y=y, extra_arrays=extra_arrays ) as vintbl: - lib.call_module(module="plot", args=build_arg_string(kwargs, infile=vintbl)) + lib.call_module(module="plot", args=build_arg_list(kwargs, infile=vintbl)) diff --git a/pygmt/src/plot3d.py b/pygmt/src/plot3d.py index 3e4e91b597d..929847337c5 100644 --- a/pygmt/src/plot3d.py +++ b/pygmt/src/plot3d.py @@ -7,7 +7,7 @@ from pygmt.clib import Session from pygmt.exceptions import GMTInvalidInput from pygmt.helpers import ( - build_arg_string, + build_arg_list, data_kind, fmt_docstring, is_nonstr_iter, @@ -240,6 +240,4 @@ def plot3d( # noqa: PLR0912 extra_arrays=extra_arrays, required_z=True, ) as vintbl: - lib.call_module( - module="plot3d", args=build_arg_string(kwargs, infile=vintbl) - ) + lib.call_module(module="plot3d", args=build_arg_list(kwargs, infile=vintbl)) diff --git a/pygmt/src/project.py b/pygmt/src/project.py index ab0e6ba7f8d..811a7d48158 100644 --- a/pygmt/src/project.py +++ b/pygmt/src/project.py @@ -9,7 +9,7 @@ from pygmt.clib import Session from pygmt.exceptions import GMTInvalidInput from pygmt.helpers import ( - build_arg_string, + build_arg_list, fmt_docstring, kwargs_to_strings, use_alias, @@ -253,7 +253,7 @@ def project( ): lib.call_module( module="project", - args=build_arg_string(kwargs, infile=vintbl, outfile=vouttbl), + args=build_arg_list(kwargs, infile=vintbl, outfile=vouttbl), ) return lib.virtualfile_to_dataset( vfname=vouttbl, diff --git a/pygmt/src/rose.py b/pygmt/src/rose.py index 189e68546a2..c347db0e3f3 100644 --- a/pygmt/src/rose.py +++ b/pygmt/src/rose.py @@ -4,7 +4,7 @@ from pygmt.clib import Session from pygmt.helpers import ( - build_arg_string, + build_arg_list, fmt_docstring, kwargs_to_strings, use_alias, @@ -203,4 +203,4 @@ def rose(self, data=None, length=None, azimuth=None, **kwargs): with lib.virtualfile_in( check_kind="vector", data=data, x=length, y=azimuth ) as vintbl: - lib.call_module(module="rose", args=build_arg_string(kwargs, infile=vintbl)) + lib.call_module(module="rose", args=build_arg_list(kwargs, infile=vintbl)) diff --git a/pygmt/src/select.py b/pygmt/src/select.py index fde4f88b47f..75f4fa802ef 100644 --- a/pygmt/src/select.py +++ b/pygmt/src/select.py @@ -8,7 +8,7 @@ import pandas as pd from pygmt.clib import Session from pygmt.helpers import ( - build_arg_string, + build_arg_list, fmt_docstring, kwargs_to_strings, use_alias, @@ -218,7 +218,7 @@ def select( ): lib.call_module( module="select", - args=build_arg_string(kwargs, infile=vintbl, outfile=vouttbl), + args=build_arg_list(kwargs, infile=vintbl, outfile=vouttbl), ) return lib.virtualfile_to_dataset( vfname=vouttbl, diff --git a/pygmt/src/shift_origin.py b/pygmt/src/shift_origin.py index ed789231799..397168be198 100644 --- a/pygmt/src/shift_origin.py +++ b/pygmt/src/shift_origin.py @@ -65,4 +65,4 @@ def shift_origin( args.append(f"-Y{yshift}") with Session() as lib: - lib.call_module(module="plot", args=" ".join(args)) + lib.call_module(module="plot", args=args) diff --git a/pygmt/src/solar.py b/pygmt/src/solar.py index ffc086e8267..4237f0492dd 100644 --- a/pygmt/src/solar.py +++ b/pygmt/src/solar.py @@ -9,7 +9,7 @@ import pandas as pd from pygmt.clib import Session from pygmt.exceptions import GMTInvalidInput -from pygmt.helpers import build_arg_string, fmt_docstring, kwargs_to_strings, use_alias +from pygmt.helpers import build_arg_list, fmt_docstring, kwargs_to_strings, use_alias __doctest_skip__ = ["solar"] @@ -118,4 +118,4 @@ def solar( raise GMTInvalidInput("Unrecognized datetime format.") from verr kwargs["T"] += f"+d{datetime_string}" with Session() as lib: - lib.call_module(module="solar", args=build_arg_string(kwargs)) + lib.call_module(module="solar", args=build_arg_list(kwargs)) diff --git a/pygmt/src/sph2grd.py b/pygmt/src/sph2grd.py index 53e4f8be280..80cff0d7824 100644 --- a/pygmt/src/sph2grd.py +++ b/pygmt/src/sph2grd.py @@ -5,7 +5,7 @@ from pygmt.clib import Session from pygmt.helpers import ( GMTTempFile, - build_arg_string, + build_arg_list, fmt_docstring, kwargs_to_strings, use_alias, @@ -78,7 +78,7 @@ def sph2grd(data, **kwargs): if (outgrid := kwargs.get("G")) is None: kwargs["G"] = outgrid = tmpfile.name # output to tmpfile lib.call_module( - module="sph2grd", args=build_arg_string(kwargs, infile=vintbl) + module="sph2grd", args=build_arg_list(kwargs, infile=vintbl) ) return load_dataarray(outgrid) if outgrid == tmpfile.name else None diff --git a/pygmt/src/sphdistance.py b/pygmt/src/sphdistance.py index e2dc839b0cc..d44761657f8 100644 --- a/pygmt/src/sphdistance.py +++ b/pygmt/src/sphdistance.py @@ -7,7 +7,7 @@ from pygmt.exceptions import GMTInvalidInput from pygmt.helpers import ( GMTTempFile, - build_arg_string, + build_arg_list, fmt_docstring, kwargs_to_strings, use_alias, @@ -122,7 +122,7 @@ def sphdistance(data=None, x=None, y=None, **kwargs): if (outgrid := kwargs.get("G")) is None: kwargs["G"] = outgrid = tmpfile.name # output to tmpfile lib.call_module( - module="sphdistance", args=build_arg_string(kwargs, infile=vintbl) + module="sphdistance", args=build_arg_list(kwargs, infile=vintbl) ) return load_dataarray(outgrid) if outgrid == tmpfile.name else None diff --git a/pygmt/src/sphinterpolate.py b/pygmt/src/sphinterpolate.py index 82bae2eef3a..cd9656a587f 100644 --- a/pygmt/src/sphinterpolate.py +++ b/pygmt/src/sphinterpolate.py @@ -5,7 +5,7 @@ from pygmt.clib import Session from pygmt.helpers import ( GMTTempFile, - build_arg_string, + build_arg_list, fmt_docstring, kwargs_to_strings, use_alias, @@ -73,7 +73,7 @@ def sphinterpolate(data, **kwargs): kwargs["G"] = outgrid = tmpfile.name # output to tmpfile lib.call_module( module="sphinterpolate", - args=build_arg_string(kwargs, infile=vintbl), + args=build_arg_list(kwargs, infile=vintbl), ) return load_dataarray(outgrid) if outgrid == tmpfile.name else None diff --git a/pygmt/src/subplot.py b/pygmt/src/subplot.py index 0b913472022..d4d769f4c21 100644 --- a/pygmt/src/subplot.py +++ b/pygmt/src/subplot.py @@ -7,7 +7,7 @@ from pygmt.clib import Session from pygmt.exceptions import GMTInvalidInput from pygmt.helpers import ( - build_arg_string, + build_arg_list, fmt_docstring, kwargs_to_strings, use_alias, @@ -160,13 +160,16 @@ def subplot(self, nrows=1, ncols=1, **kwargs): # See https://github.com/GenericMappingTools/pygmt/issues/2426. try: with Session() as lib: - arg_str = " ".join(["begin", f"{nrows}x{ncols}", build_arg_string(kwargs)]) - lib.call_module(module="subplot", args=arg_str) + lib.call_module( + module="subplot", + args=["begin", f"{nrows}x{ncols}", *build_arg_list(kwargs)], + ) yield finally: with Session() as lib: - v_arg = build_arg_string({"V": kwargs.get("V")}) - lib.call_module(module="subplot", args=f"end {v_arg}") + lib.call_module( + module="subplot", args=["end", *build_arg_list({"V": kwargs.get("V")})] + ) @fmt_docstring @@ -224,6 +227,7 @@ def set_panel(self, panel=None, **kwargs): kwargs = self._preprocess(**kwargs) with Session() as lib: - arg_str = " ".join(["set", f"{panel}", build_arg_string(kwargs)]) - lib.call_module(module="subplot", args=arg_str) + lib.call_module( + module="subplot", args=["set", str(panel), *build_arg_list(kwargs)] + ) yield diff --git a/pygmt/src/surface.py b/pygmt/src/surface.py index 019267a5078..57f4576b9d5 100644 --- a/pygmt/src/surface.py +++ b/pygmt/src/surface.py @@ -6,7 +6,7 @@ from pygmt.clib import Session from pygmt.helpers import ( GMTTempFile, - build_arg_string, + build_arg_list, fmt_docstring, kwargs_to_strings, use_alias, @@ -166,7 +166,7 @@ def surface(data=None, x=None, y=None, z=None, **kwargs): if (outgrid := kwargs.get("G")) is None: kwargs["G"] = outgrid = tmpfile.name # output to tmpfile lib.call_module( - module="surface", args=build_arg_string(kwargs, infile=vintbl) + module="surface", args=build_arg_list(kwargs, infile=vintbl) ) return load_dataarray(outgrid) if outgrid == tmpfile.name else None diff --git a/pygmt/src/ternary.py b/pygmt/src/ternary.py index d3761c21b0d..8b1201e77c5 100644 --- a/pygmt/src/ternary.py +++ b/pygmt/src/ternary.py @@ -5,7 +5,7 @@ import pandas as pd from packaging.version import Version from pygmt.clib import Session, __gmt_version__ -from pygmt.helpers import build_arg_string, fmt_docstring, kwargs_to_strings, use_alias +from pygmt.helpers import build_arg_list, fmt_docstring, kwargs_to_strings, use_alias @fmt_docstring @@ -90,5 +90,5 @@ def ternary(self, data, alabel=None, blabel=None, clabel=None, **kwargs): with lib.virtualfile_in(check_kind="vector", data=data) as vintbl: lib.call_module( module="ternary", - args=build_arg_string(kwargs, infile=vintbl), + args=build_arg_list(kwargs, infile=vintbl), ) diff --git a/pygmt/src/text.py b/pygmt/src/text.py index 91432cf9d87..04abf12ea3b 100644 --- a/pygmt/src/text.py +++ b/pygmt/src/text.py @@ -6,7 +6,7 @@ from pygmt.clib import Session from pygmt.exceptions import GMTInvalidInput from pygmt.helpers import ( - build_arg_string, + build_arg_list, data_kind, fmt_docstring, is_nonstr_iter, @@ -37,12 +37,7 @@ t="transparency", w="wrap", ) -@kwargs_to_strings( - R="sequence", - textfiles="sequence_space", - c="sequence_comma", - p="sequence", -) +@kwargs_to_strings(R="sequence", c="sequence_comma", p="sequence") def text_( # noqa: PLR0912 self, textfiles=None, @@ -240,4 +235,4 @@ def text_( # noqa: PLR0912 with lib.virtualfile_in( check_kind="vector", data=textfiles, x=x, y=y, extra_arrays=extra_arrays ) as vintbl: - lib.call_module(module="text", args=build_arg_string(kwargs, infile=vintbl)) + lib.call_module(module="text", args=build_arg_list(kwargs, infile=vintbl)) diff --git a/pygmt/src/tilemap.py b/pygmt/src/tilemap.py index 168b2a2131f..1fe98ea1f1b 100644 --- a/pygmt/src/tilemap.py +++ b/pygmt/src/tilemap.py @@ -6,7 +6,7 @@ from pygmt.clib import Session from pygmt.datasets.tile_map import load_tile_map -from pygmt.helpers import build_arg_string, fmt_docstring, kwargs_to_strings, use_alias +from pygmt.helpers import build_arg_list, fmt_docstring, kwargs_to_strings, use_alias try: import rioxarray # noqa: F401 @@ -152,5 +152,5 @@ def tilemap( with Session() as lib: with lib.virtualfile_in(check_kind="raster", data=raster) as vingrd: lib.call_module( - module="grdimage", args=build_arg_string(kwargs, infile=vingrd) + module="grdimage", args=build_arg_list(kwargs, infile=vingrd) ) diff --git a/pygmt/src/timestamp.py b/pygmt/src/timestamp.py index c7cc18574cf..1dbd8a86c17 100644 --- a/pygmt/src/timestamp.py +++ b/pygmt/src/timestamp.py @@ -9,7 +9,7 @@ from packaging.version import Version from pygmt.clib import Session, __gmt_version__ -from pygmt.helpers import build_arg_string, deprecate_parameter, kwargs_to_strings +from pygmt.helpers import build_arg_list, deprecate_parameter, kwargs_to_strings if TYPE_CHECKING: from collections.abc import Sequence @@ -114,7 +114,7 @@ def timestamp( with Session() as lib: lib.call_module( module="plot", - args=build_arg_string( + args=build_arg_list( kwdict, confdict={"FONT_LOGO": font, "FORMAT_TIME_STAMP": timefmt} ), ) diff --git a/pygmt/src/triangulate.py b/pygmt/src/triangulate.py index 7a64178c99a..175ca57f905 100644 --- a/pygmt/src/triangulate.py +++ b/pygmt/src/triangulate.py @@ -10,7 +10,7 @@ from pygmt.clib import Session from pygmt.helpers import ( GMTTempFile, - build_arg_string, + build_arg_list, fmt_docstring, kwargs_to_strings, use_alias, @@ -146,7 +146,7 @@ def regular_grid(data=None, x=None, y=None, z=None, **kwargs): kwargs["G"] = outgrid = tmpfile.name # output to tmpfile lib.call_module( module="triangulate", - args=build_arg_string(kwargs, infile=vintbl), + args=build_arg_list(kwargs, infile=vintbl), ) return load_dataarray(outgrid) if outgrid == tmpfile.name else None @@ -247,6 +247,6 @@ def delaunay_triples( ): lib.call_module( module="triangulate", - args=build_arg_string(kwargs, infile=vintbl, outfile=vouttbl), + args=build_arg_list(kwargs, infile=vintbl, outfile=vouttbl), ) return lib.virtualfile_to_dataset(vfname=vouttbl, output_type=output_type) diff --git a/pygmt/src/velo.py b/pygmt/src/velo.py index 2c349c6b265..4c536cb2ea0 100644 --- a/pygmt/src/velo.py +++ b/pygmt/src/velo.py @@ -7,7 +7,7 @@ from pygmt.clib import Session from pygmt.exceptions import GMTInvalidInput from pygmt.helpers import ( - build_arg_string, + build_arg_list, fmt_docstring, kwargs_to_strings, use_alias, @@ -255,4 +255,4 @@ def velo(self, data=None, **kwargs): with Session() as lib: with lib.virtualfile_in(check_kind="vector", data=data) as vintbl: - lib.call_module(module="velo", args=build_arg_string(kwargs, infile=vintbl)) + lib.call_module(module="velo", args=build_arg_list(kwargs, infile=vintbl)) diff --git a/pygmt/src/which.py b/pygmt/src/which.py index c4afd1d006d..2871693c666 100644 --- a/pygmt/src/which.py +++ b/pygmt/src/which.py @@ -3,12 +3,11 @@ """ from pygmt.clib import Session -from pygmt.helpers import build_arg_string, fmt_docstring, kwargs_to_strings, use_alias +from pygmt.helpers import build_arg_list, fmt_docstring, is_nonstr_iter, use_alias @fmt_docstring @use_alias(G="download", V="verbose") -@kwargs_to_strings(fname="sequence_space") def which(fname, **kwargs) -> str | list[str]: r""" Find the full path to specified files. @@ -62,13 +61,13 @@ def which(fname, **kwargs) -> str | list[str]: with lib.virtualfile_out(kind="dataset") as vouttbl: lib.call_module( module="which", - args=build_arg_string(kwargs, infile=fname, outfile=vouttbl), + args=build_arg_list(kwargs, infile=fname, outfile=vouttbl), ) paths = lib.virtualfile_to_dataset(vfname=vouttbl, output_type="strings") match paths.size: case 0: - _fname = fname.replace(" ", "', '") + _fname = "', '".join(fname) if is_nonstr_iter(fname) else fname raise FileNotFoundError(f"File(s) '{_fname}' not found.") case 1: return paths[0] diff --git a/pygmt/src/wiggle.py b/pygmt/src/wiggle.py index 96bf3be0f6d..921c5317349 100644 --- a/pygmt/src/wiggle.py +++ b/pygmt/src/wiggle.py @@ -3,7 +3,7 @@ """ from pygmt.clib import Session -from pygmt.helpers import build_arg_string, fmt_docstring, kwargs_to_strings, use_alias +from pygmt.helpers import build_arg_list, fmt_docstring, kwargs_to_strings, use_alias @fmt_docstring @@ -110,6 +110,4 @@ def wiggle( with lib.virtualfile_in( check_kind="vector", data=data, x=x, y=y, z=z, required_z=True ) as vintbl: - lib.call_module( - module="wiggle", args=build_arg_string(kwargs, infile=vintbl) - ) + lib.call_module(module="wiggle", args=build_arg_list(kwargs, infile=vintbl)) diff --git a/pygmt/src/x2sys_cross.py b/pygmt/src/x2sys_cross.py index c530c964025..eadd20dcfb2 100644 --- a/pygmt/src/x2sys_cross.py +++ b/pygmt/src/x2sys_cross.py @@ -12,7 +12,7 @@ from pygmt.exceptions import GMTInvalidInput from pygmt.helpers import ( GMTTempFile, - build_arg_string, + build_arg_list, data_kind, fmt_docstring, kwargs_to_strings, @@ -223,9 +223,7 @@ def x2sys_cross(tracks=None, outfile=None, **kwargs): outfile = tmpfile.name lib.call_module( module="x2sys_cross", - args=build_arg_string( - kwargs, infile=" ".join(fnames), outfile=outfile - ), + args=build_arg_list(kwargs, infile=fnames, outfile=outfile), ) # Read temporary csv output to a pandas table diff --git a/pygmt/src/x2sys_init.py b/pygmt/src/x2sys_init.py index f4107e6f0b6..b6ce159abc7 100644 --- a/pygmt/src/x2sys_init.py +++ b/pygmt/src/x2sys_init.py @@ -3,7 +3,7 @@ """ from pygmt.clib import Session -from pygmt.helpers import build_arg_string, fmt_docstring, kwargs_to_strings, use_alias +from pygmt.helpers import build_arg_list, fmt_docstring, kwargs_to_strings, use_alias @fmt_docstring @@ -111,4 +111,4 @@ def x2sys_init(tag, **kwargs): {distcalc} """ with Session() as lib: - lib.call_module(module="x2sys_init", args=build_arg_string(kwargs, infile=tag)) + lib.call_module(module="x2sys_init", args=build_arg_list(kwargs, infile=tag)) diff --git a/pygmt/src/xyz2grd.py b/pygmt/src/xyz2grd.py index fcd7a2211b8..9140e4438f7 100644 --- a/pygmt/src/xyz2grd.py +++ b/pygmt/src/xyz2grd.py @@ -6,7 +6,7 @@ from pygmt.exceptions import GMTInvalidInput from pygmt.helpers import ( GMTTempFile, - build_arg_string, + build_arg_list, fmt_docstring, kwargs_to_strings, use_alias, @@ -158,7 +158,7 @@ def xyz2grd(data=None, x=None, y=None, z=None, **kwargs): if (outgrid := kwargs.get("G")) is None: kwargs["G"] = outgrid = tmpfile.name # output to tmpfile lib.call_module( - module="xyz2grd", args=build_arg_string(kwargs, infile=vintbl) + module="xyz2grd", args=build_arg_list(kwargs, infile=vintbl) ) return load_dataarray(outgrid) if outgrid == tmpfile.name else None diff --git a/pygmt/tests/test_geopandas.py b/pygmt/tests/test_geopandas.py index af40cc8e6d4..77fa7a9f9d5 100644 --- a/pygmt/tests/test_geopandas.py +++ b/pygmt/tests/test_geopandas.py @@ -49,7 +49,7 @@ def fixture_gdf_ridge(): """ # Read shapefile into a geopandas.GeoDataFrame shapefile = which( - fname="@RidgeTest.shp @RidgeTest.shx @RidgeTest.dbf @RidgeTest.prj", + fname=["@RidgeTest.shp", "@RidgeTest.shx", "@RidgeTest.dbf", "@RidgeTest.prj"], download="c", ) gdf = gpd.read_file(shapefile[0]) From 1667a0aaacc53f64706635dbcf85db37a545c8ab Mon Sep 17 00:00:00 2001 From: Dongdong Tian Date: Fri, 22 Mar 2024 14:55:56 +0800 Subject: [PATCH 2/4] Improve the data_kind function to support multiple files --- pygmt/helpers/utils.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/pygmt/helpers/utils.py b/pygmt/helpers/utils.py index 204519c3cf2..0fcd61d6673 100644 --- a/pygmt/helpers/utils.py +++ b/pygmt/helpers/utils.py @@ -174,7 +174,11 @@ def data_kind(data=None, x=None, y=None, z=None, required_z=False, required_data 'image' """ # determine the data kind - if isinstance(data, str | pathlib.PurePath): + if isinstance(data, str | pathlib.PurePath) or ( + isinstance(data, list | tuple) + and all(isinstance(_file, str | pathlib.PurePath) for _file in data) + ): + # One or more files kind = "file" elif isinstance(data, bool | int | float) or (data is None and not required_data): kind = "arg" From df3ffdc237efeac1a756b4177ccd7a6c89306c67 Mon Sep 17 00:00:00 2001 From: Dongdong Tian Date: Fri, 22 Mar 2024 15:35:22 +0800 Subject: [PATCH 3/4] Figure.legend should not accept a list of spec files --- pygmt/src/legend.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pygmt/src/legend.py b/pygmt/src/legend.py index fcf5afac82d..e5a7ebefab0 100644 --- a/pygmt/src/legend.py +++ b/pygmt/src/legend.py @@ -8,6 +8,7 @@ build_arg_list, data_kind, fmt_docstring, + is_nonstr_iter, kwargs_to_strings, use_alias, ) @@ -77,7 +78,8 @@ def legend(self, spec=None, position="JTR+jTR+o0.2c", box="+gwhite+p1p", **kwarg with Session() as lib: if spec is None: specfile = "" - elif data_kind(spec) == "file": + elif data_kind(spec) == "file" and not is_nonstr_iter(spec): + # Is a file but not a list of files specfile = spec else: raise GMTInvalidInput(f"Unrecognized data type: {type(spec)}") From 8e8bb306cb7b3761fd8954d61684d0cbf1046a18 Mon Sep 17 00:00:00 2001 From: actions-bot <58130806+actions-bot@users.noreply.github.com> Date: Tue, 16 Apr 2024 14:08:05 +0000 Subject: [PATCH 4/4] [format-command] fixes --- pygmt/src/binstats.py | 2 +- pygmt/src/dimfilter.py | 2 +- pygmt/src/grdfilter.py | 2 +- pygmt/src/xyz2grd.py | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/pygmt/src/binstats.py b/pygmt/src/binstats.py index bd5e071d828..d60a337d8b2 100644 --- a/pygmt/src/binstats.py +++ b/pygmt/src/binstats.py @@ -111,4 +111,4 @@ def binstats(data, outgrid: str | None = None, **kwargs): lib.call_module( module="binstats", args=build_arg_list(kwargs, infile=vintbl) ) - return lib.virtualfile_to_raster(vfname=voutgrd, outgrid=outgrid) \ No newline at end of file + return lib.virtualfile_to_raster(vfname=voutgrd, outgrid=outgrid) diff --git a/pygmt/src/dimfilter.py b/pygmt/src/dimfilter.py index 997a54e1c54..0498fb02e7c 100644 --- a/pygmt/src/dimfilter.py +++ b/pygmt/src/dimfilter.py @@ -150,4 +150,4 @@ def dimfilter(grid, outgrid: str | None = None, **kwargs): lib.call_module( module="dimfilter", args=build_arg_list(kwargs, infile=vingrd) ) - return lib.virtualfile_to_raster(vfname=voutgrd, outgrid=outgrid) \ No newline at end of file + return lib.virtualfile_to_raster(vfname=voutgrd, outgrid=outgrid) diff --git a/pygmt/src/grdfilter.py b/pygmt/src/grdfilter.py index e702f31fd7f..6944a4d0be3 100644 --- a/pygmt/src/grdfilter.py +++ b/pygmt/src/grdfilter.py @@ -133,4 +133,4 @@ def grdfilter(grid, outgrid: str | None = None, **kwargs): lib.call_module( module="grdfilter", args=build_arg_list(kwargs, infile=vingrd) ) - return lib.virtualfile_to_raster(vfname=voutgrd, outgrid=outgrid) \ No newline at end of file + return lib.virtualfile_to_raster(vfname=voutgrd, outgrid=outgrid) diff --git a/pygmt/src/xyz2grd.py b/pygmt/src/xyz2grd.py index 8a642a93e54..2eedfb62e83 100644 --- a/pygmt/src/xyz2grd.py +++ b/pygmt/src/xyz2grd.py @@ -153,4 +153,4 @@ def xyz2grd(data=None, x=None, y=None, z=None, outgrid: str | None = None, **kwa lib.call_module( module="xyz2grd", args=build_arg_list(kwargs, infile=vintbl) ) - return lib.virtualfile_to_raster(vfname=voutgrd, outgrid=outgrid) \ No newline at end of file + return lib.virtualfile_to_raster(vfname=voutgrd, outgrid=outgrid)