TestEdgeCases| status | test | duration |
|---|---|---|
| pass | test_details_with_ssc Test details() with SSC enabled returns ssc_spectrum. | 2.0 ms |
| pass | test_flux_density_grid_single_freq flux_density_grid with one frequency returns a (1, n_times) array. | 0 µs |
| pass | test_flux_density_grid_single_time flux_density_grid with one time returns an (n_frequencies, 1) array. | 0 µs |
| pass | test_single_time_point flux_density with a single time-frequency pair returns a length-1 finite array. | 0 µs |
TestExposureAveraging| status | test | duration |
|---|---|---|
| pass | test_exposure_close_to_instantaneous Very short exposure should match instantaneous flux. | 1.0 ms |
| pass | test_exposure_produces_valid_flux Exposure-averaged flux has the same shape as the input times and is finite and positive. | 6.0 ms |
TestExposureValidation| status | test | duration |
|---|---|---|
| pass | test_mismatched_shapes_raises flux_density_exposures raises an exception when the exposure array is shorter than the time and frequency arrays. | 0 µs |
| pass | test_num_points_too_small_raises flux_density_exposures raises an exception when num_points is 1, too few samples to average over an exposure window. | 0 µs |
TestFitResult| status | test | duration |
|---|---|---|
| pass | test_fitresult_creation Test creating FitResult. | 0 µs |
| pass | test_fitresult_with_topk Test FitResult with top-k parameters. | 0 µs |
TestFluxDensityGridValidation| status | test | duration |
|---|---|---|
| pass | test_empty_freq_raises flux_density_grid raises an exception when the frequency array is empty even though the time array is non-empty. | 0 µs |
| pass | test_empty_time_raises flux raises an exception when the time array is empty despite a valid frequency integration range. | 0 µs |
TestFluxDensityValidation| status | test | duration |
|---|---|---|
| pass | test_descending_time_raises flux_density raises an exception when the time array is in descending order instead of ascending. | 0 µs |
| pass | test_empty_arrays_raises flux_density raises an exception when both the time and frequency arrays are empty. | 0 µs |
| pass | test_mismatched_shapes_raises flux_density_exposures raises an exception when the exposure array is shorter than the time and frequency arrays. | 0 µs |
TestFluxValidation| status | test | duration |
|---|---|---|
| pass | test_empty_time_raises flux raises an exception when the time array is empty despite a valid frequency integration range. | 0 µs |
| pass | test_negative_nu_min_raises flux raises an exception when the lower frequency bound of the integration band is negative. | 0 µs |
| pass | test_nu_max_less_than_nu_min_raises flux raises an exception when the upper frequency bound of the integration band is below the lower bound. | 0 µs |
| pass | test_num_nu_one_raises flux raises an exception when only one frequency sample point is requested for the band integration. | 0 µs |
TestInputValidation| status | test | duration |
|---|---|---|
| pass | test_flux_density_requires_ascending_time Test that flux_density requires ascending time array. | 0 µs |
| pass | test_flux_density_requires_matching_shapes Test that flux_density requires matching array shapes. | 0 µs |
TestJetCreation| status | test | duration |
|---|---|---|
| pass | test_gaussian_jet Test GaussianJet creation. | 0 µs |
| pass | test_jet_with_spreading Test jet with spreading enabled. | 0 µs |
| pass | test_powerlaw_jet Test PowerLawJet creation. | 0 µs |
| pass | test_tophat_jet Test TophatJet creation. | 0 µs |
| pass | test_two_component_jet Test TwoComponentJet creation. | 0 µs |
TestJetTypeFlux| status | test | duration |
|---|---|---|
| pass | test_produces_finite_positive_flux[powerlaw_wing] Each parametrized jet structure yields finite, strictly positive total flux. | 1.0 ms |
| pass | test_produces_finite_positive_flux[step_powerlaw] Each parametrized jet structure yields finite, strictly positive total flux. | 1.0 ms |
TestKN| status | test | duration |
|---|---|---|
| pass | test_kn_model_runs SSC with Klein-Nishina suppression enabled yields finite, strictly positive total flux. | 3.0 ms |
TestLogscaleScreen| status | test | duration |
|---|---|---|
| pass | test_basic_screening logscale_screen returns a non-empty proper subset of indices for log-spaced data. | 0 µs |
| pass | test_single_element logscale_screen on a single-element array returns exactly index 0. | 0 µs |
TestMagnetar| status | test | duration |
|---|---|---|
| pass | test_magnetar_model_runs A jet with magnetar spin-down energy injection produces finite, positive flux density. | 1.0 ms |
| pass | test_magnetar_repr repr() of a Magnetar instance contains the class name. | 0 µs |
TestMediumCreation| status | test | duration |
|---|---|---|
| pass | test_ism_creation Test ISM medium creation. | 0 µs |
| pass | test_wind_creation Test Wind medium creation. | 0 µs |
| pass | test_wind_with_params Test Wind with additional parameters. | 0 µs |
TestModelCalculations| status | test | duration |
|---|---|---|
| pass | test_details Test details() method returns shock evolution data. | 0 µs |
| pass | test_flux_density Test flux_density calculation. | 1.0 ms |
| pass | test_flux_density_grid Test flux_density_grid calculation. | 1.0 ms |
| pass | test_jet_profile Test jet profile methods. | 0 µs |
TestModelCreation| status | test | duration |
|---|---|---|
| pass | test_model_creation Test basic model creation. | 0 µs |
| pass | test_model_with_resolution Test model with custom resolution. | 0 µs |
TestModelParams| status | test | duration |
|---|---|---|
| pass | test_params_attributes Test setting ModelParams attributes. | 0 µs |
| pass | test_params_creation Test creating ModelParams. | 0 µs |
TestModelProperties| status | test | duration |
|---|---|---|
| pass | test_axisymmetric_property Model.axisymmetric is True for an on-axis tophat jet configuration. | 0 µs |
| pass | test_fwd_rad_property Model.fwd_rad round-trips the eps_e and p microphysics parameters given at construction. | 0 µs |
| pass | test_observer_property Model.observer round-trips the redshift and viewing angle given at construction. | 0 µs |
| pass | test_repr repr() of a Model instance contains the class name. | 0 µs |
| pass | test_resolutions_property Model.resolutions returns a length-3 tuple of grid resolutions. | 0 µs |
| pass | test_rtol_property Model.rtol exposes a positive solver relative tolerance. | 0 µs |
| pass | test_rvs_rad_property Model.rvs_rad is None when no reverse-shock radiation is configured. | 0 µs |
TestObserverCreation| status | test | duration |
|---|---|---|
| pass | test_observer_off_axis Test off-axis observer. | 0 µs |
| pass | test_observer_on_axis Test on-axis observer. | 0 µs |
TestOffAxis| status | test | duration |
|---|---|---|
| pass | test_off_axis_dimmer_at_early_times On-axis total flux exceeds off-axis (theta_obs=0.4) total flux at the earliest sampled time. | 1.0 ms |
| pass | test_off_axis_flux An observer at theta_obs=0.3 (outside the jet core) yields finite, strictly positive total flux. | 1.0 ms |
TestParamDef| status | test | duration |
|---|---|---|
| pass | test_paramdef_creation Test creating a ParamDef with all parameters. | 0 µs |
| pass | test_paramdef_defaults Test ParamDef default values. | 0 µs |
| pass | test_paramdef_fixed Test fixed parameter definition. | 0 µs |
| pass | test_paramdef_fixed_accepts_any_bounds Scale.fixed skips bound validation; lower==upper or even degenerate configurations work because the fitting layer uses `initial or lower`. | 0 µs |
| pass | test_paramdef_rejects_initial_outside_bounds initial, when given, must lie within [lower, upper]. | 0 µs |
| pass | test_paramdef_rejects_inverted_bounds lower must be strictly less than upper for non-fixed scales. | 0 µs |
| pass | test_paramdef_rejects_log_with_nonpositive_lower Scale.log requires lower > 0; log10(<=0) is undefined. | 0 µs |
TestRadiationCreation| status | test | duration |
|---|---|---|
| pass | test_basic_radiation Test basic synchrotron radiation settings. | 0 µs |
| pass | test_radiation_with_ssc Test radiation with SSC enabled. | 0 µs |
TestRadiativeFireball| status | test | duration |
|---|---|---|
| pass | test_adiabatic_brighter_at_late_times Radiative losses drain blast-wave energy, so the adiabatic light curve must be brighter, increasingly so toward late times. | 1.0 ms |
| pass | test_adiabatic_default_is_radiative Omitting the flag must match radiative_fireball=True. | 1.0 ms |
| pass | test_deceleration_slopes Gamma(r) local slope in the ultra-relativistic deceleration phase: adiabatic follows Blandford-McKee (-3/2); the fully radiative limit (eps_rad = eps_e = 1, forced via p < 2) is much steeper (toward -3). | 1.0 ms |
TestReverseShock| status | test | duration |
|---|---|---|
| pass | test_reverse_shock_details Shock details for a reverse-shock model include a non-empty reverse-shock Lorentz factor array. | 5.0 ms |
| pass | test_reverse_shock_produces_flux Reverse-shock synchrotron flux matches the time-grid shape, is nonzero at some epoch, and the total stays finite. | 2.0 ms |
TestSSC| status | test | duration |
|---|---|---|
| pass | test_ssc_flux_has_components SSC model should produce both sync and ssc flux components. | 3.0 ms |
| pass | test_ssc_total_ge_sync Total flux should be >= sync-only flux. | 3.0 ms |
TestScaleEnum| status | test | duration |
|---|---|---|
| pass | test_scale_comparison Test Scale enum comparison. | 0 µs |
| pass | test_scale_values Test that Scale enum has expected values. | 0 µs |
TestWindFlux| status | test | duration |
|---|---|---|
| pass | test_wind_medium_flux A stellar-wind (A_star) medium yields finite, strictly positive total flux. | 0 µs |
| pass | test_wind_with_floor A wind medium with an ISM density floor (n_ism) yields finite, strictly positive total flux. | 0 µs |
test_cli| status | test | duration |
|---|---|---|
| pass | test_bad_frequency_rejected An unparseable --nu value aborts with SystemExit or ArgumentTypeError rather than running the model. | 1.0 ms |
| pass | test_csv_output CSV output has a column header plus exactly num_t data rows, and the first data row has at least two columns with positive time and flux values. | 7.0 ms |
| pass | test_json_output JSON output parses to a dict containing light-curve content (numeric values, a flux field, or a time key). | 1.0 ms |
| pass | test_named_band_frequency A named band ("XRT") is accepted for --nu and the run still writes the output file. | 2.0 ms |
test_default_convergence| status | test | duration |
|---|---|---|
| pass | test_default_resolution_holds_convergence_gates[fs_tophat_wind_edge] Every emission component at the (mode-specific) default resolution stays within both validation gates (mean error < 5%, max error < 15%) against a phi+theta+time-converged reference, on the families that pin the calibrated defaults of each mode. | 529.0 ms |
| pass | test_default_resolution_holds_convergence_gates[fs_two_component] Every emission component at the (mode-specific) default resolution stays within both validation gates (mean error < 5%, max error < 15%) against a phi+theta+time-converged reference, on the families that pin the calibrated defaults of each mode. | 327.0 ms |
| pass | test_default_resolution_holds_convergence_gates[rs_powerlaw_onaxis] Every emission component at the (mode-specific) default resolution stays within both validation gates (mean error < 5%, max error < 15%) against a phi+theta+time-converged reference, on the families that pin the calibrated defaults of each mode. | 96.0 ms |
| pass | test_default_resolution_holds_convergence_gates[rs_tophat_wind_edge] Every emission component at the (mode-specific) default resolution stays within both validation gates (mean error < 5%, max error < 15%) against a phi+theta+time-converged reference, on the families that pin the calibrated defaults of each mode. | 1.26 s |
test_draw_fit| status | test | duration |
|---|---|---|
| pass | test_band_only_no_twinx Band-only path -> 2 axes (top + bottom), single y-axis on top. | 11.0 ms |
| pass | test_credible_band_path With a realistic posterior and n_samples>0, draw_fit renders at least one credible-band fill (PolyCollection) on the top axis. | 10.0 ms |
| pass | test_explicit_best_params_works_without_fit Passing best_params explicitly should bypass the result-requirement. | 11.0 ms |
| pass | test_lc_only_no_twinx Light-curve-only path -> 2 axes (top + bottom), no twin axis. | 11.0 ms |
| pass | test_mixed_returns_three_axes LC + band-integrated -> 3 axes (left, twin, bottom) and equal decade span on the dual y-axes. | 48.0 ms |
| pass | test_no_data_raises Fitter with no observation data -> ValueError. | 0 µs |
| pass | test_no_nu_panel show_nu_panel=False -> single panel, ax_bot is None. | 13.0 ms |
| pass | test_obs_noise_invalid_value_raises Unknown obs_noise string surfaces a clear ValueError listing the valid set. | 3.0 ms |
| pass | test_obs_noise_modes_render[abs] All three obs_noise modes render a fill_between band without error. | 8.0 ms |
| pass | test_obs_noise_modes_render[frac] All three obs_noise modes render a fill_between band without error. | 10.0 ms |
| pass | test_obs_noise_modes_render[none] All three obs_noise modes render a fill_between band without error. | 7.0 ms |
test_extinction| status | test | duration |
|---|---|---|
| pass | test_builtin_laws_registry BUILTIN_LAWS registry contains exactly smc/lmc/mw, each mapping to a callable positive at the V band. | 0 µs |
| pass | test_k_at_V_is_unity[lmc] Each Pei92 law (SMC/LMC/MW) normalizes to k(λ)=1 at the V-band wavelength to 1e-12 relative precision. | 0 µs |
| pass | test_k_at_V_is_unity[mw] Each Pei92 law (SMC/LMC/MW) normalizes to k(λ)=1 at the V-band wavelength to 1e-12 relative precision. | 0 µs |
| pass | test_k_at_V_is_unity[smc] Each Pei92 law (SMC/LMC/MW) normalizes to k(λ)=1 at the V-band wavelength to 1e-12 relative precision. | 0 µs |
| pass | test_uv_extinction_exceeds_optical[lmc] Each Pei92 law rises toward the UV: k(2000 Å) exceeds k(7000 Å), and both are positive. | 0 µs |
| pass | test_uv_extinction_exceeds_optical[mw] Each Pei92 law rises toward the UV: k(2000 Å) exceeds k(7000 Å), and both are positive. | 0 µs |
| pass | test_uv_extinction_exceeds_optical[smc] Each Pei92 law rises toward the UV: k(2000 Å) exceeds k(7000 Å), and both are positive. | 0 µs |
| pass | test_vectorized_shape_preserved pei92 on a 2-D wavelength array preserves the input shape and returns only finite, non-negative values. | 0 µs |
| pass | test_wrapper_functions_match_pei92 The smc/lmc/mw convenience wrappers return values identical to pei92 called with the matching law name. | 0 µs |
| pass | test_zero_below_lyman_limit[lmc] Each Pei92 law returns exactly zero extinction for wavelengths below the Lyman limit (912 Å). | 0 µs |
| pass | test_zero_below_lyman_limit[mw] Each Pei92 law returns exactly zero extinction for wavelengths below the Lyman limit (912 Å). | 0 µs |
| pass | test_zero_below_lyman_limit[smc] Each Pei92 law returns exactly zero extinction for wavelengths below the Lyman limit (912 Å). | 0 µs |
test_fit_result_summary| status | test | duration |
|---|---|---|
| pass | test_plain_bilby_file_rejected_with_clear_error A bilby Result file with no VegasAfterglow snapshot makes Fitter.load raise a ValueError stating the file does not include a Fitter snapshot. | 7.0 ms |
| pass | test_save_load_h5_roundtrip HDF5 save/load restores samples, log_probs, top-k arrays, labels, and the Fitter snapshot (jet/medium/z/lumi_dist/data), populates bilby_result, keeps summary() text identical, and leaves unset fit-quality fields None. | 47.0 ms |
| pass | test_save_load_json_roundtrip JSON save/load restores samples, top_k_params, and labels, with unset fit-quality fields staying None. | 4.0 ms |
| pass | test_save_load_preserves_walker_axis_shape samples is (N, n_walkers, ndim); shape must survive the bilby flatten. | 8.0 ms |
| pass | test_save_load_roundtrip_preserves_fit_quality_fields When the FitResult has n_data / n_free_params populated (as it does after a real fit() call), both fields must survive HDF5 and JSON round-trip and the summary() header must remain identical. | 12.0 ms |
| pass | test_save_requires_completed_fit Fitter.save before .fit() raises a clear error -- no silent empty file. | 0 µs |
| pass | test_saved_file_readable_by_bilby_directly File written by Fitter.save() should be a valid bilby Result file. | 8.0 ms |
| pass | test_summary_empty_top_k summary() on a FitResult without top_k_params reports "no top_k_params stored" instead of a table. | 0 µs |
| pass | test_summary_includes_fit_quality_header_when_populated n_data + n_free_params populated -> header line with χ²/DOF, BIC, AIC. | 0 µs |
| pass | test_summary_includes_latex_block_when_labels_set latex_labels set => single LaTeX block (posterior median, asymmetric 1σ). | 0 µs |
| pass | test_summary_latex_false_suppresses_block latex=False forces the block off even when latex_labels are set. | 0 µs |
| pass | test_summary_no_latex_when_labels_missing Auto mode is silent without latex_labels (no LaTeX block, no note). Explicit latex=True surfaces a note explaining how to enable the block. | 0 µs |
| pass | test_summary_omits_fit_quality_header_when_dof_invalid Suppress header silently if n_data <= n_free_params (over-parametrized). | 0 µs |
| pass | test_summary_omits_fit_quality_header_when_unpopulated Older saved files have n_data=None; header suppressed. | 0 µs |
| pass | test_summary_populated_table summary() table has Rank and chi^2 columns, every parameter label, magnitude-aware decimal formatting per column, and chi^2 = -2 * log_prob. | 0 µs |
| pass | test_summary_renders_via_repr_for_notebook The _SummaryTable wrapper's __repr__ returns the text directly so Jupyter last-line auto-display renders cleanly (no escaped \n). | 0 µs |
| pass | test_summary_title_shows_rows_and_total summary() title reports displayed rows versus total stored top-k rows ("top 2 of 2"). | 0 µs |
| pass | test_summary_top_k_kwarg summary(top_k=1) keeps only the first rank's row and the title reflects the slice ("top 1 of 2"). | 0 µs |
test_fitter_data_validation| status | test | duration |
|---|---|---|
| pass | test_add_flux_bad_band_format[500000000000000.0] add_flux raises ValueError naming band for each argument that is not a two-element (nu_min, nu_max) pair (None, bare scalar, 1-tuple, 3-tuple). | 0 µs |
| pass | test_add_flux_bad_band_format[None] add_flux raises ValueError naming band for each argument that is not a two-element (nu_min, nu_max) pair (None, bare scalar, 1-tuple, 3-tuple). | 0 µs |
| pass | test_add_flux_bad_band_format[bad_band2] add_flux raises ValueError naming band for each argument that is not a two-element (nu_min, nu_max) pair (None, bare scalar, 1-tuple, 3-tuple). | 0 µs |
| pass | test_add_flux_bad_band_format[bad_band3] add_flux raises ValueError naming band for each argument that is not a two-element (nu_min, nu_max) pair (None, bare scalar, 1-tuple, 3-tuple). | 0 µs |
| pass | test_add_flux_bad_band_values[band0] add_flux raises ValueError naming band for each frequency pair that is not a strictly increasing positive finite range (reversed, negative, zero, equal edges, NaN, Inf). | 0 µs |
| pass | test_add_flux_bad_band_values[band1] add_flux raises ValueError naming band for each frequency pair that is not a strictly increasing positive finite range (reversed, negative, zero, equal edges, NaN, Inf). | 0 µs |
| pass | test_add_flux_bad_band_values[band2] add_flux raises ValueError naming band for each frequency pair that is not a strictly increasing positive finite range (reversed, negative, zero, equal edges, NaN, Inf). | 0 µs |
| pass | test_add_flux_bad_band_values[band3] add_flux raises ValueError naming band for each frequency pair that is not a strictly increasing positive finite range (reversed, negative, zero, equal edges, NaN, Inf). | 0 µs |
| pass | test_add_flux_bad_band_values[band4] add_flux raises ValueError naming band for each frequency pair that is not a strictly increasing positive finite range (reversed, negative, zero, equal edges, NaN, Inf). | 0 µs |
| pass | test_add_flux_bad_band_values[band5] add_flux raises ValueError naming band for each frequency pair that is not a strictly increasing positive finite range (reversed, negative, zero, equal edges, NaN, Inf). | 0 µs |
| pass | test_add_flux_bad_num_points add_flux raises ValueError naming num_points when only one in-band integration frequency is requested. | 0 µs |
| pass | test_add_flux_density_bad_err[bad_err0] add_flux_density raises ValueError naming err for each measurement uncertainty that is zero, negative, NaN, or Inf. | 0 µs |
| pass | test_add_flux_density_bad_err[bad_err1] add_flux_density raises ValueError naming err for each measurement uncertainty that is zero, negative, NaN, or Inf. | 0 µs |
| pass | test_add_flux_density_bad_err[bad_err2] add_flux_density raises ValueError naming err for each measurement uncertainty that is zero, negative, NaN, or Inf. | 0 µs |
| pass | test_add_flux_density_bad_err[bad_err3] add_flux_density raises ValueError naming err for each measurement uncertainty that is zero, negative, NaN, or Inf. | 0 µs |
| pass | test_add_flux_density_bad_nu[-100000000000000.0] add_flux_density raises ValueError naming nu for each non-positive or non-finite frequency (zero, negative, NaN, Inf). | 0 µs |
| pass | test_add_flux_density_bad_nu[0] add_flux_density raises ValueError naming nu for each non-positive or non-finite frequency (zero, negative, NaN, Inf). | 0 µs |
| pass | test_add_flux_density_bad_nu[inf] add_flux_density raises ValueError naming nu for each non-positive or non-finite frequency (zero, negative, NaN, Inf). | 0 µs |
| pass | test_add_flux_density_bad_nu[nan] add_flux_density raises ValueError naming nu for each non-positive or non-finite frequency (zero, negative, NaN, Inf). | 0 µs |
| pass | test_add_flux_density_bad_weights_shape add_flux_density raises ValueError naming weights when the weights array is longer than the data arrays. | 0 µs |
| pass | test_add_flux_density_empty add_flux_density raises ValueError mentioning 'empty' when the t, f_nu, and err arrays contain no points. | 0 µs |
| pass | test_add_flux_density_happy add_flux_density accepts a positive scalar frequency with matching finite t, f_nu, and err arrays without raising. | 0 µs |
| pass | test_add_flux_density_nan_flux add_flux_density raises ValueError mentioning 'non-finite' when the f_nu array contains a NaN entry. | 0 µs |
| pass | test_add_flux_density_negative_weights add_flux_density raises ValueError naming weights when the weights array contains a negative entry. | 0 µs |
| pass | test_add_flux_density_shape_mismatch add_flux_density raises ValueError mentioning 'same shape' when f_nu is shorter than the t and err arrays. | 0 µs |
| pass | test_add_flux_density_with_weights add_flux_density accepts an optional positive weights array of the same shape as the data without raising. | 0 µs |
| pass | test_add_flux_happy add_flux accepts a named instrument band (XRT) resolved to a frequency range with matching t, flux, and err arrays without raising. | 0 µs |
| pass | test_add_flux_negative_err add_flux raises ValueError naming err when the error array contains a negative entry. | 0 µs |
| pass | test_add_flux_shape_mismatch add_flux raises ValueError mentioning 'same shape' when flux is shorter than the t and err arrays. | 0 µs |
| pass | test_add_spectrum_bad_nu add_spectrum raises ValueError naming nu when the frequency array contains a negative value. | 0 µs |
| pass | test_add_spectrum_bad_t[-1] add_spectrum raises a ValueError whose message starts with 'add_spectrum: t' for each non-positive or non-finite observation time (zero, negative, NaN, Inf). | 0 µs |
| pass | test_add_spectrum_bad_t[0] add_spectrum raises a ValueError whose message starts with 'add_spectrum: t' for each non-positive or non-finite observation time (zero, negative, NaN, Inf). | 0 µs |
| pass | test_add_spectrum_bad_t[inf] add_spectrum raises a ValueError whose message starts with 'add_spectrum: t' for each non-positive or non-finite observation time (zero, negative, NaN, Inf). | 0 µs |
| pass | test_add_spectrum_bad_t[nan] add_spectrum raises a ValueError whose message starts with 'add_spectrum: t' for each non-positive or non-finite observation time (zero, negative, NaN, Inf). | 0 µs |
| pass | test_add_spectrum_happy add_spectrum accepts a positive scalar time with matching finite nu, f_nu, and err arrays without raising. | 0 µs |
| pass | test_add_spectrum_shape_mismatch add_spectrum raises ValueError mentioning 'same shape' when f_nu is shorter than the nu and err arrays. | 0 µs |
test_jet_registry| status | test | duration |
|---|---|---|
| pass | test_derived_jet_rules_match_historical[gaussian] Each jet type's required and forbidden parameter sets derived from its JetSpec equal the historical hand-maintained JET_RULES entry verbatim. | 0 µs |
| pass | test_derived_jet_rules_match_historical[powerlaw] Each jet type's required and forbidden parameter sets derived from its JetSpec equal the historical hand-maintained JET_RULES entry verbatim. | 0 µs |
| pass | test_derived_jet_rules_match_historical[powerlaw_wing] Each jet type's required and forbidden parameter sets derived from its JetSpec equal the historical hand-maintained JET_RULES entry verbatim. | 0 µs |
| pass | test_derived_jet_rules_match_historical[step_powerlaw] Each jet type's required and forbidden parameter sets derived from its JetSpec equal the historical hand-maintained JET_RULES entry verbatim. | 0 µs |
| pass | test_derived_jet_rules_match_historical[tophat] Each jet type's required and forbidden parameter sets derived from its JetSpec equal the historical hand-maintained JET_RULES entry verbatim. | 0 µs |
| pass | test_derived_jet_rules_match_historical[two_component] Each jet type's required and forbidden parameter sets derived from its JetSpec equal the historical hand-maintained JET_RULES entry verbatim. | 0 µs |
| pass | test_every_jet_constructs_from_defaults[gaussian] Each registered jet type constructs a non-None jet object from ModelParams defaults combined with its spec's fixed_kwargs. | 0 µs |
| pass | test_every_jet_constructs_from_defaults[powerlaw] Each registered jet type constructs a non-None jet object from ModelParams defaults combined with its spec's fixed_kwargs. | 0 µs |
| pass | test_every_jet_constructs_from_defaults[powerlaw_wing] Each registered jet type constructs a non-None jet object from ModelParams defaults combined with its spec's fixed_kwargs. | 0 µs |
| pass | test_every_jet_constructs_from_defaults[step_powerlaw] Each registered jet type constructs a non-None jet object from ModelParams defaults combined with its spec's fixed_kwargs. | 0 µs |
| pass | test_every_jet_constructs_from_defaults[tophat] Each registered jet type constructs a non-None jet object from ModelParams defaults combined with its spec's fixed_kwargs. | 0 µs |
| pass | test_every_jet_constructs_from_defaults[two_component] Each registered jet type constructs a non-None jet object from ModelParams defaults combined with its spec's fixed_kwargs. | 0 µs |
| pass | test_every_jet_constructs_from_defaults[uniform] Each registered jet type constructs a non-None jet object from ModelParams defaults combined with its spec's fixed_kwargs. | 0 µs |
| pass | test_every_medium_constructs_from_defaults[ism] Each registered medium type constructs a non-None medium object from ModelParams once its density normalization (n_ism or A_star) is set nonzero to pass validation. | 0 µs |
| pass | test_every_medium_constructs_from_defaults[wind] Each registered medium type constructs a non-None medium object from ModelParams once its density normalization (n_ism or A_star) is set nonzero to pass validation. | 0 µs |
| pass | test_medium_rules_match_historical[ism] Each medium type's required and forbidden parameter sets derived from its spec equal the historical hand-maintained MEDIUM_RULES entry verbatim. | 0 µs |
| pass | test_medium_rules_match_historical[wind] Each medium type's required and forbidden parameter sets derived from its spec equal the historical hand-maintained MEDIUM_RULES entry verbatim. | 0 µs |
| pass | test_registry_self_consistency[gaussian] For each jet spec, the required and forbidden sets are disjoint and no constructor argument is both sampled (params) and fixed (fixed_kwargs). | 0 µs |
| pass | test_registry_self_consistency[powerlaw] For each jet spec, the required and forbidden sets are disjoint and no constructor argument is both sampled (params) and fixed (fixed_kwargs). | 0 µs |
| pass | test_registry_self_consistency[powerlaw_wing] For each jet spec, the required and forbidden sets are disjoint and no constructor argument is both sampled (params) and fixed (fixed_kwargs). | 0 µs |
| pass | test_registry_self_consistency[step_powerlaw] For each jet spec, the required and forbidden sets are disjoint and no constructor argument is both sampled (params) and fixed (fixed_kwargs). | 0 µs |
| pass | test_registry_self_consistency[tophat] For each jet spec, the required and forbidden sets are disjoint and no constructor argument is both sampled (params) and fixed (fixed_kwargs). | 0 µs |
| pass | test_registry_self_consistency[two_component] For each jet spec, the required and forbidden sets are disjoint and no constructor argument is both sampled (params) and fixed (fixed_kwargs). | 0 µs |
| pass | test_registry_self_consistency[uniform] For each jet spec, the required and forbidden sets are disjoint and no constructor argument is both sampled (params) and fixed (fixed_kwargs). | 0 µs |
| pass | test_uniform_jet_rules The uniform jet, historically unvalidated, now derives required {E_iso, Gamma0}, forbidden wing/power-law-index params, and a fixed theta_c of pi/2. | 0 µs |
test_native| status | test | duration |
|---|---|---|
| skip | test_gil_free_ejecta_flux gil_free-compiled top-hat E_iso and Gamma0 profiles fed to Ejecta yield a flux_density light curve at 1e14 Hz that is finite and strictly positive everywhere. detailscould not import 'numba': No module named 'numba' | 0 µs |
| pass | test_call_fallback_applies_bound_params Calling a NativeFunc through the pure-Python fallback appends the bound params after the runtime args, reproducing the profile value E_iso*(1 - theta/theta_c). | 0 µs |
| pass | test_partitions_runtime_and_bound_params Binding trailing kwargs splits the cfunc signature so params holds the bound values in signature order while n_args still counts all four arguments. | 0 µs |
| pass | test_runtime_arg_after_bound_param_raises A signature where an unbound runtime argument follows a bound parameter is rejected with a ValueError saying it cannot appear after the bound one. | 0 µs |
| pass | test_unknown_kwarg_raises_TypeError Binding a kwarg that is not in the cfunc signature raises a TypeError naming it an unexpected keyword. | 0 µs |
test_parameter_corners| status | test | duration |
|---|---|---|
| pass | test_extreme_corner[A_star_heavy] Each validity-boundary extreme (trans-relativistic to Gamma0=5000, needle to spherical jets, IGM to dense media, hard to steep p, magnetized shell, ultralong reverse shock) yields finite, strictly positive flux from 1 s through the deep-Newtonian phase. | 1.0 ms |
| pass | test_extreme_corner[A_star_light] Each validity-boundary extreme (trans-relativistic to Gamma0=5000, needle to spherical jets, IGM to dense media, hard to steep p, magnetized shell, ultralong reverse shock) yields finite, strictly positive flux from 1 s through the deep-Newtonian phase. | 1.0 ms |
| pass | test_extreme_corner[E_iso_1e48] Each validity-boundary extreme (trans-relativistic to Gamma0=5000, needle to spherical jets, IGM to dense media, hard to steep p, magnetized shell, ultralong reverse shock) yields finite, strictly positive flux from 1 s through the deep-Newtonian phase. | 1.0 ms |
| pass | test_extreme_corner[E_iso_1e55] Each validity-boundary extreme (trans-relativistic to Gamma0=5000, needle to spherical jets, IGM to dense media, hard to steep p, magnetized shell, ultralong reverse shock) yields finite, strictly positive flux from 1 s through the deep-Newtonian phase. | 1.0 ms |
| pass | test_extreme_corner[Gamma0_5000] Each validity-boundary extreme (trans-relativistic to Gamma0=5000, needle to spherical jets, IGM to dense media, hard to steep p, magnetized shell, ultralong reverse shock) yields finite, strictly positive flux from 1 s through the deep-Newtonian phase. | 1.0 ms |
| pass | test_extreme_corner[Gamma0_transrel] Each validity-boundary extreme (trans-relativistic to Gamma0=5000, needle to spherical jets, IGM to dense media, hard to steep p, magnetized shell, ultralong reverse shock) yields finite, strictly positive flux from 1 s through the deep-Newtonian phase. | 0 µs |
| pass | test_extreme_corner[eps_near_one] Each validity-boundary extreme (trans-relativistic to Gamma0=5000, needle to spherical jets, IGM to dense media, hard to steep p, magnetized shell, ultralong reverse shock) yields finite, strictly positive flux from 1 s through the deep-Newtonian phase. | 1.0 ms |
| pass | test_extreme_corner[eps_tiny] Each validity-boundary extreme (trans-relativistic to Gamma0=5000, needle to spherical jets, IGM to dense media, hard to steep p, magnetized shell, ultralong reverse shock) yields finite, strictly positive flux from 1 s through the deep-Newtonian phase. | 0 µs |
| pass | test_extreme_corner[n_ism_dense] Each validity-boundary extreme (trans-relativistic to Gamma0=5000, needle to spherical jets, IGM to dense media, hard to steep p, magnetized shell, ultralong reverse shock) yields finite, strictly positive flux from 1 s through the deep-Newtonian phase. | 1.0 ms |
| pass | test_extreme_corner[n_ism_igm] Each validity-boundary extreme (trans-relativistic to Gamma0=5000, needle to spherical jets, IGM to dense media, hard to steep p, magnetized shell, ultralong reverse shock) yields finite, strictly positive flux from 1 s through the deep-Newtonian phase. | 1.0 ms |
| pass | test_extreme_corner[obs_equatorial] Each validity-boundary extreme (trans-relativistic to Gamma0=5000, needle to spherical jets, IGM to dense media, hard to steep p, magnetized shell, ultralong reverse shock) yields finite, strictly positive flux from 1 s through the deep-Newtonian phase. | 2.0 ms |
| pass | test_extreme_corner[obs_on_jet_edge] Each validity-boundary extreme (trans-relativistic to Gamma0=5000, needle to spherical jets, IGM to dense media, hard to steep p, magnetized shell, ultralong reverse shock) yields finite, strictly positive flux from 1 s through the deep-Newtonian phase. | 3.0 ms |
| pass | test_extreme_corner[p_2.01] Each validity-boundary extreme (trans-relativistic to Gamma0=5000, needle to spherical jets, IGM to dense media, hard to steep p, magnetized shell, ultralong reverse shock) yields finite, strictly positive flux from 1 s through the deep-Newtonian phase. | 1.0 ms |
| pass | test_extreme_corner[p_3.5] Each validity-boundary extreme (trans-relativistic to Gamma0=5000, needle to spherical jets, IGM to dense media, hard to steep p, magnetized shell, ultralong reverse shock) yields finite, strictly positive flux from 1 s through the deep-Newtonian phase. | 1.0 ms |
| pass | test_extreme_corner[p_hard_1.5] Each validity-boundary extreme (trans-relativistic to Gamma0=5000, needle to spherical jets, IGM to dense media, hard to steep p, magnetized shell, ultralong reverse shock) yields finite, strictly positive flux from 1 s through the deep-Newtonian phase. | 1.0 ms |
| pass | test_extreme_corner[sigma_fwd_only] Each validity-boundary extreme (trans-relativistic to Gamma0=5000, needle to spherical jets, IGM to dense media, hard to steep p, magnetized shell, ultralong reverse shock) yields finite, strictly positive flux from 1 s through the deep-Newtonian phase. | 1.0 ms |
| pass | test_extreme_corner[theta_c_needle] Each validity-boundary extreme (trans-relativistic to Gamma0=5000, needle to spherical jets, IGM to dense media, hard to steep p, magnetized shell, ultralong reverse shock) yields finite, strictly positive flux from 1 s through the deep-Newtonian phase. | 1.0 ms |
| pass | test_extreme_corner[theta_c_spherical] Each validity-boundary extreme (trans-relativistic to Gamma0=5000, needle to spherical jets, IGM to dense media, hard to steep p, magnetized shell, ultralong reverse shock) yields finite, strictly positive flux from 1 s through the deep-Newtonian phase. | 1.0 ms |
| pass | test_extreme_corner[ultralong_rvs] Each validity-boundary extreme (trans-relativistic to Gamma0=5000, needle to spherical jets, IGM to dense media, hard to steep p, magnetized shell, ultralong reverse shock) yields finite, strictly positive flux from 1 s through the deep-Newtonian phase. | 3.0 ms |
| pass | test_extreme_corner[xi_e_1e-3] Each validity-boundary extreme (trans-relativistic to Gamma0=5000, needle to spherical jets, IGM to dense media, hard to steep p, magnetized shell, ultralong reverse shock) yields finite, strictly positive flux from 1 s through the deep-Newtonian phase. | 1.0 ms |
| pass | test_extreme_corner[z_ten] Each validity-boundary extreme (trans-relativistic to Gamma0=5000, needle to spherical jets, IGM to dense media, hard to steep p, magnetized shell, ultralong reverse shock) yields finite, strictly positive flux from 1 s through the deep-Newtonian phase. | 1.0 ms |
| pass | test_extreme_corner[z_zero] Each validity-boundary extreme (trans-relativistic to Gamma0=5000, needle to spherical jets, IGM to dense media, hard to steep p, magnetized shell, ultralong reverse shock) yields finite, strictly positive flux from 1 s through the deep-Newtonian phase. | 1.0 ms |
| pass | test_high_resolution_tight_rtol Raising the grid resolutions above their defaults and loosening the solver rtol to 1e-4 still yields a finite, strictly positive light curve. | 2.0 ms |
| pass | test_jet_corner[custom_ejecta] Each jet variant (tophat, spreading, thick-shell, magnetar, Gaussian, power-law, two-component, step power-law, wing, custom Ejecta) produces a light curve matching the input time shape that is finite and strictly positive. | 8.0 ms |
| pass | test_jet_corner[gaussian] Each jet variant (tophat, spreading, thick-shell, magnetar, Gaussian, power-law, two-component, step power-law, wing, custom Ejecta) produces a light curve matching the input time shape that is finite and strictly positive. | 1.0 ms |
| pass | test_jet_corner[powerlaw] Each jet variant (tophat, spreading, thick-shell, magnetar, Gaussian, power-law, two-component, step power-law, wing, custom Ejecta) produces a light curve matching the input time shape that is finite and strictly positive. | 2.0 ms |
| pass | test_jet_corner[powerlaw_wing] Each jet variant (tophat, spreading, thick-shell, magnetar, Gaussian, power-law, two-component, step power-law, wing, custom Ejecta) produces a light curve matching the input time shape that is finite and strictly positive. | 2.0 ms |
| pass | test_jet_corner[step_powerlaw] Each jet variant (tophat, spreading, thick-shell, magnetar, Gaussian, power-law, two-component, step power-law, wing, custom Ejecta) produces a light curve matching the input time shape that is finite and strictly positive. | 1.0 ms |
| pass | test_jet_corner[tophat] Each jet variant (tophat, spreading, thick-shell, magnetar, Gaussian, power-law, two-component, step power-law, wing, custom Ejecta) produces a light curve matching the input time shape that is finite and strictly positive. | 0 µs |
| pass | test_jet_corner[tophat_magnetar] Each jet variant (tophat, spreading, thick-shell, magnetar, Gaussian, power-law, two-component, step power-law, wing, custom Ejecta) produces a light curve matching the input time shape that is finite and strictly positive. | 0 µs |
| pass | test_jet_corner[tophat_spread] Each jet variant (tophat, spreading, thick-shell, magnetar, Gaussian, power-law, two-component, step power-law, wing, custom Ejecta) produces a light curve matching the input time shape that is finite and strictly positive. | 2.0 ms |
| pass | test_jet_corner[tophat_thick] Each jet variant (tophat, spreading, thick-shell, magnetar, Gaussian, power-law, two-component, step power-law, wing, custom Ejecta) produces a light curve matching the input time shape that is finite and strictly positive. | 0 µs |
| pass | test_jet_corner[two_component] Each jet variant (tophat, spreading, thick-shell, magnetar, Gaussian, power-law, two-component, step power-law, wing, custom Ejecta) produces a light curve matching the input time shape that is finite and strictly positive. | 0 µs |
| pass | test_jet_property_accessors jet_E_iso and jet_Gamma0 on a Gaussian jet return arrays matching the theta grid with E_iso > 0 and Gamma0 > 1 everywhere. | 0 µs |
| pass | test_magnetized_ejecta_with_reverse_shock_decays[0.1] Regression for the sigma>0 + rvs_rad runaway (fixed 2026-07-02): at early times Gamma ~= Gamma4 makes the magnetized jump ratio -> 1, and the reverse-shock crossing rate divided by (Gamma*comp_ratio/Gamma4 - 1) -> 0/0; the NaN then silently froze dGamma/dt at zero (eternal coasting). Fixed by the shock-penetration gate in FRShockEqn::compute_dx3_dt. | 4.0 ms |
| pass | test_magnetized_ejecta_with_reverse_shock_decays[10.0] Regression for the sigma>0 + rvs_rad runaway (fixed 2026-07-02): at early times Gamma ~= Gamma4 makes the magnetized jump ratio -> 1, and the reverse-shock crossing rate divided by (Gamma*comp_ratio/Gamma4 - 1) -> 0/0; the NaN then silently froze dGamma/dt at zero (eternal coasting). Fixed by the shock-penetration gate in FRShockEqn::compute_dx3_dt. | 3.0 ms |
| pass | test_magnetized_knife_edge_sigmas[15-0.3] Regression for the penetration->0+ knife edge (fixed 2026-07-02): for magnetized shells the Zhang-Kobayashi crossing rate diverges as the penetration factor (Gamma*comp_ratio/Gamma4 - 1) -> 0+, and whether a run hit the singularity depended on the time grid's t0 (sigma=0.999 passed while sigma=1.0 failed). Fixed by capping the comoving consumption rate at the fast magnetosonic speed of the magnetized upstream in FRShockEqn::compute_dx3_dt (unreachable for sigma=0, where the penetration factor is algebraically >= 1). Parametrized over time grids because the original failure was grid-t0 sensitive. | 4.0 ms |
| pass | test_magnetized_knife_edge_sigmas[15-1.0] Regression for the penetration->0+ knife edge (fixed 2026-07-02): for magnetized shells the Zhang-Kobayashi crossing rate diverges as the penetration factor (Gamma*comp_ratio/Gamma4 - 1) -> 0+, and whether a run hit the singularity depended on the time grid's t0 (sigma=0.999 passed while sigma=1.0 failed). Fixed by capping the comoving consumption rate at the fast magnetosonic speed of the magnetized upstream in FRShockEqn::compute_dx3_dt (unreachable for sigma=0, where the penetration factor is algebraically >= 1). Parametrized over time grids because the original failure was grid-t0 sensitive. | 4.0 ms |
| pass | test_magnetized_knife_edge_sigmas[15-2.0] Regression for the penetration->0+ knife edge (fixed 2026-07-02): for magnetized shells the Zhang-Kobayashi crossing rate diverges as the penetration factor (Gamma*comp_ratio/Gamma4 - 1) -> 0+, and whether a run hit the singularity depended on the time grid's t0 (sigma=0.999 passed while sigma=1.0 failed). Fixed by capping the comoving consumption rate at the fast magnetosonic speed of the magnetized upstream in FRShockEqn::compute_dx3_dt (unreachable for sigma=0, where the penetration factor is algebraically >= 1). Parametrized over time grids because the original failure was grid-t0 sensitive. | 3.0 ms |
| pass | test_magnetized_knife_edge_sigmas[30-0.3] Regression for the penetration->0+ knife edge (fixed 2026-07-02): for magnetized shells the Zhang-Kobayashi crossing rate diverges as the penetration factor (Gamma*comp_ratio/Gamma4 - 1) -> 0+, and whether a run hit the singularity depended on the time grid's t0 (sigma=0.999 passed while sigma=1.0 failed). Fixed by capping the comoving consumption rate at the fast magnetosonic speed of the magnetized upstream in FRShockEqn::compute_dx3_dt (unreachable for sigma=0, where the penetration factor is algebraically >= 1). Parametrized over time grids because the original failure was grid-t0 sensitive. | 3.0 ms |
| pass | test_magnetized_knife_edge_sigmas[30-1.0] Regression for the penetration->0+ knife edge (fixed 2026-07-02): for magnetized shells the Zhang-Kobayashi crossing rate diverges as the penetration factor (Gamma*comp_ratio/Gamma4 - 1) -> 0+, and whether a run hit the singularity depended on the time grid's t0 (sigma=0.999 passed while sigma=1.0 failed). Fixed by capping the comoving consumption rate at the fast magnetosonic speed of the magnetized upstream in FRShockEqn::compute_dx3_dt (unreachable for sigma=0, where the penetration factor is algebraically >= 1). Parametrized over time grids because the original failure was grid-t0 sensitive. | 3.0 ms |
| pass | test_magnetized_knife_edge_sigmas[30-2.0] Regression for the penetration->0+ knife edge (fixed 2026-07-02): for magnetized shells the Zhang-Kobayashi crossing rate diverges as the penetration factor (Gamma*comp_ratio/Gamma4 - 1) -> 0+, and whether a run hit the singularity depended on the time grid's t0 (sigma=0.999 passed while sigma=1.0 failed). Fixed by capping the comoving consumption rate at the fast magnetosonic speed of the magnetized upstream in FRShockEqn::compute_dx3_dt (unreachable for sigma=0, where the penetration factor is algebraically >= 1). Parametrized over time grids because the original failure was grid-t0 sensitive. | 3.0 ms |
| pass | test_magnetized_knife_edge_sigmas[60-0.3] Regression for the penetration->0+ knife edge (fixed 2026-07-02): for magnetized shells the Zhang-Kobayashi crossing rate diverges as the penetration factor (Gamma*comp_ratio/Gamma4 - 1) -> 0+, and whether a run hit the singularity depended on the time grid's t0 (sigma=0.999 passed while sigma=1.0 failed). Fixed by capping the comoving consumption rate at the fast magnetosonic speed of the magnetized upstream in FRShockEqn::compute_dx3_dt (unreachable for sigma=0, where the penetration factor is algebraically >= 1). Parametrized over time grids because the original failure was grid-t0 sensitive. | 4.0 ms |
| pass | test_magnetized_knife_edge_sigmas[60-1.0] Regression for the penetration->0+ knife edge (fixed 2026-07-02): for magnetized shells the Zhang-Kobayashi crossing rate diverges as the penetration factor (Gamma*comp_ratio/Gamma4 - 1) -> 0+, and whether a run hit the singularity depended on the time grid's t0 (sigma=0.999 passed while sigma=1.0 failed). Fixed by capping the comoving consumption rate at the fast magnetosonic speed of the magnetized upstream in FRShockEqn::compute_dx3_dt (unreachable for sigma=0, where the penetration factor is algebraically >= 1). Parametrized over time grids because the original failure was grid-t0 sensitive. | 4.0 ms |
| pass | test_magnetized_knife_edge_sigmas[60-2.0] Regression for the penetration->0+ knife edge (fixed 2026-07-02): for magnetized shells the Zhang-Kobayashi crossing rate diverges as the penetration factor (Gamma*comp_ratio/Gamma4 - 1) -> 0+, and whether a run hit the singularity depended on the time grid's t0 (sigma=0.999 passed while sigma=1.0 failed). Fixed by capping the comoving consumption rate at the fast magnetosonic speed of the magnetized upstream in FRShockEqn::compute_dx3_dt (unreachable for sigma=0, where the penetration factor is algebraically >= 1). Parametrized over time grids because the original failure was grid-t0 sensitive. | 5.0 ms |
| pass | test_medium_corner[custom] Each ambient-medium variant (ISM, thin ISM, stellar wind, hybrid wind, custom density profile) produces a finite, strictly positive light curve. | 6.0 ms |
| pass | test_medium_corner[ism] Each ambient-medium variant (ISM, thin ISM, stellar wind, hybrid wind, custom density profile) produces a finite, strictly positive light curve. | 0 µs |
| pass | test_medium_corner[ism_thin] Each ambient-medium variant (ISM, thin ISM, stellar wind, hybrid wind, custom density profile) produces a finite, strictly positive light curve. | 0 µs |
| pass | test_medium_corner[wind] Each ambient-medium variant (ISM, thin ISM, stellar wind, hybrid wind, custom density profile) produces a finite, strictly positive light curve. | 0 µs |
| pass | test_medium_corner[wind_full] Each ambient-medium variant (ISM, thin ISM, stellar wind, hybrid wind, custom density profile) produces a finite, strictly positive light curve. | 0 µs |
| pass | test_method_details details returns forward-shock dynamics with finite Lorentz factor Gamma >= 1, strictly positive radius, and finite observer times. | 0 µs |
| pass | test_method_flux_band Band-integrated flux over 1e17-1e19 Hz matches the input time shape and is finite and strictly positive. | 1.0 ms |
| pass | test_method_flux_density flux_density on the baseline model returns a total-flux array matching the input time shape that is finite and strictly positive. | 0 µs |
| pass | test_method_flux_density_exposures Exposure-averaged flux over finite 10 s exposures returns one finite, strictly positive value per epoch. | 0 µs |
| pass | test_method_flux_density_grid flux_density_grid returns a (n_nu, n_t) total-flux grid that is finite and strictly positive. | 1.0 ms |
| pass | test_non_axisymmetric_custom_jet A custom Ejecta jet solved with axisymmetric=False and an off-axis observer produces a finite, strictly positive light curve. | 19.0 ms |
| pass | test_off_axis_corner[gaussian] For an observer at theta_obs=0.4 outside each jet's core (tophat, Gaussian, two-component), both the light curve and the (n_nu, n_t) flux grid are finite and strictly positive with the expected shapes. | 6.0 ms |
| pass | test_off_axis_corner[tophat] For an observer at theta_obs=0.4 outside each jet's core (tophat, Gaussian, two-component), both the light curve and the (n_nu, n_t) flux grid are finite and strictly positive with the expected shapes. | 4.0 ms |
| pass | test_off_axis_corner[two_component] For an observer at theta_obs=0.4 outside each jet's core (tophat, Gaussian, two-component), both the light curve and the (n_nu, n_t) flux grid are finite and strictly positive with the expected shapes. | 4.0 ms |
| pass | test_radiation_corner[p_near2] Each forward-shock radiation configuration (synchrotron only, SSC, SSC with Klein-Nishina, p near 2, steep p, reduced xi_e) produces a finite, strictly positive light curve. | 0 µs |
| pass | test_radiation_corner[p_steep] Each forward-shock radiation configuration (synchrotron only, SSC, SSC with Klein-Nishina, p near 2, steep p, reduced xi_e) produces a finite, strictly positive light curve. | 0 µs |
| pass | test_radiation_corner[plain] Each forward-shock radiation configuration (synchrotron only, SSC, SSC with Klein-Nishina, p near 2, steep p, reduced xi_e) produces a finite, strictly positive light curve. | 0 µs |
| pass | test_radiation_corner[ssc] Each forward-shock radiation configuration (synchrotron only, SSC, SSC with Klein-Nishina, p near 2, steep p, reduced xi_e) produces a finite, strictly positive light curve. | 3.0 ms |
| pass | test_radiation_corner[ssc_kn] Each forward-shock radiation configuration (synchrotron only, SSC, SSC with Klein-Nishina, p near 2, steep p, reduced xi_e) produces a finite, strictly positive light curve. | 3.0 ms |
| pass | test_radiation_corner[xi_e] Each forward-shock radiation configuration (synchrotron only, SSC, SSC with Klein-Nishina, p near 2, steep p, reduced xi_e) produces a finite, strictly positive light curve. | 1.0 ms |
| pass | test_reverse_shock_corner[p_near2] A thick-shell jet with each reverse-shock radiation configuration keeps the total flux finite and positive while the reverse-shock synchrotron component is finite, non-negative, and shaped like the input times. | 1.0 ms |
| pass | test_reverse_shock_corner[p_steep] A thick-shell jet with each reverse-shock radiation configuration keeps the total flux finite and positive while the reverse-shock synchrotron component is finite, non-negative, and shaped like the input times. | 1.0 ms |
| pass | test_reverse_shock_corner[plain] A thick-shell jet with each reverse-shock radiation configuration keeps the total flux finite and positive while the reverse-shock synchrotron component is finite, non-negative, and shaped like the input times. | 1.0 ms |
| pass | test_reverse_shock_corner[ssc] A thick-shell jet with each reverse-shock radiation configuration keeps the total flux finite and positive while the reverse-shock synchrotron component is finite, non-negative, and shaped like the input times. | 10.0 ms |
| pass | test_reverse_shock_corner[ssc_kn] A thick-shell jet with each reverse-shock radiation configuration keeps the total flux finite and positive while the reverse-shock synchrotron component is finite, non-negative, and shaped like the input times. | 14.0 ms |
| pass | test_reverse_shock_corner[xi_e] A thick-shell jet with each reverse-shock radiation configuration keeps the total flux finite and positive while the reverse-shock synchrotron component is finite, non-negative, and shaped like the input times. | 2.0 ms |
| pass | test_sky_image sky_image for an off-axis observer returns a finite intensity map with at least one lit pixel, the requested pixel dimension, a positive pixel solid angle, and at least four extent entries. | 0 µs |
test_pybind_validation| status | test | duration |
|---|---|---|
| pass | test_ejecta_bad_duration[-1.0] Ejecta raises ValueError naming duration for each non-positive or non-finite ejection duration. | 0 µs |
| pass | test_ejecta_bad_duration[0.0] Ejecta raises ValueError naming duration for each non-positive or non-finite ejection duration. | 0 µs |
| pass | test_ejecta_bad_duration[inf] Ejecta raises ValueError naming duration for each non-positive or non-finite ejection duration. | 0 µs |
| pass | test_ejecta_bad_duration[nan] Ejecta raises ValueError naming duration for each non-positive or non-finite ejection duration. | 0 µs |
| pass | test_ejecta_happy_path Ejecta constructs from callable E_iso and Gamma0 angular profiles without raising. | 0 µs |
| pass | test_ejecta_rejects_broken_E_iso_profile[-1e+52] Ejecta raises ValueError naming E_iso when the energy profile callable returns NaN, Inf, or a negative value. | 0 µs |
| pass | test_ejecta_rejects_broken_E_iso_profile[inf] Ejecta raises ValueError naming E_iso when the energy profile callable returns NaN, Inf, or a negative value. | 0 µs |
| pass | test_ejecta_rejects_broken_E_iso_profile[nan] Ejecta raises ValueError naming E_iso when the energy profile callable returns NaN, Inf, or a negative value. | 0 µs |
| pass | test_ejecta_rejects_broken_Gamma0_profile[-2.0] Ejecta raises ValueError naming Gamma0 when the Lorentz-factor profile callable returns a non-finite value or one that does not exceed 1. | 0 µs |
| pass | test_ejecta_rejects_broken_Gamma0_profile[0.5] Ejecta raises ValueError naming Gamma0 when the Lorentz-factor profile callable returns a non-finite value or one that does not exceed 1. | 0 µs |
| pass | test_ejecta_rejects_broken_Gamma0_profile[inf] Ejecta raises ValueError naming Gamma0 when the Lorentz-factor profile callable returns a non-finite value or one that does not exceed 1. | 0 µs |
| pass | test_ejecta_rejects_broken_Gamma0_profile[nan] Ejecta raises ValueError naming Gamma0 when the Lorentz-factor profile callable returns a non-finite value or one that does not exceed 1. | 0 µs |
| pass | test_ejecta_rejects_broken_sigma0_profile Ejecta raises ValueError naming sigma0 when the magnetization profile callable returns NaN. | 0 µs |
| pass | test_ejecta_rejects_non_callable Ejecta raises ValueError saying 'must be callable' when E_iso or Gamma0 is passed as a scalar instead of a profile function. | 0 µs |
| pass | test_flux_density_exposures_rejects_bad_expo_time flux_density_exposures raises ValueError naming the offending element expo_time[1] when one exposure time is negative. | 0 µs |
| pass | test_flux_density_exposures_rejects_nan_expo_time flux_density_exposures raises ValueError naming the offending element expo_time[1] when one exposure time is NaN. | 0 µs |
| pass | test_gaussian_happy_path GaussianJet constructs with positive theta_c, positive E_iso, and Gamma0 > 1 without raising. | 0 µs |
| pass | test_gaussian_rejects_nan_E_iso GaussianJet raises ValueError naming E_iso when the isotropic-equivalent energy is NaN. | 0 µs |
| pass | test_ism_bad_n_ism[-1.0] ISM raises ValueError naming n_ism for each negative, NaN, or Inf number density. | 0 µs |
| pass | test_ism_bad_n_ism[inf] ISM raises ValueError naming n_ism for each negative, NaN, or Inf number density. | 0 µs |
| pass | test_ism_bad_n_ism[nan] ISM raises ValueError naming n_ism for each negative, NaN, or Inf number density. | 0 µs |
| pass | test_ism_happy_path ISM constructs with a positive ambient number density n_ism without raising. | 0 µs |
| pass | test_ism_zero_density_allowed ISM accepts n_ism = 0 (no ambient density floor) without raising. | 0 µs |
| pass | test_magnetar_happy_path Magnetar constructs with positive spin-down luminosity L0, timescale t0, and decay index q without raising. | 0 µs |
| pass | test_magnetar_rejects_bad_inputs[L0-kwargs0] Magnetar raises ValueError naming the offending parameter for each case that passes a NaN, negative, or zero value for L0, t0, or q. | 0 µs |
| pass | test_magnetar_rejects_bad_inputs[L0-kwargs1] Magnetar raises ValueError naming the offending parameter for each case that passes a NaN, negative, or zero value for L0, t0, or q. | 0 µs |
| pass | test_magnetar_rejects_bad_inputs[L0-kwargs2] Magnetar raises ValueError naming the offending parameter for each case that passes a NaN, negative, or zero value for L0, t0, or q. | 0 µs |
| pass | test_magnetar_rejects_bad_inputs[q-kwargs5] Magnetar raises ValueError naming the offending parameter for each case that passes a NaN, negative, or zero value for L0, t0, or q. | 0 µs |
| pass | test_magnetar_rejects_bad_inputs[q-kwargs6] Magnetar raises ValueError naming the offending parameter for each case that passes a NaN, negative, or zero value for L0, t0, or q. | 0 µs |
| pass | test_magnetar_rejects_bad_inputs[t0-kwargs3] Magnetar raises ValueError naming the offending parameter for each case that passes a NaN, negative, or zero value for L0, t0, or q. | 0 µs |
| pass | test_magnetar_rejects_bad_inputs[t0-kwargs4] Magnetar raises ValueError naming the offending parameter for each case that passes a NaN, negative, or zero value for L0, t0, or q. | 0 µs |
| pass | test_medium_happy_path Medium constructs from a callable mass-density profile rho(phi, theta, r) without raising. | 0 µs |
| pass | test_medium_rejects_broken_rho_profile[-1e-24] Medium raises ValueError naming rho when the density profile callable returns NaN, Inf, or a negative value. | 0 µs |
| pass | test_medium_rejects_broken_rho_profile[inf] Medium raises ValueError naming rho when the density profile callable returns NaN, Inf, or a negative value. | 0 µs |
| pass | test_medium_rejects_broken_rho_profile[nan] Medium raises ValueError naming rho when the density profile callable returns NaN, Inf, or a negative value. | 0 µs |
| pass | test_medium_rejects_non_callable Medium raises ValueError saying 'rho must be callable' when the density profile is passed as a scalar. | 0 µs |
| pass | test_model_bad_resolutions[res0] Model raises ValueError matching 'resol' for each resolutions triple containing a negative, zero, NaN, or Inf entry. | 0 µs |
| pass | test_model_bad_resolutions[res1] Model raises ValueError matching 'resol' for each resolutions triple containing a negative, zero, NaN, or Inf entry. | 0 µs |
| pass | test_model_bad_resolutions[res2] Model raises ValueError matching 'resol' for each resolutions triple containing a negative, zero, NaN, or Inf entry. | 0 µs |
| pass | test_model_bad_resolutions[res3] Model raises ValueError matching 'resol' for each resolutions triple containing a negative, zero, NaN, or Inf entry. | 0 µs |
| pass | test_model_bad_rtol[-1e-05] Model raises ValueError naming rtol for each relative tolerance that is zero, negative, >= 1, or non-finite. | 0 µs |
| pass | test_model_bad_rtol[0.0] Model raises ValueError naming rtol for each relative tolerance that is zero, negative, >= 1, or non-finite. | 0 µs |
| pass | test_model_bad_rtol[1.0] Model raises ValueError naming rtol for each relative tolerance that is zero, negative, >= 1, or non-finite. | 0 µs |
| pass | test_model_bad_rtol[1.1] Model raises ValueError naming rtol for each relative tolerance that is zero, negative, >= 1, or non-finite. | 0 µs |
| pass | test_model_bad_rtol[inf] Model raises ValueError naming rtol for each relative tolerance that is zero, negative, >= 1, or non-finite. | 0 µs |
| pass | test_model_bad_rtol[nan] Model raises ValueError naming rtol for each relative tolerance that is zero, negative, >= 1, or non-finite. | 0 µs |
| pass | test_model_happy_path Model constructs from valid jet, medium, observer, and radiation components without raising. | 0 µs |
| pass | test_observer_bad_lumi_dist[-1.0] Observer raises ValueError naming lumi_dist for each non-positive or non-finite luminosity distance. | 0 µs |
| pass | test_observer_bad_lumi_dist[0.0] Observer raises ValueError naming lumi_dist for each non-positive or non-finite luminosity distance. | 0 µs |
| pass | test_observer_bad_lumi_dist[inf] Observer raises ValueError naming lumi_dist for each non-positive or non-finite luminosity distance. | 0 µs |
| pass | test_observer_bad_lumi_dist[nan] Observer raises ValueError naming lumi_dist for each non-positive or non-finite luminosity distance. | 0 µs |
| pass | test_observer_bad_theta_obs[-0.1] Observer raises ValueError naming theta_obs for each viewing angle that is negative, greater than pi, or non-finite. | 0 µs |
| pass | test_observer_bad_theta_obs[3.241592653589793] Observer raises ValueError naming theta_obs for each viewing angle that is negative, greater than pi, or non-finite. | 0 µs |
| pass | test_observer_bad_theta_obs[inf] Observer raises ValueError naming theta_obs for each viewing angle that is negative, greater than pi, or non-finite. | 0 µs |
| pass | test_observer_bad_theta_obs[nan] Observer raises ValueError naming theta_obs for each viewing angle that is negative, greater than pi, or non-finite. | 0 µs |
| pass | test_observer_bad_z[-0.1] Observer raises ValueError naming z for each negative, NaN, or Inf redshift. | 0 µs |
| pass | test_observer_bad_z[inf] Observer raises ValueError naming z for each negative, NaN, or Inf redshift. | 0 µs |
| pass | test_observer_bad_z[nan] Observer raises ValueError naming z for each negative, NaN, or Inf redshift. | 0 µs |
| pass | test_observer_happy_path Observer constructs with positive lumi_dist, non-negative z, and theta_obs inside [0, pi] without raising. | 0 µs |
| pass | test_observer_theta_obs_bounds_inclusive Observer accepts the inclusive viewing-angle bounds theta_obs = 0 and theta_obs = pi without raising. | 0 µs |
| pass | test_observer_z_zero_allowed Observer accepts redshift z = 0 without raising. | 0 µs |
| pass | test_powerlaw_bad_k_e[-1.0] PowerLawJet raises ValueError naming k_e for each non-positive or non-finite energy power-law index. | 0 µs |
| pass | test_powerlaw_bad_k_e[0.0] PowerLawJet raises ValueError naming k_e for each non-positive or non-finite energy power-law index. | 0 µs |
| pass | test_powerlaw_bad_k_e[inf] PowerLawJet raises ValueError naming k_e for each non-positive or non-finite energy power-law index. | 0 µs |
| pass | test_powerlaw_bad_k_e[nan] PowerLawJet raises ValueError naming k_e for each non-positive or non-finite energy power-law index. | 0 µs |
| pass | test_powerlaw_bad_k_g PowerLawJet raises ValueError naming k_g when the Lorentz-factor power-law index is NaN. | 0 µs |
| pass | test_powerlaw_happy_path PowerLawJet constructs with valid core parameters and positive power-law indices k_e and k_g without raising. | 0 µs |
| pass | test_powerlaw_wing_happy_path PowerLawWing constructs with positive theta_c, E_iso_w, Gamma0_w > 1, and indices k_e and k_g without raising. | 0 µs |
| pass | test_radiation_bad_eps_B[-1e-05] Radiation raises ValueError naming eps_B for each magnetic energy fraction that is zero, negative, above 1, or non-finite. | 0 µs |
| pass | test_radiation_bad_eps_B[0.0] Radiation raises ValueError naming eps_B for each magnetic energy fraction that is zero, negative, above 1, or non-finite. | 0 µs |
| pass | test_radiation_bad_eps_B[1.5] Radiation raises ValueError naming eps_B for each magnetic energy fraction that is zero, negative, above 1, or non-finite. | 0 µs |
| pass | test_radiation_bad_eps_B[inf] Radiation raises ValueError naming eps_B for each magnetic energy fraction that is zero, negative, above 1, or non-finite. | 0 µs |
| pass | test_radiation_bad_eps_B[nan] Radiation raises ValueError naming eps_B for each magnetic energy fraction that is zero, negative, above 1, or non-finite. | 0 µs |
| pass | test_radiation_bad_eps_e[-0.1] Radiation raises ValueError naming eps_e for each electron energy fraction that is zero, negative, above 1, or non-finite. | 0 µs |
| pass | test_radiation_bad_eps_e[0.0] Radiation raises ValueError naming eps_e for each electron energy fraction that is zero, negative, above 1, or non-finite. | 0 µs |
| pass | test_radiation_bad_eps_e[1.5] Radiation raises ValueError naming eps_e for each electron energy fraction that is zero, negative, above 1, or non-finite. | 0 µs |
| pass | test_radiation_bad_eps_e[inf] Radiation raises ValueError naming eps_e for each electron energy fraction that is zero, negative, above 1, or non-finite. | 0 µs |
| pass | test_radiation_bad_eps_e[nan] Radiation raises ValueError naming eps_e for each electron energy fraction that is zero, negative, above 1, or non-finite. | 0 µs |
| pass | test_radiation_bad_p[-1.0] Radiation raises ValueError naming p for each electron spectral index that is non-finite or violates the strict p > 1 bound, including p = 1 exactly. | 0 µs |
| pass | test_radiation_bad_p[0.5] Radiation raises ValueError naming p for each electron spectral index that is non-finite or violates the strict p > 1 bound, including p = 1 exactly. | 0 µs |
| pass | test_radiation_bad_p[1.0] Radiation raises ValueError naming p for each electron spectral index that is non-finite or violates the strict p > 1 bound, including p = 1 exactly. | 0 µs |
| pass | test_radiation_bad_p[inf] Radiation raises ValueError naming p for each electron spectral index that is non-finite or violates the strict p > 1 bound, including p = 1 exactly. | 0 µs |
| pass | test_radiation_bad_p[nan] Radiation raises ValueError naming p for each electron spectral index that is non-finite or violates the strict p > 1 bound, including p = 1 exactly. | 0 µs |
| pass | test_radiation_bad_xi_e[-0.1] Radiation raises ValueError naming xi_e for each accelerated-electron fraction that is zero, negative, above 1, or non-finite. | 0 µs |
| pass | test_radiation_bad_xi_e[0.0] Radiation raises ValueError naming xi_e for each accelerated-electron fraction that is zero, negative, above 1, or non-finite. | 0 µs |
| pass | test_radiation_bad_xi_e[1.5] Radiation raises ValueError naming xi_e for each accelerated-electron fraction that is zero, negative, above 1, or non-finite. | 0 µs |
| pass | test_radiation_bad_xi_e[inf] Radiation raises ValueError naming xi_e for each accelerated-electron fraction that is zero, negative, above 1, or non-finite. | 0 µs |
| pass | test_radiation_bad_xi_e[nan] Radiation raises ValueError naming xi_e for each accelerated-electron fraction that is zero, negative, above 1, or non-finite. | 0 µs |
| pass | test_radiation_happy_path Radiation constructs with eps_e and eps_B in (0, 1] and electron spectral index p > 1 without raising. | 0 µs |
| pass | test_radiation_p_slow_cooling_allowed Radiation accepts p = 1.5, confirming hard electron spectral indices in 1 < p < 2 are not rejected. | 0 µs |
| pass | test_radiation_xi_e_equals_one_allowed Radiation accepts the inclusive upper bound xi_e = 1 without raising. | 0 µs |
| pass | test_step_powerlaw_happy_path StepPowerLawJet constructs with valid core and wing parameters and positive indices k_e and k_g without raising. | 0 µs |
| pass | test_step_powerlaw_rejects_Gamma0_w_le_one StepPowerLawJet raises ValueError naming Gamma0_w when the wing bulk Lorentz factor equals 1. | 0 µs |
| pass | test_tophat_bad_E_iso[-1.0] TophatJet raises ValueError naming E_iso for each non-positive or non-finite isotropic-equivalent energy. | 0 µs |
| pass | test_tophat_bad_E_iso[0.0] TophatJet raises ValueError naming E_iso for each non-positive or non-finite isotropic-equivalent energy. | 0 µs |
| pass | test_tophat_bad_E_iso[inf] TophatJet raises ValueError naming E_iso for each non-positive or non-finite isotropic-equivalent energy. | 0 µs |
| pass | test_tophat_bad_E_iso[nan] TophatJet raises ValueError naming E_iso for each non-positive or non-finite isotropic-equivalent energy. | 0 µs |
| pass | test_tophat_bad_Gamma0[-10.0] TophatJet raises ValueError naming Gamma0 for each initial bulk Lorentz factor that is <= 1, negative, or non-finite. | 0 µs |
| pass | test_tophat_bad_Gamma0[0.0] TophatJet raises ValueError naming Gamma0 for each initial bulk Lorentz factor that is <= 1, negative, or non-finite. | 0 µs |
| pass | test_tophat_bad_Gamma0[0.5] TophatJet raises ValueError naming Gamma0 for each initial bulk Lorentz factor that is <= 1, negative, or non-finite. | 0 µs |
| pass | test_tophat_bad_Gamma0[1.0] TophatJet raises ValueError naming Gamma0 for each initial bulk Lorentz factor that is <= 1, negative, or non-finite. | 0 µs |
| pass | test_tophat_bad_Gamma0[inf] TophatJet raises ValueError naming Gamma0 for each initial bulk Lorentz factor that is <= 1, negative, or non-finite. | 0 µs |
| pass | test_tophat_bad_Gamma0[nan] TophatJet raises ValueError naming Gamma0 for each initial bulk Lorentz factor that is <= 1, negative, or non-finite. | 0 µs |
| pass | test_tophat_bad_theta_c[-0.1] TophatJet raises ValueError naming theta_c for each half-opening angle that is negative, zero, NaN, Inf, or as large as pi. | 3.0 ms |
| pass | test_tophat_bad_theta_c[0.0] TophatJet raises ValueError naming theta_c for each half-opening angle that is negative, zero, NaN, Inf, or as large as pi. | 0 µs |
| pass | test_tophat_bad_theta_c[3.141592653589793] TophatJet raises ValueError naming theta_c for each half-opening angle that is negative, zero, NaN, Inf, or as large as pi. | 0 µs |
| pass | test_tophat_bad_theta_c[inf] TophatJet raises ValueError naming theta_c for each half-opening angle that is negative, zero, NaN, Inf, or as large as pi. | 0 µs |
| pass | test_tophat_bad_theta_c[nan] TophatJet raises ValueError naming theta_c for each half-opening angle that is negative, zero, NaN, Inf, or as large as pi. | 0 µs |
| pass | test_tophat_happy_path TophatJet constructs with positive theta_c, positive E_iso, and Gamma0 > 1 without raising. | 1.0 ms |
| pass | test_two_component_happy_path TwoComponentJet constructs when the wing angle theta_w exceeds the core angle theta_c and all core/wing parameters are valid, without raising. | 0 µs |
| pass | test_two_component_rejects_nan_E_iso_w TwoComponentJet raises ValueError naming E_iso_w when the wing isotropic-equivalent energy is NaN. | 0 µs |
| pass | test_two_component_rejects_theta_w_le_theta_c TwoComponentJet raises ValueError naming theta_w when the wing angle does not exceed the core angle theta_c. | 0 µs |
| pass | test_wind_bad_A_star[-1.0] Wind raises ValueError naming A_star for each non-positive or non-finite wind parameter. | 0 µs |
| pass | test_wind_bad_A_star[0.0] Wind raises ValueError naming A_star for each non-positive or non-finite wind parameter. | 0 µs |
| pass | test_wind_bad_A_star[inf] Wind raises ValueError naming A_star for each non-positive or non-finite wind parameter. | 0 µs |
| pass | test_wind_bad_A_star[nan] Wind raises ValueError naming A_star for each non-positive or non-finite wind parameter. | 0 µs |
| pass | test_wind_bad_k_m Wind raises ValueError naming k_m when the density power-law slope is negative. | 0 µs |
| pass | test_wind_happy_path Wind constructs with a positive stellar-wind parameter A_star without raising. | 0 µs |
| pass | test_wind_n0_inf_allowed Wind accepts n0 = +inf as the no-density-floor sentinel without raising. | 0 µs |
| pass | test_wind_n0_negative_rejected Wind raises ValueError naming n0 when the density floor is negative. | 0 µs |
| pass | test_wind_n0_zero_rejected Wind raises ValueError naming n0 when the density floor is zero. | 0 µs |
test_units| status | test | duration |
|---|---|---|
| pass | test_ABmag_five_mags_is_factor_100 A 5-magnitude difference in AB magnitude corresponds to exactly a factor of 100 in flux density. | 0 µs |
| pass | test_ABmag_roundtrip_array AB magnitude to flux density round-trip recovers a numpy array of magnitudes elementwise to within relative tolerance 1e-7 (atol 1e-12 mag). | 0 µs |
| pass | test_ABmag_roundtrip_scalar cgs_to_ABmag inverts ABmag_to_cgs to within 1e-12 mag for scalar magnitudes from -5 to 30. | 0 µs |
| pass | test_ABmag_zero_is_AB_zeropoint AB magnitude 0 converts to the AB zero-point flux density of 3631 Jy (3.631e-20 erg/cm^2/s/Hz). | 0 µs |
| pass | test_STmag_roundtrip cgs_to_STmag inverts STmag_to_cgs to within 1e-10 mag for a registered ST-system filter. | 0 µs |
| pass | test_Vegamag_roundtrip cgs_to_Vegamag inverts Vegamag_to_cgs to within 1e-10 mag for a registered Vega-system filter. | 0 µs |
| pass | test_band_returns_positive_range band('XRT') returns a strictly ordered positive frequency range with 0 < nu_min < nu_max. | 0 µs |
| pass | test_band_unknown_name_raises band raises ValueError with an 'Unknown band' message for an unrecognized band name. | 0 µs |
| pass | test_filter_returns_positive_frequency filter returns a strictly positive effective frequency in Hz for a registered Vega filter. | 0 µs |
| pass | test_unknown_filter_raises Vegamag_to_cgs raises KeyError or ValueError when given an unrecognized filter name. | 0 µs |
test_closure_relations| status | test | duration |
|---|---|---|
| pass | test_ism_temporal_index_above_cooling ISM light curve above nu_c decays with alpha = (3p-2)/4 = 1.375 within a calibrated 0.15 that absorbs smooth-spectrum curvature. | 0 µs |
| pass | test_ism_temporal_index_mid_band ISM light curve at nu_m < nu < nu_c decays with the Granot & Sari slope alpha = 3(p-1)/4 = 1.125 within a calibrated 0.08. | 1.0 ms |
| pass | test_ism_temporal_index_scales_with_p Changing the electron index to p=2.2 shifts the ISM mid-band decay to alpha = 3(p-1)/4 = 0.9, so the closure relation tracks p. | 0 µs |
| pass | test_jet_break_steepens_light_curve A narrow jet's post-jet-break temporal decay index exceeds the pre-break index by more than 0.7. | 1.0 ms |
| pass | test_magnetar_injection_flattens_decay Magnetar spin-down energy injection flattens the optical decay index by at least 0.1 relative to the no-injection model. | 1.0 ms |
| pass | test_off_axis_dimmer_early_brighter_never Relativistic beaming makes the off-axis (theta_obs > theta_c) flux strictly lower than on-axis at every sampled early time. | 1.0 ms |
| pass | test_spectral_index_above_cooling Spectral slope above nu_c matches beta = p/2 = 1.25 within 0.1. | 0 µs |
| pass | test_spectral_index_mid_band Spectral slope between nu_m and nu_c matches beta = (p-1)/2 = 0.75 within a calibrated 0.08. | 1.0 ms |
| pass | test_spectrum_rises_below_peak The maximum local spectral slope in the nu_a-to-past-nu_m window must lie between +0.15 and +0.45 (rising segment near the nu^{1/3} asymptote; measured ~+0.34), and the local slope at the low-frequency end of the window must exceed that at the high-frequency end as the rise flattens across nu_m. | 2.0 ms |
| pass | test_ssc_fraction_grows_with_eps_e_over_eps_B Lowering eps_B from 1e-2 to 1e-4 raises the SSC-to-synchrotron flux ratio more than tenfold (Compton Y ~ sqrt(eps_e/eps_B)), with SSC dominating at 1e24 Hz in both cases. | 3.0 ms |
| pass | test_thick_shell_reverse_shock_peaks_at_crossing In the thick-shell regime the reverse-shock synchrotron light curve peaks within a factor of ~3 of the shell-crossing time T*(1+z). | 3.0 ms |
| pass | test_wind_temporal_index_mid_band Stellar-wind-medium light curve at nu_m < nu < nu_c decays with alpha = (3p-1)/4 = 1.625 within a calibrated 0.08. | 1.0 ms |
test_fit_smoke| status | test | duration |
|---|---|---|
| pass | test_fit_recovers_energy_scale The top-ranked sample's log10(E_iso) lands within 1 dex of the injected truth, i.e. the short MCMC run recovers the isotropic energy to the right order of magnitude. | 0 µs |
| pass | test_fit_returns_well_formed_result FitResult has consistent shapes: samples' last axis equals the 2 free parameters, log-probs are all finite, and top_k_params/n_free_params/n_data match the fit setup. | 167.0 ms |
| pass | test_fit_summary_renders FitResult.summary() renders without raising and its repr contains ranking or chi-square content. | 0 µs |
test_golden| status | test | duration |
|---|---|---|
| pass | test_baseline_grid_matches[gauss_ism_rs] Each config's stored baseline time and frequency grids match the current regeneration grids to 1e-12 relative (logspace differs by one ulp across platform libms). | 2.0 ms |
| pass | test_baseline_grid_matches[gauss_wind_ssc] Each config's stored baseline time and frequency grids match the current regeneration grids to 1e-12 relative (logspace differs by one ulp across platform libms). | 1.0 ms |
| pass | test_baseline_grid_matches[powerlaw_wind_rs] Each config's stored baseline time and frequency grids match the current regeneration grids to 1e-12 relative (logspace differs by one ulp across platform libms). | 1.0 ms |
| pass | test_baseline_grid_matches[rs_thick] Each config's stored baseline time and frequency grids match the current regeneration grids to 1e-12 relative (logspace differs by one ulp across platform libms). | 1.0 ms |
| pass | test_baseline_grid_matches[tophat_ism] Each config's stored baseline time and frequency grids match the current regeneration grids to 1e-12 relative (logspace differs by one ulp across platform libms). | 0 µs |
| pass | test_baseline_grid_matches[tophat_ism_adiabatic] Each config's stored baseline time and frequency grids match the current regeneration grids to 1e-12 relative (logspace differs by one ulp across platform libms). | 1.0 ms |
| pass | test_baseline_grid_matches[tophat_sigma10_rs] Each config's stored baseline time and frequency grids match the current regeneration grids to 1e-12 relative (logspace differs by one ulp across platform libms). | 0 µs |
| pass | test_baseline_grid_matches[tophat_sigma1_rs] Each config's stored baseline time and frequency grids match the current regeneration grids to 1e-12 relative (logspace differs by one ulp across platform libms). | 0 µs |
| pass | test_baseline_grid_matches[tophat_sigma_rs] Each config's stored baseline time and frequency grids match the current regeneration grids to 1e-12 relative (logspace differs by one ulp across platform libms). | 0 µs |
| pass | test_baseline_grid_matches[two_component_ism] Each config's stored baseline time and frequency grids match the current regeneration grids to 1e-12 relative (logspace differs by one ulp across platform libms). | 0 µs |
| pass | test_golden_component[gauss_ism_rs-fwd_ssc] Each recomputed flux component matches its golden baseline within the calibrated rtol=2e-3, and identically-zero baseline components stay zero. Bins below 1e-2 of the component peak float (the atol term): for structured-jet reverse shocks their values are only reproducible to ~1% against ANY perturbation — codegen, platform libm, math-kernel choice — because the wing-row ODE solves amplify bit-level differences to that saturated level. Real regressions move bright bins far beyond rtol, so nothing observable is unguarded. | 0 µs |
| pass | test_golden_component[gauss_ism_rs-fwd_sync] Each recomputed flux component matches its golden baseline within the calibrated rtol=2e-3, and identically-zero baseline components stay zero. Bins below 1e-2 of the component peak float (the atol term): for structured-jet reverse shocks their values are only reproducible to ~1% against ANY perturbation — codegen, platform libm, math-kernel choice — because the wing-row ODE solves amplify bit-level differences to that saturated level. Real regressions move bright bins far beyond rtol, so nothing observable is unguarded. | 0 µs |
| pass | test_golden_component[gauss_ism_rs-rvs_ssc] Each recomputed flux component matches its golden baseline within the calibrated rtol=2e-3, and identically-zero baseline components stay zero. Bins below 1e-2 of the component peak float (the atol term): for structured-jet reverse shocks their values are only reproducible to ~1% against ANY perturbation — codegen, platform libm, math-kernel choice — because the wing-row ODE solves amplify bit-level differences to that saturated level. Real regressions move bright bins far beyond rtol, so nothing observable is unguarded. | 0 µs |
| pass | test_golden_component[gauss_ism_rs-rvs_sync] Each recomputed flux component matches its golden baseline within the calibrated rtol=2e-3, and identically-zero baseline components stay zero. Bins below 1e-2 of the component peak float (the atol term): for structured-jet reverse shocks their values are only reproducible to ~1% against ANY perturbation — codegen, platform libm, math-kernel choice — because the wing-row ODE solves amplify bit-level differences to that saturated level. Real regressions move bright bins far beyond rtol, so nothing observable is unguarded. | 0 µs |
| pass | test_golden_component[gauss_ism_rs-total] Each recomputed flux component matches its golden baseline within the calibrated rtol=2e-3, and identically-zero baseline components stay zero. Bins below 1e-2 of the component peak float (the atol term): for structured-jet reverse shocks their values are only reproducible to ~1% against ANY perturbation — codegen, platform libm, math-kernel choice — because the wing-row ODE solves amplify bit-level differences to that saturated level. Real regressions move bright bins far beyond rtol, so nothing observable is unguarded. | 1.0 ms |
| pass | test_golden_component[gauss_wind_ssc-fwd_ssc] Each recomputed flux component matches its golden baseline within the calibrated rtol=2e-3, and identically-zero baseline components stay zero. Bins below 1e-2 of the component peak float (the atol term): for structured-jet reverse shocks their values are only reproducible to ~1% against ANY perturbation — codegen, platform libm, math-kernel choice — because the wing-row ODE solves amplify bit-level differences to that saturated level. Real regressions move bright bins far beyond rtol, so nothing observable is unguarded. | 0 µs |
| pass | test_golden_component[gauss_wind_ssc-fwd_sync] Each recomputed flux component matches its golden baseline within the calibrated rtol=2e-3, and identically-zero baseline components stay zero. Bins below 1e-2 of the component peak float (the atol term): for structured-jet reverse shocks their values are only reproducible to ~1% against ANY perturbation — codegen, platform libm, math-kernel choice — because the wing-row ODE solves amplify bit-level differences to that saturated level. Real regressions move bright bins far beyond rtol, so nothing observable is unguarded. | 0 µs |
| pass | test_golden_component[gauss_wind_ssc-rvs_ssc] Each recomputed flux component matches its golden baseline within the calibrated rtol=2e-3, and identically-zero baseline components stay zero. Bins below 1e-2 of the component peak float (the atol term): for structured-jet reverse shocks their values are only reproducible to ~1% against ANY perturbation — codegen, platform libm, math-kernel choice — because the wing-row ODE solves amplify bit-level differences to that saturated level. Real regressions move bright bins far beyond rtol, so nothing observable is unguarded. | 0 µs |
| pass | test_golden_component[gauss_wind_ssc-rvs_sync] Each recomputed flux component matches its golden baseline within the calibrated rtol=2e-3, and identically-zero baseline components stay zero. Bins below 1e-2 of the component peak float (the atol term): for structured-jet reverse shocks their values are only reproducible to ~1% against ANY perturbation — codegen, platform libm, math-kernel choice — because the wing-row ODE solves amplify bit-level differences to that saturated level. Real regressions move bright bins far beyond rtol, so nothing observable is unguarded. | 0 µs |
| pass | test_golden_component[gauss_wind_ssc-total] Each recomputed flux component matches its golden baseline within the calibrated rtol=2e-3, and identically-zero baseline components stay zero. Bins below 1e-2 of the component peak float (the atol term): for structured-jet reverse shocks their values are only reproducible to ~1% against ANY perturbation — codegen, platform libm, math-kernel choice — because the wing-row ODE solves amplify bit-level differences to that saturated level. Real regressions move bright bins far beyond rtol, so nothing observable is unguarded. | 0 µs |
| pass | test_golden_component[powerlaw_wind_rs-fwd_ssc] Each recomputed flux component matches its golden baseline within the calibrated rtol=2e-3, and identically-zero baseline components stay zero. Bins below 1e-2 of the component peak float (the atol term): for structured-jet reverse shocks their values are only reproducible to ~1% against ANY perturbation — codegen, platform libm, math-kernel choice — because the wing-row ODE solves amplify bit-level differences to that saturated level. Real regressions move bright bins far beyond rtol, so nothing observable is unguarded. | 0 µs |
| pass | test_golden_component[powerlaw_wind_rs-fwd_sync] Each recomputed flux component matches its golden baseline within the calibrated rtol=2e-3, and identically-zero baseline components stay zero. Bins below 1e-2 of the component peak float (the atol term): for structured-jet reverse shocks their values are only reproducible to ~1% against ANY perturbation — codegen, platform libm, math-kernel choice — because the wing-row ODE solves amplify bit-level differences to that saturated level. Real regressions move bright bins far beyond rtol, so nothing observable is unguarded. | 0 µs |
| pass | test_golden_component[powerlaw_wind_rs-rvs_ssc] Each recomputed flux component matches its golden baseline within the calibrated rtol=2e-3, and identically-zero baseline components stay zero. Bins below 1e-2 of the component peak float (the atol term): for structured-jet reverse shocks their values are only reproducible to ~1% against ANY perturbation — codegen, platform libm, math-kernel choice — because the wing-row ODE solves amplify bit-level differences to that saturated level. Real regressions move bright bins far beyond rtol, so nothing observable is unguarded. | 0 µs |
| pass | test_golden_component[powerlaw_wind_rs-rvs_sync] Each recomputed flux component matches its golden baseline within the calibrated rtol=2e-3, and identically-zero baseline components stay zero. Bins below 1e-2 of the component peak float (the atol term): for structured-jet reverse shocks their values are only reproducible to ~1% against ANY perturbation — codegen, platform libm, math-kernel choice — because the wing-row ODE solves amplify bit-level differences to that saturated level. Real regressions move bright bins far beyond rtol, so nothing observable is unguarded. | 0 µs |
| pass | test_golden_component[powerlaw_wind_rs-total] Each recomputed flux component matches its golden baseline within the calibrated rtol=2e-3, and identically-zero baseline components stay zero. Bins below 1e-2 of the component peak float (the atol term): for structured-jet reverse shocks their values are only reproducible to ~1% against ANY perturbation — codegen, platform libm, math-kernel choice — because the wing-row ODE solves amplify bit-level differences to that saturated level. Real regressions move bright bins far beyond rtol, so nothing observable is unguarded. | 0 µs |
| pass | test_golden_component[rs_thick-fwd_ssc] Each recomputed flux component matches its golden baseline within the calibrated rtol=2e-3, and identically-zero baseline components stay zero. Bins below 1e-2 of the component peak float (the atol term): for structured-jet reverse shocks their values are only reproducible to ~1% against ANY perturbation — codegen, platform libm, math-kernel choice — because the wing-row ODE solves amplify bit-level differences to that saturated level. Real regressions move bright bins far beyond rtol, so nothing observable is unguarded. | 0 µs |
| pass | test_golden_component[rs_thick-fwd_sync] Each recomputed flux component matches its golden baseline within the calibrated rtol=2e-3, and identically-zero baseline components stay zero. Bins below 1e-2 of the component peak float (the atol term): for structured-jet reverse shocks their values are only reproducible to ~1% against ANY perturbation — codegen, platform libm, math-kernel choice — because the wing-row ODE solves amplify bit-level differences to that saturated level. Real regressions move bright bins far beyond rtol, so nothing observable is unguarded. | 0 µs |
| pass | test_golden_component[rs_thick-rvs_ssc] Each recomputed flux component matches its golden baseline within the calibrated rtol=2e-3, and identically-zero baseline components stay zero. Bins below 1e-2 of the component peak float (the atol term): for structured-jet reverse shocks their values are only reproducible to ~1% against ANY perturbation — codegen, platform libm, math-kernel choice — because the wing-row ODE solves amplify bit-level differences to that saturated level. Real regressions move bright bins far beyond rtol, so nothing observable is unguarded. | 0 µs |
| pass | test_golden_component[rs_thick-rvs_sync] Each recomputed flux component matches its golden baseline within the calibrated rtol=2e-3, and identically-zero baseline components stay zero. Bins below 1e-2 of the component peak float (the atol term): for structured-jet reverse shocks their values are only reproducible to ~1% against ANY perturbation — codegen, platform libm, math-kernel choice — because the wing-row ODE solves amplify bit-level differences to that saturated level. Real regressions move bright bins far beyond rtol, so nothing observable is unguarded. | 0 µs |
| pass | test_golden_component[rs_thick-total] Each recomputed flux component matches its golden baseline within the calibrated rtol=2e-3, and identically-zero baseline components stay zero. Bins below 1e-2 of the component peak float (the atol term): for structured-jet reverse shocks their values are only reproducible to ~1% against ANY perturbation — codegen, platform libm, math-kernel choice — because the wing-row ODE solves amplify bit-level differences to that saturated level. Real regressions move bright bins far beyond rtol, so nothing observable is unguarded. | 0 µs |
| pass | test_golden_component[tophat_ism-fwd_ssc] Each recomputed flux component matches its golden baseline within the calibrated rtol=2e-3, and identically-zero baseline components stay zero. Bins below 1e-2 of the component peak float (the atol term): for structured-jet reverse shocks their values are only reproducible to ~1% against ANY perturbation — codegen, platform libm, math-kernel choice — because the wing-row ODE solves amplify bit-level differences to that saturated level. Real regressions move bright bins far beyond rtol, so nothing observable is unguarded. | 0 µs |
| pass | test_golden_component[tophat_ism-fwd_sync] Each recomputed flux component matches its golden baseline within the calibrated rtol=2e-3, and identically-zero baseline components stay zero. Bins below 1e-2 of the component peak float (the atol term): for structured-jet reverse shocks their values are only reproducible to ~1% against ANY perturbation — codegen, platform libm, math-kernel choice — because the wing-row ODE solves amplify bit-level differences to that saturated level. Real regressions move bright bins far beyond rtol, so nothing observable is unguarded. | 0 µs |
| pass | test_golden_component[tophat_ism-rvs_ssc] Each recomputed flux component matches its golden baseline within the calibrated rtol=2e-3, and identically-zero baseline components stay zero. Bins below 1e-2 of the component peak float (the atol term): for structured-jet reverse shocks their values are only reproducible to ~1% against ANY perturbation — codegen, platform libm, math-kernel choice — because the wing-row ODE solves amplify bit-level differences to that saturated level. Real regressions move bright bins far beyond rtol, so nothing observable is unguarded. | 0 µs |
| pass | test_golden_component[tophat_ism-rvs_sync] Each recomputed flux component matches its golden baseline within the calibrated rtol=2e-3, and identically-zero baseline components stay zero. Bins below 1e-2 of the component peak float (the atol term): for structured-jet reverse shocks their values are only reproducible to ~1% against ANY perturbation — codegen, platform libm, math-kernel choice — because the wing-row ODE solves amplify bit-level differences to that saturated level. Real regressions move bright bins far beyond rtol, so nothing observable is unguarded. | 0 µs |
| pass | test_golden_component[tophat_ism-total] Each recomputed flux component matches its golden baseline within the calibrated rtol=2e-3, and identically-zero baseline components stay zero. Bins below 1e-2 of the component peak float (the atol term): for structured-jet reverse shocks their values are only reproducible to ~1% against ANY perturbation — codegen, platform libm, math-kernel choice — because the wing-row ODE solves amplify bit-level differences to that saturated level. Real regressions move bright bins far beyond rtol, so nothing observable is unguarded. | 0 µs |
| pass | test_golden_component[tophat_ism_adiabatic-fwd_ssc] Each recomputed flux component matches its golden baseline within the calibrated rtol=2e-3, and identically-zero baseline components stay zero. Bins below 1e-2 of the component peak float (the atol term): for structured-jet reverse shocks their values are only reproducible to ~1% against ANY perturbation — codegen, platform libm, math-kernel choice — because the wing-row ODE solves amplify bit-level differences to that saturated level. Real regressions move bright bins far beyond rtol, so nothing observable is unguarded. | 0 µs |
| pass | test_golden_component[tophat_ism_adiabatic-fwd_sync] Each recomputed flux component matches its golden baseline within the calibrated rtol=2e-3, and identically-zero baseline components stay zero. Bins below 1e-2 of the component peak float (the atol term): for structured-jet reverse shocks their values are only reproducible to ~1% against ANY perturbation — codegen, platform libm, math-kernel choice — because the wing-row ODE solves amplify bit-level differences to that saturated level. Real regressions move bright bins far beyond rtol, so nothing observable is unguarded. | 0 µs |
| pass | test_golden_component[tophat_ism_adiabatic-rvs_ssc] Each recomputed flux component matches its golden baseline within the calibrated rtol=2e-3, and identically-zero baseline components stay zero. Bins below 1e-2 of the component peak float (the atol term): for structured-jet reverse shocks their values are only reproducible to ~1% against ANY perturbation — codegen, platform libm, math-kernel choice — because the wing-row ODE solves amplify bit-level differences to that saturated level. Real regressions move bright bins far beyond rtol, so nothing observable is unguarded. | 0 µs |
| pass | test_golden_component[tophat_ism_adiabatic-rvs_sync] Each recomputed flux component matches its golden baseline within the calibrated rtol=2e-3, and identically-zero baseline components stay zero. Bins below 1e-2 of the component peak float (the atol term): for structured-jet reverse shocks their values are only reproducible to ~1% against ANY perturbation — codegen, platform libm, math-kernel choice — because the wing-row ODE solves amplify bit-level differences to that saturated level. Real regressions move bright bins far beyond rtol, so nothing observable is unguarded. | 0 µs |
| pass | test_golden_component[tophat_ism_adiabatic-total] Each recomputed flux component matches its golden baseline within the calibrated rtol=2e-3, and identically-zero baseline components stay zero. Bins below 1e-2 of the component peak float (the atol term): for structured-jet reverse shocks their values are only reproducible to ~1% against ANY perturbation — codegen, platform libm, math-kernel choice — because the wing-row ODE solves amplify bit-level differences to that saturated level. Real regressions move bright bins far beyond rtol, so nothing observable is unguarded. | 0 µs |
| pass | test_golden_component[tophat_sigma10_rs-fwd_ssc] Each recomputed flux component matches its golden baseline within the calibrated rtol=2e-3, and identically-zero baseline components stay zero. Bins below 1e-2 of the component peak float (the atol term): for structured-jet reverse shocks their values are only reproducible to ~1% against ANY perturbation — codegen, platform libm, math-kernel choice — because the wing-row ODE solves amplify bit-level differences to that saturated level. Real regressions move bright bins far beyond rtol, so nothing observable is unguarded. | 0 µs |
| pass | test_golden_component[tophat_sigma10_rs-fwd_sync] Each recomputed flux component matches its golden baseline within the calibrated rtol=2e-3, and identically-zero baseline components stay zero. Bins below 1e-2 of the component peak float (the atol term): for structured-jet reverse shocks their values are only reproducible to ~1% against ANY perturbation — codegen, platform libm, math-kernel choice — because the wing-row ODE solves amplify bit-level differences to that saturated level. Real regressions move bright bins far beyond rtol, so nothing observable is unguarded. | 0 µs |
| pass | test_golden_component[tophat_sigma10_rs-rvs_ssc] Each recomputed flux component matches its golden baseline within the calibrated rtol=2e-3, and identically-zero baseline components stay zero. Bins below 1e-2 of the component peak float (the atol term): for structured-jet reverse shocks their values are only reproducible to ~1% against ANY perturbation — codegen, platform libm, math-kernel choice — because the wing-row ODE solves amplify bit-level differences to that saturated level. Real regressions move bright bins far beyond rtol, so nothing observable is unguarded. | 0 µs |
| pass | test_golden_component[tophat_sigma10_rs-rvs_sync] Each recomputed flux component matches its golden baseline within the calibrated rtol=2e-3, and identically-zero baseline components stay zero. Bins below 1e-2 of the component peak float (the atol term): for structured-jet reverse shocks their values are only reproducible to ~1% against ANY perturbation — codegen, platform libm, math-kernel choice — because the wing-row ODE solves amplify bit-level differences to that saturated level. Real regressions move bright bins far beyond rtol, so nothing observable is unguarded. | 0 µs |
| pass | test_golden_component[tophat_sigma10_rs-total] Each recomputed flux component matches its golden baseline within the calibrated rtol=2e-3, and identically-zero baseline components stay zero. Bins below 1e-2 of the component peak float (the atol term): for structured-jet reverse shocks their values are only reproducible to ~1% against ANY perturbation — codegen, platform libm, math-kernel choice — because the wing-row ODE solves amplify bit-level differences to that saturated level. Real regressions move bright bins far beyond rtol, so nothing observable is unguarded. | 0 µs |
| pass | test_golden_component[tophat_sigma1_rs-fwd_ssc] Each recomputed flux component matches its golden baseline within the calibrated rtol=2e-3, and identically-zero baseline components stay zero. Bins below 1e-2 of the component peak float (the atol term): for structured-jet reverse shocks their values are only reproducible to ~1% against ANY perturbation — codegen, platform libm, math-kernel choice — because the wing-row ODE solves amplify bit-level differences to that saturated level. Real regressions move bright bins far beyond rtol, so nothing observable is unguarded. | 0 µs |
| pass | test_golden_component[tophat_sigma1_rs-fwd_sync] Each recomputed flux component matches its golden baseline within the calibrated rtol=2e-3, and identically-zero baseline components stay zero. Bins below 1e-2 of the component peak float (the atol term): for structured-jet reverse shocks their values are only reproducible to ~1% against ANY perturbation — codegen, platform libm, math-kernel choice — because the wing-row ODE solves amplify bit-level differences to that saturated level. Real regressions move bright bins far beyond rtol, so nothing observable is unguarded. | 0 µs |
| pass | test_golden_component[tophat_sigma1_rs-rvs_ssc] Each recomputed flux component matches its golden baseline within the calibrated rtol=2e-3, and identically-zero baseline components stay zero. Bins below 1e-2 of the component peak float (the atol term): for structured-jet reverse shocks their values are only reproducible to ~1% against ANY perturbation — codegen, platform libm, math-kernel choice — because the wing-row ODE solves amplify bit-level differences to that saturated level. Real regressions move bright bins far beyond rtol, so nothing observable is unguarded. | 0 µs |
| pass | test_golden_component[tophat_sigma1_rs-rvs_sync] Each recomputed flux component matches its golden baseline within the calibrated rtol=2e-3, and identically-zero baseline components stay zero. Bins below 1e-2 of the component peak float (the atol term): for structured-jet reverse shocks their values are only reproducible to ~1% against ANY perturbation — codegen, platform libm, math-kernel choice — because the wing-row ODE solves amplify bit-level differences to that saturated level. Real regressions move bright bins far beyond rtol, so nothing observable is unguarded. | 0 µs |
| pass | test_golden_component[tophat_sigma1_rs-total] Each recomputed flux component matches its golden baseline within the calibrated rtol=2e-3, and identically-zero baseline components stay zero. Bins below 1e-2 of the component peak float (the atol term): for structured-jet reverse shocks their values are only reproducible to ~1% against ANY perturbation — codegen, platform libm, math-kernel choice — because the wing-row ODE solves amplify bit-level differences to that saturated level. Real regressions move bright bins far beyond rtol, so nothing observable is unguarded. | 0 µs |
| pass | test_golden_component[tophat_sigma_rs-fwd_ssc] Each recomputed flux component matches its golden baseline within the calibrated rtol=2e-3, and identically-zero baseline components stay zero. Bins below 1e-2 of the component peak float (the atol term): for structured-jet reverse shocks their values are only reproducible to ~1% against ANY perturbation — codegen, platform libm, math-kernel choice — because the wing-row ODE solves amplify bit-level differences to that saturated level. Real regressions move bright bins far beyond rtol, so nothing observable is unguarded. | 0 µs |
| pass | test_golden_component[tophat_sigma_rs-fwd_sync] Each recomputed flux component matches its golden baseline within the calibrated rtol=2e-3, and identically-zero baseline components stay zero. Bins below 1e-2 of the component peak float (the atol term): for structured-jet reverse shocks their values are only reproducible to ~1% against ANY perturbation — codegen, platform libm, math-kernel choice — because the wing-row ODE solves amplify bit-level differences to that saturated level. Real regressions move bright bins far beyond rtol, so nothing observable is unguarded. | 0 µs |
| pass | test_golden_component[tophat_sigma_rs-rvs_ssc] Each recomputed flux component matches its golden baseline within the calibrated rtol=2e-3, and identically-zero baseline components stay zero. Bins below 1e-2 of the component peak float (the atol term): for structured-jet reverse shocks their values are only reproducible to ~1% against ANY perturbation — codegen, platform libm, math-kernel choice — because the wing-row ODE solves amplify bit-level differences to that saturated level. Real regressions move bright bins far beyond rtol, so nothing observable is unguarded. | 0 µs |
| pass | test_golden_component[tophat_sigma_rs-rvs_sync] Each recomputed flux component matches its golden baseline within the calibrated rtol=2e-3, and identically-zero baseline components stay zero. Bins below 1e-2 of the component peak float (the atol term): for structured-jet reverse shocks their values are only reproducible to ~1% against ANY perturbation — codegen, platform libm, math-kernel choice — because the wing-row ODE solves amplify bit-level differences to that saturated level. Real regressions move bright bins far beyond rtol, so nothing observable is unguarded. | 0 µs |
| pass | test_golden_component[tophat_sigma_rs-total] Each recomputed flux component matches its golden baseline within the calibrated rtol=2e-3, and identically-zero baseline components stay zero. Bins below 1e-2 of the component peak float (the atol term): for structured-jet reverse shocks their values are only reproducible to ~1% against ANY perturbation — codegen, platform libm, math-kernel choice — because the wing-row ODE solves amplify bit-level differences to that saturated level. Real regressions move bright bins far beyond rtol, so nothing observable is unguarded. | 0 µs |
| pass | test_golden_component[two_component_ism-fwd_ssc] Each recomputed flux component matches its golden baseline within the calibrated rtol=2e-3, and identically-zero baseline components stay zero. Bins below 1e-2 of the component peak float (the atol term): for structured-jet reverse shocks their values are only reproducible to ~1% against ANY perturbation — codegen, platform libm, math-kernel choice — because the wing-row ODE solves amplify bit-level differences to that saturated level. Real regressions move bright bins far beyond rtol, so nothing observable is unguarded. | 0 µs |
| pass | test_golden_component[two_component_ism-fwd_sync] Each recomputed flux component matches its golden baseline within the calibrated rtol=2e-3, and identically-zero baseline components stay zero. Bins below 1e-2 of the component peak float (the atol term): for structured-jet reverse shocks their values are only reproducible to ~1% against ANY perturbation — codegen, platform libm, math-kernel choice — because the wing-row ODE solves amplify bit-level differences to that saturated level. Real regressions move bright bins far beyond rtol, so nothing observable is unguarded. | 0 µs |
| pass | test_golden_component[two_component_ism-rvs_ssc] Each recomputed flux component matches its golden baseline within the calibrated rtol=2e-3, and identically-zero baseline components stay zero. Bins below 1e-2 of the component peak float (the atol term): for structured-jet reverse shocks their values are only reproducible to ~1% against ANY perturbation — codegen, platform libm, math-kernel choice — because the wing-row ODE solves amplify bit-level differences to that saturated level. Real regressions move bright bins far beyond rtol, so nothing observable is unguarded. | 0 µs |
| pass | test_golden_component[two_component_ism-rvs_sync] Each recomputed flux component matches its golden baseline within the calibrated rtol=2e-3, and identically-zero baseline components stay zero. Bins below 1e-2 of the component peak float (the atol term): for structured-jet reverse shocks their values are only reproducible to ~1% against ANY perturbation — codegen, platform libm, math-kernel choice — because the wing-row ODE solves amplify bit-level differences to that saturated level. Real regressions move bright bins far beyond rtol, so nothing observable is unguarded. | 0 µs |
| pass | test_golden_component[two_component_ism-total] Each recomputed flux component matches its golden baseline within the calibrated rtol=2e-3, and identically-zero baseline components stay zero. Bins below 1e-2 of the component peak float (the atol term): for structured-jet reverse shocks their values are only reproducible to ~1% against ANY perturbation — codegen, platform libm, math-kernel choice — because the wing-row ODE solves amplify bit-level differences to that saturated level. Real regressions move bright bins far beyond rtol, so nothing observable is unguarded. | 0 µs |
| pass | test_no_solver_warnings[gauss_ism_rs] The shock solver must not abandon any grid row ("giving up" on stderr): an abandoned row leaves its stored state at initialization values and silently corrupts the light curve. | 126.0 ms |
| pass | test_no_solver_warnings[gauss_wind_ssc] The shock solver must not abandon any grid row ("giving up" on stderr): an abandoned row leaves its stored state at initialization values and silently corrupts the light curve. | 128.0 ms |
| pass | test_no_solver_warnings[powerlaw_wind_rs] The shock solver must not abandon any grid row ("giving up" on stderr): an abandoned row leaves its stored state at initialization values and silently corrupts the light curve. | 51.0 ms |
| pass | test_no_solver_warnings[rs_thick] The shock solver must not abandon any grid row ("giving up" on stderr): an abandoned row leaves its stored state at initialization values and silently corrupts the light curve. | 3.0 ms |
| pass | test_no_solver_warnings[tophat_ism] The shock solver must not abandon any grid row ("giving up" on stderr): an abandoned row leaves its stored state at initialization values and silently corrupts the light curve. | 1.0 ms |
| pass | test_no_solver_warnings[tophat_ism_adiabatic] The shock solver must not abandon any grid row ("giving up" on stderr): an abandoned row leaves its stored state at initialization values and silently corrupts the light curve. | 1.0 ms |
| pass | test_no_solver_warnings[tophat_sigma10_rs] The shock solver must not abandon any grid row ("giving up" on stderr): an abandoned row leaves its stored state at initialization values and silently corrupts the light curve. | 3.0 ms |
| pass | test_no_solver_warnings[tophat_sigma1_rs] The shock solver must not abandon any grid row ("giving up" on stderr): an abandoned row leaves its stored state at initialization values and silently corrupts the light curve. | 3.0 ms |
| pass | test_no_solver_warnings[tophat_sigma_rs] The shock solver must not abandon any grid row ("giving up" on stderr): an abandoned row leaves its stored state at initialization values and silently corrupts the light curve. | 3.0 ms |
| pass | test_no_solver_warnings[two_component_ism] The shock solver must not abandon any grid row ("giving up" on stderr): an abandoned row leaves its stored state at initialization values and silently corrupts the light curve. | 6.0 ms |
test_physics_invariants| status | test | duration |
|---|---|---|
| pass | test_axisymmetric_flag_consistent_on_axis For an on-axis observer (theta_obs=0) the axisymmetric fast path and the full 3D integration yield the same flux to 1e-9 relative. | 7.0 ms |
| pass | test_band_flux_matches_integrated_flux_density Band-integrated flux from flux() agrees with the trapezoidal frequency integral of flux_density_grid over 1e14-1e15 Hz within 1% (measured 1.7e-4), pinning the quadrature contract. | 4.0 ms |
| pass | test_disabled_components_are_zero With SSC and the reverse shock disabled, the fwd.ssc, rvs.sync, and rvs.ssc components are exactly zero while fwd.sync remains strictly positive. | 0 µs |
| pass | test_flux_positive_and_finite_everywhere With SSC and reverse shock enabled, the total flux density is finite and strictly positive at every sampled time. | 8.0 ms |
| pass | test_flux_scales_exactly_with_inverse_distance_squared Doubling the luminosity distance reduces the total flux density by exactly a factor of 4 (F proportional to 1/D_L^2) to 1e-9 relative. | 1.0 ms |
| pass | test_redshift_transformation_invariance F(nu, t; z2) == F(nu (1+z2)/(1+z1), t (1+z1)/(1+z2); z1) * (1+z2)/(1+z1) at fixed luminosity distance -- the exact cosmological transformation. | 1.0 ms |
| pass | test_series_and_grid_evaluations_agree flux_density evaluated along a (t, nu) series matches the corresponding row of flux_density_grid at the same frequency to 1e-12 relative. | 1.0 ms |
| pass | test_total_equals_sum_of_components With SSC and reverse shock enabled, the total flux equals the sum of forward and reverse synchrotron plus SSC components to 1e-12 relative. | 7.0 ms |
test_shock_scalings| status | test | duration |
|---|---|---|
| pass | test_bm_phase_scaling[B-ISM] For each medium (ISM/wind) and forward-shock quantity (four-velocity u, radius r, comoving B, swept-up proton number N_p), the power-law slope fitted over the Blandford-McKee phase time range matches the analytic self-similar exponent from the shared SHOCK_SCALINGS table within SLOPE_TOLERANCE (0.1 in the slope). | 1.0 ms |
| pass | test_bm_phase_scaling[B-wind] For each medium (ISM/wind) and forward-shock quantity (four-velocity u, radius r, comoving B, swept-up proton number N_p), the power-law slope fitted over the Blandford-McKee phase time range matches the analytic self-similar exponent from the shared SHOCK_SCALINGS table within SLOPE_TOLERANCE (0.1 in the slope). | 1.0 ms |
| pass | test_bm_phase_scaling[N_p-ISM] For each medium (ISM/wind) and forward-shock quantity (four-velocity u, radius r, comoving B, swept-up proton number N_p), the power-law slope fitted over the Blandford-McKee phase time range matches the analytic self-similar exponent from the shared SHOCK_SCALINGS table within SLOPE_TOLERANCE (0.1 in the slope). | 2.0 ms |
| pass | test_bm_phase_scaling[N_p-wind] For each medium (ISM/wind) and forward-shock quantity (four-velocity u, radius r, comoving B, swept-up proton number N_p), the power-law slope fitted over the Blandford-McKee phase time range matches the analytic self-similar exponent from the shared SHOCK_SCALINGS table within SLOPE_TOLERANCE (0.1 in the slope). | 1.0 ms |
| pass | test_bm_phase_scaling[r-ISM] For each medium (ISM/wind) and forward-shock quantity (four-velocity u, radius r, comoving B, swept-up proton number N_p), the power-law slope fitted over the Blandford-McKee phase time range matches the analytic self-similar exponent from the shared SHOCK_SCALINGS table within SLOPE_TOLERANCE (0.1 in the slope). | 1.0 ms |
| pass | test_bm_phase_scaling[r-wind] For each medium (ISM/wind) and forward-shock quantity (four-velocity u, radius r, comoving B, swept-up proton number N_p), the power-law slope fitted over the Blandford-McKee phase time range matches the analytic self-similar exponent from the shared SHOCK_SCALINGS table within SLOPE_TOLERANCE (0.1 in the slope). | 1.0 ms |
| pass | test_bm_phase_scaling[u-ISM] For each medium (ISM/wind) and forward-shock quantity (four-velocity u, radius r, comoving B, swept-up proton number N_p), the power-law slope fitted over the Blandford-McKee phase time range matches the analytic self-similar exponent from the shared SHOCK_SCALINGS table within SLOPE_TOLERANCE (0.1 in the slope). | 2.0 ms |
| pass | test_bm_phase_scaling[u-wind] For each medium (ISM/wind) and forward-shock quantity (four-velocity u, radius r, comoving B, swept-up proton number N_p), the power-law slope fitted over the Blandford-McKee phase time range matches the analytic self-similar exponent from the shared SHOCK_SCALINGS table within SLOPE_TOLERANCE (0.1 in the slope). | 1.0 ms |
Full suite from tests/validation/run_validation.py, run 2026-07-06 06:23.
tests/validation/regression/run_regression.py.Forward shock dynamics (u, r, B, N_p × coasting / BM / deep Newtonian)Characteristic frequencies (ν_m, ν_c, ν_M)Spectral segment slopes (regimes I–V)Reverse shock dynamics — thin shellReverse shock dynamics — thick shellReverse shock frequencies — thin shellReverse shock frequencies — thick shellsynchrotronSSCSSC + KNreverse shock (thin)reverse shock (thick)synchrotron| configuration | θ_v/θ_c = 0 | θ_v/θ_c = 1 | θ_v/θ_c = 2 | θ_v/θ_c = 4 | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| φ | θ | t | φ | θ | t | φ | θ | t | φ | θ | t | |
| Tophat / ISM | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Tophat / wind | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Two-comp. / ISM | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Two-comp. / wind | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Gaussian / ISM | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Gaussian / wind | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Power-law / ISM | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Power-law / wind | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
SSC| configuration | θ_v/θ_c = 0 | θ_v/θ_c = 1 | θ_v/θ_c = 2 | θ_v/θ_c = 4 | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| φ | θ | t | φ | θ | t | φ | θ | t | φ | θ | t | |
| Tophat / ISM | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Tophat / wind | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Two-comp. / ISM | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Two-comp. / wind | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Gaussian / ISM | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Gaussian / wind | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Power-law / ISM | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Power-law / wind | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
SSC + KN| configuration | θ_v/θ_c = 0 | θ_v/θ_c = 1 | θ_v/θ_c = 2 | θ_v/θ_c = 4 | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| φ | θ | t | φ | θ | t | φ | θ | t | φ | θ | t | |
| Tophat / ISM | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Tophat / wind | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Two-comp. / ISM | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Two-comp. / wind | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Gaussian / ISM | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Gaussian / wind | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Power-law / ISM | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Power-law / wind | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
reverse shock (thin)| configuration | θ_v/θ_c = 0 | θ_v/θ_c = 1 | θ_v/θ_c = 2 | θ_v/θ_c = 4 | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| φ | θ | t | φ | θ | t | φ | θ | t | φ | θ | t | |
| Tophat / ISM | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Tophat / wind | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Two-comp. / ISM | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Two-comp. / wind | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Gaussian / ISM | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Gaussian / wind | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Power-law / ISM | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Power-law / wind | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
reverse shock (thick)| configuration | θ_v/θ_c = 0 | θ_v/θ_c = 1 | θ_v/θ_c = 2 | θ_v/θ_c = 4 | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| φ | θ | t | φ | θ | t | φ | θ | t | φ | θ | t | |
| Tophat / ISM | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Tophat / wind | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Two-comp. / ISM | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Two-comp. / wind | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Gaussian / ISM | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Gaussian / wind | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Power-law / ISM | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Power-law / wind | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
largest fiducial errors — per-config detail