|
12 | 12 | build_arg_list,
|
13 | 13 | deprecate_parameter,
|
14 | 14 | fmt_docstring,
|
15 |
| - is_nonstr_iter, |
16 | 15 | kwargs_to_strings,
|
| 16 | + sequence_join, |
17 | 17 | use_alias,
|
18 | 18 | )
|
19 | 19 |
|
20 | 20 | __doctest_skip__ = ["grdclip"]
|
21 | 21 |
|
22 | 22 |
|
23 |
| -def _parse_sequence(name, value, separator="/", size=2, ndim=1): |
24 |
| - """ |
25 |
| - Parse a 1-D or 2-D sequence of values and join them by a separator. |
26 |
| -
|
27 |
| - Parameters |
28 |
| - ---------- |
29 |
| - name |
30 |
| - The parameter name. |
31 |
| - value |
32 |
| - The 1-D or 2-D sequence of values to parse. |
33 |
| - separator |
34 |
| - The separator to join the values. |
35 |
| - size |
36 |
| - The number of values in the sequence. |
37 |
| - ndim |
38 |
| - The expected maximum number of dimensions of the sequence. |
39 |
| -
|
40 |
| - Returns |
41 |
| - ------- |
42 |
| - str |
43 |
| - The parsed sequence. |
44 |
| -
|
45 |
| - Examples |
46 |
| - -------- |
47 |
| - >>> _parse_sequence("above_or_below", [1000, 0], size=2, ndim=1) |
48 |
| - '1000/0' |
49 |
| - >>> _parse_sequence("between", [1000, 1500, 10000], size=3, ndim=2) |
50 |
| - '1000/1500/10000' |
51 |
| - >>> _parse_sequence("between", [[1000, 1500, 10000]], size=3, ndim=2) |
52 |
| - ['1000/1500/10000'] |
53 |
| - >>> _parse_sequence( |
54 |
| - ... "between", [[1000, 1500, 10000], [1500, 2000, 20000]], size=3, ndim=2 |
55 |
| - ... ) |
56 |
| - ['1000/1500/10000', '1500/2000/20000'] |
57 |
| - >>> _parse_sequence("replace", [1000, 0], size=2, ndim=2) |
58 |
| - '1000/0' |
59 |
| - >>> _parse_sequence("replace", [[1000, 0]], size=2, ndim=2) |
60 |
| - ['1000/0'] |
61 |
| - >>> _parse_sequence("replace", [[1000, 0], [1500, 10000]], size=2, ndim=2) |
62 |
| - ['1000/0', '1500/10000'] |
63 |
| - >>> _parse_sequence("any", "1000/100") |
64 |
| - '1000/100' |
65 |
| - >>> _parse_sequence("any", None) |
66 |
| - >>> _parse_sequence("any", []) |
67 |
| - [] |
68 |
| - >>> _parse_sequence("above_or_below", [[100, 1000], [1500, 2000]], size=2, ndim=1) |
69 |
| - Traceback (most recent call last): |
70 |
| - ... |
71 |
| - pygmt.exceptions.GMTInvalidInput: Parameter ... must be a 1-D sequence... |
72 |
| - >>> _parse_sequence("above_or_below", [100, 200, 300], size=2, ndim=1) |
73 |
| - Traceback (most recent call last): |
74 |
| - ... |
75 |
| - pygmt.exceptions.GMTInvalidInput: Parameter ... must be a 1-D sequence ... |
76 |
| - >>> _parse_sequence("between", [[100, 200, 300], [500, 600]], size=3, ndim=2) |
77 |
| - Traceback (most recent call last): |
78 |
| - ... |
79 |
| - pygmt.exceptions.GMTInvalidInput: Parameter ... must be a 2-D sequence with ... |
80 |
| - """ |
81 |
| - # Return the value as is if not a sequence (e.g., str or None) or empty. |
82 |
| - if not is_nonstr_iter(value) or len(value) == 0: |
83 |
| - return value |
84 |
| - |
85 |
| - # 1-D sequence |
86 |
| - if not is_nonstr_iter(value[0]): |
87 |
| - if len(value) != size: |
88 |
| - msg = ( |
89 |
| - f"Parameter '{name}' must be a 1-D sequence of {size} values, " |
90 |
| - f"but got {len(value)} values." |
91 |
| - ) |
92 |
| - raise GMTInvalidInput(msg) |
93 |
| - return separator.join(str(i) for i in value) |
94 |
| - |
95 |
| - # 2-D sequence |
96 |
| - if ndim == 1: |
97 |
| - msg = f"Parameter '{name}' must be a 1-D sequence, not a 2-D sequence." |
98 |
| - raise GMTInvalidInput(msg) |
99 |
| - |
100 |
| - if any(len(i) != size for i in value): |
101 |
| - msg = ( |
102 |
| - f"Parameter '{name}' must be a 2-D sequence with each sub-sequence " |
103 |
| - f"having {size} values." |
104 |
| - ) |
105 |
| - raise GMTInvalidInput(msg) |
106 |
| - return [separator.join(str(j) for j in value[i]) for i in range(len(value))] |
107 |
| - |
108 |
| - |
109 | 23 | # TODO(PyGMT>=0.19.0): Remove the deprecated "new" parameter.
|
110 | 24 | @fmt_docstring
|
111 | 25 | @deprecate_parameter("new", "replace", "v0.15.0", remove_version="v0.19.0")
|
@@ -198,10 +112,10 @@ def grdclip(
|
198 | 112 | raise GMTInvalidInput(msg)
|
199 | 113 |
|
200 | 114 | # Parse the -S option.
|
201 |
| - kwargs["Sa"] = _parse_sequence("above", above, size=2, ndim=1) |
202 |
| - kwargs["Sb"] = _parse_sequence("below", below, size=2, ndim=1) |
203 |
| - kwargs["Si"] = _parse_sequence("between", between, size=3, ndim=2) |
204 |
| - kwargs["Sr"] = _parse_sequence("replace", replace, size=2, ndim=2) |
| 115 | + kwargs["Sa"] = sequence_join(above, size=2, name="above") |
| 116 | + kwargs["Sb"] = sequence_join(below, size=2, name="below") |
| 117 | + kwargs["Si"] = sequence_join(between, size=3, ndim=2, name="between") |
| 118 | + kwargs["Sr"] = sequence_join(replace, size=2, ndim=2, name="replace") |
205 | 119 |
|
206 | 120 | with Session() as lib:
|
207 | 121 | with (
|
|
0 commit comments