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.
¿Qué funciones de OpenQASM admite Braket?
En la siguiente sección se enumeran los tipos de datos, las declaraciones y las instrucciones pragmáticas de OpenQASM 3.0 compatibles con Braket.
En esta sección:
Tipos de datos OpenQASM compatibles
Amazon Braket admite los siguientes tipos de datos de OpenQASM.
-
Los números enteros no negativos se utilizan para los índices de qubits (virtuales y físicos):
-
cnot q[0], q[1];
-
h $0;
-
-
Se pueden usar números o constantes de punto flotante para los ángulos de rotación de las compuertas:
-
rx(-0.314) $0;
-
rx(pi/4) $0;
-
nota
pi es una constante integrada en OpenQASM y no se puede utilizar como nombre de parámetro.
-
Se admiten matrices de números complejos (con la
im
notación OpenQASM para la parte imaginaria) en los pragmas de tipo resultado para definir observables hermitianos generales y en los pragmas unitarios:-
#pragma braket unitary [[0, -1im], [1im, 0]] q[0]
-
#pragma braket result expectation hermitian([[0, -1im], [1im, 0]]) q[0]
-
Declaraciones OpenQASM compatibles
Amazon Braket admite las siguientes declaraciones de OpenQASM.
-
Header: OPENQASM 3;
-
Declaraciones de bits clásicas:
-
bit b1;
(equivalentemente,creg b1;
) -
bit[10] b2;
(equivalentemente,)creg b2[10];
-
-
Declaraciones de Qubit:
-
qubit b1;
(equivalentemente,)qreg b1;
-
qubit[10] b2;
(equivalentemente,)qreg b2[10];
-
-
Indexación dentro de matrices:
q[0]
-
Entrada:
input float alpha;
-
especificación física qubits:
$0
-
Puertas y operaciones compatibles en un dispositivo:
-
h $0;
-
iswap q[0], q[1];
-
nota
Las compuertas compatibles con un dispositivo se encuentran en las propiedades del dispositivo para las acciones de OpenQASM; no se necesitan definiciones de compuertas para utilizarlas.
-
Declaraciones textuales en recuadros literales. Actualmente, no admitimos la notación de duración de las casillas. Puertas nativas y físicas qubits se requieren en las cajas textuales.
#pragma braket verbatim box{ rx(0.314) $0; }
-
Medición y asignación de medidas en qubits o un todo qubit registrarse.
-
measure $0;
-
measure q;
-
measure q[0];
-
b = measure q;
-
measure q → b;
-
nota
pi es una constante integrada en OpenQASM y no se puede utilizar como nombre de parámetro.
Braket: pragmas de OpenQASM
Amazon Braket admite las siguientes instrucciones pragmáticas de OpenQASM.
-
Pragmas sobre el ruido
-
#pragma braket noise bit_flip(0.2) q[0]
-
#pragma braket noise phase_flip(0.1) q[0]
-
#pragma braket noise pauli_channel
-
-
Pragmas literales
-
#pragma braket verbatim
-
-
Pragmas del tipo de resultado
-
Tipos de resultados invariantes básicos:
-
Vector de estado:
#pragma braket result state_vector
-
Matriz de densidad:
#pragma braket result density_matrix
-
-
Pragmas de cálculo de gradientes:
-
Gradiente adjunto:
#pragma braket result adjoint_gradient expectation(2.2 * x[0] @ x[1]) all
-
-
Tipos de resultados de base Z:
-
Amplitud:
#pragma braket result amplitude "01"
-
Probabilidad:
#pragma braket result probability q[0], q[1]
-
-
Tipos de resultados basados en rotación
-
Expectativa:
#pragma braket result expectation x(q[0]) @ y([q1])
-
Varianza:
#pragma braket result variance hermitian([[0, -1im], [1im, 0]]) $0
-
Muestra:
#pragma braket result sample h($1)
-
-
nota
OpenQASM 3.0 es retrocompatible con OpenQASM 2.0, por lo que los programas escritos con 2.0 pueden ejecutarse en Braket. Sin embargo, las funciones de OpenQASM 3.0 compatibles con Braket presentan algunas pequeñas diferencias de sintaxis, como vs y vs. qreg
creg
qubit
bit
También hay diferencias en la sintaxis de medición, y es necesario admitirlas con su sintaxis correcta.
Compatibilidad con funciones avanzadas para OpenQASM en el simulador local
LocalSimulator
Es compatible con funciones avanzadas de OpenQASM que no se ofrecen como parte de las QPU de Braket ni de los simuladores bajo demanda. La siguiente lista de funciones solo es compatible con: LocalSimulator
-
Modificadores de puerta
-
Puertas integradas OpenQASM
-
Variables clásicas
-
Operaciones clásicas
-
Puertas personalizadas
-
Control clásico
-
Ficheros QASM
-
Subrutinas
Para ver ejemplos de cada función avanzada, consulta este ejemplo de bloc de notas
Se admiten operaciones y gramática con OpenPulse
Tipos OpenPulse de datos compatibles
Bloques de llamadas:
cal { ... }
Bloques adhesivos:
// 1 qubit defcal x $0 { ... } // 1 qubit w. input parameters as constants defcal my_rx(pi) $0 { ... } // 1 qubit w. input parameters as free parameters defcal my_rz(angle theta) $0 { ... } // 2 qubit (above gate args are also valid) defcal cz $1, $0 { ... }
Marcos:
frame my_frame = newframe(port_0, 4.5e9, 0.0);
Formas de onda:
// prebuilt waveform my_waveform_1 = constant(1e-6, 1.0); //arbitrary waveform my_waveform_2 = {0.1 + 0.1im, 0.1 + 0.1im, 0.1, 0.1};
Ejemplo de calibración de compuerta personalizada:
cal { waveform wf1 = constant(1e-6, 0.25); } defcal my_x $0 { play(wf1, q0_rf_frame); } defcal my_cz $1, $0 { barrier q0_q1_cz_frame, q0_rf_frame; play(q0_q1_cz_frame, wf1); delay[300ns] q0_rf_frame shift_phase(q0_rf_frame, 4.366186381749424); delay[300ns] q0_rf_frame; shift_phase(q0_rf_frame.phase, 5.916747563126659); barrier q0_q1_cz_frame, q0_rf_frame; shift_phase(q0_q1_cz_frame, 2.183093190874712); } bit[2] ro; my_x $0; my_cz $1,$0; c[0] = measure $0;
Ejemplo de pulso arbitrario:
bit[2] ro; cal { waveform wf1 = {0.1 + 0.1im, 0.1 + 0.1im, 0.1, 0.1}; barrier q0_drive, q0_q1_cross_resonance; play(q0_q1_cross_resonance, wf1); delay[300ns] q0_drive; shift_phase(q0_drive, 4.366186381749424); delay[300dt] q0_drive; barrier q0_drive, q0_q1_cross_resonance; play(q0_q1_cross_resonance, wf1); ro[0] = capture_v0(r0_measure); ro[1] = capture_v0(r1_measure); }