

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Acceso a puertas nativas mediante pulsos
<a name="braket-native-gate-pulse"></a>

Los investigadores a menudo necesitan saber exactamente cómo se implementan como pulsos las puertas *nativas* compatibles con una QPU en particular. Las secuencias de pulsos son cuidadosamente calibradas por los proveedores de hardware, pero acceder a ellas brinda a los investigadores la oportunidad de diseñar mejores puertas o explorar protocolos para la mitigación de errores, como la extrapolación de ruido cero mediante el alargamiento de los pulsos de puertas específicas.

Amazon Braket admite el acceso programático a las puertas nativas de 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.")
```

**nota**  
Los proveedores de hardware calibran periódicamente la QPU, a menudo más de una vez al día. El SDK de Braket le permite obtener las calibraciones de puertas más recientes.

```
device.refresh_gate_calibrations()
```

Para recuperar una puerta nativa determinada, como la puerta RX o XY, debe pasar el objeto `Gate` y los qubits de interés. Por ejemplo, puede inspeccionar la implementación de pulso del RX (π /2) aplicado a qubit 0.

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

pulse_sequence_rx_pi_2_q0 = calibrations.pulse_sequences[rx_pi_2_q0]
```

Puede crear un conjunto filtrado de calibraciones mediante la función `filter`. Pasa una lista de puertas o una lista de `QubitSet`. El siguiente código crea dos conjuntos que contienen todas las calibraciones de RX (π /2) y de qubit 0.

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

Ahora puede proporcionar o modificar la acción de las puertas nativas adjuntando un conjunto de calibración personalizado. Por ejemplo, considere el siguiente circuito:

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

Puede ejecutarlo con una calibración de puerta personalizada para la puerta `rx` en `qubit 0` pasando un diccionario de objetos `PulseSequence` al argumento de la palabra clave `gate_definitions`. Puede construir un diccionario a partir del atributo `pulse_sequences` del objeto `GateCalibrations`. Todas las puertas no especificadas se sustituyen por la calibración de pulso del proveedor de hardware cuántico.

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