"""Gaussian model primitives for qsospec."""
from __future__ import annotations
import numpy as np
[docs]
def gaussian(wave: np.ndarray, amp: float, center: float, sigma: float) -> np.ndarray:
"""Evaluate ``amp * exp(-0.5 * ((wave - center) / sigma)**2)``."""
if not np.isfinite(sigma) or sigma <= 0:
raise ValueError("Gaussian sigma must be positive and finite.")
wave = np.asarray(wave, dtype=float)
u = (wave - float(center)) / float(sigma)
return float(amp) * np.exp(-0.5 * u * u)
[docs]
def gaussian_partials(wave: np.ndarray, amp: float, center: float, sigma: float) -> np.ndarray:
"""Return dense model derivatives with columns ``amp, center, sigma``."""
if not np.isfinite(sigma) or sigma <= 0:
raise ValueError("Gaussian sigma must be positive and finite.")
wave = np.asarray(wave, dtype=float)
amp = float(amp)
center = float(center)
sigma = float(sigma)
delta = wave - center
expo = np.exp(-0.5 * (delta / sigma) ** 2)
model = amp * expo
out = np.empty((wave.size, 3), dtype=float)
out[:, 0] = expo
out[:, 1] = model * delta / sigma**2
out[:, 2] = model * delta**2 / sigma**3
return out