Importació i Exportació QIR
QiliSDK pot connectar Circuit amb el Perfil Base QIR a través de la biblioteca pyqir de Microsoft. Quatre punts d’entrada es troben a qilisdk.utils.qir:
from_qir()— analitza una cadena LLVM IR textual QIR en un Circuit.from_qir_file()— llegeix un fitxer.llo.bc(segons l’extensió).to_qir()— serialitza un Circuit a IR textual QIR.to_qir_file()— escriu un fitxer.llo.bc(segons l’extensió).
La dependència pyqir és opcional; instal·leu-la amb l’extra qir:
pip install qilisdk[qir]
Inici ràpid
from qilisdk.digital import CNOT, Circuit, H, M
from qilisdk.utils.qir import to_qir, from_qir
circuit = Circuit(2)
circuit.add(H(0))
circuit.add(CNOT(0, 1))
circuit.add(M(0, 1))
qir_text = to_qir(circuit, name="bell")
print(qir_text)
reparsed = from_qir(qir_text)
La lectura i escriptura de fitxers es despacha segons l’extensió — .ll es tracta com a IR LLVM textual, .bc com a bitcode LLVM:
from qilisdk.utils.qir import to_qir_file, from_qir_file
to_qir_file(circuit, "bell.ll") # textual
to_qir_file(circuit, "bell.bc") # bitcode
same_circuit = from_qir_file("bell.bc")
Funcionalitats suportades
QiliSDK apunta al Perfil Base QIR — un subconjunt pla i estàticament assignat de QIR sense flux de control clàssic. La taula següent mapeja les característiques QIR amb el seu estat de suport a QiliSDK:
✅: 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 QIR |
Característica QiliSDK |
Suportat |
Notes |
|---|---|---|---|
Estructura del mòdul del Perfil Base |
– |
✅ |
|
Funció de punt d’entrada |
– |
✅ |
|
Assignació estàtica de qubits |
– |
✅ |
|
Assignació estàtica de resultats |
– |
✅ |
|
|
– |
✅ |
|
IR LLVM textual ( |
– |
✅ |
|
Bitcode LLVM ( |
– |
✅ |
|
Portes QIS d’un sol qubit |
– |
✅ |
1 |
Portes QIS de dos qubits |
– |
✅ |
1 |
Portes QIS adjuntes ( |
– |
✅ |
|
Rotacions parametritzades |
– |
🟡 |
2 |
Mesura ( |
– |
🟡 |
3 |
Agrupació de mesures multi-qubit |
– |
🟡 |
4 |
|
– |
❌ |
|
|
– |
❌ |
5 |
Perfil Adaptatiu / control clàssic |
– |
❌ |
|
Bifurcació en resultats de mesura |
– |
❌ |
|
Crides de gravació de sortida ( |
– |
❌ |
|
Gestió dinàmica de qubits / resultats |
– |
❌ |
|
– |
|
❌ |
5 |
– |
|
❌ |
5 |
Consulteu la taula «Portes suportades» a continuació per al mapeig exacte d’intrínsecs.
Els angles de rotació s’exporten com els seus valors numèrics actualment resolts. El Perfil Base no admet paràmetres simbòlics, per la qual cosa vinculeu qualsevol valor de
Parametera números concrets abans de cridarto_qir().Només s’emet
mz; la mesura a mig circuit seguida de control clàssic no està suportada (i està prohibida pel Perfil Base).Un
Mmulti-qubit es serialitza com una cridamzper qubit destí. En reanàlisi torna com unMper qubit mesurat — el conjunt de qubits es conserva, però no l’agrupació.Aquests han de descompondre’s en primitius suportats abans d’exportar; altrament,
to_qir()llançaNotImplementedError.
Portes suportades
L’exportador mapeja les portes següents als intrínsecs estàndard __quantum__qis__*__body; tot la resta llança NotImplementedError per indicar la necessitat de descomposició.
Porta QiliSDK |
Intrínsec QIR |
|---|---|
(sense operació, no s’emet res) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
una crida |
Les portes fora d’aquesta taula (U1 / U2 / U3, unitàries de tres qubits, embolcalls arbitraris de Controlled / Exponential) han de descompondre’s en el conjunt suportat abans d’exportar.
Notes sobre el perfil i el cicle d’anada i tornada
Els mòduls s’emeten amb una funció de punt d’entrada i registres de qubits i resultats assignats estàticament (un registre de resultat per qubit), seguint el contracte del Perfil Base.
El cicle d’anada i tornada preserva els tipus de portes, els índexs de qubits i els angles de rotació. Una instància de
Mmulti-qubit es serialitza com una cridamzper destí; en analitzar, torna com unMper qubit mesurat (és a dir, el conjunt de qubits es conserva, però no l’agrupació).Les rotacions parametritzades s’exporten amb els seus angles numèrics actualment resolts; el Perfil Base no admet paràmetres simbòlics, per la qual cosa vinculeu qualsevol valor de
Parametera números concrets abans de cridarto_qir().