

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

# 使用脈衝存取原生閘道
<a name="braket-native-gate-pulse"></a>

研究人員通常需要確切知道特定 QPU 支援的*原生*閘道如何實作為脈衝。脈衝序列由硬體提供者仔細校正，但存取它們可讓研究人員有機會設計更好的閘道，或探索錯誤緩解的通訊協定，例如延伸特定閘道的脈衝進行零雜訊外推。

Amazon Braket 支援從 Rigetti 以程式設計方式存取原生閘道。

```
import math
from braket.aws import AwsDevice
from braket.circuits import Circuit, GateCalibrations, QubitSet
from braket.circuits.gates import Rx

device = AwsDevice("arn:aws:braket:us-west-1::device/qpu/rigetti/Ankaa-3")

calibrations = device.gate_calibrations
print(f"Downloaded {len(calibrations)} calibrations.")
```

**注意**  
硬體供應商會定期校正 QPU，通常每天不只一次。Braket SDK 可讓您取得最新的閘道校正。

```
device.refresh_gate_calibrations()
```

若要擷取指定的原生閘道，例如 RX 或 XY 閘道，您需要傳遞`Gate`物件和感興趣的 qubit。例如，您可以檢查套用至 0 的 RX(π/2) qubit 的脈衝實作。

```
rx_pi_2_q0 = (Rx(math.pi/2), QubitSet(0))

pulse_sequence_rx_pi_2_q0 = calibrations.pulse_sequences[rx_pi_2_q0]
```

您可以使用 `filter`函數建立一組篩選後的校正。您可以傳遞閘道清單或 清單`QubitSet`。下列程式碼會建立兩組，其中包含 RX(π/2) 和 0 qubit 的所有校正。

```
rx_calibrations = calibrations.filter(gates=[Rx(math.pi/2)])
q0_calibrations = calibrations.filter(qubits=QubitSet([0]))
```

現在，您可以透過連接自訂校正集來提供或修改原生閘道的動作。例如，請考慮下列電路。

```
bell_circuit = (
    Circuit()
    .rx(0, math.pi/2)
    .rx(1, math.pi/2)
    .iswap(0, 1)
    .rx(1, -math.pi/2)
)
```

您可以透過將`PulseSequence`物件字典傳遞至`gate_definitions`關鍵字引數`qubit 0`，以閘道 的自訂`rx`閘道校正來執行它。您可以從 `GateCalibrations` 物件`pulse_sequences`的 屬性建構字典。所有未指定的閘道都會以量子硬體提供者的脈衝校正取代。

```
nb_shots = 50
custom_calibration = GateCalibrations({rx_pi_2_q0: pulse_sequence_rx_pi_2_q0})
task = device.run(bell_circuit, gate_definitions=custom_calibration.pulse_sequences, shots=nb_shots)
```