

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用脉冲访问原生门
<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) 的脉冲实现。

```
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) 和 qubit 0 的所有校准。

```
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)
```