Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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