さまざまな Braket デバイスでの OpenQASM のサポート - Amazon Braket

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

さまざまな Braket デバイスでの OpenQASM のサポート

OpenQASM 3.0 をサポートしているデバイスの場合、 actionフィールドは、 Rigettiおよび IonQ デバイスの次の例に示すように、 GetDeviceレスポンスによる新しいアクションをサポートします。

//OpenQASM as available with the Rigetti device capabilities { "braketSchemaHeader": { "name": "braket.device_schema.rigetti.rigetti_device_capabilities", "version": "1" }, "service": {...}, "action": { "braket.ir.jaqcd.program": {...}, "braket.ir.openqasm.program": { "actionType": "braket.ir.openqasm.program", "version": [ "1" ], …. } } } //OpenQASM as available with the IonQ device capabilities { "braketSchemaHeader": { "name": "braket.device_schema.ionq.ionq_device_capabilities", "version": "1" }, "service": {...}, "action": { "braket.ir.jaqcd.program": {...}, "braket.ir.openqasm.program": { "actionType": "braket.ir.openqasm.program", "version": [ "1" ], …. } } }

パルス制御をサポートするデバイスの場合、 pulseフィールドがGetDeviceレスポンスに表示されます。次の例は、 Rigettiデバイスのpulseこのフィールドを示しています。

// Rigetti { "pulse": { "braketSchemaHeader": { "name": "braket.device_schema.pulse.pulse_device_action_properties", "version": "1" }, "supportedQhpTemplateWaveforms": { "constant": { "functionName": "constant", "arguments": [ { "name": "length", "type": "float", "optional": false }, { "name": "iq", "type": "complex", "optional": false } ] }, ... }, "ports": { "q0_ff": { "portId": "q0_ff", "direction": "tx", "portType": "ff", "dt": 1e-9, "centerFrequencies": [ 375000000 ] }, ... }, "supportedFunctions": { "shift_phase": { "functionName": "shift_phase", "arguments": [ { "name": "frame", "type": "frame", "optional": false }, { "name": "phase", "type": "float", "optional": false } ] }, ... }, "frames": { "q0_q1_cphase_frame": { "frameId": "q0_q1_cphase_frame", "portId": "q0_ff", "frequency": 462475694.24460185, "centerFrequency": 375000000, "phase": 0, "associatedGate": "cphase", "qubitMappings": [ 0, 1 ] }, ... }, "supportsLocalPulseElements": false, "supportsDynamicFrames": false, "supportsNonNativeGatesWithPulses": false, "validationParameters": { "MAX_SCALE": 4, "MAX_AMPLITUDE": 1, "PERMITTED_FREQUENCY_DIFFERENCE": 400000000 } } }

前述のフィールドでは、以下について詳しく説明しています。

ポート:

特定のポートの関連プロパティに加えて、QPU で宣言された事前に作成された外部 (extern) デバイスポートについて説明します。この構造にリストされているすべてのポートは、ユーザーが送信したOpenQASM 3.0プログラム内で有効な識別子として事前に宣言されています。ポートの追加プロパティは次のとおりです。

  • ポート ID (portId)

    • OpenQASM 3.0 で識別子として宣言されたポート名。

  • 方向 (方向)

    • ポートの方向。ドライブポートはパルス (方向「tx」) を送信し、測定ポートはパルス (方向「rx」) を受信します。

  • ポートタイプ (portType)

    • このポートが担当するアクションのタイプ (ドライブ、キャプチャ、ff - fast-flux など)。

  • Dt (dt)

    • 指定されたポートの単一のサンプル時間ステップを表す秒単位の時間。

  • 量子ビットマッピング (qubitMappings)

    • 指定されたポートに関連付けられた量子ビット。

  • 中心頻度 (centerFrequencies)

    • ポート上のすべての事前宣言フレームまたはユーザー定義フレームに関連付けられた中心周波数のリスト。詳細については、「フレーム」を参照してください。

  • QHP 固有のプロパティ (qhpSpecificProperties)

    • QHP に固有のポートに関する既存のプロパティの詳細を示すオプションのマップ。

フレーム:

QPU で宣言された事前に作成された外部フレームと、フレームに関連するプロパティについて説明します。この構造にリストされているすべてのフレームは、ユーザーが送信したOpenQASM 3.0プログラム内で有効な識別子として事前に宣言されています。フレームの追加プロパティは次のとおりです。

  • フレーム ID (frameId)

    • OpenQASM 3.0 で識別子として宣言されたフレーム名。

  • ポート ID (portId)

    • フレームに関連付けられたハードウェアポート。

  • 頻度 (頻度)

    • フレームのデフォルトの初期頻度。

  • 中心頻度 (centerFrequency)

    • フレームの周波数帯域幅の中心。通常、フレームは中心周波数の周りの特定の帯域幅にのみ調整できます。その結果、頻度調整は中心周波数の一定の差分内に留まる必要があります。帯域幅の値は、検証パラメータで確認できます。

  • フェーズ (フェーズ)

    • フレームのデフォルトの初期フェーズ。

  • 関連付けられたゲート (associatedGate)

    • 指定されたフレームに関連付けられたゲート。

  • 量子ビットマッピング (qubitMappings)

    • 指定されたフレームに関連付けられた量子ビット。

  • QHP 固有のプロパティ (qhpSpecificProperties)

    • QHP に固有のフレームに関する既存のプロパティの詳細を示すオプションのマップ。

SupportsDynamicFrames:

OpenPulse newframe 関数を通じてフレームを calまたは defcalブロックで宣言できるかどうかを記述します。これが false の場合、フレーム構造にリストされているフレームのみをプログラム内で使用できます。

SupportedFunctions:

特定のOpenPulse関数に関連する引数、引数タイプ、戻り値タイプに加えて、デバイスでサポートされている関数について説明します。OpenPulse 関数の使用例については、OpenPulse 仕様を参照してください。現時点では、Braket は以下をサポートしています。

  • シフトフェーズ

    • フレームのフェーズを指定された値だけシフトします。

  • set_phase

    • フレームのフェーズを指定された値に設定します。

  • スワップフェーズ

    • 2 つのフレーム間でフェーズをスワップします。

  • shift_frequency

    • フレームの頻度を指定された値だけシフトします。

  • set_frequency

    • フレームの頻度を指定された値に設定します

  • play

    • 波形をスケジュールします。

  • capture_v0

    • キャプチャフレームの値をビットレジスタに返します。

SupportedQhpTemplateWaveforms:

デバイスで使用可能な構築済みの波形関数と、関連する引数とタイプについて説明します。デフォルトでは、Braket Pulse はすべてのデバイスで事前構築された波形ルーチンを提供します。

定数

出力が常に iq と等しいパラメータ t、tau、iq を持つ定数関数を示す数式。

τ は波形の長さで、 iqは複雑な数値です。

def constant(length, iq)

ガウシアン

パラメータ t、tau、sigma、A=1、ZaE=0 を持つガウシアン関数を示す数式。

τ は波形の長さ、 σはガウシアンの幅、 Aは振幅です。ZaE を に設定するとTrue、ガウシアンはオフセットされ、波形の開始時と終了時にゼロに等しくなるように再スケーリングされ、A最大値に達します。

def gaussian(length, sigma, amplitude=1, zero_at_edges=False)

DRAG ガウシアン

パラメータ t、tau、sigma、beta、A=1、ZaE=0 を使用した DRAG ガウシアン分布の数式。

τ は波形の長さ、 σはガウシアンの幅、 βは無料のパラメータ、 Aは振幅です。ZaE を に設定するとTrue、ダイアバティックゲート (DRAG) ガウシアンによる派生除去はオフセットされ、波形の開始時と終了時にゼロに等しくなり、実際の部分がA最大に達するように再スケーリングされます。DRAG 波形の詳細については、ホワイトペーパー「Unakly Nonlinear Qubits」の「Simple Pulses for Elimination of leakage」を参照してください。

def drag_gaussian(length, sigma, beta, amplitude=1, zero_at_edges=False)

ヨーロッパ広場

パラメータ t、Length、Width、sigma、A=1、ZaE=0 を使用した Erf 二乗分布の数式。

ここで、 L は長さ、 Wは波形の幅、 σ はエッジの上下速度、 t1​=(L−W)/2 t22=(L+W)/2Aは振幅です。ZaE を に設定するとTrue、ガウシアンはオフセットされ、波形の開始時と終了時にゼロに等しくなるように再スケーリングされ、A最大値に達します。次の式は、波形の再スケーリングされたバージョンです。

パラメータ ZaE=1 で再スケーリングされた Erf 二乗分布の数式。

ここで a=erf(W/2σ)b=erf(−t1​/σ)/2+erf(t2​/σ)/2

def erf_square(length, width, sigma, amplitude=1, zero_at_edges=False)

SupportsLocalPulseElements:

ポート、フレーム、波形などのパルス要素をdefcalブロックでローカルに定義できるかどうかを記述します。値が の場合false、要素はcalブロックで定義する必要があります。

SupportsNonNativeGatesWithPulses:

パルスプログラムと組み合わせて非ネイティブゲートを使用できるかどうかについて説明します。例えば、最初にdefcal使用済み量子ビットのゲートスルーを定義しないと、プログラムで H ゲートのような非ネイティブゲートを使用することはできません。ネイティブゲートnativeGateSetキーのリストは、 デバイス機能にあります。

ValidationParameters:

パルス要素の検証境界について説明します。これには、以下が含まれます。

  • 波形の最大スケール/最大振幅値 (任意および構築済み)

  • 指定された中心周波数からの最大周波数帯域幅を Hz で表示

  • 秒単位の最小パルス長/時間

  • 秒単位の最大パルス長/時間

OpenQASM でサポートされているオペレーション、結果、結果タイプ

各デバイスがサポートする OpenQASM 3.0 の機能を確認するには、デバイス機能出力の actionフィールドで braket.ir.openqasm.programキーを参照してください。例えば、Braket State Vector Simulator でサポートされているオペレーションと結果タイプを次に示しますSV1。

... "action": { "braket.ir.jaqcd.program": { ... }, "braket.ir.openqasm.program": { "version": [ "1.0" ], "actionType": "braket.ir.openqasm.program", "supportedOperations": [ "ccnot", "cnot", "cphaseshift", "cphaseshift00", "cphaseshift01", "cphaseshift10", "cswap", "cy", "cz", "h", "i", "iswap", "pswap", "phaseshift", "rx", "ry", "rz", "s", "si", "swap", "t", "ti", "v", "vi", "x", "xx", "xy", "y", "yy", "z", "zz" ], "supportedPragmas": [ "braket_unitary_matrix" ], "forbiddenPragmas": [], "maximumQubitArrays": 1, "maximumClassicalArrays": 1, "forbiddenArrayOperations": [ "concatenation", "negativeIndex", "range", "rangeWithStep", "slicing", "selection" ], "requiresAllQubitsMeasurement": true, "supportsPhysicalQubits": false, "requiresContiguousQubitIndices": true, "disabledQubitRewiringSupported": false, "supportedResultTypes": [ { "name": "Sample", "observables": [ "x", "y", "z", "h", "i", "hermitian" ], "minShots": 1, "maxShots": 100000 }, { "name": "Expectation", "observables": [ "x", "y", "z", "h", "i", "hermitian" ], "minShots": 0, "maxShots": 100000 }, { "name": "Variance", "observables": [ "x", "y", "z", "h", "i", "hermitian" ], "minShots": 0, "maxShots": 100000 }, { "name": "Probability", "minShots": 1, "maxShots": 100000 }, { "name": "Amplitude", "minShots": 0, "maxShots": 0 } { "name": "AdjointGradient", "minShots": 0, "maxShots": 0 } ] } }, ...