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

Functions for applying a tensor product of Pauli operators, as a PauliStr. More...

Functions

void applyControlledPauliStr (Qureg qureg, int control, PauliStr str)
 
void applyMultiControlledPauliStr (Qureg qureg, int *controls, int numControls, PauliStr str)
 
void applyMultiStateControlledPauliStr (Qureg qureg, int *controls, int *states, int numControls, PauliStr str)
 
void applyPauliStr (Qureg qureg, PauliStr str)
 
void multiplyPauliStr (Qureg qureg, PauliStr str)
 

Detailed Description

Functions for applying a tensor product of Pauli operators, as a PauliStr.

Function Documentation

◆ applyControlledPauliStr()

void applyControlledPauliStr ( Qureg qureg,
int control,
PauliStr str )
Note
Documentation for this function or struct is under construction!

Definition at line 1045 of file operations.cpp.

1045 {
1046 validate_quregFields(qureg, __func__);
1047 validate_controlAndPauliStrTargets(qureg, control, str, __func__);
1048
1049 // harmlessly re-validates
1050 applyMultiStateControlledPauliStr(qureg, &control, nullptr, 1, str);
1051}
void applyMultiStateControlledPauliStr(Qureg qureg, int *controls, int *states, int numControls, PauliStr str)

◆ applyMultiControlledPauliStr()

void applyMultiControlledPauliStr ( Qureg qureg,
int * controls,
int numControls,
PauliStr str )
Note
Documentation for this function or struct is under construction!

Definition at line 1053 of file operations.cpp.

1053 {
1054 validate_quregFields(qureg, __func__);
1055 validate_controlsAndPauliStrTargets(qureg, controls, numControls, str, __func__);
1056
1057 // harmlessly re-validates
1058 applyMultiStateControlledPauliStr(qureg, controls, nullptr, numControls, str);
1059}

Referenced by applyMultiControlledPauliStr().

◆ applyMultiStateControlledPauliStr()

void applyMultiStateControlledPauliStr ( Qureg qureg,
int * controls,
int * states,
int numControls,
PauliStr str )
Note
Documentation for this function or struct is under construction!
See also
applyMultiStateControlledCompMatr1()

Definition at line 1061 of file operations.cpp.

1061 {
1062 validate_quregFields(qureg, __func__);
1063 validate_controlsAndPauliStrTargets(qureg, controls, numControls, str, __func__);
1064 validate_controlStates(states, numControls, __func__); // permits states==nullptr
1065
1066 qcomp factor = 1;
1067 auto ctrlVec = util_getVector(controls, numControls);
1068 auto stateVec = util_getVector(states, numControls); // empty if states==nullptr
1069
1070 // when there are no control qubits, we can merge the density matrix's
1071 // operation sinto a single tensor, i.e. +- (shift(str) (x) str), to
1072 // avoid superfluous re-enumeration of the state
1073 if (qureg.isDensityMatrix && numControls == 0) {
1074 factor = paulis_hasOddNumY(str)? -1 : 1;
1075 ctrlVec = util_getConcatenated(ctrlVec, util_getBraQubits(ctrlVec, qureg));
1076 stateVec = util_getConcatenated(stateVec, stateVec);
1077 str = paulis_getKetAndBraPauliStr(str, qureg);
1078 }
1079
1080 localiser_statevec_anyCtrlPauliTensor(qureg, ctrlVec, stateVec, str, factor);
1081
1082 // but density-matrix control qubits require two distinct operations
1083 if (qureg.isDensityMatrix && numControls > 0) {
1084 factor = paulis_hasOddNumY(str)? -1 : 1;
1085 ctrlVec = util_getBraQubits(ctrlVec, qureg);
1086 str = paulis_getShiftedPauliStr(str, qureg.numQubits);
1087 localiser_statevec_anyCtrlPauliTensor(qureg, ctrlVec, stateVec, str, factor);
1088 }
1089}

Referenced by applyControlledPauliStr(), applyMultiControlledPauliStr(), applyMultiStateControlledMultiQubitNot(), applyMultiStateControlledPauliStr(), applyMultiStateControlledPauliX(), applyMultiStateControlledPauliY(), and applyPauliStr().

◆ applyPauliStr()

void applyPauliStr ( Qureg qureg,
PauliStr str )
Note
Documentation for this function or struct is under construction!

Definition at line 1037 of file operations.cpp.

1037 {
1038 validate_quregFields(qureg, __func__);
1039 validate_pauliStrTargets(qureg, str, __func__);
1040
1041 // harmlessly re-validates
1042 applyMultiStateControlledPauliStr(qureg, nullptr, nullptr, 0, str);
1043}

◆ multiplyPauliStr()

void multiplyPauliStr ( Qureg qureg,
PauliStr str )
Note
Documentation for this function or struct is under construction!
See also
multiplyCompMatr1()

Definition at line 1030 of file operations.cpp.

1030 {
1031 validate_quregFields(qureg, __func__);
1032 validate_pauliStrTargets(qureg, str, __func__);
1033
1034 localiser_statevec_anyCtrlPauliTensor(qureg, {}, {}, str);
1035}

Referenced by multiplyMultiQubitNot().