|
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