97 std::vector<GATE_POSITION>
196template <
typename RT>
280 int ap(
int rp) {
return rp +
slp->inputCounter; }
283 std::vector<SLProgram::GATE_POSITION>
varsPos;
284 std::vector<SLProgram::GATE_TYPE>::iterator
nIt;
289template <
typename RT>
329 typename std::vector<ElementType>::iterator
vIt;
371 gmp_RR infinity_threshold,
372 bool checkPrecision) = 0;
376template <
typename RT,
typename Algorithm>
399 gmp_RR infinity_threshold,
400 bool checkPrecision);
412template <
typename RT>
430 gmp_RR infinity_threshold,
431 bool checkPrecision);
Tag type selecting the fixed-precision homotopy algorithm.
virtual void text_out(buffer &o) const =0
virtual bool track(const MutableMatrix *inputs, MutableMatrix *outputs, MutableMatrix *output_extras, gmp_RR init_dt, gmp_RR min_dt, gmp_RR epsilon, int max_corr_steps, gmp_RR infinity_threshold, bool checkPrecision)=0
SLEvaluatorConcrete< RT > EType
HomotopyConcrete(EType &Hx, EType &Hxt, EType &HxH)
void text_out(buffer &o) const
HomotopyConcrete(EType &Hx, EType &Hxt, EType &HxH)
bool track(const MutableMatrix *inputs, MutableMatrix *outputs, MutableMatrix *output_extras, gmp_RR init_dt, gmp_RR min_dt, gmp_RR epsilon, int max_corr_steps, gmp_RR infinity_threshold, bool checkPrecision)
SLEvaluatorConcrete< RT > EType
Abstract base for the predictor-corrector path-tracker hierarchy.
std::unique_ptr< Homotopy > mHomotopy
M2SLEvaluator(SLEvaluator *pa)
!! this is a hack to avoid memory corruption, it results in a memory leak
SLEvaluator * mSLEvaluator
std::unique_ptr< SLProgram > mSLProgram
M2SLProgram(SLProgram *pa)
Abstract base class for mutable matrices over an arbitrary engine Ring, the in-place counterpart of t...
std::vector< SLProgram::GATE_TYPE >::iterator nIt
std::vector< SLProgram::GATE_SIZE >::iterator numInputsIt
virtual Homotopy * createHomotopy(SLEvaluator *Hxt, SLEvaluator *HxH)=0
virtual bool evaluate(const MutableMatrix *inputs, MutableMatrix *outputs)=0
std::vector< SLProgram::GATE_POSITION >::iterator inputPositionsIt
std::vector< SLProgram::GATE_POSITION > varsPos
!! can we make it a reference???
virtual SLEvaluator * specialize(const MutableMatrix *parameters) const =0
virtual void text_out(buffer &o) const =0
Homotopy * createHomotopy(SLEvaluator *Hxt, SLEvaluator *HxH)
bool evaluate(const MutableMatrix *inputs, MutableMatrix *outputs)
std::vector< ElementType > values
SLEvaluator * specialize(const MutableMatrix *parameters) const
std::vector< ElementType >::iterator vIt
void(* compiled_fn)(ElementType const *, ElementType *)
ElementType * parametersAndInputs
SLEvaluatorConcrete(const SLEvaluatorConcrete< RT > &)
void text_out(buffer &o) const
typename RT::ElementType ElementType
Abstract base for the SLP evaluator hierarchy.
std::vector< GATE_POSITION > mInputPositions
GATE_POSITION addMProduct(const M2_arrayint)
GATE_POSITION addDet(const M2_arrayint)
void text_out(buffer &) const
GATE_POSITION addDivide(const M2_arrayint)
void setOutputPositions(const M2_arrayint)
std::vector< GATE_SIZE > mNumInputs
GATE_POSITION addMSum(const M2_arrayint)
std::vector< GATE_TYPE > mNodes
std::vector< GATE_POSITION > mOutputPositions
A straight-line program: a directed acyclic graph of arithmetic gates over a fixed list of inputs and...
Tag type selecting the no-op homotopy algorithm.
Tag type selecting the variable-precision homotopy algorithm.
FixedPrecisionHomotopyAlgorithm Algorithm
FixedPrecisionHomotopyAlgorithm Algorithm
TrivialHomotopyAlgorithm Algorithm
Traits class mapping a coefficient ring RT to its preferred homotopy algorithm tag.