class CPUImplQPUSingleThreadWithOracle

#include <CPUImplQPUSingleThread.h>

class CPUImplQPUSingleThreadWithOracle: public CPUImplQPUSingleThread
{
public:
    // methods

    QError controlOracularGate(
        std::vector<size_t> bits,
        std::vector<size_t> controlbits,
        bool is_dagger,
        std::string name
        );
};

Inherited Members

public:
    // fields

    vQParam qubit2stat;
    vQParam init_qubit2stat;

    // 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;
    QGateParam& findgroup(size_t qn);
    bool TensorProduct(QGateParam& qgroup0, QGateParam& qgroup1);
    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);
    virtual QError P0(size_t qn, bool isConjugate, double error_rate);
    virtual QError P0(size_t qn, Qnum& vControlBit, bool isConjugate, double error_rate);
    virtual QError P1(size_t qn, bool isConjugate, double error_rate);
    virtual QError P1(size_t qn, Qnum& vControlBit, bool isConjugate, double error_rate);
    virtual QError Hadamard(size_t qn, bool isConjugate, double error_rate);
    virtual QError Hadamard(size_t qn, Qnum& vControlBit, bool isConjugate, double error_rate);
    virtual QError X(size_t qn, bool isConjugate, double error_rate);
    virtual QError X(size_t qn, Qnum& vControlBit, bool isConjugate, double error_rate);
    virtual QError Y(size_t qn, bool isConjugate, double error_rate);
    virtual QError Y(size_t qn, Qnum& vControlBit, bool isConjugate, double error_rate);
    virtual QError Z(size_t qn, bool isConjugate, double error_rate);
    virtual QError Z(size_t qn, Qnum& vControlBit, bool isConjugate, double error_rate);
    virtual QError T(size_t qn, bool isConjugate, double error_rate);
    virtual QError T(size_t qn, Qnum& vControlBit, bool isConjugate, double error_rate);
    virtual QError S(size_t qn, bool isConjugate, double error_rate);
    virtual QError S(size_t qn, Qnum& vControlBit, bool isConjugate, double error_rate);
    virtual QError U1_GATE(size_t qn, double theta, bool isConjugate, double error_rate);
    virtual QError RX_GATE(size_t qn, double theta, bool isConjugate, double error_rate);

    virtual QError RX_GATE(
        size_t qn,
        double theta,
        Qnum& vControlBit,
        bool isConjugate,
        double error_rate
        );

    virtual QError RY_GATE(size_t qn, double theta, bool isConjugate, double error_rate);

    virtual QError RY_GATE(
        size_t qn,
        double theta,
        Qnum& vControlBit,
        bool isConjugate,
        double error_rate
        );

    virtual QError RZ_GATE(size_t qn, double theta, bool isConjugate, double error_rate);

    virtual QError RZ_GATE(
        size_t qn,
        double theta,
        Qnum& vControlBit,
        bool isConjugate,
        double error_rate
        );

    virtual QError CNOT(size_t qn_0, size_t qn_1, bool isConjugate, double error_rate);

    virtual QError CNOT(
        size_t qn_0,
        size_t qn_1,
        Qnum& vControlBit,
        bool isConjugate,
        double error_rate
        );

    virtual QError CR(
        size_t qn_0,
        size_t qn_1,
        double theta,
        bool isConjugate,
        double error_rate
        );

    virtual QError CR(
        size_t qn_0,
        size_t qn_1,
        Qnum& vControlBit,
        double theta,
        bool isConjugate,
        double error_rate
        );

    virtual QError CZ(size_t qn_0, size_t qn_1, bool isConjugate, double error_rate);

    virtual QError CZ(
        size_t qn_0,
        size_t qn_1,
        Qnum& vControlBit,
        bool isConjugate,
        double error_rate
        );

    virtual QError iSWAP(
        size_t qn_0,
        size_t qn_1,
        double theta,
        bool isConjugate,
        double error_rate
        );

    virtual QError iSWAP(
        size_t qn_0,
        size_t qn_1,
        Qnum& vControlBit,
        double theta,
        bool isConjugate,
        double error_rate
        );

    virtual QError iSWAP(size_t qn_0, size_t qn_1, bool isConjugate, double error_rate);

    virtual QError iSWAP(
        size_t qn_0,
        size_t qn_1,
        Qnum& vControlBit,
        bool isConjugate,
        double error_rate
        );

    virtual QError SqiSWAP(size_t qn_0, size_t qn_1, bool isConjugate, double error_rate);

    virtual QError SqiSWAP(
        size_t qn_0,
        size_t qn_1,
        Qnum& vControlBit,
        bool isConjugate,
        double error_rate
        );

    virtual QError DiagonalGate(Qnum& vQubit, QStat& matrix, bool isConjugate, double error_rate);

    virtual 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 = {});