class QPanda::QuantumMachine

Overview

Abstract quantum machine base classes. More…

#include <QuantumMachineInterface.h>

class QuantumMachine
{
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;
};

// direct descendants

class QVM;

Detailed Documentation

Abstract quantum machine base classes.

Methods

virtual Qubit* allocateQubitThroughPhyAddress(size_t) = 0

allocateQubitThroughPhyAddress

Parameters:

size_t address

Returns:

QPanda::Qubit * qubit

virtual Qubit* allocateQubitThroughVirAddress(size_t) = 0

allocateQubitThroughVirAddress

Parameters:

size_t address

Returns:

QPanda::Qubit * qubit

virtual void init() = 0

init

Returns:

void

virtual QMachineStatus* getStatus() const = 0

getStatus

Returns:

QPanda::QMachineStatus *

virtual std::map<std::string, bool> directlyRun(QProg& qProg) = 0

directlyRun

Parameters:

QProg& quantum program

Returns:

std::map<std::string, bool>

virtual std::map<std::string, size_t> runWithConfiguration(
    QProg&,
    std::vector<ClassicalCondition>&,
    rapidjson::Document&
    ) = 0

runWithConfiguration

Parameters:

QProg& quantum program
std::vector<ClassicalCondition>&  
rapidjson::Document&  

Returns:

std::map<std::string, Eigen::size_t>

virtual std::map<std::string, size_t> runWithConfiguration(
    QProg&,
    std::vector<ClassicalCondition>&,
    int
    ) = 0

runWithConfiguration

Parameters:

QProg& quantum program
std::vector<ClassicalCondition>&  
int  

Returns:

std::map<std::string, Eigen::size_t>

virtual std::map<GateType, size_t> getGateTimeMap() const = 0

getGateTimeMap

Returns:

std::map<GateType, Eigen::size_t>

virtual void finalize() = 0

finalize

Returns:

void

virtual QStat getQState() const = 0

getQState

Returns:

QStat

virtual size_t getVirtualQubitAddress(Qubit*) const = 0

getVirtualQubitAddress

Parameters:

Qubit* qubit

Returns:

Eigen::size_t

virtual bool swapQubitPhysicalAddress(Qubit*, Qubit*) = 0

swapQubitPhysicalAddress

Parameters:

Qubit* qubit
Qubit* qubit

Returns:

bool

virtual Qubit* allocateQubit() = 0

To initialize the quantum machine.

virtual QVec allocateQubits(size_t) = 0

Allocate and return a qubit.

virtual ClassicalCondition allocateCBit() = 0

allocateQubits

virtual ClassicalCondition allocateCBit(size_t) = 0

Allocate and run a cbit.

virtual std::vector<ClassicalCondition> allocateCBits(size_t) = 0

Allocate and run a cbit.

virtual void Free_Qubit(Qubit*) = 0

Allocate and return a list of cbits.

virtual void Free_Qubits(QVec&) = 0

Free a qubit.

virtual void Free_CBit(ClassicalCondition&) = 0

Gree a list of qubits.

virtual void Free_CBits(std::vector<ClassicalCondition>&) = 0

Gree a cbit.

virtual size_t getAllocateQubit() = 0

Gree a list of CBits.

virtual size_t getAllocateCMem() = 0

getAllocateQubit

virtual void setConfigure(const Configuration&) = 0

getAllocateCMem

setConfigure

Parameters:

const Configuration & config

Returns:

void

virtual Qubit* qAlloc() = 0

qAlloc

Returns:

QPanda::Qubit * qubit

virtual QVec qAllocMany(size_t qubit_count) = 0

qAllocMany

Parameters:

size_t qubit_count

Returns:

QPanda::QVec

virtual ClassicalCondition cAlloc() = 0

cAlloc

Returns:

QPanda::ClassicalCondition

virtual ClassicalCondition cAlloc(size_t) = 0

cAlloc

Parameters:

size_t  

Returns:

QPanda::ClassicalCondition

virtual std::vector<ClassicalCondition> cAllocMany(size_t) = 0

cAllocMany

Parameters:

size_t count

Returns:

std::vector<QPanda::ClassicalCondition> cbit_vec

virtual void qFree(Qubit*) = 0

qFree

Parameters:

Qubit*  

Returns:

void

virtual void qFreeAll(QVec&) = 0

qFreeAll

Parameters:

QVec&  

Returns:

void

virtual void cFree(ClassicalCondition&) = 0

cFree

Parameters:

ClassicalCondition& cbit

Returns:

void

virtual void cFreeAll(std::vector<ClassicalCondition>&) = 0

cFreeAll

Parameters:

std::vector<ClassicalCondition >& cbit_vec

Returns:

void

virtual size_t getAllocateQubitNum() = 0

getAllocateQubitNum

Returns:

Eigen::size_t count

virtual size_t getAllocateCMemNum() = 0

getAllocateCMemNum

Returns:

Eigen::size_t count

virtual size_t get_allocate_qubits(QVec&) = 0

get allocate qubits

Parameters:

QVec&  

Returns:

size_t allocate qubits size

virtual size_t get_allocate_cbits(std::vector<ClassicalCondition>&) = 0

get allocate cbits

Parameters:

std::vector<ClassicalCondition>&  

Returns:

size_t allocate cbits size

virtual double get_expectation(QProg, const QHamiltonian&, const QVec&) = 0

gets the expected value of the Hamiltonian of the circuit

Parameters:

QProg quantum program
QHamiltonian hamiltonian
QVec qubits

Returns:

double expectation

virtual double get_expectation(QProg, const QHamiltonian&, const QVec&, int) = 0

gets the expected value of the Hamiltonian of the circuit

Parameters:

QProg quantum program
QHamiltonian hamiltonian
QVec qubits
int run shots

Returns:

double expectation