163template<
typename PrecT>
165 public virtual EndgameBase<CauchyEndgame<PrecT>, PrecT>
230 template<
typename ComplexT>
233 std::get<TimeCont<ComplexT> >(
pseg_times_).clear();
240 template<
typename ComplexT>
242 { std::get<TimeCont<ComplexT> >(
pseg_times_) = pseg_times_to_set;}
247 template<
typename ComplexT>
250 template<
typename ComplexT>
256 template<
typename ComplexT>
264 template<
typename ComplexT>
267 template<
typename ComplexT>
272 template<
typename ComplexT>
275 std::get<SampCont<ComplexT> >(
cauchy_samples_) = cauchy_samples_to_set;
283 template<
typename ComplexT>
289 template<
typename ComplexT>
296 template<
typename ComplexT>
299 std::get<TimeCont<ComplexT> >(
cauchy_times_) = cauchy_times_to_set;
305 template<
typename ComplexT>
311 template<
typename ComplexT>
362 template<
typename... Ts >
374 std::stringstream err_msg;
375 err_msg <<
"ERROR: The number of sample points " << this->
EndgameSettings().num_sample_points <<
" for circle tracking must be >= 3";
376 throw std::runtime_error(err_msg.str());
397 template<
typename ComplexT>
401 using RealT =
typename Eigen::NumTraits<ComplexT>::Real;
406 auto& circle_times = std::get<TimeCont<ComplexT> >(
cauchy_times_);
409 ComplexT starting_time = circle_times.back();
413 const auto num_vars = this->GetSystem().NumVariables();
415 for (
unsigned ii = 0; ii < this->
EndgameSettings().num_sample_points; ++ii)
418 const ComplexT& current_time = circle_times.back();
420#ifndef BERTINI_DISABLE_PRECISION_CHECKS
422 std::stringstream err_msg;
423 err_msg <<
"current time and sample for circle track must be of same precision. respective precisions: " <<
Precision(current_time) <<
" " <<
Precision(current_sample) << std::endl;
424 throw std::runtime_error(err_msg.str());
431#ifndef USE_BMP_COMPLEX
432 using bertini::polar;
437 RealT radius = abs(starting_time - target_time), angle = arg(starting_time - target_time);
444 polar(radius, (ii+1)*2*acos(
static_cast<RealT
>(-1)) / (this->
EndgameSettings().num_sample_points) + angle) + target_time;
449 auto tracking_success = this->
EndgameTrackPath(next_sample, current_time, next_time, current_sample);
452 return tracking_success;
461 if (this->adaptive_numeric_type_active_ &&
462 this->GetTracker().GetCurrentPrecision() > this->current_endgame_precision_)
469 if constexpr (std::is_same<ComplexT, BCT>::value)
474 for (Eigen::Index i = 0; i < next_sample.size(); ++i) ev_pt(i) =
BCT(next_sample(i));
503 template<
typename ComplexT>
511 template<
typename ComplexT>
514 std::get<TimeCont<ComplexT>>(
pseg_times_).push_back(time);
515 std::get<SampCont<ComplexT>>(
pseg_samples_).push_back(sample);
589 template<
typename ComplexT>
595 if((samples.front() - samples.back()).template lpNorm<Eigen::Infinity>() < this->GetTracker().TrackingTolerance())
603 auto new_precision = this->EnsureAtUniformPrecision(times, samples);
606 this->GetTracker().Refine(samples.front(),samples.front(),times.front(),this->FinalTolerance(),this->EndgameSettings().max_num_refinements);
607 this->GetTracker().Refine(samples.back(),samples.back(),times.back(),this->FinalTolerance(),this->EndgameSettings().max_num_refinements);
609 if((samples.front() - samples.back()).template lpNorm<Eigen::Infinity>() < this->GetTracker().TrackingTolerance())
638 template<
typename ComplexT>
641 using RealT =
typename Eigen::NumTraits<ComplexT>::Real;
653 for(
unsigned int ii=0; ii < this->
EndgameSettings().num_sample_points; ++ii)
655 norm = samples[ii].template lpNorm<Eigen::Infinity>();
704 template<
typename ComplexT>
709 auto fail_safe_max_cycle_number =
GetCauchySettings().fail_safe_maximum_cycle_number;
713 bool loop_hasnt_closed =
true;
714 while (loop_hasnt_closed)
723 return tracking_success;
734 loop_hasnt_closed =
false;
737 else if(this->
CycleNumber() > fail_safe_max_cycle_number)
740 loop_hasnt_closed =
false;
748 return tracking_success;
755 return advance_success;
759 return initial_cauchy_loop_success;
765 template <
typename ComplexT>
768 auto& ps_times = std::get<TimeCont<ComplexT> >(
pseg_times_);
769 auto& ps_samples = std::get<SampCont<ComplexT> >(
pseg_samples_);
771 ps_times.pop_front();
772 ps_samples.pop_front();
774 ps_times.push_back(next_time);
775 ps_samples.push_back(next_sample);
779 template <
typename ComplexT>
782 auto& cau_times = std::get<TimeCont<ComplexT> >(
cauchy_times_);
784 auto& ps_times = std::get<TimeCont<ComplexT> >(
pseg_times_);
785 auto& ps_samples = std::get<SampCont<ComplexT> >(
pseg_samples_);
789 cau_samples.push_back(ps_samples.back());
790 cau_times.push_back(ps_times.back());
817 template<
typename ComplexT>
821 auto init_success =
GetIntoEGZone(start_time, start_point, target_time);
827 return cauchy_loop_success;
836 template<
typename ComplexT>
839 using RealT =
typename Eigen::NumTraits<ComplexT>::Real;
842 std::deque<RealT> c_over_k;
844 auto& ps_times = std::get<TimeCont<ComplexT> >(
pseg_times_);
845 auto& ps_samples = std::get<SampCont<ComplexT> >(
pseg_samples_);
848 auto initial_sample_success = this->
ComputeInitialSamples(start_time, target_time, start_point, ps_times, ps_samples);
850 return initial_sample_success;
856 for (
unsigned ii = 0; ii < this->
EndgameSettings().num_needed_for_stabilization; ++ii)
860 return advance_success;
870 return advance_success;
872 c_over_k.pop_front();
897 template<
typename ComplexT>
900 auto& cau_times = std::get<TimeCont<ComplexT> >(
cauchy_times_);
903 if (cau_samples.size() != this->CycleNumber() * this->EndgameSettings().num_sample_points+1)
905 std::stringstream err_msg;
906 err_msg <<
"to compute cauchy approximation, cau_samples must be of size " << this->
CycleNumber() * this->
EndgameSettings().num_sample_points+1 <<
" but is of size " << cau_samples.size() <<
'\n';
907 throw std::runtime_error(err_msg.str());
914 auto new_precision = this->EnsureAtUniformPrecision(cau_times, cau_samples);
924 if (this->adaptive_numeric_type_active_ &&
931 for(
unsigned int ii = 0; ii < total_num_pts; ++ii)
932 result += cau_samples[ii];
957 template<
typename ComplexT>
960 const auto& cau_samples = std::get<SampCont<ComplexT> >(
cauchy_samples_);
961 using std::min;
using std::isnan;
962 NumErrorT floor_of_loop = std::numeric_limits<NumErrorT>::max();
963 for (
const auto& s : cau_samples)
965 auto n =
static_cast<NumErrorT>(this->GetSystem().InfinityNormOfDehomogenized(s));
967 floor_of_loop = min(floor_of_loop, n);
969 return floor_of_loop;
990 template<
typename ComplexT>
1007 return tracking_success;
1026 template<
typename ComplexT>
1029 using RealT =
typename Eigen::NumTraits<ComplexT>::Real;
1031 auto& ps_times = std::get<TimeCont<ComplexT> >(
pseg_times_);
1032 auto& ps_samples = std::get<SampCont<ComplexT> >(
pseg_samples_);
1034 auto& current_time = ps_times.back();
1035 auto& current_sample = ps_samples.back();
1038 ComplexT next_time = (target_time-current_time) *
static_cast<RealT
>(this->
EndgameSettings().sample_factor)+current_time;
1040 if (abs(next_time - target_time) < this->
EndgameSettings().min_track_time)
1045 auto time_advance_success = this->
EndgameTrackPath(next_sample,current_time, next_time, current_sample);
1049 return time_advance_success;
1055 if (this->adaptive_numeric_type_active_ &&
1056 this->GetTracker().GetCurrentPrecision() > this->current_endgame_precision_)
1059 this->EnsureAtPrecision(next_time,
Precision(next_sample));
1070 if constexpr (std::is_same<ComplexT, BCT>::value)
1074 Vec<BCT> ev_pt(next_sample.size());
1075 for (Eigen::Index i = 0; i < next_sample.size(); ++i) ev_pt(i) =
BCT(next_sample(i));
1076 BCT ev_t(next_time);
1112 template<
typename ComplexT>
1115 using RealT =
typename Eigen::NumTraits<ComplexT>::Real;
1117 auto const& times = std::get<TimeCont<ComplexT>>(
cauchy_times_);
1120 auto const M = c * N;
1121 if (c == 0 || samples.size() < M + 1 || times.size() < 2)
1125 RealT
const orientation_test = imag(times[1] * conj(times[0]));
1126 RealT
const orientation = (orientation_test > RealT(0)) ? RealT(1) : RealT(-1);
1128 RealT
const two_pi = RealT(2) * acos(RealT(-1));
1130 for (
unsigned m = 1; m <= c; ++m)
1133 for (
unsigned j = 0; j < M; ++j)
1137 RealT
const angle = orientation * two_pi * RealT(j * m) / RealT(N * c);
1138 twisted += samples[j] * ComplexT(cos(angle), sin(angle));
1140 twisted /= RealT(M);
1141 auto const twisted_norm =
static_cast<NumErrorT>(twisted.template lpNorm<Eigen::Infinity>());
1142 if (twisted_norm > mass)
1143 mass = twisted_norm;
1150 template<
typename Dummy =
void>
1192 template<
typename ComplexT>
1195 if (start_point.size()!=
static_cast<Eigen::Index
>(this->GetSystem().NumVariables()))
1197 std::stringstream err_msg;
1198 err_msg <<
"number of variables in start point for CauchyEG, " << start_point.size() <<
", must match the number of variables in the system, " << this->GetSystem().NumVariables();
1199 throw std::runtime_error(err_msg.str());
1204 std::stringstream ss;
1205 ss <<
"CauchyEG Run time and point must be of matching precision. (" <<
Precision(start_time) <<
"!=" <<
Precision(start_point) <<
")";
1206 throw std::runtime_error(ss.str());
1209 using RealT =
typename Eigen::NumTraits<ComplexT>::Real;
1218 prev_approx = start_point;
1220 auto init_success =
GetIntoEGZone(start_time, start_point, target_time);
1222 return init_success;
1226 return cauchy_loop_success;
1243 RealT norm_of_dehom_prev(0), norm_of_dehom_latest(0);
1251 unsigned prev_cycle = 0, same_cycle_count = 0;
1259 return extrapolation_success;
1262 if (cur_cycle == prev_cycle)
1265 same_cycle_count = 1;
1266 prev_cycle = cur_cycle;
1268 approx_error =
static_cast<NumErrorT>((latest_approx - prev_approx).template lpNorm<Eigen::Infinity>());
1288 static_cast<NumErrorT>(latest_approx.template lpNorm<Eigen::Infinity>()));
1303 bool const below_cycle_cutoff =
1325 if (in_operating_zone || below_cycle_cutoff)
1333 norm_of_dehom_latest =
max(
1334 this->GetSystem().InfinityNormOfDehomogenized(latest_approx),
1342 norm_of_dehom_prev = norm_of_dehom_latest;
1345 norm_of_dehom_prev = RealT(0);
1354 this->GetSystem().InfinityNormOfDehomogenized(latest_approx));
1356 if (in_operating_zone
1365 prev_approx = latest_approx;
1369 return advance_success;
1374 return cauchy_samples_success;
1395 template<
typename Dummy =
void>
1399 using RealT =
typename Eigen::NumTraits<BCT>::Real;
1401 if (start_point.size()!=
static_cast<Eigen::Index
>(this->GetSystem().NumVariables()))
1403 std::stringstream err_msg;
1404 err_msg <<
"number of variables in start point for CauchyEG, " << start_point.size() <<
", must match the number of variables in the system, " << this->GetSystem().NumVariables();
1405 throw std::runtime_error(err_msg.str());
1410 this->adaptive_numeric_type_active_ =
true;
1411 struct Disarmer {
bool& flag; ~Disarmer(){ flag =
false; } } disarm{this->adaptive_numeric_type_active_};
1433 init_code =
RunInitSegmentT<complex_mp>(this->AtActivePrecisionScalar(start_time), this->AtActivePrecisionVec(start_point), this->AtActivePrecisionScalar(target_time));
1437 auto const previous_precision = this->current_endgame_precision_;
1438 this->current_endgame_precision_ = this->NextEscalatedPrecision();
1443 NotifyObservers(SamplesRecomputedAtHigherPrecision<EmitterType>(*
this));
1460 RealT norm_of_dehom_prev(0), norm_of_dehom_latest(0);
1462 unsigned prev_cycle = 0, same_cycle_count = 0;
1471 if (cur_cycle == prev_cycle) ++same_cycle_count;
else same_cycle_count = 1;
1472 prev_cycle = cur_cycle;
1499 bool const below_cycle_cutoff =
1500 static_cast<NumErrorT>(abs(this->
LatestTime() - this->AtActivePrecisionScalar(target_time)))
1508 if (in_operating_zone || below_cycle_cutoff)
1516 norm_of_dehom_latest =
max(
1518 static_cast<RealT
>(loop_floor));
1525 norm_of_dehom_prev = norm_of_dehom_latest;
1528 norm_of_dehom_prev = RealT(0);
1536 if (in_operating_zone
1549 return advance_code;
1553 return samples_code;
1563 template<
typename ComplexT>
1570 auto init_success =
GetIntoEGZone(start_time, start_point, target_time);
1572 return init_success;
1580 template<
typename Dummy =
void>
1614 template<
typename Dummy =
void>
1640 template<
typename Dummy =
void>
1666 template<
typename Dummy =
void>
1672 this->
template CrossTimesUp<>(
pseg_times_, newprec);
1690 auto& cau_t = std::get<TimeCont<complex_mp>>(
cauchy_times_);
Functions for dealing with precisions of objects, particularly in the context of adaptive precision.
Contains parent class, Endgame, the parent class for all endgames.
bool HasObservers() const
Definition observable.hpp:204
void NotifyObservers(AnyEvent const &e) const
Definition observable.hpp:185
TupleOfSamps pseg_samples_
Definition cauchy.hpp:201
void MigrateContainersToPrecision(unsigned newprec)
Widen this flavor's Cauchy containers from the complex_dbl slot up to complex_mp at the new precision...
Definition cauchy.hpp:1667
const SampCont< ComplexT > & GetPSEGSamples() const
Const overload returning the power-series sample values.
Definition cauchy.hpp:268
NumErrorT PoleComponentMass() const
The pole-component mass of the current Cauchy loop: the endgame operating-zone measurement.
Definition cauchy.hpp:1113
virtual ~CauchyEndgame()=default
CauchyEndgame(TrackerType const &tr, const Ts &... ts)
Construct the Cauchy endgame for a tracker, with configs given in any order.
Definition cauchy.hpp:363
BCT latest_time_cache_
Definition cauchy.hpp:216
typename BaseEGT::TupleOfTimes TupleOfTimes
A tuple of time containers, one per precision.
Definition cauchy.hpp:184
const TimeCont< ComplexT > & GetCauchyTimes() const
Const overload returning the Cauchy time values.
Definition cauchy.hpp:312
void RotateOntoPS(ComplexT const &next_time, Vec< ComplexT > const &next_sample)
Shift the power-series sample window forward by one (time, sample) pair.
Definition cauchy.hpp:766
void AddToPSData(ComplexT const &time, Vec< ComplexT > const &sample)
Append a (time, sample) pair to the power-series data containers.
Definition cauchy.hpp:512
const SampCont< ComplexT > & GetCauchySamples() const
Const overload returning the Cauchy sample values.
Definition cauchy.hpp:290
void ClearAndSeedCauchyData()
Clear the Cauchy data and re-seed it from the current power-series samples.
Definition cauchy.hpp:780
void SetPSEGSamples(SampCont< ComplexT > const &pseg_samples_to_set)
Setter for the space values for the power series approximation of the Cauchy endgame.
Definition cauchy.hpp:257
const TimeCont< ComplexT > & GetPSEGTimes() const
Const overload returning the power-series time values.
Definition cauchy.hpp:251
void AddToCauchyData(ComplexT const &time, Vec< ComplexT > const &sample)
Append a (time, sample) pair to the Cauchy data containers.
Definition cauchy.hpp:504
typename tracking::TrackerTraits< TrackerType >::BaseComplexT BaseComplexT
The complex number type.
Definition cauchy.hpp:172
SuccessCode CircleTrack(ComplexT const &target_time)
Function to track around the origin.
Definition cauchy.hpp:398
BaseComplexT BCT
The complex number type.
Definition cauchy.hpp:188
SuccessCode InitialApproximation(ComplexT const &start_time, Vec< ComplexT > const &start_point, ComplexT const &target_time, Vec< ComplexT > &approximation)
Definition cauchy.hpp:818
const BCT & LatestTimeImpl() const
Definition cauchy.hpp:319
bool PoleMassSignificant(NumErrorT mass, NumErrorT approx_scale) const
Is a pole-component mass SIGNIFICANT, i.e.
Definition cauchy.hpp:1166
bool CheckClosedLoop()
Function that determines if we have closed a loop after calling CircleTrack().
Definition cauchy.hpp:590
typename AlgoTraits< FinalEGT >::NeededConfigs Configs
The configuration bundle (Configured base).
Definition cauchy.hpp:191
SampCont< ComplexT > & GetCauchySamples()
Getter for the space values for the Cauchy endgame.
Definition cauchy.hpp:284
typename tracking::TrackerTraits< TrackerType >::BaseRealT BaseRealT
The real number type.
Definition cauchy.hpp:173
SuccessCode ComputeCauchySamples(ComplexT const &target_time)
Collects samples while tracking around the target time, until we close the loop, or exceed the limit ...
Definition cauchy.hpp:991
SuccessCode RunImplAMP(BCT const &start_time, Vec< BCT > const &start_point, BCT const &target_time)
Run the Cauchy endgame via the double-first adaptive-numeric-type driver, migrating up to mpfr only o...
Definition cauchy.hpp:1396
bool RatioEGOperatingZoneTest(ComplexT const &target_time) const
After we have used CircleTrack and have successfully closed the loop using CheckClosedLoop we need to...
Definition cauchy.hpp:639
TupleOfTimes pseg_times_
Definition cauchy.hpp:197
SuccessCode AdvanceTimeAMP(BCT const &target_time)
Advance time at the active numeric type, migrating-and-retrying in mpfr on escalation.
Definition cauchy.hpp:1615
TimeCont< ComplexT > & GetPSEGTimes()
Getter for the time values for the power series approximation of the Cauchy endgame.
Definition cauchy.hpp:248
SuccessCode RunImpl(ComplexT const &start_time, Vec< ComplexT > const &start_point, ComplexT const &target_time)
Primary function that runs the Cauchy endgame.
Definition cauchy.hpp:1193
typename BaseEGT::TupleOfSamps TupleOfSamps
A tuple of sample containers, one per precision.
Definition cauchy.hpp:185
NumErrorT MinDehomNormOverLoopSamples() const
The FLOOR of the current Cauchy loop: the smallest dehomogenized infinity-norm over the loop samples.
Definition cauchy.hpp:958
SuccessCode GetIntoEGZone(ComplexT const &start_time, Vec< ComplexT > const &start_point, ComplexT const &target_time)
Track from the boundary inward until the path enters the endgame (Cauchy) operating zone.
Definition cauchy.hpp:837
TimeCont< ComplexT > & GetCauchyTimes()
Getter for the time values for the Cauchy endgame.
Definition cauchy.hpp:306
CauchyEndgame(TrackerType const &tr, const ConfigsAsTuple &settings)
Construct the Cauchy endgame for a tracker, with its configuration as a tuple.
Definition cauchy.hpp:356
typename PrecT::TrackerType TrackerType
The path-tracker type.
Definition cauchy.hpp:170
void ClearTimesAndSamples()
Function that clears all samples and times from data members for the Cauchy endgame.
Definition cauchy.hpp:231
SuccessCode ComputeCauchySamplesAMP(BCT const &target_time)
Build a closed Cauchy loop's samples at the active numeric type, migrating-and-retrying in mpfr on es...
Definition cauchy.hpp:1641
EndgameBase< CauchyEndgame< PrecT >, PrecT > BaseEGT
The base endgame type.
Definition cauchy.hpp:168
void SetCauchySettings(CauchyConfig const &new_cauchy_settings)
Setter for the specific settings in tracking_conifg.hpp under Cauchy.
Definition cauchy.hpp:341
SuccessCode AdvanceTime(ComplexT const &target_time)
Advances time, marching toward the target time.
Definition cauchy.hpp:1027
CauchyEndgame< PrecT > EmitterType
The event-emitter type.
Definition cauchy.hpp:175
SampCont< ComplexT > & GetPSEGSamples()
Getter for the space values for the power series approximation of the Cauchy endgame.
Definition cauchy.hpp:265
const auto & GetCauchySettings() const
Getter for the specific settings in tracking_conifg.hpp under Cauchy.
Definition cauchy.hpp:349
void SetPSEGTimes(TimeCont< ComplexT > pseg_times_to_set)
Setter for the time values for the power series approximation of the Cauchy endgame.
Definition cauchy.hpp:241
void SetCauchyTimes(TimeCont< ComplexT > const &cauchy_times_to_set)
Setter for the time values for the Cauchy endgame.
Definition cauchy.hpp:297
TupleOfSamps cauchy_samples_
Definition cauchy.hpp:209
NumErrorT PoleComponentMassAMP() const
PoleComponentMass read from whichever numeric lane the adaptive (double-first) endgame is currently c...
Definition cauchy.hpp:1151
typename Configs::ToTuple ConfigsAsTuple
The configuration structs as a tuple.
Definition cauchy.hpp:192
SuccessCode RunInitSegmentT(ComplexT const &start_time, Vec< ComplexT > const &start_point, ComplexT const &target_time)
Run the initialization segment (seed the PSEG window and reach the EG zone) in a given numeric type.
Definition cauchy.hpp:1564
void SetCauchySamples(SampCont< ComplexT > const &cauchy_samples_to_set)
Setter for the space values for the Cauchy endgame.
Definition cauchy.hpp:273
CauchyEndgame< PrecT > FinalEGT
The final (derived) endgame type.
Definition cauchy.hpp:169
SuccessCode ComputeCauchyApproximationOfXAtT0(Vec< ComplexT > &result)
Function that computes the mean of the samples that were collected while tracking around the origin.
Definition cauchy.hpp:898
void ValidateConfigs()
Validate the endgame configuration (e.g. require >= 3 sample points for circle tracking).
Definition cauchy.hpp:370
typename BaseEGT::TupOfVec TupOfVec
A tuple of vector containers, one per precision.
Definition cauchy.hpp:186
SuccessCode ComputeCauchyApproxAMP()
Compute the Cauchy mean (extrapolation) at the active numeric type, migrating-and-retrying in mpfr on...
Definition cauchy.hpp:1581
SuccessCode InitialCauchyLoops(ComplexT const &target_time)
Definition cauchy.hpp:705
BaseRealT BRT
The real number type.
Definition cauchy.hpp:189
TupleOfTimes cauchy_times_
Definition cauchy.hpp:205
Advanced around the circle around target time.
Definition events.hpp:157
A new sample point on the path was computed, adding one point to the sequence of the endgame's approa...
Definition events.hpp:118
bool BeyondSecurityMaxNorm(RealT const &norm) const
Definition base_endgame.hpp:521
SuccessCode EndgameTrackPath(Vec< ComplexT > &result, ComplexT const &start_time, ComplexT const &end_time, Vec< ComplexT > const &start_point) const
Definition base_endgame.hpp:446
auto ComputeCOverK(SampCont< ComplexT > const &samples) const -> typename Eigen::NumTraits< ComplexT >::Real
Definition base_endgame.hpp:237
bool CheckForCOverKStabilization(std::deque< T > const &c_over_k_array) const
Definition base_endgame.hpp:276
NumErrorT approximate_error_
Definition base_endgame.hpp:140
const BCT & LatestTime() const
Definition base_endgame.hpp:610
unsigned CycleNumber() const
Definition base_endgame.hpp:541
typename NeededTypes::template ToTupleOfCont< SampCont > TupleOfSamps
Definition base_endgame.hpp:127
const auto & SecuritySettings() const
Definition base_endgame.hpp:511
SuccessCode ComputeInitialSamples(const ComplexT &start_time, const ComplexT &target_time, const Vec< ComplexT > &x_endgame_start, TimeCont< ComplexT > ×, SampCont< ComplexT > &samples)
Definition base_endgame.hpp:656
Vec< BCT > previous_approximation_
Definition base_endgame.hpp:133
void IncrementCycleNumber(unsigned inc)
Definition base_endgame.hpp:545
SuccessCode EscalateAndMigrate(unsigned guard)
Definition base_endgame.hpp:481
EndgameBase(TrackerType const &tr, const ConfigsAsTuple &settings)
Definition base_endgame.hpp:528
SuccessCode RefineAllSamples(SampCont< ComplexT > &samples, TimeCont< ComplexT > ×)
Definition base_endgame.hpp:390
Vec< BCT > final_approximation_
Definition base_endgame.hpp:132
typename NeededTypes::template ToTupleOfCont< TimeCont > TupleOfTimes
Definition base_endgame.hpp:126
const auto & EndgameSettings() const
Definition base_endgame.hpp:504
typename NeededTypes::ToTupleOfVec TupOfVec
Definition base_endgame.hpp:124
const auto & FinalTolerance() const
Definition base_endgame.hpp:552
A common base type for various precision types, fixed and adaptive.
Definition prec_base.hpp:40
Event emitted when the endgame's working precision changes.
Definition events.hpp:220
Definition endgames.hpp:44
Definition configIni_parse.hpp:78
void SetPrecision(SampCont< complex_mp > &samples, unsigned prec)
Sets the precision of each space sample to be of input precision.
Definition adaptive_precision_utilities.hpp:44
Definition algorithm_builder.hpp:36
bool isnan(std::complex< double > const &z)
an overload of isnan, for std::complex<double>
Definition double_extensions.hpp:63
constexpr unsigned DoublePrecision()
The number of digits considered "double precision" (16).
Definition num_traits.hpp:152
std::complex< double > complex_dbl
The double-precision complex number type.
Definition double_extensions.hpp:47
Eigen::Matrix< NumT, Eigen::Dynamic, 1 > Vec
A dynamically-sized column vector of NumT.
Definition eigen_extensions.hpp:296
std::deque< Vec< T > > SampCont
Definition config.hpp:33
void SetThreadPrecision(unsigned prec)
Set the precision (digits) for the current thread only (does not touch the global default).
Definition mpfr_complex.hpp:176
double NumErrorT
The numeric type used to hold error/tolerance magnitudes throughout Bertini2 – tracking tolerances,...
Definition num_traits.hpp:48
std::deque< T > TimeCont
Definition config.hpp:34
SuccessCode
Definition config.hpp:42
@ FailedToConverge
Definition config.hpp:55
@ Success
Definition config.hpp:51
@ MinTrackTimeReached
Definition config.hpp:64
@ HigherPrecisionNecessary
Definition config.hpp:52
@ CycleNumTooHigh
Definition config.hpp:66
@ SecurityMaxNormReached
Definition config.hpp:65
unsigned Precision(Eigen::MatrixBase< Derived > const &v)
Get the precision of an Eigen object.
Definition eigen_extensions.hpp:339
T max(T const &a, T const &b, T const &c)
Three-argument form of max.
Definition mpfr_extensions.hpp:96
std::tuple< const UnpermutedT &... > Unpermute(const PermutedPresentT &... present_permuted_args)
Reorder a set of present arguments into the declared UnpermutedT order, default-constructing any abse...
Definition enable_permuted_arguments.hpp:117
bool ContainsNaN(Eigen::MatrixBase< Derived > const &v)
True when any entry of a complex-valued Eigen object has a NaN real or imaginary part.
Definition eigen_extensions.hpp:321
Definition config.hpp:176
Cauchy-endgame configuration.
Definition config.hpp:142
Trait lookup mapping a tracker type to its numeric types, event-emitter type, precision config,...
Definition config.hpp:387