class QPanda::QCloudMachine

Overview

#include <QCloudMachine.h>

class QCloudMachine: public QPanda::QVM
{
public:
    // methods

    void init(std::string token);
    void set_compute_api(std::string url);
    void set_inqure_api(std::string url);

    void set_noise_model(
        NOISE_MODEL model,
        const std::vector<double> single_params,
        const std::vector<double> double_params
        );

    std::map<std::string, double> noise_measure(
        QProg&,
        int shot,
        std::string task_name = "Qurator Experiment"
        );

    std::map<std::string, double> full_amplitude_measure(
        QProg&,
        int shot,
        std::string task_name = "Qurator Experiment"
        );

    std::map<std::string, double> full_amplitude_pmeasure(
        QProg& prog,
        Qnum qubit_vec,
        std::string task_name = "Qurator Experiment"
        );

    std::map<std::string, qcomplex_t> partial_amplitude_pmeasure(
        QProg& prog,
        std::vector<std::string> amplitude_vec,
        std::string task_name = "Qurator Experiment"
        );

    qcomplex_t single_amplitude_pmeasure(QProg& prog, std::string amplitude, std::string task_name = "Qurator Experiment");

    std::map<std::string, double> real_chip_measure(
        QProg&,
        int shot,
        size_t chipid = 0,
        std::string task_name = "Qurator Experiment"
        );

    std::map<std::string, double> real_chip_task(
        QProg&,
        int shot,
        bool mapping_flag,
        bool circuit_optimization,
        bool is_vip,
        size_t chipid = 0
        );

    std::vector<QStat> get_state_tomography_density(QProg&, int shot, size_t chipid = 0);
    std::string get_result_json(std::string taskid, CLOUD_QMACHINE_TYPE type);
};

Inherited Members

public:
    // methods

    virtual Qubit* allocateQubitThroughPhyAddress(size_t) = 0;
    virtual Qubit* allocateQubitThroughVirAddress(size_t) = 0;
    virtual void init() = 0;
    virtual QMachineStatus* getStatus() const = 0;
    virtual std::map<std::string, bool> directlyRun(QProg& qProg) = 0;
    virtual std::map<std::string, size_t> runWithConfiguration(QProg&, std::vector<ClassicalCondition>&, rapidjson::Document&) = 0;
    virtual std::map<std::string, size_t> runWithConfiguration(QProg&, std::vector<ClassicalCondition>&, int) = 0;
    virtual std::map<GateType, size_t> getGateTimeMap() const = 0;
    virtual void finalize() = 0;
    virtual QStat getQState() const = 0;
    virtual size_t getVirtualQubitAddress(Qubit*) const = 0;
    virtual bool swapQubitPhysicalAddress(Qubit*, Qubit*) = 0;
    virtual void setConfig(const Configuration&) = 0;
    virtual Qubit* allocateQubit() = 0;
    virtual QVec allocateQubits(size_t) = 0;
    virtual ClassicalCondition allocateCBit() = 0;
    virtual ClassicalCondition allocateCBit(size_t) = 0;
    virtual std::vector<ClassicalCondition> allocateCBits(size_t) = 0;
    virtual void Free_Qubit(Qubit*) = 0;
    virtual void Free_Qubits(QVec&) = 0;
    virtual void Free_CBit(ClassicalCondition&) = 0;
    virtual void Free_CBits(std::vector<ClassicalCondition>&) = 0;
    virtual size_t getAllocateQubit() = 0;
    virtual size_t getAllocateCMem() = 0;
    virtual void setConfigure(const Configuration&) = 0;
    virtual Qubit* qAlloc() = 0;
    virtual QVec qAllocMany(size_t qubit_count) = 0;
    virtual ClassicalCondition cAlloc() = 0;
    virtual ClassicalCondition cAlloc(size_t) = 0;
    virtual std::vector<ClassicalCondition> cAllocMany(size_t) = 0;
    virtual void qFree(Qubit*) = 0;
    virtual void qFreeAll(QVec&) = 0;
    virtual void cFree(ClassicalCondition&) = 0;
    virtual void cFreeAll(std::vector<ClassicalCondition>&) = 0;
    virtual size_t getAllocateQubitNum() = 0;
    virtual size_t getAllocateCMemNum() = 0;
    virtual void initState(const QStat& state = {}, const QVec& qlist = {}) = 0;
    virtual size_t get_allocate_qubits(QVec&) = 0;
    virtual size_t get_allocate_cbits(std::vector<ClassicalCondition>&) = 0;
    virtual double get_expectation(QProg, const QHamiltonian&, const QVec&) = 0;
    virtual double get_expectation(QProg, const QHamiltonian&, const QVec&, int) = 0;
    virtual void initState(const QStat& state = {}, const QVec& qlist = {});
    virtual Qubit* allocateQubitThroughPhyAddress(size_t);
    virtual Qubit* allocateQubitThroughVirAddress(size_t);
    virtual QMachineStatus* getStatus() const;
    virtual QResult* getResult();
    virtual std::map<std::string, bool> getResultMap();
    virtual void finalize();
    virtual std::map<std::string, bool> directlyRun(QProg& qProg);
    virtual std::map<std::string, size_t> runWithConfiguration(QProg&, std::vector<ClassicalCondition>&, rapidjson::Document&);
    virtual std::map<std::string, size_t> runWithConfiguration(QProg&, std::vector<ClassicalCondition>&, int);
    virtual std::map<std::string, size_t> runWithConfiguration(QProg&, std::vector<int>&, int);
    virtual std::map<GateType, size_t> getGateTimeMap() const;
    virtual QStat getQState() const;
    virtual size_t getVirtualQubitAddress(Qubit*) const;
    virtual bool swapQubitPhysicalAddress(Qubit*, Qubit*);
    virtual void set_random_engine(RandomEngine* rng);
    virtual void setConfig(const Configuration& config);
    virtual Qubit* allocateQubit();
    virtual QVec allocateQubits(size_t);
    virtual ClassicalCondition allocateCBit();
    virtual std::vector<ClassicalCondition> allocateCBits(size_t);
    virtual ClassicalCondition allocateCBit(size_t);
    virtual size_t getAllocateQubit();
    virtual size_t getAllocateCMem();
    virtual void Free_Qubit(Qubit*);
    virtual void Free_Qubits(QVec&);
    virtual void Free_CBit(ClassicalCondition&);
    virtual void Free_CBits(std::vector<ClassicalCondition>&);
    virtual void setConfigure(const Configuration&);
    virtual Qubit* qAlloc();
    virtual QVec qAllocMany(size_t qubit_count);
    virtual ClassicalCondition cAlloc();
    virtual ClassicalCondition cAlloc(size_t);
    virtual std::vector<ClassicalCondition> cAllocMany(size_t);
    virtual void qFree(Qubit*);
    virtual void qFreeAll(QVec&);
    virtual void cFree(ClassicalCondition&);
    virtual void cFreeAll(std::vector<ClassicalCondition>&);
    virtual size_t getAllocateQubitNum();
    virtual size_t getAllocateCMemNum();
    virtual size_t get_allocate_qubits(QVec&);
    virtual size_t get_allocate_cbits(std::vector<ClassicalCondition>&);
    virtual double get_expectation(QProg, const QHamiltonian&, const QVec&);
    virtual double get_expectation(QProg, const QHamiltonian&, const QVec&, int);

Detailed Documentation

Methods

void init(std::string token)

Init the quantum machine environment.

use this at the begin

Returns:

void

std::map<std::string, double> noise_measure(
    QProg&,
    int shot,
    std::string task_name = "Qurator Experiment"
    )

run a measure quantum program

Parameters:

QProg&

the reference to a quantum program

int&

shot

std::map<std::string

double>

Returns:

measure result

std::map<std::string, double> full_amplitude_measure(
    QProg&,
    int shot,
    std::string task_name = "Qurator Experiment"
    )

run a measure quantum program

Parameters:

QProg&

the reference to a quantum program

int&

shot

std::map<std::string

double>

Returns:

measure result

std::map<std::string, double> full_amplitude_pmeasure(
    QProg& prog,
    Qnum qubit_vec,
    std::string task_name = "Qurator Experiment"
    )

run a pmeasure quantum program

Parameters:

QProg&

the reference to a quantum program

Qnum

& qubit address vector

std::map<std::string

double>

Returns:

pmeasure result

std::map<std::string, qcomplex_t> partial_amplitude_pmeasure(
    QProg& prog,
    std::vector<std::string> amplitude_vec,
    std::string task_name = "Qurator Experiment"
    )

run a pmeasure quantum program with partial amplitude backend

Parameters:

QProg&

the reference to a quantum program

std::vector<std::string>

& amplitude subset

std::map<std::string

qcomplex_t>

Returns:

pmeasure result

qcomplex_t single_amplitude_pmeasure(
    QProg& prog,
    std::string amplitude,
    std::string task_name = "Qurator Experiment"
    )

run a pmeasure quantum program with single amplitude backend

Parameters:

QProg&

the reference to a quantum program

std::string

amplitude

qcomplex_t

Returns:

pmeasure result

std::map<std::string, double> real_chip_measure(
    QProg&,
    int shot,
    size_t chipid = 0,
    std::string task_name = "Qurator Experiment"
    )

run a measure quantum program

Parameters:

QProg&

the reference to a quantum program

int&

shot

std::map<std::string

double>

Returns:

measure result

std::map<std::string, double> real_chip_task(
    QProg&,
    int shot,
    bool mapping_flag,
    bool circuit_optimization,
    bool is_vip,
    size_t chipid = 0
    )

run a measure quantum program

Parameters:

QProg&

the reference to a quantum program

int&

shot

std::map<std::string

double>

Returns:

measure result

std::vector<QStat> get_state_tomography_density(QProg&, int shot, size_t chipid = 0)

get real chip qst matrix

Parameters:

QProg&

the reference to a quantum program

int&

shot

QStat

matrix

Returns:

matrix

std::string get_result_json(std::string taskid, CLOUD_QMACHINE_TYPE type)

get task result

Parameters:

std::string

taskid

CLOUD_QMACHINE_TYPE

type

std::string&

empty taskid

Returns:

string