mindquantum.core.circuit.Circuit#
- class mindquantum.core.circuit.Circuit(gates=None)#
量子线路模块。 量子线路包含一个或多个量子门,可以在量子模拟器中进行计算。可以通过添加量子门或另一电路的方式容易地构建量子线路。
- 参数:
gates (BasicGate, list[BasicGate]) - 可以通过单个量子门或门列表初始化量子线路。默认值:
None。
- property ansatz_params_name#
获取线路中ansatz部分的参数名称。
- 返回:
list,线路中ansatz部分参数名称的list。
- append(gate)#
增加一个门。
- 参数:
gate (BasicGate) - 增加的门。
- apply_value(pr)#
用输入的参数将该参数化量子线路转化为非参数量子线路。
- 参数:
pr (Union[dict, ParameterResolver]) - 应用到此线路中的参数。
- 返回:
Circuit,不含参线路。
- as_ansatz(inplace=True)#
将该量子线路变为ansatz量子线路。
- 参数:
inplace (bool) - 是否原位设置。默认值:
True。
- as_encoder(inplace=True)#
将该量子线路变为编码量子线路。
- 参数:
inplace (bool) - 是否原位设置。默认值:
True。
- barrier(show=True)#
添加barrier。
- 参数:
show (bool) - 是否显示barrier。默认值:
True。
- compress()#
删除所有未使用的量子比特,并将量子比特映射到 range(n_qubits) 。
- copy()#
返回该量子线路的浅拷贝。
- depth(with_single=True, with_barrier=False)#
获取整个量子线路的深度。
- 参数:
with_single (bool) - 是否考虑单量子比特门。默认值:
False。with_barrier (bool) - 是否将量子门对齐到栅栏门。默认值:
False。
- static display_detail(state)#
是否展示线路细节。
- 参数:
state (bool) - 是否展示细节的布尔值状态。
- property encoder_params_name#
获取线路中encoder部分的参数名称。
- 返回:
list,线路中encoder部分参数名称的list。
- extend(gates)#
扩展线路。
- 参数:
gates (Union[Circuit, list[BasicGate]]) - Circuit 或 BasicGate 的list。
- static from_hiqasm(hiqasm_str)#
将 HiQASM 字符串的量子线路或者 HiQASM 文件转化为 MindQuantum 中的量子线路。
- 参数:
hiqasm_str (str) - HiQASM 中的字符串格式量子线路或者 HiQASM 的文件名。
- 返回:
Circuit,从HiQASM转换而来的MindQuantum量子线路。
- static from_openqasm(openqasm_str)#
将 OpenQASM 字符串的量子线路或者 OpenQASM 文件转化为 MindQuantum 中的量子线路。
- 参数:
openqasm_str (str) - OpenQASM 中的字符串格式量子线路或者 OpenQASM 的文件名。
- 返回:
Circuit,从OpenQASM转换而来的MindQuantum量子线路。
- static from_qcis(qcis_str)#
将 QCIS 字符串的量子线路或者 QCIS 文件转化为 MindQuantum 中的量子线路。
- 参数:
qcis_str (str) - QCIS 中的字符串格式量子线路或者 QCIS 的文件名。
- 返回:
Circuit,从 QCIS 转换而来的 MindQuantum 量子线路。
- fsim(theta, phi, obj_qubits, ctrl_qubits=None)#
在电路中添加 FSim 门。
- 参数:
theta (Union[dict, ParameterResolver]) - FSim 门的第一个参数。
phi (Union[dict, ParameterResolver]) - FSim 门的第二个参数。
obj_qubits (Union[int, list[int]]) - FSim 门的目标量子比特。
ctrl_qubits (Union[int, list[int]]) - FSim 门的控制量子比特。默认值:
None。
- get_cpp_obj(hermitian=False)#
获取线路的cpp object。
- 参数:
hermitian (bool) - 是否获取线路cpp object的hermitian版本。默认值:
False。
- get_qs(backend='mqvector', pr=None, ket=False, seed=None, dtype=None)#
获取线路的最终量子态。
- 参数:
backend (str) - 使用的后端。默认值:
'mqvector'。pr (Union[numbers.Number, ParameterResolver, dict, numpy.ndarray]) - 线路的参数,线路含参数时提供。默认值:
None。ket (str) - 是否以ket格式返回量子态。默认值:
False。seed (int) - 模拟器的随机种子。默认值:
None。dtype (mindquantum.dtype) - 模拟器的数据类型。默认值:
None。
- givens(para, obj_qubits, ctrl_qubits=None)#
在电路中添加 Givens 门。
- 参数:
para (Union[dict, ParameterResolver]) - Givens 门的参数。
obj_qubits (Union[int, list[int]]) - Givens 门的目标量子比特。
ctrl_qubits (Union[int, list[int]]) - Givens 门的控制量子比特。默认值:
None。
- global_phase(para, obj_qubits, ctrl_qubits=None)#
在电路中添加 GlobalPhase 门。
- 参数:
para (Union[dict, ParameterResolver]) - GlobalPhase 门的参数。
obj_qubits (Union[int, list[int]]) - GlobalPhase 门的目标量子比特。
ctrl_qubits (Union[int, list[int]]) - GlobalPhase 门的控制量子比特。默认值:
None。
- h(obj_qubits, ctrl_qubits=None)#
在电路中添加 H 门。
- 参数:
obj_qubits (Union[int, list[int]]) - H 门的目标量子比特。
ctrl_qubits (Union[int, list[int]]) - H 门的控制量子比特。默认值:
None。
- property has_measure_gate#
检查线路是否有测量门。
- 返回:
bool,线路是否有测量门。
- hermitian()#
获得量子线路的厄米共轭。
- insert(index, gates)#
在索引处插入量子门或量子线路。
- 参数:
index (int) - 用来设置门的索引。
gates (Union[BasicGate, list[BasicGate]]) - 需要插入的量子门。
- property is_measure_end#
检查线路中的测量门是否都在末端。
满足以下条件时返回True: 1. 至少存在一个测量门 2. 每个量子比特最多有一个测量门 3. 如果量子比特有测量门,则必须是其最后一个操作
- 返回:
bool,线路中的测量门是否都在末端。
- property is_noise_circuit#
检查线路是否有噪声信道。
- 返回:
bool,线路是否有噪声信道。
- iswap(obj_qubits, ctrl_qubits=None)#
在电路中添加 ISWAP 门。
- 参数:
obj_qubits (Union[int, list[int]]) - ISWAP 门的目标量子比特。
ctrl_qubits (Union[int, list[int]]) - ISWAP 门的控制量子比特。默认值:
None。
- matrix(pr=None, big_end=False, backend='mqvector', seed=None, dtype=None)#
获取线路的矩阵表示。
- 参数:
pr (ParameterResolver, dict, numpy.ndarray, list, numbers.Number) - 含参量子线路的参数。默认值:
None。big_end (bool) - 低索引量子比特是否放置在末尾。默认值:
False。backend (str) - 进行模拟的后端。默认值:
'mqvector'。seed (int) - 生成线路矩阵的随机数,如果线路包含噪声信道。
dtype (mindquantum.dtype) - 模拟器的数据类型。默认值:
None。
- 返回:
numpy.ndarray,线路的二维复矩阵。
- measure(key, obj_qubit=None, reset_to=None)#
添加一个测量门。
- 参数:
key (Union[int, str]) - 如果 obj_qubit 为
None,则 key 应为int,表示要测量哪个量子比特,否则, key 应为str,表示测量门的名称。obj_qubit (int) - 要测量的量子比特。默认值:
None。reset_to (Union[int, None]) - 将量子比特重置为0态或者1态。如果是
None,则不重置量子比特。默认值:None。
- measure_all(suffix=None, up_to=-1)#
测量所有量子比特。
- 参数:
suffix (str) - 添加到测量门名称中的后缀字符串。
up_to (int) - 想要测得的最大比特。如果该值小于量子线路的比特数,量子线路的比特数将会被使用。默认值:
-1。
- property n_qubits#
获取量子线路所使用的比特数。
- no_grad()#
设置量子线路中所有不需要梯度的含参门。
- parameter_resolver()#
获取整个线路的parameter resolver。
备注
因为相同的参数可以在不同的门中,并且系数可以不同,所以这个parameter resolver只返回量子线路的参数是什么,哪些参数需要梯度。显示系数的更详细的parameter resolver位于线路的每个门中。
- 返回:
ParameterResolver,整个线路的parameter resolver。
- property parameterized#
检查线路是否是含参量子线路。
- 返回:
bool,线路是否是含参量子线路。
- property params_name#
获取线路的参数名称。
- 返回:
list,包含参数名称的list。
- phase_shift(para, obj_qubits, ctrl_qubits=None)#
添加一个PhaseShift门。
- 参数:
para (Union[dict, ParameterResolver]) - PhaseShift 门的参数。
obj_qubits (Union[int, list[int]]) - PhaseShift 门的目标量子比特。
ctrl_qubits (Union[int, list[int]]) - PhaseShift 门的控制量子比特。默认值:
None。
- remove_barrier()#
移除所有barrier门。
- remove_measure()#
移除所有的测量门。
- remove_measure_on_qubits(qubits)#
移除某些量子比特上所有的测量门。
- 参数:
qubits (Union[int, list[int]]) - 需要删除测量门的量子比特。
- remove_noise()#
删除量子线路中的所有噪声信道。
- requires_grad()#
将量子线路中的所有含参门都设置为需要梯度。
- reverse_qubits()#
将线路翻转成大端头(big endian)。
备注
此操作还会改变测量门作用的量子比特,这可能导致测量门的键不再与实际测量的量子比特对应。
- rx(para, obj_qubits, ctrl_qubits=None)#
在电路中添加 RX 门。
- 参数:
para (Union[dict, ParameterResolver]) - RX 门的参数。
obj_qubits (Union[int, list[int]]) - RX 门的目标量子比特。
ctrl_qubits (Union[int, list[int]]) - RX 门的控制量子比特。默认值:
None。
- rxx(para, obj_qubits, ctrl_qubits=None)#
在电路中添加 Rxx 门。
- 参数:
para (Union[dict, ParameterResolver]) - Rxx 门的参数。
obj_qubits (Union[int, list[int]]) - Rxx 门的目标量子比特。
ctrl_qubits (Union[int, list[int]]) - Rxx 门的控制量子比特。默认值:
None。
- rxy(para, obj_qubits, ctrl_qubits=None)#
在电路中添加 Rxy 门。
- 参数:
para (Union[dict, ParameterResolver]) - Rxy 门的参数。
obj_qubits (Union[int, list[int]]) - Rxy 门的目标量子比特。
ctrl_qubits (Union[int, list[int]]) - Rxy 门的控制量子比特。默认值:
None。
- rxz(para, obj_qubits, ctrl_qubits=None)#
在电路中添加 Rxz 门。
- 参数:
para (Union[dict, ParameterResolver]) - Rxz 门的参数。
obj_qubits (Union[int, list[int]]) - Rxz 门的目标量子比特。
ctrl_qubits (Union[int, list[int]]) - Rxz 门的控制量子比特。默认值:
None。
- ry(para, obj_qubits, ctrl_qubits=None)#
在电路中添加 RY 门。
- 参数:
para (Union[dict, ParameterResolver]) - RY 门的参数。
obj_qubits (Union[int, list[int]]) - RY 门的目标量子比特。
ctrl_qubits (Union[int, list[int]]) - RY 门的控制量子比特。默认值:
None。
- ryy(para, obj_qubits, ctrl_qubits=None)#
在电路中添加 Ryy 门。
- 参数:
para (Union[dict, ParameterResolver]) - Ryy 门的参数。
obj_qubits (Union[int, list[int]]) - Ryy 门的目标量子比特。
ctrl_qubits (Union[int, list[int]]) - Ryy 门的控制量子比特。默认值:
None。
- ryz(para, obj_qubits, ctrl_qubits=None)#
在电路中添加 Ryz 门。
- 参数:
para (Union[dict, ParameterResolver]) - Ryz 门的参数。
obj_qubits (Union[int, list[int]]) - Ryz 门的目标量子比特。
ctrl_qubits (Union[int, list[int]]) - Ryz 门的控制量子比特。默认值:
None。
- rz(para, obj_qubits, ctrl_qubits=None)#
在电路中添加 RZ 门。
- 参数:
para (Union[dict, ParameterResolver]) - RZ 门的参数。
obj_qubits (Union[int, list[int]]) - RZ 门的目标量子比特。
ctrl_qubits (Union[int, list[int]]) - RZ 门的控制量子比特。默认值:
None。
- rzz(para, obj_qubits, ctrl_qubits=None)#
在电路中添加 Rzz 门。
- 参数:
para (Union[dict, ParameterResolver]) - Rzz 门的参数。
obj_qubits (Union[int, list[int]]) - Rzz 门的目标量子比特。
ctrl_qubits (Union[int, list[int]]) - Rzz 门的控制量子比特。默认值:
None。
- s(obj_qubits, ctrl_qubits=None, hermitian=False)#
在电路中添加 S 门。
- 参数:
obj_qubits (Union[int, list[int]]) - S 门的目标量子比特。
ctrl_qubits (Union[int, list[int]]) - S 门的控制量子比特。默认值:
None。hermitian (bool) - 是否添加 S 门的轭米形式。默认值:
False。
- summary(show=True)#
打印当前线路的信息,包括块的数量、门的数量、不含参门的数量、含参门的数量和参数的个数。
- 参数:
show (bool) - 是否显示信息。默认值:
True。
- svg(style=None, width=None, scale=None)#
在Jupyter Notebook中将当前量子线路用SVG图展示。
- 参数:
style (dict, str) - 设置svg线路的样式。目前,我们支持’official’,’light’和’dark’。默认值:
None。width (int, float) - 设置量子线路的最大宽度。默认值:
None。scale (Union[float, None]) - 设置量子线路的缩放尺度。如果是
None,则不缩放。默认值:None。
- swap(obj_qubits, ctrl_qubits=None)#
在电路中添加 SWAP 门。
- 参数:
obj_qubits (Union[int, list[int]]) - SWAP 门的目标量子比特。
ctrl_qubits (Union[int, list[int]]) - SWAP 门的控制量子比特。默认值:
None。
- swap_alpha(para, obj_qubits, ctrl_qubits=None)#
在电路中添加 SWAPalpha 门。
- 参数:
para (Union[dict, ParameterResolver]) - SWAPalpha 门的参数。
obj_qubits (Union[int, list[int]]) - SWAPalpha 门的目标量子比特。
ctrl_qubits (Union[int, list[int]]) - SWAPalpha 门的控制量子比特。默认值:
None。
- sx(obj_qubits, ctrl_qubits=None, hermitian=False)#
在电路中添加 SX 门。
- 参数:
obj_qubits (Union[int, list[int]]) - SX 门的目标量子比特。
ctrl_qubits (Union[int, list[int]]) - SX 门的控制量子比特。默认值:
None。hermitian (bool) - 是否添加 SX 门的轭米形式。默认值:
False。
- t(obj_qubits, ctrl_qubits=None, hermitian=False)#
在电路中添加 T 门。
- 参数:
obj_qubits (Union[int, list[int]]) - T 门的目标量子比特。
ctrl_qubits (Union[int, list[int]]) - T 门的控制量子比特。默认值:
None。hermitian (bool) - 是否添加 T 门的轭米形式。默认值:
False。
- to_hiqasm(file_name=None, version='0.1')#
将 MindQuantum 中的量子线路转化为 HiQASM 字符串或者文件。
- 参数:
file_name (str) - 保存成 HiQASM 文件的文件名。默认值:
None。version (str) - HiQASM 版本。默认值:
0.1。
- 返回:
str,HiQASM格式的量子线路字符串。
- to_openqasm(file_name=None, version='2.0')#
将 MindQuantum 中的量子线路转化为 OpenQASM 字符串或者文件。
- 参数:
file_name (str) - 保存成 OpenQASM 文件的文件名。默认值:
None。version (str) - OpenQASM 版本。默认值:
2.0。
- 返回:
str,OpenQASM格式的量子线路字符串。
- to_qcis(file_name=None, parametric=True)#
将 MindQuantum 中的量子线路转化为 QCIS 字符串或者文件。
- 参数:
file_name (str) - 保存成 QCIS 文件的文件名。默认值:
None。parametric (bool) - 是否保留参数。如果为
False,则会丢弃所有参数,以及参数值为 0 的参数门,参数门的角度也会被限制在区间 [-pi, pi]。默认值:True。
- 返回:
str,QCIS格式的量子线路字符串。
- u3(theta, phi, lamda, obj_qubits, ctrl_qubits=None)#
在电路中添加 U3 门。
- 参数:
theta (Union[dict, ParameterResolver]) - U3 门的第一个参数。
phi (Union[dict, ParameterResolver]) - U3 门的第二个参数。
lamda (Union[dict, ParameterResolver]) - U3 门的第三个参数。
obj_qubits (Union[int, list[int]]) - U3 门的目标量子比特。
ctrl_qubits (Union[int, list[int]]) - U3 门的控制量子比特。默认值:
None。
- un(gate, maps_obj, maps_ctrl=None)#
将量子门作用于多个目标量子比特和控制量子比特,详见类
UN。- 参数:
gate (BasicGate) - 要执行的量子门。
maps_obj (Union[int, list[int]]) - 执行该量子门的目标量子比特。
maps_ctrl (Union[int, list[int]]) - 执行该量子门的控制量子比特。默认值:
None。
- with_noise(noise_gate=mq_gates.AmplitudeDampingChannel(0.001), also_ctrl=False)#
在每个量子门后面添加一个噪声信道。
- 参数:
noise_gate (NoiseGate) - 想要添加的噪声信道。默认值:
AmplitudeDampingChannel(0.001)。also_ctrl (bool) - 是否在控制比特上也加噪声信道。默认值:
False。
- x(obj_qubits, ctrl_qubits=None)#
在电路中添加 X 门。
- 参数:
obj_qubits (Union[int, list[int]]) - X 门的目标量子比特。
ctrl_qubits (Union[int, list[int]]) - X 门的控制量子比特。默认值:
None。
- y(obj_qubits, ctrl_qubits=None)#
在电路中添加 Y 门。
- 参数:
obj_qubits (Union[int, list[int]]) - Y 门的目标量子比特。
ctrl_qubits (Union[int, list[int]]) - Y 门的控制量子比特。默认值:
None。
- z(obj_qubits, ctrl_qubits=None)#
在电路中添加 Z 门。
- 参数:
obj_qubits (Union[int, list[int]]) - Z 门的目标量子比特。
ctrl_qubits (Union[int, list[int]]) - Z 门的控制量子比特。默认值:
None。