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