#quantum-simulation #experimental #state #kit #noise #process #model

qdk_sim_experimental

用于量子开发套件的实验性模拟器

38 个版本 (6 个破坏性版本)

0.24.216270-beta2022年6月17日
0.24.208023-beta2022年4月28日
0.24.201994-beta2022年3月30日
0.21.2112180703 2021年12月14日
0.18.2106148911 2021年6月25日

28模拟

Download history 2/week @ 2024-03-11 9/week @ 2024-04-01

每月 103 次下载

MIT 许可证

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,每个操作属性(即:ixyzhss_adjtt_adjcnot)是一个序列化的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绑定。
  • 稳定态模拟尚未通过C API公开。
  • 测试和微型基准测试覆盖率仍不完整。
  • API中有太多panic!unwrap,需要用Result返回值替换。

依赖项

~4.5–8.5MB
~185K SLoC