跳转至

Circuit

from cascaqit import Circuit

Circuit

Circuit(
    qubits: int | Sequence[str],
    *,
    program_id: str = "program.digital",
    metadata: dict[str, Any] | None = None,
)

构造静态数字线路,并可在本地执行。qubits 可为正整数,生成 q0、q1 等名称,也可为显式的唯一名称序列。program_id 标识线路,metadata 保存用户信息。逻辑顺序由构造时的 qubits 决定,测量位串顺序则由测量目标顺序决定。

门方法、append()、compose() 和测量方法修改当前线路并返回它。bind()、snapshot()、inverse()、repeat() 和 controlled() 返回独立线路。旋转角用 rad;被引用的符号参数必须先绑定,默认值也通过显式 bind() 应用。

见Bell 态实验和数字线路详解。这里的执行入口用于本地模拟,不提交真机任务。

常用操作与执行

append

append(
    operation: str | OperationBinding | DigitalOperationIR,
    qubits: QubitRef | Sequence[QubitRef] | None = None,
    *,
    parameters: Mapping[str, DigitalValue] | None = None,
) -> Circuit

追加目录中已定义的操作,可传操作名、OperationBinding 或 DigitalOperationIR。名称形式用 qubits 与 parameters 提供目标和参数;绑定对象已有参数,不能再次覆盖;完整 IR 不能覆盖目标或参数。无效操作、目标或参数会抛出 ProgramValidationError。

compose

compose(
    other: Circuit,
    *,
    qubit_map: Mapping[QubitRef, QubitRef] | None = None,
) -> Circuit

把 other 追加到当前线路。qubit_map 将子线路全部量子位映射到当前线路,缺省映射也必须可解析。同名参数的默认值和边界需一致,测量 key 不得冲突。当前线路已测量后不能继续追加操作。

parameter

parameter(
    name: str,
    *,
    default: float | None = None,
    lower_bound: float | None = None,
    upper_bound: float | None = None,
) -> Parameter

声明本线路拥有的浮点弧度参数,返回 Parameter。可设置默认值和上下界。重复名称、非有限默认值或非法边界会抛出 ProgramValidationError。

bind

bind(values: Mapping[str, float]) -> Circuit

按名称绑定 values,返回独立线路。被引用但未提供的参数使用默认值,没有默认值则报错。未知名称、非有限值和越界值会抛出 ProgramValidationError。绑定后的原始参数声明仍可检查。

measure

measure(
    qubits: QubitRef | Sequence[QubitRef],
    *,
    key: str | None = None,
) -> Circuit

以计算基测量指定量子位,可只选部分或调整顺序。key 缺省生成 m0、m1 等,显式 key 必须非空且唯一。返回当前线路;此后不能添加量子门。多个测量寄存器的结果应通过 result.measurement(key) 分别读取。

measure_all

measure_all(*, key: str = 'm') -> Circuit

按线路量子位顺序测量全部量子位,默认 key 为 m。它等价于以全部 qubits 调用 measure()。

run

run(
    *,
    shots: int = 1000,
    seed: int | None = None,
    return_probabilities: bool = False,
    optimization_level: int = 0,
) -> ResultIR

返回本地模拟的 ResultIR。shots 为采样次数,seed 控制随机采样;要读取精确状态概率,显式传 return_probabilities=True,此处默认为 False。optimization_level 支持 0 或保持语义的化简级别 1。未绑定参数、非法程序或执行配置会导致失败;需要噪声和任务历史时使用 LocalBackend。

validate

validate() -> tuple[DiagnosticsIR, ...]

返回 DiagnosticsIR 元组。未绑定线路返回错误诊断,而不是执行模拟。检查诊断的 severity;不要把非空元组一律解释为失败或成功。

to_program

to_program() -> DigitalProgramIR

要求参数已绑定,返回规范的 DigitalProgramIR。导出不会执行线路;未绑定时抛出 ProgramValidationError。

to_ir

to_ir() -> DigitalProgramIR

与 to_program() 等价,返回 DigitalProgramIR。

snapshot

snapshot() -> Circuit

复制线路声明、操作和来源记录,返回可独立修改的线路。

inverse

inverse() -> Circuit

返回操作逆序并逐个取逆的新线路。只支持可求逆的幺正操作;已含测量的线路会抛出 ProgramValidationError。

repeat

repeat(count: int) -> Circuit

返回重复 count 次的新线路。count 必须是 1–1024 的整数,布尔值无效。含测量线路只允许重复一次;无效次数或重复测量会抛出 ProgramValidationError。

controlled

controlled(new_control: str) -> Circuit

返回增加 new_control 的受控线路;新控制位排在原逻辑顺序前面。名称必须非空且不能已存在,线路不能含测量。可受控的操作受目录能力限制,不保证任意线路都能加控制。

program_id

program_id: str

返回程序标识字符串。

qubits

qubits: tuple[str, ...]

返回逻辑量子位名称元组,顺序与构造时一致。

metadata

metadata: dict[str, Any]

返回用户信息和变换信息的深拷贝。修改返回字典不会修改线路元数据。

operations

operations: tuple[DigitalOperationIR, ...]

按源代码顺序返回规范操作视图。参数声明仍可保留在未绑定线路内;数值执行前仍须绑定。

operation_names

operation_names: tuple[str, ...]

按操作顺序返回名称元组,包含已声明测量的操作。

parameters

parameters: tuple[Parameter, ...]

按声明顺序返回 Parameter 元组。

referenced_parameter_names

referenced_parameter_names: tuple[str, ...]

返回操作实际引用的参数名称,去重并排序。它可能少于已声明参数。

is_bound

is_bound: bool

返回线路能否降为纯数值操作。仅有默认值的符号引用仍需显式绑定。

source_map

source_map() -> ProgramSourceMapIR

返回 ProgramSourceMapIR,用于将操作关联到其声明来源。此方法先导出数值程序,因此要求参数已绑定;查看未绑定声明的来源可用 source_evidence()。

source_evidence

source_evidence() -> tuple[ProgramSourceEntryIR, ...]

返回按当前操作顺序排列的来源记录元组。

structural_payload

structural_payload() -> dict[str, Any]

返回可序列化的线路结构字典,包含参数声明、操作和经典寄存器,可供 from_structural_payload() 还原。

structural_hash

structural_hash() -> str

返回线路结构的稳定哈希,供比较来源和变换使用。哈希相同不是两个物理实验结果相同的证明。

from_structural_payload

from_structural_payload(
    payload: Mapping[str, Any],
    *,
    program_id: str = "program.digital.restored",
) -> Circuit

从结构字典还原线路,保留可绑定声明。输入须符合该序列化结构,损坏或不支持的内容会报错。

parameter_occurrences

parameter_occurrences() -> tuple[
    OperationParameterOccurrence, ...
]

逐个返回操作参数出现位置及其 ID、源结构哈希、仿射形式和支持情况。相同参数出现在不同门中会有不同位置,适合按门分析梯度。

shift_parameter_occurrence

shift_parameter_occurrence(
    occurrence_id: str, shift: float
) -> Circuit

按当前快照提供的 occurrence ID,只移动一个符号 RX/RY/RZ 的 theta,返回新线路。shift 为有限弧度值;未知 ID、纯数值参数或其他门会抛出 ProgramValidationError。

门方法

这些方法返回当前线路。量子位可用从零开始的索引或已声明名称;多比特门目标必须互不相同。越界、未知名称、非法门参数或测量后加门会抛出 ProgramValidationError。

i

i(qubit: QubitRef) -> Circuit

追加恒等门。

x

x(qubit: QubitRef) -> Circuit

追加 Pauli X 门,交换计算基态。

y

y(qubit: QubitRef) -> Circuit

追加 Pauli Y 门。

z

z(qubit: QubitRef) -> Circuit

追加 Pauli Z 门,使 1 态分量变号。

h

h(qubit: QubitRef) -> Circuit

追加 Hadamard 门。

s

s(qubit: QubitRef) -> Circuit

追加相位门 diag(1, i)。

sdg

sdg(qubit: QubitRef) -> Circuit

追加 S 的逆门 diag(1, -i)。

t

t(qubit: QubitRef) -> Circuit

追加相位门 diag(1, exp(iπ/4))。

tdg

tdg(qubit: QubitRef) -> Circuit

追加 T 的逆门。

rx

rx(theta: DigitalValue, qubit: QubitRef) -> Circuit

追加绕 X 轴旋转,theta 用弧度,可为参数或表达式。

ry

ry(theta: DigitalValue, qubit: QubitRef) -> Circuit

追加绕 Y 轴旋转,theta 用弧度,可为参数或表达式。

rz

rz(theta: DigitalValue, qubit: QubitRef) -> Circuit

追加绕 Z 轴旋转,theta 用弧度,可为参数或表达式。

p

p(theta: DigitalValue, qubit: QubitRef) -> Circuit

追加相位门 diag(1, exp(i theta)),theta 用弧度。

u

u(
    theta: DigitalValue,
    phi: DigitalValue,
    lam: DigitalValue,
    qubit: QubitRef,
) -> Circuit

追加三角度单比特 U 门,theta、phi、lam 均用弧度,参数次序见签名。

cx

cx(control: QubitRef, target: QubitRef) -> Circuit

追加受控 X,control 为控制位,target 为目标位。

cy

cy(control: QubitRef, target: QubitRef) -> Circuit

追加受控 Y。

cz

cz(control: QubitRef, target: QubitRef) -> Circuit

追加受控 Z。

swap

swap(left: QubitRef, right: QubitRef) -> Circuit

交换 left 与 right 两个不同量子位。

ccx

ccx(
    control0: QubitRef, control1: QubitRef, target: QubitRef
) -> Circuit

追加双控制 X 门,两个控制位与目标位必须各不相同。