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

Function leftapplyPauliStrSum

quest/src/api/multiplication.cpp:639–658  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

637extern "C" {
638
639void leftapplyPauliStrSum(Qureg qureg, PauliStrSum sum, Qureg workspace) {
640 validate_quregFields(qureg, __func__);
641 validate_quregFields(workspace, __func__);
642 validate_quregCanBeWorkspace(qureg, workspace, __func__);
643 validate_pauliStrSumFields(sum, __func__);
644 validate_pauliStrSumTargets(sum, qureg, __func__);
645
646 // clone qureg to workspace, set qureg to blank
647 localiser_statevec_setQuregToClone(workspace, qureg);
648 localiser_statevec_initUniformState(qureg, 0);
649
650 // left-multiply each term in-turn, mixing into output qureg, then undo using idempotency
651 for (qindex i=0; i<sum.numTerms; i++) {
652 localiser_statevec_anyCtrlPauliTensor(workspace, {}, {}, sum.strings[i]);
653 localiser_statevec_setQuregToWeightedSum(qureg, {1, sum.coeffs[i]}, {qureg, workspace});
654 localiser_statevec_anyCtrlPauliTensor(workspace, {}, {}, sum.strings[i]);
655 }
656
657 // workspace -> qureg, and qureg -> sum * qureg
658}
659
660void rightapplyPauliStrSum(Qureg qureg, PauliStrSum sum, Qureg workspace) {
661 validate_quregFields(qureg, __func__);

Callers 3

SECTIONFunction · 0.85
_applyPauliSumFunction · 0.85
_applyPauliHamilFunction · 0.85

Tested by

no test coverage detected