qml.pauli

概述

该模块定义了生成和操作保利群元素的函数和类。它还包含一个子包 pauli/grouping 用于测量优化中使用的保利词分区功能。

函数

are_identical_pauli_words(pauli_1, pauli_2)

检查两个保利词是否具有相同的 wiresname 属性。

are_pauli_words_qwc(lst_pauli_words)

给定一组假定为有效的保利可观测量的可观测量,确定它们是否两两量子比特间相互对易。

binary_to_pauli(binary_vector[, wire_map])

将一个偶数维度的二进制向量转换为可观测实例。

compute_partition_indices(可观测量[, ...])

计算使用指定分组类型和图着色方法的可观测量列表的分区索引。

diagonalize_pauli_word(pauli_word)

将保利字转换为计算基中的对角形式。

diagonalize_qwc_groupings(qwc_groupings)

对保利字符串的量子比特逐项可交换分组列表进行对角化。

diagonalize_qwc_pauli_words(qwc_grouping)

对一组相互之间逐比特可换的保利词进行对角化。

group_observables(可观测量[, ...])

根据二元关系(按量子比特的交换、完全交换或反交换)将可观察量(Pauli操作及其张量积)分组。

is_pauli_word(可观察量)

检查一个可观察实例是否仅由保利算子和恒等算子组成。

is_qwc(pauli_vec_1, pauli_vec_2)

检查二进制向量表示中的两个保利词是否在量子位上是可交换的。

observables_to_binary_matrix(observables[, ...])

将保利字的列表转换为一个矩阵,其中每一行是observables的二进制向量(辛几何)表示。

optimize_measurements(可观测量[, ...])

然后对一系列保利词进行对角化,方便在一个分区内同时测量所有可观察量。

partition_pauli_group(n_qubits)

\(n\)量子比特保利群划分为量子比特逐项对易的项。

pauli_decompose(H[, hide_identity, ...])

将一个厄米矩阵分解为保利算子的线性组合。

pauli_eigs(n)

对于 \(A^{\otimes n}\) 的特征值,其中 \(A\) 是保利算子,或共享其特征值。

pauli_group(n_qubits[, wire_map])

生成\(n\)-量子比特保利群。

pauli_sentence(op)

返回算术算子或哈密顿量的 PauliSentence 表示。

pauli_to_binary(pauli_word[, n_qubits, ...])

将保利字转换为二进制向量(辛)表示。

pauli_word_prefactor(observable)

如果提供的算子是一个有效的保利字(即可能是保利算子的张量积的单个项),那么该函数提取前因子。

pauli_word_to_matrix(pauli_word[, wire_map])

将保利词从张量转换为其矩阵表示。

pauli_word_to_string(pauli_word[, wire_map])

将Pauli词转换为字符串。

qwc_complement_adj_matrix(binary_observables)

获取给定观测值集合在二进制表示下的量子比特交换图的互补图的邻接矩阵。

qwc_rotation(pauli_operators)

对保利字的单位进行对角化的电路实现。

string_to_pauli_word(pauli_string[, wire_map])

根据给定的线图将一个字符串转换为由 'I', 'X', 'Y''Z' 组成的 Pauli 词。

PauliGroupingStrategy(观测量[, ...])

用于根据某些二元对称关系对保利字列表进行分区的类。

PauliSentence

字典表示保利字的线性组合,其中键为PauliWord实例,值对应于系数。

PauliVSpace(生成器[, 数据类型, 容差])

表示向量空间的线性无关基的类。

PauliWord(映射)

不可变字典,用于表示泡利字,关联导线与其各自的算符。

保利字和保利句

单量子比特保利群由四个单量子比特保利操作组成 IdentityPauliXPauliYPauliZ\(n\)-量子比特 保利群通过对这些元素进行所有可能的\(N\)重张量积构造而成。\(n\)-量子比特保利群的元素被称为 保利字,形式为\(P_J = \otimes_{i=1}^{n}\sigma_i^{(J)}\), 其中\(\sigma_i^{(J)}\)是其中一个保利算符 (PauliXPauliYPauliZ)或身份(Identity)作用于 第\(i^{th}\)个量子比特。完整的\(n\)-量子比特保利群的大小为 \(4^n\)(忽略从其元素乘法中可能产生的四种全局相位)。

PauliWord 是一个轻量级类,使用字典方法来表示 Pauli 单词。可以通过传递一个包含线路及其相关 Pauli 运算符的字典来实例化一个 PauliWord

>>> from pennylane.pauli import PauliWord
>>> pw1 = PauliWord({0:"X", 1:"Z"})  # X@Z
>>> pw2 = PauliWord({0:"Y", 1:"Z"})  # Y@Z
>>> pw1, pw2
(X(0) @ Z(1), Y(0) @ Z(1))

该类的目的是有效地计算泡利字的乘积并获得矩阵表示。

>>> pw1 @ pw2
1j * Z(0)
>>> pw1.to_mat(wire_order=[0, 1])
array([[ 0,  0,  1,  0],
       [ 0,  0,  0, -1],
       [ 1,  0,  0,  0],
       [ 0, -1,  0,  0]])

PauliSentence 类表示帕uli词的线性组合。使用类似的基于字典的方法,我们可以高效地添加、乘法并提取此表示中的算符矩阵。

>>> ps1 = PauliSentence({pw1: 1.2, pw2: 0.5j})
>>> ps2 = PauliSentence({pw1: -1.2})
>>> ps1
1.2 * X(0) @ Z(1)
+ 0.5j * Y(0) @ Z(1)
>>> ps1 + ps2
0.0 * X(0) @ Z(1)
+ 0.5j * Y(0) @ Z(1)
>>> ps1 @ ps2
-1.44 * I
+ (-0.6+0j) * Z(0)
>>> (ps1 + ps2).to_mat(wire_order=[0, 1])
array([[ 0. +0.j,  0. +0.j,  0.5+0.j,  0. +0.j],
       [ 0. +0.j,  0. +0.j,  0. +0.j, -0.5+0.j],
       [-0.5+0.j,  0. +0.j,  0. +0.j,  0. +0.j],
       [ 0. +0.j,  0.5+0.j,  0. +0.j,  0. +0.j]])

我们可以直观地使用保利算术来构建由 PauliWordPauliSentence 对象组成的哈密顿量,例如自旋-1/2 XXZ 模型哈密顿量,

\[H_\text{XXZ} = \sum_j [J^\bot (X_j X_{j+1} + Y_j Y_{j+1}) + J^\text{ZZ} Z_j Z_{j+1} + h Z_j].\]

在这里,我们查看具有周期边界条件的一维链的简单拓扑 (即量子比特数量 \(n \equiv 0\) 用于电缆的Python编号,例如 [0, 1, 2, 3] 对于 n=4)。 在代码中,我们可以通过以下示例实现这一点,使用4个量子比特。

n = 4
J_orthogonal = 1.5
ops = [
    J_orthogonal * (PauliWord({i:"X", (i+1)%n:"X"}) + PauliWord({i:"Y", (i+1)%n:"Y"}))
    for i in range(n)
]

J_zz = 0.5
ops += [J_zz * PauliWord({i:"Z", (i+1)%n:"Z"}) for i in range(n)]

h = 2.
ops += [h * PauliWord({i:"Z"}) for i in range(n)]

H = sum(ops)

我们还可以将哈密顿量位移一个任意的量。这里,例如,使基态能量为0。

>>> H = H - np.min(np.linalg.eigvalsh(H.to_mat()))

图着色

用于对保利图进行着色的启发式算法模块。

保利图是一个图,其中顶点代表保利字,边表示相应保利字是否满足特定的对称二元关系(例如,共轭)。图着色问题是将颜色分配给每个顶点,使得没有相同颜色的顶点相连,并尽可能使用最少数量的颜色(最低的“色度数”)。

函数

largest_first(binary_observables, adj)

使用最大度数优先启发式算法执行图的着色。

recursive_largest_first(binary_observables, adj)

使用递归最大度优先启发式算法执行图着色。

分组可观察量

保利词可以用来表示一个量子比特 Hamiltonian。量子比特哈密顿量的形式为 \(H_{q} = \sum_{J} C_J P_J\) ,其中 \(C_{J}\) 是数值系数,而 \(P_J\) 是保利词。

Pauli词的列表可以根据某些分组策略进行划分。作为一个例子,group_observables()函数将observables(Pauli操作及其张量积)的列表划分为根据二元关系(例如,量子比特-wise可交换)进行的分组:

>>> observables = [qml.PauliY(0), qml.PauliX(0) @ qml.PauliX(1), qml.PauliZ(1)]
>>> obs_groupings = group_observables(observables)
>>> obs_groupings
[[PauliX(wires=[0]) @ PauliX(wires=[1])],
 [PauliY(wires=[0]), PauliZ(wires=[1])]]

每个 \(P_J\) 保利字的 \(C_{J}\) 系数构成哈密顿量时,也可以指定进一步的选项,例如保利字分组方法(例如,量子比特对易)和用于创建可观测量组的基础图着色算法(例如,递归最大优先):

>>> obs = [qml.PauliY(0), qml.PauliX(0) @ qml.PauliX(1), qml.PauliZ(1)]
>>> coeffs = [1.43, 4.21, 0.97]
>>> obs_groupings, coeffs_groupings = group_observables(obs, coeffs, 'qwc', 'rlf')
>>> obs_groupings
[[PauliX(wires=[0]) @ PauliX(wires=[1])],
 [PauliY(wires=[0]), PauliZ(wires=[1])]]
>>> coeffs_groupings
[[4.21], [1.43, 0.97]]

有关如何将分组与Pennylane结合使用的更大示例,请查看测量优化演示

动态李代数

PennyLane 提供对保利算子的动态李代数 (DLA) 进行处理的支持。请参阅我们的 量子从业者的动态李代数介绍

lie_closure(生成器[, 最大迭代次数, ...])

从一组生成元计算动态李代数。

structure_constants(g[, pauli, is_orthogonal])

计算构成李代数伴随表示的结构常数。

center(g[, pauli])

一个计算李代数中心的函数。