| 47 | |
| 48 | |
| 49 | qcomp calcInnerProduct(Qureg quregA, Qureg quregB) { |
| 50 | validate_quregFields(quregA, __func__); |
| 51 | validate_quregFields(quregB, __func__); |
| 52 | validate_quregsCanBeProducted(quregA, quregB, __func__); |
| 53 | |
| 54 | // <A|B> or Tr(A^dagger B) = <<A|B>> |
| 55 | if (quregA.isDensityMatrix == quregB.isDensityMatrix) |
| 56 | return localiser_statevec_calcInnerProduct(quregA, quregB); |
| 57 | |
| 58 | return (quregA.isDensityMatrix)? |
| 59 | localiser_densmatr_calcFidelityWithPureState(quregA, quregB, true): // <B|A^dagger|B> |
| 60 | localiser_densmatr_calcFidelityWithPureState(quregB, quregA, false); // <A|B|A> |
| 61 | } |
| 62 | extern "C" void _wrap_calcInnerProduct(Qureg bra, Qureg ket, qcomp* out) { |
| 63 | |
| 64 | *out = calcInnerProduct(bra, ket); |
no test coverage detected