171 std::shared_ptr<Circuits::Circuit<Time>> newDistributedCircuit =
172 std::make_shared<Circuits::Circuit<Time>>();
174 for (
const auto &op : distCirc->GetOperations()) {
179 switch (op->GetType()) {
181 std::unordered_map<size_t,
182 std::vector<std::pair<Types::qubit_t, size_t>>>
184 const auto qbits = op->AffectedQubits();
185 const auto cbits = op->AffectedBits();
187 for (
size_t q = 0; q < qbits.size(); ++q) {
188 const size_t host = network->GetHostIdForAnyQubit(qbits[q]);
189 bits[host].push_back({qbits[q], cbits[q]});
192 for (
const auto &hostQubits : bits)
193 newDistributedCircuit->AddOperation(
198 std::unordered_map<size_t,
199 std::vector<std::pair<Types::qubit_t, size_t>>>
202 std::static_pointer_cast<Circuits::ConditionalMeasurement<Time>>(
205 const auto qbits = condOp->GetOperation()->AffectedQubits();
206 const auto cbits = condOp->GetOperation()->AffectedBits();
208 for (
size_t q = 0; q < qbits.size(); ++q) {
209 const size_t host = network->GetHostIdForAnyQubit(qbits[q]);
210 bits[host].push_back({qbits[q], cbits[q]});
213 for (
const auto &hostQubits : bits) {
214 auto measOp = std::make_shared<Circuits::MeasurementOperation<Time>>(
216 newDistributedCircuit->AddOperation(
218 measOp, condOp->GetCondition()));
222 std::unordered_map<size_t, Types::qubits_vector> bits;
223 const auto qbits = op->AffectedQubits();
225 for (
const auto q : qbits) {
226 const size_t host = network->GetHostIdForAnyQubit(q);
227 bits[host].emplace_back(q);
230 for (
const auto &hostQubits : bits)
231 newDistributedCircuit->AddOperation(
235 std::unordered_map<size_t, std::vector<size_t>> bits;
236 const std::vector<size_t> cbits = op->AffectedBits();
238 for (
const size_t c : cbits) {
239 const size_t host = network->GetHostIdForClassicalBit(c);
240 bits[host].emplace_back(c);
243 for (
const auto &hostQubits : bits)
244 newDistributedCircuit->AddOperation(
248 std::unordered_map<size_t, std::vector<size_t>> bits;
253 std::static_pointer_cast<Circuits::ConditionalRandomGen<Time>>(op);
254 const std::vector<size_t> cbits =
255 condOp->GetOperation()->AffectedBits();
257 for (
const size_t c : cbits) {
258 const size_t host = network->GetHostIdForClassicalBit(c);
259 bits[host].emplace_back(c);
262 for (
const auto &hostQubits : bits) {
264 std::make_shared<Circuits::Random<Time>>(hostQubits.second);
265 newDistributedCircuit->AddOperation(
268 condOp->GetCondition()));
272 newDistributedCircuit->AddOperation(op);
277 return newDistributedCircuit;