38 个版本 (6 个破坏性版本)
0.24.216270-beta | 2022年6月17日 |
---|---|
0.24.208023-beta | 2022年4月28日 |
0.24.201994-beta | 2022年3月30日 |
0.21.2112180703 | 2021年12月14日 |
0.18.2106148911 | 2021年6月25日 |
28 在 模拟
每月 103 次下载
115KB
2K SLoC
量子开发套件预览模拟器
📝 注意
此包处于 预览 状态,可能会在不通知的情况下进行破坏性 API 变更。
作为预览功能,此包可能存在错误或不完整。有关更多信息,请查看跟踪问题 microsoft/qsharp-runtime#714。
ⓘ 提示
此包提供了与实验性模拟器交互的低级 API。如果您想使用实验性模拟器来运行您的 Q# 程序,请参阅安装说明 https://github.com/microsoft/qsharp-runtime/blob/main/documentation/preview-simulators.md。
此包实现了量子开发套件的模拟功能,包括
- 开放系统模拟
- Stabilizer 模拟
c_api
模块允许从 C 或其他具有 C FFI(例如:C++ 或 C#)的语言中使用此包中的模拟功能,同时 Rust 调用者可以直接利用此包中的结构和方法。
同样,python
模块允许将此包中的数据结构暴露给 Python 程序。
Cargo 功能
python
:启用此包的 Python 绑定。wasm
:确保该crate与WebAssembly的使用兼容。
表示量子系统
此crate提供多种不同的数据结构,用于以不同的约定表示量子系统。
State
:表示量子比特寄存器的稳定态、纯态或混合态。Process
:表示将状态映射到状态的过程。Instrument
:表示量子仪器,测量最一般的形式。
噪声模型序列化
噪声模型可以序列化为JSON,以实现跨语言的互操作性。特别是,每个噪声模型都由一个JSON对象表示,该对象具有每个操作的属性、初始状态和用于实现$Z$基测量所使用的仪器的属性。
例如
{
"initial_state": {
"n_qubits": 1,
"data": {
"Mixed": {
"v": 1, "dim":[2 ,2],
"data": [[1.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0]]
}
}
},
"i": {
"n_qubits": 1,
"data": {
"Unitary": {
"v": 1,"dim": [2, 2],
"data": [[1.0, 0.0], [0.0, 0.0], [0.0, 0.0], [1.0, 0.0]]
}
}
},
...
"z_meas": {
"Effects": [
{
"n_qubits": 1,
"data": {
"KrausDecomposition": {
"v":1, "dim": [1, 2, 2],
"data": [[1.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0]]
}
}
},
{
"n_qubits": 1,
"data": {
"KrausDecomposition": {
"v": 1,"dim": [1, 2, 2],
"data":[[0.0, 0.0], [0.0, 0.0], [0.0, 0.0], [1.0, 0.0]]
}
}
}
]
}
}
initial_state
属性的值是一个序列化的State
,每个操作属性(即:i
、x
、y
、z
、h
、s
、s_adj
、t
、t_adj
和cnot
)是一个序列化的Process
,而z_meas
的值是一个序列化的Instrument
。
表示复数数组
在噪声模型序列化过程中,使用表示复数$n$维数组的JSON对象来存储各种向量、矩阵和张量。此类数组序列化为具有三个属性的JSON对象
v
:JSON架构的版本号;必须是"1"
。dims
:表示被表示数组的维度的列表。data
:表示展开数组元素的列表,每个元素都表示为包含表示每个元素实部和虚部的两个条目的列表。
例如,考虑理想y
操作的序列化
"y": {
"n_qubits": 1,
"data": {
"Unitary": {
"v": 1, "dim": [2, 2],
"data": [[0.0, 0.0], [0.0, 1.0], [0.0, -1.0], [0.0, 0.0]]
}
}
}
表示状态和过程
每个状态和过程都由具有两个属性(n_qubits
和data)的JSON对象表示。
data
的值本身是一个JSON对象,其中一个属性指示使用哪个StateData
或ProcessData
枚举的变体来表示该状态或过程。
例如,以下JSON对象表示混合态$\ket{0}\bra{0}$
{
"n_qubits": 1,
"data": {
"Mixed": {
"v": 1, "dim":[2 ,2],
"data": [[1.0, 0.0], [0.0, 0.0], [0.0, 0.0], [0.0, 0.0]]
}
}
}
表示仪器
待办事项
已知问题
- 开放系统模拟的性能仍需针对更大的寄存器进行更多工作。
- 不同的转换函数和方法之间存在一些差距。
- 稳定态还不能通过
Instrument
结构进行测量,只能通过底层的Tableau
。 - crate的许多部分还没有Python绑定。
- 稳定态模拟尚未通过C API公开。
- 测试和微型基准测试覆盖率仍不完整。
- API中有太多
panic!
或unwrap
,需要用Result
返回值替换。
依赖项
~4.5–8.5MB
~185K SLoC