48个版本
| 0.28.291394 | 2023年7月31日 |
|---|---|
| 0.28.277227 | 2023年6月6日 |
| 0.28.263081 | 2023年3月29日 |
| 0.27.244707 | 2022年12月8日 |
| 0.25.222597 | 2022年7月26日 |
#238 in 数学
每月126次下载
265KB
5K SLoC
Rust-based Quantum Development Kit Simulators
ⓘ 提示
此包提供了与量子开发工具包中包含的基于Rust的模拟器交互的低级API。如果您想使用这些模拟器运行您的Q#程序,请参阅https://github.com/microsoft/qsharp-runtime/blob/main/documentation/preview-simulators.md中的安装说明。
此包实现了量子开发工具包的模拟功能,包括
- 开放系统模拟
- Stabilizer模拟
c_api模块允许从C语言或具有C FFI(例如C++或C#)的其他语言中使用此包中的模拟功能,而Rust调用者可以直接利用此包中的结构和方法。
同样,python 模块允许在这个crate中暴露数据结构给Python程序。
表示量子系统
此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绑定。
- 测试和微基准测试覆盖率仍不完整。
crate特性
依赖关系
~6–10MB
~208K SLoC