diff --git a/pygmt/src/project.py b/pygmt/src/project.py index 0b5199b2647..bd9ffe73e93 100644 --- a/pygmt/src/project.py +++ b/pygmt/src/project.py @@ -229,6 +229,15 @@ def project( # noqa: PLR0913 if kwargs.get("G") is not None and kwargs.get("F") is not None: raise GMTParameterError(at_most_one=["convention", "generate"]) + # Input validation for only one geometry parameter + geometry_params = [ + kwargs.get("A") is not None, + kwargs.get("E", endpoint) is not None, + kwargs.get("T", pole) is not None, + ] + if sum(geometry_params) > 1: + raise GMTParameterError(at_most_one=["azimuth", "endpoint", "pole"]) + output_type = validate_output_table_type(output_type, outfile=outfile) column_names = None diff --git a/pygmt/tests/test_project.py b/pygmt/tests/test_project.py index f6580aa6fa5..67ba45603db 100644 --- a/pygmt/tests/test_project.py +++ b/pygmt/tests/test_project.py @@ -90,3 +90,19 @@ def test_project_incorrect_parameters(): with pytest.raises(GMTParameterError): # Using `generate` with `convention` project(center=[0, -1], generate=0.5, convention="xypqrsz") + + +def test_project_geometry_definition_validation(dataframe): + """ + Validate input validation for mutually + exclusive projection geometry parameters. + """ + with pytest.raises(GMTParameterError): + project( + center=[0, -1], + generate=0.5, + data=dataframe, + endpoint=[0, 1], + azimuth=45, + pole=[0, 90], + )