| 1696 | } |
| 1697 | |
| 1698 | qreal applyForcedMultiQubitMeasurement(Qureg qureg, int* qubits, int* outcomes, int numQubits) { |
| 1699 | validate_quregFields(qureg, __func__); |
| 1700 | validate_targets(qureg, qubits, numQubits, __func__); |
| 1701 | validate_measurementOutcomesAreValid(outcomes, numQubits, __func__); |
| 1702 | |
| 1703 | auto qubitVec = util_getVector(qubits, numQubits); |
| 1704 | auto outcomeVec = util_getVector(outcomes, numQubits); |
| 1705 | |
| 1706 | // ensure probability of the forced measurement outcome is not negligible |
| 1707 | qreal prob = calcProbOfMultiQubitOutcome(qureg, qubits, outcomes, numQubits); // harmlessly re-validates |
| 1708 | validate_measurementOutcomesProbNotZero(outcomes, numQubits, prob, __func__); |
| 1709 | |
| 1710 | // project to the outcome, renormalising the surviving states |
| 1711 | (qureg.isDensityMatrix)? |
| 1712 | localiser_densmatr_multiQubitProjector(qureg, qubitVec, outcomeVec, prob): |
| 1713 | localiser_statevec_multiQubitProjector(qureg, qubitVec, outcomeVec, prob); |
| 1714 | |
| 1715 | return prob; |
| 1716 | } |
| 1717 | |
| 1718 | } // end de-mangler |
| 1719 |
no test coverage detected