Importación y Exportación OpenQASM

QiliSDK puede conectar Circuit tanto con OpenQASM 2.0 como con OpenQASM 3.0 a través de los siguientes puntos de entrada en qilisdk.utils.openqasm:

OpenQASM 2.0

OpenQASM 3.0

La dependencia openqasm3 es opcional; instálela con el extra openqasm:

pip install qilisdk[openqasm]

Inicio rápido

from qilisdk.digital import CNOT, Circuit, H, M
from qilisdk.utils.openqasm import to_qasm2, from_qasm2, to_qasm3, from_qasm3

circuit = Circuit(2)
circuit.add(H(0))
circuit.add(CNOT(0, 1))
circuit.add(M(0, 1))

# OpenQASM 2.0
qasm2_text = to_qasm2(circuit)
print(qasm2_text)
reparsed = from_qasm2(qasm2_text)

# OpenQASM 3.0
qasm3_text = to_qasm3(circuit)
print(qasm3_text)
reparsed = from_qasm3(qasm3_text)

Lectura y escritura de archivos:

from qilisdk.utils.openqasm import to_qasm2_file, from_qasm2_file
from qilisdk.utils.openqasm import to_qasm3_file, from_qasm3_file

to_qasm2_file(circuit, "bell.qasm")
same_circuit = from_qasm2_file("bell.qasm")

to_qasm3_file(circuit, "bell3.qasm")
same_circuit = from_qasm3_file("bell3.qasm")

Características soportadas de OpenQASM 3.0

  • ✅: La característica está totalmente soportada

  • 🟡: La característica está parcialmente soportada, vea la nota para más explicación

  • ❌: La característica no está soportada

Característica OpenQASM 3

Soportado

Notas

comentarios

Cadena de versión QASM

include

nombres unicode

qubit

bit

🟡

1

bool

🟡

1

int

🟡

1

uint

🟡

1

float

🟡

1

angle

🟡

1

complex

🟡

1

const

pi/π/tau/τ/euler/ℇ

Alias: let

concatenación de registros

conversión de tipo (expr.Cast)

duration

🟡

1

durationof

ns/μs/us/ms/s/dt

stretch (expr.Stretch)

🟡

1

delay

barrier

box

U integrada

definición de puerta

🟡

1

gphase

ctrl @

negctrl @

🟡

1

inv @

pow(k) @

🟡

1, 2

reset

measure

🟡

3

operaciones de bits

🟡

1

operaciones booleanas

🟡

1

expresiones aritméticas

🟡

1

comparaciones

🟡

1

if

🟡

1

else

🟡

1

else if

🟡

1

bucles for

🟡

1

switch

🟡

1

bucles while

🟡

1

continue

🟡

1

break

🟡

1

extern

subrutinas def

🟡

1

return

🟡

1

input

🟡

1

output

  1. La lectura de estas construcciones está totalmente soportada, pero las expresiones no se almacenan en el objeto Circuit y no se escribirán al convertir a OpenQASM. Por ejemplo, declarar int x = 5; hace que x sea evaluada y usada durante el análisis, pero la declaración de variable no aparecerá en el objeto de circuito resultante ni en ninguna cadena QASM reexportada.

  2. pow(k) @ solo está soportado cuando k es un entero; se implementa mediante aplicación repetida de la puerta.

  3. Las mediciones a mitad de circuito no están soportadas en QiliSDK.