跳转到主要内容

用于开发量子计算程序的软件

项目描述

Qiskit

Release License DOI

[!重要] 从2024年8月15日起,将不再更新 qiskit-terra。自 Qiskit 0.44 版本(发布于2023年7月27日)以来,qiskit 元包仅包含 qiskit-terra。在 Qiskit 1.0 及更高版本中,元包架构已被移除。如果您正在安装或依赖于 qiskit-terra,请考虑将其更改为 qiskit:要么 qiskit>=0.x,<1(如果您尚未过渡到 Qiskit 1.0)或者 qiskit>=0.x,<2(以包括 Qiskit 1.*)。了解更多

Qiskit 是一个开源软件开发工具包,用于在扩展量子线路、算符和原语级别上与量子计算机交互。

这个库是 Qiskit 的核心组件,包含创建和操作量子线路、量子算符和原语函数(采样器和估计器)的构建块。它还包括一个支持优化量子线路的转换器以及用于创建高级量子算符的量子信息工具箱。

有关如何使用 Qiskit 的更多详细信息,请参阅此处文档

https://qiskit.org/documentation/

安装

[!警告] 不要尝试就地升级现有的 Qiskit 0.* 环境到 Qiskit 1.0。了解更多

我们鼓励您通过 pip 安装 Qiskit

pip install qiskit

Pip 会自动处理所有依赖项,并且您将始终安装最新(并且经过良好测试)的版本。

要从源安装,请遵循文档中的说明。

在 Qiskit 中创建您的第一个量子程序

现在 Qiskit 已安装,是时候开始使用 Qiskit 了。量子程序的基本部分包括

  1. 定义和构建一个表示量子状态的量子线路
  2. 通过测量或一组可观测量定义经典输出
  3. 根据输出,使用原语函数 sampler 进行采样或使用 estimator 估计值。

使用 QuantumCircuit 类创建一个示例量子线路

import numpy as np
from qiskit import QuantumCircuit

# 1. A quantum circuit for preparing the quantum state |000> + i |111>
qc_example = QuantumCircuit(3)
qc_example.h(0)          # generate superpostion
qc_example.p(np.pi/2,0)  # add quantum phase
qc_example.cx(0,1)       # 0th-qubit-Controlled-NOT gate on 1st qubit
qc_example.cx(0,2)       # 0th-qubit-Controlled-NOT gate on 2nd qubit

这个简单的例子创建了一个称为 GHZ 状态 $(|000\rangle + i|111\rangle)/\sqrt{2}$ 的纠缠态。它使用标准量子门:Hadamard 门 (h)、相位门 (p) 和 CNOT 门 (cx)。

一旦您创建了第一个量子线路,请选择您将使用的原语函数。从 sampler 开始,我们使用 measure_all(inplace=False) 获取一个所有量子位都进行了测量的线路副本

# 2. Add the classical output in the form of measurement of all qubits
qc_measured = qc_example.measure_all(inplace=False)

# 3. Execute using the Sampler primitive
from qiskit.primitives.sampler import Sampler
sampler = Sampler()
job = sampler.run(qc_measured, shots=1000)
result = job.result()
print(f" > Quasi probability distribution: {result.quasi_dists}")

运行此操作将给出类似 {0: 0.497, 7: 0.503} 的结果,这意味着 000 有 50% 的时间出现,而 111 有 50% 的时间出现,直至出现统计波动。
为了说明估计器的强大功能,我们现在使用量子信息工具箱创建算符 $XXY+XYX+YXX-YYY$,并将其传递给 run() 函数,包括我们的量子线路。注意,估计器需要一个没有测量的线路 没有 测量,所以我们使用我们之前创建的 qc_example 线路。

# 2. define the observable to be measured 
from qiskit.quantum_info import SparsePauliOp
operator = SparsePauliOp.from_list([("XXY", 1), ("XYX", 1), ("YXX", 1), ("YYY", -1)])

# 3. Execute using the Estimator primitive
from qiskit.primitives import Estimator
estimator = Estimator()
job = estimator.run(qc_example, operator, shots=1000)
result = job.result()
print(f" > Expectation values: {result.values}")

运行此操作将给出结果 4。为了娱乐,尝试将每个单量子位算符 X 和 Y 赋予 +/− 1 的值,看看您是否能实现这个结果。(剧透:这是不可能的!)

仅使用Qiskit提供的qiskit.primitives.Samplerqiskit.primitives.Estimator并不能走得太远。量子计算机的力量无法在经典计算机上模拟,你需要使用真实的量子硬件来扩展到更大的量子电路。然而,在硬件上运行量子电路需要将它们重写为量子硬件的基础门和连接。完成这项任务的工具是量子编译器,Qiskit包括用于合成、优化、映射和排程的量子编译器转换。然而,它还包括一个默认编译器,在大多数示例中表现都非常出色。以下代码将示例电路映射到basis_gates = ['cz', 'sx', 'rz']和一个线性链的量子比特$0 \rightarrow 1 \rightarrow 2$,其中coupling_map =[[0, 1], [1, 2]]

from qiskit import transpile
qc_transpiled = transpile(qc_example, basis_gates = ['cz', 'sx', 'rz'], coupling_map =[[0, 1], [1, 2]] , optimization_level=3)

有关使用Qiskit的更多示例,您可以查看此处的文档中的教程

https://qiskit.org/documentation/tutorials.html

在真实量子硬件上执行您的代码

Qiskit提供了一个抽象层,允许用户在任何提供兼容接口的硬件上运行量子电路。使用Qiskit的最佳方式是与提供针对特定硬件平台优化实现的samplerestimator的运行环境。这种运行环境可能涉及使用预处理和后处理,例如带有错误抑制、错误缓解和最终内置的错误校正的优化量子编译器转换。运行环境实现了qiskit.primitives.BaseSamplerqiskit.primitives.BaseEstimator接口。例如,一些提供运行时原始实现实现的软件包包括

Qiskit还提供了一个低级抽象接口,用于描述量子后端。此接口位于qiskit.providers中,定义了一个抽象的BackendV2类,提供商可以实施以表示其硬件或模拟器给Qiskit。后端类包括在后端上执行电路的通用接口;然而,在此接口中,每个提供商可能执行不同类型的预处理和后处理,并返回供应商定义的结果。一些与真实硬件接口的已发布提供商软件包示例包括

您可以通过查看这些软件包的文档来获取有关如何访问和使用这些系统的进一步说明。

贡献指南

如果您想为Qiskit做出贡献,请查看我们的贡献指南。通过参与,您将期望遵守我们的行为准则

我们使用GitHub问题来跟踪请求和错误。请加入Qiskit Slack社区进行讨论、评论和提问。有关运行或使用Qiskit的问题,Stack Overflow有一个qiskit标签。有关使用Qiskit进行量子计算的问题,请使用Quantum Computing Stack Exchange中的qiskit标签(请先阅读该论坛的提问指南)。

作者和引用

Qiskit是许多人的作品,他们以不同的层次为该项目做出了贡献。如果您使用Qiskit,请根据包含的BibTeX文件进行引用。

变更日志和发布说明

特定版本的更改日志是动态生成的,并会写入每个版本的GitHub发布页面。例如,您可以在以下位置找到0.9.0版本的页面:

https://github.com/Qiskit/qiskit-terra/releases/tag/0.9.0

您可以在“发布”标签中找到当前版本的更改日志: Releases 更改日志提供了对给定版本重要更改的快速概述。

此外,作为每个版本的一部分,详细的发布说明被编写以详细记录发布过程中发生的变更。这包括有关升级时潜在破坏性更改和新增功能的任何文档。例如,您可以在以下位置找到0.9.0版本的发布说明:

https://qiskit.org/documentation/release_notes.html#terra-0-9

致谢

我们感谢美国能源部科学办公室国家量子信息科学研究中心、协同设计量子优势中心(C2QA)对Qiskit开发的阶段性支持,合同编号为DE-SC0012704。

许可证

Apache License 2.0

项目详情


发布历史 发布通知 | RSS源

下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源代码分布

qiskit_terra-0.46.3.tar.gz (5.2 MB 查看哈希值)

上传于

构建的分发版本

qiskit_terra-0.46.3-cp38-abi3-win_amd64.whl (5.2 MB 查看哈希值)

上传于 CPython 3.8+ Windows x86-64

qiskit_terra-0.46.3-cp38-abi3-win32.whl (5.1 MB 查看哈希值)

上传于 CPython 3.8+ Windows x86

qiskit_terra-0.46.3-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.4 MB 查看哈希值)

上传于 CPython 3.8+ manylinux: glibc 2.17+ x86-64

qiskit_terra-0.46.3-cp38-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl (5.9 MB 查看哈希值)

上传于 CPython 3.8+ manylinux: glibc 2.17+ s390x

qiskit_terra-0.46.3-cp38-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (5.5 MB 查看哈希值)

上传于 CPython 3.8+ manylinux: glibc 2.17+ ppc64le

qiskit_terra-0.46.3-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (5.4 MB 查看哈希值)

上传于 CPython 3.8+ manylinux: glibc 2.17+ ARM64

qiskit_terra-0.46.3-cp38-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl (5.5 MB 查看哈希值)

上传于 CPython 3.8+ manylinux: glibc 2.12+ i686 manylinux: glibc 2.17+ i686

qiskit_terra-0.46.3-cp38-abi3-macosx_11_0_arm64.whl (5.4 MB 查看哈希值)

上传于 CPython 3.8+ macOS 11.0+ ARM64

qiskit_terra-0.46.3-cp38-abi3-macosx_10_9_x86_64.whl (5.5 MB 查看哈希值)

上传于 CPython 3.8+ macOS 10.9+ x86-64

qiskit_terra-0.46.3-cp38-abi3-macosx_10_9_universal2.whl (6.4 MB 查看哈希值)

上传时间 CPython 3.8+ macOS 10.9+ universal2 (ARM64, x86-64)

由以下赞助

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面