| 699 | |
| 700 | |
| 701 | extern "C" void setDiagMatrFromMultiDimLists(DiagMatr out, void* lists, int* numQubitsPerDim, int numDims) { |
| 702 | validate_matrixFields(out, __func__); |
| 703 | validate_multiVarFuncQubits(out.numQubits, numQubitsPerDim, numDims, __func__); |
| 704 | |
| 705 | vector<qindex> listInds(numDims); |
| 706 | |
| 707 | // set each element of the diagonal in-turn, which is embarrassingly parallel, |
| 708 | // although we do not parallelise - the DiagMatr is intendedly small |
| 709 | for (qindex elemInd=0; elemInd<out.numElems; elemInd++) { |
| 710 | |
| 711 | // nested list indices = unsigned integer values of variables |
| 712 | fast_getSubQuregValues(elemInd, numQubitsPerDim, numDims, false, listInds.data()); |
| 713 | |
| 714 | // update only the CPU elems |
| 715 | out.cpuElems[elemInd] = util_getElemFromNestedPtrs(lists, listInds.data(), numDims); |
| 716 | } |
| 717 | |
| 718 | // overwrite all GPU elems |
| 719 | syncDiagMatr(out); |
| 720 | } |
| 721 | |
| 722 | |
| 723 | extern "C" void setFullStateDiagMatrFromMultiDimLists(FullStateDiagMatr out, void* lists, int* numQubitsPerDim, int numDims) { |
nothing calls this directly
no test coverage detected