44template <
typename AlgoT>
49template <
typename ...T>
54template <
typename A,
typename B,
typename C,
typename D,
template<
typename,
typename>
class E>
59 template <
typename OutT>
61 void All(OutT & out, ZDT
const& zd)
63 out <<
"\n\n\n MAINDATA \n\n\n";
66 out <<
"\n\n\n RAWDATA \n\n\n";
71 template <
typename OutT>
73 void MainData(OutT & out, ZDT
const& zd)
75 NumVariables(out, zd);
76 Variables(out, zd,
"\n\n");
78 const auto& s = zd.FinalSolutions();
79 const auto& m = zd.FinalSolutionMetadata();
80 const auto n = s.size();
81 for (
decltype(s.size()) ii{0}; ii<n; ++ii)
83 if (zd.FinalSolutionMetadata()[ii].endgame_success == SuccessCode::NeverStarted)
86 EndPointMDFull(ii, out, zd);
87 EndPoint(ii, out, zd,
"\n\n");
91 TargetSystem(out,zd,
"\n\n");
93 StartSystem(out,zd,
"\n\n");
95 Homotopy(out,zd,
"\n\n");
98 template <
typename OutT>
100 void RawData(OutT & out, ZDT
const& zd)
102 const auto n = zd.FinalSolutions().size();
103 NumVariables(out, zd,
"\n\n");
104 for (
decltype(zd.FinalSolutions().size()) ii{0}; ii<n; ++ii)
106 if (zd.FinalSolutionMetadata()[ii].endgame_success == SuccessCode::NeverStarted)
108 EndPointMDRaw(ii,out,zd,
"\n\n");
112 TargetSystem(out,zd,
"\n\n");
116 template <
typename OutT>
118 void NumVariables(OutT & out, ZDT
const& zd, std::string
const& additional =
"\n")
120 const auto& sys = zd.TargetSystem();
121 out << sys.NumVariables() << additional;
125 template <
typename OutT>
127 void Variables(OutT & out, ZDT
const& zd, std::string
const& additional =
"\n")
129 const auto& sys = zd.TargetSystem();
130 const auto& vars = sys.VariableOrdering();
131 for (
const auto& x : vars)
137 template <
typename OutT>
139 void TargetSystem(OutT & out, ZDT
const& zd, std::string
const& additional =
"\n")
141 out << zd.TargetSystem() << additional;
144 template <
typename OutT>
146 void StartSystem(OutT & out, ZDT
const& zd, std::string
const& additional =
"\n")
148 out << zd.StartSystem() << additional;
151 template <
typename OutT>
153 void Homotopy(OutT & out, ZDT
const& zd, std::string
const& additional =
"\n")
155 out << zd.Homotopy() << additional;
158 template <
typename IndexT,
typename OutT>
160 void EndPoint(IndexT
const& ind, OutT & out, ZDT
const& zd, std::string
const& additional =
"")
162 generators::Classic::generate(boost::spirit::ostream_iterator(out), zd.FinalSolutions()[ind]);
166 template <
typename IndexT,
typename OutT>
168 void EndPointDehom(IndexT
const& ind, OutT & out, ZDT
const& zd, std::string
const& additional =
"")
170 DefaultPrecision(
Precision(zd.FinalSolutions()[ind]));
172 generators::Classic::generate(boost::spirit::ostream_iterator(out), zd.TargetSystem().DehomogenizePoint(zd.FinalSolutions()[ind]));
176 template <
typename IndexT,
typename OutT>
178 void EndPointMDFull(IndexT
const& ind, OutT & out, ZDT
const& zd, std::string
const& additional =
"\n")
180 const auto& data = zd.FinalSolutionMetadata()[ind];
181 out << data.path_index <<
'\n'
182 << data.solution_index <<
'\n'
183 << data.condition_number <<
'\n'
184 << data.function_residual <<
'\n'
185 << data.newton_residual <<
'\n';
186 generators::Classic::generate(boost::spirit::ostream_iterator(out), data.final_time_used);
187 out <<
'\n' << data.max_precision_used <<
'\n';
189 generators::Classic::generate(boost::spirit::ostream_iterator(out), data.time_of_first_prec_increase);
190 out <<
'\n' << data.accuracy_estimate <<
'\n'
191 << data.accuracy_estimate_user_coords <<
'\n'
192 << data.cycle_num <<
'\n'
193 << data.multiplicity <<
'\n'
194 << data.pre_endgame_success <<
' ' << data.endgame_success <<
'\n';
200 template <
typename IndexT,
typename OutT>
202 void EndPointMDRaw(IndexT
const& ind, OutT & out, ZDT
const& zd, std::string
const& additional =
"\n")
204 const auto& pt = zd.FinalSolutions()[ind];
205 const auto& data = zd.FinalSolutionMetadata()[ind];
206 out << data.path_index <<
'\n'
208 EndPoint(ind, out, zd);
209 out << data.function_residual <<
'\n'
210 << data.condition_number <<
'\n'
211 << data.newton_residual <<
'\n';
212 generators::Classic::generate(boost::spirit::ostream_iterator(out), data.final_time_used);
213 out <<
'\n' << data.accuracy_estimate <<
'\n';
214 generators::Classic::generate(boost::spirit::ostream_iterator(out), data.time_of_first_prec_increase);
215 out <<
'\n' << data.cycle_num <<
'\n'
216 << data.endgame_success <<
'\n'
224struct NonsingularSolutions
228 template<
typename AlgoT>
230 auto Extract(AlgoT
const& alg)
232 using BCT =
typename AlgoTraits<AlgoT>::BaseComplexType;
234 const auto& sys = alg.TargetSystem();
238 const auto& s = alg.FinalSolutions();
239 const auto& m = alg.FinalSolutionMetadata();
240 const auto n = s.size();
241 for (
decltype(s.size()) ii{0}; ii<n; ++ii)
243 const auto& d = m[ii];
244 if (d.endgame_success == SuccessCode::Success &&
247 solns.push_back(sys.DehomogenizePoint(s[ii]));
260 template<
typename AlgoT>
262 auto Extract(AlgoT
const& alg)
264 using BCT =
typename AlgoTraits<AlgoT>::BaseComplexType;
266 const auto& sys = alg.TargetSystem();
270 const auto& s = alg.FinalSolutions();
271 const auto& m = alg.FinalSolutionMetadata();
272 const auto n = s.size();
273 for (
decltype(s.size()) ii{0}; ii<n; ++ii)
275 solns.push_back(sys.DehomogenizePoint(s[ii]));
unsigned Precision(Eigen::MatrixBase< Derived > const &v)
Get the precision of an Eigen object. If the object is empty, it's the precision of a default-constru...
Definition eigen_extensions.hpp:292
Provides the generators for bertini2.
std::shared_ptr< Node > E()
Definition special_number.cpp:37
the basic zero dim algorithm, which solves a system.
Definition zero_dim_solve.hpp:248
Prints data from algorithms.
Definition output.hpp:46
Provides the algorithm for computing all zero-dimensional solutions for an algberaic system.