pychemiq.Utils#

Module Contents#

Functions#

pychemiq.Utils.get_cc_n_term(n_qubits, n_elec, excited_level)#

得到指定激发水平的耦合簇算符项数。例如:对于4个量子比特,2电子体系的单双激发耦合簇算符,自旋轨道0和1为占据态,故耦合簇项数为五项:0->2,0->3,1->2,1->3,01->23。

Parameters:
  • n_qubits (int) – 输入计算所需的量子比特数。

  • n_elec (int) – 输入分子体系的电子数。

  • excited_level (str) – 输入耦合簇算符的激发水平。目前可选:CCS、CCD、CCSD。

Returns:

输出指定激发水平的耦合簇算符项数。整数型。

pychemiq.Utils.get_cc(n_qubits, n_elec, para, excited_level='SD')#

得到含参的指定激发水平的耦合簇算符。例如:对于4个量子比特,2电子体系的单双激发耦合簇算符,自旋轨道0和1为占据态,故激发后的耦合簇项为:0->2,0->3,1->2,1->3,01->23。输出的费米子算符为:{ {“2+ 0”:para[0]},{“3+ 0”:para[1]},{“2+ 1”:para[2]},{“3+ 1”:para[3]}, {“3+ 2+ 1 0”:para[4]} }

Parameters:
  • n_qubits (int) – 输入计算所需的量子比特数。

  • n_elec (int) – 输入分子体系的电子数。

  • para (list[float]) – 输入初始参数列表。

  • excited_level (str) – 输入耦合簇算符的激发水平。目前可选:CCS、CCD、CCSD。默认为单双激发耦合簇算符(CCSD)。

Returns:

输出指定激发水平的耦合簇算符。费米子算符类。

pychemiq.Utils.transCC2UCC(Pauli)#

只有酉算子才可以放在量子线路上进行模拟。该函数在耦合簇算符的基础上,将其中不是厄米矩阵的算子删去,构造出“酉算子版本”的耦合簇算符。

Parameters:

Pauli (PauliOperator) – 输入耦合簇算符。泡利算符类。

Returns:

输出酉耦合簇算符。泡利算符类。


接口示例:

下面这个例子中,我们计算4个量子比特,2电子体系的单双激发耦合簇算符,并将其转化为可以直接构建量子线路拟设的酉耦合簇算符。

from pychemiq.Utils import get_cc_n_term,get_cc,transCC2UCC
from pychemiq.Transform.Mapping import jordan_wigner
import numpy as np

# 计算4个量子比特,2电子体系的单双激发耦合簇算符的项数来初始化参数列表,这里我们先令初参为全1的列表
n_para = get_cc_n_term(4,2,"CCSD")
para = np.ones(n_para)

# 打印设定初参后,4个量子比特,2电子体系的单双激发耦合簇算符
cc_fermion = get_cc(4,2,para,"CCSD")
print(cc_fermion)

打印的结果为:

{
2+ 0 : 1.000000
3+ 0 : 1.000000
2+ 1 : 1.000000
3+ 1 : 1.000000
3+ 2+ 1 0 : 1.000000
}
# 接着使用JW映射将费米子算符映射成泡利算符
cc_pauli = jordan_wigner(cc_fermion)
# 将非酉耦合簇算符删去,留下酉耦合簇算符
ucc_pauli = transCC2UCC(cc_pauli)
print(ucc_pauli)

打印的结果为:

{
"X0 X1 X2 Y3" : -0.125000,
"X0 X1 Y2 X3" : -0.125000,
"X0 Y1 X2 X3" : 0.125000,
"X0 Y1 Y2 Y3" : -0.125000,
"X0 Z1 Y2" : 0.500000,
"X0 Z1 Z2 Y3" : 0.500000,
"X1 Y2" : 0.500000,
"X1 Z2 Y3" : 0.500000,
"Y0 X1 X2 X3" : 0.125000,
"Y0 X1 Y2 Y3" : -0.125000,
"Y0 Y1 X2 Y3" : 0.125000,
"Y0 Y1 Y2 X3" : 0.125000,
"Y0 Z1 X2" : -0.500000,
"Y0 Z1 Z2 X3" : -0.500000,
"Y1 X2" : -0.500000,
"Y1 Z2 X3" : -0.500000
}