paddle_quantum.qinfo

量子信息中的常用功能实现。

partial_trace(state, dim1, dim2, A_or_B)

计算量子态的偏迹。

参数:
  • state (Union[np.ndarray, paddle.Tensor, State]) – 输入的量子态。

  • dim1 (int) – 系统A的维数。

  • dim2 (int) – 系统B的维数。

  • A_or_B (int) – 1或者2,1表示计算系统A上的偏迹,2表示计算系统B上的偏迹。

返回:

输入的量子态的偏迹。

返回类型:

Union[np.ndarray, paddle.Tensor, State]

partial_trace_discontiguous(state, preserve_qubits=None)

计算量子态的偏迹,可选取任意子系统。

参数:
  • state (Union[np.ndarray, paddle.Tensor, State]) – 输入的量子态。

  • preserve_qubits (list, optional) – 要保留的量子比特,默认为 None,表示全保留。

返回:

所选子系统的量子态偏迹。

返回类型:

Union[np.ndarray, paddle.Tensor, State]

trace_distance(rho, sigma)

计算两个量子态的迹距离。

\[D(\rho, \sigma) = 1 / 2 * \text{tr}|\rho-\sigma|\]
参数:
  • rho (Union[np.ndarray, paddle.Tensor, State]) – 量子态的密度矩阵形式。

  • sigma (Union[np.ndarray, paddle.Tensor, State]) – 量子态的密度矩阵形式。

返回:

输入的量子态之间的迹距离。

返回类型:

Union[np.ndarray, paddle.Tensor]

state_fidelity(rho, sigma)

计算两个量子态的保真度。

\[F(\rho, \sigma) = \text{tr}(\sqrt{\sqrt{\rho}\sigma\sqrt{\rho}})\]
参数:
  • rho (Union[np.ndarray, paddle.Tensor, State]) – 量子态的密度矩阵形式。

  • sigma (Union[np.ndarray, paddle.Tensor, State]) – 量子态的密度矩阵形式。

返回:

输入的量子态之间的保真度。

返回类型:

Union[np.ndarray, paddle.Tensor]

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)\]
参数:
  • rho (Union[np.ndarray, paddle.Tensor, State]) – 量子态的密度矩阵形式。

  • sig (Union[np.ndarray, paddle.Tensor, State]) – 量子态的密度矩阵形式。

  • base (int, optional) – 对数的底,默认为2。

返回:

输入的量子态之间的相对熵。

返回类型:

Union[np.ndarray, paddle.Tensor]

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)

根据输入顺序组合量子系统。

参数:
  • mat (Union[np.ndarray, paddle.Tensor, State]) – 输入矩阵,通常为量子态。

  • perm (List[int]) – 排列顺序,例如输入 [0,2,1,3] 将会交换第 2、3 个子系统的顺序。

  • dim (List[int]) – 每个子系统维度列表。

返回:

排序后的矩阵。

返回类型:

Union[np.ndarray, paddle.Tensor, State]

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 实例。

参数:
  • state_a (State) – 量子态 A。

  • state_b (State) – 量子态 B。

  • args (State) – 其他量子态。

备注

需要注意输入态使用的 backend; 若输入数据为 paddle.Tensor 或者 numpy.ndarray,请使用 paddle_quantum.linalg.NKron 函数处理。

返回:

输入量子态的直积。

返回类型:

State

diamond_norm(channel_repr, dim_io, **kwargs)

计算输入的菱形范数

参数:
  • channel_repr (Union[Channel, paddle.Tensor]) – 信道对应的表示, Channelpaddle.Tensor 的实例。

  • dim_io (Union[int, Tuple[int, int]], optional.) – 输入和输出的维度。

  • kwargs (Any) – 使用cvx所需的参数。

抛出:
  • RuntimeErrorchannel_repr 必须是 Channelpaddle.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, KrausStinespring

  • target (str) – 可选 Choi, KrausStinespring

  • tol (float, optional) – 容错误差。

抛出:

ValueError – 不支持的信道表示形式,应为 ChoiKrausStinespring

备注

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) – 信道的表示,可选 ChoiKrausStinespring

返回:

返回目标表示下的随机信道。

返回类型:

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