The Quantum Exact Simulation Toolkit v4.0.0
Loading...
Searching...
No Matches
Pauli gadgets

Functions for applying many-qubit rotations around arbitrary PauliStr. More...

Functions

void applyControlledPauliGadget (Qureg qureg, int control, PauliStr str, qreal angle)
 
void applyMultiControlledPauliGadget (Qureg qureg, int *controls, int numControls, PauliStr str, qreal angle)
 
void applyMultiControlledPauliGadget (Qureg qureg, std::vector< int > controls, PauliStr str, qreal angle)
 
void applyMultiStateControlledPauliGadget (Qureg qureg, int *controls, int *states, int numControls, PauliStr str, qreal angle)
 
void applyMultiStateControlledPauliGadget (Qureg qureg, std::vector< int > controls, std::vector< int > states, PauliStr str, qreal angle)
 
void applyPauliGadget (Qureg qureg, PauliStr str, qreal angle)
 
void multiplyPauliGadget (Qureg qureg, PauliStr str, qreal angle)
 

Detailed Description

Functions for applying many-qubit rotations around arbitrary PauliStr.

Function Documentation

◆ applyControlledPauliGadget()

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

Definition at line 1423 of file operations.cpp.

1423 {
1424 validate_quregFields(qureg, __func__);
1425 validate_controlAndPauliStrTargets(qureg, control, str, __func__);
1426
1427 applyMultiStateControlledPauliGadget(qureg, &control, nullptr, 1, str, angle);
1428}
void applyMultiStateControlledPauliGadget(Qureg qureg, int *controls, int *states, int numControls, PauliStr str, qreal angle)

◆ applyMultiControlledPauliGadget() [1/2]

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

Definition at line 1430 of file operations.cpp.

1430 {
1431 validate_quregFields(qureg, __func__);
1432 validate_controlsAndPauliStrTargets(qureg, controls, numControls, str, __func__);
1433
1434 applyMultiStateControlledPauliGadget(qureg, controls, nullptr, numControls, str, angle);
1435}

Referenced by applyMultiControlledPauliGadget().

◆ applyMultiControlledPauliGadget() [2/2]

void applyMultiControlledPauliGadget ( Qureg qureg,
std::vector< int > controls,
PauliStr str,
qreal angle )
Warning
This function has not yet been unit tested and may contain bugs. Please use with caution!
Attention
This function's input validation has not yet been unit tested, so erroneous usage may produce unexpected output. Please use with caution!
Note
Documentation for this function or struct is under construction!
Remarks
This function is only available in C++.

Definition at line 1465 of file operations.cpp.

1465 {
1466
1467 applyMultiControlledPauliGadget(qureg, controls.data(), controls.size(), str, angle);
1468}
void applyMultiControlledPauliGadget(Qureg qureg, int *controls, int numControls, PauliStr str, qreal angle)

◆ applyMultiStateControlledPauliGadget() [1/2]

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

Definition at line 1437 of file operations.cpp.

1437 {
1438 validate_quregFields(qureg, __func__);
1439 validate_controlsAndPauliStrTargets(qureg, controls, numControls, str, __func__);
1440 validate_controlStates(states, numControls, __func__); // permits states==nullptr
1441
1442 /// @todo
1443 /// CRUCIAL NOTE:
1444 /// exp(theta I..I) might be algorithmically ok (I'm not sure), but it WILL NOT
1445 /// effect a global phase change of theta (I think). Should validate against this
1446 /// sitaution just in case, or make the doc extremely explicit
1447
1448 qreal phase = util_getPhaseFromGateAngle(angle);
1449 auto ctrlVec = util_getVector(controls, numControls);
1450 auto stateVec = util_getVector(states, numControls); // empty if states==nullptr
1451 localiser_statevec_anyCtrlPauliGadget(qureg, ctrlVec, stateVec, str, phase);
1452
1453 if (!qureg.isDensityMatrix)
1454 return;
1455
1456 // conj(e^iXZ) = e^(-iXZ), but conj(Y)=-Y, so odd-Y undoes phase negation
1457 phase *= paulis_hasOddNumY(str) ? 1 : -1;
1458 ctrlVec = util_getBraQubits(ctrlVec, qureg);
1459 str = paulis_getShiftedPauliStr(str, qureg.numQubits);
1460 localiser_statevec_anyCtrlPauliGadget(qureg, ctrlVec, stateVec, str, phase);
1461}

Referenced by applyControlledPauliGadget(), applyMultiControlledPauliGadget(), applyMultiStateControlledPauliGadget(), applyMultiStateControlledRotateX(), applyMultiStateControlledRotateY(), applyMultiStateControlledRotateZ(), and applyPauliGadget().

◆ applyMultiStateControlledPauliGadget() [2/2]

void applyMultiStateControlledPauliGadget ( Qureg qureg,
std::vector< int > controls,
std::vector< int > states,
PauliStr str,
qreal angle )
Warning
This function has not yet been unit tested and may contain bugs. Please use with caution!
Attention
This function's input validation has not yet been unit tested, so erroneous usage may produce unexpected output. Please use with caution!
Note
Documentation for this function or struct is under construction!
Remarks
This function is only available in C++.

Definition at line 1470 of file operations.cpp.

1470 {
1471 validate_controlsMatchStates(controls.size(), states.size(), __func__);
1472
1473 applyMultiStateControlledPauliGadget(qureg, controls.data(), states.data(), controls.size(), str, angle);
1474}

◆ applyPauliGadget()

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

Definition at line 1416 of file operations.cpp.

1416 {
1417 validate_quregFields(qureg, __func__);
1418 validate_pauliStrTargets(qureg, str, __func__);
1419
1420 applyMultiStateControlledPauliGadget(qureg, nullptr, nullptr, 0, str, angle);
1421}

◆ multiplyPauliGadget()

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

Definition at line 1408 of file operations.cpp.

1408 {
1409 validate_quregFields(qureg, __func__);
1410 validate_pauliStrTargets(qureg, str, __func__);
1411
1412 qreal phase = util_getPhaseFromGateAngle(angle);
1413 localiser_statevec_anyCtrlPauliGadget(qureg, {}, {}, str, phase);
1414}