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

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

返回:

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

返回类型:

Union[np.ndarray, paddle.Tensor]

state_fidelity(rho, sigma)

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

F(ρ,σ)=tr(ρσρ)
参数:
  • 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)=|tr(UV)|/2n

U 是一个 2n×2n 的 Unitary 矩阵。

参数:
  • U (Union[np.ndarray, paddle.Tensor]) – 量子门 U 的酉矩阵形式。

  • V (Union[np.ndarray, paddle.Tensor]) – 量子门 V 的酉矩阵形式。

返回:

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

返回类型:

Union[np.ndarray, paddle.Tensor]

purity(rho)

计算量子态的纯度。

P=tr(ρ2)
参数:

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

返回:

输入的量子态的纯度。

返回类型:

Union[np.ndarray, paddle.Tensor]

von_neumann_entropy(rho, base)

计算量子态的冯诺依曼熵。

S=tr(ρlog(ρ))
参数:
  • rho (Union[np.ndarray, paddle.Tensor, State]) – 量子态的密度矩阵形式。

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

返回:

输入的量子态的冯诺依曼熵。

返回类型:

Union[np.ndarray, paddle.Tensor]

relative_entropy(rho, sig, base)

计算两个量子态的相对熵。

S(ρσ)=trρ(logρlogσ)
参数:
  • 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.3XII+0.5YIZ 的 列表形式为 [[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.3XII+0.5YIZ 的 列表形式为 [['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.7ZXI+0.2IZI 的 矩阵形式。

参数:
  • pauli_str (list) – 一个可观测量的列表形式。

  • n (int) – 量子比特数量。

抛出:

ValueError – 只有泡利算子 “I” 可以被接受,而不指定其位置。

返回:

输入列表对应的可观测量的矩阵形式。

返回类型:

paddle.Tensor

partial_transpose_2(density_op, sub_system=None)

计算输入量子态的 partial transpose ρTA

参数:
  • 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 ρTA

参数:
  • 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=||ρTA12||

参数:

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

返回:

输入的量子态的 Negativity。

返回类型:

Union[np.ndarray, paddle.Tensor]

logarithmic_negativity(density_op)

计算输入量子态的 Logarithmic Negativity EN=||ρTA||

参数:

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)

计算输入量子态的施密特分解 |ψ=ici|iA|iB

参数:
  • psi (Union[np.ndarray, paddle.Tensor, State]) – 量子态的向量形式,形状为(2**n)。

  • sys_A (List[int], optional) – 包含在子系统 A 中的 qubit 下标(其余 qubit 包含在子系统B中),默认为量子态 |ψ 的前半数 qubit。

返回:

包含如下元素:

  • 由施密特系数组成的一维数组,形状为 (k)

  • 由子系统A的基 |iA 组成的高维数组,形状为 (k, 2**m, 1)

  • 由子系统B的基 |iB 组成的高维数组,形状为 (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 的期望值 trace(Hρ)

参数:
  • 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,2n] 中随机选择。

  • 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)

量子傅里叶变换算子生成函数。其矩阵形式为

QFT=1N[11..11ωN..ωNN1........1ωNN1..ωN(N1)2]
参数:

num_qubits (int) – 算子作用的系统比特数。

返回:

量子傅里叶变换算子。

返回类型:

paddle.Tensor