class CPUImplQPU¶
Overview¶
QPU implementation by CPU model. More…
#include <CPUImplQPU.h> class CPUImplQPU: public QPUImpl { public: // fields vQParam qubit2stat; vQParam init_qubit2stat; // construction CPUImplQPU(); CPUImplQPU(size_t); // methods QGateParam& findgroup(size_t qn); bool TensorProduct( QGateParam& qgroup0, QGateParam& qgroup1 ); template < const qcomplex_t& U00, const qcomplex_t& U01, const qcomplex_t& U10, const qcomplex_t& U11 > QError single_gate( size_t qn, bool isConjugate, double error_rate ); QError U1_GATE( size_t qn, double theta, bool isConjugate, double error_rate ); template <const double& Nx, const double& Ny, const double& Nz> QError single_angle_gate( size_t qn, double theta, bool isConjugate, double error_rate ); template <const double& Nx, const double& Ny, const double& Nz> QError control_single_angle_gate( size_t qn, double theta, Qnum vControlBit, bool isConjugate, double error_rate ); template < const qcomplex_t& U00, const qcomplex_t& U01, const qcomplex_t& U10, const qcomplex_t& U11 > QError control_single_gate( size_t qn, Qnum vControlBit, bool isConjugate, double error_rate ); CONST_GATE(P0); CONST_GATE(P1); CONST_GATE(X); CONST_GATE(Y); CONST_GATE(Z); CONST_GATE(Hadamard); CONST_GATE(T); CONST_GATE(S); SINGLE_ANGLE_GATE(RX_GATE); SINGLE_ANGLE_GATE(RY_GATE); SINGLE_ANGLE_GATE(RZ_GATE); CONTROL_SINGLE_ANGLE_GATE(RX_GATE); CONTROL_SINGLE_ANGLE_GATE(RY_GATE); CONTROL_SINGLE_ANGLE_GATE(RZ_GATE); CONTROL_CONST_GATE(Hadamard); CONTROL_CONST_GATE(X); CONTROL_CONST_GATE(Y); CONTROL_CONST_GATE(Z); CONTROL_CONST_GATE(T); CONTROL_CONST_GATE(S); CONTROL_CONST_GATE(P0); CONTROL_CONST_GATE(P1); QError CNOT( size_t qn_0, size_t qn_1, bool isConjugate, double error_rate ); QError CNOT( size_t qn_0, size_t qn_1, Qnum& vControlBit, bool isConjugate, double error_rate ); QError iSWAP( size_t qn_0, size_t qn_1, double theta, bool isConjugate, double ); QError iSWAP( size_t qn_0, size_t qn_1, Qnum& vControlBit, double theta, bool isConjugate, double ); QError iSWAP( size_t qn_0, size_t qn_1, bool isConjugate, double error_rate ); QError iSWAP( size_t qn_0, size_t qn_1, Qnum& vControlBit, bool isConjugate, double error_rate ); QError SqiSWAP( size_t qn_0, size_t qn_1, bool isConjugate, double error_rate ); QError SqiSWAP( size_t qn_0, size_t qn_1, Qnum& vControlBit, bool isConjugate, double error_rate ); QError CR( size_t qn_0, size_t qn_1, double theta, bool isConjugate, double error_rate ); QError CR( size_t qn_0, size_t qn_1, Qnum& vControlBit, double theta, bool isConjugate, double error_rate ); QError CZ( size_t qn_0, size_t qn_1, bool isConjugate, double error_rate ); QError CZ( size_t qn_0, size_t qn_1, Qnum& vControlBit, bool isConjugate, double error_rate ); virtual QError unitarySingleQubitGate(size_t qn, QStat& matrix, bool isConjugate, GateType); virtual QError controlunitarySingleQubitGate(size_t qn, Qnum& qnum, QStat& matrix, bool isConjugate, GateType); virtual QError unitaryDoubleQubitGate(size_t qn_0, size_t qn_1, QStat& matrix, bool isConjugate, GateType); virtual QError controlunitaryDoubleQubitGate(size_t qn_0, size_t qn_1, Qnum& qnum, QStat& matrix, bool isConjugate, GateType); QError DiagonalGate( Qnum& vQubit, QStat& matrix, bool isConjugate, double error_rate ); QError controlDiagonalGate( Qnum& vQubit, QStat& matrix, Qnum& vControlBit, bool isConjugate, double error_rate ); virtual QStat getQState(); virtual QError Reset(size_t qn); virtual bool qubitMeasure(size_t qn); QError pMeasure( Qnum& qnum, prob_tuple& mResult, int select_max = -1 ); virtual QError pMeasure( Qnum& qnum, prob_vec& mResult ); virtual QError initState( size_t head_rank, size_t rank_size, size_t qubit_num ); virtual QError initState( size_t qubit_num, const QStat& state = {} ); QError P00( size_t qn_0, size_t qn_1, bool isConjugate, double error_rate ); QError SWAP( size_t qn_0, size_t qn_1, bool isConjugate, double error_rate ); QError P11( size_t qn_0, size_t qn_1, bool isConjugate, double error_rate ); }; // direct descendants class CPUImplQPUWithOracle;
Inherited Members¶
public: // methods virtual bool qubitMeasure(size_t qn) = 0; virtual QError pMeasure(Qnum& qnum, prob_vec& mResult) = 0; virtual QError initState(size_t head_rank, size_t rank_size, size_t qubit_num) = 0; virtual QError initState(size_t qubit_num, const QStat& state = {}) = 0; virtual QError unitarySingleQubitGate(size_t qn, QStat& matrix, bool isConjugate, GateType) = 0; virtual QError controlunitarySingleQubitGate(size_t qn, Qnum& qnum, QStat& matrix, bool isConjugate, GateType) = 0; virtual QError unitaryDoubleQubitGate(size_t qn_0, size_t qn_1, QStat& matrix, bool isConjugate, GateType) = 0; virtual QError controlunitaryDoubleQubitGate(size_t qn_0, size_t qn_1, Qnum& qnum, QStat& matrix, bool isConjugate, GateType) = 0; virtual QStat getQState() = 0; virtual void set_random_engine(RandomEngine* rng); virtual double get_random_double(); virtual QError Reset(size_t qn) = 0;
Detailed Documentation¶
QPU implementation by CPU model.
Methods¶
virtual QError unitarySingleQubitGate(size_t qn, QStat& matrix, bool isConjugate, GateType)
unitary single qubit gate
Parameters:
size_t |
qubit address |
QStat& |
matrix |
bool |
state of conjugate |
GateType |
gate type |
Returns:
QError
virtual QError controlunitarySingleQubitGate( size_t qn, Qnum& qnum, QStat& matrix, bool isConjugate, GateType )
controlunitary single qubit gate
Parameters:
size_t |
qubit address |
Qnum& |
control qubit addresses |
QStat |
& matrix |
bool |
state of conjugate |
GateType |
gate type |
Returns:
QError
virtual QError unitaryDoubleQubitGate( size_t qn_0, size_t qn_1, QStat& matrix, bool isConjugate, GateType )
unitary double qubit gate
Parameters:
size_t |
first qubit address |
size_t |
second qubit address |
QStat& |
matrix |
bool |
state of conjugate |
GateType |
gate type |
Returns:
QError
virtual QError controlunitaryDoubleQubitGate( size_t qn_0, size_t qn_1, Qnum& qnum, QStat& matrix, bool isConjugate, GateType )
controlunitary double qubit gate
Parameters:
size_t |
first qubit address |
size_t |
second qubit address |
Qnum& |
control qubit addresses |
QStat& |
quantum states |
bool |
state of conjugate |
GateType |
gate type |
Returns:
QError
virtual QStat getQState()
get quantum states
virtual QError Reset(size_t qn)
reset qubit
Parameters:
size_t |
qubit address |