Importación y Exportación QIR
QiliSDK puede conectar Circuit con el Perfil Base QIR a través de la biblioteca pyqir de Microsoft. Cuatro puntos de entrada se encuentran en qilisdk.utils.qir:
from_qir()— analiza una cadena LLVM IR textual QIR en un Circuit.from_qir_file()— lee un archivo.llo.bc(según la extensión).to_qir()— serializa un Circuit a IR textual QIR.to_qir_file()— escribe un archivo.llo.bc(según la extensión).
La dependencia pyqir es opcional; instálela con el extra qir:
pip install qilisdk[qir]
Inicio rápido
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 y escritura de archivos se despacha según la extensión — .ll se trata como IR LLVM textual, .bc como 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")
Características soportadas
QiliSDK apunta al Perfil Base QIR — un subconjunto plano y estáticamente asignado de QIR sin flujo de control clásico. La tabla siguiente mapea las características QIR con su estado de soporte en QiliSDK:
✅: 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 QIR |
Característica QiliSDK |
Soportado |
Notas |
|---|---|---|---|
Estructura del módulo del Perfil Base |
– |
✅ |
|
Función de punto de entrada |
– |
✅ |
|
Asignación estática de qubits |
– |
✅ |
|
Asignación estática de resultados |
– |
✅ |
|
|
– |
✅ |
|
IR LLVM textual ( |
– |
✅ |
|
Bitcode LLVM ( |
– |
✅ |
|
Puertas QIS de un solo qubit |
– |
✅ |
1 |
Puertas QIS de dos qubits |
– |
✅ |
1 |
Puertas QIS adjuntas ( |
– |
✅ |
|
Rotaciones parametrizadas |
– |
🟡 |
2 |
Medición ( |
– |
🟡 |
3 |
Agrupación de mediciones multi-qubit |
– |
🟡 |
4 |
|
– |
❌ |
|
|
– |
❌ |
5 |
Perfil Adaptativo / control clásico |
– |
❌ |
|
Bifurcación en resultados de medición |
– |
❌ |
|
Llamadas de grabación de salida ( |
– |
❌ |
|
Gestión dinámica de qubits / resultados |
– |
❌ |
|
– |
|
❌ |
5 |
– |
|
❌ |
5 |
Consulte la tabla «Puertas soportadas» a continuación para el mapeo exacto de intrínsecos.
Los ángulos de rotación se exportan como sus valores numéricos actualmente resueltos. El Perfil Base no admite parámetros simbólicos, por lo que vincule cualquier valor de
Parametera números concretos antes de llamar ato_qir().Solo se emite
mz; la medición a mitad de circuito seguida de control clásico no está soportada (y está prohibida por el Perfil Base).Un
Mmulti-qubit se serializa como una llamadamzpor qubit destino. Al reanalizarlo, vuelve como unMpor qubit medido — el conjunto de qubits se conserva, pero no la agrupación.Estos deben descomponerse en primitivos soportados antes de exportar; de lo contrario,
to_qir()lanzaNotImplementedError.
Puertas soportadas
El exportador mapea las siguientes puertas a los intrínsecos estándar __quantum__qis__*__body; todo lo demás lanza NotImplementedError para indicar la necesidad de descomposición.
Puerta QiliSDK |
Intrínseco QIR |
|---|---|
(sin operación, no se emite nada) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
una llamada |
Las puertas fuera de esta tabla (U1 / U2 / U3, unitarias de tres qubits, envoltorios arbitrarios de Controlled / Exponential) deben descomponerse en el conjunto soportado antes de exportar.
Notas sobre el perfil y el ciclo de ida y vuelta
Los módulos se emiten con una función de punto de entrada y registros de qubits y resultados asignados estáticamente (un registro de resultado por qubit), siguiendo el contrato del Perfil Base.
El ciclo de ida y vuelta preserva los tipos de puertas, los índices de qubits y los ángulos de rotación. Una instancia de
Mmulti-qubit se serializa como una llamadamzpor destino; al analizar, vuelve como unMpor qubit medido (es decir, el conjunto de qubits se conserva, pero no la agrupación).Las rotaciones parametrizadas se exportan con sus ángulos numéricos actualmente resueltos; el Perfil Base no admite parámetros simbólicos, por lo que vincule cualquier valor de
Parametera números concretos antes de llamar ato_qir().