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 门。
其矩阵形式为:
- 参数:
qubits_idx (Union[Iterable[int], int, str], optional) – 作用在的量子比特的编号,默认为
'full'
。depth (int, optional) – 层数,默认为
1
。
- s(qubits_idx='full', depth=1)
添加单量子比特 S 门。
其矩阵形式为:
- 参数:
qubits_idx (Union[Iterable[int], int, str], optional) – 作用在的量子比特的编号,默认为
'full'
。depth (int, optional) – 层数,默认为
1
。
- sdg(qubits_idx='full', depth=1)
添加单量子比特 S dagger (逆S)门。
其矩阵形式为:
- 参数:
qubits_idx (Union[Iterable[int], int, str], optional) – 作用在的量子比特的编号,默认为
'full'
。depth (int, optional) – 层数,默认为
1
。
- t(qubits_idx='full', depth=1)
添加单量子比特 T 门。
其矩阵形式为:
- 参数:
qubits_idx (Union[Iterable[int], int, str], optional) – 作用在的量子比特的编号,默认为
'full'
。depth (int, optional) – 层数,默认为
1
。
- tdg(qubits_idx='full', depth=1)
添加单量子比特 T dagger (逆T)门。
其矩阵形式为:
- 参数:
qubits_idx (Union[Iterable[int], int, str], optional) – 作用在的量子比特的编号,默认为
'full'
。depth (int, optional) – 层数,默认为
1
。
- x(qubits_idx='full', depth=1)
添加单量子比特 X 门。
其矩阵形式为:
- 参数:
qubits_idx (Union[Iterable, int, str], optional) – 作用在的量子比特的编号,默认为
'full'
。depth (int, optional) – 层数,默认为
1
。
- y(qubits_idx='full', depth=1)
添加单量子比特 Y 门。
其矩阵形式为:
- 参数:
qubits_idx (Union[Iterable, int, str], optional) – 作用在的量子比特的编号,默认为
'full'
。depth (int, optional) – 层数,默认为
1
。
- z(qubits_idx='full', depth=1)
添加单量子比特 Z 门。
其矩阵形式为:
- 参数:
qubits_idx (Union[Iterable, int, str], optional) – 作用在的量子比特的编号,默认为
'full'
。depth (int, optional) – 层数,默认为
1
。
- p(qubits_idx='full', depth=1, param=None, param_sharing=False)
添加单量子比特 P 门。
其矩阵形式为:
- 参数:
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 轴的单量子比特旋转门。
其矩阵形式为:
- 参数:
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 轴的单量子比特旋转门。
其矩阵形式为:
- 参数:
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 轴的单量子比特旋转门。
其矩阵形式为:
- 参数:
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)
添加单量子比特旋转门。
其矩阵形式为:
- 参数:
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 门。
其矩阵形式为:
- 参数:
qubits_idx (Union[Iterable, str], optional) – 作用在的量子比特的编号,默认为
'cycle'
。depth (int, optional) – 层数,默认为
1
。
- cy(qubits_idx='cycle', depth=1)
添加受控 Y 门。
其矩阵形式为:
- 参数:
qubits_idx (Union[Iterable, str], optional) – 作用在的量子比特的编号,默认为
'cycle'
。depth (int, optional) – 层数,默认为
1
。
- cz(qubits_idx='cycle', depth=1)
添加受控 Z 门。
其矩阵形式为:
- 参数:
qubits_idx (Union[Iterable, str], optional) – 作用在的量子比特的编号,默认为
'cycle'
。depth (int, optional) – 层数,默认为
1
。
- swap(qubits_idx='cycle', depth=1)
添加 SWAP 门。
其矩阵形式为:
- 参数:
qubits_idx (Union[Iterable, str], optional) – 作用在的量子比特的编号,默认为
'cycle'
。depth (int, optional) – 层数,默认为
1
。
- cp(qubits_idx='cycle', depth=1, param=None, param_sharing=False)
添加受控 P 门。
其矩阵形式为:
- 参数:
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 轴的受控单量子比特旋转门。
其矩阵形式为:
- 参数:
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 轴的受控单量子比特旋转门。
其矩阵形式为:
- 参数:
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 轴的受控单量子比特旋转门。
其矩阵形式为:
- 参数:
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)
添加受控单量子比特旋转门。
其矩阵形式为:
- 参数:
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 门。
其矩阵形式为:
- 参数:
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 门。
其矩阵形式为:
- 参数:
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 门。
其矩阵形式为:
- 参数:
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) 门。
其矩阵形式为:
- 参数:
qubits_idx (Union[Iterable, str], optional) – 作用在的量子比特的编号,默认为
'cycle'
。depth (int, optional) – 层数,默认为
1
。
- cswap(qubits_idx='cycle', depth=1)
添加 CSWAP (Fredkin) 门。
其矩阵形式为:
- 参数:
qubits_idx (Union[Iterable, str], optional) – 作用在的量子比特的编号,默认为
'cycle'
。depth (int, optional) – 层数,默认为
1
。
- ccx(qubits_idx='cycle', depth=1)
添加 CCX (Toffoli) 门。
其矩阵形式为:
- 参数:
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)
转角度为
的 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 – 减振概率,其值应该在
区间内。prob (Union[paddle.Tensor, float]) – 激发概率,其值应该在
区间内。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]) – 重置为
和重置为 的概率。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]]) –
和 过程的弛豫时间常数,单位是微秒。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