# SPDX-FileCopyrightText: 2024 The eminus developers
# SPDX-License-Identifier: Apache-2.0
from typing import Final, TypeAlias, TypeVar

from numpy import floating
from numpy.typing import NDArray

_Float: TypeAlias = floating
_ArrayReal: TypeAlias = NDArray[_Float]
_ScalarOrArrayReal = TypeVar("_ScalarOrArrayReal", float, _Float, _ArrayReal)

electronvolt: Final[float]
eV: Final[float]  # noqa: N816
kcalmol: Final[float]
Angstrom: Final[float]
A: Final[float]
Debye: Final[float]
D: Final[float]
Kelvin: Final[float]
K: Final[float]

def ha2ev(E: _ScalarOrArrayReal) -> _ScalarOrArrayReal: ...
def ev2ha(E: _ScalarOrArrayReal) -> _ScalarOrArrayReal: ...
def ha2kcalmol(E: _ScalarOrArrayReal) -> _ScalarOrArrayReal: ...
def kcalmol2ha(E: _ScalarOrArrayReal) -> _ScalarOrArrayReal: ...
def ha2ry(E: _ScalarOrArrayReal) -> _ScalarOrArrayReal: ...
def ry2ha(E: _ScalarOrArrayReal) -> _ScalarOrArrayReal: ...
def ha2kelvin(E: _ScalarOrArrayReal) -> _ScalarOrArrayReal: ...
def kelvin2ha(T: _ScalarOrArrayReal) -> _ScalarOrArrayReal: ...
def ang2bohr(r: _ScalarOrArrayReal) -> _ScalarOrArrayReal: ...
def bohr2ang(r: _ScalarOrArrayReal) -> _ScalarOrArrayReal: ...
def ebohr2d(p: _ScalarOrArrayReal) -> _ScalarOrArrayReal: ...
def d2ebohr(p: _ScalarOrArrayReal) -> _ScalarOrArrayReal: ...
def rad2deg(a: _ScalarOrArrayReal) -> _ScalarOrArrayReal: ...
def deg2rad(a: _ScalarOrArrayReal) -> _ScalarOrArrayReal: ...
