Commit cf830b9e authored by Dmitry I. Lyakh's avatar Dmitry I. Lyakh
Browse files

Added XACC integration examples for exatn-gen visitor.

parent ba004b4f
Loading
Loading
Loading
Loading
Loading
+346 −0
Original line number Diff line number Diff line
// Generated by f3c++
// https://github.com/QuantumComputingLab/f3cpp

// timestep 5001: hz = -1, Jx = -1 (dt = 0.05)


OPENQASM 2.0;
include "qelib1.inc";

qreg q[8];
rz(-0.449193037874753) q[0];
rz(-1.802073794132532) q[1];
rx(1.570796326794897) q[0];
rx(1.570796326794897) q[1];
cx q[0], q[1];
rx(0.365718050465142) q[0];
rz(0.025198415563410) q[1];
cx q[0], q[1];
rx(-1.570796326794897) q[0];
rx(-1.570796326794897) q[1];
rz(-2.482179400162583) q[0];
rz(-1.549739075009718) q[1];
rz(-3.510878416984094) q[2];
rz(-0.065556960190814) q[3];
rx(1.570796326794897) q[2];
rx(1.570796326794897) q[3];
cx q[2], q[3];
rx(0.665684852507842) q[2];
rz(0.329182668086685) q[3];
cx q[2], q[3];
rx(-1.570796326794897) q[2];
rx(-1.570796326794897) q[3];
rz(1.058388408239514) q[2];
rz(-3.765138338244192) q[3];
rz(-3.207149613780424) q[4];
rz(-0.369285763394639) q[5];
rx(1.570796326794897) q[4];
rx(1.570796326794897) q[5];
cx q[4], q[5];
rx(0.665684852507919) q[4];
rz(0.329182668086869) q[5];
cx q[4], q[5];
rx(-1.570796326794897) q[4];
rx(-1.570796326794897) q[5];
rz(1.523222305110296) q[4];
rz(-4.229972235114819) q[5];
rz(-1.802073794135100) q[6];
rz(-0.449193037872780) q[7];
rx(1.570796326794897) q[6];
rx(1.570796326794897) q[7];
cx q[6], q[7];
rx(0.365718050464814) q[6];
rz(0.025198415563096) q[7];
cx q[6], q[7];
rx(-1.570796326794897) q[6];
rx(-1.570796326794897) q[7];
rz(1.616998309690496) q[6];
rz(-2.584573545752337) q[7];
rz(-4.403784796516012) q[1];
rz(0.277207281097489) q[2];
rx(1.570796326794897) q[1];
rx(1.570796326794897) q[2];
cx q[1], q[2];
rx(1.536185437980538) q[1];
rz(-1.080664403908732) q[2];
cx q[1], q[2];
rx(-1.570796326794897) q[1];
rx(-1.570796326794897) q[2];
rz(1.856043615664599) q[1];
rz(-2.841028477493329) q[2];
rz(-1.323341354144761) q[3];
rz(2.813075963269627) q[4];
rx(1.570796326794897) q[3];
rx(1.570796326794897) q[4];
cx q[3], q[4];
rx(1.433699638074055) q[3];
rz(-1.063667096469060) q[4];
cx q[3], q[4];
rx(-1.570796326794897) q[3];
rx(-1.570796326794897) q[4];
rz(4.384236568155380) q[3];
rz(0.247090694559279) q[4];
rz(-0.717617382728032) q[5];
rz(1.854255779556143) q[6];
rx(1.570796326794897) q[5];
rx(1.570796326794897) q[6];
cx q[5], q[6];
rx(1.536185437980400) q[5];
rz(-1.080664403908949) q[6];
cx q[5], q[6];
rx(-1.570796326794897) q[5];
rx(-1.570796326794897) q[6];
rz(0.283459452761247) q[5];
rz(-2.288413709522929) q[6];
rz(-1.837647508673714) q[0];
rz(-1.596507477795650) q[1];
rx(1.570796326794897) q[0];
rx(1.570796326794897) q[1];
cx q[0], q[1];
rx(1.006979493224224) q[0];
rz(-0.906373195641380) q[1];
cx q[0], q[1];
rx(-1.570796326794897) q[0];
rx(-1.570796326794897) q[1];
rz(-3.180530366764885) q[0];
rz(2.887968033885314) q[1];
rz(-2.573720348002265) q[2];
rz(2.120550402239661) q[3];
rx(1.570796326794897) q[2];
rx(1.570796326794897) q[3];
cx q[2], q[3];
rx(1.465995356145336) q[2];
rz(-1.018361987969408) q[3];
cx q[2], q[3];
rx(-1.570796326794897) q[2];
rx(-1.570796326794897) q[3];
rz(3.689103172365694) q[2];
rz(-1.000680464538505) q[3];
rz(-3.167081684933269) q[4];
rz(0.584977028923230) q[5];
rx(1.570796326794897) q[4];
rx(1.570796326794897) q[5];
cx q[4], q[5];
rx(1.465995356145409) q[4];
rz(-1.018361987969343) q[5];
cx q[4], q[5];
rx(-1.570796326794897) q[4];
rx(-1.570796326794897) q[5];
rz(-0.985819297871667) q[4];
rz(-4.737878011728166) q[5];
rz(-0.593642806197733) q[6];
rz(-1.735253363087105) q[7];
rx(1.570796326794897) q[6];
rx(1.570796326794897) q[7];
cx q[6], q[7];
rx(1.006979493224258) q[6];
rz(-0.906373195641523) q[7];
cx q[6], q[7];
rx(-1.570796326794897) q[6];
rx(-1.570796326794897) q[7];
rz(-3.306049689882002) q[6];
rz(-2.164439132992629) q[7];
rz(-1.638057981268131) q[1];
rz(0.023478160869102) q[2];
rx(1.570796326794897) q[1];
rx(1.570796326794897) q[2];
cx q[1], q[2];
rx(1.279409798001958) q[1];
rz(-1.060228899372801) q[2];
cx q[1], q[2];
rx(-1.570796326794897) q[1];
rx(-1.570796326794897) q[2];
rz(1.593512537295745) q[1];
rz(-0.066499704104980) q[2];
rz(-1.146845459299346) q[3];
rz(-1.161706625968249) q[4];
rx(1.570796326794897) q[3];
rx(1.570796326794897) q[4];
cx q[3], q[4];
rx(1.328961699565094) q[3];
rz(-1.302796152132385) q[4];
cx q[3], q[4];
rx(-1.570796326794897) q[3];
rx(-1.570796326794897) q[4];
rz(-2.732502952763146) q[3];
rz(-2.717641786094243) q[4];
rz(2.167274037783015) q[5];
rz(1.414367088909146) q[6];
rx(1.570796326794897) q[5];
rx(1.570796326794897) q[6];
cx q[5], q[6];
rx(1.279409798001780) q[5];
rz(-1.060228899372882) q[6];
cx q[5], q[6];
rx(-1.570796326794897) q[5];
rx(-1.570796326794897) q[6];
rz(-0.156429237885751) q[5];
rz(0.596477710988119) q[6];
rz(-0.058840384977723) q[0];
rz(-0.475432642731875) q[1];
rx(1.570796326794897) q[0];
rx(1.570796326794897) q[1];
cx q[0], q[1];
rx(1.175552329634451) q[0];
rz(-1.017145323722306) q[1];
cx q[0], q[1];
rx(-1.570796326794897) q[0];
rx(-1.570796326794897) q[1];
rz(1.066052135851758) q[0];
rz(1.541267490028438) q[1];
rz(-3.806440891581418) q[2];
rz(-0.329376417277271) q[3];
rx(1.570796326794897) q[2];
rx(1.570796326794897) q[3];
cx q[2], q[3];
rx(1.487447324472897) q[2];
rz(-1.271273452769990) q[3];
cx q[2], q[3];
rx(-1.570796326794897) q[2];
rx(-1.570796326794897) q[3];
rz(4.383012563107418) q[2];
rz(0.905948088803272) q[3];
rz(-3.485830237533644) q[4];
rz(-0.574918704211103) q[5];
rx(1.570796326794897) q[4];
rx(1.570796326794897) q[5];
cx q[4], q[5];
rx(1.487447324472775) q[4];
rz(-1.271273452770193) q[5];
cx q[4], q[5];
rx(-1.570796326794897) q[4];
rx(-1.570796326794897) q[5];
rz(4.137470276173588) q[4];
rz(1.226558742851046) q[5];
rz(0.521602183575468) q[6];
rz(2.066661034840509) q[7];
rx(1.570796326794897) q[6];
rx(1.570796326794897) q[7];
cx q[6], q[7];
rx(1.175552329634467) q[6];
rz(-1.017145323722361) q[7];
cx q[6], q[7];
rx(-1.570796326794897) q[6];
rx(-1.570796326794897) q[7];
rz(0.495864708045612) q[6];
rz(-1.049194143219429) q[7];
rz(-3.151135919028184) q[1];
rz(0.413547596762959) q[2];
rx(1.570796326794897) q[1];
rx(1.570796326794897) q[2];
cx q[1], q[2];
rx(1.173554777724109) q[1];
rz(-1.053343877095374) q[2];
cx q[1], q[2];
rx(-1.570796326794897) q[1];
rx(-1.570796326794897) q[2];
rz(-1.157248730031938) q[1];
rz(-4.721932245823081) q[2];
rz(-1.534109032905480) q[3];
rz(-1.624038566690313) q[4];
rx(1.570796326794897) q[3];
rx(1.570796326794897) q[4];
cx q[3], q[4];
rx(1.421744642236235) q[3];
rz(-1.386942641312545) q[4];
cx q[3], q[4];
rx(-1.570796326794897) q[3];
rx(-1.570796326794897) q[4];
rz(3.088350413694376) q[3];
rz(3.178279947479210) q[4];
rz(-2.713183890161207) q[5];
rz(1.035859516545434) q[6];
rx(1.570796326794897) q[5];
rx(1.570796326794897) q[6];
cx q[5], q[6];
rx(1.173554777724108) q[5];
rz(-1.053343877095347) q[6];
cx q[5], q[6];
rx(-1.570796326794897) q[5];
rx(-1.570796326794897) q[6];
rz(-0.534936810249463) q[5];
rz(-4.283980216956104) q[6];
rz(-0.114624926055761) q[0];
rz(0.657401090928721) q[1];
rx(1.570796326794897) q[0];
rx(1.570796326794897) q[1];
cx q[0], q[1];
rx(1.195316191593321) q[0];
rz(-0.806471699361508) q[1];
cx q[0], q[1];
rx(-1.570796326794897) q[0];
rx(-1.570796326794897) q[1];
rz(-4.069849056122607) q[0];
rz(1.536001206122710) q[1];
rz(-2.785779920194301) q[2];
rz(1.021756052592507) q[3];
rx(1.570796326794897) q[2];
rx(1.570796326794897) q[3];
cx q[2], q[3];
rx(1.769454995749339) q[2];
rz(-0.939995706278444) q[3];
cx q[2], q[3];
rx(-1.570796326794897) q[2];
rx(-1.570796326794897) q[3];
rz(2.592552379387404) q[2];
rz(-1.214983593399404) q[3];
rz(-2.209766134778581) q[4];
rz(-0.689590048587170) q[5];
rx(1.570796326794897) q[4];
rx(1.570796326794897) q[5];
cx q[4], q[5];
rx(1.769454995749465) q[4];
rz(-0.939995706278364) q[5];
cx q[4], q[5];
rx(-1.570796326794897) q[4];
rx(-1.570796326794897) q[5];
rz(0.881206278207727) q[4];
rz(-0.638969807983685) q[5];
rz(-2.499052729327936) q[6];
rz(-1.140971300574265) q[7];
rx(1.570796326794897) q[6];
rx(1.570796326794897) q[7];
cx q[6], q[7];
rx(1.195316191593379) q[6];
rz(-0.806471699361643) q[7];
cx q[6], q[7];
rx(-1.570796326794897) q[6];
rx(-1.570796326794897) q[7];
rz(3.571417679810425) q[6];
rz(2.213336251056754) q[7];
rz(-0.832200103166020) q[1];
rz(-2.006018711265071) q[2];
rx(1.570796326794897) q[1];
rx(1.570796326794897) q[2];
cx q[1], q[2];
rx(1.450164434944621) q[1];
rz(-0.691409168631536) q[2];
cx q[1], q[2];
rx(-1.570796326794897) q[1];
rx(-1.570796326794897) q[2];
rz(-0.614618265362790) q[1];
rz(-1.060354056756206) q[2];
rz(-4.243760035533803) q[3];
rz(-0.056764599961135) q[4];
rx(1.570796326794897) q[3];
rx(1.570796326794897) q[4];
cx q[3], q[4];
rx(1.572314810168063) q[3];
rz(-0.603967516233261) q[4];
cx q[3], q[4];
rx(-1.570796326794897) q[3];
rx(-1.570796326794897) q[4];
rz(2.336999545742814) q[3];
rz(2.336999545742718) q[4];
rz(-1.916089177484090) q[5];
rz(0.273976076736314) q[6];
rx(1.570796326794897) q[5];
rx(1.570796326794897) q[6];
cx q[5], q[6];
rx(1.450164434944400) q[5];
rz(-0.691409168631768) q[6];
cx q[5], q[6];
rx(-1.570796326794897) q[5];
rx(-1.570796326794897) q[6];
rz(2.081238596833714) q[5];
rz(2.526974388226863) q[6];
+65 −0
Original line number Diff line number Diff line
#include "xacc.hpp"
#include "xacc_service.hpp"
#include "xacc_observable.hpp"

#include <fstream>
#include <string>

const std::string QASM_SRC_FILE = "ASP_8q_5001.qasm";
constexpr int N_QUBITS = 8;

int main(int argc, char **argv) {

    // Initialize:
    xacc::Initialize(argc, argv);
    xacc::set_verbose(true);
    //xacc::logToFile(true);
    //xacc::setLoggingLevel(1);

    // Get Accelerator backend:
    auto accelerator_qpp = xacc::getAccelerator("qpp");
    auto accelerator_tnqvm_gen = xacc::getAccelerator("tnqvm",
                                 {{"tnqvm-visitor", "exatn-gen:float"},
                                  {"exatn-buffer-size-gb", 2},
                                  {"reconstruct-layers", 4},
                                  {"reconstruct-tolerance", 1e-5},
                                  {"max-bond-dim", 32}});
    auto accelerator = accelerator_qpp;

    // Read Source file:
    std::ifstream inFile;
    inFile.open(QASM_SRC_FILE);
    std::stringstream strStream;
    strStream << inFile.rdbuf();
    const std::string qasmSrcStr = strStream.str();

    // Get Compiler:
    auto compiler = xacc::getCompiler("staq");

    // Compile Circuit:
    auto IR = compiler->compile(qasmSrcStr);
    auto program = IR->getComposites()[0];

    // Define Observable:
    const std::string obs_str = [&](){
     std::string result = std::to_string(1.0/static_cast<double>(N_QUBITS)) + " Z0";
     for (int i = 1; i < N_QUBITS; ++i) {
      result += (" + " + std::to_string(1.0/static_cast<double>(N_QUBITS)) + " Z" + std::to_string(i));
     }
     return result;
    }();

    // Generate Composites for Observable:
    auto avg_mag = xacc::quantum::getObservable("pauli", obs_str);
    auto composites = avg_mag->observe(program);

    // Allocate Qubits and execute:
    auto buffer = xacc::qalloc(N_QUBITS);
    accelerator->execute(buffer, composites);
    buffer->print();
    const double avg_mag_result = avg_mag->postProcess(buffer);
    std::cout << "Result: " << avg_mag_result << std::endl;

    // Finalize:
    xacc::Finalize();
}
+51 −0
Original line number Diff line number Diff line
#include "xacc.hpp"
#include "xacc_service.hpp"
#include "xacc_observable.hpp"

#include <fstream>
#include <string>

const std::string QASM_SRC_FILE = "qaoa_14q.qasm";
constexpr int N_QUBITS = 14;

int main(int argc, char **argv) {

    // Initialize:
    xacc::Initialize(argc, argv);
    xacc::set_verbose(true);
    //xacc::logToFile(true);
    //xacc::setLoggingLevel(1);

    // Get Accelerator backend:
    auto accelerator_qpp = xacc::getAccelerator("qpp");
    auto accelerator_tnqvm_gen = xacc::getAccelerator("tnqvm",
                                 {{"tnqvm-visitor", "exatn-gen:float"},
                                  {"exatn-buffer-size-gb", 2},
                                  {"reconstruct-layers", 4},
                                  {"reconstruct-tolerance", 1e-5},
                                  {"max-bond-dim", 32}});
    auto accelerator = accelerator_qpp;

    // Read Source file:
    std::ifstream inFile;
    inFile.open(QASM_SRC_FILE);
    std::stringstream strStream;
    strStream << inFile.rdbuf();
    const std::string qasmSrcStr = strStream.str();

    // Get Compiler:
    auto compiler = xacc::getCompiler("staq");

    // Compile:
    auto IR = compiler->compile(qasmSrcStr);
    auto program = IR->getComposites()[0];

    // Execute:
    auto buffer = xacc::qalloc(N_QUBITS);
    accelerator->execute(buffer, program);
    buffer->print();
    std::cout << "Result: " << buffer->getExpectationValueZ() << std::endl;

    // Finalize:
    xacc::Finalize();
}
+5 −0
Original line number Diff line number Diff line
mpicxx -std=c++17 -I$HOME/.xacc/include/xacc -I$HOME/.xacc/include/quantum/gate -I$HOME/.xacc/include/cppmicroservices4 -c main_asp.cpp -o main_asp.o
mpicxx main_asp.o -Wl,-rpath,$HOME/.xacc/lib -L$HOME/.xacc/lib -lxacc -lxacc-quantum-gate -o main_asp.x

mpicxx -std=c++17 -I$HOME/.xacc/include/xacc -I$HOME/.xacc/include/quantum/gate -I$HOME/.xacc/include/cppmicroservices4 -c main_qaoa.cpp -o main_qaoa.o
mpicxx main_qaoa.o -Wl,-rpath,$HOME/.xacc/lib -L$HOME/.xacc/lib -lxacc -lxacc-quantum-gate -o main_qaoa.x
+209 −0
Original line number Diff line number Diff line
// OPENQASM 3;

OPENQASM 2.0;
include "qelib1.inc";

qreg q[14];
creg q_c[14];
h q[10];
h q[6];
h q[3];
h q[5];
h q[12];
h q[4];
h q[9];
h q[8];
h q[2];
h q[7];
h q[0];
h q[1];
h q[13];
h q[11];
CX q[10], q[6];
rz(0.1299040000000000) q[6];
CX q[10], q[6];
CX q[10], q[3];
rz(0.1299040000000000) q[3];
CX q[10], q[3];
CX q[10], q[5];
rz(0.1299040000000000) q[5];
CX q[10], q[5];
CX q[6], q[12];
rz(0.1299040000000000) q[12];
CX q[6], q[12];
CX q[6], q[4];
rz(0.1299040000000000) q[4];
CX q[6], q[4];
CX q[3], q[9];
rz(0.1299040000000000) q[9];
CX q[3], q[9];
CX q[3], q[8];
rz(0.1299040000000000) q[8];
CX q[3], q[8];
CX q[3], q[2];
rz(0.1299040000000000) q[2];
CX q[3], q[2];
CX q[5], q[7];
rz(0.1299040000000000) q[7];
CX q[5], q[7];
CX q[5], q[0];
rz(0.1299040000000000) q[0];
CX q[5], q[0];
CX q[9], q[1];
rz(0.1299040000000000) q[1];
CX q[9], q[1];
CX q[9], q[13];
rz(0.1299040000000000) q[13];
CX q[9], q[13];
CX q[8], q[1];
rz(0.1299040000000000) q[1];
CX q[8], q[1];
CX q[8], q[11];
rz(0.1299040000000000) q[11];
CX q[8], q[11];
CX q[2], q[12];
rz(0.1299040000000000) q[12];
CX q[2], q[12];
CX q[2], q[7];
rz(0.1299040000000000) q[7];
CX q[2], q[7];
CX q[2], q[13];
rz(0.1299040000000000) q[13];
CX q[2], q[13];
h q[10];
rz(-0.2808110000000000) q[10];
h q[10];
h q[6];
rz(-0.2808110000000000) q[6];
h q[6];
h q[3];
rz(-0.2808110000000000) q[3];
h q[3];
h q[5];
rz(-0.2808110000000000) q[5];
h q[5];
h q[12];
rz(-0.2808110000000000) q[12];
h q[12];
h q[4];
rz(-0.2808110000000000) q[4];
h q[4];
h q[9];
rz(-0.2808110000000000) q[9];
h q[9];
h q[8];
rz(-0.2808110000000000) q[8];
h q[8];
h q[2];
rz(-0.2808110000000000) q[2];
h q[2];
h q[7];
rz(-0.2808110000000000) q[7];
h q[7];
h q[0];
rz(-0.2808110000000000) q[0];
h q[0];
h q[1];
rz(-0.2808110000000000) q[1];
h q[1];
h q[13];
rz(-0.2808110000000000) q[13];
h q[13];
h q[11];
rz(-0.2808110000000000) q[11];
h q[11];
CX q[10], q[6];
rz(0.2561770000000000) q[6];
CX q[10], q[6];
CX q[10], q[3];
rz(0.2561770000000000) q[3];
CX q[10], q[3];
CX q[10], q[5];
rz(0.2561770000000000) q[5];
CX q[10], q[5];
CX q[6], q[12];
rz(0.2561770000000000) q[12];
CX q[6], q[12];
CX q[6], q[4];
rz(0.2561770000000000) q[4];
CX q[6], q[4];
CX q[3], q[9];
rz(0.2561770000000000) q[9];
CX q[3], q[9];
CX q[3], q[8];
rz(0.2561770000000000) q[8];
CX q[3], q[8];
CX q[3], q[2];
rz(0.2561770000000000) q[2];
CX q[3], q[2];
CX q[5], q[7];
rz(0.2561770000000000) q[7];
CX q[5], q[7];
CX q[5], q[0];
rz(0.2561770000000000) q[0];
CX q[5], q[0];
CX q[9], q[1];
rz(0.2561770000000000) q[1];
CX q[9], q[1];
CX q[9], q[13];
rz(0.2561770000000000) q[13];
CX q[9], q[13];
CX q[8], q[1];
rz(0.2561770000000000) q[1];
CX q[8], q[1];
CX q[8], q[11];
rz(0.2561770000000000) q[11];
CX q[8], q[11];
CX q[2], q[12];
rz(0.2561770000000000) q[12];
CX q[2], q[12];
CX q[2], q[7];
rz(0.2561770000000000) q[7];
CX q[2], q[7];
CX q[2], q[13];
rz(0.2561770000000000) q[13];
CX q[2], q[13];
h q[10];
rz(-0.1660530000000000) q[10];
h q[10];
h q[6];
rz(-0.1660530000000000) q[6];
h q[6];
h q[3];
rz(-0.1660530000000000) q[3];
h q[3];
h q[5];
rz(-0.1660530000000000) q[5];
h q[5];
h q[12];
rz(-0.1660530000000000) q[12];
h q[12];
h q[4];
rz(-0.1660530000000000) q[4];
h q[4];
h q[9];
rz(-0.1660530000000000) q[9];
h q[9];
h q[8];
rz(-0.1660530000000000) q[8];
h q[8];
h q[2];
rz(-0.1660530000000000) q[2];
h q[2];
h q[7];
rz(-0.1660530000000000) q[7];
h q[7];
h q[0];
rz(-0.1660530000000000) q[0];
h q[0];
h q[1];
rz(-0.1660530000000000) q[1];
h q[1];
h q[13];
rz(-0.1660530000000000) q[13];
h q[13];
h q[11];
rz(-0.1660530000000000) q[11];
h q[11];
measure q[6] -> q_c[6];
measure q[10] -> q_c[10];
Loading