Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Lavorare con Hello Pulse
In questa sezione, imparerai come caratterizzare e costruire una singola porta qubit direttamente usando pulse on a Rigetti dispositivo. L'applicazione di un campo elettromagnetico a un qubit porta all'oscillazione Rabi, che commuta i qubit tra lo stato 0 e lo stato 1. Con la lunghezza e la fase dell'impulso calibrate, l'oscillazione Rabi può calcolare una singola porta qubit. Qui determineremo la lunghezza ottimale dell'impulso per misurare un impulso pi/2, un blocco elementare utilizzato per costruire sequenze di impulsi più complesse.
Innanzitutto, per creare una sequenza di impulsi, importate la classe. PulseSequence
from braket.aws import AwsDevice from braket.circuits import FreeParameter from braket.devices import Devices from braket.pulse import PulseSequence, GaussianWaveform import numpy as np
Quindi, crea un'istanza di un nuovo dispositivo Braket utilizzando il Amazon Resource Name (ARN) della QPU. Il seguente blocco di codice utilizza Rigetti Ankaa-3.
device = AwsDevice(Devices.Rigetti.Ankaa3)
La seguente sequenza di impulsi include due componenti: riproduzione di una forma d'onda e misurazione di un qubit. La sequenza di impulsi può in genere essere applicata ai fotogrammi. Con alcune eccezioni come la barriera e il ritardo, che possono essere applicati ai qubit. Prima di costruire la sequenza di impulsi è necessario recuperare i frame disponibili. Il frame di azionamento viene utilizzato per applicare l'impulso per l'oscillazione Rabi e il frame di lettura serve per misurare lo stato del qubit. Questo esempio utilizza i frame del qubit 25. Per ulteriori informazioni sui frame, vedere Ruoli dei frame e delle porte.
drive_frame = device.frames["Transmon_25_charge_tx"] readout_frame = device.frames["Transmon_25_readout_rx"]
Ora, create la forma d'onda che verrà riprodotta nel frame del drive. L'obiettivo è caratterizzare il comportamento dei qubit per diverse lunghezze di impulso. Suonerai ogni volta una forma d'onda con lunghezze diverse. Invece di istanziare ogni volta una nuova forma d'onda, utilizzate il parametro libero supportato da Braket nella sequenza di impulsi. È possibile creare la forma d'onda e la sequenza di impulsi una volta con parametri liberi, quindi eseguire la stessa sequenza di impulsi con valori di input diversi.
waveform = GaussianWaveform(FreeParameter("length"), FreeParameter("length") * 0.25, 0.2, False)
Infine, mettili insieme come sequenza di impulsi. Nella sequenza di impulsi, play
riproduce la forma d'onda specificata sul frame di azionamento e quindi capture_v0
misura lo stato a partire dal riquadro di lettura.
pulse_sequence = ( PulseSequence() .play(drive_frame, waveform) .capture_v0(readout_frame) )
Esegue la scansione su un intervallo di lunghezza degli impulsi e li invia alla QPU.
start_length=12e-9 end_length=2e-7 lengths = np.arange(start_length, end_length, 12e-9) tasks = [ device.run(pulse_sequence, shots=100, inputs={"length": length}) for length in lengths ] probability_of_zero = [ task.result().measurement_counts['0']/N_shots for task in tasks ]
Le statistiche della misurazione del qubit mostrano la dinamica oscillatoria del qubit che oscilla tra lo stato 0 e lo stato 1. Dai dati di misurazione, è possibile estrarre la frequenza Rabi e regolare con precisione la lunghezza dell'impulso per implementare una particolare porta da 1 qubit. Ad esempio, dai dati riportati nella figura seguente, la periodicità è di circa 154 ns. Quindi una porta di rotazione pi/2 corrisponderebbe alla sequenza di impulsi con lunghezza = 38,5 ns.

Hello Pulse sta usando OpenPulse
OpenPulse
Usi della staffa OpenPulse come rappresentazione intermedia sottostante per esprimere gli impulsi nelle istruzioni native. OpenPulse supporta l'aggiunta di calibrazioni delle istruzioni sotto forma di dichiarazioni defcal
(abbreviazione di «define calibration»). Con queste dichiarazioni, è possibile specificare un'implementazione di un'istruzione gate all'interno di una grammatica di controllo di livello inferiore.
È possibile visualizzare il OpenPulse programma di un Braket PulseSequence
utilizzando il seguente comando.
print(pulse_sequence.to_ir())
Puoi anche costruire direttamente un OpenPulse programma.
from braket.ir.openqasm import Program openpulse_script = """ OPENQASM 3.0; cal { bit[1] psb; waveform my_waveform = gaussian(12.0ns, 3.0ns, 0.2, false); play(Transmon_25_charge_tx, my_waveform); psb[0] = capture_v0(Transmon_25_readout_rx); } """
Crea un Program
oggetto con il tuo script. Quindi, invia il programma a una QPU.
from braket.aws import AwsDevice from braket.devices import Devices from braket.ir.openqasm import Program program = Program(source=openpulse_script) device = AwsDevice(Devices.Rigetti.Ankaa3) task = device.run(program, shots=100)