Diagnostics

Tools enabled by end-to-end differentiability of the forward model. These provide Fisher information analysis, gradient SEDs (saliency maps), and Green’s function time-sensitivity analysis.

Fisher Information

tengri.analysis.diagnostics.fisher.compute_jacobian(predict_fn, params, param_keys)[source]

Compute the Jacobian ∂m/∂θ of model predictions w.r.t. parameters.

Parameters:
  • predict_fn (callable) – Function mapping a flat parameter array to model predictions.

  • params (array, shape (n_params,)) – Parameter values.

  • param_keys (tuple of str) – Parameter names (for static hashing).

Returns:

Jacobian matrix.

Return type:

array, shape (n_data, n_params)

tengri.analysis.diagnostics.fisher.compute_fisher_matrix(forward_model, params, noise, data_type='photometry', param_names=None)[source]

Compute the Fisher Information Matrix.

F_ij = sum_k (1/sigma_k^2) * (dm_k/dtheta_i) * (dm_k/dtheta_j)

Parameters:
  • forward_model (ForwardModel) – Configured forward model.

  • params (dict) – Parameter values at which to evaluate the FIM.

  • noise (array) – 1-sigma uncertainties on the data.

  • data_type (str) – “photometry” or “spectroscopy”.

  • param_names (list of str, optional) – Which parameters to include. Defaults to all physical params (excludes xi — the GP latent is high-dimensional).

Returns:

  • fim (array, shape (n_params, n_params)) – Fisher Information Matrix.

  • names (list of str) – Parameter names corresponding to FIM rows/columns.

tengri.analysis.diagnostics.fisher.fisher_parameter_errors(fim)[source]

Compute 1-sigma parameter uncertainties from the FIM.

sigma_i = sqrt((F^{-1})_ii)

Parameters:

fim (array, shape (n_params, n_params)) – Fisher Information Matrix.

Returns:

1-sigma marginal uncertainties.

Return type:

array, shape (n_params,)

tengri.analysis.diagnostics.fisher.fisher_correlation_matrix(fim)[source]

Compute parameter correlation matrix from the FIM.

Parameters:

fim (array, shape (n_params, n_params)) – Fisher Information Matrix.

Returns:

Correlation matrix (values in [-1, 1]).

Return type:

array, shape (n_params, n_params)

Saliency (Gradient SEDs)

tengri.analysis.diagnostics.saliency.compute_gradient_sed(forward_model, params, param_name)[source]

Compute ∂SED(λ)/∂θ — the gradient of the SED w.r.t. one parameter.

Parameters:
  • forward_model (ForwardModel) – Configured forward model.

  • params (dict) – Parameter values.

  • param_name (str) – Which parameter to differentiate with respect to.

Returns:

  • gradient_sed (array, shape (n_wave,)) – ∂SED/∂θ at each wavelength.

  • wavelength (array, shape (n_wave,)) – Rest-frame wavelengths (Angstrom).

tengri.analysis.diagnostics.saliency.compute_all_gradient_seds(forward_model, params, param_names=None)[source]

Compute gradient SEDs for all physical parameters.

Parameters:
  • forward_model (ForwardModel) – Configured forward model.

  • params (dict) – Parameter values.

  • param_names (list of str, optional) – Parameters to compute gradients for.

Returns:

  • gradients (dict of {param_name: array (n_wave,)}) – Gradient SED per parameter.

  • wavelength (array, shape (n_wave,)) – Rest-frame wavelengths.

tengri.analysis.diagnostics.saliency.compute_photometry_sensitivity(forward_model, params, param_names=None)[source]

Compute ∂flux_band/∂θ for each filter and parameter.

Returns a matrix showing how sensitive each photometric band is to each parameter — useful for understanding degeneracies and planning filter sets.

Parameters:
  • forward_model (ForwardModel) – Configured forward model (must have filters set).

  • params (dict) – Parameter values.

  • param_names (list of str, optional) – Parameters to include.

Returns:

  • sensitivity (array, shape (n_filters, n_params)) – ∂flux_band/∂θ_param matrix.

  • param_names (list of str) – Parameter names (columns).

Green’s Functions

tengri.analysis.diagnostics.green_functions.compute_green_function(ssp_flux_at_z, ssp_wave, filter_wave=None, filter_trans=None, wave_target=None)[source]

Compute Green’s function G(t_age) for a filter or wavelength.

G(t_age) = flux contribution per unit stellar mass at age t_age.

For photometry: G = int L_SSP(lambda|t_age) * T(lambda) * lambda dlambda

/ int T(lambda) * lambda dlambda

For a single wavelength: G = L_SSP(wave_target | t_age)

Parameters:
  • ssp_flux_at_z (array, shape (n_age, n_wave)) – SSP spectra at fixed metallicity.

  • ssp_wave (array, shape (n_wave,)) – Wavelength grid (Angstrom).

  • filter_wave (array, optional) – Filter wavelength grid.

  • filter_trans (array, optional) – Filter transmission.

  • wave_target (float, optional) – Single wavelength (Angstrom). Used if no filter provided.

Returns:

Green’s function G(t_age).

Return type:

array, shape (n_age,)

tengri.analysis.diagnostics.green_functions.compute_window_function(green_fn, mean_sfr_on_ages)[source]

Compute window function W(t_age) = G(t_age) * <SFR(t_age)>.

The window function tells you which lookback times actually contribute to the observed flux, given the galaxy’s mean SFH.

Parameters:
  • green_fn (array, shape (n_age,)) – Green’s function G(t_age).

  • mean_sfr_on_ages (array, shape (n_age,)) – Mean SFR evaluated at the SSP age grid (Msun/yr).

Returns:

Window function W(t_age) (unnormalized).

Return type:

array, shape (n_age,)

tengri.analysis.diagnostics.green_functions.compute_window_function_fourier(window_fn, ssp_ages_yr)[source]

Compute Fourier transform of window function.

|W_tilde(omega)|^2 tells you the PSD sensitivity: how much power at frequency omega contributes to the variance of this observable.

From Munoz+2026 Eq. 11:

sigma^2_L = int |W_tilde(omega)|^2 P(omega) d_omega / (2*pi)

Parameters:
  • window_fn (array, shape (n_age,)) – Window function W(t_age).

  • ssp_ages_yr (array, shape (n_age,)) – SSP ages in years (for frequency axis).

Returns:

  • power_transfer (array, shape (n_freq,)) – |W_tilde(omega)|^2 — the PSD-to-observable transfer function.

  • omega (array, shape (n_freq,)) – Angular frequencies (rad/yr).

tengri.analysis.diagnostics.green_functions.compute_time_sensitivity_matrix(ssp_flux_at_z, ssp_wave, wavelengths_target)[source]

Compute sensitivity of multiple wavelengths to different ages.

Returns a matrix G(wavelength, age) showing which wavelengths are sensitive to which stellar population ages.

Parameters:
  • ssp_flux_at_z (array, shape (n_age, n_wave)) – SSP spectra at fixed metallicity.

  • ssp_wave (array, shape (n_wave,)) – Wavelength grid (Angstrom).

  • wavelengths_target (array, shape (n_target,)) – Target wavelengths to evaluate (Angstrom). E.g., [1500, 2500, 4000, 5500, 6563, 8000, 16000] for FUV, NUV, Balmer break, V-band, H-alpha, I-band, H-band.

Returns:

sensitivity – G(wavelength, age) matrix. Each row is the Green’s function at that wavelength.

Return type:

array, shape (n_target, n_age)