Qiskit Fermions
qiskit-fermions amplía el SDK de Qiskit con herramientas para trabajar con sistemas fermiónicos. Dentro de su alcance ofrece lo siguiente:
-
Estructuras de datos eficientes para la representación y manipulación de operadores fermiónicos en distintas formas
-
Un marco para implementar métodos de conversión de operadores (incluidas codificaciones fermión a qubit)
-
Una biblioteca de implementaciones eficientes de métodos de conversión comunes
-
Un marco y una biblioteca de compuertas para expresar circuitos fermiónicos
-
Un flujo de transpilación integrado con el proceso del transpilador de Qiskit para sintetizar circuitos fermiónicos en circuitos basados en qubits
Además, qiskit-fermions se integra con otras herramientas del ecosistema, como:
- ffsim para los operadores ansatz de alto nivel y la simulación eficiente de circuitos fermiónicos (consulta Relación con ffsim)
Primeros pasos
La descripción esquemática de la imagen anterior ofrece una idea de la amplitud de funciones y del flujo de trabajo general que proporciona este paquete. Puedes trabajar en el régimen fermiónico tanto con la representación de operadores como con la de circuitos, antes de definir una codificación de fermión a qubit que se conecte al pipeline de transpilación multirrepresentación de Qiskit.
Todas estas funciones se explican en varias guías para ayudarte a empezar. Para una visión general que recorre exactamente el pipeline mostrado arriba, empieza con la guía de Fermi-Hubbard 1D.
Ejemplos de casos de uso
Se han utilizado componentes de este paquete en investigaciones relacionadas con los siguientes artículos:
-
La compilación aleatorizada de circuitos qDRIFT en [1].
-
La síntesis de fermión a qubit durante el proceso de transpilación en [2].
Discusión técnica
Intenciones de diseño
Este paquete está diseñado deliberadamente para alinearse con Qiskit: se basa en un núcleo implementado en Rust y ofrece enlaces de lenguaje de primera parte para Python y C. Su API pretende establecer paralelismos con Qiskit para integrarse sin fricciones en los flujos de trabajo de usuarios con experiencia en programación con Qiskit.
Un principio central en el diseño de qiskit-fermions fue el desacoplamiento de su representación de circuitos fermiónicos de su forma qubitizada. Para ser más precisos: los circuitos fermiónicos tienen significado por sí mismos y no requieren un mapeo al espacio de qubits para poder interpretarse. Además, la representación de circuitos fermiónicos no puede hacer ninguna suposición sobre la codificación de fermión a qubit que se aplique más adelante. En consecuencia, aunque Jordan-Wigner conserva una posición y un papel dominantes, no se asume que sea la codificación de fermión a qubit _predeterminada_.
Relación con ffsim
ffsim y qiskit-fermions se reparten el trabajo en lugar de solaparse. ffsim se encarga de los operadores ansatz de alto nivel y de su simulación rápida: construye un operador UCJ o UCCSD a partir de amplitudes de coupled-cluster o de un vector de parámetros, y simula estados fermiónicos en un espacio compacto de número de partículas fijo. qiskit-fermions se encarga del lado de los circuitos: expresa ese operador como un FermionicCircuit sobre modos fermiónicos y lo transpila a un circuito de qubits mediante cualquier codificación de fermión a qubit.
Ese último punto es la razón para traer aquí un operador de ffsim. Las puertas de Qiskit propias de ffsim son específicas de la transformación de Jordan-Wigner, de modo que reducir un ansatz mediante una codificación diferente (por ejemplo, una codificación local que intercambia qubits por circuitos menos profundos) es lo que aporta este paquete. A la inversa, este paquete no reimplementa la matemática del ansatz, por lo que UCJ y UCC toman directamente un operador de ffsim como entrada.
En el lado de la simulación, ffsim es el Backend. Las puertas y los operadores de este paquete implementan los métodos de protocolo que consumen las funciones de simulación de ffsim (_apply_unitary_, _linear_operator_ y _trace_; consulta qiskit_fermions.protocols), por lo que las herramientas de ffsim funcionan con ellos de forma nativa, sin ningún paso de conversión. Construir operadores, mapearlos y transpilar los circuitos resultantes no requiere ffsim en absoluto.
Para ver el panorama completo, lee la guía de la relación con ffsim.
Problemas conocidos
Mientras la API de C de Qiskit no haya alcanzado la paridad de funciones con su API de Python, algunos componentes de este paquete seguirán siendo exclusivos de su API de Python. Esto incluye toda la biblioteca de circuitos (qiskit_fermions.circuit), así como los pases del transpilador (qiskit_fermions.transpiler).
Trabajo futuro
-
Migrar la biblioteca de circuitos y los pases del transpilador al núcleo de Rust (y proporcionar una API de C para interactuar con ellos)
-
Ampliar la biblioteca de implementaciones eficientes de conversión de operadores
-
Ampliar la biblioteca de estructuras de datos eficientes para operadores
Contribuir
El código fuente está disponible en GitHub.
La guía para desarrolladores se encuentra en CONTRIBUTING.md, en la raíz del repositorio de este proyecto. Al participar, se espera que respetes el código de conducta de Qiskit.
Cómo citar este paquete
Si usas este paquete en tu investigación, utiliza el archivo CITATION.bib del repositorio de este proyecto para citar la(s) referencia(s) adecuada(s).
Licencia
Política de obsolescencia
Este paquete sigue el versionado semántico. Los cambios incompatibles se realizan solo ocasionalmente, para mejorar la experiencia de usuario. Cuando es posible, las interfaces antiguas se conservan y se marcan como obsoletas mientras puedan coexistir con las nuevas. Cada mejora sustancial, cambio incompatible u obsolescencia se documenta en las Notas de la versión.
Referencias
[1]
Samuele Piccinelli, et al., Quantum chemistry with provable convergence via randomized sample-based Krylov quantum diagonalization, arXiv:2508.02578 [quant-ph].
[2]
Anthony Gandon, et al., Stabilizer-based quantum simulation of fermion dynamics with local qubit encodings, arXiv:2512.11418 [quant-ph].