The Quantum Exact Simulation Toolkit v4.0.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 1044 of file operations.cpp.

1044 {
1045 validate_quregFields(qureg, __func__);
1046 validate_controlAndPauliStrTargets(qureg, control, str, __func__);
1047
1048 // harmlessly re-validates
1049 applyMultiStateControlledPauliStr(qureg, &control, nullptr, 1, str);
1050}
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 1052 of file operations.cpp.

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

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 1060 of file operations.cpp.

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

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 1036 of file operations.cpp.

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

◆ multiplyPauliStr()

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

Definition at line 1029 of file operations.cpp.

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

Referenced by multiplyMultiQubitNot().