2
2
filter1d - Time domain filtering of 1-D data tables
3
3
"""
4
4
5
- import pandas as pd
5
+ from typing import Literal
6
+
6
7
from pygmt .clib import Session
7
8
from pygmt .exceptions import GMTInvalidInput
8
9
from pygmt .helpers import (
9
- GMTTempFile ,
10
10
build_arg_string ,
11
11
fmt_docstring ,
12
12
use_alias ,
20
20
F = "filter_type" ,
21
21
N = "time_col" ,
22
22
)
23
- def filter1d (data , output_type = "pandas" , outfile = None , ** kwargs ):
23
+ def filter1d (
24
+ data ,
25
+ output_type : Literal ["pandas" , "numpy" , "file" ] = "pandas" ,
26
+ outfile : str | None = None ,
27
+ ** kwargs ,
28
+ ):
24
29
r"""
25
30
Time domain filtering of 1-D data tables.
26
31
@@ -38,6 +43,14 @@ def filter1d(data, output_type="pandas", outfile=None, **kwargs):
38
43
39
44
Parameters
40
45
----------
46
+ output_type
47
+ Desired output type of the result data.
48
+ - ``pandas`` will return a :class:`pandas.DataFrame` object.
49
+ - ``numpy`` will return a :class:`numpy.ndarray` object.
50
+ - ``file`` will save the result to the file given by the ``outfile`` parameter.
51
+ outfile
52
+ File name for saving the result data. Required if ``output_type`` is ``"file"``.
53
+ If specified, ``output_type`` will be forced to be ``"file"``.
41
54
filter_type : str
42
55
**type**\ *width*\ [**+h**].
43
56
Set the filter **type**. Choose among convolution and non-convolution
@@ -91,48 +104,26 @@ def filter1d(data, output_type="pandas", outfile=None, **kwargs):
91
104
left-most column is 0, while the right-most is (*n_cols* - 1)
92
105
[Default is ``0``].
93
106
94
- output_type : str
95
- Determine the format the xyz data will be returned in [Default is
96
- ``pandas``]:
97
-
98
- - ``numpy`` - :class:`numpy.ndarray`
99
- - ``pandas``- :class:`pandas.DataFrame`
100
- - ``file`` - ASCII file (requires ``outfile``)
101
- outfile : str
102
- The file name for the output ASCII file.
103
-
104
107
Returns
105
108
-------
106
- ret : pandas.DataFrame or numpy.ndarray or None
109
+ ret
107
110
Return type depends on ``outfile`` and ``output_type``:
108
-
109
- - None if ``outfile`` is set (output will be stored in file set by
110
- ``outfile``)
111
- - :class:`pandas.DataFrame` or :class:`numpy.ndarray` if ``outfile`` is
112
- not set (depends on ``output_type`` [Default is
113
- :class:`pandas.DataFrame`])
111
+ - None if ``outfile`` is set (output will be stored in file set by ``outfile``)
112
+ - :class:`pandas.DataFrame` or :class:`numpy.ndarray` if ``outfile`` is not set
113
+ (depends on ``output_type``)
114
114
"""
115
115
if kwargs .get ("F" ) is None :
116
116
raise GMTInvalidInput ("Pass a required argument to 'filter_type'." )
117
117
118
118
output_type = validate_output_table_type (output_type , outfile = outfile )
119
119
120
- with GMTTempFile () as tmpfile :
121
- with Session () as lib :
122
- with lib .virtualfile_in (check_kind = "vector" , data = data ) as vintbl :
123
- if outfile is None :
124
- outfile = tmpfile .name
125
- lib .call_module (
126
- module = "filter1d" ,
127
- args = build_arg_string (kwargs , infile = vintbl , outfile = outfile ),
128
- )
129
-
130
- # Read temporary csv output to a pandas table
131
- if outfile == tmpfile .name : # if user did not set outfile, return pd.DataFrame
132
- result = pd .read_csv (tmpfile .name , sep = "\t " , header = None , comment = ">" )
133
- elif outfile != tmpfile .name : # return None if outfile set, output in outfile
134
- result = None
135
-
136
- if output_type == "numpy" :
137
- result = result .to_numpy ()
138
- return result
120
+ with Session () as lib :
121
+ with (
122
+ lib .virtualfile_in (check_kind = "vector" , data = data ) as vintbl ,
123
+ lib .virtualfile_out (kind = "dataset" , fname = outfile ) as vouttbl ,
124
+ ):
125
+ lib .call_module (
126
+ module = "filter1d" ,
127
+ args = build_arg_string (kwargs , infile = vintbl , outfile = vouttbl ),
128
+ )
129
+ return lib .virtualfile_to_dataset (output_type = output_type , vfname = vouttbl )
0 commit comments