#quantum-simulation #kit #language #api #programs #process #systems

nightly qdk_sim_rs

基于Rust的与量子开发工具包一起使用的模拟器

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 数学

Download history 1/week @ 2024-05-25

每月126次下载

MIT许可

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,每个操作属性(即:ixyzhss_adjtt_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_qubitsdata)的JSON对象表示。data 的值本身是一个JSON对象,具有一个属性,指示用于表示该状态或过程的 StateDataProcessData 枚举的哪个变体。

例如,以下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