paddle_quantum.ansatz.circuit

量子电路类的功能实现。

class Circuit(num_qubits=None)

基类: paddle_quantum.ansatz.container.Sequential

量子电路。

参数:

num_qubits (int, optional) – 量子比特数量, 默认为 None

property num_qubits

该电路的量子比特数量。

property isdynamic

是否电路为动态电路。

property param

展平后的电路参数。

property grad

展平后的电路参数梯度。

update_param(theta, idx=None)

替换单层或所有的电路参数。

参数:
  • theta (Union[paddle.Tensor, np.ndarray, float]) – 新的参数。

  • idx (int, optional) – 量子层的索引, 默认为替换所有。

抛出:

ValueError – 索引必须是整数或者 None。

transfer_static()

将该线路的所有参数的 stop_grdient 设为 True

randomize_param(arg0=0, arg1=2 * pi, initializer_type='Uniform')

UniformNormal 的分布中随机化电路参数。

关于 initializer 的介绍,可以查看 https://www.paddlepaddle.org.cn/documentation/docs/zh/api/paddle/nn/initializer/Uniform_cn.html

参数:
  • arg0 (float) – 分布中的第一个参数, 默认为 0

  • arg1 (float) – 分布中的第二个, 默认为 2*pi

  • initializer_type (str) – 分布类型, 默认为 Uniform

h(qubits_idx='full', depth=1)

添加一个单量子比特的 Hadamard 门。

其矩阵形式为:

\[\begin{split}H = \frac{1}{\sqrt{2}} \begin{bmatrix} 1&1\\ 1&-1 \end{bmatrix}\end{split}\]
参数:
  • qubits_idx (Union[Iterable[int], int, str], optional) – 作用在的量子比特的编号,默认为 'full'

  • depth (int, optional) – 层数,默认为 1

s(qubits_idx='full', depth=1)

添加单量子比特 S 门。

其矩阵形式为:

\[\begin{split}S = \begin{bmatrix} 1&0\\ 0&i \end{bmatrix}\end{split}\]
参数:
  • qubits_idx (Union[Iterable[int], int, str], optional) – 作用在的量子比特的编号,默认为 'full'

  • depth (int, optional) – 层数,默认为 1

sdg(qubits_idx='full', depth=1)

添加单量子比特 S dagger (逆S)门。

其矩阵形式为:

\[S ^\dagger = \begin{bmatrix} 1 & 0\ \ 0 & -i \end{bmatrix}\]
参数:
  • qubits_idx (Union[Iterable[int], int, str], optional) – 作用在的量子比特的编号,默认为 'full'

  • depth (int, optional) – 层数,默认为 1

t(qubits_idx='full', depth=1)

添加单量子比特 T 门。

其矩阵形式为:

\[\begin{split}T = \begin{bmatrix} 1&0\\ 0&e^\frac{i\pi}{4} \end{bmatrix}\end{split}\]
参数:
  • qubits_idx (Union[Iterable[int], int, str], optional) – 作用在的量子比特的编号,默认为 'full'

  • depth (int, optional) – 层数,默认为 1

tdg(qubits_idx='full', depth=1)

添加单量子比特 T dagger (逆T)门。

其矩阵形式为:

\[T ^\dagger = \begin{bmatrix} 1 & 0\ \ 0 & e^\frac{i\pi}{4} \end{bmatrix}\]
参数:
  • qubits_idx (Union[Iterable[int], int, str], optional) – 作用在的量子比特的编号,默认为 'full'

  • depth (int, optional) – 层数,默认为 1

x(qubits_idx='full', depth=1)

添加单量子比特 X 门。

其矩阵形式为:

\[\begin{split}X = \begin{bmatrix} 0 & 1 \\ 1 & 0 \end{bmatrix}\end{split}\]
参数:
  • qubits_idx (Union[Iterable, int, str], optional) – 作用在的量子比特的编号,默认为 'full'

  • depth (int, optional) – 层数,默认为 1

y(qubits_idx='full', depth=1)

添加单量子比特 Y 门。

其矩阵形式为:

\[\begin{split}Y = \begin{bmatrix} 0 & -i \\ i & 0 \end{bmatrix}\end{split}\]
参数:
  • qubits_idx (Union[Iterable, int, str], optional) – 作用在的量子比特的编号,默认为 'full'

  • depth (int, optional) – 层数,默认为 1

z(qubits_idx='full', depth=1)

添加单量子比特 Z 门。

其矩阵形式为:

\[\begin{split}Z = \begin{bmatrix} 1 & 0 \\ 0 & -1 \end{bmatrix}\end{split}\]
参数:
  • qubits_idx (Union[Iterable, int, str], optional) – 作用在的量子比特的编号,默认为 'full'

  • depth (int, optional) – 层数,默认为 1

p(qubits_idx='full', depth=1, param=None, param_sharing=False)

添加单量子比特 P 门。

其矩阵形式为:

\[\begin{split}P(\theta) = \begin{bmatrix} 1 & 0 \\ 0 & e^{i\theta} \end{bmatrix}\end{split}\]
参数:
  • qubits_idx (Union[Iterable, int, str], optional) – 作用在的量子比特的编号,默认为 'full'

  • depth (int, optional) – 层数,默认为 1

  • param (Union[paddle.Tensor, float], optional) – 量子门参数,默认为 None

  • param_sharing (bool, optional) – 同一层中的量子门是否共享参数,默认为 False

rx(qubits_idx='full', depth=1, param=None, param_sharing=False)

添加关于 x 轴的单量子比特旋转门。

其矩阵形式为:

\[\begin{split}R_X(\theta) = \begin{bmatrix} \cos\frac{\theta}{2} & -i\sin\frac{\theta}{2} \\ -i\sin\frac{\theta}{2} & \cos\frac{\theta}{2} \end{bmatrix}\end{split}\]
参数:
  • qubits_idx (Union[Iterable, int, str], optional) – 作用在的量子比特的编号,默认为 'full'

  • depth (int, optional) – 层数,默认为 1

  • param (Union[paddle.Tensor, float], optional) – 量子门参数,默认为 None

  • param_sharing (bool, optional) – 同一层中的量子门是否共享参数,默认为 False

ry(qubits_idx='full', depth=1, param=None, param_sharing=False)

添加关于 y 轴的单量子比特旋转门。

其矩阵形式为:

\[\begin{split}R_Y(\theta) = \begin{bmatrix} \cos\frac{\theta}{2} & -\sin\frac{\theta}{2} \\ \sin\frac{\theta}{2} & \cos\frac{\theta}{2} \end{bmatrix}\end{split}\]
参数:
  • qubits_idx (Union[Iterable, int, str], optional) – 作用在的量子比特的编号,默认为 'full'

  • depth (int, optional) – 层数,默认为 1

  • param (Union[paddle.Tensor, float], optional) – 量子门参数,默认为 None

  • param_sharing (bool, optional) – 同一层中的量子门是否共享参数,默认为 False

rz(qubits_idx='full', depth=1, param=None, param_sharing=False)

添加关于 z 轴的单量子比特旋转门。

其矩阵形式为:

\[\begin{split}R_Z(\theta) = \begin{bmatrix} e^{-i\frac{\theta}{2}} & 0 \\ 0 & e^{i\frac{\theta}{2}} \end{bmatrix}\end{split}\]
参数:
  • qubits_idx (Union[Iterable, int, str], optional) – 作用在的量子比特的编号,默认为 'full'

  • depth (int, optional) – 层数,默认为 1

  • param (Union[paddle.Tensor, float], optional) – 量子门参数,默认为 None

  • param_sharing (bool, optional) – 同一层中的量子门是否共享参数,默认为 False

u3(qubits_idx='full', depth=1, param=None, param_sharing=False)

添加单量子比特旋转门。

其矩阵形式为:

\[\begin{split}\begin{align} U_3(\theta, \phi, \lambda) = \begin{bmatrix} \cos\frac\theta2&-e^{i\lambda}\sin\frac\theta2\\ e^{i\phi}\sin\frac\theta2&e^{i(\phi+\lambda)}\cos\frac\theta2 \end{bmatrix} \end{align}\end{split}\]
参数:
  • qubits_idx (Union[Iterable, int, str], optional) – 作用在的量子比特的编号,默认为 'full'

  • depth (int, optional) – 层数,默认为 1

  • param (Union[paddle.Tensor, float], optional) – 量子门参数,默认为 None

  • param_sharing (bool, optional) – 同一层中的量子门是否共享参数,默认为 False

cnot(qubits_idx='cycle', depth=1)

添加 CNOT 门。

其矩阵形式为:

\[\begin{split}\begin{align} \mathit{CNOT} &= |0\rangle \langle 0|\otimes I + |1 \rangle \langle 1|\otimes X\\ &= \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & 1 \\ 0 & 0 & 1 & 0 \end{bmatrix} \end{align}\end{split}\]
参数:
  • qubits_idx (Union[Iterable, str], optional) – 作用在的量子比特的编号,默认为 'cycle'

  • depth (int, optional) – 层数,默认为 1

cy(qubits_idx='cycle', depth=1)

添加受控 Y 门。

其矩阵形式为:

\[\begin{split}\begin{align} \mathit{CY} &=|0\rangle \langle 0|\otimes I + |1 \rangle \langle 1|\otimes Y\\ &= \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & -1j \\ 0 & 0 & 1j & 0 \end{bmatrix} \end{align}\end{split}\]
参数:
  • qubits_idx (Union[Iterable, str], optional) – 作用在的量子比特的编号,默认为 'cycle'

  • depth (int, optional) – 层数,默认为 1

cz(qubits_idx='cycle', depth=1)

添加受控 Z 门。

其矩阵形式为:

\[\begin{split}\begin{align} \mathit{CZ} &=|0\rangle \langle 0|\otimes I + |1 \rangle \langle 1|\otimes Z\\ &= \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & -1 \end{bmatrix} \end{align}\end{split}\]
参数:
  • qubits_idx (Union[Iterable, str], optional) – 作用在的量子比特的编号,默认为 'cycle'

  • depth (int, optional) – 层数,默认为 1

swap(qubits_idx='cycle', depth=1)

添加 SWAP 门。

其矩阵形式为:

\[\begin{split}\begin{align} \mathit{SWAP} = \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} \end{align}\end{split}\]
参数:
  • qubits_idx (Union[Iterable, str], optional) – 作用在的量子比特的编号,默认为 'cycle'

  • depth (int, optional) – 层数,默认为 1

cp(qubits_idx='cycle', depth=1, param=None, param_sharing=False)

添加受控 P 门。

其矩阵形式为:

\[\begin{split}\begin{align} \mathit{CP}(\theta) = \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & e^{i\theta} \end{bmatrix} \end{align}\end{split}\]
参数:
  • qubits_idx (Union[Iterable, str], optional) – 作用在的量子比特的编号,默认为 'cycle'

  • depth (int, optional) – 层数,默认为 1

  • param (Union[paddle.Tensor, float], optional) – 量子门参数,默认为 None

  • param_sharing (bool, optional) – 同一层中的量子门是否共享参数,默认为 False

crx(qubits_idx='cycle', depth=1, param=None, param_sharing=False)

添加关于 x 轴的受控单量子比特旋转门。

其矩阵形式为:

\[\begin{split}\begin{align} \mathit{CR_X} &=|0\rangle \langle 0|\otimes I + |1 \rangle \langle 1|\otimes R_X\\ &= \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & \cos\frac{\theta}{2} & -i\sin\frac{\theta}{2} \\ 0 & 0 & -i\sin\frac{\theta}{2} & \cos\frac{\theta}{2} \end{bmatrix} \end{align}\end{split}\]
参数:
  • qubits_idx (Union[Iterable, str], optional) – 作用在的量子比特的编号,默认为 'cycle'

  • depth (int, optional) – 层数,默认为 1

  • param (Union[paddle.Tensor, float], optional) – 量子门参数,默认为 None

  • param_sharing (bool, optional) – 同一层中的量子门是否共享参数,默认为 False

cry(qubits_idx='cycle', depth=1, param=None, param_sharing=False)

添加关于 y 轴的受控单量子比特旋转门。

其矩阵形式为:

\[\begin{split}\begin{align} \mathit{CR_Y} &=|0\rangle \langle 0|\otimes I + |1 \rangle \langle 1|\otimes R_Y\\ &= \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & \cos\frac{\theta}{2} & -\sin\frac{\theta}{2} \\ 0 & 0 & \sin\frac{\theta}{2} & \cos\frac{\theta}{2} \end{bmatrix} \end{align}\end{split}\]
参数:
  • qubits_idx (Union[Iterable, str], optional) – 作用在的量子比特的编号,默认为 'cycle'

  • depth (int, optional) – 层数,默认为 1

  • param (Union[paddle.Tensor, float], optional) – 量子门参数,默认为 None

  • param_sharing (bool, optional) – 同一层中的量子门是否共享参数,默认为 False

crz(qubits_idx='cycle', depth=1, param=None, param_sharing=False)

添加关于 z 轴的受控单量子比特旋转门。

其矩阵形式为:

\[\begin{split}\begin{align} \mathit{CR_Z} &= |0\rangle \langle 0|\otimes I + |1 \rangle \langle 1|\otimes R_Z\\ &= \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & e^{i\theta} \end{bmatrix} \end{align}\end{split}\]
参数:
  • qubits_idx (Union[Iterable, str], optional) – 作用在的量子比特的编号,默认为 'cycle'

  • depth (int, optional) – 层数,默认为 1

  • param (Union[paddle.Tensor, float], optional) – 量子门参数,默认为 None

  • param_sharing (bool, optional) – 同一层中的量子门是否共享参数,默认为 False

cu(qubits_idx='cycle', depth=1, param=None, param_sharing=False)

添加受控单量子比特旋转门。

其矩阵形式为:

\[\begin{split}\begin{align} \mathit{CU} &= \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & \cos\frac\theta2 &-e^{i\lambda}\sin\frac\theta2 \\ 0 & 0 & e^{i\phi}\sin\frac\theta2&e^{i(\phi+\lambda)}\cos\frac\theta2 \end{bmatrix} \end{align}\end{split}\]
参数:
  • qubits_idx (Union[Iterable, str], optional) – 作用在的量子比特的编号,默认为 'cycle'

  • depth (int, optional) – 层数,默认为 1

  • param (Union[paddle.Tensor, float], optional) – 量子门参数,默认为 None

  • param_sharing (bool, optional) – 同一层中的量子门是否共享参数,默认为 False

rxx(qubits_idx='cycle', depth=1, param=None, param_sharing=False)

添加 RXX 门。

其矩阵形式为:

\[\begin{split}\begin{align} \mathit{R_{XX}}(\theta) = \begin{bmatrix} \cos\frac{\theta}{2} & 0 & 0 & -i\sin\frac{\theta}{2} \\ 0 & \cos\frac{\theta}{2} & -i\sin\frac{\theta}{2} & 0 \\ 0 & -i\sin\frac{\theta}{2} & \cos\frac{\theta}{2} & 0 \\ -i\sin\frac{\theta}{2} & 0 & 0 & \cos\frac{\theta}{2} \end{bmatrix} \end{align}\end{split}\]
参数:
  • qubits_idx (Union[Iterable, str], optional) – 作用在的量子比特的编号,默认为 'cycle'

  • depth (int, optional) – 层数,默认为 1

  • param (Union[paddle.Tensor, float], optional) – 量子门参数,默认为 None

  • param_sharing (bool, optional) – 同一层中的量子门是否共享参数,默认为 False

ryy(qubits_idx='cycle', depth=1, param=None, param_sharing=False)

添加 RYY 门。

其矩阵形式为:

\[\begin{split}\begin{align} \mathit{R_{YY}}(\theta) = \begin{bmatrix} \cos\frac{\theta}{2} & 0 & 0 & i\sin\frac{\theta}{2} \\ 0 & \cos\frac{\theta}{2} & -i\sin\frac{\theta}{2} & 0 \\ 0 & -i\sin\frac{\theta}{2} & \cos\frac{\theta}{2} & 0 \\ i\sin\frac{\theta}{2} & 0 & 0 & cos\frac{\theta}{2} \end{bmatrix} \end{align}\end{split}\]
参数:
  • qubits_idx (Union[Iterable, str], optional) – 作用在的量子比特的编号,默认为 'cycle'

  • depth (int, optional) – 层数,默认为 1

  • param (Union[paddle.Tensor, float], optional) – 量子门参数,默认为 None

  • param_sharing (bool, optional) – 同一层中的量子门是否共享参数,默认为 False

rzz(qubits_idx='cycle', depth=1, param=None, param_sharing=False)

添加 RZZ 门。

其矩阵形式为:

\[\begin{split}\begin{align} \mathit{R_{ZZ}}(\theta) = \begin{bmatrix} e^{-i\frac{\theta}{2}} & 0 & 0 & 0 \\ 0 & e^{i\frac{\theta}{2}} & 0 & 0 \\ 0 & 0 & e^{i\frac{\theta}{2}} & 0 \\ 0 & 0 & 0 & e^{-i\frac{\theta}{2}} \end{bmatrix} \end{align}\end{split}\]
参数:
  • qubits_idx (Union[Iterable, str], optional) – 作用在的量子比特的编号,默认为 'cycle'

  • depth (int, optional) – 层数,默认为 1

  • param (Union[paddle.Tensor, float], optional) – 量子门参数,默认为 None

  • param_sharing (bool, optional) – 同一层中的量子门是否共享参数,默认为 False

ms(qubits_idx='cycle', depth=1)

添加 Mølmer-Sørensen (MS) 门。

其矩阵形式为:

\[\begin{split}\begin{align} \mathit{MS} = \mathit{R_{XX}}(-\frac{\pi}{2}) = \frac{1}{\sqrt{2}} \begin{bmatrix} 1 & 0 & 0 & i \\ 0 & 1 & i & 0 \\ 0 & i & 1 & 0 \\ i & 0 & 0 & 1 \end{bmatrix} \end{align}\end{split}\]
参数:
  • qubits_idx (Union[Iterable, str], optional) – 作用在的量子比特的编号,默认为 'cycle'

  • depth (int, optional) – 层数,默认为 1

cswap(qubits_idx='cycle', depth=1)

添加 CSWAP (Fredkin) 门。

其矩阵形式为:

\[\begin{split}\begin{align} \mathit{CSWAP} = \begin{bmatrix} 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 \end{bmatrix} \end{align}\end{split}\]
参数:
  • qubits_idx (Union[Iterable, str], optional) – 作用在的量子比特的编号,默认为 'cycle'

  • depth (int, optional) – 层数,默认为 1

ccx(qubits_idx='cycle', depth=1)

添加 CCX (Toffoli) 门。

其矩阵形式为:

\[\begin{split}\begin{align} \mathit{CCX} = \begin{bmatrix} 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 \\ 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 \end{bmatrix} \end{align}\end{split}\]
参数:
  • qubits_idx (Union[Iterable, str], optional) – 作用在的量子比特的编号,默认为 'cycle'

  • depth (int, optional) – 层数,默认为 1

universal_two_qubits(qubits_idx='cycle', depth=1, param=None, param_sharing=False)

添加两量子比特通用门,该通用门需要 15 个参数。

参数:
  • qubits_idx (Union[Iterable, str], optional) – 作用在的量子比特的编号,默认为 'cycle'

  • depth (int, optional) – 层数,默认为 1

  • param (Union[paddle.Tensor, float], optional) – 量子门参数,默认为 None

  • param_sharing (bool, optional) – 同一层中的量子门是否共享参数,默认为 False

universal_three_qubits(qubits_idx='cycle', depth=1, param=None, param_sharing=False)

添加三量子比特通用门,该通用门需要 81 个参数。

参数:
  • qubits_idx (Union[Iterable, str], optional) – 作用在的量子比特的编号,默认为 'cycle'

  • depth (int, optional) – 层数,默认为 1

  • param (Union[paddle.Tensor, float], optional) – 量子门参数,默认为 None

  • param_sharing (bool, optional) – 同一层中的量子门是否共享参数,默认为 False

oracle(oracle, qubits_idx, depth=1, gate_name='0', latex_name=None, plot_width=None)

添加一个 oracle 门。

参数:
  • oracle (paddle.tensor) – 要实现的 oracle。

  • qubits_idx (Union[Iterable[Iterable[int]], Iterable[int], int]) – 作用在的量子比特的编号。

  • depth (int, optional) – 层数,默认为 1

  • gate_name (str, optional) – oracle 的名字,默认为 O

  • latex_name (str, optional) – oracle 的Latex名字,默认为 None,此时用 gate_name。

  • plot_width (float, optional) – 电路图中此门的宽度,默认为 None,此时与门名称成比例。

control_oracle(oracle, qubits_idx, depth=1, gate_name='0', latex_name=None, plot_width=None)

添加一个受控 oracle 门。

参数:
  • oracle (paddle.tensor) – 要实现的 oracle。

  • qubits_idx (Union[Iterable[Iterable[int]], Iterable[int], int]) – 作用在的量子比特的编号。

  • depth (int, optional) – 层数,默认为 1

  • gate_name (float, optional) – oracle 的名字,默认为 cO

  • latex_name (str, optional) – oracle 的Latex名字,默认为 None,此时用 gate_name。

  • plot_width – 电路图中此门的宽度,默认为 None,此时与门名称成比例。

collapse(qubits_idx='full', desired_result=None, if_print=False, measure_basis='z')

添加一个坍缩算子

参数:
  • qubits_idx (Union[Iterable[Iterable[int]], Iterable[int], int]) – 作用的量子比特的编号。

  • desired_result (Union[int, str]) – 期望的坍缩态(现只支持输入计算基),默认为 None (随机坍缩)。

  • if_print (bool, optional) – 是否要打印坍缩的信息,默认为 True

  • measure_basis (Union[Iterable[paddle.Tensor], str]) – 要观测的测量基底,默认为 z

抛出:
  • NotImplementdError – 要观测的测量基底只能为 z,其他测量基底会在之后推出。

  • TypeError – 当 backendunitary_matrix 时,无法获取输入态的概率。

superposition_layer(qubits_idx=None, depth=1)

添加一个 Hadamard 门组成的层。

参数:
  • qubits_idx (Union[Iterable[int], str], optional) – 作用在的量子比特的编号,默认为 None

  • depth (int, optional) – 层数,默认为 1

weak_superposition_layer(qubits_idx=None, depth=1)

转角度为 \(\pi/4\) 的 Ry 门组成的层。

参数:
  • qubits_idx (Union[Iterable[int], str], optional) – 作用在的量子比特的编号,默认为 None

  • depth (int, optional) – 层数,默认为 1

linear_entangled_layer(qubits_idx=None, depth=1)

包含 Ry 门、Rz 门,和 CNOT 门的线性纠缠层。

参数:
  • qubits_idx (Union[Iterable[int], str], optional) – 作用在的量子比特的编号,默认为 None

  • depth (int, optional) – 层数,默认为 1

real_entangled_layer(qubits_idx=None, depth=1)

包含 Ry 门和 CNOT 门的强纠缠层。

参数:
  • qubits_idx (Union[Iterable[int], str], optional) – 作用在的量子比特的编号,默认为 None

  • depth (int, optional) – 层数,默认为 1

complex_entangled_layer(qubits_idx=None, depth=1)

包含 U3 门和 CNOT 门的强纠缠层。

参数:
  • qubits_idx (Union[Iterable[int], str], optional) – 作用在的量子比特的编号,默认为 None

  • depth (int, optional) – 层数,默认为 1

real_block_layer(qubits_idx=None, depth=1)

包含 Ry 门和 CNOT 门的弱纠缠层。

参数:
  • qubits_idx (Union[Iterable[int], str], optional) – 作用在的量子比特的编号,默认为 None

  • depth (int, optional) – 层数,默认为 1

complex_block_layer(qubits_idx=None, depth=1)

包含 U3 门和 CNOT 门的弱纠缠层。

参数:
  • qubits_idx (Union[Iterable[int], str], optional) – 作用在的量子比特的编号,默认为 None

  • depth (int, optional) – 层数,默认为 1

bit_flip(prob, qubits_idx='full')

添加比特反转信道。

参数:
  • prob (Union[paddle.Tensor, float]) – 发生比特反转的概率。

  • qubits_idx (Union[Iterable[int], int, str], optional) – 作用在的量子比特的编号, 默认为 'full'

phase_flip(prob, qubits_idx='full')

添加相位反转信道。

参数:
  • prob (Union[paddle.Tensor, float]) – 发生相位反转的概率。

  • qubits_idx (Union[Iterable[int], int, str], optional) – 作用在的量子比特的编号, 默认为 'full'

bit_phase_flip(prob, qubits_idx='full')

添加比特相位反转信道。

参数:
  • prob (Union[paddle.Tensor, float]) – 发生比特相位反转的概率。

  • qubits_idx (Union[Iterable[int], int, str], optional) – 作用在的量子比特的编号, 默认为 'full'

amplitude_damping(gamma, qubits_idx='full')

添加振幅阻尼信道。

参数:
  • gamma – 减振概率。

  • qubits_idx (Union[Iterable[int], int, str], optional) – 作用在的量子比特的编号, 默认为 'full'

generalized_amplitude_damping(gamma, prob, qubits_idx='full')

添加广义振幅阻尼信道。

参数:
  • gamma – 减振概率,其值应该在 \([0, 1]\) 区间内。

  • prob (Union[paddle.Tensor, float]) – 激发概率,其值应该在 \([0, 1]\) 区间内。

  • qubits_idx (Union[Iterable[int], int, str], optional) – 作用在的量子比特的编号, 默认为 'full'

phase_damping(gamma, qubits_idx='full')

添加相位阻尼信道。

参数:
  • gamma – 该信道的参数。

  • qubits_idx (Union[Iterable[int], int, str], optional) – 作用在的量子比特的编号, 默认为 'full'

depolarizing(prob, qubits_idx='full')

添加去极化信道。

参数:
  • prob (Union[paddle.Tensor, float]) – 该信道的参数。

  • qubits_idx (Union[Iterable[int], int, str], optional) – 作用在的量子比特的编号, 默认为 'full'

generalized_depolarizing(prob, qubits_idx)

添加一个广义去极化信道。

参数:
  • prob (Union[paddle.Tensor, float]) – 该信道的参数。

  • qubits_idx (Union[Iterable[int], int, str], optional) – 作用在的量子比特的编号。

pauli_channel(prob, qubits_idx='full')

添加泡利信道。

参数:
  • prob (Union[paddle.Tensor, float]) – 该信道的参数。

  • qubits_idx (Union[Iterable[int], int, str], optional) – 作用在的量子比特的编号, 默认为 'full'

reset_channel(prob, qubits_idx='full')

添加重置信道。

参数:
  • prob (Union[paddle.Tensor, float]) – 重置为 \(|0\rangle\) 和重置为 \(|1\rangle\) 的概率。

  • qubits_idx (Union[Iterable[int], int, str], optional) – 作用在的量子比特的编号, 默认为 'full'

thermal_relaxation(const_t, exec_time, qubits_idx='full')

添加热弛豫信道。

参数:
  • const_t (Union[paddle.Tensor, Iterable[float]]) – \(T_1\)\(T_2\) 过程的弛豫时间常数,单位是微秒。

  • exec_time (Union[paddle.Tensor, float]) – 弛豫过程中量子门的执行时间,单位是纳秒。

  • qubits_idx (Union[Iterable[int], int, str], optional) – 作用在的量子比特的编号, 默认为 'full'

mixed_unitary_channel(num_unitary, qubits_idx='full')

添加混合酉矩阵信道。

参数:
  • num_unitary (Union[paddle.Tensor, Iterable[int]]) – 用于构成信道的酉矩阵的数量。

  • qubits_idx (Union[Iterable[int], int, str], optional) – 作用在的量子比特的编号, 默认为 'full'

choi_channel(choi_repr, qubits_idx)

添加一个 Choi 表示的自定义量子信道。

参数:
  • choi_repr (Iterable[paddle.Tensor]) – 该信道的 Choi 表示。

  • qubits_idx (Union[Iterable[Iterable[int]], Iterable[int], int]) – 作用在的量子比特的编号。

kraus_channel(kraus_oper, qubits_idx)

添加一个 Kraus 表示的自定义量子信道。

参数:
  • kraus_oper (Iterable[paddle.Tensor]) – 该信道的 Kraus 表示。

  • qubits_idx (Union[Iterable[Iterable[int]], Iterable[int], int]) – 作用在的量子比特的编号。

stinespring_channel(stinespring_repr, qubits_idx)

添加一个 Stinespring 表示的自定义量子信道。

参数:
  • stinespring_repr (Iterable[paddle.Tensor]) – 该信道的 Stinespring 表示。

  • qubits_idx (Union[Iterable[Iterable[int]], Iterable[int], int]) – 作用在的量子比特的编号。

unitary_matrix()

电路的酉矩阵形式。

返回:

返回电路的酉矩阵形式

返回类型:

paddle.Tensor

property gate_history

量子门的插入信息。

返回:

量子门的插入历史

返回类型:

List[Dict[str, Union[str, List[int], paddle.Tensor]]]

property depth

量子门序列的深度。

返回:

电路的深度

返回类型:

int

property qubit_history

每个比特上的量子门的插入信息。

返回:

每个比特上的量子门的插入历史

返回类型:

List[List[Tuple[Dict[str, Union[str, List[int], paddle.Tensor]], int]]]

plot(save_path, dpi=100, show=True, output=False, scale=1.0, tex=False)

画出量子电路图。

参数:
  • save_path (str, optional) – 图像保存的路径,默认为 None

  • dpi (int, optional) – 每英寸像素数,这里指分辨率, 默认为 100

  • show (bool, optional) – 是否执行 plt.show(), 默认为 True

  • output (bool, optional) – 是否返回 matplotlib.figure.Figure 实例,默认为 False

  • scale (float, optional) – figurescale 系数,默认为 1.0

  • tex (bool, optional) – 一个布尔变量,用于控制是否使用 TeX 字体,默认为 False

返回:

根据 output 参数返回 matplotlib.figure.Figure 实例或 None

返回类型:

Union[None, matplotlib.figure.Figure]

备注

使用 plt.show() 或许会导致一些问题,但是在保存图片时不会发生。如果电路太深可能会有一些图形无法显示。如果设置 tex = True 则需要在你的系统上安装 TeX 及其相关的依赖包。更多细节参考 https://matplotlib.org/stable/gallery/text_labels_and_annotations/tex_demo.html

extend(cir)

量子电路扩展。

参数:

cir (Circuit) – 量子电路。