@@ -284,15 +284,13 @@ bool QTensorNetwork::ForceM(bitLenInt qubit, bool result, bool doForce, bool doA
284
284
nonMeasuredQubits.push_back (i);
285
285
}
286
286
std::map<bitLenInt, bool > m = measurements[layerId];
287
- std::vector<bool > eigens (qubitCount, false );
288
287
for (const bitLenInt& q : nonMeasuredQubits) {
289
288
size_t layer = layerId;
290
289
eigen = false ;
291
290
while (true ) {
292
291
std::map<bitLenInt, bool >& ml = measurements[layer];
293
292
if (ml.find (q) != ml.end ()) {
294
293
m[q] = ml[q] ^ eigen;
295
- eigens[q] = eigen;
296
294
break ;
297
295
}
298
296
if (circuit[layer]->IsNonClassicalTarget (q, &eigen)) {
@@ -301,7 +299,6 @@ bool QTensorNetwork::ForceM(bitLenInt qubit, bool result, bool doForce, bool doA
301
299
}
302
300
if (!layer) {
303
301
m[q] = eigen;
304
- eigens[q] = eigen;
305
302
break ;
306
303
}
307
304
--layer;
@@ -318,24 +315,14 @@ bool QTensorNetwork::ForceM(bitLenInt qubit, bool result, bool doForce, bool doA
318
315
measurements.erase (measurements.begin () + layerId - i);
319
316
}
320
317
circuit[0U ] = std::make_shared<QCircuit>();
321
- measurements[ 0U ] = m ;
318
+ measurements. erase (measurements. begin ()) ;
322
319
323
320
// Sync layer 0U as state preparation for deterministic measurement.
324
321
QRACK_CONST complex pauliX[4U ]{ ZERO_CMPLX, ONE_CMPLX, ONE_CMPLX, ZERO_CMPLX };
325
322
for (const auto & b : m) {
326
323
if (b.second ) {
327
324
circuit[0U ]->AppendGate (std::make_shared<QCircuitGate>(b.first , pauliX));
328
325
}
329
- if (b.second != eigens[b.first ]) {
330
- if (!b.second ) {
331
- circuit[0U ]->AppendGate (std::make_shared<QCircuitGate>(b.first , pauliX));
332
- continue ;
333
- }
334
- if (circuit.size () < 2U ) {
335
- circuit.emplace_back ();
336
- }
337
- circuit[1U ]->AppendGate (std::make_shared<QCircuitGate>(b.first , pauliX));
338
- }
339
326
}
340
327
341
328
// Tell the user the result.
0 commit comments