pub struct AssemblySolution {
pub poses: Vec<BodyPose>,
pub mate_residuals: Vec<MateResidualReport>,
pub max_residual: f64,
pub iterations: usize,
pub strategy: String,
pub steps: Vec<SolveStepReport>,
pub residual_rows_evaluated: usize,
pub dof: usize,
pub rank: usize,
pub redundant: usize,
pub status: String,
pub body_freedom: Vec<BodyFreedom>,
}Fields§
§poses: Vec<BodyPose>§mate_residuals: Vec<MateResidualReport>Per-mate worst residual, in input mate order.
max_residual: f64§iterations: usizeAccepted Levenberg-Marquardt steps (summed over sub-solves).
strategy: StringStrategy actually used: "monolithic", "decomposed", or
"monolithic_fallback" (decomposition attempted, full monolithic
rerun took over).
steps: Vec<SolveStepReport>Per-step diagnostics in execution order: which bodies/clusters were solved by which method (§7.5–7.6).
residual_rows_evaluated: usizeTotal scalar residual rows evaluated while solving (step trials plus finite-difference Jacobian columns); the work measure behind the decomposition performance guard.
dof: usizeRemaining degrees of freedom: 6·movable − rank.
rank: usizeNumerical rank of the mate Jacobian at the solution.
redundant: usizeRedundant (but consistent) constraint rows: effective rows − rank.
status: String"well", "under", or "over" (over = redundant rows exist; the
solution is still exact unless the solve returned Err).
body_freedom: Vec<BodyFreedom>Per movable body, the freedom the mates leave it at the solution (the Jacobian’s null space restricted to that body’s six columns). Empty when diagnostics were off or the assembly is too large to analyse.