janus.circuit

目录

janus.circuit#

量子电路模块,提供电路构建、操作和表示。

核心类#

Circuit#

class janus.circuit.Circuit(n_qubits, n_clbits=0, name=None)[源代码]#

基类:object

量子电路类

表示完整的量子电路,支持两种模式: 1. 分层模式:电路由多个 Layer 组成,每层包含可并行执行的门 2. 顺序模式:按添加顺序记录所有指令

参数:
  • n_qubits (int)

  • n_clbits (int)

  • name (str | None)

n_qubits#

量子比特数

name#

电路名称

__init__(n_qubits, n_clbits=0, name=None)[源代码]#

初始化量子电路

参数:
  • n_qubits (int) -- 量子比特数量

  • n_clbits (int) -- 经典比特数量(默认为 0)

  • name (str | None) -- 电路名称(可选)

classmethod from_layers(layers, n_qubits=None, n_clbits=0, name=None)[源代码]#

从层列表创建电路

参数:
  • layers (List[List[dict]]) -- 层列表,每层是门字典的列表 格式: [[{'name': 'h', 'qubits': [0], 'params': []}], ...]

  • n_qubits (int | None) -- 量子比特数(可选,自动推断)

  • n_clbits (int) -- 经典比特数

  • name (str | None) -- 电路名称

返回:

新创建的电路

返回类型:

Circuit

示例

circuit = Circuit.from_layers([

[{'name': 'h', 'qubits': [0], 'params': []}], [{'name': 'cx', 'qubits': [0, 1], 'params': []}]

], n_qubits=2)

property gates: List[dict]#

获取展平的门列表

返回:

门字典列表,每个字典包含 name, qubits, params

返回类型:

List[dict]

property num_two_qubit_gate: int#

两比特门数量

property duration: int#

估算电路执行时间

单比特门: 30 时间单位 两比特门: 60 时间单位

property num_qubits: int#
property n_qubits: int#

兼容性属性:与 num_qubits 相同

property num_clbits: int#
property n_clbits: int#

兼容性属性:与 num_clbits 相同

property clbits: List[Clbit]#

获取所有经典比特

property parameters: Set[Parameter]#

获取电路中的所有参数

property name: str | None#
property instructions: List[Instruction]#

获取所有指令

property data: List[Instruction]#
property depth: int#

获取电路深度(层数)

property n_gates: int#

获取门的总数

property num_two_qubit_gates: int#

获取两比特门的数量

property layers: List[Layer]#

获取分层表示(延迟计算)

property qubits: List[Qubit]#

获取所有量子比特

property operated_qubits: List[int]#

获取实际被操作的量子比特

property measured_qubits: List[int] | None#

获取需要测量的量子比特列表

get_available_space(gate_index)[源代码]#

获取指定门可以移动的层范围

参数:

gate_index (int) -- 门在 gates 列表中的索引

返回:

门可以移动到的层索引范围

返回类型:

range

示例

circuit = Circuit(2) circuit.h(0) circuit.cx(0, 1) circuit.x(0)

# 获取第一个门可以移动的范围 available = circuit.get_available_space(0)

move_gate(gate_index, new_layer)[源代码]#

将门移动到新层

参数:
  • gate_index (int) -- 门在 gates 列表中的索引

  • new_layer (int) -- 目标层索引

返回:

新的电路(深拷贝)

返回类型:

Circuit

示例

circuit = Circuit(2) circuit.h(0) circuit.cx(0, 1)

# 移动第一个门到第1层 new_circuit = circuit.move_gate(0, 1)

clean_empty_layers()[源代码]#

清理空层

注意:由于 Circuit 使用延迟计算分层,此方法会强制重新计算

返回:

返回自身

返回类型:

Circuit

append(gate_or_circuit, qubits, clbits=None)[源代码]#

添加一个门或电路到当前电路

参数:
  • gate_or_circuit -- 要添加的门或电路

  • qubits (List[int]) -- 作用的量子比特

  • clbits (List[int] | None) -- 作用的经典比特(可选)

h(qubit, layer_index=None)[源代码]#

添加 Hadamard 门

参数:
  • qubit (int) -- 量子比特索引

  • layer_index (int | None) -- 指定层索引(可选)

返回类型:

Circuit

x(qubit, layer_index=None)[源代码]#

添加 Pauli-X 门

参数:
  • qubit (int) -- 量子比特索引

  • layer_index (int | None) -- 指定层索引(可选)

返回类型:

Circuit

y(qubit, layer_index=None)[源代码]#

添加 Pauli-Y 门

参数:
  • qubit (int) -- 量子比特索引

  • layer_index (int | None) -- 指定层索引(可选)

返回类型:

Circuit

z(qubit, layer_index=None)[源代码]#

添加 Pauli-Z 门

参数:
  • qubit (int) -- 量子比特索引

  • layer_index (int | None) -- 指定层索引(可选)

返回类型:

Circuit

s(qubit, layer_index=None)[源代码]#

添加 S 门 (sqrt(Z))

参数:
  • qubit (int) -- 量子比特索引

  • layer_index (int | None) -- 指定层索引(可选)

返回类型:

Circuit

t(qubit, layer_index=None)[源代码]#

添加 T 门 (sqrt(S))

参数:
  • qubit (int) -- 量子比特索引

  • layer_index (int | None) -- 指定层索引(可选)

返回类型:

Circuit

rx(theta, qubit, layer_index=None)[源代码]#

添加 RX 旋转门

参数:
  • theta (float) -- 旋转角度

  • qubit (int) -- 量子比特索引

  • layer_index (int | None) -- 指定层索引(可选)

返回类型:

Circuit

ry(theta, qubit, layer_index=None)[源代码]#

添加 RY 旋转门

参数:
  • theta (float) -- 旋转角度

  • qubit (int) -- 量子比特索引

  • layer_index (int | None) -- 指定层索引(可选)

返回类型:

Circuit

rz(theta, qubit, layer_index=None)[源代码]#

添加 RZ 旋转门

参数:
  • theta (float) -- 旋转角度

  • qubit (int) -- 量子比特索引

  • layer_index (int | None) -- 指定层索引(可选)

返回类型:

Circuit

u(theta, phi, lam, qubit, layer_index=None)[源代码]#

添加 U 门(通用单比特门)

参数:
  • theta (float) -- 旋转角度

  • phi (float) -- 旋转角度

  • lam (float) -- 旋转角度

  • qubit (int) -- 量子比特索引

  • layer_index (int | None) -- 指定层索引(可选)

返回类型:

Circuit

cx(control, target, layer_index=None)[源代码]#

添加 CNOT (CX) 门

参数:
  • control (int) -- 控制比特索引

  • target (int) -- 目标比特索引

  • layer_index (int | None) -- 指定层索引(可选)

返回类型:

Circuit

cz(control, target, layer_index=None)[源代码]#

添加 CZ 门

参数:
  • control (int) -- 控制比特索引

  • target (int) -- 目标比特索引

  • layer_index (int | None) -- 指定层索引(可选)

返回类型:

Circuit

crz(theta, control, target, layer_index=None)[源代码]#

添加 CRZ 门

参数:
  • theta (float) -- 旋转角度

  • control (int) -- 控制比特索引

  • target (int) -- 目标比特索引

  • layer_index (int | None) -- 指定层索引(可选)

返回类型:

Circuit

swap(qubit1, qubit2, layer_index=None)[源代码]#

添加 SWAP 门

参数:
  • qubit1 (int) -- 量子比特索引

  • qubit2 (int) -- 量子比特索引

  • layer_index (int | None) -- 指定层索引(可选)

返回类型:

Circuit

cswap(control, qubit1, qubit2, layer_index=None)[源代码]#

添加受控 SWAP(Fredkin)门

参数:
  • control (int) -- 控制比特索引

  • qubit1 (int) -- 交换的量子比特索引

  • qubit2 (int) -- 交换的量子比特索引

  • layer_index (int | None) -- 指定层索引(可选)

返回类型:

Circuit

id(qubit, layer_index=None)[源代码]#

添加 Identity 门

参数:
  • qubit (int)

  • layer_index (int | None)

返回类型:

Circuit

sdg(qubit, layer_index=None)[源代码]#

添加 S† 门

参数:
  • qubit (int)

  • layer_index (int | None)

返回类型:

Circuit

tdg(qubit, layer_index=None)[源代码]#

添加 T† 门

参数:
  • qubit (int)

  • layer_index (int | None)

返回类型:

Circuit

sx(qubit, layer_index=None)[源代码]#

添加 sqrt(X) 门

参数:
  • qubit (int)

  • layer_index (int | None)

返回类型:

Circuit

sxdg(qubit, layer_index=None)[源代码]#

添加 sqrt(X)† 门

参数:
  • qubit (int)

  • layer_index (int | None)

返回类型:

Circuit

p(lam, qubit, layer_index=None)[源代码]#

添加 Phase 门

参数:
返回类型:

Circuit

u1(lam, qubit, layer_index=None)[源代码]#

添加 U1 门

参数:
返回类型:

Circuit

u2(phi, lam, qubit, layer_index=None)[源代码]#

添加 U2 门

参数:
返回类型:

Circuit

u3(theta, phi, lam, qubit, layer_index=None)[源代码]#

添加 U3 门

参数:
返回类型:

Circuit

r(theta, phi, qubit, layer_index=None)[源代码]#

添加 R 门

参数:
返回类型:

Circuit

cy(control, target, layer_index=None)[源代码]#

添加 CY 门

参数:
  • control (int)

  • target (int)

  • layer_index (int | None)

返回类型:

Circuit

ch(control, target, layer_index=None)[源代码]#

添加 CH 门

参数:
  • control (int)

  • target (int)

  • layer_index (int | None)

返回类型:

Circuit

cs(control, target, layer_index=None)[源代码]#

添加 CS 门

参数:
  • control (int)

  • target (int)

  • layer_index (int | None)

返回类型:

Circuit

csdg(control, target, layer_index=None)[源代码]#

添加 CS† 门

参数:
  • control (int)

  • target (int)

  • layer_index (int | None)

返回类型:

Circuit

csx(control, target, layer_index=None)[源代码]#

添加 CSX 门

参数:
  • control (int)

  • target (int)

  • layer_index (int | None)

返回类型:

Circuit

dcx(qubit1, qubit2, layer_index=None)[源代码]#

添加 DCX 门

参数:
  • qubit1 (int)

  • qubit2 (int)

  • layer_index (int | None)

返回类型:

Circuit

ecr(qubit1, qubit2, layer_index=None)[源代码]#

添加 ECR 门

参数:
  • qubit1 (int)

  • qubit2 (int)

  • layer_index (int | None)

返回类型:

Circuit

iswap(qubit1, qubit2, layer_index=None)[源代码]#

添加 iSWAP 门

参数:
  • qubit1 (int)

  • qubit2 (int)

  • layer_index (int | None)

返回类型:

Circuit

crx(theta, control, target, layer_index=None)[源代码]#

添加 CRX 门

参数:
返回类型:

Circuit

cry(theta, control, target, layer_index=None)[源代码]#

添加 CRY 门

参数:
返回类型:

Circuit

cp(theta, control, target, layer_index=None)[源代码]#

添加 CPhase 门

参数:
返回类型:

Circuit

cu1(lam, control, target, layer_index=None)[源代码]#

添加 CU1 门

参数:
返回类型:

Circuit

cu3(theta, phi, lam, control, target, layer_index=None)[源代码]#

添加 CU3 门

参数:
返回类型:

Circuit

cu(theta, phi, lam, gamma, control, target, layer_index=None)[源代码]#

添加 CU 门

参数:
返回类型:

Circuit

rxx(theta, qubit1, qubit2, layer_index=None)[源代码]#

添加 RXX 门

参数:
返回类型:

Circuit

ryy(theta, qubit1, qubit2, layer_index=None)[源代码]#

添加 RYY 门

参数:
返回类型:

Circuit

rzz(theta, qubit1, qubit2, layer_index=None)[源代码]#

添加 RZZ 门

参数:
返回类型:

Circuit

rzx(theta, qubit1, qubit2, layer_index=None)[源代码]#

添加 RZX 门

参数:
返回类型:

Circuit

ccx(ctrl1, ctrl2, target, layer_index=None)[源代码]#

添加 CCX (Toffoli) 门

参数:
  • ctrl1 (int)

  • ctrl2 (int)

  • target (int)

  • layer_index (int | None)

返回类型:

Circuit

ccz(ctrl1, ctrl2, target, layer_index=None)[源代码]#

添加 CCZ 门

参数:
  • ctrl1 (int)

  • ctrl2 (int)

  • target (int)

  • layer_index (int | None)

返回类型:

Circuit

c3x(ctrl1, ctrl2, ctrl3, target, layer_index=None)[源代码]#

添加 C3X 门

参数:
  • ctrl1 (int)

  • ctrl2 (int)

  • ctrl3 (int)

  • target (int)

  • layer_index (int | None)

返回类型:

Circuit

c4x(ctrl1, ctrl2, ctrl3, ctrl4, target, layer_index=None)[源代码]#

添加 C4X 门

参数:
返回类型:

Circuit

rccx(ctrl1, ctrl2, target, layer_index=None)[源代码]#

添加 RCCX (简化 Toffoli) 门

参数:
  • ctrl1 (int)

  • ctrl2 (int)

  • target (int)

  • layer_index (int | None)

返回类型:

Circuit

rc3x(ctrl1, ctrl2, ctrl3, target, layer_index=None)[源代码]#

添加 RC3X (简化三控制 X) 门

参数:
  • ctrl1 (int)

  • ctrl2 (int)

  • ctrl3 (int)

  • target (int)

  • layer_index (int | None)

返回类型:

Circuit

c3sx(ctrl1, ctrl2, ctrl3, target, layer_index=None)[源代码]#

添加 C3SX (三控制 √X) 门

参数:
  • ctrl1 (int)

  • ctrl2 (int)

  • ctrl3 (int)

  • target (int)

  • layer_index (int | None)

返回类型:

Circuit

xx_minus_yy(theta, beta, qubit1, qubit2)[源代码]#

添加 XX-YY 相互作用门

参数:
  • theta (float) -- 旋转角度

  • beta (float) -- 相位角度

  • qubit1 (int) -- 第一个量子比特

  • qubit2 (int) -- 第二个量子比特

返回类型:

Circuit

xx_plus_yy(theta, beta, qubit1, qubit2)[源代码]#

添加 XX+YY 相互作用门

参数:
  • theta (float) -- 旋转角度

  • beta (float) -- 相位角度

  • qubit1 (int) -- 第一个量子比特

  • qubit2 (int) -- 第二个量子比特

返回类型:

Circuit

global_phase(phase)[源代码]#

添加全局相位门

参数:

phase (float) -- 相位角度

返回类型:

Circuit

mcx(controls, target)[源代码]#

添加 MCX (多控制 X) 门

参数:
  • controls (list) -- 控制比特列表

  • target (int) -- 目标比特

返回类型:

Circuit

mcx_gray(controls, target)[源代码]#

添加 MCX (Gray code 实现) 门

参数:
  • controls (list) -- 控制比特列表

  • target (int) -- 目标比特

返回类型:

Circuit

mcx_recursive(controls, target)[源代码]#

添加 MCX (递归实现) 门

参数:
  • controls (list) -- 控制比特列表

  • target (int) -- 目标比特

返回类型:

Circuit

mcx_vchain(controls, target)[源代码]#

添加 MCX (V-chain 实现) 门

参数:
  • controls (list) -- 控制比特列表

  • target (int) -- 目标比特

返回类型:

Circuit

mcp(theta, controls, target)[源代码]#

添加 MCPhase (多控制 Phase) 门

参数:
  • theta (float) -- 相位角度

  • controls (list) -- 控制比特列表

  • target (int) -- 目标比特

返回类型:

Circuit

mcu1(lam, controls, target)[源代码]#

添加 MCU1 (多控制 U1) 门

参数:
  • lam (float) -- 相位角度

  • controls (list) -- 控制比特列表

  • target (int) -- 目标比特

返回类型:

Circuit

mcrx(theta, controls, target)[源代码]#

添加 MCRX (多控制 RX) 门

参数:
  • theta (float) -- 旋转角度

  • controls (list) -- 控制比特列表

  • target (int) -- 目标比特

返回类型:

Circuit

mcry(theta, controls, target)[源代码]#

添加 MCRY (多控制 RY) 门

参数:
  • theta (float) -- 旋转角度

  • controls (list) -- 控制比特列表

  • target (int) -- 目标比特

返回类型:

Circuit

mcrz(theta, controls, target)[源代码]#

添加 MCRZ (多控制 RZ) 门

参数:
  • theta (float) -- 旋转角度

  • controls (list) -- 控制比特列表

  • target (int) -- 目标比特

返回类型:

Circuit

reset(qubit)[源代码]#

添加 Reset 操作

参数:

qubit (int)

返回类型:

Circuit

delay(duration, qubit, unit='dt')[源代码]#

添加 Delay 操作

参数:
返回类型:

Circuit

barrier(qubits=None)[源代码]#

添加 barrier(用于分隔电路层)

参数:

qubits (List[int] | None)

返回类型:

Circuit

measure(qubit, clbit)[源代码]#

添加测量操作

参数:
  • qubit (int) -- 要测量的量子比特

  • clbit (int) -- 存储结果的经典比特

返回类型:

Circuit

measure_all()[源代码]#

测量所有量子比特到对应的经典比特

返回类型:

Circuit

gate(gate, target_qubits)[源代码]#

添加门并返回 GateBuilder 以支持链式调用

参数:
  • gate (Gate) -- 要添加的门

  • target_qubits (int | List[int]) -- 目标量子比特(单个或列表)

返回:

门构建器,可以调用 .control() 添加控制

返回类型:

GateBuilder

示例

from janus.circuit.library import U3Gate, RXGate

qc = Circuit(4)

# 创建受控 U3 门 qc.gate(U3Gate(np.pi/4, np.pi/4, np.pi/4), 3).control([0, 1, 2])

# 创建受控 RX 门 qc.gate(RXGate(np.pi/2), 2).control(0)

# 不调用 control 则作为普通门添加 qc.gate(U3Gate(np.pi/4, 0, 0), 0) # 普通 U3 门

copy()[源代码]#

创建电路的深拷贝

返回类型:

Circuit

assign_parameters(parameters, inplace=False)[源代码]#

为参数赋值

参数:
返回:

赋值后的电路

返回类型:

Circuit

is_parameterized()[源代码]#

检查电路是否包含未绑定的参数

返回类型:

bool

bind_parameters(parameters, inplace=False)[源代码]#

绑定参数值(assign_parameters 的别名)

参数:
返回:

绑定参数后的电路

返回类型:

Circuit

示例

theta = Parameter('theta') qc = Circuit(2) qc.rx(theta, 0) qc.ry(theta, 1)

# 绑定参数 bound_qc = qc.bind_parameters({theta: np.pi/2})

compose(other, qubits=None)[源代码]#

将另一个电路组合到当前电路

参数:
  • other (Circuit) -- 要组合的电路

  • qubits (List[int] | None) -- 映射的量子比特(可选)

返回类型:

Circuit

inverse()[源代码]#

返回电路的逆

返回类型:

Circuit

reverse_bits()[源代码]#

返回量子比特顺序反转的电路

返回类型:

Circuit

to_layers()[源代码]#

转换为分层的字典列表格式(兼容旧格式)

返回类型:

List[List[dict]]

to_instructions()[源代码]#

转换为指令字典列表 (Janus 格式)

返回类型:

List[dict]

to_dict_list()[源代码]#

转换为字典列表 (Janus 格式)

返回:

'h', 'qubits': [0], 'params': []}, ...]

返回类型:

[{'name'

to_tuple_list()[源代码]#
返回:

[('h', [0], []), ('cx', [0, 1], []), ...]

返回类型:

List[tuple]

draw(output='text', filename=None, figsize=None, dpi=150, fold=None, line_length=None)[源代码]#

绘制电路

参数:
  • output (str) -- 输出格式 ('text', 'mpl', 'png')

  • filename (str) -- 保存文件名(仅 'png' 模式)

  • figsize (tuple) -- 图像大小 (width, height),默认自动计算

  • dpi (int) -- 图像分辨率,默认 150

  • fold (int) -- 每行显示的最大层数(仅 'text' 模式),设为 -1 禁用折叠

  • line_length (int) -- 每行最大字符数(仅 'text' 模式),默认自动检测终端宽度

返回:

'text' 模式返回字符串,'mpl' 模式返回 Figure 对象

SeperatableCircuit#

Gate#

class janus.circuit.Gate(name, num_qubits, params=None, label=None)[源代码]#

基类:Operation

量子门基类

量子门是酉操作,可以用酉矩阵表示

参数:
name#

门的名称

qubits#

门作用的量子比特索引列表

params#

门的参数列表(如旋转角度)

label#

可选的标签

__init__(name, num_qubits, params=None, label=None)[源代码]#
参数:
property name: str#

操作名称

property num_qubits: int#

操作作用的量子比特数

property params: List[float]#
property qubits: List[int]#
property label: str | None#
property definition#

门的定义(分解为基础门的电路)

to_matrix()[源代码]#

返回门的酉矩阵表示

子类应该重写此方法

返回类型:

ndarray

inverse()[源代码]#

返回门的逆操作

子类应该重写此方法

返回类型:

Gate

copy()[源代码]#

创建门的副本

返回类型:

Gate

is_parameterized()[源代码]#

检查门是否包含未绑定的参数

返回类型:

bool

soft_compare(other)[源代码]#

软比较两个门是否相同(用于模板匹配)

比较门的名称和量子比特数,但不比较参数的精确值

参数:

other -- 另一个门或操作

返回:

如果门类型相同则返回 True

返回类型:

bool

to_dict()[源代码]#

转换为字典格式(兼容旧格式)

返回类型:

dict

classmethod from_dict(data)[源代码]#

从字典创建门

参数:

data (dict)

返回类型:

Gate

control(num_ctrl_qubits=1, label=None, ctrl_state=None)[源代码]#

返回该门的受控版本

参数:
  • num_ctrl_qubits (int) -- 控制比特数量,默认为 1

  • label (str | None) -- 可选的标签

  • ctrl_state (str | int | None) -- 控制状态(暂未实现,保留接口)

返回:

受控门

返回类型:

ControlledGate

示例

# 创建受控 U3 门 u3 = U3Gate(np.pi/4, np.pi/4, np.pi/4) cu3 = u3.control(1) # 单控制 ccu3 = u3.control(2) # 双控制

ControlledGate#

Instruction#

class janus.circuit.Instruction(operation, qubits, clbits=None)[源代码]#

基类:object

电路指令类

将一个操作(Gate)与具体的量子比特绑定

参数:
operation#

量子操作(门)

qubits#

作用的量子比特索引

clbits#

作用的经典比特索引(用于测量等)

__init__(operation, qubits, clbits=None)[源代码]#
参数:
property operation: Gate#
property qubits: List[int]#
property clbits: List[int]#
property name: str#
property params: List[float]#
copy()[源代码]#

创建指令的副本

返回类型:

Instruction

to_dict()[源代码]#

转换为字典格式

返回类型:

dict

Layer#

class janus.circuit.Layer(instructions=None, index=0)[源代码]#

基类:object

电路层类

表示量子电路中的一层,包含可以并行执行的量子门集合。 同一层中的门作用在不同的量子比特上,因此可以同时执行。

参数:
index#

层在电路中的索引

__init__(instructions=None, index=0)[源代码]#

初始化电路层

参数:
  • instructions (List[Instruction] | None) -- 该层包含的指令列表

  • index (int) -- 层的索引

property index: int#
property instructions: List[Instruction]#
append(instruction)[源代码]#

添加一条指令到层中

参数:

instruction (Instruction)

remove(instruction)[源代码]#

从层中移除一条指令

参数:

instruction (Instruction)

get_qubits()[源代码]#

获取该层中所有被操作的量子比特

返回类型:

List[int]

can_add(qubits)[源代码]#

检查是否可以添加作用于指定量子比特的门(无冲突)

参数:

qubits (List[int])

返回类型:

bool

is_empty()[源代码]#

检查层是否为空

返回类型:

bool

copy()[源代码]#

创建层的副本

返回类型:

Layer

to_list()[源代码]#

转换为字典列表格式(兼容旧格式)

返回类型:

List[dict]

量子比特和经典比特#

Qubit#

class janus.circuit.Qubit(index, register=None)[源代码]#

量子比特类

参数:
index#

量子比特在电路中的索引

register#

所属的量子寄存器(可选)

__init__(index, register=None)[源代码]#
参数:
property index: int#
property register: QuantumRegister | None#

QuantumRegister#

class janus.circuit.QuantumRegister(size, name='q')[源代码]#

量子寄存器 - 一组量子比特的集合

参数:
size#

寄存器中量子比特的数量

name#

寄存器名称

__init__(size, name='q')[源代码]#
参数:
property size: int#
property name: str#

Clbit#

class janus.circuit.Clbit(index, register=None)[源代码]#

经典比特类

参数:
index#

经典比特在电路中的索引

register#

所属的经典寄存器(可选)

__init__(index, register=None)[源代码]#
参数:
property index: int#
property register: ClassicalRegister | None#

ClassicalRegister#

class janus.circuit.ClassicalRegister(size, name='c')[源代码]#

经典寄存器 - 一组经典比特的集合

参数:
size#

寄存器中经典比特的数量

name#

寄存器名称

__init__(size, name='c')[源代码]#
参数:
property size: int#
property name: str#

参数化#

Parameter#

class janus.circuit.Parameter(name)[源代码]#

符号参数类

用于创建参数化的量子电路,参数可以在后续被赋值

示例

theta = Parameter('θ') qc.rx(theta, 0) qc.assign_parameters({theta: np.pi/2})

参数:

name (str)

__init__(name)[源代码]#
参数:

name (str)

property name: str#
property uuid: UUID#

ParameterExpression#

class janus.circuit.ParameterExpression(coeffs=None, constant=0.0)[源代码]#

参数表达式类

表示参数的线性组合: a*p1 + b*p2 + ... + constant

参数:
_coeffs#

参数到系数的映射

_constant#

常数项

__init__(coeffs=None, constant=0.0)[源代码]#
参数:
property parameters: Set[Parameter]#

获取表达式中的所有参数

is_real()[源代码]#

检查表达式是否为实数(无未绑定参数)

返回类型:

bool

bind(parameter_values)[源代码]#

绑定参数值

参数:

parameter_values (Dict[Parameter, float]) -- 参数到值的映射

返回:

如果所有参数都被绑定,返回 float;否则返回新的 ParameterExpression

返回类型:

float | ParameterExpression

DAG#

DAGCircuit#

class janus.circuit.DAGCircuit(n_qubits=0, n_clbits=0, name=None)[源代码]#

DAG 电路表示

将量子电路表示为有向无环图,其中: - 节点表示量子操作 - 边表示量子比特的数据流

参数:
n_qubits#

量子比特数

n_clbits#

经典比特数

__init__(n_qubits=0, n_clbits=0, name=None)[源代码]#
参数:
property n_qubits: int#
property n_clbits: int#
property name: str#

电路名称

property global_phase: float#

全局相位

property metadata: dict#

元数据字典

property qubits: List[int]#

返回所有量子比特列表

add_qubits(qubits)[源代码]#

添加量子比特到DAG

add_clbits(clbits)[源代码]#

添加经典比特到DAG

property clbits: List[int]#

返回所有经典比特列表

property qregs: Dict#

返回量子寄存器字典(返回空字典stub)

property cregs: Dict#

返回经典寄存器字典(返回空字典stub)

add_qreg(qreg)[源代码]#

添加量子寄存器 (stub)

add_creg(creg)[源代码]#

添加经典寄存器 (stub)

num_qubits()[源代码]#

返回量子比特数量(方法形式)

返回类型:

int

num_clbits()[源代码]#

返回经典比特数量(方法形式)

返回类型:

int

apply_operation(op, qubits, clbits=None)[源代码]#

添加一个操作到 DAG

参数:
  • op -- 量子操作(Gate)

  • qubits (List[int]) -- 作用的量子比特

  • clbits (List[int]) -- 作用的经典比特

返回:

创建的 DAGNode

返回类型:

DAGNode

apply_operation_back(op, qubits, clbits=None)[源代码]#

添加一个操作到 DAG (在末尾)

兼容性方法: apply_operation_back 与 apply_operation 相同

参数:
  • op -- 量子操作(Gate)

  • qubits (List[int]) -- 作用的量子比特

  • clbits (List[int]) -- 作用的经典比特

返回:

创建的 DAGNode

返回类型:

DAGNode

finalize()[源代码]#

完成 DAG 构建,连接到输出节点

op_nodes()[源代码]#

迭代所有操作节点

返回类型:

Iterator[DAGNode]

topological_op_nodes()[源代码]#

按拓扑顺序迭代操作节点

返回类型:

Iterator[DAGNode]

control_flow_op_nodes()[源代码]#

迭代控制流操作节点(for, while, if等)

返回:

控制流节点迭代器

返回类型:

Iterator[DAGNode]

layers()[源代码]#

获取 DAG 的分层表示

返回:

每层包含可并行执行的操作节点

返回类型:

List[List[DAGNode]]

depth(recurse=False)[源代码]#

获取 DAG 深度

参数:

recurse (bool) -- 是否递归计算嵌套电路的深度 (暂时忽略)

返回:

DAG 的深度(层数)

返回类型:

int

width()[源代码]#

获取 DAG 宽度

返回:

量子比特数 + 经典比特数

返回类型:

int

size(recurse=False)[源代码]#

获取 DAG 大小(操作节点数量)

参数:

recurse (bool) -- 是否递归计算嵌套电路的大小 (暂时忽略)

返回:

操作节点的数量

返回类型:

int

count_ops(recurse=False)[源代码]#

统计各类操作的数量

参数:

recurse (bool) -- 是否递归计算嵌套电路的操作 (暂时忽略)

返回:

操作名称到数量的映射

返回类型:

Dict[str, int]

num_tensor_factors()[源代码]#

计算 DAG 电路中的张量因子数量

张量因子是指独立的量子子系统,即没有门连接的量子比特组。 使用并查集(Union-Find)算法来找出连通的量子比特组。

返回:

张量因子的数量

返回类型:

int

collect_runs(gate_names)[源代码]#

收集 DAG 中指定门类型的连续运行序列

在拓扑顺序中,找出指定门类型在同一量子比特上的连续序列。

参数:

gate_names (List[str]) -- 要收集的门名称列表

返回:

连续运行的门节点列表的列表

返回类型:

List[List[DAGNode]]

collect_1q_runs()[源代码]#

收集单量子比特门的连续序列

返回:

单量子比特门序列列表,每个序列是连续作用在同一量子比特上的单量子比特门

返回类型:

List[List[DAGNode]]

collect_2q_runs()[源代码]#

收集双量子比特门块

返回:

双量子比特门块列表,每个块包含连续的双量子比特门

返回类型:

List[List[DAGNode]]

copy_empty_like()[源代码]#

创建一个空的DAG副本,保留量子比特和经典比特数量,但不包含操作节点

返回:

空的DAGCircuit对象

返回类型:

DAGCircuit

predecessors(node)[源代码]#

获取节点的前驱

参数:

node (DAGNode)

返回类型:

Iterator[DAGNode]

successors(node)[源代码]#

获取节点的后继

参数:

node (DAGNode)

返回类型:

Iterator[DAGNode]

remove_op_node(node)[源代码]#

移除一个操作节点,重新连接其前驱和后继

参数:

node (DAGNode)

substitute_node(node, new_op, inplace=False)[源代码]#

替换节点的操作

参数:
  • node (DAGNode) -- 要替换的节点

  • new_op -- 新的操作

  • inplace (bool) -- 是否原地替换(兼容参数,总是原地替换)

返回:

替换后的节点

返回类型:

DAGNode

DAGDependency#

转换函数#

janus.circuit.circuit_to_dag(circuit)[源代码]#

将 Circuit 转换为 DAGCircuit

参数:

circuit -- Janus Circuit 或 QuantumCircuit

返回:

DAGCircuit

返回类型:

DAGCircuit

janus.circuit.dag_to_circuit(dag)[源代码]#

将 DAGCircuit 转换为 Circuit

参数:

dag (DAGCircuit) -- DAGCircuit

返回:

Janus Circuit

返回类型:

Circuit

文件 I/O#

janus.circuit.load_circuit(name=None, filepath=None)[源代码]#

从 JSON 文件加载电路

参数:
  • name -- 电路名称(不含 .json 后缀),从默认目录加载

  • filepath -- 完整文件路径,优先于 name

返回:

加载的电路对象

返回类型:

Circuit

示例

>>> qc = load_circuit(name='bell')
>>> qc = load_circuit(filepath='./my_circuit.json')
janus.circuit.list_circuits(directory=None)[源代码]#

列出目录中所有可用的电路文件

参数:

directory -- 电路目录路径,默认为 janus 包的 circuits 目录

返回:

电路名称列表(不含 .json 后缀)

返回类型:

list

标准门库#

单比特门#

class janus.circuit.HGate(label=None)[源代码]#

Hadamard 门

参数:

label (str | None)

__init__(label=None)[源代码]#
参数:

label (str | None)

to_matrix()[源代码]#

返回门的酉矩阵表示

子类应该重写此方法

返回类型:

ndarray

inverse()[源代码]#

返回门的逆操作

子类应该重写此方法

返回类型:

HGate

copy()[源代码]#

创建门的副本

返回类型:

HGate

class janus.circuit.XGate(label=None)[源代码]#

Pauli-X 门 (NOT 门)

参数:

label (str | None)

__init__(label=None)[源代码]#
参数:

label (str | None)

to_matrix()[源代码]#

返回门的酉矩阵表示

子类应该重写此方法

返回类型:

ndarray

inverse()[源代码]#

返回门的逆操作

子类应该重写此方法

返回类型:

XGate

copy()[源代码]#

创建门的副本

返回类型:

XGate

class janus.circuit.YGate(label=None)[源代码]#

Pauli-Y 门

参数:

label (str | None)

__init__(label=None)[源代码]#
参数:

label (str | None)

to_matrix()[源代码]#

返回门的酉矩阵表示

子类应该重写此方法

返回类型:

ndarray

inverse()[源代码]#

返回门的逆操作

子类应该重写此方法

返回类型:

YGate

copy()[源代码]#

创建门的副本

返回类型:

YGate

class janus.circuit.ZGate(label=None)[源代码]#

Pauli-Z 门

参数:

label (str | None)

__init__(label=None)[源代码]#
参数:

label (str | None)

to_matrix()[源代码]#

返回门的酉矩阵表示

子类应该重写此方法

返回类型:

ndarray

inverse()[源代码]#

返回门的逆操作

子类应该重写此方法

返回类型:

ZGate

copy()[源代码]#

创建门的副本

返回类型:

ZGate

class janus.circuit.RXGate(theta, label=None)[源代码]#

RX 旋转门 - 绕 X 轴旋转

参数:
__init__(theta, label=None)[源代码]#
参数:
property theta: float#
to_matrix()[源代码]#

返回门的酉矩阵表示

子类应该重写此方法

返回类型:

ndarray

inverse()[源代码]#

返回门的逆操作

子类应该重写此方法

返回类型:

RXGate

copy()[源代码]#

创建门的副本

返回类型:

RXGate

class janus.circuit.RYGate(theta, label=None)[源代码]#

RY 旋转门 - 绕 Y 轴旋转

参数:
__init__(theta, label=None)[源代码]#
参数:
property theta: float#
to_matrix()[源代码]#

返回门的酉矩阵表示

子类应该重写此方法

返回类型:

ndarray

inverse()[源代码]#

返回门的逆操作

子类应该重写此方法

返回类型:

RYGate

copy()[源代码]#

创建门的副本

返回类型:

RYGate

class janus.circuit.RZGate(theta, label=None)[源代码]#

RZ 旋转门 - 绕 Z 轴旋转

参数:
__init__(theta, label=None)[源代码]#
参数:
property theta: float#
to_matrix()[源代码]#

返回门的酉矩阵表示

子类应该重写此方法

返回类型:

ndarray

inverse()[源代码]#

返回门的逆操作

子类应该重写此方法

返回类型:

RZGate

copy()[源代码]#

创建门的副本

返回类型:

RZGate

两比特门#

class janus.circuit.CXGate(label=None)[源代码]#

CNOT (CX) 门 - 受控 X 门

参数:

label (str | None)

__init__(label=None)[源代码]#
参数:

label (str | None)

to_matrix()[源代码]#

返回门的酉矩阵表示

子类应该重写此方法

返回类型:

ndarray

inverse()[源代码]#

返回门的逆操作

子类应该重写此方法

返回类型:

CXGate

copy()[源代码]#

创建门的副本

返回类型:

CXGate

class janus.circuit.CZGate(label=None)[源代码]#

CZ 门 - 受控 Z 门

参数:

label (str | None)

__init__(label=None)[源代码]#
参数:

label (str | None)

to_matrix()[源代码]#

返回门的酉矩阵表示

子类应该重写此方法

返回类型:

ndarray

inverse()[源代码]#

返回门的逆操作

子类应该重写此方法

返回类型:

CZGate

copy()[源代码]#

创建门的副本

返回类型:

CZGate

class janus.circuit.SwapGate(label=None)[源代码]#

SWAP 门 - 交换两个量子比特

参数:

label (str | None)

__init__(label=None)[源代码]#
参数:

label (str | None)

to_matrix()[源代码]#

返回门的酉矩阵表示

子类应该重写此方法

返回类型:

ndarray

inverse()[源代码]#

返回门的逆操作

子类应该重写此方法

返回类型:

SwapGate

copy()[源代码]#

创建门的副本

返回类型:

SwapGate

多比特门#