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 .ll o .bc (según la extensión).

  • to_qir() — serializa un Circuit a IR textual QIR.

  • to_qir_file() — escribe un archivo .ll o .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

required_num_qubits / _num_results

IR LLVM textual (.ll)

Bitcode LLVM (.bc)

Puertas QIS de un solo qubit

1

Puertas QIS de dos qubits

1

Puertas QIS adjuntas (s_adj / t_adj)

Rotaciones parametrizadas

🟡

2

Medición (mz)

🟡

3

Agrupación de mediciones multi-qubit

🟡

4

barrier / reset

ccx y otros intrínsecos de tres qubits

5

Perfil Adaptativo / control clásico

Bifurcación en resultados de medición

Llamadas de grabación de salida (rt__*)

Gestión dinámica de qubits / resultados

U1 / U2 / U3

5

Controlled / Exponential arbitrario

5

  1. Consulte la tabla «Puertas soportadas» a continuación para el mapeo exacto de intrínsecos.

  2. 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 Parameter a números concretos antes de llamar a to_qir().

  3. 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).

  4. Un M multi-qubit se serializa como una llamada mz por qubit destino. Al reanalizarlo, vuelve como un M por qubit medido — el conjunto de qubits se conserva, pero no la agrupación.

  5. Estos deben descomponerse en primitivos soportados antes de exportar; de lo contrario, to_qir() lanza NotImplementedError.

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

I

(sin operación, no se emite nada)

X /

Y /

Z

__quantum__qis__x/y/z__body

H

__quantum__qis__h__body

S /

T

__quantum__qis__s/t__body

Adjoint(S) / Adjoint(T)

__quantum__qis__s/t__adj

RX /

RY /

RZ

__quantum__qis__rx/ry/rz__body

CNOT

__quantum__qis__cnot__body

CZ

__quantum__qis__cz__body

SWAP

__quantum__qis__swap__body

M

una llamada __quantum__qis__mz__body por qubit destino

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 M multi-qubit se serializa como una llamada mz por destino; al analizar, vuelve como un M por 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 Parameter a números concretos antes de llamar a to_qir().