paddle_quantum.qsvt.qsp

量子信号处理相关类与函数,具体参考论文 https://arxiv.org/abs/1806.01838

signal_unitary(signal_x)

实现论文中的信号矩阵 \(W(x)\)

参数:

signal_x (float) – 输入信号,区间为[-1, 1]

返回:

matrix \(W(x=\text{signal_x})\)

返回类型:

ndarray

poly_parity_verification(poly_p, k, error)

对输入多项式进行奇偶校验,判断 \(P\) 奇偶性是否为 (k mod 2),详见论文定理 3 中的条件 2.

参数:
  • poly_p (Polynomial) – 多项式 \(P(x)\)

  • k (int) – 项数 k

  • error (float) – 误差阈值,默认为 1e-6.

返回:

poly_p 奇偶性是否为 (k mod 2)

返回类型:

bool

normalization_verification(poly_p, poly_q, trials, error)

归一化验证,判断多项式 \(P(x)\)\(Q(x)\) 是否满足归一化条件,详见论文定理 3 中的条件 3

参数:
  • poly_p (Polynomial) – 多项式 \(P(x)\)

  • poly_q (Polynomial) – 多项式 \(Q(x)\)

  • trials (int) – 验证次数,默认为 10

  • error (float) – 误差阈值,默认为 1e-2.

返回:

多项式是否满足归一化条件 \(|P|^2 + (1 - x^2)|Q|^2 = 1\)

返回类型:

bool

angle_phi_verification(phi, poly_p, poly_p_hat, poly_q_hat, trials, error)

验证角度 \(\phi\) 是否满足论文中的等式 6

参数:
  • phi (float) – 旋转角 \(\phi\)

  • poly_p (Polynomial) – 多项式 \(P(x)\)

  • poly_q (Polynomial) – 多项式 \(Q(x)\)

  • poly_p_hat – 多项式 \(\tilde{P}(x)\)

  • poly_q_hat – 多项式 \(\tilde{Q}(x)\)

  • trials (int) – 验证次数,默认为 10

  • error (float) – 误差阈值,默认为 1e-2.

返回:

角度 \(\phi\) 是否满足论文中的等式 6.

返回类型:

bool

processing_unitary(list_matrices, signal_x)

构造量子信号处理矩阵 \(W_\Phi(x)\),详见论文中的等式 1

参数:
  • list_matrices (List[ndarray]) – 一个包含信号处理矩阵的数组

  • signal_x (float) – 输入信号 x,范围为 [-1, 1]

返回:

量子信号处理矩阵 \(W_\Phi(x)\)

返回类型:

ndarray

Phi_verification(list_phi, poly_p, trials, error)

验证完整的角度 \(\Phi\)

参数:
  • list_phi (ndarray) – 包含所有角度 \(\phi\) 的数组

  • poly_p (Polynomial) – 多项式 \(P(x)\)

  • trials (trials) – 验证次数,默认为 100

  • error (float) – 误差阈值,默认为 1e-6

返回:

角度 \(\Phi\) 是否使得 \(W_\Phi(x)\)\(P(x)\) 的块编码

返回类型:

bool

update_polynomial(poly_p, poly_q, phi)

计算 \(P, Q\) 经过一层量子信号处理后的多项式 \(\tilde{P}, \tilde{Q}\)

参数:
  • poly_p (Polynomial) – 多项式 \(P(x)\)

  • poly_q (Polynomial) – 多项式 \(Q(x)\)

  • phi (float) – 量子信号处理的旋转角 \(\phi\)

返回:

更新之后的多项式 \(\tilde{P}(x), \tilde{Q}(x)\)

返回类型:

Tuple[Polynomial, Polynomial]

alg_find_Phi(poly_p, poly_q, length)

计算角度 \(\Phi\) 的算法

参数:
  • poly_p (Polynomial) – 多项式 \(P(x)\)

  • poly_q (Polynomial) – 多项式 \(Q(x)\)

  • length (int) – 返回角度的个数,即量子信号处理的层数

返回:

包含角度的数组 \(\Phi\)

返回类型:

ndarray

poly_A_hat_generation(poly_p)

计算多项式 \(\hat{A}(y) = 1 - P(x)P^*(x)\),其中 \(y = x^2\)

参数:

poly_p (Polynomial) – 多项式 \(P(x)\)

返回:

多项式 \(\hat{A}(y)\)

返回类型:

Polynomial

poly_A_hat_decomposition(A_hat, error)

通过求根的方式分解多项式 \(\hat{A}(y)\)

参数:
  • poly_p (Polynomial) – 多项式 \(P(x)\)

  • error (float) – 误差阈值,默认为 0.001

返回:

多项式 \(\hat{A}(y)\) 的最高项系数以及根

返回类型:

Tuple[float, List[float]]

poly_Q_generation(leading_coef, roots, parity)

根据多项式 \(\hat{A}(y)\) 的分解,构造多项式 \(Q(x)\)

参数:
  • leading_coef (float) – 多项式 \(\hat{A}(y)\) 的最高项系数

  • roots (List[float]) – 多项式 \(\hat{A}(y)\) 的根

  • parity (int) – 多项式 \(Q(x)\) 的奇偶性

返回:

多项式 \(Q(x)\)

返回类型:

Polynomial

alg_find_Q(poly_p, k)

根据多项式 \(P(x)\) 构造多项式 \(Q(x)\) 的算法

参数:
  • poly_p (Polynomial) – 多项式 \(P(x)\)

  • k (int) – 多项式 \(Q(x)\) 的项数

返回:

多项式 \(Q(x)\)

返回类型:

Polynomial

quantum_signal_processing(poly_p, length)

量子信号处理函数,找到一组角度 \(\Phi\) 使得量子信号处理算子 \(W_\Phi(x)\) 是一个多项式 \(P(x)\) 的块编码

参数:
  • poly_p (Polynomial) – 多项式 \(P(x)\)

  • length (int) – 角度的个数,即量子信号处理的层数,默认 None 为多项式 \(P(x)\) 的度

返回:

角度 \(\Phi\)

返回类型:

ndarray

reflection_based_quantum_signal_processing(P)

基于反射的量子信号处理函数,找到一组角度 \(\Phi\) 使得量子信号处理算子 \(W_\Phi(x)\) 是一个多项式 \(P(x)\) 的块编码,详见论文引理 8

参数:

poly_p (Polynomial) – 多项式 \(P(x)\)

返回:

角度 \(\Phi\)

返回类型:

ndarray

class ScalarQSP

基类: object

基于量子信号处理的类

参数:
  • poly_p (Polynomial) – 多项式 \(P(x)\)

  • length (int) – 角度的个数,即量子信号处理的层数,默认 None 为多项式 \(P(x)\) 的度

block_encoding(signal_x)

构造一个量子信号处理的电路,即实现多项式 \(P(x)\) 的块编码电路

参数:

signal_x (float) – 输入的信号 x

返回:

量子信号处理的电路

返回类型:

Circuit

block_encoding_matrix(signal_x)

构造一个量子信号处理的矩阵,即实现多项式 \(P(x)\) 的块编码矩阵

参数:

signal_x (float) – 输入的信号 x

返回:

量子信号处理的矩阵

返回类型:

paddle.Tensor