diff --git a/README.md b/README.md index 9b03e057..39e193f1 100644 --- a/README.md +++ b/README.md @@ -116,8 +116,8 @@ applyMultiQubitProjector(qureg, targs, outcomes, ntargs); applyControlledPauliGadget(qureg, ctrl, paulistr, angle); applyMultiStateControlledSwap(qureg, ctrls, states, nctrls, targ1, targ2); -multiplyCompMatr1(qureg, targ, getInlineCompMatr1( {{1,2i},{3i,4}} )); -multiplyDiagMatrPower(qureg, targs, ntargs, diagmatr, exponent); +leftapplyCompMatr1(qureg, targ, getInlineCompMatr1( {{1,2i},{3i,4}} )); +leftapplyDiagMatrPower(qureg, targs, ntargs, diagmatr, exponent); ``` and extremely powerful ```cpp diff --git a/docs/tutorial.md b/docs/tutorial.md index 68b3fbf1..9c6fcf20 100644 --- a/docs/tutorial.md +++ b/docs/tutorial.md @@ -713,9 +713,9 @@ We can even directy mix density matrices together mixQureg(rho1, rho2, prob); ``` -Sometimes we wish to left-multiply general operators upon density matrices without also right-multiplying their adjoint - i.e. our operators should _not_ be effected as unitaries. We can do this with the `multiply*()` functions. +Sometimes we wish to left-multiply general operators upon density matrices without also right-multiplying their adjoint - i.e. our operators should _not_ be effected as unitaries. We can do this with the `leftapply*()` and `rightapply*()` functions. ```cpp -multiplyDiagMatrPower(rho, fullmatrix, 0.5); +leftapplyDiagMatrPower(rho, fullmatrix, 0.5); ``` diff --git a/quest/include/deprecated.h b/quest/include/deprecated.h index efd7afd9..47df35ad 100644 --- a/quest/include/deprecated.h +++ b/quest/include/deprecated.h @@ -370,7 +370,7 @@ typedef enum pauliOpType _NoWarnPauliOpType; #define applyMultiControlledMatrixN(...) \ - _ERROR_FUNC_REMOVED("applyMultiControlledMatrixN()") // our new multiplyCompMatr doesn't accept controls + _ERROR_FUNC_REMOVED("applyMultiControlledMatrixN()") // our new leftapplyCompMatr doesn't accept controls #define syncQuESTSuccess(...) \ @@ -800,8 +800,8 @@ static inline QuESTEnv _createQuESTEnv() { createFullStateDiagMatrFromPauliStrSumFile(fn) #define applyDiagonalOp(...) \ - _WARN_FUNC_RENAMED("applyDiagonalOp()", "multiplyFullStateDiagMatr()") \ - multiplyFullStateDiagMatr(__VA_ARGS__) + _WARN_FUNC_RENAMED("applyDiagonalOp()", "leftapplyFullStateDiagMatr()") \ + leftapplyFullStateDiagMatr(__VA_ARGS__) #define calcExpecDiagonalOp(...) \ _WARN_FUNC_RENAMED("calcExpecDiagonalOp()", "calcExpecNonHermitianFullStateDiagMatr()") \ @@ -822,8 +822,8 @@ static inline QuESTEnv _createQuESTEnv() { applyDiagMatr(__VA_ARGS__) #define applySubDiagonalOp(...) \ - _WARN_FUNC_RENAMED("applySubDiagonalOp()", "multiplyDiagMatr()") \ - multiplyDiagMatr(__VA_ARGS__) + _WARN_FUNC_RENAMED("applySubDiagonalOp()", "leftapplyDiagMatr()") \ + leftapplyDiagMatr(__VA_ARGS__) static inline void _applyGateSubDiagonalOp(Qureg qureg, int* targets, int numTargets, DiagMatr op) { qreal eps = getValidationEpsilon(); @@ -1029,21 +1029,21 @@ static inline qreal _calcExpecPauliSum(Qureg qureg, _NoWarnPauliOpType* allPauli static inline void _applyPauliSum(Qureg inQureg, _NoWarnPauliOpType* allPauliCodes, qreal* termCoeffs, int numSumTerms, Qureg outQureg) { PauliStrSum sum = _createPauliStrSumFromCodes(inQureg.numQubits, allPauliCodes, termCoeffs, numSumTerms); setQuregToClone(outQureg, inQureg); - multiplyPauliStrSum(outQureg, sum, inQureg); + leftapplyPauliStrSum(outQureg, sum, inQureg); destroyPauliStrSum(sum); } #define applyPauliSum(...) \ - _WARN_FUNC_RENAMED("applyPauliSum(inQureg, ..., outQureg)", "multiplyPauliStrSum(outQureg, PauliStrSum)") \ + _WARN_FUNC_RENAMED("applyPauliSum(inQureg, ..., outQureg)", "leftapplyPauliStrSum(outQureg, PauliStrSum)") \ _applyPauliSum(__VA_ARGS__) static inline void _applyPauliHamil(Qureg inQureg, PauliStrSum hamil, Qureg outQureg) { setQuregToClone(outQureg, inQureg); - multiplyPauliStrSum(outQureg, hamil, inQureg); + leftapplyPauliStrSum(outQureg, hamil, inQureg); } #define applyPauliHamil(...) \ - _WARN_FUNC_RENAMED("applyPauliHamil(inQureg, PauliHamil, outQureg)", "multiplyPauliStrSum(qureg, PauliStrSum, workspace)") \ + _WARN_FUNC_RENAMED("applyPauliHamil(inQureg, PauliHamil, outQureg)", "leftapplyPauliStrSum(qureg, PauliStrSum, workspace)") \ _applyPauliHamil(__VA_ARGS__) @@ -1109,16 +1109,16 @@ static inline void _applyPauliHamil(Qureg inQureg, PauliStrSum hamil, Qureg outQ #define applyMatrix2(qureg, targ, ...) \ - _WARN_FUNC_RENAMED("applyMatrix2()", "multiplyCompMatr1()") \ - multiplyCompMatr1(qureg, targ, _GET_COMP_MATR_1_FROM_COMPLEX_MATRIX_2(__VA_ARGS__)) + _WARN_FUNC_RENAMED("applyMatrix2()", "leftapplyCompMatr1()") \ + leftapplyCompMatr1(qureg, targ, _GET_COMP_MATR_1_FROM_COMPLEX_MATRIX_2(__VA_ARGS__)) #define applyMatrix4(qureg, targ1, targ2, ...) \ - _WARN_FUNC_RENAMED("applyMatrix4()", "multiplyCompMatr2()") \ - multiplyCompMatr2(qureg, targ1, targ2, _GET_COMP_MATR_2_FROM_COMPLEX_MATRIX_4(__VA_ARGS__)) + _WARN_FUNC_RENAMED("applyMatrix4()", "leftapplyCompMatr2()") \ + leftapplyCompMatr2(qureg, targ1, targ2, _GET_COMP_MATR_2_FROM_COMPLEX_MATRIX_4(__VA_ARGS__)) #define applyMatrixN(...) \ - _WARN_FUNC_RENAMED("applyMatrixN()", "multiplyCompMatr()") \ - multiplyCompMatr(__VA_ARGS__) + _WARN_FUNC_RENAMED("applyMatrixN()", "leftapplyCompMatr()") \ + leftapplyCompMatr(__VA_ARGS__) diff --git a/quest/include/multiplication.h b/quest/include/multiplication.h index e8cfd591..81d27a50 100644 --- a/quest/include/multiplication.h +++ b/quest/include/multiplication.h @@ -7,8 +7,8 @@ * * @defgroup multiplication Multiplication * @ingroup api - * @brief Functions for directly multiplying operators upon - * density matrices. + * @brief Functions for directly pre- or post-multiplying operators + * upon density matrices. * @{ */ @@ -75,12 +75,12 @@ extern "C" { {0.3i, 0.4i} }); - multiplyCompMatr1(qureg, 2, matrix); + leftapplyCompMatr1(qureg, 2, matrix); * ``` * * @param[in,out] qureg the state to modify. * @param[in] target the index of the target qubit. - * @param[in] matrix the Z-basis matrix to multiply. + * @param[in] matrix the Z-basis matrix to multiply upon the left. * @throws @validationerror * - if @p qureg or @p matrix are uninitialised. * - if @p target is an invalid qubit index. @@ -88,12 +88,12 @@ extern "C" { * - getCompMatr1() * - getInlineCompMatr1() * - applyCompMatr1() - * - postMultiplyCompMatr1() + * - rightapplyCompMatr1() * - applyQubitProjector() - * - multiplyCompMatr() + * - leftapplyCompMatr() * @author Tyson Jones */ -void multiplyCompMatr1(Qureg qureg, int target, CompMatr1 matrix); +void leftapplyCompMatr1(Qureg qureg, int target, CompMatr1 matrix); /** Multiplies a general one-qubit dense @p matrix upon the specified @p target @@ -124,7 +124,7 @@ void multiplyCompMatr1(Qureg qureg, int target, CompMatr1 matrix); {0.3i, 0.4i} }); - postMultiplyCompMatr1(qureg, 2, matrix); + rightapplyCompMatr1(qureg, 2, matrix); * ``` * * @param[in,out] qureg the state to modify. @@ -138,11 +138,11 @@ void multiplyCompMatr1(Qureg qureg, int target, CompMatr1 matrix); * - getCompMatr1() * - getInlineCompMatr1() * - applyCompMatr1() - * - multiplyCompMatr1() - * - multiplyCompMatr() + * - leftapplyCompMatr1() + * - leftapplyCompMatr() * @author Tyson Jones */ -void postMultiplyCompMatr1(Qureg qureg, int target, CompMatr1 matrix); +void rightapplyCompMatr1(Qureg qureg, int target, CompMatr1 matrix); // end de-mangler @@ -170,14 +170,14 @@ extern "C" { /// @notyetdoced /// @see /// - applyCompMatr2() -/// - multiplyCompMatr1() -void multiplyCompMatr2(Qureg qureg, int target1, int target2, CompMatr2 matr); +/// - leftapplyCompMatr1() +void leftapplyCompMatr2(Qureg qureg, int target1, int target2, CompMatr2 matr); /// @notyetdoced /// @see -/// - postMultiplyCompMatr1() -void postMultiplyCompMatr2(Qureg qureg, int target1, int target2, CompMatr2 matrix); +/// - rightapplyCompMatr1() +void rightapplyCompMatr2(Qureg qureg, int target1, int target2, CompMatr2 matrix); // end de-mangler @@ -207,15 +207,15 @@ extern "C" { * * @see * - applyCompMatr() - * - multiplyCompMatr1() + * - leftapplyCompMatr1() */ -void multiplyCompMatr(Qureg qureg, int* targets, int numTargets, CompMatr matrix); +void leftapplyCompMatr(Qureg qureg, int* targets, int numTargets, CompMatr matrix); /// @notyetdoced /// @see -/// - postMultiplyCompMatr1() -void postMultiplyCompMatr(Qureg qureg, int* targets, int numTargets, CompMatr matrix); +/// - rightapplyCompMatr1() +void rightapplyCompMatr(Qureg qureg, int* targets, int numTargets, CompMatr matrix); // end de-mangler @@ -230,16 +230,16 @@ void postMultiplyCompMatr(Qureg qureg, int* targets, int numTargets, CompMatr ma /// @notyetvalidated /// @notyetdoced /// @cppvectoroverload -/// @see multiplyCompMatr() -void multiplyCompMatr(Qureg qureg, std::vector targets, CompMatr matr); +/// @see leftapplyCompMatr() +void leftapplyCompMatr(Qureg qureg, std::vector targets, CompMatr matr); /// @notyettested /// @notyetvalidated /// @notyetdoced /// @cppvectoroverload -/// @see postMultiplyCompMatr() -void postMultiplyCompMatr(Qureg qureg, std::vector targets, CompMatr matr); +/// @see rightapplyCompMatr() +void rightapplyCompMatr(Qureg qureg, std::vector targets, CompMatr matr); #endif @@ -262,13 +262,13 @@ extern "C" { /// @notyetdoced -/// @see multiplyCompMatr1() -void multiplyDiagMatr1(Qureg qureg, int target, DiagMatr1 matr); +/// @see leftapplyCompMatr1() +void leftapplyDiagMatr1(Qureg qureg, int target, DiagMatr1 matr); /// @notyetdoced -/// @see postMultiplyCompMatr1() -void postMultiplyDiagMatr1(Qureg qureg, int target, DiagMatr1 matrix); +/// @see rightapplyCompMatr1() +void rightapplyDiagMatr1(Qureg qureg, int target, DiagMatr1 matrix); // end de-mangler @@ -294,13 +294,13 @@ extern "C" { /// @notyetdoced -/// @see multiplyCompMatr1() -void multiplyDiagMatr2(Qureg qureg, int target1, int target2, DiagMatr2 matr); +/// @see leftapplyCompMatr1() +void leftapplyDiagMatr2(Qureg qureg, int target1, int target2, DiagMatr2 matr); /// @notyetdoced -/// @see postMultiplyCompMatr1() -void postMultiplyDiagMatr2(Qureg qureg, int target1, int target2, DiagMatr2 matrix); +/// @see rightapplyCompMatr1() +void rightapplyDiagMatr2(Qureg qureg, int target1, int target2, DiagMatr2 matrix); // end de-mangler @@ -326,27 +326,27 @@ extern "C" { /// @notyetdoced -/// @see multiplyCompMatr1() -void multiplyDiagMatr(Qureg qureg, int* targets, int numTargets, DiagMatr matrix); +/// @see leftapplyCompMatr1() +void leftapplyDiagMatr(Qureg qureg, int* targets, int numTargets, DiagMatr matrix); /// @notyetdoced -/// @see postMultiplyCompMatr1() -void postMultiplyDiagMatr(Qureg qureg, int* targets, int numTargets, DiagMatr matrix); +/// @see rightapplyCompMatr1() +void rightapplyDiagMatr(Qureg qureg, int* targets, int numTargets, DiagMatr matrix); /// @notyetdoced /// @see -/// - multiplyCompMatr1() +/// - leftapplyCompMatr1() /// - applyDiagMatrPower() -void multiplyDiagMatrPower(Qureg qureg, int* targets, int numTargets, DiagMatr matrix, qcomp exponent); +void leftapplyDiagMatrPower(Qureg qureg, int* targets, int numTargets, DiagMatr matrix, qcomp exponent); /// @notyetdoced /// @see -/// - postMultiplyCompMatr1() +/// - rightapplyCompMatr1() /// - applyDiagMatrPower() -void postMultiplyDiagMatrPower(Qureg qureg, int* targets, int numTargets, DiagMatr matrix, qcomp exponent); +void rightapplyDiagMatrPower(Qureg qureg, int* targets, int numTargets, DiagMatr matrix, qcomp exponent); // end de-mangler @@ -361,32 +361,32 @@ void postMultiplyDiagMatrPower(Qureg qureg, int* targets, int numTargets, DiagMa /// @notyetvalidated /// @notyetdoced /// @cppvectoroverload -/// @see multiplyDiagMatr() -void multiplyDiagMatr(Qureg qureg, std::vector targets, DiagMatr matrix); +/// @see leftapplyDiagMatr() +void leftapplyDiagMatr(Qureg qureg, std::vector targets, DiagMatr matrix); /// @notyettested /// @notyetvalidated /// @notyetdoced /// @cppvectoroverload -/// @see postMultiplyDiagMatr() -void postMultiplyDiagMatr(Qureg qureg, std::vector targets, DiagMatr matrix); +/// @see rightapplyDiagMatr() +void rightapplyDiagMatr(Qureg qureg, std::vector targets, DiagMatr matrix); /// @notyettested /// @notyetvalidated /// @notyetdoced /// @cppvectoroverload -/// @see multiplyDiagMatrPower() -void multiplyDiagMatrPower(Qureg qureg, std::vector targets, DiagMatr matrix, qcomp exponent); +/// @see leftapplyDiagMatrPower() +void leftapplyDiagMatrPower(Qureg qureg, std::vector targets, DiagMatr matrix, qcomp exponent); /// @notyettested /// @notyetvalidated /// @notyetdoced /// @cppvectoroverload -/// @see postMultiplyDiagMatrPower() -void postMultiplyDiagMatrPower(Qureg qureg, std::vector targets, DiagMatr matrix, qcomp exponent); +/// @see rightapplyDiagMatrPower() +void rightapplyDiagMatrPower(Qureg qureg, std::vector targets, DiagMatr matrix, qcomp exponent); #endif @@ -411,32 +411,32 @@ extern "C" { /// @notyetdoced /// @notyetvalidated /// @see -/// - multiplyCompMatr1() -void multiplyFullStateDiagMatr(Qureg qureg, FullStateDiagMatr matrix); +/// - leftapplyCompMatr1() +void leftapplyFullStateDiagMatr(Qureg qureg, FullStateDiagMatr matrix); /// @notyetdoced /// @notyetvalidated /// @see -/// - postMultiplyCompMatr1() +/// - rightapplyCompMatr1() /// - applyFullStateDiagMatr() -void postMultiplyFullStateDiagMatr(Qureg qureg, FullStateDiagMatr matrix); +void rightapplyFullStateDiagMatr(Qureg qureg, FullStateDiagMatr matrix); /// @notyetdoced /// @notyetvalidated /// @see -/// - multiplyCompMatr1() +/// - leftapplyCompMatr1() /// - applyFullStateDiagMatr() -void multiplyFullStateDiagMatrPower(Qureg qureg, FullStateDiagMatr matrix, qcomp exponent); +void leftapplyFullStateDiagMatrPower(Qureg qureg, FullStateDiagMatr matrix, qcomp exponent); /// @notyetdoced /// @notyetvalidated /// @see -/// - postMultiplyCompMatr1() +/// - rightapplyCompMatr1() /// - applyFullStateDiagMatr() -void postMultiplyFullStateDiagMatrPower(Qureg qureg, FullStateDiagMatr matrix, qcomp exponent); +void rightapplyFullStateDiagMatrPower(Qureg qureg, FullStateDiagMatr matrix, qcomp exponent); // end de-mangler @@ -463,16 +463,16 @@ extern "C" { /// @notyetdoced /// @see -/// - multiplyCompMatr1() +/// - leftapplyCompMatr1() /// - applySwap() -void multiplySwap(Qureg qureg, int qubit1, int qubit2); +void leftapplySwap(Qureg qureg, int qubit1, int qubit2); /// @notyetdoced /// @see -/// - multiplyCompMatr1() +/// - leftapplyCompMatr1() /// - applySwap() -void postMultiplySwap(Qureg qureg, int qubit1, int qubit2); +void rightapplySwap(Qureg qureg, int qubit1, int qubit2); // end de-mangler @@ -499,44 +499,44 @@ extern "C" { /// @notyetdoced /// @see -/// - multiplyCompMatr1() +/// - leftapplyCompMatr1() /// - applyPauliX() -void multiplyPauliX(Qureg qureg, int target); +void leftapplyPauliX(Qureg qureg, int target); /// @notyetdoced /// @see -/// - multiplyCompMatr1() +/// - leftapplyCompMatr1() /// - applyPauliY() -void multiplyPauliY(Qureg qureg, int target); +void leftapplyPauliY(Qureg qureg, int target); /// @notyetdoced /// @see -/// - multiplyCompMatr1() +/// - leftapplyCompMatr1() /// - applyPauliZ() -void multiplyPauliZ(Qureg qureg, int target); +void leftapplyPauliZ(Qureg qureg, int target); /// @notyetdoced /// @see -/// - postMultiplyCompMatr1() +/// - rightapplyCompMatr1() /// - applyPauliX() -void postMultiplyPauliX(Qureg qureg, int target); +void rightapplyPauliX(Qureg qureg, int target); /// @notyetdoced /// @see -/// - postMultiplyCompMatr1() +/// - rightapplyCompMatr1() /// - applyPauliY() -void postMultiplyPauliY(Qureg qureg, int target); +void rightapplyPauliY(Qureg qureg, int target); /// @notyetdoced /// @see -/// - postMultiplyCompMatr1() +/// - rightapplyCompMatr1() /// - applyPauliZ() -void postMultiplyPauliZ(Qureg qureg, int target); +void rightapplyPauliZ(Qureg qureg, int target); // end de-mangler @@ -563,16 +563,16 @@ extern "C" { /// @notyetdoced /// @see -/// - multiplyCompMatr1() +/// - leftapplyCompMatr1() /// - applyPauliStr() -void multiplyPauliStr(Qureg qureg, PauliStr str); +void leftapplyPauliStr(Qureg qureg, PauliStr str); /// @notyetdoced /// @see -/// - postMultiplyCompMatr1() +/// - rightapplyCompMatr1() /// - applyPauliStr() -void postMultiplyPauliStr(Qureg qureg, PauliStr str); +void rightapplyPauliStr(Qureg qureg, PauliStr str); // end de-mangler @@ -599,16 +599,16 @@ extern "C" { /// @notyetdoced /// @see -/// - multiplyCompMatr1() +/// - leftapplyCompMatr1() /// - applyPauliGadget() -void multiplyPauliGadget(Qureg qureg, PauliStr str, qreal angle); +void leftapplyPauliGadget(Qureg qureg, PauliStr str, qreal angle); /// @notyetdoced /// @see -/// - postMultiplyCompMatr1() +/// - rightapplyCompMatr1() /// - applyPauliGadget() -void postMultiplyPauliGadget(Qureg qureg, PauliStr str, qreal angle); +void rightapplyPauliGadget(Qureg qureg, PauliStr str, qreal angle); // end de-mangler @@ -635,16 +635,16 @@ extern "C" { /// @notyetdoced /// @see -/// - multiplyCompMatr1() +/// - leftapplyCompMatr1() /// - applyPhaseGadget() -void multiplyPhaseGadget(Qureg qureg, int* targets, int numTargets, qreal angle); +void leftapplyPhaseGadget(Qureg qureg, int* targets, int numTargets, qreal angle); /// @notyetdoced /// @see -/// - postMultiplyCompMatr1() +/// - rightapplyCompMatr1() /// - applyPhaseGadget() -void postMultiplyPhaseGadget(Qureg qureg, int* targets, int numTargets, qreal angle); +void rightapplyPhaseGadget(Qureg qureg, int* targets, int numTargets, qreal angle); // end de-mangler @@ -659,16 +659,16 @@ void postMultiplyPhaseGadget(Qureg qureg, int* targets, int numTargets, qreal an /// @notyetvalidated /// @notyetdoced /// @cppvectoroverload -/// @see multiplyPhaseGadget() -void multiplyPhaseGadget(Qureg qureg, std::vector targets, qreal angle); +/// @see leftapplyPhaseGadget() +void leftapplyPhaseGadget(Qureg qureg, std::vector targets, qreal angle); /// @notyettested /// @notyetvalidated /// @notyetdoced /// @cppvectoroverload -/// @see postMultiplyPhaseGadget() -void postMultiplyPhaseGadget(Qureg qureg, std::vector targets, qreal angle); +/// @see rightapplyPhaseGadget() +void rightapplyPhaseGadget(Qureg qureg, std::vector targets, qreal angle); #endif @@ -692,17 +692,17 @@ extern "C" { /// @notyetdoced /// @see -/// - multiplyCompMatr1() +/// - leftapplyCompMatr1() /// - applyMultiQubitNot() -void multiplyMultiQubitNot(Qureg qureg, int* targets, int numTargets); +void leftapplyMultiQubitNot(Qureg qureg, int* targets, int numTargets); /// @notyetdoced /// @notyetvalidated /// @see -/// - postMultiplyCompMatr1() +/// - rightapplyCompMatr1() /// - applyMultiQubitNot() -void postMultiplyMultiQubitNot(Qureg qureg, int* targets, int numTargets); +void rightapplyMultiQubitNot(Qureg qureg, int* targets, int numTargets); // end de-mangler @@ -716,15 +716,15 @@ void postMultiplyMultiQubitNot(Qureg qureg, int* targets, int numTargets); /// @notyetvalidated /// @notyetdoced /// @cppvectoroverload -/// @see multiplyMultiQubitNot() -void multiplyMultiQubitNot(Qureg qureg, std::vector targets); +/// @see leftapplyMultiQubitNot() +void leftapplyMultiQubitNot(Qureg qureg, std::vector targets); /// @notyetvalidated /// @notyetdoced /// @cppvectoroverload -/// @see postMultiplyMultiQubitNot() -void postMultiplyMultiQubitNot(Qureg qureg, std::vector targets); +/// @see rightapplyMultiQubitNot() +void rightapplyMultiQubitNot(Qureg qureg, std::vector targets); #endif @@ -748,33 +748,33 @@ extern "C" { /// @notyetdoced /// @notyetvalidated /// @see -/// - multiplyCompMatr1() +/// - leftapplyCompMatr1() /// - applyQubitProjector() -void multiplyQubitProjector(Qureg qureg, int qubit, int outcome); +void leftapplyQubitProjector(Qureg qureg, int qubit, int outcome); /// @notyetdoced /// @notyetvalidated /// @see -/// - multiplyCompMatr1() +/// - leftapplyCompMatr1() /// - applyMultiQubitProjector() -void multiplyMultiQubitProjector(Qureg qureg, int* qubits, int* outcomes, int numQubits); +void leftapplyMultiQubitProjector(Qureg qureg, int* qubits, int* outcomes, int numQubits); /// @notyetdoced /// @notyetvalidated /// @see -/// - postMultiplyCompMatr1() +/// - rightapplyCompMatr1() /// - applyQubitProjector() -void postMultiplyQubitProjector(Qureg qureg, int qubit, int outcome); +void rightapplyQubitProjector(Qureg qureg, int qubit, int outcome); /// @notyetdoced /// @notyetvalidated /// @see -/// - postMultiplyCompMatr1() +/// - rightapplyCompMatr1() /// - applyMultiQubitProjector() -void postMultiplyMultiQubitProjector(Qureg qureg, int* qubits, int* outcomes, int numQubits); +void rightapplyMultiQubitProjector(Qureg qureg, int* qubits, int* outcomes, int numQubits); // end de-mangler @@ -799,14 +799,14 @@ extern "C" { /// @notyetdoced /// @notyetvalidated -/// @see multiplyCompMatr1() -void multiplyPauliStrSum(Qureg qureg, PauliStrSum sum, Qureg workspace); +/// @see leftapplyCompMatr1() +void leftapplyPauliStrSum(Qureg qureg, PauliStrSum sum, Qureg workspace); /// @notyetdoced /// @notyetvalidated -/// @see multiplyCompMatr1() -void postMultiplyPauliStrSum(Qureg qureg, PauliStrSum sum, Qureg workspace); +/// @see leftapplyCompMatr1() +void rightapplyPauliStrSum(Qureg qureg, PauliStrSum sum, Qureg workspace); // end de-mangler diff --git a/quest/include/operations.h b/quest/include/operations.h index 2a5c394b..075ab668 100644 --- a/quest/include/operations.h +++ b/quest/include/operations.h @@ -115,8 +115,8 @@ digraph { * @see * - getCompMatr1() * - getInlineCompMatr1() - * - multiplyCompMatr1() - * - postMultiplyCompMatr1() + * - leftapplyCompMatr1() + * - rightapplyCompMatr1() * - applyControlledCompMatr1() * - applyCompMatr2() * - applyCompMatr() @@ -322,8 +322,8 @@ digraph { * * @see * - applyCompMatr1() - * - multiplyCompMatr2() - * - postMultiplyCompMatr2() + * - leftapplyCompMatr2() + * - rightapplyCompMatr2() */ void applyCompMatr2(Qureg qureg, int target1, int target2, CompMatr2 matrix); @@ -515,8 +515,8 @@ extern "C" { * * @see * - applyCompMatr1() - * - multiplyCompMatr() - * - postMultiplyCompMatr() + * - leftapplyCompMatr() + * - rightapplyCompMatr() */ void applyCompMatr(Qureg qureg, int* targets, int numTargets, CompMatr matr); @@ -600,8 +600,8 @@ extern "C" { /** @notyetdoced * @see * - applyCompMatr1() - * - multiplyCompMatr2() - * - postMultiplyCompMatr2() + * - leftapplyCompMatr2() + * - rightapplyCompMatr2() */ void applyDiagMatr1(Qureg qureg, int target, DiagMatr1 matr); diff --git a/quest/src/api/multiplication.cpp b/quest/src/api/multiplication.cpp index e0c37d47..c4b508e0 100644 --- a/quest/src/api/multiplication.cpp +++ b/quest/src/api/multiplication.cpp @@ -27,7 +27,7 @@ using std::vector; extern "C" { -void multiplyCompMatr1(Qureg qureg, int target, CompMatr1 matrix) { +void leftapplyCompMatr1(Qureg qureg, int target, CompMatr1 matrix) { validate_quregFields(qureg, __func__); validate_target(qureg, target, __func__); validate_matrixFields(matrix, __func__); @@ -37,7 +37,7 @@ void multiplyCompMatr1(Qureg qureg, int target, CompMatr1 matrix) { localiser_statevec_anyCtrlOneTargDenseMatr(qureg, {}, {}, target, matrix, conj, transp); } -void postMultiplyCompMatr1(Qureg qureg, int target, CompMatr1 matrix) { +void rightapplyCompMatr1(Qureg qureg, int target, CompMatr1 matrix) { validate_quregFields(qureg, __func__); validate_quregIsDensityMatrix(qureg, __func__); validate_target(qureg, target, __func__); @@ -60,7 +60,7 @@ void postMultiplyCompMatr1(Qureg qureg, int target, CompMatr1 matrix) { extern "C" { -void multiplyCompMatr2(Qureg qureg, int target1, int target2, CompMatr2 matrix) { +void leftapplyCompMatr2(Qureg qureg, int target1, int target2, CompMatr2 matrix) { validate_quregFields(qureg, __func__); validate_twoTargets(qureg, target1, target2, __func__); validate_matrixFields(matrix, __func__); @@ -71,7 +71,7 @@ void multiplyCompMatr2(Qureg qureg, int target1, int target2, CompMatr2 matrix) localiser_statevec_anyCtrlTwoTargDenseMatr(qureg, {}, {}, target1, target2, matrix, conj, transp); } -void postMultiplyCompMatr2(Qureg qureg, int target1, int target2, CompMatr2 matrix) { +void rightapplyCompMatr2(Qureg qureg, int target1, int target2, CompMatr2 matrix) { validate_quregFields(qureg, __func__); validate_quregIsDensityMatrix(qureg, __func__); validate_twoTargets(qureg, target1, target2, __func__); @@ -96,7 +96,7 @@ void postMultiplyCompMatr2(Qureg qureg, int target1, int target2, CompMatr2 matr extern "C" { -void multiplyCompMatr(Qureg qureg, int* targets, int numTargets, CompMatr matrix) { +void leftapplyCompMatr(Qureg qureg, int* targets, int numTargets, CompMatr matrix) { validate_quregFields(qureg, __func__); validate_targets(qureg, targets, numTargets, __func__); validate_matrixDimMatchesTargets(matrix, numTargets, __func__); // also validates fields and is-sync @@ -107,7 +107,7 @@ void multiplyCompMatr(Qureg qureg, int* targets, int numTargets, CompMatr matrix localiser_statevec_anyCtrlAnyTargDenseMatr(qureg, {}, {}, util_getVector(targets, numTargets), matrix, conj, transp); } -void postMultiplyCompMatr(Qureg qureg, int* targets, int numTargets, CompMatr matrix) { +void rightapplyCompMatr(Qureg qureg, int* targets, int numTargets, CompMatr matrix) { validate_quregFields(qureg, __func__); validate_quregIsDensityMatrix(qureg, __func__); validate_targets(qureg, targets, numTargets, __func__); @@ -123,14 +123,14 @@ void postMultiplyCompMatr(Qureg qureg, int* targets, int numTargets, CompMatr ma } // end de-mangler -void multiplyCompMatr(Qureg qureg, vector targets, CompMatr matr) { +void leftapplyCompMatr(Qureg qureg, vector targets, CompMatr matr) { - multiplyCompMatr(qureg, targets.data(), targets.size(), matr); + leftapplyCompMatr(qureg, targets.data(), targets.size(), matr); } -void postMultiplyCompMatr(Qureg qureg, vector targets, CompMatr matr) { +void rightapplyCompMatr(Qureg qureg, vector targets, CompMatr matr) { - postMultiplyCompMatr(qureg, targets.data(), targets.size(), matr); + rightapplyCompMatr(qureg, targets.data(), targets.size(), matr); } @@ -141,7 +141,7 @@ void postMultiplyCompMatr(Qureg qureg, vector targets, CompMatr matr) { extern "C" { -void multiplyDiagMatr1(Qureg qureg, int target, DiagMatr1 matrix) { +void leftapplyDiagMatr1(Qureg qureg, int target, DiagMatr1 matrix) { validate_quregFields(qureg, __func__); validate_target(qureg, target, __func__); validate_matrixFields(matrix, __func__); @@ -150,7 +150,7 @@ void multiplyDiagMatr1(Qureg qureg, int target, DiagMatr1 matrix) { localiser_statevec_anyCtrlOneTargDiagMatr(qureg, {}, {}, target, matrix, conj); } -void postMultiplyDiagMatr1(Qureg qureg, int target, DiagMatr1 matrix) { +void rightapplyDiagMatr1(Qureg qureg, int target, DiagMatr1 matrix) { validate_quregFields(qureg, __func__); validate_quregIsDensityMatrix(qureg, __func__); validate_target(qureg, target, __func__); @@ -171,7 +171,7 @@ void postMultiplyDiagMatr1(Qureg qureg, int target, DiagMatr1 matrix) { extern "C" { -void multiplyDiagMatr2(Qureg qureg, int target1, int target2, DiagMatr2 matrix) { +void leftapplyDiagMatr2(Qureg qureg, int target1, int target2, DiagMatr2 matrix) { validate_quregFields(qureg, __func__); validate_twoTargets(qureg, target1, target2, __func__); validate_matrixFields(matrix, __func__); @@ -180,7 +180,7 @@ void multiplyDiagMatr2(Qureg qureg, int target1, int target2, DiagMatr2 matrix) localiser_statevec_anyCtrlTwoTargDiagMatr(qureg, {}, {}, target1, target2, matrix, conj); } -void postMultiplyDiagMatr2(Qureg qureg, int target1, int target2, DiagMatr2 matrix) { +void rightapplyDiagMatr2(Qureg qureg, int target1, int target2, DiagMatr2 matrix) { validate_quregFields(qureg, __func__); validate_quregIsDensityMatrix(qureg, __func__); validate_twoTargets(qureg, target1, target2, __func__); @@ -202,7 +202,7 @@ void postMultiplyDiagMatr2(Qureg qureg, int target1, int target2, DiagMatr2 matr extern "C" { -void multiplyDiagMatr(Qureg qureg, int* targets, int numTargets, DiagMatr matrix) { +void leftapplyDiagMatr(Qureg qureg, int* targets, int numTargets, DiagMatr matrix) { validate_quregFields(qureg, __func__); validate_targets(qureg, targets, numTargets, __func__); validate_matrixDimMatchesTargets(matrix, numTargets, __func__); // also validates fields and is-sync @@ -213,7 +213,7 @@ void multiplyDiagMatr(Qureg qureg, int* targets, int numTargets, DiagMatr matrix localiser_statevec_anyCtrlAnyTargDiagMatr(qureg, {}, {}, qubits, matrix, exponent, conj); } -void postMultiplyDiagMatr(Qureg qureg, int* targets, int numTargets, DiagMatr matrix) { +void rightapplyDiagMatr(Qureg qureg, int* targets, int numTargets, DiagMatr matrix) { validate_quregFields(qureg, __func__); validate_quregIsDensityMatrix(qureg, __func__); validate_targets(qureg, targets, numTargets, __func__); @@ -227,14 +227,14 @@ void postMultiplyDiagMatr(Qureg qureg, int* targets, int numTargets, DiagMatr ma } // end de-mangler -void multiplyDiagMatr(Qureg qureg, vector targets, DiagMatr matrix) { +void leftapplyDiagMatr(Qureg qureg, vector targets, DiagMatr matrix) { - multiplyDiagMatr(qureg, targets.data(), targets.size(), matrix); + leftapplyDiagMatr(qureg, targets.data(), targets.size(), matrix); } -void postMultiplyDiagMatr(Qureg qureg, vector targets, DiagMatr matrix) { +void rightapplyDiagMatr(Qureg qureg, vector targets, DiagMatr matrix) { - postMultiplyDiagMatr(qureg, targets.data(), targets.size(), matrix); + rightapplyDiagMatr(qureg, targets.data(), targets.size(), matrix); } @@ -245,7 +245,7 @@ void postMultiplyDiagMatr(Qureg qureg, vector targets, DiagMatr matrix) { extern "C" { -void multiplyDiagMatrPower(Qureg qureg, int* targets, int numTargets, DiagMatr matrix, qcomp exponent) { +void leftapplyDiagMatrPower(Qureg qureg, int* targets, int numTargets, DiagMatr matrix, qcomp exponent) { validate_quregFields(qureg, __func__); validate_targets(qureg, targets, numTargets, __func__); validate_matrixDimMatchesTargets(matrix, numTargets, __func__); // also validates fields and is-sync, but not unitarity @@ -256,7 +256,7 @@ void multiplyDiagMatrPower(Qureg qureg, int* targets, int numTargets, DiagMatr m localiser_statevec_anyCtrlAnyTargDiagMatr(qureg, {}, {}, qubits, matrix, exponent, conj); } -void postMultiplyDiagMatrPower(Qureg qureg, int* targets, int numTargets, DiagMatr matrix, qcomp exponent) { +void rightapplyDiagMatrPower(Qureg qureg, int* targets, int numTargets, DiagMatr matrix, qcomp exponent) { validate_quregFields(qureg, __func__); validate_quregIsDensityMatrix(qureg, __func__); validate_targets(qureg, targets, numTargets, __func__); @@ -270,14 +270,14 @@ void postMultiplyDiagMatrPower(Qureg qureg, int* targets, int numTargets, DiagMa } // end de-mangler -void multiplyDiagMatrPower(Qureg qureg, vector targets, DiagMatr matrix, qcomp exponent) { +void leftapplyDiagMatrPower(Qureg qureg, vector targets, DiagMatr matrix, qcomp exponent) { - multiplyDiagMatrPower(qureg, targets.data(), targets.size(), matrix, exponent); + leftapplyDiagMatrPower(qureg, targets.data(), targets.size(), matrix, exponent); } -void postMultiplyDiagMatrPower(Qureg qureg, vector targets, DiagMatr matrix, qcomp exponent) { +void rightapplyDiagMatrPower(Qureg qureg, vector targets, DiagMatr matrix, qcomp exponent) { - postMultiplyDiagMatrPower(qureg, targets.data(), targets.size(), matrix, exponent); + rightapplyDiagMatrPower(qureg, targets.data(), targets.size(), matrix, exponent); } @@ -288,15 +288,15 @@ void postMultiplyDiagMatrPower(Qureg qureg, vector targets, DiagMatr matrix extern "C" { -void multiplyFullStateDiagMatr(Qureg qureg, FullStateDiagMatr matrix) { +void leftapplyFullStateDiagMatr(Qureg qureg, FullStateDiagMatr matrix) { validate_quregFields(qureg, __func__); validate_matrixFields(matrix, __func__); validate_matrixAndQuregAreCompatible(matrix, qureg, false, __func__); // matrix can be non-unitary - multiplyFullStateDiagMatrPower(qureg, matrix, 1); // harmlessly re-validates + leftapplyFullStateDiagMatrPower(qureg, matrix, 1); // harmlessly re-validates } -void multiplyFullStateDiagMatrPower(Qureg qureg, FullStateDiagMatr matrix, qcomp exponent) { +void leftapplyFullStateDiagMatrPower(Qureg qureg, FullStateDiagMatr matrix, qcomp exponent) { validate_quregFields(qureg, __func__); validate_matrixFields(matrix, __func__); validate_matrixAndQuregAreCompatible(matrix, qureg, false, __func__); // matrix can be non-unitary @@ -312,16 +312,16 @@ void multiplyFullStateDiagMatrPower(Qureg qureg, FullStateDiagMatr matrix, qcomp localiser_statevec_allTargDiagMatr(qureg, matrix, exponent); } -void postMultiplyFullStateDiagMatr(Qureg qureg, FullStateDiagMatr matrix) { +void rightapplyFullStateDiagMatr(Qureg qureg, FullStateDiagMatr matrix) { validate_quregFields(qureg, __func__); validate_quregIsDensityMatrix(qureg, __func__); validate_matrixFields(matrix, __func__); validate_matrixAndQuregAreCompatible(matrix, qureg, false, __func__); // matrix can be non-unitary - postMultiplyFullStateDiagMatrPower(qureg, matrix, 1); // harmlessly re-validates + rightapplyFullStateDiagMatrPower(qureg, matrix, 1); // harmlessly re-validates } -void postMultiplyFullStateDiagMatrPower(Qureg qureg, FullStateDiagMatr matrix, qcomp exponent) { +void rightapplyFullStateDiagMatrPower(Qureg qureg, FullStateDiagMatr matrix, qcomp exponent) { validate_quregFields(qureg, __func__); validate_quregIsDensityMatrix(qureg, __func__); validate_matrixFields(matrix, __func__); @@ -345,14 +345,14 @@ void postMultiplyFullStateDiagMatrPower(Qureg qureg, FullStateDiagMatr matrix, q extern "C" { -void multiplySwap(Qureg qureg, int qubit1, int qubit2) { +void leftapplySwap(Qureg qureg, int qubit1, int qubit2) { validate_quregFields(qureg, __func__); validate_twoTargets(qureg, qubit1, qubit2, __func__); localiser_statevec_anyCtrlSwap(qureg, {}, {}, qubit1, qubit2); } -void postMultiplySwap(Qureg qureg, int qubit1, int qubit2) { +void rightapplySwap(Qureg qureg, int qubit1, int qubit2) { validate_quregFields(qureg, __func__); validate_quregIsDensityMatrix(qureg, __func__); validate_twoTargets(qureg, qubit1, qubit2, __func__); @@ -374,7 +374,7 @@ extern PauliStr paulis_getShiftedPauliStr(PauliStr str, int pauliShift); extern "C" { -void multiplyPauliX(Qureg qureg, int target) { +void leftapplyPauliX(Qureg qureg, int target) { validate_quregFields(qureg, __func__); validate_target(qureg, target, __func__); @@ -382,7 +382,7 @@ void multiplyPauliX(Qureg qureg, int target) { localiser_statevec_anyCtrlPauliTensor(qureg, {}, {}, str); } -void multiplyPauliY(Qureg qureg, int target) { +void leftapplyPauliY(Qureg qureg, int target) { validate_quregFields(qureg, __func__); validate_target(qureg, target, __func__); @@ -390,7 +390,7 @@ void multiplyPauliY(Qureg qureg, int target) { localiser_statevec_anyCtrlPauliTensor(qureg, {}, {}, str); } -void multiplyPauliZ(Qureg qureg, int target) { +void leftapplyPauliZ(Qureg qureg, int target) { validate_quregFields(qureg, __func__); validate_target(qureg, target, __func__); @@ -398,7 +398,7 @@ void multiplyPauliZ(Qureg qureg, int target) { localiser_statevec_anyCtrlPauliTensor(qureg, {}, {}, str); } -void postMultiplyPauliX(Qureg qureg, int target) { +void rightapplyPauliX(Qureg qureg, int target) { validate_quregFields(qureg, __func__); validate_quregIsDensityMatrix(qureg, __func__); validate_target(qureg, target, __func__); @@ -408,7 +408,7 @@ void postMultiplyPauliX(Qureg qureg, int target) { localiser_statevec_anyCtrlPauliTensor(qureg, {}, {}, str); } -void postMultiplyPauliY(Qureg qureg, int target) { +void rightapplyPauliY(Qureg qureg, int target) { validate_quregFields(qureg, __func__); validate_quregIsDensityMatrix(qureg, __func__); validate_target(qureg, target, __func__); @@ -419,7 +419,7 @@ void postMultiplyPauliY(Qureg qureg, int target) { localiser_statevec_anyCtrlPauliTensor(qureg, {}, {}, str, factor); } -void postMultiplyPauliZ(Qureg qureg, int target) { +void rightapplyPauliZ(Qureg qureg, int target) { validate_quregFields(qureg, __func__); validate_quregIsDensityMatrix(qureg, __func__); validate_target(qureg, target, __func__); @@ -441,14 +441,14 @@ extern bool paulis_hasOddNumY(PauliStr str); extern "C" { -void multiplyPauliStr(Qureg qureg, PauliStr str) { +void leftapplyPauliStr(Qureg qureg, PauliStr str) { validate_quregFields(qureg, __func__); validate_pauliStrTargets(qureg, str, __func__); localiser_statevec_anyCtrlPauliTensor(qureg, {}, {}, str); } -void postMultiplyPauliStr(Qureg qureg, PauliStr str) { +void rightapplyPauliStr(Qureg qureg, PauliStr str) { validate_quregFields(qureg, __func__); validate_quregIsDensityMatrix(qureg, __func__); validate_pauliStrTargets(qureg, str, __func__); @@ -468,7 +468,7 @@ void postMultiplyPauliStr(Qureg qureg, PauliStr str) { extern "C" { -void multiplyPauliGadget(Qureg qureg, PauliStr str, qreal angle) { +void leftapplyPauliGadget(Qureg qureg, PauliStr str, qreal angle) { validate_quregFields(qureg, __func__); validate_pauliStrTargets(qureg, str, __func__); @@ -476,7 +476,7 @@ void multiplyPauliGadget(Qureg qureg, PauliStr str, qreal angle) { localiser_statevec_anyCtrlPauliGadget(qureg, {}, {}, str, phase); } -void postMultiplyPauliGadget(Qureg qureg, PauliStr str, qreal angle) { +void rightapplyPauliGadget(Qureg qureg, PauliStr str, qreal angle) { validate_quregFields(qureg, __func__); validate_quregIsDensityMatrix(qureg, __func__); validate_pauliStrTargets(qureg, str, __func__); @@ -497,7 +497,7 @@ void postMultiplyPauliGadget(Qureg qureg, PauliStr str, qreal angle) { extern "C" { -void multiplyPhaseGadget(Qureg qureg, int* targets, int numTargets, qreal angle) { +void leftapplyPhaseGadget(Qureg qureg, int* targets, int numTargets, qreal angle) { validate_quregFields(qureg, __func__); validate_targets(qureg, targets, numTargets, __func__); @@ -506,7 +506,7 @@ void multiplyPhaseGadget(Qureg qureg, int* targets, int numTargets, qreal angle) localiser_statevec_anyCtrlPhaseGadget(qureg, {}, {}, qubits, phase); } -void postMultiplyPhaseGadget(Qureg qureg, int* targets, int numTargets, qreal angle) { +void rightapplyPhaseGadget(Qureg qureg, int* targets, int numTargets, qreal angle) { validate_quregFields(qureg, __func__); validate_quregIsDensityMatrix(qureg, __func__); validate_targets(qureg, targets, numTargets, __func__); @@ -518,14 +518,14 @@ void postMultiplyPhaseGadget(Qureg qureg, int* targets, int numTargets, qreal an } // end de-mangler -void multiplyPhaseGadget(Qureg qureg, vector targets, qreal angle) { +void leftapplyPhaseGadget(Qureg qureg, vector targets, qreal angle) { - multiplyPhaseGadget(qureg, targets.data(), targets.size(), angle); + leftapplyPhaseGadget(qureg, targets.data(), targets.size(), angle); } -void postMultiplyPhaseGadget(Qureg qureg, vector targets, qreal angle) { +void rightapplyPhaseGadget(Qureg qureg, vector targets, qreal angle) { - postMultiplyPhaseGadget(qureg, targets.data(), targets.size(), angle); + rightapplyPhaseGadget(qureg, targets.data(), targets.size(), angle); } @@ -536,35 +536,35 @@ void postMultiplyPhaseGadget(Qureg qureg, vector targets, qreal angle) { extern "C" { -void multiplyMultiQubitNot(Qureg qureg, int* targets, int numTargets) { +void leftapplyMultiQubitNot(Qureg qureg, int* targets, int numTargets) { validate_quregFields(qureg, __func__); validate_targets(qureg, targets, numTargets, __func__); // harmlessly re-validates PauliStr str = getPauliStr(std::string(numTargets, 'X'), targets, numTargets); - multiplyPauliStr(qureg, str); + leftapplyPauliStr(qureg, str); } -void postMultiplyMultiQubitNot(Qureg qureg, int* targets, int numTargets) { +void rightapplyMultiQubitNot(Qureg qureg, int* targets, int numTargets) { validate_quregFields(qureg, __func__); validate_quregIsDensityMatrix(qureg, __func__); validate_targets(qureg, targets, numTargets, __func__); // harmlessly re-validates PauliStr str = getPauliStr(std::string(numTargets, 'X'), targets, numTargets); - postMultiplyPauliStr(qureg, str); + rightapplyPauliStr(qureg, str); } } // end de-mangler -void multiplyMultiQubitNot(Qureg qureg, vector targets) { +void leftapplyMultiQubitNot(Qureg qureg, vector targets) { - multiplyMultiQubitNot(qureg, targets.data(), targets.size()); + leftapplyMultiQubitNot(qureg, targets.data(), targets.size()); } -void postMultiplyMultiQubitNot(Qureg qureg, vector targets) { +void rightapplyMultiQubitNot(Qureg qureg, vector targets) { - postMultiplyMultiQubitNot(qureg, targets.data(), targets.size()); + rightapplyMultiQubitNot(qureg, targets.data(), targets.size()); } @@ -575,7 +575,7 @@ void postMultiplyMultiQubitNot(Qureg qureg, vector targets) { extern "C" { -void multiplyQubitProjector(Qureg qureg, int qubit, int outcome) { +void leftapplyQubitProjector(Qureg qureg, int qubit, int outcome) { validate_quregFields(qureg, __func__); validate_target(qureg, qubit, __func__); validate_measurementOutcomeIsValid(outcome, __func__); @@ -584,7 +584,7 @@ void multiplyQubitProjector(Qureg qureg, int qubit, int outcome) { localiser_statevec_multiQubitProjector(qureg, {qubit}, {outcome}, prob); } -void multiplyMultiQubitProjector(Qureg qureg, int* qubits, int* outcomes, int numQubits) { +void leftapplyMultiQubitProjector(Qureg qureg, int* qubits, int* outcomes, int numQubits) { validate_quregFields(qureg, __func__); validate_targets(qureg, qubits, numQubits, __func__); validate_measurementOutcomesAreValid(outcomes, numQubits, __func__); @@ -595,7 +595,7 @@ void multiplyMultiQubitProjector(Qureg qureg, int* qubits, int* outcomes, int nu localiser_statevec_multiQubitProjector(qureg, qubitVec, outcomeVec, prob); } -void postMultiplyQubitProjector(Qureg qureg, int qubit, int outcome) { +void rightapplyQubitProjector(Qureg qureg, int qubit, int outcome) { validate_quregFields(qureg, __func__); validate_quregIsDensityMatrix(qureg, __func__); validate_target(qureg, qubit, __func__); @@ -605,7 +605,7 @@ void postMultiplyQubitProjector(Qureg qureg, int qubit, int outcome) { localiser_statevec_multiQubitProjector(qureg, {util_getBraQubit(qubit,qureg)}, {outcome}, prob); } -void postMultiplyMultiQubitProjector(Qureg qureg, int* qubits, int* outcomes, int numQubits) { +void rightapplyMultiQubitProjector(Qureg qureg, int* qubits, int* outcomes, int numQubits) { validate_quregFields(qureg, __func__); validate_quregIsDensityMatrix(qureg, __func__); validate_targets(qureg, qubits, numQubits, __func__); @@ -619,16 +619,16 @@ void postMultiplyMultiQubitProjector(Qureg qureg, int* qubits, int* outcomes, in } // end de-mangler -void multiplyMultiQubitProjector(Qureg qureg, vector qubits, vector outcomes) { +void leftapplyMultiQubitProjector(Qureg qureg, vector qubits, vector outcomes) { validate_measurementOutcomesMatchTargets(qubits.size(), outcomes.size(), __func__); - multiplyMultiQubitProjector(qureg, qubits.data(), outcomes.data(), outcomes.size()); + leftapplyMultiQubitProjector(qureg, qubits.data(), outcomes.data(), outcomes.size()); } -void postMultiplyMultiQubitProjector(Qureg qureg, vector qubits, vector outcomes) { +void rightapplyMultiQubitProjector(Qureg qureg, vector qubits, vector outcomes) { validate_measurementOutcomesMatchTargets(qubits.size(), outcomes.size(), __func__); - postMultiplyMultiQubitProjector(qureg, qubits.data(), outcomes.data(), outcomes.size()); + rightapplyMultiQubitProjector(qureg, qubits.data(), outcomes.data(), outcomes.size()); } @@ -639,7 +639,7 @@ void postMultiplyMultiQubitProjector(Qureg qureg, vector qubits, vector qureg, and qureg -> sum * qureg } -void postMultiplyPauliStrSum(Qureg qureg, PauliStrSum sum, Qureg workspace) { +void rightapplyPauliStrSum(Qureg qureg, PauliStrSum sum, Qureg workspace) { validate_quregFields(qureg, __func__); validate_quregFields(workspace, __func__); validate_quregIsDensityMatrix(qureg, __func__); diff --git a/quest/src/core/accelerator.cpp b/quest/src/core/accelerator.cpp index 5e3e40f5..1016f61e 100644 --- a/quest/src/core/accelerator.cpp +++ b/quest/src/core/accelerator.cpp @@ -392,22 +392,22 @@ void accel_statevec_allTargDiagMatr_sub(Qureg qureg, FullStateDiagMatr matr, qco } -auto getDenseMatrAllTargDiagMatrFunc(bool isGpu, qcomp exponent, bool multiplyLeft, bool multiplyRight, bool conjRight) { +auto getDenseMatrAllTargDiagMatrFunc(bool isGpu, qcomp exponent, bool applyLeft, bool applyRight, bool conjRight) { // this helper function exists, dissimilar from the function-agnostic macros used // by other functions, because densmatr_allTargDiagMatr_sub() does not accept every // possible combination of its boolean template parameters - assert_fullStateDiagMatrTemplateParamsAreValid(multiplyLeft, multiplyRight, conjRight); + assert_fullStateDiagMatrTemplateParamsAreValid(applyLeft, applyRight, conjRight); bool hasPower = exponent != qcomp(1, 0); - if (multiplyLeft && multiplyRight && conjRight) + if (applyLeft && applyRight && conjRight) return GET_CPU_OR_GPU_FOUR_BOOL_FUNC_OPTIMISED_FOR_FIRST_BOOL( isGpu, densmatr_allTargDiagMatr_sub, hasPower, true,true,true ); - if (multiplyLeft && ! multiplyRight && ! conjRight) + if (applyLeft && ! applyRight && ! conjRight) return GET_CPU_OR_GPU_FOUR_BOOL_FUNC_OPTIMISED_FOR_FIRST_BOOL( isGpu, densmatr_allTargDiagMatr_sub, hasPower, true,false,false ); - if (! multiplyLeft && multiplyRight && ! conjRight) + if (! applyLeft && applyRight && ! conjRight) return GET_CPU_OR_GPU_FOUR_BOOL_FUNC_OPTIMISED_FOR_FIRST_BOOL( isGpu, densmatr_allTargDiagMatr_sub, hasPower, false,true,false ); // unreachable @@ -415,7 +415,7 @@ auto getDenseMatrAllTargDiagMatrFunc(bool isGpu, qcomp exponent, bool multiplyLe } -void accel_densmatr_allTargDiagMatr_subA(Qureg qureg, FullStateDiagMatr matr, qcomp exponent, bool multiplyLeft, bool multiplyRight, bool conjRight) { +void accel_densmatr_allTargDiagMatr_subA(Qureg qureg, FullStateDiagMatr matr, qcomp exponent, bool applyLeft, bool applyRight, bool conjRight) { // matr is always local, qureg can be local or distributed... assert_fullStateDiagMatrIsLocal(matr); @@ -425,8 +425,8 @@ void accel_densmatr_allTargDiagMatr_subA(Qureg qureg, FullStateDiagMatr matr, qc bool matrGPU = matr.isGpuAccelerated; // which determines which function is called - auto gpuFunc = getDenseMatrAllTargDiagMatrFunc(true, exponent, multiplyLeft, multiplyRight, conjRight); - auto cpuFunc = getDenseMatrAllTargDiagMatrFunc(false, exponent, multiplyLeft, multiplyRight, conjRight); + auto gpuFunc = getDenseMatrAllTargDiagMatrFunc(true, exponent, applyLeft, applyRight, conjRight); + auto cpuFunc = getDenseMatrAllTargDiagMatrFunc(false, exponent, applyLeft, applyRight, conjRight); // when deployments match, we trivially call the common backend if ( quregGPU && matrGPU) gpuFunc(qureg, matr, exponent); @@ -476,7 +476,7 @@ void accel_densmatr_allTargDiagMatr_subA(Qureg qureg, FullStateDiagMatr matr, qc } -void accel_densmatr_allTargDiagMatr_subB(Qureg qureg, FullStateDiagMatr matr, qcomp exponent, bool multiplyLeft, bool multiplyRight, bool conjRight) { +void accel_densmatr_allTargDiagMatr_subB(Qureg qureg, FullStateDiagMatr matr, qcomp exponent, bool applyLeft, bool applyRight, bool conjRight) { assert_fullStateDiagMatrIsDistributed(matr); assert_acceleratorQuregIsDistributed(qureg); @@ -501,7 +501,7 @@ void accel_densmatr_allTargDiagMatr_subB(Qureg qureg, FullStateDiagMatr matr, qc temp.cpuElems = qureg.cpuCommBuffer; temp.gpuElems = qureg.gpuCommBuffer; - accel_densmatr_allTargDiagMatr_subA(qureg, temp, exponent, multiplyLeft, multiplyRight, conjRight); + accel_densmatr_allTargDiagMatr_subA(qureg, temp, exponent, applyLeft, applyRight, conjRight); } diff --git a/quest/src/core/accelerator.hpp b/quest/src/core/accelerator.hpp index 5480d813..cd413d9a 100644 --- a/quest/src/core/accelerator.hpp +++ b/quest/src/core/accelerator.hpp @@ -209,8 +209,8 @@ void accel_statevec_anyCtrlAnyTargDiagMatr_sub(Qureg qureg, vector ctrls, v void accel_statevec_allTargDiagMatr_sub(Qureg qureg, FullStateDiagMatr matr, qcomp exponent); -void accel_densmatr_allTargDiagMatr_subA(Qureg qureg, FullStateDiagMatr matr, qcomp exponent, bool multiplyLeft, bool multiplyRight, bool conjRight); -void accel_densmatr_allTargDiagMatr_subB(Qureg qureg, FullStateDiagMatr matr, qcomp exponent, bool multiplyLeft, bool multiplyRight, bool conjRight); +void accel_densmatr_allTargDiagMatr_subA(Qureg qureg, FullStateDiagMatr matr, qcomp exponent, bool applyLeft, bool applyRight, bool conjRight); +void accel_densmatr_allTargDiagMatr_subB(Qureg qureg, FullStateDiagMatr matr, qcomp exponent, bool applyLeft, bool applyRight, bool conjRight); diff --git a/quest/src/core/errors.cpp b/quest/src/core/errors.cpp index c1cfd2a0..51261ee1 100644 --- a/quest/src/core/errors.cpp +++ b/quest/src/core/errors.cpp @@ -467,12 +467,12 @@ void assert_fullStateDiagMatrIsDistributed(FullStateDiagMatr matr) { raiseInternalError("An accelerator function received a non-distributed FullStateDiagMatr where a distributed one was expected."); } -void assert_fullStateDiagMatrTemplateParamsAreValid(bool multiplyLeft, bool multiplyRight, bool conjRight) { +void assert_fullStateDiagMatrTemplateParamsAreValid(bool applyLeft, bool applyRight, bool conjRight) { bool valid = ( - ( multiplyLeft && multiplyRight && conjRight) || // matr qureg conj(matr) - ( multiplyLeft && ! multiplyRight && ! conjRight) || // matr qureg - (! multiplyLeft && multiplyRight && ! conjRight) // qureg matr + ( applyLeft && applyRight && conjRight) || // matr qureg conj(matr) + ( applyLeft && ! applyRight && ! conjRight) || // matr qureg + (! applyLeft && applyRight && ! conjRight) // qureg matr ); if (!valid) diff --git a/quest/src/core/errors.hpp b/quest/src/core/errors.hpp index 7097650a..50af5e8a 100644 --- a/quest/src/core/errors.hpp +++ b/quest/src/core/errors.hpp @@ -168,7 +168,7 @@ void assert_fullStateDiagMatrIsLocal(FullStateDiagMatr matr); void assert_fullStateDiagMatrIsDistributed(FullStateDiagMatr matr); -void assert_fullStateDiagMatrTemplateParamsAreValid(bool multiplyLeft, bool multiplyRight, bool conjRight); +void assert_fullStateDiagMatrTemplateParamsAreValid(bool applyLeft, bool applyRight, bool conjRight); void assert_acceleratorQuregIsDistributed(Qureg qureg); diff --git a/quest/src/core/localiser.cpp b/quest/src/core/localiser.cpp index 2fa09c9f..731c598d 100644 --- a/quest/src/core/localiser.cpp +++ b/quest/src/core/localiser.cpp @@ -1171,7 +1171,7 @@ void localiser_statevec_allTargDiagMatr(Qureg qureg, FullStateDiagMatr matr, qco } -void localiser_densmatr_allTargDiagMatr(Qureg qureg, FullStateDiagMatr matr, qcomp exponent, bool multiplyLeft, bool multiplyRight, bool conjRight) { +void localiser_densmatr_allTargDiagMatr(Qureg qureg, FullStateDiagMatr matr, qcomp exponent, bool applyLeft, bool applyRight, bool conjRight) { assert_localiserGivenDensMatr(qureg); // the diagonal matr has quadratically fewer elements than the density-matrix @@ -1197,7 +1197,7 @@ void localiser_densmatr_allTargDiagMatr(Qureg qureg, FullStateDiagMatr matr, qco // when the matrix is not distributed, we call the same routine despite whether qureg // is distributed or not; that merely changes how many qureg columns get updated if (!matrDist) { - accel_densmatr_allTargDiagMatr_subA(qureg, matr, exponent, multiplyLeft, multiplyRight, conjRight); + accel_densmatr_allTargDiagMatr_subA(qureg, matr, exponent, applyLeft, applyRight, conjRight); return; } @@ -1206,7 +1206,7 @@ void localiser_densmatr_allTargDiagMatr(Qureg qureg, FullStateDiagMatr matr, qco // matr elems are inside qureg buffer, but we still pass matr struct along to // accelerator, because it is going to perform mischief to re-use subA(). - accel_densmatr_allTargDiagMatr_subB(qureg, matr, exponent, multiplyLeft, multiplyRight, conjRight); + accel_densmatr_allTargDiagMatr_subB(qureg, matr, exponent, applyLeft, applyRight, conjRight); } diff --git a/quest/src/core/localiser.hpp b/quest/src/core/localiser.hpp index 50413fe6..6d615919 100644 --- a/quest/src/core/localiser.hpp +++ b/quest/src/core/localiser.hpp @@ -101,7 +101,7 @@ void localiser_statevec_anyCtrlTwoTargDiagMatr(Qureg qureg, vector ctrls, v void localiser_statevec_anyCtrlAnyTargDiagMatr(Qureg qureg, vector ctrls, vector ctrlStates, vector targs, DiagMatr matr, qcomp exponent, bool conj); void localiser_statevec_allTargDiagMatr(Qureg qureg, FullStateDiagMatr matr, qcomp exponent); -void localiser_densmatr_allTargDiagMatr(Qureg qureg, FullStateDiagMatr matr, qcomp exponent, bool multiplyLeft, bool multiplyRight, bool conjRight); +void localiser_densmatr_allTargDiagMatr(Qureg qureg, FullStateDiagMatr matr, qcomp exponent, bool applyLeft, bool applyRight, bool conjRight); /* diff --git a/quest/src/cpu/cpu_subroutines.cpp b/quest/src/cpu/cpu_subroutines.cpp index c519d200..dd6f64b5 100644 --- a/quest/src/cpu/cpu_subroutines.cpp +++ b/quest/src/cpu/cpu_subroutines.cpp @@ -750,7 +750,7 @@ void cpu_statevec_allTargDiagMatr_sub(Qureg qureg, FullStateDiagMatr matr, qcomp } -template +template void cpu_densmatr_allTargDiagMatr_sub(Qureg qureg, FullStateDiagMatr matr, qcomp exponent) { // unlike other functions, this function handles all scenarios of... @@ -773,7 +773,7 @@ void cpu_densmatr_allTargDiagMatr_sub(Qureg qureg, FullStateDiagMatr matr, qcomp qcomp fac = 1; // update fac to effect rho -> (matr * rho) or (matr^exponent * rho) - if constexpr (MultiplyLeft) { + if constexpr (ApplyLeft) { // i = global row of nth local amp qindex i = fast_getQuregGlobalRowFromFlatIndex(n, matr.numElems); @@ -789,7 +789,7 @@ void cpu_densmatr_allTargDiagMatr_sub(Qureg qureg, FullStateDiagMatr matr, qcomp // update fac to additional include rho -> (rho * matr) or // (rho * conj(matr)), or the same exponentiated - if constexpr (MultiplyRight) { + if constexpr (ApplyRight) { // m = global index corresponding to n qindex m = concatenateBits(qureg.rank, n, qureg.logNumAmpsPerNode); diff --git a/quest/src/cpu/cpu_subroutines.hpp b/quest/src/cpu/cpu_subroutines.hpp index ea570ba2..b81e2890 100644 --- a/quest/src/cpu/cpu_subroutines.hpp +++ b/quest/src/cpu/cpu_subroutines.hpp @@ -82,7 +82,7 @@ template void cpu_st template void cpu_statevec_allTargDiagMatr_sub(Qureg qureg, FullStateDiagMatr matr, qcomp exponent); -template void cpu_densmatr_allTargDiagMatr_sub(Qureg qureg, FullStateDiagMatr matr, qcomp exponent); +template void cpu_densmatr_allTargDiagMatr_sub(Qureg qureg, FullStateDiagMatr matr, qcomp exponent); /* diff --git a/quest/src/gpu/gpu_kernels.cuh b/quest/src/gpu/gpu_kernels.cuh index 4fdd7cee..a74d9ddc 100644 --- a/quest/src/gpu/gpu_kernels.cuh +++ b/quest/src/gpu/gpu_kernels.cuh @@ -563,7 +563,7 @@ __global__ void kernel_statevec_anyCtrlAnyTargDiagMatr_sub( */ -template +template __global__ void kernel_densmatr_allTargDiagMatr_sub( cu_qcomp* amps, qindex numThreads, int rank, qindex logNumAmpsPerNode, cu_qcomp* elems, qindex numElems, cu_qcomp exponent @@ -572,7 +572,7 @@ __global__ void kernel_densmatr_allTargDiagMatr_sub( cu_qcomp fac = getCuQcomp(1, 0); - if constexpr (MultiplyLeft) { + if constexpr (ApplyLeft) { qindex i = fast_getQuregGlobalRowFromFlatIndex(n, numElems); cu_qcomp term = elems[i]; @@ -583,7 +583,7 @@ __global__ void kernel_densmatr_allTargDiagMatr_sub( fac = term; } - if constexpr (MultiplyRight) { + if constexpr (ApplyRight) { qindex m = concatenateBits(rank, n, logNumAmpsPerNode); qindex j = fast_getQuregGlobalColFromFlatIndex(m, numElems); diff --git a/quest/src/gpu/gpu_subroutines.cpp b/quest/src/gpu/gpu_subroutines.cpp index 0e7bb938..bb968820 100644 --- a/quest/src/gpu/gpu_subroutines.cpp +++ b/quest/src/gpu/gpu_subroutines.cpp @@ -749,7 +749,7 @@ void gpu_statevec_allTargDiagMatr_sub(Qureg qureg, FullStateDiagMatr matr, qcomp } -template +template void gpu_densmatr_allTargDiagMatr_sub(Qureg qureg, FullStateDiagMatr matr, qcomp exponent) { assert_exponentMatchesTemplateParam(exponent, HasPower); @@ -760,7 +760,7 @@ void gpu_densmatr_allTargDiagMatr_sub(Qureg qureg, FullStateDiagMatr matr, qcomp qindex numBlocks = getNumBlocks(numThreads); kernel_densmatr_allTargDiagMatr_sub - + <<>> ( toCuQcomps(qureg.gpuAmps), numThreads, qureg.rank, qureg.logNumAmpsPerNode, toCuQcomps(util_getGpuMemPtr(matr)), matr.numElems, toCuQcomp(exponent) diff --git a/quest/src/gpu/gpu_subroutines.hpp b/quest/src/gpu/gpu_subroutines.hpp index 7ec3f669..aac2966f 100644 --- a/quest/src/gpu/gpu_subroutines.hpp +++ b/quest/src/gpu/gpu_subroutines.hpp @@ -75,7 +75,7 @@ template void gpu_st template void gpu_statevec_allTargDiagMatr_sub(Qureg qureg, FullStateDiagMatr matr, qcomp exponent); -template void gpu_densmatr_allTargDiagMatr_sub(Qureg qureg, FullStateDiagMatr matr, qcomp exponent); +template void gpu_densmatr_allTargDiagMatr_sub(Qureg qureg, FullStateDiagMatr matr, qcomp exponent); /* diff --git a/tests/unit/operations.cpp b/tests/unit/operations.cpp index 3ceec40e..cd39ac00 100644 --- a/tests/unit/operations.cpp +++ b/tests/unit/operations.cpp @@ -594,17 +594,17 @@ qmatrix getReferenceMatrix(auto matrixRefGen, vector targs, auto additional * Let |psi> be a statevector, rho be a density matrix, * and matr be an operator matrix. The options perform: * - * apply: |psi> -> matr |psi>, rho -> matr rho adj(matr) - * multiply: |psi> -> matr |psi>, rho -> matr rho - * postmultiply: rho -> rho matr + * apply: |psi> -> matr |psi>, rho -> matr rho adj(matr) + * leftapply: |psi> -> matr |psi>, rho -> matr rho + * rightapply: rho -> rho matr * * Note this is necessarily a template parameter (rather * than just a runtime parameter) only because the - * postMultiplyReferenceOperator() function is defined + * rightapplyReferenceOperator() function is defined * only upon qmatrix (for density matrices) */ -enum ApplyFlag { apply, multiply, postmultiply }; +enum ApplyFlag { apply, leftapply, rightapply }; /* @@ -752,8 +752,8 @@ void testOperationCorrectness(auto operation, auto matrixRefGen) { // update reference state (ctrls & states happen to only ever be used by apply) if constexpr (Apply == apply) applyReferenceOperator( stateRef, ctrls, states, targs, matrixRef); - if constexpr (Apply == multiply) multiplyReferenceOperator( stateRef, ctrls, states, targs, matrixRef); - if constexpr (Apply == postmultiply) postMultiplyReferenceOperator(stateRef, ctrls, states, targs, matrixRef); + if constexpr (Apply == leftapply) leftapplyReferenceOperator( stateRef, ctrls, states, targs, matrixRef); + if constexpr (Apply == rightapply) rightapplyReferenceOperator(stateRef, ctrls, states, targs, matrixRef); }; // report operation's input parameters if any subsequent test fails @@ -761,7 +761,7 @@ void testOperationCorrectness(auto operation, auto matrixRefGen) { // test API operation on all available deployment combinations (e.g. OMP, MPI, MPI+GPU, etc), // though the postMultiply*() functions do not accept statevectors - if constexpr (Apply != postmultiply) { + if constexpr (Apply != rightapply) { SECTION( LABEL_STATEVEC ) { TEST_ON_CACHED_QUREGS(statevecQuregs, statevecRef, testFunc); } @@ -1125,7 +1125,7 @@ void testOperationValidation(auto operation) { SECTION( "qureg type" ) { // only postMultiply*() functions discriminate Qureg - if (Apply != postmultiply) + if (Apply != rightapply) return; // use any statevector @@ -1866,27 +1866,27 @@ TEST_CASE( "applyNonUnitaryPauliGadget", TEST_CATEGORY_OPS ) { */ -TEST_CASE( "multiplySwap", TEST_CATEGORY_MULT ) { testOperation(multiplySwap, FixedMatrices::SWAP); } -TEST_CASE( "multiplyPauliX", TEST_CATEGORY_MULT ) { testOperation(multiplyPauliX, FixedMatrices::X); } -TEST_CASE( "multiplyPauliY", TEST_CATEGORY_MULT ) { testOperation(multiplyPauliY, FixedMatrices::Y); } -TEST_CASE( "multiplyPauliZ", TEST_CATEGORY_MULT ) { testOperation(multiplyPauliZ, FixedMatrices::Z); } -TEST_CASE( "multiplyPauliStr", TEST_CATEGORY_MULT ) { testOperation(multiplyPauliStr, nullptr); } -TEST_CASE( "multiplyPauliGadget", TEST_CATEGORY_MULT ) { testOperation(multiplyPauliGadget, nullptr); } -TEST_CASE( "multiplyCompMatr1", TEST_CATEGORY_MULT ) { testOperation(multiplyCompMatr1, nullptr); } -TEST_CASE( "multiplyCompMatr2", TEST_CATEGORY_MULT ) { testOperation(multiplyCompMatr2, nullptr); } -TEST_CASE( "multiplyDiagMatr1", TEST_CATEGORY_MULT ) { testOperation(multiplyDiagMatr1, nullptr); } -TEST_CASE( "multiplyDiagMatr2", TEST_CATEGORY_MULT ) { testOperation(multiplyDiagMatr2, nullptr); } - -TEST_CASE( "postMultiplySwap", TEST_CATEGORY_MULT ) { testOperation(postMultiplySwap, FixedMatrices::SWAP); } -TEST_CASE( "postMultiplyPauliX", TEST_CATEGORY_MULT ) { testOperation(postMultiplyPauliX, FixedMatrices::X); } -TEST_CASE( "postMultiplyPauliY", TEST_CATEGORY_MULT ) { testOperation(postMultiplyPauliY, FixedMatrices::Y); } -TEST_CASE( "postMultiplyPauliZ", TEST_CATEGORY_MULT ) { testOperation(postMultiplyPauliZ, FixedMatrices::Z); } -TEST_CASE( "postMultiplyPauliStr", TEST_CATEGORY_MULT ) { testOperation(postMultiplyPauliStr, nullptr); } -TEST_CASE( "postMultiplyPauliGadget", TEST_CATEGORY_MULT ) { testOperation(postMultiplyPauliGadget, nullptr); } -TEST_CASE( "postMultiplyCompMatr1", TEST_CATEGORY_MULT ) { testOperation(postMultiplyCompMatr1, nullptr); } -TEST_CASE( "postMultiplyCompMatr2", TEST_CATEGORY_MULT ) { testOperation(postMultiplyCompMatr2, nullptr); } -TEST_CASE( "postMultiplyDiagMatr1", TEST_CATEGORY_MULT ) { testOperation(postMultiplyDiagMatr1, nullptr); } -TEST_CASE( "postMultiplyDiagMatr2", TEST_CATEGORY_MULT ) { testOperation(postMultiplyDiagMatr2, nullptr); } +TEST_CASE( "leftapplySwap", TEST_CATEGORY_MULT ) { testOperation(leftapplySwap, FixedMatrices::SWAP); } +TEST_CASE( "leftapplyPauliX", TEST_CATEGORY_MULT ) { testOperation(leftapplyPauliX, FixedMatrices::X); } +TEST_CASE( "leftapplyPauliY", TEST_CATEGORY_MULT ) { testOperation(leftapplyPauliY, FixedMatrices::Y); } +TEST_CASE( "leftapplyPauliZ", TEST_CATEGORY_MULT ) { testOperation(leftapplyPauliZ, FixedMatrices::Z); } +TEST_CASE( "leftapplyPauliStr", TEST_CATEGORY_MULT ) { testOperation(leftapplyPauliStr, nullptr); } +TEST_CASE( "leftapplyPauliGadget", TEST_CATEGORY_MULT ) { testOperation(leftapplyPauliGadget, nullptr); } +TEST_CASE( "leftapplyCompMatr1", TEST_CATEGORY_MULT ) { testOperation(leftapplyCompMatr1, nullptr); } +TEST_CASE( "leftapplyCompMatr2", TEST_CATEGORY_MULT ) { testOperation(leftapplyCompMatr2, nullptr); } +TEST_CASE( "leftapplyDiagMatr1", TEST_CATEGORY_MULT ) { testOperation(leftapplyDiagMatr1, nullptr); } +TEST_CASE( "leftapplyDiagMatr2", TEST_CATEGORY_MULT ) { testOperation(leftapplyDiagMatr2, nullptr); } + +TEST_CASE( "rightapplySwap", TEST_CATEGORY_MULT ) { testOperation(rightapplySwap, FixedMatrices::SWAP); } +TEST_CASE( "rightapplyPauliX", TEST_CATEGORY_MULT ) { testOperation(rightapplyPauliX, FixedMatrices::X); } +TEST_CASE( "rightapplyPauliY", TEST_CATEGORY_MULT ) { testOperation(rightapplyPauliY, FixedMatrices::Y); } +TEST_CASE( "rightapplyPauliZ", TEST_CATEGORY_MULT ) { testOperation(rightapplyPauliZ, FixedMatrices::Z); } +TEST_CASE( "rightapplyPauliStr", TEST_CATEGORY_MULT ) { testOperation(rightapplyPauliStr, nullptr); } +TEST_CASE( "rightapplyPauliGadget", TEST_CATEGORY_MULT ) { testOperation(rightapplyPauliGadget, nullptr); } +TEST_CASE( "rightapplyCompMatr1", TEST_CATEGORY_MULT ) { testOperation(rightapplyCompMatr1, nullptr); } +TEST_CASE( "rightapplyCompMatr2", TEST_CATEGORY_MULT ) { testOperation(rightapplyCompMatr2, nullptr); } +TEST_CASE( "rightapplyDiagMatr1", TEST_CATEGORY_MULT ) { testOperation(rightapplyDiagMatr1, nullptr); } +TEST_CASE( "rightapplyDiagMatr2", TEST_CATEGORY_MULT ) { testOperation(rightapplyDiagMatr2, nullptr); } /* @@ -1896,55 +1896,55 @@ TEST_CASE( "postMultiplyDiagMatr2", TEST_CATEGORY_MULT ) { testOperation(multiplyCompMatr); - testOperation(func, nullptr); +TEST_CASE( "leftapplyCompMatr", TEST_CATEGORY_MULT ) { + auto func = static_cast(leftapplyCompMatr); + testOperation(func, nullptr); } -TEST_CASE( "multiplyDiagMatr", TEST_CATEGORY_MULT ) { - auto func = static_cast(multiplyDiagMatr); - testOperation(func, nullptr); +TEST_CASE( "leftapplyDiagMatr", TEST_CATEGORY_MULT ) { + auto func = static_cast(leftapplyDiagMatr); + testOperation(func, nullptr); } -TEST_CASE( "multiplyDiagMatrPower", TEST_CATEGORY_MULT ) { - auto func = static_cast(multiplyDiagMatrPower); - testOperation(func, nullptr); +TEST_CASE( "leftapplyDiagMatrPower", TEST_CATEGORY_MULT ) { + auto func = static_cast(leftapplyDiagMatrPower); + testOperation(func, nullptr); } -TEST_CASE( "multiplyMultiQubitNot", TEST_CATEGORY_MULT ) { - auto func = static_cast(multiplyMultiQubitNot); - testOperation(func, VariableSizeMatrices::X); +TEST_CASE( "leftapplyMultiQubitNot", TEST_CATEGORY_MULT ) { + auto func = static_cast(leftapplyMultiQubitNot); + testOperation(func, VariableSizeMatrices::X); } -TEST_CASE( "multiplyPhaseGadget", TEST_CATEGORY_MULT ) { - auto func = static_cast(multiplyPhaseGadget); - testOperation(func, VariableSizeParameterisedMatrices::Z); +TEST_CASE( "leftapplyPhaseGadget", TEST_CATEGORY_MULT ) { + auto func = static_cast(leftapplyPhaseGadget); + testOperation(func, VariableSizeParameterisedMatrices::Z); } -TEST_CASE( "postMultiplyCompMatr", TEST_CATEGORY_MULT ) { - auto func = static_cast(postMultiplyCompMatr); - testOperation(func, nullptr); +TEST_CASE( "rightapplyCompMatr", TEST_CATEGORY_MULT ) { + auto func = static_cast(rightapplyCompMatr); + testOperation(func, nullptr); } -TEST_CASE( "postMultiplyDiagMatr", TEST_CATEGORY_MULT ) { - auto func = static_cast(postMultiplyDiagMatr); - testOperation(func, nullptr); +TEST_CASE( "rightapplyDiagMatr", TEST_CATEGORY_MULT ) { + auto func = static_cast(rightapplyDiagMatr); + testOperation(func, nullptr); } -TEST_CASE( "postMultiplyDiagMatrPower", TEST_CATEGORY_MULT ) { - auto func = static_cast(postMultiplyDiagMatrPower); - testOperation(func, nullptr); +TEST_CASE( "rightapplyDiagMatrPower", TEST_CATEGORY_MULT ) { + auto func = static_cast(rightapplyDiagMatrPower); + testOperation(func, nullptr); } -TEST_CASE( "postMultiplyMultiQubitNot", TEST_CATEGORY_MULT ) { - auto func = static_cast(postMultiplyMultiQubitNot); - testOperation(func, VariableSizeMatrices::X); +TEST_CASE( "rightapplyMultiQubitNot", TEST_CATEGORY_MULT ) { + auto func = static_cast(rightapplyMultiQubitNot); + testOperation(func, VariableSizeMatrices::X); } -TEST_CASE( "postMultiplyPhaseGadget", TEST_CATEGORY_MULT ) { - auto func = static_cast(postMultiplyPhaseGadget); - testOperation(func, VariableSizeParameterisedMatrices::Z); +TEST_CASE( "rightapplyPhaseGadget", TEST_CATEGORY_MULT ) { + auto func = static_cast(rightapplyPhaseGadget); + testOperation(func, VariableSizeParameterisedMatrices::Z); } @@ -1953,7 +1953,7 @@ TEST_CASE( "postMultiplyPhaseGadget", TEST_CATEGORY_MULT ) { */ -TEST_CASE( "multiplyFullStateDiagMatr", TEST_CATEGORY_MULT LABEL_MIXED_DEPLOY_TAG ) { +TEST_CASE( "leftapplyFullStateDiagMatr", TEST_CATEGORY_MULT LABEL_MIXED_DEPLOY_TAG ) { PREPARE_TEST( numQubits, cachedSV, cachedDM, refSV, refDM ); @@ -1962,20 +1962,20 @@ TEST_CASE( "multiplyFullStateDiagMatr", TEST_CATEGORY_MULT LABEL_MIXED_DEPLOY_TA SECTION( LABEL_CORRECTNESS ) { qmatrix refMatr = getRandomDiagonalMatrix(getPow2(numQubits)); - auto apiFunc = multiplyFullStateDiagMatr; + auto apiFunc = leftapplyFullStateDiagMatr; GENERATE( range(0, getNumTestedMixedDeploymentRepetitions()) ); SECTION( LABEL_STATEVEC ) { - auto refFunc = [&] (qvector& state, qmatrix matr) { multiplyReferenceOperator(state, matr); }; + auto refFunc = [&] (qvector& state, qmatrix matr) { leftapplyReferenceOperator(state, matr); }; TEST_ON_CACHED_QUREG_AND_MATRIX( cachedSV, cachedMatrs, apiFunc, refSV, refMatr, refFunc); } SECTION( LABEL_DENSMATR ) { - auto refFunc = [&] (qmatrix& state, qmatrix matr) { multiplyReferenceOperator(state, matr); }; + auto refFunc = [&] (qmatrix& state, qmatrix matr) { leftapplyReferenceOperator(state, matr); }; TEST_ON_CACHED_QUREG_AND_MATRIX( cachedDM, cachedMatrs, apiFunc, refDM, refMatr, refFunc); } @@ -1985,7 +1985,7 @@ TEST_CASE( "multiplyFullStateDiagMatr", TEST_CATEGORY_MULT LABEL_MIXED_DEPLOY_TA } -TEST_CASE( "postMultiplyFullStateDiagMatr", TEST_CATEGORY_MULT LABEL_MIXED_DEPLOY_TAG ) { +TEST_CASE( "rightapplyFullStateDiagMatr", TEST_CATEGORY_MULT LABEL_MIXED_DEPLOY_TAG ) { PREPARE_TEST( numQubits, cachedSV, cachedDM, refSV, refDM ); @@ -1994,13 +1994,13 @@ TEST_CASE( "postMultiplyFullStateDiagMatr", TEST_CATEGORY_MULT LABEL_MIXED_DEPLO SECTION( LABEL_CORRECTNESS ) { qmatrix refMatr = getRandomDiagonalMatrix(getPow2(numQubits)); - auto apiFunc = postMultiplyFullStateDiagMatr; + auto apiFunc = rightapplyFullStateDiagMatr; GENERATE( range(0, getNumTestedMixedDeploymentRepetitions()) ); SECTION( LABEL_DENSMATR ) { - auto refFunc = [&] (qmatrix& state, qmatrix matr) { postMultiplyReferenceOperator(state, matr); }; + auto refFunc = [&] (qmatrix& state, qmatrix matr) { rightapplyReferenceOperator(state, matr); }; TEST_ON_CACHED_QUREG_AND_MATRIX( cachedDM, cachedMatrs, apiFunc, refDM, refMatr, refFunc); } @@ -2010,7 +2010,7 @@ TEST_CASE( "postMultiplyFullStateDiagMatr", TEST_CATEGORY_MULT LABEL_MIXED_DEPLO } -TEST_CASE( "multiplyFullStateDiagMatrPower", TEST_CATEGORY_MULT LABEL_MIXED_DEPLOY_TAG ) { +TEST_CASE( "leftapplyFullStateDiagMatrPower", TEST_CATEGORY_MULT LABEL_MIXED_DEPLOY_TAG ) { PREPARE_TEST( numQubits, cachedSV, cachedDM, refSV, refDM ); @@ -2022,7 +2022,7 @@ TEST_CASE( "multiplyFullStateDiagMatrPower", TEST_CATEGORY_MULT LABEL_MIXED_DEPL qcomp exponent = getRandomComplex(); auto apiFunc = [&](Qureg qureg, FullStateDiagMatr matr) { - return multiplyFullStateDiagMatrPower(qureg, matr, exponent); + return leftapplyFullStateDiagMatrPower(qureg, matr, exponent); }; CAPTURE( exponent ); @@ -2033,7 +2033,7 @@ TEST_CASE( "multiplyFullStateDiagMatrPower", TEST_CATEGORY_MULT LABEL_MIXED_DEPL auto refFunc = [&] (qvector& state, qmatrix matr) { matr = getPowerOfDiagonalMatrix(matr, exponent); - multiplyReferenceOperator(state, matr); + leftapplyReferenceOperator(state, matr); }; TEST_ON_CACHED_QUREG_AND_MATRIX( cachedSV, cachedMatrs, apiFunc, refSV, refMatr, refFunc); @@ -2043,7 +2043,7 @@ TEST_CASE( "multiplyFullStateDiagMatrPower", TEST_CATEGORY_MULT LABEL_MIXED_DEPL auto refFunc = [&] (qmatrix& state, qmatrix matr) { matr = getPowerOfDiagonalMatrix(matr, exponent); - multiplyReferenceOperator(state, matr); + leftapplyReferenceOperator(state, matr); }; TEST_ON_CACHED_QUREG_AND_MATRIX( cachedDM, cachedMatrs, apiFunc, refDM, refMatr, refFunc); @@ -2054,7 +2054,7 @@ TEST_CASE( "multiplyFullStateDiagMatrPower", TEST_CATEGORY_MULT LABEL_MIXED_DEPL } -TEST_CASE( "postMultiplyFullStateDiagMatrPower", TEST_CATEGORY_MULT LABEL_MIXED_DEPLOY_TAG ) { +TEST_CASE( "rightapplyFullStateDiagMatrPower", TEST_CATEGORY_MULT LABEL_MIXED_DEPLOY_TAG ) { PREPARE_TEST( numQubits, cachedSV, cachedDM, refSV, refDM ); @@ -2066,7 +2066,7 @@ TEST_CASE( "postMultiplyFullStateDiagMatrPower", TEST_CATEGORY_MULT LABEL_MIXED_ qcomp exponent = getRandomComplex(); auto apiFunc = [&](Qureg qureg, FullStateDiagMatr matr) { - return postMultiplyFullStateDiagMatrPower(qureg, matr, exponent); + return rightapplyFullStateDiagMatrPower(qureg, matr, exponent); }; CAPTURE( exponent ); @@ -2077,7 +2077,7 @@ TEST_CASE( "postMultiplyFullStateDiagMatrPower", TEST_CATEGORY_MULT LABEL_MIXED_ auto refFunc = [&] (qmatrix& state, qmatrix matr) { matr = getPowerOfDiagonalMatrix(matr, exponent); - postMultiplyReferenceOperator(state, matr); + rightapplyReferenceOperator(state, matr); }; TEST_ON_CACHED_QUREG_AND_MATRIX( cachedDM, cachedMatrs, apiFunc, refDM, refMatr, refFunc); @@ -2088,7 +2088,7 @@ TEST_CASE( "postMultiplyFullStateDiagMatrPower", TEST_CATEGORY_MULT LABEL_MIXED_ } -TEST_CASE( "multiplyQubitProjector", TEST_CATEGORY_OPS ) { +TEST_CASE( "leftapplyQubitProjector", TEST_CATEGORY_OPS ) { PREPARE_TEST( numQubits, statevecQuregs, densmatrQuregs, statevecRef, densmatrRef ); @@ -2101,8 +2101,8 @@ TEST_CASE( "multiplyQubitProjector", TEST_CATEGORY_OPS ) { qmatrix projector = getProjector(outcome); auto testFunc = [&](Qureg qureg, auto& ref) { - multiplyQubitProjector(qureg, target, outcome); - multiplyReferenceOperator(ref, {target}, projector); + leftapplyQubitProjector(qureg, target, outcome); + leftapplyReferenceOperator(ref, {target}, projector); }; CAPTURE( target, outcome ); @@ -2114,7 +2114,7 @@ TEST_CASE( "multiplyQubitProjector", TEST_CATEGORY_OPS ) { } -TEST_CASE( "postMultiplyQubitProjector", TEST_CATEGORY_OPS ) { +TEST_CASE( "rightapplyQubitProjector", TEST_CATEGORY_OPS ) { PREPARE_TEST( numQubits, statevecQuregs, densmatrQuregs, statevecRef, densmatrRef ); @@ -2127,8 +2127,8 @@ TEST_CASE( "postMultiplyQubitProjector", TEST_CATEGORY_OPS ) { qmatrix projector = getProjector(outcome); auto testFunc = [&](Qureg qureg, auto& ref) { - postMultiplyQubitProjector(qureg, target, outcome); - postMultiplyReferenceOperator(ref, {target}, projector); + rightapplyQubitProjector(qureg, target, outcome); + rightapplyReferenceOperator(ref, {target}, projector); }; CAPTURE( target, outcome ); @@ -2139,7 +2139,7 @@ TEST_CASE( "postMultiplyQubitProjector", TEST_CATEGORY_OPS ) { } -TEST_CASE( "multiplyMultiQubitProjector", TEST_CATEGORY_OPS ) { +TEST_CASE( "leftapplyMultiQubitProjector", TEST_CATEGORY_OPS ) { PREPARE_TEST( numQubits, statevecQuregs, densmatrQuregs, statevecRef, densmatrRef ); @@ -2152,8 +2152,8 @@ TEST_CASE( "multiplyMultiQubitProjector", TEST_CATEGORY_OPS ) { qmatrix projector = getProjector(targets, outcomes, numQubits); auto testFunc = [&](Qureg qureg, auto& ref) { - multiplyMultiQubitProjector(qureg, targets.data(), outcomes.data(), numTargs); - multiplyReferenceOperator(ref, projector); + leftapplyMultiQubitProjector(qureg, targets.data(), outcomes.data(), numTargs); + leftapplyReferenceOperator(ref, projector); }; CAPTURE( targets, outcomes ); @@ -2165,7 +2165,7 @@ TEST_CASE( "multiplyMultiQubitProjector", TEST_CATEGORY_OPS ) { } -TEST_CASE( "postMultiplyMultiQubitProjector", TEST_CATEGORY_OPS ) { +TEST_CASE( "rightapplyMultiQubitProjector", TEST_CATEGORY_OPS ) { PREPARE_TEST( numQubits, statevecQuregs, densmatrQuregs, statevecRef, densmatrRef ); @@ -2178,8 +2178,8 @@ TEST_CASE( "postMultiplyMultiQubitProjector", TEST_CATEGORY_OPS ) { qmatrix projector = getProjector(targets, outcomes, numQubits); auto testFunc = [&](Qureg qureg, auto& ref) { - postMultiplyMultiQubitProjector(qureg, targets.data(), outcomes.data(), numTargs); - postMultiplyReferenceOperator(ref, projector); + rightapplyMultiQubitProjector(qureg, targets.data(), outcomes.data(), numTargs); + rightapplyReferenceOperator(ref, projector); }; CAPTURE( targets, outcomes ); @@ -2190,7 +2190,7 @@ TEST_CASE( "postMultiplyMultiQubitProjector", TEST_CATEGORY_OPS ) { } -TEST_CASE( "multiplyPauliStrSum", TEST_CATEGORY_MULT LABEL_MIXED_DEPLOY_TAG ) { +TEST_CASE( "leftapplyPauliStrSum", TEST_CATEGORY_MULT LABEL_MIXED_DEPLOY_TAG ) { PREPARE_TEST( numQubits, statevecQuregs, densmatrQuregs, statevecRef, densmatrRef ); @@ -2205,7 +2205,7 @@ TEST_CASE( "multiplyPauliStrSum", TEST_CATEGORY_MULT LABEL_MIXED_DEPLOY_TAG ) { // must use (and ergo make) an identically-deployed workspace Qureg workspace = createCloneQureg(qureg); - multiplyPauliStrSum(qureg, sum, workspace); + leftapplyPauliStrSum(qureg, sum, workspace); destroyQureg(workspace); ref = getMatrix(sum, numQubits) * ref; @@ -2220,7 +2220,7 @@ TEST_CASE( "multiplyPauliStrSum", TEST_CATEGORY_MULT LABEL_MIXED_DEPLOY_TAG ) { } -TEST_CASE( "postMultiplyPauliStrSum", TEST_CATEGORY_MULT LABEL_MIXED_DEPLOY_TAG ) { +TEST_CASE( "rightapplyPauliStrSum", TEST_CATEGORY_MULT LABEL_MIXED_DEPLOY_TAG ) { PREPARE_TEST( numQubits, statevecQuregs, densmatrQuregs, statevecRef, densmatrRef ); @@ -2235,7 +2235,7 @@ TEST_CASE( "postMultiplyPauliStrSum", TEST_CATEGORY_MULT LABEL_MIXED_DEPLOY_TAG // must use (and ergo make) an identically-deployed workspace Qureg workspace = createCloneQureg(qureg); - postMultiplyPauliStrSum(qureg, sum, workspace); + rightapplyPauliStrSum(qureg, sum, workspace); destroyQureg(workspace); ref = ref * getMatrix(sum, numQubits); diff --git a/tests/utils/evolve.cpp b/tests/utils/evolve.cpp index 38b43cc9..6c8729ef 100644 --- a/tests/utils/evolve.cpp +++ b/tests/utils/evolve.cpp @@ -166,21 +166,21 @@ void applyReferenceOperator(qmatrix& state, qmatrix matrix) { state = matrix * state * getConjugateTranspose(matrix); } -void multiplyReferenceOperator(qvector& state, qmatrix matrix) { +void leftapplyReferenceOperator(qvector& state, qmatrix matrix) { DEMAND( state.size() == matrix.size() ); // for statevectors, multiplying is the same as applying applyReferenceOperator(state, matrix); } -void multiplyReferenceOperator(qmatrix& state, qmatrix matrix) { +void leftapplyReferenceOperator(qmatrix& state, qmatrix matrix) { DEMAND( state.size() == matrix.size() ); // we left-multiply upon density matrices only state = matrix * state; } -void postMultiplyReferenceOperator(qmatrix& state, qmatrix matrix) { +void rightapplyReferenceOperator(qmatrix& state, qmatrix matrix) { DEMAND( state.size() == matrix.size() ); // we right-multiply upon density matrices only @@ -202,21 +202,21 @@ void applyReferenceOperator(qmatrix& state, vector ctrls, vector ctrlS applyReferenceOperator(state, fullOp); } -void multiplyReferenceOperator(qvector& state, vector ctrls, vector ctrlStates, vector targs, qmatrix matrix) { +void leftapplyReferenceOperator(qvector& state, vector ctrls, vector ctrlStates, vector targs, qmatrix matrix) { applyReferenceOperator(state, ctrls, ctrlStates, targs, matrix); } -void multiplyReferenceOperator(qmatrix& state, vector ctrls, vector ctrlStates, vector targs, qmatrix matrix) { +void leftapplyReferenceOperator(qmatrix& state, vector ctrls, vector ctrlStates, vector targs, qmatrix matrix) { qmatrix left = getFullStateOperator(ctrls, ctrlStates, targs, matrix, getLog2(state.size())); - multiplyReferenceOperator(state, left); + leftapplyReferenceOperator(state, left); } -void postMultiplyReferenceOperator(qmatrix& state, vector ctrls, vector ctrlStates, vector targs, qmatrix matrix) { +void rightapplyReferenceOperator(qmatrix& state, vector ctrls, vector ctrlStates, vector targs, qmatrix matrix) { qmatrix left = getFullStateOperator(ctrls, ctrlStates, targs, matrix, getLog2(state.size())); - postMultiplyReferenceOperator(state, left); + rightapplyReferenceOperator(state, left); } @@ -230,17 +230,17 @@ void applyReferenceOperator(qmatrix& state, vector ctrls, vector targs applyReferenceOperator(state, ctrls, {}, targs, matrix); } -void multiplyReferenceOperator(qvector& state, vector ctrls, vector targs, qmatrix matrix) { +void leftapplyReferenceOperator(qvector& state, vector ctrls, vector targs, qmatrix matrix) { - multiplyReferenceOperator(state, ctrls, {}, targs, matrix); + leftapplyReferenceOperator(state, ctrls, {}, targs, matrix); } -void multiplyReferenceOperator(qmatrix& state, vector ctrls, vector targs, qmatrix matrix) { +void leftapplyReferenceOperator(qmatrix& state, vector ctrls, vector targs, qmatrix matrix) { - multiplyReferenceOperator(state, ctrls, {}, targs, matrix); + leftapplyReferenceOperator(state, ctrls, {}, targs, matrix); } -void postMultiplyReferenceOperator(qmatrix& state, vector ctrls, vector targs, qmatrix matrix) { +void rightapplyReferenceOperator(qmatrix& state, vector ctrls, vector targs, qmatrix matrix) { - postMultiplyReferenceOperator(state, ctrls, {}, targs, matrix); + rightapplyReferenceOperator(state, ctrls, {}, targs, matrix); } @@ -254,17 +254,17 @@ void applyReferenceOperator(qmatrix& state, vector targs, qmatrix matrix) { applyReferenceOperator(state, {}, {}, targs, matrix); } -void multiplyReferenceOperator(qvector& state, vector targs, qmatrix matrix) { +void leftapplyReferenceOperator(qvector& state, vector targs, qmatrix matrix) { - multiplyReferenceOperator(state, {}, {}, targs, matrix); + leftapplyReferenceOperator(state, {}, {}, targs, matrix); } -void multiplyReferenceOperator(qmatrix& state, vector targs, qmatrix matrix) { +void leftapplyReferenceOperator(qmatrix& state, vector targs, qmatrix matrix) { - multiplyReferenceOperator(state, {}, {}, targs, matrix); + leftapplyReferenceOperator(state, {}, {}, targs, matrix); } -void postMultiplyReferenceOperator(qmatrix& state, vector targs, qmatrix matrix) { +void rightapplyReferenceOperator(qmatrix& state, vector targs, qmatrix matrix) { - postMultiplyReferenceOperator(state, {}, {}, targs, matrix); + rightapplyReferenceOperator(state, {}, {}, targs, matrix); } diff --git a/tests/utils/evolve.hpp b/tests/utils/evolve.hpp index 87613016..75c0db4c 100644 --- a/tests/utils/evolve.hpp +++ b/tests/utils/evolve.hpp @@ -21,29 +21,29 @@ using std::vector; -void applyReferenceOperator( qvector& state, vector ctrls, vector states, vector targs, qmatrix matrix); -void applyReferenceOperator( qmatrix& state, vector ctrls, vector states, vector targs, qmatrix matrix); -void multiplyReferenceOperator( qvector& state, vector ctrls, vector states, vector targs, qmatrix matrix); -void multiplyReferenceOperator( qmatrix& state, vector ctrls, vector states, vector targs, qmatrix matrix); -void postMultiplyReferenceOperator(qmatrix& state, vector ctrls, vector states, vector targs, qmatrix matrix); - -void applyReferenceOperator( qvector& state, vector ctrls, vector targs, qmatrix matrix); -void applyReferenceOperator( qmatrix& state, vector ctrls, vector targs, qmatrix matrix); -void multiplyReferenceOperator( qvector& state, vector ctrls, vector targs, qmatrix matrix); -void multiplyReferenceOperator( qmatrix& state, vector ctrls, vector targs, qmatrix matrix); -void postMultiplyReferenceOperator(qmatrix& state, vector ctrls, vector targs, qmatrix matrix); - -void applyReferenceOperator( qvector& state, vector targs, qmatrix matrix); -void applyReferenceOperator( qmatrix& state, vector targs, qmatrix matrix); -void multiplyReferenceOperator( qvector& state, vector targs, qmatrix matrix); -void multiplyReferenceOperator( qmatrix& state, vector targs, qmatrix matrix); -void postMultiplyReferenceOperator(qmatrix& state, vector targs, qmatrix matrix); - -void applyReferenceOperator( qvector& state, qmatrix matrix); -void applyReferenceOperator( qmatrix& state, qmatrix matrix); -void multiplyReferenceOperator( qvector& state, qmatrix matrix); -void multiplyReferenceOperator( qmatrix& state, qmatrix matrix); -void postMultiplyReferenceOperator(qmatrix& state, qmatrix matrix); +void applyReferenceOperator (qvector& state, vector ctrls, vector states, vector targs, qmatrix matrix); +void applyReferenceOperator (qmatrix& state, vector ctrls, vector states, vector targs, qmatrix matrix); +void leftapplyReferenceOperator (qvector& state, vector ctrls, vector states, vector targs, qmatrix matrix); +void leftapplyReferenceOperator (qmatrix& state, vector ctrls, vector states, vector targs, qmatrix matrix); +void rightapplyReferenceOperator(qmatrix& state, vector ctrls, vector states, vector targs, qmatrix matrix); + +void applyReferenceOperator (qvector& state, vector ctrls, vector targs, qmatrix matrix); +void applyReferenceOperator (qmatrix& state, vector ctrls, vector targs, qmatrix matrix); +void leftapplyReferenceOperator (qvector& state, vector ctrls, vector targs, qmatrix matrix); +void leftapplyReferenceOperator (qmatrix& state, vector ctrls, vector targs, qmatrix matrix); +void rightapplyReferenceOperator(qmatrix& state, vector ctrls, vector targs, qmatrix matrix); + +void applyReferenceOperator (qvector& state, vector targs, qmatrix matrix); +void applyReferenceOperator (qmatrix& state, vector targs, qmatrix matrix); +void leftapplyReferenceOperator (qvector& state, vector targs, qmatrix matrix); +void leftapplyReferenceOperator (qmatrix& state, vector targs, qmatrix matrix); +void rightapplyReferenceOperator(qmatrix& state, vector targs, qmatrix matrix); + +void applyReferenceOperator (qvector& state, qmatrix matrix); +void applyReferenceOperator (qmatrix& state, qmatrix matrix); +void leftapplyReferenceOperator (qvector& state, qmatrix matrix); +void leftapplyReferenceOperator (qmatrix& state, qmatrix matrix); +void rightapplyReferenceOperator(qmatrix& state, qmatrix matrix); void applyReferenceOperator(qmatrix& state, vector targs, vector matrices);