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

◆ evaluate() [1/2]

template<typename RT>
bool SLEvaluatorConcrete< RT >::evaluate ( const DMat< RT > & inputs,
DMat< RT > & outputs )

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

258{
259 if (nInputs != inputs.numRows() * inputs.numColumns()) {
260 ERROR(
261 "inputs: the number of inputs does not match the number of entries "
262 "in the inputs matrix");
264 << " != " << inputs.numRows() * inputs.numColumns()
265 << std::endl;
266 return false;
267 }
268 if (nOutputs != outputs.numRows() * outputs.numColumns()) {
269 ERROR(
270 "outputs: the number of outputs does not match the number of entries "
271 "in the outputs matrix");
272 std::cout << nOutputs << " != " << outputs.numRows()
273 << " * " << outputs.numColumns() << std::endl;
274 return false;
275 }
276
277 if (isCompiled) {
278 if(parametersAndInputs==nullptr) {
279 (*compiled_fn)(inputs.unsafeArray(), outputs.unsafeArray());
280 } else {
281 std::copy(inputs.unsafeArray(),inputs.unsafeArray()+nInputs,parametersAndInputs+nParams);
282 (*compiled_fn)(parametersAndInputs, outputs.unsafeArray());
283 }
284 return true;
285 } else {
286 size_t i = 0;
287 for (size_t r = 0; r < inputs.numRows(); r++)
288 for (size_t c = 0; c < inputs.numColumns(); c++)
289 ring().set(values[varsPos[i++]], inputs.entry(r, c));
290 nIt = slp->mNodes.begin();
291 numInputsIt = slp->mNumInputs.begin();
292 inputPositionsIt = slp->mInputPositions.begin();
293 for (vIt = values.begin() + slp->inputCounter; vIt != values.end(); ++vIt)
295 i = 0;
296 for (size_t r = 0; r < outputs.numRows(); r++)
297 for (size_t c = 0; c < outputs.numColumns(); c++)
298 ring().set(outputs.entry(r, c), values[ap(slp->mOutputPositions[i++])]);
299 return true;
300 }
301}
std::vector< SLProgram::GATE_TYPE >::iterator nIt
Definition SLP-defs.hpp:284
std::vector< SLProgram::GATE_SIZE >::iterator numInputsIt
Definition SLP-defs.hpp:285
int ap(int rp)
Definition SLP-defs.hpp:280
std::vector< SLProgram::GATE_POSITION >::iterator inputPositionsIt
Definition SLP-defs.hpp:286
std::vector< SLProgram::GATE_POSITION > varsPos
!! can we make it a reference???
Definition SLP-defs.hpp:283
SLProgram * slp
Definition SLP-defs.hpp:282
const RT & ring() const
Definition SLP-defs.hpp:319
std::vector< ElementType > values
Definition SLP-defs.hpp:337
std::vector< ElementType >::iterator vIt
Definition SLP-defs.hpp:329
ElementType * parametersAndInputs
Definition SLP-defs.hpp:344
const int ERROR
Definition m2-mem.cpp:55

References SLEvaluator::ap(), computeNextNode(), DMat< ACoeffRing >::entry(), ERROR, SLEvaluator::inputPositionsIt, isCompiled, nInputs, SLEvaluator::nIt, nOutputs, nParams, DMat< ACoeffRing >::numColumns(), SLEvaluator::numInputsIt, DMat< ACoeffRing >::numRows(), parametersAndInputs, ring(), SLEvaluator::slp, DMat< ACoeffRing >::unsafeArray(), values, SLEvaluator::varsPos, and vIt.