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