class QPanda::QCircuitRewrite

#include <QCircuitRewrite.h>

class QCircuitRewrite
{
public:
    // structs

    struct SemMatch;
    struct StructMatch;

    // fields

    StructMatch m_struct;
    SemMatch m_sem;
    std::set<int> matched;
    std::vector<std::map<int, int>> match_vertex_list;
    std::vector<std::map<int, int>> match_qubit_list;
    std::vector<std::map<int, double>> match_angle_list;

    // methods

    std::shared_ptr<QProgDAG> generator_to_dag(QCircuitGenerator& cir_gen);

    QProg replace_subgraph(
        std::shared_ptr<QProgDAG> g,
        QCircuitGenerator::Ref cir_gen
        );

    void recursiveMatch(
        std::shared_ptr<QProgDAG> pattern,
        std::shared_ptr<QProgDAG> graph,
        int i = 0
        );

    bool feasibilityRules(
        std::shared_ptr<QProgDAG> pattern,
        std::shared_ptr<QProgDAG> graph,
        int n,
        int m,
        StructMatch& match
        );

    std::shared_ptr<QProg> circuitRewrite(
        QProg prog,
        const std::string& config_data
        );

    static double angle_str_to_double(const std::string angle_str);
};