# Source code for pygmt.mathops

"""
GMT modules for Mathematical operations on tables or grids
"""
from .clib import Session
from .exceptions import GMTInvalidInput
from .helpers import build_arg_string, fmt_docstring, kwargs_to_strings, use_alias

[docs]@fmt_docstring
@use_alias(C="cmap", T="series", G="truncate", H="output", I="reverse", Z="continuous")
@kwargs_to_strings(T="sequence", G="sequence")
def makecpt(**kwargs):
"""
Creates a static color palette table (CPT).

Full option list at :gmt-docs:makecpt.html

{aliases}

Parameters
----------
cmap : str
Selects the master color palette table (CPT) to use in the
interpolation. Full list of built-in color palette tables can be found
at :gmt-docs:cookbook/cpts.html#built-in-color-palette-tables-cpt.
series : list or str
[min/max/inc[+b|l|n]|file|list]. Defines the range of the new CPT
by giving the lowest and highest z-value (and optionally an interval).
If this is not given, the existing range in the master CPT will be used
intact.
truncate : list or str
zlo/zhi. Truncate the incoming CPT so that the lowest and highest
z-levels are to zlo and zhi. If one of these equal NaN then we leave
that end of the CPT alone. The truncation takes place before any
:gmt-docs:cookbook/features.html#manipulating-cpts.
output : str
Optional. The file name with extension .cpt to store the generated CPT
file. If not given or False (default), saves the CPT as the session
current CPT.
reverse : str
Set this to True or c [Default] to reverse the sense of color
progression in the master CPT. Set this to z to reverse the sign of
z-values in the color table. Note that this change of z-direction
happens before *truncate* and *series* values are used so the latter
:gmt-docs:cookbook/features.html#manipulating-cpts.
continuous : bool
Creates a continuous CPT [Default is discontinuous, i.e., constant
colors for each interval]. This option has no effect when no *series*
is used, or when using *series=[z_min, z_max]*; in the first case the
input CPT remains untouched, in the second case it is only scaled to
match the range z_min/z_max.

"""
with Session() as lib:
if "H" not in kwargs.keys():  # if no output is set
arg_str = build_arg_string(kwargs)
elif "H" in kwargs.keys():  # if output is set
outfile = kwargs.pop("H")
if not outfile or not isinstance(outfile, str):
raise GMTInvalidInput("'output' should be a proper file name.")
arg_str = " ".join([build_arg_string(kwargs), f"-H > {outfile}"])
lib.call_module(module="makecpt", args=arg_str)