MCPcopy Create free account
hub / github.com/QuEST-Kit/QuEST / rightapplyPauliStrSum

Function rightapplyPauliStrSum

quest/src/api/multiplication.cpp:660–683  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

658}
659
660void rightapplyPauliStrSum(Qureg qureg, PauliStrSum sum, Qureg workspace) {
661 validate_quregFields(qureg, __func__);
662 validate_quregFields(workspace, __func__);
663 validate_quregIsDensityMatrix(qureg, __func__);
664 validate_quregCanBeWorkspace(qureg, workspace, __func__);
665 validate_pauliStrSumFields(sum, __func__);
666 validate_pauliStrSumTargets(sum, qureg, __func__);
667
668 // clone qureg to workspace, set qureg to blank
669 localiser_statevec_setQuregToClone(workspace, qureg);
670 localiser_statevec_initUniformState(qureg, 0);
671
672 // post-multiply each term in-turn, mixing into output qureg, then undo using idempotency
673 for (qindex i=0; i<sum.numTerms; i++) {
674 PauliStr str = paulis_getShiftedPauliStr(sum.strings[i], qureg.numQubits);
675 qcomp factor = paulis_getSignOfPauliStrConj(str); // undoes transpose
676
677 localiser_statevec_anyCtrlPauliTensor(workspace, {}, {}, str, factor);
678 localiser_statevec_setQuregToWeightedSum(qureg, {1, sum.coeffs[i]}, {qureg, workspace});
679 localiser_statevec_anyCtrlPauliTensor(workspace, {}, {}, str, factor);
680 }
681
682 // workspace -> qureg, and qureg -> sum * qureg
683}
684
685} // end de-mangler

Callers 1

SECTIONFunction · 0.85

Tested by

no test coverage detected