The Quantum Exact Simulation Toolkit v4.2.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)
 

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

947 {
948 validate_quregFields(qureg, __func__);
949 validate_controlAndPauliStrTargets(qureg, control, str, __func__);
950
951 // harmlessly re-validates
952 applyMultiStateControlledPauliStr(qureg, &control, nullptr, 1, str);
953}
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 955 of file operations.cpp.

955 {
956 validate_quregFields(qureg, __func__);
957 validate_controlsAndPauliStrTargets(qureg, controls, numControls, str, __func__);
958
959 // harmlessly re-validates
960 applyMultiStateControlledPauliStr(qureg, controls, nullptr, numControls, str);
961}

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

963 {
964 validate_quregFields(qureg, __func__);
965 validate_controlsAndPauliStrTargets(qureg, controls, numControls, str, __func__);
966 validate_controlStates(states, numControls, __func__); // permits states==nullptr
967
968 qcomp factor = 1;
969 auto ctrlVec = util_getVector(controls, numControls);
970 auto stateVec = util_getVector(states, numControls); // empty if states==nullptr
971
972 // when there are no control qubits, we can merge the density matrix's
973 // operation sinto a single tensor, i.e. +- (shift(str) (x) str), to
974 // avoid superfluous re-enumeration of the state
975 if (qureg.isDensityMatrix && numControls == 0) {
976 factor = paulis_getSignOfPauliStrConj(str);
977 ctrlVec = util_getConcatenated(ctrlVec, util_getBraQubits(ctrlVec, qureg));
978 stateVec = util_getConcatenated(stateVec, stateVec);
979 str = paulis_getKetAndBraPauliStr(str, qureg);
980 }
981
982 localiser_statevec_anyCtrlPauliTensor(qureg, ctrlVec, stateVec, str, factor);
983
984 // but density-matrix control qubits require two distinct operations
985 if (qureg.isDensityMatrix && numControls > 0) {
986 factor = paulis_getSignOfPauliStrConj(str);
987 ctrlVec = util_getBraQubits(ctrlVec, qureg);
988 str = paulis_getShiftedPauliStr(str, qureg.numQubits);
989 localiser_statevec_anyCtrlPauliTensor(qureg, ctrlVec, stateVec, str, factor);
990 }
991}

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

◆ applyPauliStr()

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

Definition at line 939 of file operations.cpp.

939 {
940 validate_quregFields(qureg, __func__);
941 validate_pauliStrTargets(qureg, str, __func__);
942
943 // harmlessly re-validates
944 applyMultiStateControlledPauliStr(qureg, nullptr, nullptr, 0, str);
945}