paddle_quantum.utils module

paddle_quantum.utils.partial_trace(rho_AB, dim1, dim2, A_or_B)

计算量子态的偏迹。

参数:
  • rho_AB (ComplexVariable) – 输入的量子态
  • dim1 (int) – 系统A的维数
  • dim2 (int) – 系统B的维数
  • A_or_B (int) – 1或者2,1表示去除A,2表示去除B
返回:

量子态的偏迹

返回类型:

ComplexVariable

paddle_quantum.utils.state_fidelity(rho, sigma)

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

\[F(\rho, \sigma) = \text{tr}(\sqrt{\sqrt{\rho}\sigma\sqrt{\rho}})\]
参数:
  • rho (numpy.ndarray) – 量子态的密度矩阵形式
  • sigma (numpy.ndarray) – 量子态的密度矩阵形式
返回:

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

返回类型:

float

paddle_quantum.utils.gate_fidelity(U, V)

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

\[F(U, V) = |\text{tr}(UV^\dagger)|/2^n\]

\(U\) 是一个 \(2^n\times 2^n\) 的 Unitary 矩阵。

参数:
  • U (numpy.ndarray) – 量子门的酉矩阵形式
  • V (numpy.ndarray) – 量子门的酉矩阵形式
返回:

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

返回类型:

float

paddle_quantum.utils.purity(rho)

计算量子态的纯度。

\[P = \text{tr}(\rho^2)\]
参数:rho (numpy.ndarray) – 量子态的密度矩阵形式
返回:输入的量子态的纯度
返回类型:float
paddle_quantum.utils.von_neumann_entropy(rho)

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

\[S = -\text{tr}(\rho \log(\rho))\]
参数:rho (numpy.ndarray) – 量子态的密度矩阵形式
返回:输入的量子态的冯诺依曼熵
返回类型:float
paddle_quantum.utils.relative_entropy(rho, sig)

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

\[S(\rho \| \sigma)=\text{tr} \rho(\log \rho-\log \sigma)\]
参数:
  • rho (numpy.ndarray) – 量子态的密度矩阵形式
  • sig (numpy.ndarray) – 量子态的密度矩阵形式
返回:

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

返回类型:

float

paddle_quantum.utils.NKron(matrix_A, matrix_B, *args)

计算两个及以上的矩阵的Kronecker积。

参数:
  • matrix_A (numpy.ndarray) – 一个矩阵
  • matrix_B (numpy.ndarray) – 一个矩阵
  • *args (numpy.ndarray) – 其余矩阵
返回:

输入矩阵的Kronecker积

返回类型:

ComplexVariable

from paddle_quantum.state import density_op_random
from paddle_quantum.utils import NKron
A = density_op_random(2)
B = density_op_random(2)
C = density_op_random(2)
result = NKron(A, B, C)

result 应为: \(A \otimes B \otimes C\)

paddle_quantum.utils.dagger(matrix)

计算矩阵的埃尔米特转置,即Hermitian transpose。

参数:matrix (ComplexVariable) – 需要埃尔米特转置的矩阵
返回:输入矩阵的埃尔米特转置
返回类型:ComplexVariable

代码示例:

from paddle_quantum.utils import dagger
from paddle import fluid
import numpy as np
with fluid.dygraph.guard():
    rho = fluid.dygraph.to_variable(np.array([[1+1j, 2+2j], [3+3j, 4+4j]]))
    print(dagger(rho).numpy())
[[1.-1.j 3.-3.j]
[2.-2.j 4.-4.j]]
paddle_quantum.utils.random_pauli_str_generator(n, 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) 生成的。

参数:
  • n (int) – 量子比特数量
  • terms (int, optional) – 可观测量的项数
返回:

随机生成的可观测量的列表形式

返回类型:

list

paddle_quantum.utils.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) – 量子比特数量
返回:

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

返回类型:

numpy.ndarray