给参数赋值,再执行程序¶
复用同一线路或脉冲结构、只改变角度或幅度时,先声明参数,再绑定数值。参数应由实际使用它的 Circuit 或 AHSProgram 声明,这样类型、单位、边界和使用位置会一起保存。
| 你要做的事 | 使用入口 |
|---|---|
| 把参数化数字线路变成可执行线路 | bound = circuit.bind(values) |
| 绑定模拟波形或相位 | bound = program.bind(values) |
| 运行一次已经声明好的程序 | LocalBackend.run(program, params=values).result() |
| 在不同 Hybrid 块共享一个参数 | 在各块声明相同定义,再由 HybridProgram 汇总 |
| 连续运行多个参数点 | 使用参数扫描,不要在循环中修改原程序 |
values 是参数名到数值的映射。检查拼写、单位和边界;单位标签不会自动把 MHz 转为 rad/us。同名共享参数的类型、单位、边界、默认值、表达式和编译影响都必须一致,仅名字相同还不够。
一次绑定的完整例子¶
下面把 RY 角度设为 0.5 rad。bind() 返回新线路,原始声明仍保留符号参数。
"""声明并绑定一个带类型的 Digital 旋转参数。
原始线路保留符号参数,``bind`` 返回新的可执行线路。示例还会检查缺少参数和未知
参数的错误,说明同一份声明可以安全地用于多组实验值。
"""
from __future__ import annotations
import json
from cascaqit import Circuit
def main() -> None:
"""绑定一个角度,并比较声明线路与可执行线路。"""
declaration = Circuit(1, program_id="lesson.digital.parameter")
theta = declaration.parameter("theta", lower_bound=-3.2, upper_bound=3.2)
declaration.ry(theta, 0).measure_all()
# 绑定返回独立线路,原始 declaration 仍保持 symbolic。
bound = declaration.bind({"theta": 0.5})
result = bound.run(shots=0, seed=202, return_probabilities=True)
payload = {
"track": "digital_developer",
"level": "foundation",
"lesson": "parameter_binding",
"facts": {
"declaration_is_bound": declaration.is_bound,
"bound_is_bound": bound.is_bound,
"parameter_names": [item.name for item in bound.parameters],
"bound_angle": bound.operations[0].arguments["theta"],
"probability_sum": round(sum((result.probabilities or {}).values()), 12),
},
"boundaries": {
"hardware_execution": False,
"cloud_execution": False,
"network_accessed": False,
"credentials_loaded": False,
},
}
print(json.dumps(payload, sort_keys=True))
if __name__ == "__main__":
main()
python examples/user/tracks/digital_developer/02_foundation_parameter_binding_zh.py
{
"boundaries": {
"cloud_execution": false,
"credentials_loaded": false,
"hardware_execution": false,
"network_accessed": false
},
"facts": {
"bound_angle": 0.5,
"bound_is_bound": true,
"declaration_is_bound": false,
"parameter_names": [
"theta"
],
"probability_sum": 1.0
},
"lesson": "parameter_binding",
"level": "foundation",
"track": "digital_developer"
}
输出中的 declaration_is_bound 为 false,bound_is_bound 为 true,bound_angle 为 0.5。该例请求零次采样并返回状态概率,所以不应拿 counts 是否非空判断执行成功。probability_sum 应在数值误差内为 1。
绑定失败时¶
先检查是否漏掉必需参数、传入未知名称或越过含端点的边界。派生参数由表达式计算,不能把修改表达式结果当作给独立参数赋值。布尔参数与数值参数也不能混用。
Hybrid 中的冲突应回到各块的声明处修正。反复提交相同冲突不会改变校验结果。完整对照见共享参数课程,字段规则见 Parameter 和 ParameterManager。