API是一组类、函数和数据结构,用于与设备和模拟器进行接口,并运行实验。
Qiskit实验概述
Qobj中的实验序列定义了运行在后端backend上的量子操作。单个Qobj定义了一批要并发运行的实验,即, Qobj中每个实验按列出的顺序运行一个shot,重复整个实验序列,直到收集到指定的shot数量。有两种语言可以表达这些序列,OpenQASM和OpenPulse。
OpenQASM是操作在门、度量和条件方面的抽象表示。
OpenPulse定义了操作和测量的连续timedynamics,即,脉冲pulse应用于backend。
在实验中,量子位元的测量值以两种存储方式存储在后端:慢速存取存储器( slow access memory)和快速存取寄存器(fast access register)
内存(Memory)是由用户动态调整大小的,并且假设大小没有限制。它是在实验结束时通过结果数据对象读出的。在OpenQASM实验中,对量子位的测量返回一个量子位状态的位值。OpenPulse实验可以支持额外的测量数据类型,例如原始解调信号或应用测量内核后的IQ值,这些数据类型也可以存储在内存中。
寄存器(Register)是位数据的快速存取存储器,存储量子位状态或布尔函数的输出。如果支持,则可以根据指定寄存器是否为1 (true)来设置gates。寄存器槽的数量由后端定义。
Qiskit的基本结构:
provider类,它管理与单个身份验证点和/或单个连接点对应的后端集合(例如,提供者是来自同一源的一组后端,如IBM Q提供的后端)。
每个backend(可以运行实验的设备/模拟器)都有一个类,该类可用于从设备获取配置和状态信息并运行实验。
Experiments(job)由包含配置信息和实验序列的量子对象(Qobj)数据结构定义。Job类是通过对后端运行调用创建的,其中包含一个Qobj,该Qobj根据一般的Qobj模式以及后端强加的任何特定模式进行验证。一旦创建了job对象,就可以使用它来获取关于job的状态信息、取消job和检索结果。
函数调用:
Qiskit的数据结构:
Provider
provider对象,管理provider提供的一组后端,例如,具有相同用户身份验证和地址的后端。方法在表一中显示。
Provider有一个Provider.available_backends的方法,可以从提供程序返回所有后端。provider类有一个函数Provider.get backend(backend name),返回给定后端名称(backend_name)的后端对象(backend object)。
Backend
Backend类是到可用设备或模拟器(能够运行量子实验的东西)的接口。Backend可以是在线的,也可以是本地的,并且可以支持OpenPulse(所有后端都必须支持OpenQASM)。表二中是所需的数据结构,表一中是通用后端可使用的函数调用。
Configuration
backend将有一个方法backend .configuration(),该方法返回所需的backend_config数据结构。backends可以包含此结构的其他项(如果后端支持OpenPulse,则需要额外的配置,之后讨论)。
此中,
- backend_name:唯一的(对提供者)后端标识符名称。这可以描述一个经历了几次更改但保留了公共元素的设置,例如,对于物理设备后端,这可能包括相同的耦合映射和物理位置,等等。
- backend version:后端版本字符串形式为“X.X.X”。版本可以表明,例如,代码更改,设备升级,不同的冷却时间,新的优化,等等。
- n_qubits:后端量子位的数量。模拟器后端返回“-1”。
- basis_gates:后端可用门的列表,作为门名称数组(这些名称应该与gates中的条目匹配)。
- coupling_map:表示设备上的物理耦合映射(每个门的耦合映射在gates中定义)。
- gates:作为gate_config数据结构的后端可用门的列表。
- local:后端在本地运行(true)或在线运行(false)。
- simulator:后端是模拟器(true)或实验设备(false)。
- conditional:后端支持条件门(true)或不支持条件门(false)。各个门也可能支持或不支持条件(参阅gate_config数据结构)。
- configurable:后端(if simulator)是可配置的(true)。如果为真,则存在用户指定的配置参数(例如拓扑、噪声参数等)。这些设置的数据结构由特定的后端设置。
- n_registers:(如果conditional为true,则为required):指定可用于条件操作的寄存器槽数(即寄存器位数)。每个寄存器可以保存一个位值。
- register_map:(如果conditional为true,则为required):指定每个量子位可以存储测量值的寄存器。在这个例子中,量子位0和1可以存储在寄存器0和1中,量子位2可以存储在寄存器2和3中,量子位3和4可以存储在寄存器3和4中。
- open_pulse:OpenPulse实验可以在这个后端(bool)上接受。
configuration结构还可以具有以下可选字段:
gate_config 数据结构
gate_config 数据结构具有以下内容:
- name:门名称,它将在OpenQASM电路中引用。
- parameters:门的参数列表(如果没有参数,则为空)。
- coupling_map:门应用于的量子位的列表,列表中的每个元素都是一个n-量子位列表,其中n是门的大小(例如1-qubit gate,2-qubit gate)。
- qasm_def:基于基门[U,CX]的OpenQASM定义。在此基础上,每个酉门都有一个有效的表示。
- conditional (optional):Gate支持条件操作(true/false)。如果未列出,则默认设置为后端设置。
- latency_map (optional): 列出每个长度为n的寄存器的门,它指示到寄存器的反馈速度是快(1)还是慢(0)。在上面的例子中,量子位0的u3门对于条件寄存器0有较低的延迟,量子位1和2对于寄存器1和寄存器2都有较低的延迟。
- description (optional): 门的描述。
以CX为例:
SWAP门:
Properties
后端将有一个调用backend.properties(),它将返回一个带有后端属性(例如校准和一致性)的backend_props数据结构。注意,此信息可选由后端提供,它将设置需要更新校准和字符的频率和/或在什么条件下更新。
- last_update_date: :最后一次运行校准的日期/时间.
- gates:量子位元门参数列表(作为gate prop结构,见下).
- qubits:量子位元参数的列表(例如相干性),按量子位元的顺序排列。量子位参数一般包括T1、T2、readoutErr和频率。
- general:通用后端参数列表(作为nduv_struct,参见下面)。
每个参数都表示为nduv结构(name-date-unit-value结构),如下所示:
-name:参数的名称。
-date:测量参数的日期。
-unit:值的单位(作为字符串)。
-value:参数值。
对于门的参数,gate_prop的结构为:
-qubit:与门有关的量子位。
-gate: gate name,必须是后端配置结构中“gates”中的一个门。
-parameters:参数结构列表,通常包括“gate err”(门误差指的是特定门的1 - Favg)和“门时间”。请注意,每个后端可能使用不同的方法测量门错误,这将必须由后端通过单独的通道(例如URL)传递。
对于后端属性中的general参数,每个结构的形式为:
to be continued…