Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .agents/capability-packages.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2521,3 +2521,6 @@ packages:

- id: rcmps-field-theory
level: L0

- id: ppvm-simulation
level: L0
17 changes: 17 additions & 0 deletions .agents/sdk-libraries.json
Original file line number Diff line number Diff line change
Expand Up @@ -1596,6 +1596,23 @@
],
"nativeOnly": true,
"juliaVersion": "1.12.7"
},
{
"id": "ppvm-simulation",
"title": "PPVM",
"language": "python",
"modules": [
"ppvm"
],
"group": "qec",
"workflow": "Pauli 传播、广义 tableau、近 Clifford 观测量与含丢失/泄漏的自定义电路采样",
"conditions": [
"显式准备固定源码的 Python 3.12 / Rust 环境;完整原生 API 可用,成本取决于非 Clifford 分支与截断。",
"Heisenberg 计算倒序处理整条门和噪声链;LOST 与比特值分开;reset_state 不恢复丢失/泄漏。",
"非对称丢失的存活分支反作用尚未实现;开发数值对照不构成器件模型或科学验收。"
],
"nativeOnly": true,
"pythonVersion": "3.12"
}
]
}
5 changes: 3 additions & 2 deletions .agents/skills/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,9 @@

## 当前 Skill

以下 189 个 Skill 随源码分发;它们与 MCP Server 不是一一对应关系,知识型 Skill 可以不绑定专用 Tool,
以下 190 个 Skill 随源码分发;它们与 MCP Server 不是一一对应关系,知识型 Skill 可以不绑定专用 Tool,
工作流也可以使用多个服务或进程内原生 Tool。连接默认配置与凭据条件见[MCP 服务目录](../../docs/CAPABILITIES.md#mcp-服务目录)。
当前 176 项可由模型自动选择,13 个分类索引仅保留用户显式调用;名称和来源映射不变。
当前 177 项可由模型自动选择,13 个分类索引仅保留用户显式调用;名称和来源映射不变。
分批建议与兼容影响见[扩展治理清单](../../docs/architecture/EXTENSION_GOVERNANCE.md)。

| Skill | 作用 | 依赖的执行模块 |
Expand Down Expand Up @@ -51,6 +51,7 @@
| `slowquant-response` | 分子线性响应、激发能和跃迁性质;保留响应近似与验证边界 | 宿主代码 Tool;显式准备固定源码 SDK |
| [`tnqs-dynamics`](tnqs-dynamics/SKILL.md) | 非规则图张量网络、电路、有限平面 CTMRG 与采样 | 宿主代码 Tool;显式准备固定 Julia SDK;保留几何与收敛边界 |
| [`rcmps-field-theory`](rcmps-field-theory/SKILL.md) | 连续 RCMPS、标量场优化、正常序观测量与同真空激发 | 宿主代码 Tool;显式准备固定 Julia CPU SDK;区分传递 gap 与 Hamiltonian 能隙 |
| [`ppvm-simulation`](ppvm-simulation/SKILL.md) | Pauli 传播、广义 tableau 与丢失/泄漏采样 | 宿主代码 Tool;显式准备 Python/Rust SDK;区分近似、LOST 与重置语义 |
| `tesseract-decoding` | Stim DEM、syndrome、搜索式解码器与统计 | 宿主代码 Tool;显式准备 python 环境 |
| `tqec-compilation` | BlockGraph、逻辑计算块、相关面与 Stim 线路生成 | 宿主代码 Tool;显式准备 python 环境 |
| `tsim-sampling` | Clifford/非 Clifford 线路、噪声、detector 与 observable 采样 | 宿主代码 Tool;显式准备 python 环境 |
Expand Down
42 changes: 42 additions & 0 deletions .agents/skills/ppvm-simulation/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
---
name: ppvm-simulation
description: 用 PPVM 原生 API 编写 Pauli 传播、广义稳定子 tableau 和含丢失/泄漏的自定义电路;区分观测量反向传播、采样与物理近似。
---

# PPVM

<!-- BEGIN NATIVE SDK ACCESS -->
## 原生 SDK 路径

本能力使用 **PPVM 的原生公开 API**。用户需要 Pauli 传播、广义 tableau、近 Clifford 观测量与含丢失/泄漏的自定义电路采样 时,由 Agent 在固定依赖环境中编写和运行任务代码。

使用 `node scripts/sdk-access.mjs inspect ppvm-simulation` 定位环境,按[完整 SDK 工作流](../quantum-sdk-workbench/references/workflow.md)执行。模块导航:`ppvm`;导航不是 API 白名单。

显式准备固定源码的 Python 3.12 / Rust 环境;完整原生 API 可用,成本取决于非 Clifford 分支与截断。

Heisenberg 计算倒序处理整条门和噪声链;LOST 与比特值分开;reset_state 不恢复丢失/泄漏。

非对称丢失的存活分支反作用尚未实现;开发数值对照不构成器件模型或科学验收。

本入口复用宿主文件与代码工具,没有新增通用执行 Tool。原生 SDK 受上游版本、可选依赖、宿主资源与用户授权约束。已禁用或被拒绝的动作不能借代码路径绕过。执行状态和科研验收分别报告。
<!-- END NATIVE SDK ACCESS -->


当任务需要近 Clifford 观测量、非 Clifford tableau 或中性原子丢失/泄漏模型时使用。先比较现有 Stim、Tsim、Clifft 与 monoprop:仅需普通 Clifford 采样或通用算符传播时,不必引入 PPVM。

## 方法选择与边界

- `PauliSum` / `LossyPauliSum`:从观测量出发反向传播,**整条门和噪声操作链倒序,旋转角保留原符号**。PauliSum 没有 `t()` 简写,T 门的观测量传播使用 `rz(q, math.pi/4)`(忽略无关全局相位)。记录截断规则,不能以一次有限截断计算宣称收敛。
- `GeneralizedTableau`:按物理时间顺序作用门,再测量。Python 绑定支持 1–2048 qubit;此上限不表示这些规模在任意非 Clifford 电路上都可承受,系数可能迅速增长。
- `StimProgram` / `sample_stim`:使用固定版本支持的 Stim 指令及扩展,不假定与 Stim 全指令等价。保存原始测量记录;`LOST=2` 不是布尔比特,不能直接转成 detector flips。
- `reset_state` 只重置活跃 qubit,保留丢失/泄漏标记;`reset` 才恢复计算子空间。丢失与泄漏的模型语义分别报告。
- 相关丢失参数 `p[1]` 是失去某个指定 qubit 的概率,恰好失去一个的总概率为 `2*p[1]`。非对称丢失目前不包含存活分支反作用;不能宣称完整物理量子通道或器件数字孪生已验证。
- 保存种子与线程设置;用 `fork(seed=...)` 构造独立随机轨迹,复制对象可能复制随机数状态。

## 执行与证据

先发现环境,再显式准备,随后用宿主代码工具运行用户的完整程序。准备会下载和编译 Rust/Python 依赖;首次执行不隐式安装。硬件或外部服务仍需另行授权。

[可编辑原生示例](references/native-example.py)展示带噪观测量与丢失恢复,参数只是示例,不是公开 API 白名单。程序、输入、锁文件摘要、实际版本、近似与原始输出一起保留;用独立解析值、密度矩阵或其他适用方法检查任务的科学结论。

[使用、来源与实测范围](../../../docs/integrations/PPVM.md)。原生程序执行与开发回归不推导最终科学验收,`scientificValidation=not_evaluated`。
10 changes: 10 additions & 0 deletions .agents/skills/ppvm-simulation/pyproject.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
[project]
name = "openquantum-ppvm-simulation"
version = "0.1.0"
requires-python = ">=3.12,<3.13"
dependencies = [
"bloqade-ppvm @ git+https://github.com/QuEraComputing/ppvm.git@3cc883fd93b2475cb10c892a8a31adcc09a7579c#subdirectory=ppvm-python",
]

[tool.uv]
package = false
43 changes: 43 additions & 0 deletions .agents/skills/ppvm-simulation/references/native-example.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
"""Editable public PPVM program; run in a new task directory after explicit setup."""
import importlib.metadata
import json
import math
from pathlib import Path

from ppvm import GeneralizedTableau, MeasurementResult, PauliSum

theta, gamma, seed = 0.73, 0.23, 20261110
# Physical order: Rx(theta), then amplitude damping. Heisenberg order reverses both.
observable = PauliSum.new(1, ["Z"])
observable.amplitude_damping(0, gamma)
observable.rx(0, theta)
expectation = observable.overlap_with_zero()
reference = gamma + (1 - gamma) * math.cos(theta)
assert abs(expectation - reference) < 1e-10

state = GeneralizedTableau(2, seed=seed)
state.h(0)
state.cnot(0, 1)
bell_zz = state.expectation("ZZ")
assert abs(bell_zz - 1) < 1e-10
state.loss_channel(1, 1.0)
state.reset_state(1)
lost = state.measure(1)
assert lost == MeasurementResult.LOST
state.reset(1)
restored = state.measure(1)
assert restored == MeasurementResult.ZERO

result = {
"upstreamVersion": importlib.metadata.version("bloqade-ppvm"),
"parameters": {"theta": theta, "amplitudeDamping": gamma, "seed": seed},
"zAfterRxAndDamping": expectation,
"analyticReference": reference,
"bellZZ": bell_zz,
"afterStateOnlyReset": lost.name,
"afterFullReset": restored.name,
"scope": "small public-API checks; not a hardware or performance benchmark",
"scientificValidation": "not_evaluated",
}
with Path("result.json").open("x", encoding="utf-8") as output:
output.write(json.dumps(result, indent=2) + "\n")
Loading
Loading