The Quantum Exact Simulation Toolkit v4.1.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 applyMultiControlledSwap (Qureg qureg, int *controls, int numControls, int qubit1, int qubit2)
 
void applyMultiStateControlledSqrtSwap (Qureg qureg, int *controls, int *states, int numControls, int qubit1, int qubit2)
 
void applyMultiStateControlledSwap (Qureg qureg, int *controls, int *states, int numControls, 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 825 of file operations.cpp.

825 {
826 validate_quregFields(qureg, __func__);
827 validate_controlAndTwoTargets(qureg, control, target1, target2, __func__);
828
829 // harmlessly re-validates
830 applyMultiStateControlledSqrtSwap(qureg, &control, nullptr, 1, target1, target2);
831}
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 762 of file operations.cpp.

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

◆ applyMultiControlledSqrtSwap()

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

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

Referenced by applyMultiControlledSqrtSwap().

◆ applyMultiControlledSwap()

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

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

Referenced by applyMultiControlledSwap().

◆ applyMultiStateControlledSqrtSwap()

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

Definition at line 841 of file operations.cpp.

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

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

◆ applyMultiStateControlledSwap()

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

Definition at line 778 of file operations.cpp.

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

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

◆ applySqrtSwap()

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

Definition at line 817 of file operations.cpp.

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

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

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

Referenced by applyQuantumFourierTransform().

◆ multiplySwap()

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

Definition at line 747 of file operations.cpp.

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