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

Functions for applying many-qubit rotations around Pauli Z axis, and phase flips and shifts. More...

Functions

void applyControlledPhaseGadget (Qureg qureg, int control, int *targets, int numTargets, qreal angle)
 
void applyControlledPhaseGadget (Qureg qureg, int control, std::vector< int > targets, qreal angle)
 
void applyMultiControlledPhaseGadget (Qureg qureg, int *controls, int numControls, int *targets, int numTargets, qreal angle)
 
void applyMultiControlledPhaseGadget (Qureg qureg, std::vector< int > controls, std::vector< int > targets, qreal angle)
 
void applyMultiQubitPhaseFlip (Qureg qureg, int *targets, int numTargets)
 
void applyMultiQubitPhaseFlip (Qureg qureg, std::vector< int > targets)
 
void applyMultiQubitPhaseShift (Qureg qureg, int *targets, int numTargets, qreal angle)
 
void applyMultiQubitPhaseShift (Qureg qureg, std::vector< int > targets, qreal angle)
 
void applyMultiStateControlledPhaseGadget (Qureg qureg, int *controls, int *states, int numControls, int *targets, int numTargets, qreal angle)
 
void applyMultiStateControlledPhaseGadget (Qureg qureg, std::vector< int > controls, std::vector< int > states, std::vector< int > targets, qreal angle)
 
void applyPhaseFlip (Qureg qureg, int target)
 
void applyPhaseGadget (Qureg qureg, int *targets, int numTargets, qreal angle)
 
void applyPhaseGadget (Qureg qureg, std::vector< int > targets, qreal angle)
 
void applyPhaseShift (Qureg qureg, int target, qreal angle)
 
void applyTwoQubitPhaseFlip (Qureg qureg, int target1, int target2)
 
void applyTwoQubitPhaseShift (Qureg qureg, int target1, int target2, qreal angle)
 
void multiplyPhaseGadget (Qureg qureg, int *targets, int numTargets, qreal angle)
 
void multiplyPhaseGadget (Qureg qureg, std::vector< int > targets, qreal angle)
 

Detailed Description

Functions for applying many-qubit rotations around Pauli Z axis, and phase flips and shifts.

Function Documentation

◆ applyControlledPhaseGadget() [1/2]

void applyControlledPhaseGadget ( Qureg qureg,
int control,
int * targets,
int numTargets,
qreal angle )
Note
Documentation for this function or struct is under construction!

Definition at line 1500 of file operations.cpp.

1500 {
1501 validate_quregFields(qureg, __func__);
1502 validate_controlAndTargets(qureg, control, targets, numTargets, __func__);
1503
1504 // harmlessly re-validates
1505 applyMultiStateControlledPhaseGadget(qureg, &control, nullptr, 1, targets, numTargets, angle);
1506}
void applyMultiStateControlledPhaseGadget(Qureg qureg, int *controls, int *states, int numControls, int *targets, int numTargets, qreal angle)

Referenced by applyControlledPhaseGadget().

◆ applyControlledPhaseGadget() [2/2]

void applyControlledPhaseGadget ( Qureg qureg,
int control,
std::vector< int > targets,
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 1548 of file operations.cpp.

1548 {
1549
1550 applyControlledPhaseGadget(qureg, control, targets.data(), targets.size(), angle);
1551}
void applyControlledPhaseGadget(Qureg qureg, int control, int *targets, int numTargets, qreal angle)

◆ applyMultiControlledPhaseGadget() [1/2]

void applyMultiControlledPhaseGadget ( Qureg qureg,
int * controls,
int numControls,
int * targets,
int numTargets,
qreal angle )
Note
Documentation for this function or struct is under construction!

Definition at line 1508 of file operations.cpp.

1508 {
1509 validate_quregFields(qureg, __func__);
1510 validate_controlsAndTargets(qureg, controls, numControls, targets, numTargets, __func__);
1511
1512 // harmlessly re-validates
1513 applyMultiStateControlledPhaseGadget(qureg, controls, nullptr, numControls, targets, numTargets, angle);
1514}

Referenced by applyMultiControlledPhaseGadget().

◆ applyMultiControlledPhaseGadget() [2/2]

void applyMultiControlledPhaseGadget ( Qureg qureg,
std::vector< int > controls,
std::vector< int > targets,
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 1553 of file operations.cpp.

1553 {
1554
1555 applyMultiControlledPhaseGadget(qureg, controls.data(), controls.size(), targets.data(), targets.size(), angle);
1556}
void applyMultiControlledPhaseGadget(Qureg qureg, int *controls, int numControls, int *targets, int numTargets, qreal angle)

◆ applyMultiQubitPhaseFlip() [1/2]

void applyMultiQubitPhaseFlip ( Qureg qureg,
int * targets,
int numTargets )
Note
Documentation for this function or struct is under construction!

Definition at line 1632 of file operations.cpp.

1632 {
1633 validate_quregFields(qureg, __func__);
1634 validate_targets(qureg, targets, numTargets, __func__);
1635
1636 // treat as a (numTargets-1)-controlled 1-target Pauli Z
1637 DiagMatr1 matr = getDiagMatr1({1, -1});
1638
1639 // harmlessly re-validates
1640 applyMultiStateControlledDiagMatr1(qureg, &targets[1], nullptr, numTargets-1, targets[0], matr);
1641}
static DiagMatr1 getDiagMatr1(qcomp *in)
Definition matrices.h:345
void applyMultiStateControlledDiagMatr1(Qureg qureg, int *controls, int *states, int numControls, int target, DiagMatr1 matrix)

Referenced by applyMultiQubitPhaseFlip(), applyPhaseFlip(), and applyTwoQubitPhaseFlip().

◆ applyMultiQubitPhaseFlip() [2/2]

void applyMultiQubitPhaseFlip ( Qureg qureg,
std::vector< int > targets )
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 1645 of file operations.cpp.

1645 {
1646
1647 applyMultiQubitPhaseFlip(qureg, targets.data(), targets.size());
1648}
void applyMultiQubitPhaseFlip(Qureg qureg, int *targets, int numTargets)

◆ applyMultiQubitPhaseShift() [1/2]

void applyMultiQubitPhaseShift ( Qureg qureg,
int * targets,
int numTargets,
qreal angle )
Note
Documentation for this function or struct is under construction!

Definition at line 1589 of file operations.cpp.

1589 {
1590 validate_quregFields(qureg, __func__);
1591 validate_targets(qureg, targets, numTargets, __func__);
1592
1593 // treat as a (numTargets-1)-controlled 1-target diagonal matrix
1594 DiagMatr1 matr = getDiagMatr1({1, std::exp(1_i * angle)});
1595
1596 // harmlessly re-validates
1597 applyMultiStateControlledDiagMatr1(qureg, &targets[1], nullptr, numTargets-1, targets[0], matr);
1598}

Referenced by applyMultiQubitPhaseShift(), applyPhaseShift(), and applyTwoQubitPhaseShift().

◆ applyMultiQubitPhaseShift() [2/2]

void applyMultiQubitPhaseShift ( Qureg qureg,
std::vector< int > targets,
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 1602 of file operations.cpp.

1602 {
1603
1604 applyMultiQubitPhaseShift(qureg, targets.data(), targets.size(), angle);
1605}
void applyMultiQubitPhaseShift(Qureg qureg, int *targets, int numTargets, qreal angle)

◆ applyMultiStateControlledPhaseGadget() [1/2]

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

Definition at line 1516 of file operations.cpp.

1516 {
1517 validate_quregFields(qureg, __func__);
1518 validate_controlsAndTargets(qureg, controls, numControls, targets, numTargets, __func__);
1519 validate_controlStates(states, numControls, __func__);
1520
1521 qreal phase = util_getPhaseFromGateAngle(angle);
1522 auto ctrlVec = util_getVector(controls, numControls);
1523 auto targVec = util_getVector(targets, numTargets);
1524 auto stateVec = util_getVector(states, numControls); // empty if states==nullptr
1525 localiser_statevec_anyCtrlPhaseGadget(qureg, ctrlVec, stateVec, targVec, phase);
1526
1527 if (!qureg.isDensityMatrix)
1528 return;
1529
1530 phase *= -1;
1531 ctrlVec = util_getBraQubits(ctrlVec, qureg);
1532 targVec = util_getBraQubits(targVec, qureg);
1533 localiser_statevec_anyCtrlPhaseGadget(qureg, ctrlVec, stateVec, targVec, phase);
1534}

Referenced by applyControlledPhaseGadget(), applyMultiControlledPhaseGadget(), applyMultiStateControlledPhaseGadget(), and applyPhaseGadget().

◆ applyMultiStateControlledPhaseGadget() [2/2]

void applyMultiStateControlledPhaseGadget ( Qureg qureg,
std::vector< int > controls,
std::vector< int > states,
std::vector< int > targets,
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 1558 of file operations.cpp.

1558 {
1559 validate_controlsMatchStates(controls.size(), states.size(), __func__);
1560
1561 applyMultiStateControlledPhaseGadget(qureg, controls.data(), states.data(), controls.size(), targets.data(), targets.size(), angle);
1562}

◆ applyPhaseFlip()

void applyPhaseFlip ( Qureg qureg,
int target )
Note
Documentation for this function or struct is under construction!

Definition at line 1615 of file operations.cpp.

1615 {
1616 validate_quregFields(qureg, __func__);
1617 validate_target(qureg, target, __func__);
1618
1619 // harmlessly re-validates
1620 applyMultiQubitPhaseFlip(qureg, &target, 1);
1621}

◆ applyPhaseGadget() [1/2]

void applyPhaseGadget ( Qureg qureg,
int * targets,
int numTargets,
qreal angle )
Note
Documentation for this function or struct is under construction!

Definition at line 1492 of file operations.cpp.

1492 {
1493 validate_quregFields(qureg, __func__);
1494 validate_targets(qureg, targets, numTargets, __func__);
1495
1496 // harmlessly re-validates
1497 applyMultiStateControlledPhaseGadget(qureg, nullptr, nullptr, 0, targets, numTargets, angle);
1498}

Referenced by applyPhaseGadget().

◆ applyPhaseGadget() [2/2]

void applyPhaseGadget ( Qureg qureg,
std::vector< int > targets,
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 1543 of file operations.cpp.

1543 {
1544
1545 applyPhaseGadget(qureg, targets.data(), targets.size(), angle);
1546}
void applyPhaseGadget(Qureg qureg, int *targets, int numTargets, qreal angle)

◆ applyPhaseShift()

void applyPhaseShift ( Qureg qureg,
int target,
qreal angle )
Note
Documentation for this function or struct is under construction!

Definition at line 1572 of file operations.cpp.

1572 {
1573 validate_quregFields(qureg, __func__);
1574 validate_target(qureg, target, __func__);
1575
1576 // harmlessly re-validates
1577 applyMultiQubitPhaseShift(qureg, &target, 1, angle);
1578}

◆ applyTwoQubitPhaseFlip()

void applyTwoQubitPhaseFlip ( Qureg qureg,
int target1,
int target2 )

Applies a two-qubit phase flip upon qubit1 and qubit2 of qureg.

Diagram
Note
Documentation for this function or struct is under construction!

Definition at line 1623 of file operations.cpp.

1623 {
1624 validate_quregFields(qureg, __func__);
1625 validate_twoTargets(qureg, target1, target2, __func__);
1626
1627 // harmlessly re-validates
1628 int targets[] = {target1, target2};
1629 applyMultiQubitPhaseFlip(qureg, targets, 2);
1630}

◆ applyTwoQubitPhaseShift()

void applyTwoQubitPhaseShift ( Qureg qureg,
int target1,
int target2,
qreal angle )

Applies a two-qubit phase flip upon qubit1 and qubit2 of qureg.

Diagram
Note
Documentation for this function or struct is under construction!

Definition at line 1580 of file operations.cpp.

1580 {
1581 validate_quregFields(qureg, __func__);
1582 validate_twoTargets(qureg, target1, target2, __func__);
1583
1584 // harmlessly re-validates
1585 int targets[] = {target1, target2};
1586 applyMultiQubitPhaseShift(qureg, targets, 2, angle);
1587}

Referenced by applyQuantumFourierTransform().

◆ multiplyPhaseGadget() [1/2]

void multiplyPhaseGadget ( Qureg qureg,
int * targets,
int numTargets,
qreal angle )
Note
Documentation for this function or struct is under construction!

Definition at line 1484 of file operations.cpp.

1484 {
1485 validate_quregFields(qureg, __func__);
1486 validate_targets(qureg, targets, numTargets, __func__);
1487
1488 qreal phase = util_getPhaseFromGateAngle(angle);
1489 localiser_statevec_anyCtrlPhaseGadget(qureg, {}, {}, util_getVector(targets,numTargets), phase);
1490}

Referenced by multiplyPhaseGadget().

◆ multiplyPhaseGadget() [2/2]

void multiplyPhaseGadget ( Qureg qureg,
std::vector< int > targets,
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 1538 of file operations.cpp.

1538 {
1539
1540 multiplyPhaseGadget(qureg, targets.data(), targets.size(), angle);
1541}
void multiplyPhaseGadget(Qureg qureg, int *targets, int numTargets, qreal angle)