from typing import Optional, overload
import numpy as np
from .. import structures as struct
__all__ = [
"abs",
"arccos",
"arccosh",
"arcsin",
"arcsinh",
"arctan",
"arctanh",
"cbrt",
"cos",
"cosh",
"exp",
"log",
"sin",
"sinh",
"sqrt",
"struct",
"tan",
"tanh",
]
@overload
def abs(input: "struct.Cube") -> "struct.Cube":
...
@overload
def abs(input: "struct.Map") -> "struct.Map":
...
@overload
def abs(input: "struct.Profile") -> "struct.Profile":
...
[docs]
def abs(input: "struct.Struct") -> "struct.Struct":
"""
Element-wise absolute value operator.
Parameters
----------
input : `Cube | Map | Profile`
Input structure.
Returns
-------
out : `Cube | Map | Profile`
Output structure.
"""
return type(input)(np.abs(input.data), input.header)
@overload
def sqrt(input: "struct.Cube") -> "struct.Cube":
...
@overload
def sqrt(input: "struct.Map") -> "struct.Map":
...
@overload
def sqrt(input: "struct.Profile") -> "struct.Profile":
...
[docs]
def sqrt(input: "struct.Struct") -> "struct.Struct":
"""
Element-wise square root operator.
Parameters
----------
input : `Cube | Map | Profile`
Input structure.
Returns
-------
out : `Cube | Map | Profile`
Output structure.
"""
return type(input)(np.sqrt(input.data), input.header)
@overload
def cbrt(input: "struct.Cube") -> "struct.Cube":
...
@overload
def cbrt(input: "struct.Map") -> "struct.Map":
...
@overload
def cbrt(input: "struct.Profile") -> "struct.Profile":
...
[docs]
def cbrt(input: "struct.Struct") -> "struct.Struct":
"""
Element-wise cube root operator.
Parameters
----------
input : `Cube | Map | Profile`
Input structure.
Returns
-------
out : `Cube | Map | Profile`
Output structure.
"""
return type(input)(np.cbrt(input.data), input.header)
@overload
def exp(input: "struct.Cube") -> "struct.Cube":
...
@overload
def exp(input: "struct.Map") -> "struct.Map":
...
@overload
def exp(input: "struct.Profile") -> "struct.Profile":
...
[docs]
def exp(input: "struct.Struct"):
"""
Element-wise exponential operator.
Parameters
----------
input : `Cube | Map | Profile`
Input structure.
Returns
-------
out : `Cube | Map | Profile`
Output structure.
"""
return type(input)(np.exp(input.data), input.header)
@overload
def log(input: "struct.Cube", base: Optional[float] = None) -> "struct.Cube":
...
@overload
def log(input: "struct.Map", base: Optional[float] = None) -> "struct.Map":
...
@overload
def log(input: "struct.Profile", base: Optional[float] = None) -> "struct.Profile":
...
[docs]
def log(input: "struct.Struct", base: Optional[float] = None):
"""
Element-wise logarithm operator.
Parameters
----------
input : `Cube | Map | Profile`
Input structure.
base : `float | None`, optional
Base of the logarithm (by default natural logarithm). Must a positive number.
Returns
-------
out : `Cube | Map | Profile`
Output structure.
"""
if base is None:
return type(input)(np.log(input.data), input.header)
return type(input)(np.log(input.data) / np.log(base), input.header)
@overload
def cos(input: "struct.Cube") -> "struct.Cube":
...
@overload
def cos(input: "struct.Map") -> "struct.Map":
...
@overload
def cos(input: "struct.Profile") -> "struct.Profile":
...
[docs]
def cos(input: "struct.Struct"):
"""
Element-wise cosine operator.
Parameters
----------
input : `Cube | Map | Profile`
Input structure.
Returns
-------
out : `Cube | Map | Profile`
Output structure.
"""
return type(input)(np.cos(input.data), input.header)
@overload
def sin(input: "struct.Cube") -> "struct.Cube":
...
@overload
def sin(input: "struct.Map") -> "struct.Map":
...
@overload
def sin(input: "struct.Profile") -> "struct.Profile":
...
[docs]
def sin(input: "struct.Struct"):
"""
Element-wise sine operator.
Parameters
----------
input : `Cube | Map | Profile`
Input structure.
Returns
-------
out : `Cube | Map | Profile`
Output structure.
"""
return type(input)(np.sin(input.data), input.header)
@overload
def tan(input: "struct.Cube") -> "struct.Cube":
...
@overload
def tan(input: "struct.Map") -> "struct.Map":
...
@overload
def tan(input: "struct.Profile") -> "struct.Profile":
...
[docs]
def tan(input: "struct.Struct"):
"""
Element-wise tangent operator.
Parameters
----------
input : `Cube | Map | Profile`
Input structure.
Returns
-------
out : `Cube | Map | Profile`
Output structure.
"""
return type(input)(np.tan(input.data), input.header)
@overload
def arccos(input: "struct.Cube") -> "struct.Cube":
...
@overload
def arccos(input: "struct.Map") -> "struct.Map":
...
@overload
def arccos(input: "struct.Profile") -> "struct.Profile":
...
[docs]
def arccos(input: "struct.Struct"):
"""
Element-wise inverse cosine operator.
Parameters
----------
input : `Cube | Map | Profile`
Input structure.
Returns
-------
out : `Cube | Map | Profile`
Output structure.
"""
return type(input)(np.arccos(input.data), input.header)
@overload
def arcsin(input: "struct.Cube") -> "struct.Cube":
...
@overload
def arcsin(input: "struct.Map") -> "struct.Map":
...
@overload
def arcsin(input: "struct.Profile") -> "struct.Profile":
...
[docs]
def arcsin(input: "struct.Struct"):
"""
Element-wise inverse sine operator.
Parameters
----------
input : `Cube | Map | Profile`
Input structure.
Returns
-------
out : `Cube | Map | Profile`
Output structure.
"""
return type(input)(np.arcsin(input.data), input.header)
@overload
def arctan(input: "struct.Cube") -> "struct.Cube":
...
@overload
def arctan(input: "struct.Map") -> "struct.Map":
...
@overload
def arctan(input: "struct.Profile") -> "struct.Profile":
...
[docs]
def arctan(input: "struct.Struct"):
"""
Element-wise inverse tangent operator.
Parameters
----------
input : `Cube | Map | Profile`
Input structure.
Returns
-------
out : `Cube | Map | Profile`
Output structure.
"""
return type(input)(np.arctan(input.data), input.header)
@overload
def cosh(input: "struct.Cube") -> "struct.Cube":
...
@overload
def cosh(input: "struct.Map") -> "struct.Map":
...
@overload
def cosh(input: "struct.Profile") -> "struct.Profile":
...
[docs]
def cosh(input: "struct.Struct"):
"""
Element-wise hyperbolic cosine operator.
Parameters
----------
input : `Cube | Map | Profile`
Input structure.
Returns
-------
out : `Cube | Map | Profile`
Output structure.
"""
return type(input)(np.cosh(input.data), input.header)
@overload
def sinh(input: "struct.Cube") -> "struct.Cube":
...
@overload
def sinh(input: "struct.Map") -> "struct.Map":
...
@overload
def sinh(input: "struct.Profile") -> "struct.Profile":
...
[docs]
def sinh(input: "struct.Struct"):
"""
Element-wise hyperbolic sine operator.
Parameters
----------
input : `Cube | Map | Profile`
Input structure.
Returns
-------
out : `Cube | Map | Profile`
Output structure.
"""
return type(input)(np.sinh(input.data), input.header)
@overload
def tanh(input: "struct.Cube") -> "struct.Cube":
...
@overload
def tanh(input: "struct.Map") -> "struct.Map":
...
@overload
def tanh(input: "struct.Profile") -> "struct.Profile":
...
[docs]
def tanh(input: "struct.Struct"):
"""
Element-wise hyperbolic tangent operator.
Parameters
----------
input : `Cube | Map | Profile`
Input structure.
Returns
-------
out : `Cube | Map | Profile`
Output structure.
"""
return type(input)(np.tanh(input.data), input.header)
@overload
def arccosh(input: "struct.Cube") -> "struct.Cube":
...
@overload
def arccosh(input: "struct.Map") -> "struct.Map":
...
@overload
def arccosh(input: "struct.Profile") -> "struct.Profile":
...
[docs]
def arccosh(input: "struct.Struct"):
"""
Element-wise inverse hyperbolic cosine operator.
Parameters
----------
input : `Cube | Map | Profile`
Input structure.
Returns
-------
out : `Cube | Map | Profile`
Output structure.
"""
return type(input)(np.arccosh(input.data), input.header)
@overload
def arcsinh(input: "struct.Cube") -> "struct.Cube":
...
@overload
def arcsinh(input: "struct.Map") -> "struct.Map":
...
@overload
def arcsinh(input: "struct.Profile") -> "struct.Profile":
...
[docs]
def arcsinh(input: "struct.Struct"):
"""
Element-wise inverse hyperbolic sine operator.
Parameters
----------
input : `Cube | Map | Profile`
Input structure.
Returns
-------
out : `Cube | Map | Profile`
Output structure.
"""
return type(input)(np.arcsinh(input.data), input.header)
@overload
def arctanh(input: "struct.Cube") -> "struct.Cube":
...
@overload
def arctanh(input: "struct.Map") -> "struct.Map":
...
@overload
def arctanh(input: "struct.Profile") -> "struct.Profile":
...
[docs]
def arctanh(input: "struct.Struct"):
"""
Element-wise inverse hyperbolic tangent operator.
Parameters
----------
input : `Cube | Map | Profile`
Input structure.
Returns
-------
out : `Cube | Map | Profile`
Output structure.
"""
return type(input)(np.arctanh(input.data), input.header)