.. index:: pair: class; CPUImplQPU .. _doxid-class_c_p_u_impl_q_p_u: class CPUImplQPU ================ .. toctree:: :hidden: Overview ~~~~~~~~ QPU implementation by CPU model. :ref:`More...` .. ref-code-block:: cpp :class: doxyrest-overview-code-block #include class CPUImplQPU: public :ref:`QPUImpl` { public: // fields :ref:`vQParam` :target:`qubit2stat`; :ref:`vQParam` :target:`init_qubit2stat`; // construction :target:`CPUImplQPU`(); :target:`CPUImplQPU`(size_t); // methods :ref:`QGateParam`& :target:`findgroup`(size_t qn); bool :target:`TensorProduct`( :ref:`QGateParam`& qgroup0, :ref:`QGateParam`& qgroup1 ); template < const qcomplex_t& U00, const qcomplex_t& U01, const qcomplex_t& U10, const qcomplex_t& U11 > :ref:`QError` :target:`single_gate`( size_t qn, bool isConjugate, double error_rate ); :ref:`QError` :target:`U1_GATE`( size_t qn, double theta, bool isConjugate, double error_rate ); template :ref:`QError` :target:`single_angle_gate`( size_t qn, double theta, bool isConjugate, double error_rate ); template :ref:`QError` :target:`control_single_angle_gate`( size_t qn, double theta, :ref:`Qnum` vControlBit, bool isConjugate, double error_rate ); template < const qcomplex_t& U00, const qcomplex_t& U01, const qcomplex_t& U10, const qcomplex_t& U11 > :ref:`QError` :target:`control_single_gate`( size_t qn, :ref:`Qnum` vControlBit, bool isConjugate, double error_rate ); :target:`CONST_GATE`(P0); :target:`CONST_GATE`(P1); :target:`CONST_GATE`(X); :target:`CONST_GATE`(Y); :target:`CONST_GATE`(Z); :target:`CONST_GATE`(Hadamard); :target:`CONST_GATE`(T); :target:`CONST_GATE`(S); :target:`SINGLE_ANGLE_GATE`(:ref:`RX_GATE`); :target:`SINGLE_ANGLE_GATE`(:ref:`RY_GATE`); :target:`SINGLE_ANGLE_GATE`(:ref:`RZ_GATE`); :target:`CONTROL_SINGLE_ANGLE_GATE`(:ref:`RX_GATE`); :target:`CONTROL_SINGLE_ANGLE_GATE`(:ref:`RY_GATE`); :target:`CONTROL_SINGLE_ANGLE_GATE`(:ref:`RZ_GATE`); :target:`CONTROL_CONST_GATE`(Hadamard); :target:`CONTROL_CONST_GATE`(X); :target:`CONTROL_CONST_GATE`(Y); :target:`CONTROL_CONST_GATE`(Z); :target:`CONTROL_CONST_GATE`(T); :target:`CONTROL_CONST_GATE`(S); :target:`CONTROL_CONST_GATE`(P0); :target:`CONTROL_CONST_GATE`(P1); :ref:`QError` :target:`CNOT`( size_t qn_0, size_t qn_1, bool isConjugate, double error_rate ); :ref:`QError` :target:`CNOT`( size_t qn_0, size_t qn_1, :ref:`Qnum`& vControlBit, bool isConjugate, double error_rate ); :ref:`QError` :target:`iSWAP`( size_t qn_0, size_t qn_1, double theta, bool isConjugate, double ); :ref:`QError` :target:`iSWAP`( size_t qn_0, size_t qn_1, :ref:`Qnum`& vControlBit, double theta, bool isConjugate, double ); :ref:`QError` :target:`iSWAP`( size_t qn_0, size_t qn_1, bool isConjugate, double error_rate ); :ref:`QError` :target:`iSWAP`( size_t qn_0, size_t qn_1, :ref:`Qnum`& vControlBit, bool isConjugate, double error_rate ); :ref:`QError` :target:`SqiSWAP`( size_t qn_0, size_t qn_1, bool isConjugate, double error_rate ); :ref:`QError` :target:`SqiSWAP`( size_t qn_0, size_t qn_1, :ref:`Qnum`& vControlBit, bool isConjugate, double error_rate ); :ref:`QError` :target:`CR`( size_t qn_0, size_t qn_1, double theta, bool isConjugate, double error_rate ); :ref:`QError` :target:`CR`( size_t qn_0, size_t qn_1, :ref:`Qnum`& vControlBit, double theta, bool isConjugate, double error_rate ); :ref:`QError` :target:`CZ`( size_t qn_0, size_t qn_1, bool isConjugate, double error_rate ); :ref:`QError` :target:`CZ`( size_t qn_0, size_t qn_1, :ref:`Qnum`& vControlBit, bool isConjugate, double error_rate ); virtual :ref:`QError` :ref:`unitarySingleQubitGate`(size_t qn, :ref:`QStat`& matrix, bool isConjugate, :ref:`GateType`); virtual :ref:`QError` :ref:`controlunitarySingleQubitGate`(size_t qn, :ref:`Qnum`& qnum, :ref:`QStat`& matrix, bool isConjugate, :ref:`GateType`); virtual :ref:`QError` :ref:`unitaryDoubleQubitGate`(size_t qn_0, size_t qn_1, :ref:`QStat`& matrix, bool isConjugate, :ref:`GateType`); virtual :ref:`QError` :ref:`controlunitaryDoubleQubitGate`(size_t qn_0, size_t qn_1, :ref:`Qnum`& qnum, :ref:`QStat`& matrix, bool isConjugate, :ref:`GateType`); :ref:`QError` :target:`DiagonalGate`( :ref:`Qnum`& vQubit, :ref:`QStat`& matrix, bool isConjugate, double error_rate ); :ref:`QError` :target:`controlDiagonalGate`( :ref:`Qnum`& vQubit, :ref:`QStat`& matrix, :ref:`Qnum`& vControlBit, bool isConjugate, double error_rate ); virtual :ref:`QStat` :ref:`getQState`(); virtual :ref:`QError` :ref:`Reset`(size_t qn); virtual bool :target:`qubitMeasure`(size_t qn); :ref:`QError` :target:`pMeasure`( :ref:`Qnum`& qnum, :ref:`prob_tuple`& mResult, int select_max = -1 ); virtual :ref:`QError` :target:`pMeasure`( :ref:`Qnum`& qnum, :ref:`prob_vec`& mResult ); virtual :ref:`QError` :target:`initState`( size_t head_rank, size_t rank_size, size_t qubit_num ); virtual :ref:`QError` :target:`initState`( size_t qubit_num, const :ref:`QStat`& state = {} ); :ref:`QError` :target:`P00`( size_t qn_0, size_t qn_1, bool isConjugate, double error_rate ); :ref:`QError` :target:`SWAP`( size_t qn_0, size_t qn_1, bool isConjugate, double error_rate ); :ref:`QError` :target:`P11`( size_t qn_0, size_t qn_1, bool isConjugate, double error_rate ); }; // direct descendants class :ref:`CPUImplQPUWithOracle`; Inherited Members ----------------- .. ref-code-block:: cpp :class: doxyrest-overview-inherited-code-block public: // methods virtual bool :ref:`qubitMeasure`(size_t qn) = 0; virtual :ref:`QError` :ref:`pMeasure`(:ref:`Qnum`& qnum, :ref:`prob_vec`& mResult) = 0; virtual :ref:`QError` :ref:`initState`(size_t head_rank, size_t rank_size, size_t qubit_num) = 0; virtual :ref:`QError` :ref:`initState`(size_t qubit_num, const :ref:`QStat`& state = {}) = 0; virtual :ref:`QError` :ref:`unitarySingleQubitGate`(size_t qn, :ref:`QStat`& matrix, bool isConjugate, :ref:`GateType`) = 0; virtual :ref:`QError` :ref:`controlunitarySingleQubitGate`(size_t qn, :ref:`Qnum`& qnum, :ref:`QStat`& matrix, bool isConjugate, :ref:`GateType`) = 0; virtual :ref:`QError` :ref:`unitaryDoubleQubitGate`(size_t qn_0, size_t qn_1, :ref:`QStat`& matrix, bool isConjugate, :ref:`GateType`) = 0; virtual :ref:`QError` :ref:`controlunitaryDoubleQubitGate`(size_t qn_0, size_t qn_1, :ref:`Qnum`& qnum, :ref:`QStat`& matrix, bool isConjugate, :ref:`GateType`) = 0; virtual :ref:`QStat` :ref:`getQState`() = 0; virtual void :ref:`set_random_engine`(:ref:`RandomEngine`* rng); virtual double :ref:`get_random_double`(); virtual :ref:`QError` :ref:`Reset`(size_t qn) = 0; .. _details-class_c_p_u_impl_q_p_u: Detailed Documentation ~~~~~~~~~~~~~~~~~~~~~~ QPU implementation by CPU model. Methods ------- .. index:: pair: function; unitarySingleQubitGate .. _doxid-class_c_p_u_impl_q_p_u_1a99f6be394fb9ed6d42f75fa787fbbec1: .. ref-code-block:: cpp :class: doxyrest-title-code-block virtual :ref:`QError` unitarySingleQubitGate(size_t qn, :ref:`QStat`& matrix, bool isConjugate, :ref:`GateType`) unitary single qubit gate .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - size_t - qubit address * - QStat& - matrix * - bool - state of conjugate * - GateType - gate type .. rubric:: Returns: QError .. index:: pair: function; controlunitarySingleQubitGate .. _doxid-class_c_p_u_impl_q_p_u_1ac5ba6b2a6b1f868ecdd132a46633528b: .. ref-code-block:: cpp :class: doxyrest-title-code-block virtual :ref:`QError` controlunitarySingleQubitGate( size_t qn, :ref:`Qnum`& qnum, :ref:`QStat`& matrix, bool isConjugate, :ref:`GateType` ) controlunitary single qubit gate .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - size_t - qubit address * - Qnum& - control qubit addresses * - QStat - & matrix * - bool - state of conjugate * - GateType - gate type .. rubric:: Returns: QError .. index:: pair: function; unitaryDoubleQubitGate .. _doxid-class_c_p_u_impl_q_p_u_1a3bad44eb20d61666aab7c4f5df088bbc: .. ref-code-block:: cpp :class: doxyrest-title-code-block virtual :ref:`QError` unitaryDoubleQubitGate( size_t qn_0, size_t qn_1, :ref:`QStat`& matrix, bool isConjugate, :ref:`GateType` ) unitary double qubit gate .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - size_t - first qubit address * - size_t - second qubit address * - QStat& - matrix * - bool - state of conjugate * - GateType - gate type .. rubric:: Returns: QError .. index:: pair: function; controlunitaryDoubleQubitGate .. _doxid-class_c_p_u_impl_q_p_u_1ae6ef9236a4921e75aba1f59fd05cb7e9: .. ref-code-block:: cpp :class: doxyrest-title-code-block virtual :ref:`QError` controlunitaryDoubleQubitGate( size_t qn_0, size_t qn_1, :ref:`Qnum`& qnum, :ref:`QStat`& matrix, bool isConjugate, :ref:`GateType` ) controlunitary double qubit gate .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - size_t - first qubit address * - size_t - second qubit address * - Qnum& - control qubit addresses * - QStat& - quantum states * - bool - state of conjugate * - GateType - gate type .. rubric:: Returns: QError .. index:: pair: function; getQState .. _doxid-class_c_p_u_impl_q_p_u_1ae39eb6921904abc0a22172ae91b35689: .. ref-code-block:: cpp :class: doxyrest-title-code-block virtual :ref:`QStat` getQState() get quantum states .. index:: pair: function; Reset .. _doxid-class_c_p_u_impl_q_p_u_1acf218e97f2b7186e0462ac59d8fa6c05: .. ref-code-block:: cpp :class: doxyrest-title-code-block virtual :ref:`QError` Reset(size_t qn) reset qubit .. rubric:: Parameters: .. list-table:: :widths: 20 80 * - size_t - qubit address