

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Acessando portas nativas usando pulsos
<a name="braket-native-gate-pulse"></a>

Os pesquisadores geralmente precisam saber exatamente como as portas *nativas* compatíveis com uma determinada QPU são implementadas como pulsos. As sequências de pulsos são cuidadosamente calibradas pelos fornecedores de hardware, mas acessá-las oferece aos pesquisadores a oportunidade de projetar portas melhores ou explorar protocolos para mitigação de erros, como extrapolação de ruído zero, ampliando os pulsos de portas específicas.

O Amazon Braket oferece suporte ao acesso programático às portas nativas da 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**  
Os fornecedores de hardware calibram periodicamente a QPU, geralmente mais de uma vez por dia. O SDK do Braket permite que você obtenha as calibrações de portas mais recentes.

```
device.refresh_gate_calibrations()
```

Para recuperar uma determinada porta nativa, como a porta RX ou XY, você precisa passar o objeto `Gate` e os qubits de interesse. Por exemplo, você pode inspecionar a implementação de pulso do RX (π/2) aplicado em 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]
```

Você pode criar um conjunto filtrado de calibrações usando a função `filter`. Você passa por uma lista de portas ou uma lista de `QubitSet`. O código a seguir cria dois conjuntos que contêm todas as calibrações para RX (π/2) e para qubit 0.

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

Agora você pode fornecer ou modificar a ação das portas nativas anexando um conjunto de calibração personalizado. Por exemplo, considere o seguinte circuito.

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

Você pode executá-lo com uma calibração de porta `rx` personalizada no `qubit 0` para o gate ligado, passando um dicionário de objetos `PulseSequence` para o argumento de palavra-chave `gate_definitions`. Você pode construir um dicionário a partir do atributo `pulse_sequences` do objeto `GateCalibrations`. Todas as portas não especificadas são substituídas pela calibração de pulso do fornecedor de hardware quâ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)
```