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')
在
Uniform
和Normal
的分布中随机化电路参数。关于 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 – 当
backend
为unitary_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) –
figure
的scale
系数,默认为 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