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

Functions for applying the two-qubit SWAP and related gates. More...

Functions

void applyControlledSqrtSwap (Qureg qureg, int control, int qubit1, int qubit2)
 
void applyControlledSwap (Qureg qureg, int control, int qubit1, int qubit2)
 
void applyMultiControlledSqrtSwap (Qureg qureg, int *controls, int numControls, int qubit1, int qubit2)
 
void applyMultiControlledSqrtSwap (Qureg qureg, std::vector< int > controls, int qubit1, int qubit2)
 
void applyMultiControlledSwap (Qureg qureg, int *controls, int numControls, int qubit1, int qubit2)
 
void applyMultiControlledSwap (Qureg qureg, std::vector< int > controls, int qubit1, int qubit2)
 
void applyMultiStateControlledSqrtSwap (Qureg qureg, int *controls, int *states, int numControls, int qubit1, int qubit2)
 
void applyMultiStateControlledSqrtSwap (Qureg qureg, std::vector< int > controls, std::vector< int > states, int numControls, int qubit1, int qubit2)
 
void applyMultiStateControlledSwap (Qureg qureg, int *controls, int *states, int numControls, int qubit1, int qubit2)
 
void applyMultiStateControlledSwap (Qureg qureg, std::vector< int > controls, std::vector< int > states, int qubit1, int qubit2)
 
void applySqrtSwap (Qureg qureg, int qubit1, int qubit2)
 
void applySwap (Qureg qureg, int qubit1, int qubit2)
 
void multiplySwap (Qureg qureg, int qubit1, int qubit2)
 

Detailed Description

Functions for applying the two-qubit SWAP and related gates.

Function Documentation

◆ applyControlledSqrtSwap()

void applyControlledSqrtSwap ( Qureg qureg,
int control,
int qubit1,
int qubit2 )
Note
Documentation for this function or struct is under construction!

Definition at line 824 of file operations.cpp.

824 {
825 validate_quregFields(qureg, __func__);
826 validate_controlAndTwoTargets(qureg, control, target1, target2, __func__);
827
828 // harmlessly re-validates
829 applyMultiStateControlledSqrtSwap(qureg, &control, nullptr, 1, target1, target2);
830}
void applyMultiStateControlledSqrtSwap(Qureg qureg, int *controls, int *states, int numControls, int target1, int target2)

◆ applyControlledSwap()

void applyControlledSwap ( Qureg qureg,
int control,
int qubit1,
int qubit2 )
Note
Documentation for this function or struct is under construction!

Definition at line 761 of file operations.cpp.

761 {
762 validate_quregFields(qureg, __func__);
763 validate_controlAndTwoTargets(qureg, control, qubit1, qubit2, __func__);
764
765 // harmlessly re-valdiates
766 applyMultiStateControlledSwap(qureg, &control, nullptr, 1, qubit1, qubit2);
767}
void applyMultiStateControlledSwap(Qureg qureg, int *controls, int *states, int numControls, int qubit1, int qubit2)

◆ applyMultiControlledSqrtSwap() [1/2]

void applyMultiControlledSqrtSwap ( Qureg qureg,
int * controls,
int numControls,
int qubit1,
int qubit2 )
Note
Documentation for this function or struct is under construction!

Definition at line 832 of file operations.cpp.

832 {
833 validate_quregFields(qureg, __func__);
834 validate_controlsAndTwoTargets(qureg, controls, numControls, target1, target2, __func__);
835
836 // harmlessly re-validates
837 applyMultiStateControlledSqrtSwap(qureg, controls, nullptr, numControls, target1, target2);
838}

Referenced by applyMultiControlledSqrtSwap().

◆ applyMultiControlledSqrtSwap() [2/2]

void applyMultiControlledSqrtSwap ( Qureg qureg,
std::vector< int > controls,
int qubit1,
int qubit2 )
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 864 of file operations.cpp.

864 {
865
866 applyMultiControlledSqrtSwap(qureg, controls.data(), controls.size(), qubit1, qubit2);
867}
void applyMultiControlledSqrtSwap(Qureg qureg, int *controls, int numControls, int target1, int target2)

◆ applyMultiControlledSwap() [1/2]

void applyMultiControlledSwap ( Qureg qureg,
int * controls,
int numControls,
int qubit1,
int qubit2 )
Note
Documentation for this function or struct is under construction!

Definition at line 769 of file operations.cpp.

769 {
770 validate_quregFields(qureg, __func__);
771 validate_controlsAndTwoTargets(qureg, controls, numControls, qubit1, qubit2, __func__);
772
773 // harmlessly re-valdiates
774 applyMultiStateControlledSwap(qureg, controls, nullptr, numControls, qubit1, qubit2);
775}

Referenced by applyMultiControlledSwap().

◆ applyMultiControlledSwap() [2/2]

void applyMultiControlledSwap ( Qureg qureg,
std::vector< int > controls,
int qubit1,
int qubit2 )
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 797 of file operations.cpp.

797 {
798
799 applyMultiControlledSwap(qureg, controls.data(), controls.size(), qubit1, qubit2);
800}
void applyMultiControlledSwap(Qureg qureg, int *controls, int numControls, int qubit1, int qubit2)

◆ applyMultiStateControlledSqrtSwap() [1/2]

void applyMultiStateControlledSqrtSwap ( Qureg qureg,
int * controls,
int * states,
int numControls,
int qubit1,
int qubit2 )
Note
Documentation for this function or struct is under construction!

Definition at line 840 of file operations.cpp.

840 {
841 validate_quregFields(qureg, __func__);
842 validate_controlsAndTwoTargets(qureg, controls, numControls, target1, target2, __func__);
843 validate_controlStates(states, numControls, __func__); // permits states==nullptr
844
845 /// @todo
846 /// this function exacts sqrtSwap as a dense 2-qubit matrix,
847 /// where as bespoke communication and simulation strategy is
848 /// clearly possible which we have not supported because the gate
849 /// is somewhat esoteric. As such, we must validate mixed-amps fit
850
851 validate_mixedAmpsFitInNode(qureg, 2, __func__); // to throw SqrtSwap error, not generic CompMatr2 error
852
853 CompMatr2 matr = getCompMatr2({
854 {1, 0, 0, 0},
855 {0, .5+.5_i, .5-.5_i, 0},
856 {0, .5-.5_i, .5+.5_i, 0},
857 {0, 0, 0, 1}});
858
859 applyMultiStateControlledCompMatr2(qureg, controls, states, numControls, target1, target2, matr);
860}
static CompMatr2 getCompMatr2(qcomp **in)
Definition matrices.h:327
void applyMultiStateControlledCompMatr2(Qureg qureg, int *controls, int *states, int numControls, int target1, int target2, CompMatr2 matrix)

Referenced by applyControlledSqrtSwap(), applyMultiControlledSqrtSwap(), and applySqrtSwap().

◆ applyMultiStateControlledSqrtSwap() [2/2]

void applyMultiStateControlledSqrtSwap ( Qureg qureg,
std::vector< int > controls,
std::vector< int > states,
int numControls,
int qubit1,
int qubit2 )
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++.

◆ applyMultiStateControlledSwap() [1/2]

void applyMultiStateControlledSwap ( Qureg qureg,
int * controls,
int * states,
int numControls,
int qubit1,
int qubit2 )
Note
Documentation for this function or struct is under construction!

Definition at line 777 of file operations.cpp.

777 {
778 validate_quregFields(qureg, __func__);
779 validate_controlsAndTwoTargets(qureg, controls, numControls, qubit1, qubit2, __func__);
780 validate_controlStates(states, numControls, __func__); // permits states==nullptr
781
782 auto ctrlVec = util_getVector(controls, numControls);
783 auto stateVec = util_getVector(states, numControls); // empty if states==nullptr
784 localiser_statevec_anyCtrlSwap(qureg, ctrlVec, stateVec, qubit1, qubit2);
785
786 if (!qureg.isDensityMatrix)
787 return;
788
789 ctrlVec = util_getBraQubits(ctrlVec, qureg);
790 qubit1 = util_getBraQubit(qubit1, qureg);
791 qubit2 = util_getBraQubit(qubit2, qureg);
792 localiser_statevec_anyCtrlSwap(qureg, ctrlVec, stateVec, qubit1, qubit2);
793}

Referenced by applyControlledSwap(), applyMultiControlledSwap(), applyMultiStateControlledSwap(), and applySwap().

◆ applyMultiStateControlledSwap() [2/2]

void applyMultiStateControlledSwap ( Qureg qureg,
std::vector< int > controls,
std::vector< int > states,
int qubit1,
int qubit2 )
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 802 of file operations.cpp.

802 {
803 validate_controlsMatchStates(controls.size(), states.size(), __func__);
804
805 applyMultiStateControlledSwap(qureg, controls.data(), states.data(), controls.size(), qubit1, qubit2);
806}

◆ applySqrtSwap()

void applySqrtSwap ( Qureg qureg,
int qubit1,
int qubit2 )
Note
Documentation for this function or struct is under construction!

Definition at line 816 of file operations.cpp.

816 {
817 validate_quregFields(qureg, __func__);
818 validate_twoTargets(qureg,target1, target2, __func__);
819
820 // harmlessly re-validates
821 applyMultiStateControlledSqrtSwap(qureg, nullptr, nullptr, 0, target1, target2);
822}

◆ applySwap()

void applySwap ( Qureg qureg,
int qubit1,
int qubit2 )

Applies a SWAP gate between qubit1 and qubit2 of qureg.

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

Definition at line 753 of file operations.cpp.

753 {
754 validate_quregFields(qureg, __func__);
755 validate_twoTargets(qureg, qubit1, qubit2, __func__);
756
757 // harmlessly re-valdiates
758 applyMultiStateControlledSwap(qureg, nullptr, nullptr, 0, qubit1, qubit2);
759}

Referenced by applyQuantumFourierTransform().

◆ multiplySwap()

void multiplySwap ( Qureg qureg,
int qubit1,
int qubit2 )
Note
Documentation for this function or struct is under construction!

Definition at line 746 of file operations.cpp.

746 {
747 validate_quregFields(qureg, __func__);
748 validate_twoTargets(qureg, qubit1, qubit2, __func__);
749
750 localiser_statevec_anyCtrlSwap(qureg, {}, {}, qubit1, qubit2);
751}