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

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

723 {
724 validate_quregFields(qureg, __func__);
725 validate_controlAndTwoTargets(qureg, control, target1, target2, __func__);
726
727 // harmlessly re-validates
728 applyMultiStateControlledSqrtSwap(qureg, &control, nullptr, 1, target1, target2);
729}
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 660 of file operations.cpp.

660 {
661 validate_quregFields(qureg, __func__);
662 validate_controlAndTwoTargets(qureg, control, qubit1, qubit2, __func__);
663
664 // harmlessly re-valdiates
665 applyMultiStateControlledSwap(qureg, &control, nullptr, 1, qubit1, qubit2);
666}
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 731 of file operations.cpp.

731 {
732 validate_quregFields(qureg, __func__);
733 validate_controlsAndTwoTargets(qureg, controls, numControls, target1, target2, __func__);
734
735 // harmlessly re-validates
736 applyMultiStateControlledSqrtSwap(qureg, controls, nullptr, numControls, target1, target2);
737}

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

668 {
669 validate_quregFields(qureg, __func__);
670 validate_controlsAndTwoTargets(qureg, controls, numControls, qubit1, qubit2, __func__);
671
672 // harmlessly re-valdiates
673 applyMultiStateControlledSwap(qureg, controls, nullptr, numControls, qubit1, qubit2);
674}

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

739 {
740 validate_quregFields(qureg, __func__);
741 validate_controlsAndTwoTargets(qureg, controls, numControls, target1, target2, __func__);
742 validate_controlStates(states, numControls, __func__); // permits states==nullptr
743
744 /// @todo
745 /// this function exacts sqrtSwap as a dense 2-qubit matrix,
746 /// where as bespoke communication and simulation strategy is
747 /// clearly possible which we have not supported because the gate
748 /// is somewhat esoteric. As such, we must validate mixed-amps fit
749
750 validate_mixedAmpsFitInNode(qureg, 2, __func__); // to throw SqrtSwap error, not generic CompMatr2 error
751
752 CompMatr2 matr = getCompMatr2({
753 {1, 0, 0, 0},
754 {0, .5+.5_i, .5-.5_i, 0},
755 {0, .5-.5_i, .5+.5_i, 0},
756 {0, 0, 0, 1}});
757
758 applyMultiStateControlledCompMatr2(qureg, controls, states, numControls, target1, target2, matr);
759}
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 676 of file operations.cpp.

676 {
677 validate_quregFields(qureg, __func__);
678 validate_controlsAndTwoTargets(qureg, controls, numControls, qubit1, qubit2, __func__);
679 validate_controlStates(states, numControls, __func__); // permits states==nullptr
680
681 auto ctrlVec = util_getVector(controls, numControls);
682 auto stateVec = util_getVector(states, numControls); // empty if states==nullptr
683 localiser_statevec_anyCtrlSwap(qureg, ctrlVec, stateVec, qubit1, qubit2);
684
685 if (!qureg.isDensityMatrix)
686 return;
687
688 ctrlVec = util_getBraQubits(ctrlVec, qureg);
689 qubit1 = util_getBraQubit(qubit1, qureg);
690 qubit2 = util_getBraQubit(qubit2, qureg);
691 localiser_statevec_anyCtrlSwap(qureg, ctrlVec, stateVec, qubit1, qubit2);
692}

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

715 {
716 validate_quregFields(qureg, __func__);
717 validate_twoTargets(qureg,target1, target2, __func__);
718
719 // harmlessly re-validates
720 applyMultiStateControlledSqrtSwap(qureg, nullptr, nullptr, 0, target1, target2);
721}

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

652 {
653 validate_quregFields(qureg, __func__);
654 validate_twoTargets(qureg, qubit1, qubit2, __func__);
655
656 // harmlessly re-valdiates
657 applyMultiStateControlledSwap(qureg, nullptr, nullptr, 0, qubit1, qubit2);
658}

Referenced by applyQuantumFourierTransform().