Importació i Exportació OpenQASM
QiliSDK pot connectar Circuit tant amb OpenQASM 2.0 com amb OpenQASM 3.0 a través dels punts d’entrada següents a qilisdk.utils.openqasm:
OpenQASM 2.0
from_qasm2()— analitza una cadena OpenQASM 2.0 en un Circuit.from_qasm2_file()— llegeix un fitxer.qasm.to_qasm2()— serialitza un Circuit a una cadena OpenQASM 2.0.to_qasm2_file()— escriu un fitxer.qasm.
OpenQASM 3.0
from_qasm3()— analitza una cadena OpenQASM 3.0 en un Circuit.from_qasm3_file()— llegeix un fitxer.qasm.to_qasm3()— serialitza un Circuit a una cadena OpenQASM 3.0.to_qasm3_file()— escriu un fitxer.qasm.
La dependència openqasm3 és opcional; instal·leu-la amb l’extra openqasm:
pip install qilisdk[openqasm]
Inici ràpid
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 i escriptura de fitxers:
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")
Funcionalitats suportades d’OpenQASM 3.0
✅: La funcionalitat és totalment suportada
🟡: La funcionalitat és parcialment suportada, vegeu la nota per a més explicació
❌: La funcionalitat no està suportada
Característica OpenQASM 3 |
Suportat |
Notes |
|---|---|---|
comentaris |
✅ |
|
Cadena de versió QASM |
✅ |
|
include |
✅ |
|
noms unicode |
✅ |
|
qubit |
✅ |
|
bit |
🟡 |
1 |
bool |
🟡 |
1 |
int |
🟡 |
1 |
uint |
🟡 |
1 |
float |
🟡 |
1 |
angle |
🟡 |
1 |
complex |
🟡 |
1 |
const |
✅ |
|
pi/π/tau/τ/euler/ℇ |
✅ |
|
Àlies: |
✅ |
|
concatenació de registres |
❌ |
|
conversió de tipus ( |
✅ |
|
duration |
🟡 |
1 |
durationof |
❌ |
|
ns/μs/us/ms/s/dt |
✅ |
|
stretch ( |
🟡 |
1 |
delay |
❌ |
|
barrier |
❌ |
|
box |
❌ |
|
|
✅ |
|
definició de porta |
🟡 |
1 |
gphase |
❌ |
|
|
✅ |
|
|
🟡 |
1 |
|
✅ |
|
|
🟡 |
1, 2 |
reset |
❌ |
|
measure |
🟡 |
3 |
operacions de bits |
🟡 |
1 |
operacions booleanes |
🟡 |
1 |
expressions aritmètiques |
🟡 |
1 |
comparacions |
🟡 |
1 |
|
🟡 |
1 |
|
🟡 |
1 |
|
🟡 |
1 |
bucles for |
🟡 |
1 |
switch |
🟡 |
1 |
bucles while |
🟡 |
1 |
|
🟡 |
1 |
|
🟡 |
1 |
extern |
❌ |
|
subrutines def |
🟡 |
1 |
return |
🟡 |
1 |
input |
🟡 |
1 |
output |
❌ |
La lectura d’aquestes construccions és totalment suportada, però les expressions no s’emmagatzemen a l’objecte
Circuiti no s’escriuran en convertir a OpenQASM. Per exemple, declararint x = 5;fa quexsigui avaluada i usada durant l’anàlisi, però la declaració de variable no apareixerà a l’objecte de circuit resultant ni en cap cadena QASM reexportada.pow(k) @només està suportat quankés un enter; s’implementa mitjançant aplicació repetida de la porta.Les mesures a mig circuit no estan suportades a QiliSDK.