Qiskit API架构介绍(一)

API是一组类、函数和数据结构,用于与设备和模拟器进行接口,并运行实验。

Qiskit实验概述

Qobj中的实验序列定义了运行在后端backend上的量子操作。单个Qobj定义了一批要并发运行的实验,即, Qobj中每个实验按列出的顺序运行一个shot,重复整个实验序列,直到收集到指定的shot数量。有两种语言可以表达这些序列,OpenQASMOpenPulse
OpenQASM是操作在门、度量和条件方面的抽象表示。
OpenPulse定义了操作和测量的连续timedynamics,即,脉冲pulse应用于backend。
在实验中,量子位元的测量值以两种存储方式存储在后端:慢速存取存储器( slow access memory)快速存取寄存器(fast access register)
内存(Memory)是由用户动态调整大小的,并且假设大小没有限制。它是在实验结束时通过结果数据对象读出的。在OpenQASM实验中,对量子位的测量返回一个量子位状态的位值。OpenPulse实验可以支持额外的测量数据类型,例如原始解调信号或应用测量内核后的IQ值,这些数据类型也可以存储在内存中。
寄存器(Register)是位数据的快速存取存储器,存储量子位状态或布尔函数的输出。如果支持,则可以根据指定寄存器是否为1 (true)来设置gates。寄存器槽的数量由后端定义。

Qiskit的基本结构:

Qiskit API架构介绍(一)_第1张图片
provider类,它管理与单个身份验证点和/或单个连接点对应的后端集合(例如,提供者是来自同一源的一组后端,如IBM Q提供的后端)。
每个backend(可以运行实验的设备/模拟器)都有一个类,该类可用于从设备获取配置和状态信息并运行实验。
Experiments(job)由包含配置信息和实验序列的量子对象(Qobj)数据结构定义。Job类是通过对后端运行调用创建的,其中包含一个Qobj,该Qobj根据一般的Qobj模式以及后端强加的任何特定模式进行验证。一旦创建了job对象,就可以使用它来获取关于job的状态信息、取消job和检索结果。

函数调用:

Qiskit API架构介绍(一)_第2张图片

Qiskit的数据结构:

Qiskit API架构介绍(一)_第3张图片

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,则需要额外的配置,之后讨论)。
Qiskit API架构介绍(一)_第4张图片
此中,

  • 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结构还可以具有以下可选字段:
    Qiskit API架构介绍(一)_第5张图片
gate_config 数据结构

gate_config 数据结构具有以下内容:
Qiskit API架构介绍(一)_第6张图片

  • 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为例:
Qiskit API架构介绍(一)_第7张图片
SWAP门:
Qiskit API架构介绍(一)_第8张图片

Properties

后端将有一个调用backend.properties(),它将返回一个带有后端属性(例如校准和一致性)的backend_props数据结构。注意,此信息可选由后端提供,它将设置需要更新校准和字符的频率和/或在什么条件下更新。
Qiskit API架构介绍(一)_第9张图片

  • last_update_date: :最后一次运行校准的日期/时间.
  • gates:量子位元门参数列表(作为gate prop结构,见下).
  • qubits:量子位元参数的列表(例如相干性),按量子位元的顺序排列。量子位参数一般包括T1、T2、readoutErr和频率。
  • general:通用后端参数列表(作为nduv_struct,参见下面)。
    每个参数都表示为nduv结构(name-date-unit-value结构),如下所示:
    Qiskit API架构介绍(一)_第10张图片
    -name:参数的名称。
    -date:测量参数的日期。
    -unit:值的单位(作为字符串)。
    -value:参数值。

对于门的参数,gate_prop的结构为:
Qiskit API架构介绍(一)_第11张图片
-qubit:与门有关的量子位。
-gate: gate name,必须是后端配置结构中“gates”中的一个门。
-parameters:参数结构列表,通常包括“gate err”(门误差指的是特定门的1 - Favg)和“门时间”。请注意,每个后端可能使用不同的方法测量门错误,这将必须由后端通过单独的通道(例如URL)传递。

对于后端属性中的general参数,每个结构的形式为:
Qiskit API架构介绍(一)_第12张图片

to be continued…

你可能感兴趣的:(学习笔记)