paddle_quantum.qinfo
量子信息中的常用功能实现。
- partial_trace(state, dim1, dim2, A_or_B)
计算量子态的偏迹。
- partial_trace_discontiguous(state, preserve_qubits=None)
计算量子态的偏迹,可选取任意子系统。
- trace_distance(rho, sigma)
计算两个量子态的迹距离。
\[D(\rho, \sigma) = 1 / 2 * \text{tr}|\rho-\sigma|\]
- state_fidelity(rho, sigma)
计算两个量子态的保真度。
\[F(\rho, \sigma) = \text{tr}(\sqrt{\sqrt{\rho}\sigma\sqrt{\rho}})\]
- gate_fidelity(U, V)
计算两个量子门的保真度。
\[F(U, V) = |\text{tr}(UV^\dagger)|/2^n\]\(U\) 是一个 \(2^n\times 2^n\) 的 Unitary 矩阵。
- 参数:
U (Union[np.ndarray, paddle.Tensor]) – 量子门 \(U\) 的酉矩阵形式。
V (Union[np.ndarray, paddle.Tensor]) – 量子门 \(V\) 的酉矩阵形式。
- 返回:
输入的量子门之间的保真度。
- 返回类型:
Union[np.ndarray, paddle.Tensor]
- purity(rho)
计算量子态的纯度。
\[P = \text{tr}(\rho^2)\]- 参数:
rho (Union[np.ndarray, paddle.Tensor, State]) – 量子态的密度矩阵形式。
- 返回:
输入的量子态的纯度。
- 返回类型:
Union[np.ndarray, paddle.Tensor]
- von_neumann_entropy(rho, base)
计算量子态的冯诺依曼熵。
\[S = -\text{tr}(\rho \log(\rho))\]- 参数:
rho (Union[np.ndarray, paddle.Tensor, State]) – 量子态的密度矩阵形式。
base (int, optional) – 对数的底。默认为2。
- 返回:
输入的量子态的冯诺依曼熵。
- 返回类型:
Union[np.ndarray, paddle.Tensor]
- relative_entropy(rho, sig, base)
计算两个量子态的相对熵。
\[S(\rho \| \sigma)=\text{tr} \rho(\log \rho-\log \sigma)\]
- random_pauli_str_generator(num_qubits, terms=3)
随机生成一个可观测量(observable)的列表(
list
)形式。一个可观测量 \(O=0.3X\otimes I\otimes I+0.5Y\otimes I\otimes Z\) 的 列表形式为
[[0.3, 'x0'], [0.5, 'y0,z2']]
。这样一个可观测量是由 调用random_pauli_str_generator(3, terms=2)
生成的。- 参数:
num_qubits (int) – 量子比特数量。
terms (int, optional) – 可观测量的项数, 默认为 3。
- 返回:
随机生成的可观测量的列表形式。
- 返回类型:
List
- pauli_str_convertor(observable: List)
在可观测量(observable)中加入系数 1。
一个可观测量 \(O=0.3X\otimes I\otimes I+0.5Y\otimes I\otimes Z\) 的 列表形式为
[['z0,x1'], ['z1']]
。这样一个可观测量将变化为[[1, 'z0,x1'], [1, 'z1']]
。- 参数:
observable (List) – 在输入的可观测量(observable)中加入系数 1。
- 返回:
返回加入系数 1 的可观测量(observable)。
- 返回类型:
List
- random_hamiltonian_generator(num_qubits, terms=3)
随机生成一个哈密顿量(Hamiltonian)。
- 参数:
num_qubits – 量子比特数量。
terms (int, optional) – 哈密顿量的最高项数, 默认为 3。
- 返回:
随机生成的哈密顿量。
- 返回类型:
List
- pauli_str_to_matrix(pauli_str, n)
将输入的可观测量(observable)的列表(
list
)形式转换为其矩阵形式。如输入的
pauli_str
为[[0.7, 'z0,x1'], [0.2, 'z1']]
且n=3
, 则此函数返回可观测量 \(0.7Z\otimes X\otimes I+0.2I\otimes Z\otimes I\) 的 矩阵形式。- 参数:
pauli_str (list) – 一个可观测量的列表形式。
n (int) – 量子比特数量。
- 抛出:
ValueError – 只有泡利算子 “I” 可以被接受,而不指定其位置。
- 返回:
输入列表对应的可观测量的矩阵形式。
- 返回类型:
paddle.Tensor
- partial_transpose_2(density_op, sub_system=None)
计算输入量子态的 partial transpose \(\rho^{T_A}\)。
- 参数:
density_op (Union[np.ndarray, paddle.Tensor, State]) – 量子态的密度矩阵形式。
sub_system (int, optional) – 1或2,表示关于哪个子系统进行 partial transpose,默认为第二个。
- 返回:
输入的量子态的 partial transpose
- 返回类型:
Union[np.ndarray, paddle.Tensor]
- partial_transpose(density_op, n)
计算输入量子态的 partial transpose \(\rho^{T_A}\)。
- 参数:
density_op (Union[np.ndarray, paddle.Tensor, State]) – 量子态的密度矩阵形式。
n (int) – 需要转置系统的量子比特数量。
- 返回:
输入的量子态的 partial transpose。
- 返回类型:
Union[np.ndarray, paddle.Tensor]
- permute_systems(mat, perm_list, dim_list)
根据输入顺序组合量子系统。
- negativity(density_op)
计算输入量子态的 Negativity \(N = ||\frac{\rho^{T_A}-1}{2}||\)。
- 参数:
density_op (Union[np.ndarray, paddle.Tensor, State]) – 量子态的密度矩阵形式。
- 返回:
输入的量子态的 Negativity。
- 返回类型:
Union[np.ndarray, paddle.Tensor]
- logarithmic_negativity(density_op)
计算输入量子态的 Logarithmic Negativity \(E_N = ||\rho^{T_A}||\)。
- 参数:
density_op (Union[np.ndarray, paddle.Tensor, State]) – 量子态的密度矩阵形式。
- 返回:
输入的量子态的 Logarithmic Negativity。
- 返回类型:
Union[np.ndarray, paddle.Tensor]
- is_ppt(density_op)
计算输入量子态是否满足 PPT 条件。
- 参数:
density_op (Union[np.ndarray, paddle.Tensor, State]) – 量子态的密度矩阵形式。
- 返回:
输入的量子态是否满足 PPT 条件。
- 返回类型:
bool
- is_choi(op)
判断输入算子是否为某个量子操作的 Choi 算子。
- 参数:
op (Union[np.ndarray, paddle.Tensor]) – 线性算子的矩阵形式。
- 返回:
输入算子是否为某个量子操作的 Choi 算子。
- 返回类型:
bool
备注
输入算子默认作用在第二个系统上。
- schmidt_decompose(psi, sys_A=None)
计算输入量子态的施密特分解 \(\lvert\psi\rangle=\sum_ic_i\lvert i_A\rangle\otimes\lvert i_B \rangle\)。
- 参数:
psi (Union[np.ndarray, paddle.Tensor, State]) – 量子态的向量形式,形状为(2**n)。
sys_A (List[int], optional) – 包含在子系统 A 中的 qubit 下标(其余 qubit 包含在子系统B中),默认为量子态 \(\lvert \psi\rangle\) 的前半数 qubit。
- 返回:
包含如下元素:
由施密特系数组成的一维数组,形状为
(k)
。由子系统A的基 \(\lvert i_A\rangle\) 组成的高维数组,形状为
(k, 2**m, 1)
。由子系统B的基 \(\lvert i_B\rangle\) 组成的高维数组,形状为
(k, 2**l, 1)
。
- 返回类型:
Union[Tuple[paddle.Tensor, paddle.Tensor, paddle.Tensor], Tuple[np.ndarray, np.ndarray, np.ndarray]]
- image_to_density_matrix(image_filepath)
将图片编码为密度矩阵。
- 参数:
image_filepath (str) – 图片文件的路径。
- 返回:
编码得到的密度矩阵。
- 返回类型:
paddle_quantum.State
- shadow_trace(state, hamiltonian, sample_shots, method='CS')
估计可观测量 \(H\) 的期望值 \(\text{trace}(H\rho)\)。
- 参数:
state (paddle_quantum.State) – 输入的量子态。
hamiltonian (paddle_quantum.Hamiltonian) – 可观测量。
sample_shots (int) – 采样次数。
method (str, optional) – 使用 shadow 来进行估计的方法,可选 “CS”、”LBCS”、”APS” 三种方法,默认为
CS
。
- 抛出:
ValueError – 输入的哈密顿量 (Hamiltonian) 形式不合法。
- 返回:
估计可观测量 \(H\) 的期望值。
- 返回类型:
float
- tensor_state(state_a, state_b, *args)
计算输入的量子态(至少两个)的直积形式, 输出将自动返回 State 实例。
备注
需要注意输入态使用的 backend; 若输入数据为
paddle.Tensor
或者numpy.ndarray
,请使用paddle_quantum.linalg.NKron
函数处理。- 返回:
输入量子态的直积。
- 返回类型:
- diamond_norm(channel_repr, dim_io, **kwargs)
计算输入的菱形范数
- 参数:
channel_repr (Union[Channel, paddle.Tensor]) – 信道对应的表示,
Channel
或paddle.Tensor
的实例。dim_io (Union[int, Tuple[int, int]], optional.) – 输入和输出的维度。
kwargs (Any) – 使用cvx所需的参数。
- 抛出:
RuntimeError –
channel_repr
必须是Channel
或paddle.Tensor
。TypeError – “dim_io” 必须是 “int” 或者 “tuple”。
- Warning:
输入的
channel_repr
不是choi表示,已被转换成ChoiRepr
。- 返回:
返回菱形范数
- 返回类型:
float
- channel_repr_convert(representation, source, target, tol)
将给定的信道转换成目标形式。
- 参数:
representation (Union[paddle.Tensor, np.ndarray, List[paddle.Tensor], List[np.ndarray]]) – 输入信道的一种表示。
source (str) – 输入信道的表示名称,应为
Choi
,Kraus
或Stinespring
。target (str) – 可选
Choi
,Kraus
或Stinespring
。tol (float, optional) – 容错误差。
- 抛出:
ValueError – 不支持的信道表示形式,应为
Choi
,Kraus
或Stinespring
。
备注
Choi 变为 Kraus 目前因为 eigh 的精度会存在1e-6的误差。
- 抛出:
NotImplementedError – 不支持输入数据类型的信道转换。
- 返回:
返回目标形式的信道。
- 返回类型:
Union[paddle.Tensor, np.ndarray, List[paddle.Tensor], List[np.ndarray]]
- random_channel(num_qubits, rank, target)
从 Stinespring 表示中随机生成一个量子信道。
- 参数:
num_qubits (int) – 量子比特数 \(n\)。
rank (str) – 信道的秩,默认从 \([0, 2^n]\) 中随机选择。
target (str) – 信道的表示,可选
Choi
,Kraus
或Stinespring
。
- 返回:
返回目标表示下的随机信道。
- 返回类型:
Union[paddle.Tensor, List[paddle.Tensor]]
- kraus_unitary_random(num_qubits, num_oper)
随机输出一组描述量子信道的 Kraus 算符。
- 参数:
num_qubits (int) – 信道对应的量子比特数量。
num_oper (int) – Kraus算符的数量。
- 返回:
一组 Kraus 算符。
- 返回类型:
list
- grover_generation(oracle)
Grover 算子生成函数。
- 参数:
oracle (Union[np.ndarray, paddle.Tensor]) – 给定酉算子。
- 返回:
根据
oracle
搭建的 Grover 算子。- 返回类型:
Union[np.ndarray, paddle.Tensor]
- qft_generation(num_qubits)
量子傅里叶变换算子生成函数。其矩阵形式为
\[\begin{split}\begin{align} QFT = \frac{1}{\sqrt{N}} \begin{bmatrix} 1 & 1 & .. & 1 \\ 1 & \omega_N & .. & \omega_N^{N-1} \\ .. & .. & .. & .. \\ 1 & \omega_N^{N-1} & .. & \omega_N^{(N-1)^2} \end{bmatrix} \end{align}\end{split}\]- 参数:
num_qubits (int) – 算子作用的系统比特数。
- 返回:
量子傅里叶变换算子。
- 返回类型:
paddle.Tensor