Skip to content

Commit

Permalink
Figure.solar: Add type hints to the 'terminator' parameter and simpli…
Browse files Browse the repository at this point in the history
…fy codes (#2881)

Co-authored-by: Yvonne Fröhlich <[email protected]>
  • Loading branch information
seisman and yvonnefroehlich authored Jan 3, 2024
1 parent 6f26aea commit fbfed86
Showing 1 changed file with 31 additions and 30 deletions.
61 changes: 31 additions & 30 deletions pygmt/src/solar.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
"""
solar - Plot day-night terminators and twilight.
"""
from __future__ import annotations

from typing import Literal

import pandas as pd
from pygmt.clib import Session
from pygmt.exceptions import GMTInvalidInput
Expand All @@ -22,32 +26,38 @@
t="transparency",
)
@kwargs_to_strings(R="sequence", c="sequence_comma", p="sequence")
def solar(self, terminator="d", terminator_datetime=None, **kwargs):
def solar(
self,
terminator: Literal["astronomical", "civil", "day_night", "nautical"] = "day_night",
terminator_datetime=None,
**kwargs,
):
r"""
Plot day-light terminators or twilights.
This function plots the day-night terminator. Alternatively, it can plot
the terminators for civil twilight, nautical twilight, or astronomical
twilight.
This function plots the day-night terminator. Alternatively, it can plot the
terminators for civil twilight, nautical twilight, or astronomical twilight.
Full option list at :gmt-docs:`solar.html`
{aliases}
Parameters
----------
terminator : str
Set the type of terminator displayed. Valid arguments are
``"day_night"``, ``"civil"``, ``"nautical"``, and ``"astronomical"``,
which can be set with either the full name or the first letter of the
name [Default is ``"day_night"``].
terminator
Set the type of terminator displayed, which can be set with either the full name
or the first letter of the name. Available options are:
Refer to https://en.wikipedia.org/wiki/Twilight for the definitions of
different types of twilight.
- ``"astronomical"``: Astronomical twilight
- ``"civil"``: Civil twilight
- ``"day_night"``: Day/night terminator
- ``"nautical"``: Nautical twilight
Refer to https://en.wikipedia.org/wiki/Twilight for the definitions of different
types of twilight.
terminator_datetime : str or datetime object
Set the UTC date and time of the displayed terminator
[Default is the current UTC date and time]. It can be
passed as a string or Python datetime object.
Set the UTC date and time of the displayed terminator [Default is the current
UTC date and time]. It can be passed as a string or Python datetime object.
{region}
{projection}
{frame}
Expand Down Expand Up @@ -86,25 +96,16 @@ def solar(self, terminator="d", terminator_datetime=None, **kwargs):
>>> # show the plot
>>> fig.show()
"""

kwargs = self._preprocess(**kwargs)
if kwargs.get("T") is not None:
msg = "Use 'terminator' and 'terminator_datetime' instead of 'T'."
raise GMTInvalidInput(msg)

valid_terminators = ["day_night", "civil", "nautical", "astronomical"]
if terminator not in valid_terminators and terminator not in "dcna":
raise GMTInvalidInput(
"Use 'terminator' and 'terminator_datetime' instead of 'T'."
)
if terminator not in [
"day_night",
"civil",
"nautical",
"astronomical",
"d",
"c",
"n",
"a",
]:
raise GMTInvalidInput(
f"Unrecognized solar terminator type '{terminator}'. Valid values "
"are 'day_night', 'civil', 'nautical', and 'astronomical'."
f"Unrecognized solar terminator type '{terminator}'. "
f"Valid values are {valid_terminators}."
)
kwargs["T"] = terminator[0]
if terminator_datetime:
Expand Down

0 comments on commit fbfed86

Please sign in to comment.