Macaulay2 Engine
Loading...
Searching...
No Matches

◆ computeNextNode()

template<typename RT>
void SLEvaluatorConcrete< RT >::computeNextNode ( )
private

Definition at line 189 of file SLP-imp.hpp.

190{
191 ElementType& v = *vIt;
192 switch (*nIt++)
193 {
195 ring().set_from_long(v, 1);
196 for (int i = 0; i < *numInputsIt; i++)
197 ring().mult(v, v, *(vIt + (*inputPositionsIt++)));
198 numInputsIt++;
199 break;
200 case SLProgram::MSum:
201 ring().set_zero(v);
202 for (int i = 0; i < *numInputsIt; i++)
203 ring().add(v, v, *(vIt + (*inputPositionsIt++)));
204 numInputsIt++;
205 break;
206 case SLProgram::Det:
207 {
208 int n = static_cast<int>(sqrt(*numInputsIt++));
209 DMat<RT> mat(ring(), n, n);
210 for (int i = 0; i < n; i++)
211 for (int j = 0; j < n; j++)
212 ring().set(mat.entry(i, j), *(vIt + (*inputPositionsIt++)));
213 DMatLinAlg<RT>(mat).determinant(v);
214 }
215 break;
217 ring().set(v, *(vIt + (*inputPositionsIt++)));
218 ring().divide(v, v, *(vIt + (*inputPositionsIt++)));
219 break;
220 default:
221 std::cerr << "unknown node type\n";
222 abort();
223 }
224}
std::vector< SLProgram::GATE_TYPE >::iterator nIt
Definition SLP-defs.hpp:284
std::vector< SLProgram::GATE_SIZE >::iterator numInputsIt
Definition SLP-defs.hpp:285
std::vector< SLProgram::GATE_POSITION >::iterator inputPositionsIt
Definition SLP-defs.hpp:286
const RT & ring() const
Definition SLP-defs.hpp:319
std::vector< ElementType >::iterator vIt
Definition SLP-defs.hpp:329
typename RT::ElementType ElementType
Definition SLP-defs.hpp:328

References SLProgram::Det, DMatLinAlg< RingType >::determinant(), SLProgram::Divide, DMat< ACoeffRing >::entry(), SLEvaluator::inputPositionsIt, SLProgram::MProduct, SLProgram::MSum, SLEvaluator::nIt, SLEvaluator::numInputsIt, ring(), and vIt.

Referenced by evaluate().