@@ -60,11 +60,11 @@ def uccsd_operator(single_amplitudes, double_amplitudes, anti_hermitian=True):
6060 for i , j in itertools .product (range (n_orbitals ), repeat = 2 ):
6161 if single_amplitudes [i , j ] == 0. :
6262 continue
63- uccsd_generator += FermionOperator (
64- (( i , 1 ), ( j , 0 )), single_amplitudes [i , j ])
65- if ( anti_hermitian ) :
66- uccsd_generator += FermionOperator (
67- (( j , 1 ), ( i , 0 )), - single_amplitudes [i , j ])
63+ uccsd_generator += FermionOperator ((( i , 1 ), ( j , 0 )),
64+ single_amplitudes [i , j ])
65+ if anti_hermitian :
66+ uccsd_generator += FermionOperator ((( j , 1 ), ( i , 0 )),
67+ - single_amplitudes [i , j ])
6868
6969 # Add double excitations
7070 for i , j , k , l in itertools .product (range (n_orbitals ), repeat = 4 ):
@@ -73,11 +73,10 @@ def uccsd_operator(single_amplitudes, double_amplitudes, anti_hermitian=True):
7373 uccsd_generator += FermionOperator (
7474 ((i , 1 ), (j , 0 ), (k , 1 ), (l , 0 )),
7575 double_amplitudes [i , j , k , l ])
76- if ( anti_hermitian ) :
76+ if anti_hermitian :
7777 uccsd_generator += FermionOperator (
7878 ((l , 1 ), (k , 0 ), (j , 1 ), (i , 0 )),
7979 - double_amplitudes [i , j , k , l ])
80-
8180 return uccsd_generator
8281
8382
@@ -126,7 +125,6 @@ def uccsd_singlet_operator(packed_amplitudes,
126125 n_occupied = int (numpy .ceil (n_electrons / 2. ))
127126 n_virtual = int (n_qubits / 2 - n_occupied ) # Virtual Spatial Orbitals
128127 n_t1 = int (n_occupied * n_virtual )
129- n_t2 = int (n_t1 ** 2 )
130128
131129 t1 = packed_amplitudes [:n_t1 ]
132130 t2 = packed_amplitudes [n_t1 :]
@@ -142,38 +140,38 @@ def t2_ind(i, j, k, l):
142140
143141 uccsd_generator = FermionOperator ()
144142
145- for i in range (n_virtual ):
146- for j in range ( n_occupied ):
147- for s1 in range ( 2 ):
148- uccsd_generator += FermionOperator ( (
149- ( 2 * ( i + n_occupied ) + s1 , 1 ),
150- (2 * j + s1 , 0 ) ),
151- t1 [ t1_ind ( i , j )])
152-
153- uccsd_generator += FermionOperator ((
154- ( 2 * j + s1 , 1 ),
155- ( 2 * ( i + n_occupied ) + s1 , 0 )),
156- - t1 [ t1_ind ( i , j )])
157-
158- for i in range ( n_virtual ):
159- for j in range ( n_occupied ):
160- for s1 in range ( 2 ):
161- for k in range ( n_virtual ):
162- for l in range ( n_occupied ):
163- for s2 in range ( 2 ):
164- uccsd_generator += FermionOperator ((
165- (2 * ( i + n_occupied ) + s1 , 1 ),
166- (2 * j + s1 , 0 ),
167- (2 * ( k + n_occupied ) + s2 , 1 ),
168- ( 2 * l + s2 , 0 )),
169- t2 [ t2_ind ( i , j , k , l )])
170-
171- uccsd_generator += FermionOperator ((
172- (2 * l + s2 , 1 ),
173- (2 * ( k + n_occupied ) + s2 , 0 ),
174- (2 * j + s1 , 1 ),
175- ( 2 * ( i + n_occupied ) + s1 , 0 )),
176- - t2 [ t2_ind ( i , j , k , l )])
143+ spaces = range (n_virtual ), range ( n_occupied ), range ( 2 )
144+
145+ for i , j , s in itertools . product ( * spaces ):
146+ uccsd_generator += FermionOperator (
147+ (
148+ (2 * ( i + n_occupied ) + s , 1 ),
149+ ( 2 * j + s , 0 ),
150+ ),
151+ coefficient = t1 [ t1_ind ( i , j )])
152+
153+ uccsd_generator += FermionOperator (
154+ (
155+ ( 2 * j + s , 1 ),
156+ ( 2 * ( i + n_occupied ) + s , 0 ),
157+ ),
158+ coefficient = - t1 [ t1_ind ( i , j )])
159+
160+ for i , j , s , i2 , j2 , s2 in itertools . product ( * spaces , repeat = 2 ):
161+ uccsd_generator += FermionOperator ((
162+ ( 2 * ( i + n_occupied ) + s , 1 ),
163+ (2 * j + s , 0 ),
164+ (2 * ( i2 + n_occupied ) + s2 , 1 ),
165+ (2 * j2 + s2 , 0 ) ),
166+ t2 [ t2_ind ( i , j , i2 , j2 )])
167+
168+ uccsd_generator += FermionOperator ((
169+ ( 2 * j2 + s2 , 1 ),
170+ (2 * ( i2 + n_occupied ) + s2 , 0 ),
171+ (2 * j + s , 1 ),
172+ (2 * ( i + n_occupied ) + s , 0 ) ),
173+ - t2 [ t2_ind ( i , j , i2 , j2 )])
174+
177175 return uccsd_generator
178176
179177
0 commit comments