Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Compatibilidad con OpenQASM en diferentes dispositivos de Braket
En el caso de los dispositivos compatibles con OpenQASM 3.0, el campo action admite una nueva acción a través de la respuesta GetDevice, como se muestra en el siguiente ejemplo para los dispositivos Rigetti y 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" ], …. } } }
En el caso de los dispositivos que admiten el control de pulsos, el campo pulse se muestra en la respuesta GetDevice. En el siguiente ejemplo, se muestra este campo pulse para el 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 } } }
Los campos anteriores detallan lo siguiente:
Puertos:
Describe los puertos de dispositivos externos (extern) previamente creados y declarados en la QPU, además de las propiedades asociadas al puerto en cuestión. Todos los puertos enumerados en esta estructura se declaran previamente como identificadores válidos en el programa OpenQASM 3.0 enviado por el usuario. Las propiedades adicionales de un puerto incluyen:
-
ID de puerto (portId)
-
El nombre del puerto declarado como identificador en OpenQASM 3.0.
-
-
Dirección (direction)
-
La dirección del puerto. Los puertos de accionamiento transmiten impulsos (dirección «tx»), mientras que los puertos de medición reciben impulsos (dirección «rx»).
-
-
Tipo de puerto (portType)
-
El tipo de acción de la que es responsable este puerto (por ejemplo, accionar, capturar o ff - fast-flux).
-
-
Dt (dt)
-
El tiempo en segundos que representa un único intervalo de muestreo en el puerto determinado.
-
-
Asignaciones de qubits (qubitMappings)
-
Los qubits asociados al puerto determinado.
-
-
Frecuencias centrales (centerFrequencies)
-
Una lista de las frecuencias centrales asociadas para todos los marcos predeclarados o definidos por el usuario en el puerto. Para obtener más información, consulte «Marcos».
-
-
Propiedades específicas de QHP () qhpSpecificProperties
-
Un mapa opcional que detalla las propiedades existentes sobre el puerto específico del QHP.
-
Marcos:
Describe los marcos externos previamente creados y declarados en la QPU, además de las propiedades asociadas a los marcos. Todos los marcos enumerados en esta estructura se declaran previamente como identificadores válidos en el programa OpenQASM 3.0 enviado por el usuario. Las propiedades adicionales de un marco incluyen:
-
ID de marco (frameId)
-
El nombre del marco declarado como identificador en OpenQASM 3.0.
-
-
ID de puerto (portId)
-
El puerto de hardware asociado para el marco.
-
-
Frecuencia (frequency)
-
La frecuencia inicial predeterminada del marco.
-
-
Frecuencia central (centerFrequency)
-
El centro del ancho de banda de frecuencia del marco. Por lo general, los marcos solo se pueden ajustar a un determinado ancho de banda en torno a la frecuencia central. Como resultado, los ajustes de frecuencia deben mantenerse dentro de un delta determinado de la frecuencia central. Encontrará el valor del ancho de banda en los parámetros de validación.
-
-
Fase (phase)
-
La frecuencia inicial predeterminada del marco.
-
-
Puerta asociada (associatedGate)
-
Las puertas asociadas al marco determinado.
-
-
Asignaciones de qubits (qubitMappings)
-
Los qubits asociados al marco determinado.
-
-
Propiedades específicas de QHP () qhpSpecificProperties
-
Un mapa opcional que detalla las propiedades existentes sobre el marco específico del QHP.
-
SupportsDynamicFrames:
Describe si un marco puede declararse en los bloques de cal o defcal a través de la función newframe de OpenPulse. En caso negativo, solo se podrán utilizar en el programa los marcos que figuran en la estructura de marcos.
SupportedFunctions:
Describe las funciones de OpenPulse que son compatibles con el dispositivo, además de los argumentos asociados, los tipos de argumentos y los tipos de retorno para las funciones determinadas. Para ver ejemplos del uso de las OpenPulse funciones, consulte la OpenPulseespecificación
-
shift_phase
-
Cambia la fase de un marco por un valor especificado.
-
-
set_phase
-
Establece la fase del marco en el valor especificado.
-
-
swap_phases
-
Intercambia las fases entre dos marcos.
-
-
shift_frequency
-
Cambia la frecuencia de un marco por un valor especificado.
-
-
set_frequency
-
Establece la frecuencia del marco en el valor especificado.
-
-
jugar
-
Programa una forma de onda.
-
-
capture_v0
-
Devuelve el valor de un marco de captura a un registro de bits.
-
SupportedQhpTemplateWaveforms:
Describe las funciones de forma de onda predefinidas disponibles en el dispositivo y los argumentos y tipos asociados. De forma predeterminada, Braket Pulse ofrece rutinas de forma de onda prediseñadas en todos los dispositivos, que son:
Constant
τ es la longitud de la forma de onda e iq es un número complejo.
def constant(length, iq)
Gaussian
τ es la longitud de la onda, σ es la anchura del gaussiano y A es la amplitud. Si se establece ZaE enTrue, el gaussiano se desplaza y se reescala de manera que sea igual a cero al principio y al final de la forma de onda y alcance A en su máximo.
def gaussian(length, sigma, amplitude=1, zero_at_edges=False)
DRAG Gaussian
τ es la longitud de la onda, σ es la anchura del gaussiano, β es un parámetro libre y A es la amplitud. Si ZaE se establece en True, La gaussiana de eliminación de derivadas mediante puerta adiabática (DRAG) se compensa y se reescala de modo que sea igual a cero al inicio y al final de la forma de onda, y la parte real alcance A en su máximo. Para obtener más información sobre la forma de onda DRAG, consulte el artículo Impulsos simples para la eliminación de fugas en qubits débilmente no lineales
def drag_gaussian(length, sigma, beta, amplitude=1, zero_at_edges=False)
Erf Square
Dónde L es la longitud, W es la anchura de la forma de onda, σ define la rapidez con la que suben y bajan los bordes, t1=(L−W)/2 y t22=(L+W)/2, y A es la amplitud. Si se establece ZaE enTrue, el gaussiano se desplaza y se reescala de manera que sea igual a cero al principio y al final de la forma de onda y alcance A en su máximo. La siguiente ecuación es la versión reescalada de la forma de onda.
Donde a=erf(W/2σ) y b=erf(-t1/σ)/2+erf(t2/σ)/2.
def erf_square(length, width, sigma, amplitude=1, zero_at_edges=False)
SupportsLocalPulseElements:
Describe si los elementos de pulso, como puertos, marcos y formas de onda, se pueden definir localmente en bloques de defcal. Si el valor es false, los elementos se deben definir en bloques de cal.
SupportsNonNativeGatesWithPulses:
Describe si podemos o no usar puertas no nativas en combinación con programas de pulsos. Por ejemplo, no puede usar una puerta no nativa como una puerta H en un programa sin definir primero la puerta a través de defcal para el qubit utilizado. Puede encontrar la lista de claves nativeGateSet de puertas nativas en las capacidades del dispositivo.
ValidationParameters:
Describe los límites de validación de los elementos de pulso, que incluyen:
-
Valores máximos de escala/amplitud para formas de onda (arbitrarias y prediseñadas)
-
Ancho de banda de frecuencia máxima a partir de la frecuencia central suministrada en Hz
-
Pulso mínimo length/duration en segundos
-
Pulso máximo length/duration en segundos
Operaciones, resultados y tipos de resultados compatibles con OpenQASM
Para saber qué característica de OpenQASM 3.0 admite cada dispositivo, consulte la clave braket.ir.openqasm.program que aparece en el campo action de la salida de capacidades del dispositivo. Por ejemplo, a continuación se muestran las operaciones y los tipos de resultados compatibles disponibles para el simulador de vector de estado de Braket SV1.
... "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 } ] } }, ...