The Quantum Exact Simulation Toolkit v4.3.0
Loading...
Searching...
No Matches

Functions for pre- or post-multiplying weighted sums of Pauli tensors upon a density matrix. More...

Functions

void leftapplyPauliStrSum (Qureg qureg, PauliStrSum sum, Qureg workspace)
 
void rightapplyPauliStrSum (Qureg qureg, PauliStrSum sum, Qureg workspace)
 

Detailed Description

Functions for pre- or post-multiplying weighted sums of Pauli tensors upon a density matrix.

Function Documentation

◆ leftapplyPauliStrSum()

void leftapplyPauliStrSum ( Qureg qureg,
PauliStrSum sum,
Qureg workspace )
Note
Documentation for this function or struct is under construction!
Attention
This function's input validation has not yet been unit tested, so erroneous usage may produce unexpected output. Please use with caution!
See also
leftapplyCompMatr1()

Definition at line 649 of file multiplication.cpp.

649 {
650 validate_quregFields(qureg, __func__);
651 validate_quregFields(workspace, __func__);
652 validate_quregCanBeWorkspace(qureg, workspace, __func__);
653 validate_pauliStrSumFields(sum, __func__);
654 validate_pauliStrSumTargets(sum, qureg, __func__);
655
656 // clone qureg to workspace, set qureg to blank
657 localiser_statevec_setQuregToClone(workspace, qureg);
658 localiser_statevec_initUniformState(qureg, 0);
659
660 // left-multiply each term in-turn, mixing into output qureg, then undo using idempotency
661 for (qindex i=0; i<sum.numTerms; i++) {
662 localiser_statevec_anyCtrlPauliTensor(workspace, none, none, sum.strings[i]);
663 localiser_statevec_setQuregToWeightedSum(qureg, {1, sum.coeffs[i]}, {qureg, workspace});
664 localiser_statevec_anyCtrlPauliTensor(workspace, none, none, sum.strings[i]);
665 }
666
667 // workspace -> qureg, and qureg -> sum * qureg
668}

Referenced by TEST_CASE().

◆ rightapplyPauliStrSum()

void rightapplyPauliStrSum ( Qureg qureg,
PauliStrSum sum,
Qureg workspace )
Note
Documentation for this function or struct is under construction!
Attention
This function's input validation has not yet been unit tested, so erroneous usage may produce unexpected output. Please use with caution!
See also
leftapplyCompMatr1()

Definition at line 670 of file multiplication.cpp.

670 {
671 validate_quregFields(qureg, __func__);
672 validate_quregFields(workspace, __func__);
673 validate_quregIsDensityMatrix(qureg, __func__);
674 validate_quregCanBeWorkspace(qureg, workspace, __func__);
675 validate_pauliStrSumFields(sum, __func__);
676 validate_pauliStrSumTargets(sum, qureg, __func__);
677
678 // clone qureg to workspace, set qureg to blank
679 localiser_statevec_setQuregToClone(workspace, qureg);
680 localiser_statevec_initUniformState(qureg, 0);
681
682 // post-multiply each term in-turn, mixing into output qureg, then undo using idempotency
683 for (qindex i=0; i<sum.numTerms; i++) {
684 PauliStr str = paulis_getShiftedPauliStr(sum.strings[i], qureg.numQubits);
685 qcomp factor = paulis_getSignOfPauliStrConj(str); // undoes transpose
686
687 localiser_statevec_anyCtrlPauliTensor(workspace, none, none, str, factor);
688 localiser_statevec_setQuregToWeightedSum(qureg, {1, sum.coeffs[i]}, {qureg, workspace});
689 localiser_statevec_anyCtrlPauliTensor(workspace, none, none, str, factor);
690 }
691
692 // workspace -> qureg, and qureg -> sum * qureg
693}

Referenced by TEST_CASE().