6 __qpu__
void pauli_trotter_evolution(qreg q, qcor::PauliOperator pauli_ham,
7 double evo_time,
int num_time_slices) {
8 const double theta = evo_time / num_time_slices;
9 for (
int i = 0; i < num_time_slices; ++i) {
10 exp_i_theta(q, theta, pauli_ham);
15 __qpu__
void pauli_power_trotter_evolution(qreg q,
16 qcor::PauliOperator pauli_ham,
17 double evo_time,
int num_time_slices,
19 for (
int i = 0; i < power; ++i) {
20 pauli_trotter_evolution(q, pauli_ham, evo_time, num_time_slices);
30 __qpu__
void pauli_qpe_iter(qreg q,
int k,
double omega,
31 qcor::PauliOperator pauli_ham,
int num_time_slices,
34 auto anc_idx = q.size() - 1;
38 int power = 1 << (k - 1);
39 double evo_time = -2 * M_PI;
40 pauli_power_trotter_evolution::ctrl(anc_idx, q, pauli_ham, evo_time,
41 num_time_slices, power);
44 Rz(q[anc_idx], omega);