| 59 | |
| 60 | |
| 61 | qreal getRefProbInner(auto& state, vector<int> targets, vector<int> outcomes) { |
| 62 | DEMAND( getLog2(state.size()) > *std::max_element(targets.begin(), targets.end()) ); |
| 63 | DEMAND( targets.size() == outcomes.size() ); |
| 64 | |
| 65 | // <psi| (|o><o| (x) I) |psi> = Tr( (|o><o| (x) I) rho) |
| 66 | int numQubits = getLog2(state.size()); |
| 67 | qmatrix projector = getProjector(targets, outcomes, numQubits); |
| 68 | qcomp value = getReferenceExpectationValue(state, projector); // ~0 |
| 69 | return std::real(value); |
| 70 | } |
| 71 | qreal getReferenceProbability(qvector state, vector<int> targets, vector<int> outcomes) { return getRefProbInner(state, targets, outcomes); } |
| 72 | qreal getReferenceProbability(qmatrix state, vector<int> targets, vector<int> outcomes) { return getRefProbInner(state, targets, outcomes); } |
| 73 |
no test coverage detected