Skip to content

Commit 3fcb824

Browse files
pygmt.project: Add input validation for geometry parameters (#4415)
Co-authored-by: Dongdong Tian <seisman.info@gmail.com>
1 parent 81de8f0 commit 3fcb824

2 files changed

Lines changed: 24 additions & 0 deletions

File tree

pygmt/src/project.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,15 @@ def project( # noqa: PLR0913
229229
if kwargs.get("G") is not None and kwargs.get("F") is not None:
230230
raise GMTParameterError(at_most_one=["convention", "generate"])
231231

232+
# Input validation for only one geometry parameter
233+
geometry_params = [
234+
kwargs.get("A", azimuth) is not None,
235+
kwargs.get("E", endpoint) is not None,
236+
kwargs.get("T", pole) is not None,
237+
]
238+
if sum(geometry_params) > 1:
239+
raise GMTParameterError(at_most_one=["azimuth", "endpoint", "pole"])
240+
232241
output_type = validate_output_table_type(output_type, outfile=outfile)
233242

234243
column_names = None

pygmt/tests/test_project.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,3 +90,18 @@ def test_project_incorrect_parameters():
9090
with pytest.raises(GMTParameterError):
9191
# Using `generate` with `convention`
9292
project(center=[0, -1], generate=0.5, convention="xypqrsz")
93+
94+
95+
def test_project_geometry_definition_validation(dataframe):
96+
"""
97+
Validate input validation for mutually exclusive projection geometry parameters.
98+
"""
99+
kwdict = {"center": [0, -1], "data": dataframe}
100+
with pytest.raises(GMTParameterError):
101+
project(endpoint=[0, 1], azimuth=45, **kwdict)
102+
with pytest.raises(GMTParameterError):
103+
project(endpoint=[0, 1], pole=[0, 90], **kwdict)
104+
with pytest.raises(GMTParameterError):
105+
project(pole=[0, 90], azimuth=45, **kwdict)
106+
with pytest.raises(GMTParameterError):
107+
project(pole=[0, 90], azimuth=45, endpoint=[0, 1], **kwdict)

0 commit comments

Comments
 (0)