跳转到主要内容

一个开源软件开发工具包,用于在扩展量子电路、算子和原语层面与量子计算机交互。

项目描述

Qiskit

License Current Release Extended Support Release Downloads Coverage Status PyPI - Python Version Minimum rustc 1.70 Downloads DOI

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

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

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

https://docs.quantum.ibm.com/

安装

[!警告]请不要尝试就地升级现有的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提供了一层抽象层,使用户可以在任何提供兼容接口的硬件上运行量子电路。使用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.46.0版本的页面

https://github.com/Qiskit/qiskit/releases/tag/0.46.0

当前版本的变更日志可以在发布选项卡中找到:Releases 变更日志提供了对特定版本显著变化的快速概述。

此外,作为每个版本的一部分,详细的发行说明被编写以详细记录作为版本的一部分发生了什么变化。这包括有关升级时潜在破坏性更改的任何文档和新功能。请参阅所有发行说明

致谢

我们感谢DOE科学办公室国家量子信息科学研究中心、Co-design Center for Quantum Advantage (C2QA)合同编号DE-SC0012704对Qiskit开发的局部支持。

许可证

Apache License 2.0

项目详情


发布历史 发布通知 | RSS订阅

下载文件

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

源分发

qiskit-1.2.4.tar.gz (3.6 MB 查看哈希值)

上传时间

构建分发

qiskit-1.2.4-cp38-abi3-win_amd64.whl (4.6 MB 查看哈希值)

上传时间 CPython 3.8+ Windows x86-64

qiskit-1.2.4-cp38-abi3-win32.whl (4.4 MB 查看哈希值)

上传时间 CPython 3.8+ Windows x86

qiskit-1.2.4-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.8 MB 查看哈希值)

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

qiskit-1.2.4-cp38-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl (5.5 MB 查看哈希值)

上传时间 CPython 3.8+ manylinux: glibc 2.17+ s390x

qiskit-1.2.4-cp38-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (4.7 MB 查看哈希值)

上传时间 CPython 3.8+ manylinux: glibc 2.17+ ppc64le

qiskit-1.2.4-cp38-abi3-manylinux_2_17_i686.manylinux2014_i686.whl (4.8 MB 查看哈希值)

上传时间 CPython 3.8+ manylinux: glibc 2.17+ i686

qiskit-1.2.4-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (4.6 MB 查看哈希值)

上传时间 CPython 3.8+ manylinux: glibc 2.17+ ARM64

qiskit-1.2.4-cp38-abi3-macosx_11_0_arm64.whl (4.5 MB 查看哈希值)

上传于 CPython 3.8+ macOS 11.0+ ARM64

qiskit-1.2.4-cp38-abi3-macosx_10_9_x86_64.whl (4.6 MB 查看哈希值)

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

qiskit-1.2.4-cp38-abi3-macosx_10_9_universal2.whl (6.8 MB 查看哈希值)

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

支持者