Bertini 2 d882924 (2026-10-06 19:56 UTC)
Numerical algebraic geometry library (C++ core)
Loading...
Searching...
No Matches
bertini::algorithm::SolutionMetaData< ComplexT > Struct Template Reference

Per-solution metadata gathered during and after a path track. More...

#include <zero_dim_solve.hpp>

Public Types

using SolnIndT = typename SolnCont<ComplexT>::size_type
 Index type for solutions/paths.

Public Member Functions

bool operator== (const SolutionMetaData< ComplexT > &other)
 Equality comparison over the identity fields (path_time_seconds is excluded).

Public Attributes

SolnIndT path_index
 Path number of the solution.
SolnIndT solution_index
 Solution number.
bool precision_changed = false
 Whether the working precision changed during the path.
ComplexT time_of_first_prec_increase
 Time value of the first increase in precision.
decltype(DefaultPrecision()) max_precision_used = 0
 Highest precision (digits) used anywhere on the path, for every kind of tracker; a fixed-precision tracker reports its one precision.
double path_time_seconds = 0.0
 Wall-clock time for the whole path (pre-endgame + endgame), seconds. Not an identity field (excluded from operator==).
unsigned num_successful_steps = 0
 Predictor-corrector steps that succeeded on this path, pre-endgame and endgame together.
unsigned num_failed_steps = 0
 Predictor-corrector steps that failed and were retried smaller on this path, pre-endgame and endgame together.
double wall_clock_limit_seconds = 0
 The per-path wall-clock budget in force when this path ran (ZeroDimConfig::max_path_wall_clock_duration), seconds; 0 = none.
Vec< ComplexT > latest_path_point
 Where the tracker was when it gave up: the last point reached, in the tracker's internal coordinates, on a path that did NOT succeed – whether it failed, was stopped, or ran out of budget, in either stage.
SuccessCode pre_endgame_success_code = SuccessCode::NeverStarted
 Success code of the pre-endgame track.
NumErrorT condition_number
 Spectral-norm condition number of the target system's Jacobian at the endpoint (the quantity condition_number_threshold is specified against).
Vec< NumErrorT > singular_values
 The singular values of the (homogenized, patched) target system's Jacobian at the endpoint, largest first, at the endpoint's own precision – condition_number is the ratio of the first to the last.
NumErrorT newton_residual
 The latest Newton residual.
ComplexT final_time_used
 The last time value the path reached: the endgame's latest time for a successful path, the tracker's time when it stopped for one that did not succeed in either stage.
NumErrorT accuracy_estimate_internal_coords
 Distance between the endgame's last two approximations, in the solver's internal coordinates (homogenized, on the patch). The quantity the convergence test compares with final_tolerance; it does not grow with the scale of the solution.
NumErrorT accuracy_estimate_user_coords
 Distance between the endgame's last two approximations after each is dehomogenized: the absolute error in the units of the user's variables.
unsigned cycle_num
 Cycle number used in extrapolations.
unsigned precision_digits = 0
 Working precision (digits) the endgame finished this solution in.
unsigned accuracy_digits = 0
 Trustworthy digit count, from the convergence agreement.
SuccessCode endgame_success_code = SuccessCode::NeverStarted
 Success code of the endgame.
NumErrorT function_residual
 The latest function residual.
int multiplicity = 1
 Multiplicity of the solution.
bool multiplicity_representative = true
 Whether this is the chosen single representative of its multiplicity cluster (the m copies share one point; exactly one is the representative).
bool is_real = false
 Whether the (dehomogenized) endpoint is real.
bool is_finite = false
 Whether the endpoint is finite (not at infinity).
bool is_singular = false
 Whether the endpoint is singular (multiple, or ill-conditioned).
bool crossing_unresolved = false
 Whether this path was flagged as crossing another at the endgame boundary and the crossing was NOT resolved by re-tracking.
bool is_nonsolution = false
 Whether this finite, successful endpoint is not a solution of the actual target system (an extraneous root from squaring up an over-determined system).

Detailed Description

template<typename ComplexT>
struct bertini::algorithm::SolutionMetaData< ComplexT >

Per-solution metadata gathered during and after a path track.

Member Typedef Documentation

◆ SolnIndT

template<typename ComplexT>
using bertini::algorithm::SolutionMetaData< ComplexT >::SolnIndT = typename SolnCont<ComplexT>::size_type

Index type for solutions/paths.

Member Function Documentation

◆ operator==()

template<typename ComplexT>
bool bertini::algorithm::SolutionMetaData< ComplexT >::operator== ( const SolutionMetaData< ComplexT > & other)
inline

Equality comparison over the identity fields (path_time_seconds is excluded).

Member Data Documentation

◆ accuracy_digits

template<typename ComplexT>
unsigned bertini::algorithm::SolutionMetaData< ComplexT >::accuracy_digits = 0

Trustworthy digit count, from the convergence agreement.

◆ accuracy_estimate_internal_coords

template<typename ComplexT>
NumErrorT bertini::algorithm::SolutionMetaData< ComplexT >::accuracy_estimate_internal_coords

Distance between the endgame's last two approximations, in the solver's internal coordinates (homogenized, on the patch). The quantity the convergence test compares with final_tolerance; it does not grow with the scale of the solution.

◆ accuracy_estimate_user_coords

template<typename ComplexT>
NumErrorT bertini::algorithm::SolutionMetaData< ComplexT >::accuracy_estimate_user_coords

Distance between the endgame's last two approximations after each is dehomogenized: the absolute error in the units of the user's variables.

◆ condition_number

template<typename ComplexT>
NumErrorT bertini::algorithm::SolutionMetaData< ComplexT >::condition_number

Spectral-norm condition number of the target system's Jacobian at the endpoint (the quantity condition_number_threshold is specified against).

◆ crossing_unresolved

template<typename ComplexT>
bool bertini::algorithm::SolutionMetaData< ComplexT >::crossing_unresolved = false

Whether this path was flagged as crossing another at the endgame boundary and the crossing was NOT resolved by re-tracking.

Its success codes may still read Success, but the library has already warned that this endpoint may be wrong; consumers that build on the endpoint should check this flag, not just the codes (b2#365).

◆ cycle_num

template<typename ComplexT>
unsigned bertini::algorithm::SolutionMetaData< ComplexT >::cycle_num

Cycle number used in extrapolations.

◆ endgame_success_code

template<typename ComplexT>
SuccessCode bertini::algorithm::SolutionMetaData< ComplexT >::endgame_success_code = SuccessCode::NeverStarted

Success code of the endgame.

◆ final_time_used

template<typename ComplexT>
ComplexT bertini::algorithm::SolutionMetaData< ComplexT >::final_time_used

The last time value the path reached: the endgame's latest time for a successful path, the tracker's time when it stopped for one that did not succeed in either stage.

◆ function_residual

template<typename ComplexT>
NumErrorT bertini::algorithm::SolutionMetaData< ComplexT >::function_residual

The latest function residual.

◆ is_finite

template<typename ComplexT>
bool bertini::algorithm::SolutionMetaData< ComplexT >::is_finite = false

Whether the endpoint is finite (not at infinity).

◆ is_nonsolution

template<typename ComplexT>
bool bertini::algorithm::SolutionMetaData< ComplexT >::is_nonsolution = false

Whether this finite, successful endpoint is not a solution of the actual target system (an extraneous root from squaring up an over-determined system).

◆ is_real

template<typename ComplexT>
bool bertini::algorithm::SolutionMetaData< ComplexT >::is_real = false

Whether the (dehomogenized) endpoint is real.

◆ is_singular

template<typename ComplexT>
bool bertini::algorithm::SolutionMetaData< ComplexT >::is_singular = false

Whether the endpoint is singular (multiple, or ill-conditioned).

◆ latest_path_point

template<typename ComplexT>
Vec<ComplexT> bertini::algorithm::SolutionMetaData< ComplexT >::latest_path_point

Where the tracker was when it gave up: the last point reached, in the tracker's internal coordinates, on a path that did NOT succeed – whether it failed, was stopped, or ran out of budget, in either stage.

Read with final_time_used, which holds the matching time. Empty for a successful path (its endpoint is the solution itself) and for a path never started. On a Cauchy endgame the point may lie on a sample circle rather than on the real segment to the target.

◆ max_precision_used

template<typename ComplexT>
decltype(DefaultPrecision()) bertini::algorithm::SolutionMetaData< ComplexT >::max_precision_used = 0

Highest precision (digits) used anywhere on the path, for every kind of tracker; a fixed-precision tracker reports its one precision.

◆ multiplicity

template<typename ComplexT>
int bertini::algorithm::SolutionMetaData< ComplexT >::multiplicity = 1

Multiplicity of the solution.

◆ multiplicity_representative

template<typename ComplexT>
bool bertini::algorithm::SolutionMetaData< ComplexT >::multiplicity_representative = true

Whether this is the chosen single representative of its multiplicity cluster (the m copies share one point; exactly one is the representative).

◆ newton_residual

template<typename ComplexT>
NumErrorT bertini::algorithm::SolutionMetaData< ComplexT >::newton_residual

The latest Newton residual.

◆ num_failed_steps

template<typename ComplexT>
unsigned bertini::algorithm::SolutionMetaData< ComplexT >::num_failed_steps = 0

Predictor-corrector steps that failed and were retried smaller on this path, pre-endgame and endgame together.

◆ num_successful_steps

template<typename ComplexT>
unsigned bertini::algorithm::SolutionMetaData< ComplexT >::num_successful_steps = 0

Predictor-corrector steps that succeeded on this path, pre-endgame and endgame together.

◆ path_index

template<typename ComplexT>
SolnIndT bertini::algorithm::SolutionMetaData< ComplexT >::path_index

Path number of the solution.

◆ path_time_seconds

template<typename ComplexT>
double bertini::algorithm::SolutionMetaData< ComplexT >::path_time_seconds = 0.0

Wall-clock time for the whole path (pre-endgame + endgame), seconds. Not an identity field (excluded from operator==).

◆ pre_endgame_success_code

template<typename ComplexT>
SuccessCode bertini::algorithm::SolutionMetaData< ComplexT >::pre_endgame_success_code = SuccessCode::NeverStarted

Success code of the pre-endgame track.

◆ precision_changed

template<typename ComplexT>
bool bertini::algorithm::SolutionMetaData< ComplexT >::precision_changed = false

Whether the working precision changed during the path.

◆ precision_digits

template<typename ComplexT>
unsigned bertini::algorithm::SolutionMetaData< ComplexT >::precision_digits = 0

Working precision (digits) the endgame finished this solution in.

◆ singular_values

template<typename ComplexT>
Vec<NumErrorT> bertini::algorithm::SolutionMetaData< ComplexT >::singular_values

The singular values of the (homogenized, patched) target system's Jacobian at the endpoint, largest first, at the endpoint's own precision – condition_number is the ratio of the first to the last.

Published raw so a caller can read a numerical rank at a tolerance of ITS choosing: no single tolerance is right for every endpoint, and a rank verdict baked in here would misjudge someone's regular root (b2#409). Empty when the endgame did not succeed.

◆ solution_index

template<typename ComplexT>
SolnIndT bertini::algorithm::SolutionMetaData< ComplexT >::solution_index

Solution number.

◆ time_of_first_prec_increase

template<typename ComplexT>
ComplexT bertini::algorithm::SolutionMetaData< ComplexT >::time_of_first_prec_increase

Time value of the first increase in precision.

◆ wall_clock_limit_seconds

template<typename ComplexT>
double bertini::algorithm::SolutionMetaData< ComplexT >::wall_clock_limit_seconds = 0

The per-path wall-clock budget in force when this path ran (ZeroDimConfig::max_path_wall_clock_duration), seconds; 0 = none.

Recorded with the path so a later run can tell whether it is asking more patience of an abandoned path than the run that abandoned it.