Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
NVIDIA
GitHub Repository: NVIDIA/cuda-q-academic
Path: blob/main/chemistry-simulations/aux_files/krylov/qchem/operator_pool.py
583 views
1
from cudaq import spin
2
from aux_files.krylov.qchem.uccsd import uccsd_get_excitation_list, add_single_excitation, add_double_excitation
3
import numpy as np
4
5
6
def get_uccsd_pool(nelectrons, n_qubits, spin=0):
7
8
singles_alpha, singles_beta, doubles_mixed, doubles_alpha, doubles_beta = \
9
uccsd_get_excitation_list(nelectrons, n_qubits, spin)
10
11
n_alpha_singles = len(singles_alpha)
12
n_beta_singles = len(singles_beta)
13
n_mixed_doubles = len(doubles_mixed)
14
n_alpha_doubles = len(doubles_alpha)
15
n_beta_doubles = len(doubles_beta)
16
17
pool_op = []
18
19
for i in range(n_alpha_singles):
20
p_alpha_occ, q_alpha_virt = singles_alpha[i]
21
add_single_excitation(pool_op, p_alpha_occ, q_alpha_virt)
22
23
for i in range(n_beta_singles):
24
p_beta_occ, q_beta_virt = singles_beta[i]
25
add_single_excitation(pool_op, p_beta_occ, q_beta_virt)
26
27
for i in range(n_mixed_doubles):
28
p_alpha_occ, q_beta_occ, r_beta_virt, s_alpha_virt = doubles_mixed[i]
29
add_double_excitation(pool_op, p_alpha_occ, q_beta_occ, r_beta_virt,
30
s_alpha_virt)
31
32
for i in range(n_alpha_doubles):
33
p_alpha_occ, q_alpha_occ, r_alpha_virt, s_alpha_virt = doubles_alpha[i]
34
add_double_excitation(pool_op, p_alpha_occ, q_alpha_occ, r_alpha_virt,
35
s_alpha_virt)
36
37
for i in range(n_beta_doubles):
38
p_beta_occ, q_beta_occ, r_beta_virt, s_beta_virt = doubles_beta[i]
39
40
add_double_excitation(pool_op, p_beta_occ, q_beta_occ, r_beta_virt,
41
s_beta_virt)
42
43
sign_pool = []
44
mod_pool = []
45
for i in range(len(pool_op)):
46
op_i = pool_op[i]
47
48
temp_op = []
49
temp_coef = []
50
51
for term in op_i:
52
temp_coef.append(term.evaluate_coefficient())
53
temp_op.append(term.get_pauli_word(n_qubits))
54
55
56
mod_pool.append(temp_op)
57
sign_pool.append(temp_coef)
58
59
return pool_op, mod_pool, sign_pool
60
61