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 .ll o .bc (segons l’extensió).

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

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

required_num_qubits / _num_results

IR LLVM textual (.ll)

Bitcode LLVM (.bc)

Portes QIS d’un sol qubit

1

Portes QIS de dos qubits

1

Portes QIS adjuntes (s_adj / t_adj)

Rotacions parametritzades

🟡

2

Mesura (mz)

🟡

3

Agrupació de mesures multi-qubit

🟡

4

barrier / reset

ccx i altres intrínsecs de tres qubits

5

Perfil Adaptatiu / control clàssic

Bifurcació en resultats de mesura

Crides de gravació de sortida (rt__*)

Gestió dinàmica de qubits / resultats

U1 / U2 / U3

5

Controlled / Exponential arbitrari

5

  1. Consulteu la taula «Portes suportades» a continuació per al mapeig exacte d’intrínsecs.

  2. 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 Parameter a números concrets abans de cridar to_qir().

  3. Només s’emet mz; la mesura a mig circuit seguida de control clàssic no està suportada (i està prohibida pel Perfil Base).

  4. Un M multi-qubit es serialitza com una crida mz per qubit destí. En reanàlisi torna com un M per qubit mesurat — el conjunt de qubits es conserva, però no l’agrupació.

  5. Aquests han de descompondre’s en primitius suportats abans d’exportar; altrament, to_qir() llança NotImplementedError.

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

I

(sense operació, no s’emet res)

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 crida __quantum__qis__mz__body per qubit destí

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 M multi-qubit es serialitza com una crida mz per destí; en analitzar, torna com un M per 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 Parameter a números concrets abans de cridar to_qir().