

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 支援不同 Braket 裝置上的 OpenQASM
<a name="braket-openqasm-device-support"></a>

對於支援 OpenQASM 3.0 的裝置， `action` 欄位支援透過 `GetDevice` 回應的新動作，如下列 Rigetti和 IonQ 裝置範例所示。

```
//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 - 快速流量）。
+ Dt (dt)
  + 代表指定連接埠上單一範例時間步驟的時間，以秒為單位。
+ Qubit 映射 (qubitMappings)
  + 與指定連接埠相關聯的 qubit。
+ 中心頻率 (centerFrequencies)
  + 連接埠上所有預先宣告或使用者定義影格的關聯中心頻率清單。如需詳細資訊，請參閱影格。
+ QHP 特定屬性 (qhpSpecificProperties)
  + 選用的映射，詳細說明有關 QHP 特定連接埠的現有屬性。

 **影格：**

描述在 QPU 上宣告的預先製作外部影格，以及影格的相關屬性。此結構中列出的所有影格都會在使用者提交的`OpenQASM 3.0`程式中預先宣告為有效的識別符。影格的其他屬性包括：
+ 框架 ID (frameId)
  + 在 OpenQASM 3.0 中宣告為識別符的影格名稱。
+ 連接埠 ID (portId)
  + 影格的相關硬體連接埠。
+ 頻率 （頻率）
  + 影格的預設初始頻率。
+ 中心頻率 (centerFrequency)
  + 影格的頻率頻寬中心。一般而言，影格只能根據中心頻率調整為特定頻寬。因此，頻率調整應保持在中心頻率的特定差異內。您可以在驗證參數中找到頻寬值。
+ 階段 （階段）
  + 影格的預設初始階段。
+ 關聯的閘道 (associatedGate)
  + 與指定影格相關聯的閘道。
+ Qubit 映射 (qubitMappings)
  + 與指定影格相關聯的 qubit。
+ QHP 特定屬性 (qhpSpecificProperties)
  + 選用的映射，詳細說明 QHP 特定影格的現有屬性。

 **SupportsDynamicFrames：**

描述是否可以透過 OpenPulse`newframe`函數在 `cal`或 `defcal`區塊中宣告影格。如果這是 false，則只能在程式中使用影格結構中列出的影格。

 **SupportedFunctions：**

除了指定OpenPulse函數的相關聯引數、引數類型和傳回類型之外，說明裝置支援的函數。若要查看使用 OpenPulse函數的範例，請參閱 [OpenPulse 規格](https://openqasm.com/language/openpulse.html)。目前，Raket 支援：
+ shift\$1phase
  + 將影格的階段轉移為指定的值
+ set\$1phase
  + 將影格的階段設定為指定的值
+ swap\$1phases
  + 交換兩個影格之間的階段。
+ shift\$1frequency
  + 將影格的頻率轉移為指定的值
+ set\$1frequency
  + 將影格的頻率設定為指定的值
+ 播放
  + 排程波形
+ capture\$1v0
  + 將擷取影格上的值傳回位元登錄

 **SupportedQhpTemplateWaveforms：**

描述裝置上可用的預先建置波形函數，以及相關聯的引數和類型。根據預設，Raket Pulse 會在所有裝置上提供預先建置的波形常式，包括：

 ** *常數* ** 

![\[數學方程式顯示參數為 t、tau 和 iq 的常數函數，其中輸出一律等於 iq。\]](http://docs.aws.amazon.com/zh_tw/braket/latest/developerguide/images/ConstantFunction.png)


 `τ` 是波形的長度，而 `iq` 是複雜的數字。

```
def constant(length, iq)
```

 ** *高斯文* ** 

![\[顯示具有參數 t、tau、sigma、A=1 和 ZaE=0 的高斯函數的數學方程式。\]](http://docs.aws.amazon.com/zh_tw/braket/latest/developerguide/images/GaussianFunction.png)


 `τ` 是波形的長度， `σ`是高斯的寬度， `A`是振幅。如果`ZaE`設定為 `True`，高斯會偏移並重新調整規模，以便在波形的開始和結束時等於零，並達到`A`最大值。

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

 ** *DRAG 高斯文* ** 

![\[DRAG 高斯分佈的數學方程式，參數為 t、tau、sigma、beta、A=1 和 ZaE=0。\]](http://docs.aws.amazon.com/zh_tw/braket/latest/developerguide/images/DRAGGaussianFunction.png)


 `τ` 是波形的長度， `σ` 是高斯的寬度， `β` 是免費參數， `A`是振幅。如果`ZaE`將 設定為 `True`，則由 Adiabatic Gate (DRAG) Gaussian 進行的衍生移除會偏移和重新調整規模，以便在波形的開始和結束時等於零，且實際部分達到`A`最大值。如需 DRAG 波形的詳細資訊，請參閱論文 [Simple Pulses for 為避免微弱非線性 Qubits 中的洩漏](https://doi.org/10.1103/PhysRevLett.103.110501)。

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

 ** *歐夫廣場* ** 

![\[具有參數 t、Length、width、sigma、A=1 和 ZaE=0 的 Erf Square 分佈數學方程式。\]](http://docs.aws.amazon.com/zh_tw/braket/latest/developerguide/images/ErfSquareFunction.PNG)


其中 `L`是長度， `W`是波形的寬度，`σ`定義邊緣上升和下降的速度，`t1​=(L−W)/2`而 `t22=(L+W)/2``A`是振幅。如果`ZaE`設定為 `True`，高斯會偏移並重新調整規模，以便在波形的開始和結束時等於零，並達到`A`最大值。下列方程式是重新調整規模的波形版本。

![\[參數 ZaE=1 的重新調整規模 Erf Square 分佈的數學方程式。\]](http://docs.aws.amazon.com/zh_tw/braket/latest/developerguide/images/RescaledErfSquareFunction.PNG)


和 `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`透過 為使用的 qubit 定義`H`閘道，您就無法在程式中使用非原生閘道，例如閘道。您可以在裝置功能下找到原生閘道`nativeGateSet`金鑰的清單。

 **ValidationParameters：**

描述脈衝元素驗證界限，包括：
+ 波形的最大縮放/最大振幅值 （任意和預先建置）
+ 提供中心頻率的最大頻率頻寬，以 Hz 為單位
+ 最小脈衝長度/持續時間，以秒為單位
+ 脈衝長度/持續時間上限，以秒為單位

## 使用 OpenQASM 支援的操作、結果和結果類型
<a name="braket-openqasm-supported-operations-results-result-types"></a>

若要了解每個裝置支援哪些 OpenQASM 3.0 功能，您可以參考裝置功能輸出上 `action` 欄位中的 `braket.ir.openqasm.program`金鑰。例如，下列是適用於 Braket State Vector 模擬器 的支援操作和結果類型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
        }
      ]
    }
  },
...
```