class QPanda::QCodarMatch

Overview

A Contextual Duration-Aware Qubit Mapping (CODAR) More…

#include <QCodarMatch.h>

class QCodarMatch: public QPanda::TraversalInterface
{
public:
    // construction

    QCodarMatch(
        QuantumMachine* machine,
        QProg prog,
        QCodarGridDevice arch_type,
        int m,
        int n,
        const std::string config_data = CONFIG_PATH
        );

    // methods

    void initScheduler(
        QCodarGridDevice arch_type,
        size_t qubits
        );

    void initGridDevice(
        QCodarGridDevice arch_type,
        int& m,
        int& n
        );

    void mappingQProg(size_t run_times, QVec& qv, QProg& mapped_prog);

    void buildResultingQProg(
        const std::vector<GateInfo> resulting_gates,
        const std::vector<int> map_vec,
        QVec& q,
        QProg& prog
        );

    void traversalQProgParsingInfo(QProg* prog);

    virtual void execute(
        std::shared_ptr<AbstractQGateNode> cur_node,
        std::shared_ptr<QNode> parent_node,
        bool&
        );

    virtual void execute(
        std::shared_ptr<AbstractQuantumMeasure> cur_node,
        std::shared_ptr<QNode> parent_node,
        bool&
        );

    virtual void execute(
        std::shared_ptr<AbstractQuantumReset> cur_node,
        std::shared_ptr<QNode> parent_node,
        bool&
        );

    virtual void execute(
        std::shared_ptr<AbstractControlFlowNode> cur_node,
        std::shared_ptr<QNode> parent_node,
        bool&
        );

    virtual void execute(
        std::shared_ptr<AbstractQuantumCircuit> cur_node,
        std::shared_ptr<QNode> parent_node,
        bool&
        );

    virtual void execute(
        std::shared_ptr<AbstractQuantumProgram> cur_node,
        std::shared_ptr<QNode> parent_node,
        bool&
        );

    virtual void execute(
        std::shared_ptr<AbstractClassicalProg> cur_node,
        std::shared_ptr<QNode> parent_node,
        bool&
        );
};

Inherited Members

public:
    // methods

    virtual void execute(
        std::shared_ptr<AbstractQGateNode> cur_node,
        std::shared_ptr<QNode> parent_node,
        Args&&... func_args
        );

    virtual void execute(
        std::shared_ptr<AbstractQuantumMeasure> cur_node,
        std::shared_ptr<QNode> parent_node,
        Args&&... func_args
        );

    virtual void execute(
        std::shared_ptr<AbstractQuantumReset> cur_node,
        std::shared_ptr<QNode> parent_node,
        Args&&... func_args
        );

    virtual void execute(
        std::shared_ptr<AbstractControlFlowNode> cur_node,
        std::shared_ptr<QNode> parent_node,
        Args&&... func_args
        );

    virtual void execute(
        std::shared_ptr<AbstractQuantumCircuit> cur_node,
        std::shared_ptr<QNode> parent_node,
        Args&&... func_args
        );

    virtual void execute(
        std::shared_ptr<AbstractQuantumProgram> cur_node,
        std::shared_ptr<QNode> parent_node,
        Args&&... func_args
        );

    virtual void execute(
        std::shared_ptr<AbstractClassicalProg> cur_node,
        std::shared_ptr<QNode> parent_node,
        Args&&... func_args
        );

Detailed Documentation

A Contextual Duration-Aware Qubit Mapping (CODAR)

Methods

void mappingQProg(size_t run_times, QVec& qv, QProg& mapped_prog)

Mapping qubits in a quantum program.

Parameters:

size_t

run_times : the number of times run the remapping

QVec

qubits vector

Qprog&

the mapped quantum program

Returns:

void

void buildResultingQProg(
    const std::vector<GateInfo> resulting_gates,
    const std::vector<int> map_vec,
    QVec& q,
    QProg& prog
    )

build QProg by the mapping results

Parameters:

std::vector<GateInfo>

gates info vector

std::vector<int>

map vector

Qprog&

the mapped quantum program

Returns:

void

void traversalQProgParsingInfo(QProg* prog)

traversal quantum program and Parsing quantum program information

Parameters:

QProg*

quantum program pointer

Returns:

void