diff --git a/samples/sampler_test.cpp b/samples/sampler_test.cpp index 387f431..6812378 100644 --- a/samples/sampler_test.cpp +++ b/samples/sampler_test.cpp @@ -22,7 +22,12 @@ #include "circuit/quantumcircuit.hpp" #include "primitives/backend_sampler_v2.hpp" +#ifdef QRMI_ROOT #include "service/qiskit_runtime_service_qrmi.hpp" +#else +#include "service/qiskit_runtime_service_c.hpp" +#endif + #include "compiler/transpiler.hpp" using namespace Qiskit; diff --git a/samples/transpile_test.cpp b/samples/transpile_test.cpp index c41487a..67e7e24 100644 --- a/samples/transpile_test.cpp +++ b/samples/transpile_test.cpp @@ -23,7 +23,11 @@ #include "circuit/quantumcircuit.hpp" #include "primitives/backend_sampler_v2.hpp" +#ifdef QRMI_ROOT #include "service/qiskit_runtime_service_qrmi.hpp" +#else +#include "service/qiskit_runtime_service_c.hpp" +#endif #include "compiler/transpiler.hpp" using namespace Qiskit::circuit; @@ -50,12 +54,12 @@ int main() } std::cout << "input circuit" << std::endl; - circ.print(); + circ.draw(); auto transpiled = transpile(circ, backend); std::cout << "transpiled circuit" << std::endl; - transpiled.print(); + transpiled.draw(); return 0; } diff --git a/src/compiler/transpiler.hpp b/src/compiler/transpiler.hpp index 4e8819d..96674db 100644 --- a/src/compiler/transpiler.hpp +++ b/src/compiler/transpiler.hpp @@ -45,7 +45,7 @@ circuit::QuantumCircuit transpile(circuit::QuantumCircuit &circ, providers::Back options.seed = seed_transpiler; options.approximation_degree = approximation_degree; - QkTranspileResult result; + QkTranspileResult result = {nullptr, nullptr}; char *error; QkExitCode ret = qk_transpile(circ.get_rust_circuit().get(), capi_target, &options, &result, &error); diff --git a/src/primitives/containers/bit_array.hpp b/src/primitives/containers/bit_array.hpp index 712f209..f3a6b06 100644 --- a/src/primitives/containers/bit_array.hpp +++ b/src/primitives/containers/bit_array.hpp @@ -77,6 +77,12 @@ class BitArray { return array_.size(); } + /// @brief accessing raw bit array + BitVector& operator[](const uint_t i) + { + return array_[i]; + } + // from simulator samples (< 64 qubits) void from_samples(const reg_t& samples, uint_t num_bits); void from_samples(const uint_t* samples, uint_t num_samples, uint_t num_bits); diff --git a/src/primitives/containers/sampler_pub_result.hpp b/src/primitives/containers/sampler_pub_result.hpp index f0faeff..a936d2f 100644 --- a/src/primitives/containers/sampler_pub_result.hpp +++ b/src/primitives/containers/sampler_pub_result.hpp @@ -137,6 +137,20 @@ class SamplerPubResult { } } + /// @brief add bitstring by hexstring + /// @param str hexstring to be added in data + void set_hexstring(const uint_t i, const std::string& str) + { + BitVector bits; + bits.from_hex_string(str); + + uint_t pos = 0; + // split bitstring and store for each creg + for (auto creg : pub_.circuit().cregs()) { + data_[creg.name()][i] = bits.get_subset(pos, creg.size()); + pos += creg.size(); + } + } }; } // namespace primitives diff --git a/src/providers/qkrt_job.hpp b/src/providers/qkrt_job.hpp index 6d44911..352c829 100644 --- a/src/providers/qkrt_job.hpp +++ b/src/providers/qkrt_job.hpp @@ -106,7 +106,7 @@ class QkrtJob : public providers::Job { bool result(uint_t index, primitives::SamplerPubResult& result) override { Samples *samples; - int ret = qkrt_job_results(&samples, service_.get(), job_.get()); + int ret = qkrt_sampler_job_results(&samples, service_.get(), job_.get()); if (ret != 0) { std::cerr << "ERROR: qkrt_job_results fails with code " << ret << std::endl; return false; @@ -116,7 +116,7 @@ class QkrtJob : public providers::Job { for (size_t i = 0; i< num_samples; i++) { char* sample = qkrt_samples_get_sample(samples, i); std::string ss(sample); - result.data().set_hexstring(i, ss); + result.set_hexstring(i, ss); qkrt_str_free(sample); } qkrt_samples_free(samples); diff --git a/src/transpiler/target.hpp b/src/transpiler/target.hpp index 061e251..6e1391a 100644 --- a/src/transpiler/target.hpp +++ b/src/transpiler/target.hpp @@ -64,6 +64,9 @@ class Target Target(QkTarget* target) { target_ = std::shared_ptr(target, qk_target_free); + num_qubits_ = qk_target_num_qubits(target); + dt_ = qk_target_dt(target); + is_set_ = true; } /// @brief Create a new target