Numerical Trace
The following lower-level calls expose the intermediate HomotopyContinuation.jl objects and numerical trace used by certify_posteriori. This is mostly useful for debugging or inspecting what is being certified.
julia> @variables x y;julia> CC = AcbField(128);julia> F = [x^2 + 3*y - 4, y^2 + 3];julia> G = [x^2 - 1, y^2 - 1];julia> H = straight_line_homotopy(F, G, [x, y]; CCRing=CC, gamma=CC(0.5, 0.5));Compilation Done.julia> tracker = prepare_posteriori_tracker(H);julia> H_hc = posteriori_hc_homotopy(tracker);julia> trace = collect_hc_trace(H_hc, ComplexF64[1, -1]; t_start=0.0, t_target=1.0);julia> trace.successtruejulia> trace.statussuccess::codes = 1julia> trace.accepted_steps9julia> trace.rejected_steps0julia> length(trace.trace)10julia> trace.trace[1](t = 0.0, x = ComplexF64[1.0 + 0.0im, -1.0 + 0.0im])julia> trace.trace[end](t = 1.0, x = ComplexF64[2.2975463569101278 + 1.1308046967319336im, 0.0 - 1.7320508075688772im])
CertifiedHomotopyTracking.PosterioriTracker — Type
PosterioriTrackerCache object used to reconstruct HomotopyContinuation.jl systems/homotopies from CHT source metadata for a posteriori certification.
Construct one with prepare_posteriori_tracker. Most users should call certify_posteriori directly; the tracker is mainly useful when you want to inspect or reuse the reconstructed HomotopyContinuation.jl objects.
CertifiedHomotopyTracking.prepare_posteriori_tracker — Function
prepare_posteriori_tracker(compiled_or_sys) -> PosterioriTrackerCreate a tracker cache for a CompiledHomotopy or SpecializedHomotopy.
The input must contain source metadata, which is produced by the current compile_* constructors and straight_line_homotopy.
CertifiedHomotopyTracking.posteriori_hc_system — Function
posteriori_hc_system(tracker::PosterioriTracker)Return a reconstructed HomotopyContinuation.jl System for an edge homotopy source.
This is an HC.jl System, not a CHT SpecializedHomotopy. It is only defined for parameter/edge homotopies; direct homotopies reconstruct directly as HomotopyContinuation.jl Homotopy objects.
CertifiedHomotopyTracking.posteriori_hc_homotopy — Function
posteriori_hc_homotopy(tracker; kwargs...)Return a HomotopyContinuation.jl homotopy reconstructed from tracker.
For direct homotopies this returns the reconstructed HC.jl Homotopy. For parameter/edge homotopies it combines the reconstructed HC.jl System with the stored start and target parameter values and returns an HC.jl parameter homotopy.
Options
start_parameters,target_parameters: parameter endpoint values for edge sources. Iftrackerwas prepared from aSpecializedHomotopy, these default to the system's storedp_startandp_end.const_parameters=ComplexF64[]: fixed constants for edge sources.parameter_values=nothing: fixed parameter vector for direct homotopies.
CertifiedHomotopyTracking.collect_hc_trace — Function
collect_hc_trace(H, x_start; kwargs...)Collect a numerical trace along one HomotopyContinuation.jl homotopy path using the low-level Tracker iterator API.
The returned points are the numerical approximations produced by HC.jl at the start and at accepted tracker steps. They are not certified points, and this function does not perform interval, Krawczyk, or a posteriori certification.
Keyword arguments are passed into HomotopyContinuation.TrackerOptions where applicable:
t_start = 1.0,t_target = 0.0: tracking direction.parameters = :default: use HomotopyContinuation.jl's default parameter handling for the reconstructed homotopy. For parameterized HC.jl systems this may be replaced with an explicit parameter value object accepted by HC.jl.max_steps = 10_000max_step_size = Inf: do not impose an extra cap on HC.jl's adaptive step size. Give a positive finite value to force a denser trace.throw_on_failure = false: throw anErrorExceptionif HC.jl does not report success.
Returns a named tuple (trace, status, success, accepted_steps, rejected_steps), where trace is a vector of named tuples (t = ..., x = ...).
Example
@variables x y;
CC = AcbField(128);
F = [x^2 + 3*y - 4, y^2 + 3];
G = [x^2 - 1, y^2 - 1];
H = straight_line_homotopy(F, G, [x, y]; CCRing=CC, gamma=CC(0.5, 0.5));
tracker = prepare_posteriori_tracker(H);
H_hc = posteriori_hc_homotopy(tracker);
trace = collect_hc_trace(H_hc, ComplexF64[1, -1]; t_start=0.0, t_target=1.0);
trace.success
length(trace.trace)