empyrean.DetermineResult¶
- class DetermineResult(orbit, observations, summary, iterations, update_norm, converged, covariance, covariance_representation, covariance_9x9, non_grav_delta, rejection_passes, num_oppositions_fit, force_model_used, solve_for_used, acceptability, station_biases, solved_covariance, dt_delta, amrat_delta, thrust_delta_m_per_s, dv_frame, photometry, covariance_trust, dispositions, warnings, termination, gn_step_qnorm, mu_final, accepted_steps, final_solve_iterations, stall_delivery)[source]
Bases:
objectResult of orbit determination — returned by both
determine()(full IOD + DC pipeline) andrefine()(Bayesian-prior fit against an existing orbit + covariance).Mirrors the Rust wrapper’s
empyrean::DetermineResult.Methods
__init__(orbit, observations, summary, ...)Attributes
orbitFitted orbit.
observationsPer-observation residuals + rejection / influence diagnostics.
summaryiterationsupdate_normNOT the quantity :attr:`ODConfig.convergence_tol` bounds. The μ-DAMPED last ACCEPTED step's q-norm — the size of the step the solver actually took, after Levenberg-Marquardt damping.
convergedcovarianceFitted 6×6 state covariance, in
covariance_representation.covariance_representationcovariance_9x9Full 9×9 covariance over (state, A1, A2, A3) when solving for non-grav.
non_grav_deltaCumulative non-grav corrections (ΔA1, ΔA2, ΔA3) when present.
rejection_passesnum_oppositions_fitforce_model_usedsolve_for_usedacceptabilitystation_biasesPer-station fitted nuisance biases when
ODConfig.fit_station_biaseswas active.solved_covarianceFull tagged solved-parameter covariance when the fit solved any wide axis (Marsden / DT / AMRAT / thrust).
dt_deltaCumulative non-grav time-delay correction ΔDT (days), when DT was solved.
amrat_deltaCumulative SRP AMRAT correction (m²/kg), when AMRAT was solved.
thrust_delta_m_per_sPer-segment fitted thrust Δv (m/s), shaped
(k, 3)and expressed indv_frame.dv_frameIntegration frame the thrust Δv components are expressed in (
"icrf"/"eclipticj2000"/"itrf93").photometryPost-OD photometric solution when photometry was requested and ran.
covariance_trustEvent-aware trust verdict on the delivered covariance.
dispositionsWhat the fit actually did with each parameter axis.
warningsCovariance the fit was given and deliberately did not use.
terminationWhich criterion ended the solve that produced the published state, as a stable lowercase tag —
"gradient_tolerance","step_tolerance","cost_tolerance","max_iterations","damping_exhausted","inner_trials_exhausted","stalled_delivered","schur_step_tolerance", or"unrecognized"for a stop this build cannot name.gn_step_qnormQuadratic form of the undamped Gauss-Newton step — the only number here comparable to
ODConfig.convergence_tol, and the one the solver's step test is decided on.mu_finalLevenberg-Marquardt damping at termination.
accepted_stepsSteps the solve actually ACCEPTED — trials that passed the gain-ratio test and moved the iterate.
final_solve_iterationsIterations spent by the solve that produced the published state — the one
update_norm,termination,gn_step_qnormandaccepted_stepsall describe.stall_deliverySet when this fit was delivered by the stable-stall acceptance rather than by a convergence criterion — see
StallDelivery.- Parameters:
orbit (CartesianOrbits | KeplerianOrbits | CometaryOrbits | SphericalOrbits)
observations (ObservationResults)
summary (ResidualSummary)
iterations (int)
update_norm (float)
converged (bool)
covariance (ndarray)
covariance_representation (CovarianceRepresentation)
covariance_9x9 (ndarray | None)
non_grav_delta (ndarray | None)
rejection_passes (int)
num_oppositions_fit (int)
force_model_used (ForceModelTier)
solve_for_used (SolveForParams)
acceptability (AcceptabilityReport)
station_biases (StationBiases)
solved_covariance (SolvedCovariance | None)
dt_delta (float | None)
amrat_delta (float | None)
thrust_delta_m_per_s (ndarray | None)
dv_frame (str | None)
photometry (PhotometryResult | None)
covariance_trust (CovarianceTrust | None)
dispositions (SolveFor)
termination (str | None)
gn_step_qnorm (float | None)
mu_final (float | None)
accepted_steps (int)
final_solve_iterations (int | None)
stall_delivery (StallDelivery | None)
- orbit: CartesianOrbits | KeplerianOrbits | CometaryOrbits | SphericalOrbits
Fitted orbit. Coordinate flavor matches
ODConfig.output_representation.
- observations: ObservationResults
Per-observation residuals + rejection / influence diagnostics.
- summary: ResidualSummary
- iterations: int
- update_norm: float
NOT the quantity :attr:`ODConfig.convergence_tol` bounds. The μ-DAMPED last ACCEPTED step’s q-norm — the size of the step the solver actually took, after Levenberg-Marquardt damping.
The tolerance is tested on the undamped Gauss-Newton step, reported as
gn_step_qnorm. The two are incomparable in BOTH directions: a converged fit routinely reports anupdate_normorders of magnitude ABOVEconvergence_tol(damping is light near the optimum, so the step taken is large), while a solve thrashing to"damping_exhausted"reports one orders of magnitude BELOW it (μ has crushed every step to nothing). Readterminationandgn_step_qnormfor convergence, oracceptabilityfor the fit-quality verdict.On the Schur path (station-bias / nuisance fits) this carries that loop’s own step norm under the Schur complement instead — the quantity IT tests against
convergence_tol.terminationsays which loop ran.Exactly
0.0withaccepted_steps== 0means the solver latched a criterion at its STARTING point and never accepted a step: the incoming iterate was already stationary. It does not mean “a step of size zero was taken”.
- converged: bool
- covariance: ndarray
Fitted 6×6 state covariance, in
covariance_representation.
- covariance_representation: CovarianceRepresentation
- covariance_9x9: ndarray | None
Full 9×9 covariance over (state, A1, A2, A3) when solving for non-grav.
- rejection_passes: int
- num_oppositions_fit: int
- force_model_used: ForceModelTier
- solve_for_used: SolveForParams
- acceptability: AcceptabilityReport
- station_biases: StationBiases
Per-station fitted nuisance biases when
ODConfig.fit_station_biaseswas active. Empty quivr table otherwise.
- solved_covariance: SolvedCovariance | None
Full tagged solved-parameter covariance when the fit solved any wide axis (Marsden / DT / AMRAT / thrust).
Nonefor a state-only fit — read it, not the width, to locate solved parameters.
- dt_delta: float | None
Cumulative non-grav time-delay correction ΔDT (days), when DT was solved.
Noneotherwise.
- amrat_delta: float | None
Cumulative SRP AMRAT correction (m²/kg), when AMRAT was solved.
Noneotherwise.
- thrust_delta_m_per_s: ndarray | None
Per-segment fitted thrust Δv (m/s), shaped
(k, 3)and expressed indv_frame.Nonewhen no thrust was solved.
- dv_frame: str | None
Integration frame the thrust Δv components are expressed in (
"icrf"/"eclipticj2000"/"itrf93").Nonewhen no thrust was solved.
- photometry: PhotometryResult | None
Post-OD photometric solution when photometry was requested and ran.
Noneotherwise.
- covariance_trust: CovarianceTrust | None
Event-aware trust verdict on the delivered covariance.
Nonewhen the call path ran no trust gate — absence of a verdict is not trust.
- dispositions: SolveFor
What the fit actually did with each parameter axis.
The partition the engine ran, not the one that was requested: an axis can be requested and then not opened. Read this rather than
solve_for_usedto learn whether an axis was considered — not estimated, but contributing its prior uncertainty to the posterior through its measurement partials — because a solved covariance’s slot tags record only what occupied a column, and a considered axis occupies none.It is also what tells you whether re-attaching a prior to an axis would double-count it.
- warnings: list[str]
Covariance the fit was given and deliberately did not use.
Delivered as payload rather than written to a log, because a dropped prior cross term changes how the σ for that slot should be read. Empty when the fit used everything it was given.
- termination: str | None
Which criterion ended the solve that produced the published state, as a stable lowercase tag —
"gradient_tolerance","step_tolerance","cost_tolerance","max_iterations","damping_exhausted","inner_trials_exhausted","stalled_delivered","schur_step_tolerance", or"unrecognized"for a stop this build cannot name.Noneonly on a result that did not come from a solver run; every fit this package delivers names its stop. An unrecognized stop is"unrecognized"rather thanNone: a stop that fired but cannot be named is not the same as no stop at all.
- gn_step_qnorm: float | None
Quadratic form of the undamped Gauss-Newton step — the only number here comparable to
ODConfig.convergence_tol, and the one the solver’s step test is decided on.√qis the remaining step measured in the fit’s own formal σ.q <= convergence_tolis guaranteed only under"step_tolerance"(or"schur_step_tolerance"). Under the gradient, cost and stall verdicts the fit is delivered as converged withqlegitimately above the tolerance.Nonewhen the undamped system was singular at the returned point, when the Schur loop ran at solved width > 6 (its only step norm there is λ-shrunken, which is what this field promises it is not), or on a non-solver result.
- mu_final: float | None
Levenberg-Marquardt damping at termination. Large μ beside a small
update_normis the signature of a stalled solve rather than a converged one.Noneon the Schur path, which runs its own λ schedule and forms no comparable quantity — so its absence, alongsidetermination == "schur_step_tolerance", is what identifies that path — and on non-solver results.
- accepted_steps: int
Steps the solve actually ACCEPTED — trials that passed the gain-ratio test and moved the iterate.
0says the solver latched a criterion at its starting point and never moved: the incoming orbit was already stationary for this observation set. That is what disambiguatesupdate_norm’s0.0sentinel. Counted per SOLVE, so it describes the same solve asfinal_solve_iterations, never a total across the rejection–refit passes.
- final_solve_iterations: int | None
Iterations spent by the solve that produced the published state — the one
update_norm,termination,gn_step_qnormandaccepted_stepsall describe.Additive disambiguator for
iterations, whose composition varies by entry point; this one never does.Noneon a result that did not come from a solver run.
- stall_delivery: StallDelivery | None
Set when this fit was delivered by the stable-stall acceptance rather than by a convergence criterion — see
StallDelivery.Noneis the ordinary case. A consumer that wants the strict convergence contract checksstall_delivery is None.