Lavorare con Hello Pulse - Amazon Braket

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.

Grafico a linee che mostra la quantità di popolazione e la durata dell'impulso in secondi. Nel grafico sono presenti due picchi e una depressione.

Hello Pulse sta usando OpenPulse

OpenPulseè un linguaggio per specificare il controllo a livello di impulsi di un dispositivo quantistico generale e fa parte delle specifiche OpenQASM 3.0. Supporti Amazon Braket OpenPulse per programmare direttamente gli impulsi utilizzando la rappresentazione OpenQASM 3.0.

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)