Skip to content

Commit fe0e666

Browse files
authored
fir for IBM Qiskit Runtime C (#143)
1 parent 4758562 commit fe0e666

7 files changed

Lines changed: 37 additions & 5 deletions

File tree

samples/sampler_test.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,12 @@
2222

2323
#include "circuit/quantumcircuit.hpp"
2424
#include "primitives/backend_sampler_v2.hpp"
25+
#ifdef QRMI_ROOT
2526
#include "service/qiskit_runtime_service_qrmi.hpp"
27+
#else
28+
#include "service/qiskit_runtime_service_c.hpp"
29+
#endif
30+
2631
#include "compiler/transpiler.hpp"
2732

2833
using namespace Qiskit;

samples/transpile_test.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,11 @@
2323
#include "circuit/quantumcircuit.hpp"
2424
#include "primitives/backend_sampler_v2.hpp"
2525

26+
#ifdef QRMI_ROOT
2627
#include "service/qiskit_runtime_service_qrmi.hpp"
28+
#else
29+
#include "service/qiskit_runtime_service_c.hpp"
30+
#endif
2731
#include "compiler/transpiler.hpp"
2832

2933
using namespace Qiskit::circuit;
@@ -50,12 +54,12 @@ int main()
5054
}
5155

5256
std::cout << "input circuit" << std::endl;
53-
circ.print();
57+
circ.draw();
5458

5559
auto transpiled = transpile(circ, backend);
5660

5761
std::cout << "transpiled circuit" << std::endl;
58-
transpiled.print();
62+
transpiled.draw();
5963

6064
return 0;
6165
}

src/compiler/transpiler.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ circuit::QuantumCircuit transpile(circuit::QuantumCircuit &circ, providers::Back
4545
options.seed = seed_transpiler;
4646
options.approximation_degree = approximation_degree;
4747

48-
QkTranspileResult result;
48+
QkTranspileResult result = {nullptr, nullptr};
4949
char *error;
5050

5151
QkExitCode ret = qk_transpile(circ.get_rust_circuit().get(), capi_target, &options, &result, &error);

src/primitives/containers/bit_array.hpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,12 @@ class BitArray {
7777
return array_.size();
7878
}
7979

80+
/// @brief accessing raw bit array
81+
BitVector& operator[](const uint_t i)
82+
{
83+
return array_[i];
84+
}
85+
8086
// from simulator samples (< 64 qubits)
8187
void from_samples(const reg_t& samples, uint_t num_bits);
8288
void from_samples(const uint_t* samples, uint_t num_samples, uint_t num_bits);

src/primitives/containers/sampler_pub_result.hpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,20 @@ class SamplerPubResult {
137137
}
138138
}
139139

140+
/// @brief add bitstring by hexstring
141+
/// @param str hexstring to be added in data
142+
void set_hexstring(const uint_t i, const std::string& str)
143+
{
144+
BitVector bits;
145+
bits.from_hex_string(str);
146+
147+
uint_t pos = 0;
148+
// split bitstring and store for each creg
149+
for (auto creg : pub_.circuit().cregs()) {
150+
data_[creg.name()][i] = bits.get_subset(pos, creg.size());
151+
pos += creg.size();
152+
}
153+
}
140154
};
141155

142156
} // namespace primitives

src/providers/qkrt_job.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ class QkrtJob : public providers::Job {
106106
bool result(uint_t index, primitives::SamplerPubResult& result) override
107107
{
108108
Samples *samples;
109-
int ret = qkrt_job_results(&samples, service_.get(), job_.get());
109+
int ret = qkrt_sampler_job_results(&samples, service_.get(), job_.get());
110110
if (ret != 0) {
111111
std::cerr << "ERROR: qkrt_job_results fails with code " << ret << std::endl;
112112
return false;
@@ -116,7 +116,7 @@ class QkrtJob : public providers::Job {
116116
for (size_t i = 0; i< num_samples; i++) {
117117
char* sample = qkrt_samples_get_sample(samples, i);
118118
std::string ss(sample);
119-
result.data().set_hexstring(i, ss);
119+
result.set_hexstring(i, ss);
120120
qkrt_str_free(sample);
121121
}
122122
qkrt_samples_free(samples);

src/transpiler/target.hpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,9 @@ class Target
6464
Target(QkTarget* target)
6565
{
6666
target_ = std::shared_ptr<QkTarget>(target, qk_target_free);
67+
num_qubits_ = qk_target_num_qubits(target);
68+
dt_ = qk_target_dt(target);
69+
is_set_ = true;
6770
}
6871

6972
/// @brief Create a new target

0 commit comments

Comments
 (0)