Source code for jaxoplanet.starry.multiprecision.utils
import mpmath
import numpy as np
from jaxoplanet.starry.multiprecision import mp
[docs]
def to_numpy(x):
array = np.array(x.tolist(), dtype=np.float64)
if array.shape[1] == (1):
return array.T[0]
else:
return array
[docs]
def to_mp(x):
return mp.matrix(x.tolist())
[docs]
def diff_mp(M1: np.ndarray | mpmath.matrix, M2: np.ndarray | mpmath.matrix):
"""Returns M1 - M2, at arbitrary precision and casted to numpy.float64.
This function allows comparison of matrices at arbitrary precision if at least one is
a mpmath matrix.
Args:
M1 (np.ndarray or mpmath.matrix): matrix
M2 (np.ndarray or mpmath.matrix): matrix
Returns:
np.ndarray:
difference between M1 and M2, casted to numpy.float64
"""
if isinstance(M1, np.ndarray) and isinstance(M2, np.ndarray):
d = M1 - M2
else:
_M1 = to_mp(M1) if isinstance(M1, np.ndarray) else M1
_M2 = to_mp(M2) if isinstance(M2, np.ndarray) else M2
d = to_numpy(_M1 - _M2).astype(np.float64)
return d
[docs]
def kron_delta(m, n):
return 1 if m == n else 0
[docs]
def fac(n):
if n == 0:
return mp.mpf(1.0)
else:
try:
return mp.fac(n)
except ValueError:
return mp.inf