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á.
Suporte para OpenQASM em diferentes dispositivos Braket
Para dispositivos que suportam o OpenQASM 3.0, o campo action suporta uma nova ação por meio da resposta GetDevice, conforme mostrado no exemplo a seguir para os dispositivos Rigetti e IonQ.
//OpenQASM as available with the Rigetti device capabilities { "braketSchemaHeader": { "name": "braket.device_schema.rigetti.rigetti_device_capabilities", "version": "1" }, "service": {...}, "action": { "braket.ir.jaqcd.program": {...}, "braket.ir.openqasm.program": { "actionType": "braket.ir.openqasm.program", "version": [ "1" ], …. } } } //OpenQASM as available with the IonQ device capabilities { "braketSchemaHeader": { "name": "braket.device_schema.ionq.ionq_device_capabilities", "version": "1" }, "service": {...}, "action": { "braket.ir.jaqcd.program": {...}, "braket.ir.openqasm.program": { "actionType": "braket.ir.openqasm.program", "version": [ "1" ], …. } } }
Para dispositivos que suportam controle de pulso, o campo pulse é exibido na resposta GetDevice. O exemplo a seguir mostra esse campo pulse para o dispositivo Rigetti.
// Rigetti { "pulse": { "braketSchemaHeader": { "name": "braket.device_schema.pulse.pulse_device_action_properties", "version": "1" }, "supportedQhpTemplateWaveforms": { "constant": { "functionName": "constant", "arguments": [ { "name": "length", "type": "float", "optional": false }, { "name": "iq", "type": "complex", "optional": false } ] }, ... }, "ports": { "q0_ff": { "portId": "q0_ff", "direction": "tx", "portType": "ff", "dt": 1e-9, "centerFrequencies": [ 375000000 ] }, ... }, "supportedFunctions": { "shift_phase": { "functionName": "shift_phase", "arguments": [ { "name": "frame", "type": "frame", "optional": false }, { "name": "phase", "type": "float", "optional": false } ] }, ... }, "frames": { "q0_q1_cphase_frame": { "frameId": "q0_q1_cphase_frame", "portId": "q0_ff", "frequency": 462475694.24460185, "centerFrequency": 375000000, "phase": 0, "associatedGate": "cphase", "qubitMappings": [ 0, 1 ] }, ... }, "supportsLocalPulseElements": false, "supportsDynamicFrames": false, "supportsNonNativeGatesWithPulses": false, "validationParameters": { "MAX_SCALE": 4, "MAX_AMPLITUDE": 1, "PERMITTED_FREQUENCY_DIFFERENCE": 400000000 } } }
Os campos anteriores detalham o seguinte:
Portas:
Descreve as portas de dispositivos externos (extern) pré-fabricadas declaradas na QPU, além das propriedades associadas à porta especificada. Todas as portas listadas nessa estrutura são pré-declaradas como identificadores válidos no programa OpenQASM 3.0 enviado pelo usuário. As propriedades adicionais de uma porta incluem:
-
ID da porta (portId)
-
O nome da porta declarado como identificador no OpenQASM 3.0.
-
-
Direção (direção)
-
A direção da porta. As portas de acionamento transmitem pulsos (direção “tx”), enquanto as portas de medição recebem pulsos (direção “rx”).
-
-
Tipo de porta (PortType)
-
O tipo de ação pela qual essa porta é responsável (por exemplo, drive, capture ou ff - fast-flux).
-
-
Dt (dt)
-
O tempo em segundos que representa uma única etapa de tempo de amostra na porta especificada.
-
-
Mapeamentos de Qubit (mapeamentos de qubit)
-
Os qubits associados à porta fornecida.
-
-
Frequências centrais (frequências centrais)
-
Uma lista das frequências centrais associadas para todos os quadros pré-declarados ou definidos pelo usuário na porta. Para obter mais informações, consulte Quadros.
-
-
Propriedades específicas do QHP () qhpSpecificProperties
-
Um mapa opcional detalhando as propriedades existentes sobre a porta específica do QHP.
-
Quadros:
Descreve os quadros externos pré-fabricados declarados na QPU, bem como as propriedades associadas aos quadros. Todos os quadros listados nessa estrutura são pré-declarados como identificadores válidos dentro do programa OpenQASM 3.0 enviado pelo usuário. As propriedades adicionais de uma moldura incluem:
-
ID do quadro (frameId)
-
O nome do quadro declarado como um identificador no OpenQASM 3.0.
-
-
ID da porta (portId)
-
A porta de hardware associada ao quadro.
-
-
Frequência (frequência)
-
A frequência inicial padrão do quadro.
-
-
Frequência central (centerFrequency)
-
O centro da largura de banda de frequência do quadro. Normalmente, os quadros só podem ser ajustados para uma determinada largura de banda em torno da frequência central. Como resultado, os ajustes de frequência devem permanecer dentro de um determinado delta da frequência central. Você pode encontrar o valor da largura de banda nos parâmetros de validação.
-
-
Fase (fase)
-
A fase inicial padrão do quadro.
-
-
Porta associada (associatedGate)
-
As portas associadas ao quadro fornecido.
-
-
Mapeamentos de Qubit (mapeamentos de qubit)
-
Os qubits associados ao frame fornecido.
-
-
Propriedades específicas do QHP () qhpSpecificProperties
-
Um mapa opcional detalhando as propriedades existentes sobre o quadro específico do QHP.
-
SupportsDynamicFrames:
Descreve se um quadro pode ser declarado em blocos cal ou defcal por meio da função OpenPulse newframe. Se isso for falso, somente os quadros listados na estrutura do quadro poderão ser usados no programa.
SupportedFunctions:
Descreve as funções OpenPulse que são compatíveis pelo dispositivo, além dos argumentos, tipos de argumentos e tipos de retorno associados às funções fornecidas. Para ver exemplos de uso das OpenPulse funções, consulte a OpenPulseespecificação
-
shift_phase
-
Desloca a fase de um quadro por um valor especificado
-
-
set_phase
-
Define a fase do quadro para o valor especificado
-
-
fases_troca
-
Troca as fases entre dois quadros.
-
-
frequência_de-turno
-
Desloca a frequência de um quadro por um valor especificado
-
-
frequência_definida
-
Define a frequência do quadro para o valor especificado
-
-
jogar
-
Agenda uma forma de onda
-
-
capture_v0
-
Retorna o valor em um quadro de captura para um registro de bits
-
SupportedQhpTemplateWaveforms:
Descreve as funções de forma de onda pré-criadas disponíveis no dispositivo e os argumentos e tipos associados. Por padrão, o Braket Pulse oferece rotinas de forma de onda pré-criadas em todos os dispositivos, que são:
Constante
τ é o comprimento da forma de onda e iq é um número complexo.
def constant(length, iq)
Gaussiano
τ é o comprimento da forma de onda, σ é a largura da gaussiana e A é a amplitude. Se definido ZaE como True, o gaussiano é deslocado e redimensionado de forma que seja igual a zero no início e no final da forma de onda e atinja o máximo A.
def gaussian(length, sigma, amplitude=1, zero_at_edges=False)
DRAG Gaussiano
τ é o comprimento da forma de onda, σ é a largura gaussiana, β é um parâmetro livre e A é a amplitude. Se definido ZaE como True, o Gaussiano de Remoção de Derivativa por Porta Adiabática (DRAG) é deslocado e reescalado de forma que seja igual a zero no início e no fim da forma de onda, e a parte real atinge o máximo A. Para obter mais informações sobre a forma de onda DRAG, consulte o artigo Pulsos simples para eliminação de vazamento em qubits fracamente não lineares
def drag_gaussian(length, sigma, beta, amplitude=1, zero_at_edges=False)
Quadrado Erf
Onde L é o comprimento, W é a largura da forma de onda, σ define a rapidez com que as bordas sobem e descem, t1=(L−W)/2 e t22=(L+W)/2, A é a amplitude. Se definido ZaE como True, o gaussiano é deslocado e redimensionado de forma que seja igual a zero no início e no final da forma de onda e atinja o máximo A. A equação a seguir é a versão redimensionada da forma de onda.
Onde a=erf(W/2σ) e b=erf(-t1/σ)/2+erf(t2/σ)/2.
def erf_square(length, width, sigma, amplitude=1, zero_at_edges=False)
SupportsLocalPulseElements:
Descreve se elementos de pulso, como portas, estruturas e formas de onda, podem ser definidos localmente em blocos defcal. Se o valor for false, os elementos devem ser definidos em blocos cal.
SupportsNonNativeGatesWithPulses:
Descreve se podemos ou não usar portas não nativas em combinação com programas de pulso. Por exemplo, você não pode usar uma porta não nativa como uma porta H em um programa sem primeiro definir a porta de entrada defcal para o qubit usado. Você pode encontrar a lista de chaves nativeGateSet de portas nativas nos recursos do dispositivo.
ValidationParameters:
Descreve os limites de validação do elemento de pulso, incluindo:
-
Valores de escala máxima/amplitude máxima para formas de onda (arbitrárias e pré-construídas)
-
Largura de banda de frequência máxima da frequência central fornecida em Hz
-
Pulso mínimo length/duration em segundos
-
Pulso máximo length/duration em segundos
Operações, resultados e tipos de resultados suportados com o OpenQASM
Para descobrir quais recursos do OpenQASM 3.0 cada dispositivo suporta, você pode consultar a chave braket.ir.openqasm.program no campo action na saída de recursos do dispositivo. Por exemplo, a seguir estão as operações compatíveis e os tipos de resultados disponíveis para o simulador SV1 Braket State Vector.
... "action": { "braket.ir.jaqcd.program": { ... }, "braket.ir.openqasm.program": { "version": [ "1.0" ], "actionType": "braket.ir.openqasm.program", "supportedOperations": [ "ccnot", "cnot", "cphaseshift", "cphaseshift00", "cphaseshift01", "cphaseshift10", "cswap", "cy", "cz", "h", "i", "iswap", "pswap", "phaseshift", "rx", "ry", "rz", "s", "si", "swap", "t", "ti", "v", "vi", "x", "xx", "xy", "y", "yy", "z", "zz" ], "supportedPragmas": [ "braket_unitary_matrix" ], "forbiddenPragmas": [], "maximumQubitArrays": 1, "maximumClassicalArrays": 1, "forbiddenArrayOperations": [ "concatenation", "negativeIndex", "range", "rangeWithStep", "slicing", "selection" ], "requiresAllQubitsMeasurement": true, "supportsPhysicalQubits": false, "requiresContiguousQubitIndices": true, "disabledQubitRewiringSupported": false, "supportedResultTypes": [ { "name": "Sample", "observables": [ "x", "y", "z", "h", "i", "hermitian" ], "minShots": 1, "maxShots": 100000 }, { "name": "Expectation", "observables": [ "x", "y", "z", "h", "i", "hermitian" ], "minShots": 0, "maxShots": 100000 }, { "name": "Variance", "observables": [ "x", "y", "z", "h", "i", "hermitian" ], "minShots": 0, "maxShots": 100000 }, { "name": "Probability", "minShots": 1, "maxShots": 100000 }, { "name": "Amplitude", "minShots": 0, "maxShots": 0 } { "name": "AdjointGradient", "minShots": 0, "maxShots": 0 } ] } }, ...