170 std::shared_ptr<Circuits::Circuit<Time>> newDistributedCircuit =
171 std::make_shared<Circuits::Circuit<Time>>();
173 for (
const auto &op : distCirc->GetOperations()) {
178 switch (op->GetType()) {
180 std::unordered_map<size_t,
181 std::vector<std::pair<Types::qubit_t, size_t>>>
183 const auto qbits = op->AffectedQubits();
184 const auto cbits = op->AffectedBits();
186 for (
size_t q = 0; q < qbits.size(); ++q) {
187 const size_t host = network->GetHostIdForAnyQubit(qbits[q]);
188 bits[host].push_back({qbits[q], cbits[q]});
191 for (
const auto &hostQubits : bits)
192 newDistributedCircuit->AddOperation(
197 std::unordered_map<size_t,
198 std::vector<std::pair<Types::qubit_t, size_t>>>
201 std::static_pointer_cast<Circuits::ConditionalMeasurement<Time>>(
204 const auto qbits = condOp->GetOperation()->AffectedQubits();
205 const auto cbits = condOp->GetOperation()->AffectedBits();
207 for (
size_t q = 0; q < qbits.size(); ++q) {
208 const size_t host = network->GetHostIdForAnyQubit(qbits[q]);
209 bits[host].push_back({qbits[q], cbits[q]});
212 for (
const auto &hostQubits : bits) {
214 std::make_shared<Circuits::MeasurementOperation<Time>>(
216 newDistributedCircuit->AddOperation(
219 condOp->GetCondition()));
223 std::unordered_map<size_t, Types::qubits_vector> bits;
224 const auto qbits = op->AffectedQubits();
226 for (
const auto q : qbits) {
227 const size_t host = network->GetHostIdForAnyQubit(q);
228 bits[host].emplace_back(q);
231 for (
const auto &hostQubits : bits)
232 newDistributedCircuit->AddOperation(
236 std::unordered_map<size_t, std::vector<size_t>> bits;
237 const std::vector<size_t> cbits = op->AffectedBits();
239 for (
const size_t c : cbits) {
240 const size_t host = network->GetHostIdForClassicalBit(c);
241 bits[host].emplace_back(c);
244 for (
const auto &hostQubits : bits)
245 newDistributedCircuit->AddOperation(
249 std::unordered_map<size_t, std::vector<size_t>> bits;
254 std::static_pointer_cast<Circuits::ConditionalRandomGen<Time>>(
256 const std::vector<size_t> cbits =
257 condOp->GetOperation()->AffectedBits();
259 for (
const size_t c : cbits) {
260 const size_t host = network->GetHostIdForClassicalBit(c);
261 bits[host].emplace_back(c);
264 for (
const auto &hostQubits : bits) {
266 std::make_shared<Circuits::Random<Time>>(hostQubits.second);
267 newDistributedCircuit->AddOperation(
270 condOp->GetCondition()));
274 newDistributedCircuit->AddOperation(op);
279 return newDistributedCircuit;