Source code for jaxoplanet.experimental.starry.multiprecision.precision

import numpy as np

from jaxoplanet.core.limb_dark import light_curve as ld_light_curve
from jaxoplanet.experimental.starry import Surface, Ylm
from jaxoplanet.experimental.starry.light_curves import surface_light_curve
from jaxoplanet.experimental.starry.multiprecision import flux, mp


[docs] def starry_light_curve( ydeg: int, udeg: int, r: float, order: int, b: float | None = None ) -> float: """Estimate the absolute precision of a starry light curve. Args: ydeg (int): Degree of the spherical harmonics map. udeg (int): Order of the limb darkening polynomial. r (float): Radius ratio. order (int): Numerical integration order. b (float, optional): Impact parameter. Defaults to None. Returns: float: Precision of the jaxoplanet light curve model. """ if b is None: b = 1 - r if r < 1.0 else r u = [1.0] * udeg y = np.ones((ydeg + 1) ** 2) surface = Surface(y=Ylm.from_dense(y), u=u, normalize=False) expected = flux.flux(ydeg=ydeg, udeg=udeg)(b, r, u=u, y=y) calc = surface_light_curve(surface, y=b, z=1.0, r=r, order=order) return float(np.abs(float(mp.mpf(float(calc)) - expected)))
[docs] def limb_dark_light_curve( udeg: int, r: float, order: int, b: float | None = None ) -> float: """Estimate the absolute precision of a limb darkened star light curve. Args: udeg (int): Order of the limb darkening polynomial. r (float): Radius ratio. order (int): Numerical integration order. b (float | None, optional): Impact parameter. Defaults to None. Returns: float: Precision of the jaxoplanet light curve model. """ if b is None: b = 1 - r if r < 1.0 else r u = [1.0] * udeg expected = flux.flux(udeg=udeg)(b, r, u=u) calc = 1 + ld_light_curve(u, b, r, order=order) return np.abs(float(mp.mpf(float(calc)) - expected))