5 using Unitary = KernelSignature<qreg>;
6 using StatePrep = KernelSignature<qreg>;
9 __qpu__
void __quantum_hadamard_test(qreg q, StatePrep state_prep,
11 auto test_qubit = q.head();
12 auto psi = q.extract_range({1,
static_cast<std::size_t
>(q.size())});
21 unitary.ctrl(test_qubit, psi);
32 double hadamard_test(StatePrep state_prep, Unitary unitary,
34 auto q = qalloc(n_state_qubits + 1);
35 __quantum_hadamard_test(q, state_prep, unitary);
39 auto counts = q.counts();
45 double count1 = (double)q.counts().find(
"1")->second;
46 double count2 = (double)q.counts().find(
"0")->second;
47 return std::fabs((count1 - count2) / (count1 + count2));