22grdvolume - Calculate grid volume and area constrained by a contour.
33"""
44
5+ from typing import Literal
6+
7+ import numpy as np
58import pandas as pd
69from pygmt .clib import Session
710from pygmt .helpers import (
8- GMTTempFile ,
911 build_arg_string ,
1012 fmt_docstring ,
1113 kwargs_to_strings ,
2426 V = "verbose" ,
2527)
2628@kwargs_to_strings (C = "sequence" , R = "sequence" )
27- def grdvolume (grid , output_type = "pandas" , outfile = None , ** kwargs ):
29+ def grdvolume (
30+ grid ,
31+ output_type : Literal ["pandas" , "numpy" , "file" ] = "pandas" ,
32+ outfile : str | None = None ,
33+ ** kwargs ,
34+ ) -> pd .DataFrame | np .ndarray | None :
2835 r"""
2936 Determine the volume between the surface of a grid and a plane.
3037
@@ -41,15 +48,8 @@ def grdvolume(grid, output_type="pandas", outfile=None, **kwargs):
4148 Parameters
4249 ----------
4350 {grid}
44- output_type : str
45- Determine the format the output data will be returned in [Default is
46- ``pandas``]:
47-
48- - ``numpy`` - :class:`numpy.ndarray`
49- - ``pandas``- :class:`pandas.DataFrame`
50- - ``file`` - ASCII file (requires ``outfile``)
51- outfile : str
52- The file name for the output ASCII file.
51+ {output_type}
52+ {outfile}
5353 contour : str, float, or list
5454 *cval*\|\ *low/high/delta*\|\ **r**\ *low/high*\|\ **r**\ *cval*.
5555 Find area, volume and mean height (volume/area) inside and above the
@@ -69,14 +69,13 @@ def grdvolume(grid, output_type="pandas", outfile=None, **kwargs):
6969
7070 Returns
7171 -------
72- ret : pandas.DataFrame or numpy.ndarray or None
72+ ret
7373 Return type depends on ``outfile`` and ``output_type``:
7474
75- - None if ``outfile`` is set (output will be stored in file set by
75+ - `` None`` if ``outfile`` is set (output will be stored in file set by
7676 ``outfile``)
77- - :class:`pandas.DataFrame` or :class:`numpy.ndarray` if ``outfile``
78- is not set (depends on ``output_type`` [Default is
79- :class:`pandas.DataFrame`])
77+ - :class:`pandas.DataFrame` or :class:`numpy.ndarray` if ``outfile`` is not set
78+ (depends on ``output_type``)
8079
8180 Example
8281 -------
@@ -103,22 +102,13 @@ def grdvolume(grid, output_type="pandas", outfile=None, **kwargs):
103102 """
104103 output_type = validate_output_table_type (output_type , outfile = outfile )
105104
106- with GMTTempFile () as tmpfile :
107- with Session () as lib :
108- with lib .virtualfile_in (check_kind = "raster" , data = grid ) as vingrd :
109- if outfile is None :
110- outfile = tmpfile .name
111- lib .call_module (
112- module = "grdvolume" ,
113- args = build_arg_string (kwargs , infile = vingrd , outfile = outfile ),
114- )
115-
116- # Read temporary csv output to a pandas table
117- if outfile == tmpfile .name : # if user did not set outfile, return pd.DataFrame
118- result = pd .read_csv (tmpfile .name , sep = "\t " , header = None , comment = ">" )
119- elif outfile != tmpfile .name : # return None if outfile set, output in outfile
120- result = None
121-
122- if output_type == "numpy" :
123- result = result .to_numpy ()
124- return result
105+ with Session () as lib :
106+ with (
107+ lib .virtualfile_in (check_kind = "raster" , data = grid ) as vingrd ,
108+ lib .virtualfile_out (kind = "dataset" , fname = outfile ) as vouttbl ,
109+ ):
110+ lib .call_module (
111+ module = "grdvolume" ,
112+ args = build_arg_string (kwargs , infile = vingrd , outfile = vouttbl ),
113+ )
114+ return lib .virtualfile_to_dataset (output_type = output_type , vfname = vouttbl )
0 commit comments