Qiskit Fermions
qiskit-fermions étend le SDK Qiskit avec des outils pour travailler sur des systèmes fermioniques. Dans son périmètre, il fournit les éléments suivants :
-
Des structures de données efficaces pour la représentation et la manipulation d'opérateurs fermioniques sous différentes formes
-
Un framework pour implémenter des méthodes de conversion d'opérateurs (y compris des encodages fermion-vers-qubit)
-
Une bibliothèque d'implémentations efficaces de méthodes de conversion courantes
-
Un framework et une bibliothèque de portes pour exprimer des circuits fermioniques
-
Un pipeline de transpilation intégré au processus de transpileur de Qiskit pour synthétiser des circuits fermioniques en circuits à base de qubits
De plus, qiskit-fermions s'intègre à d'autres outils de l'écosystème, tels que :
- ffsim pour les opérateurs d'ansatz de haut niveau et la simulation efficace de circuits fermioniques (voir Relation avec ffsim)
Premiers pas
La description schématique de l'image ci-dessus donne un aperçu de l'étendue des fonctionnalités et du flux de travail général que fournit ce package. Tu peux travailler dans le régime fermionique avec les deux représentations, opérateur et circuit, avant de définir un encodage fermion-vers-qubit qui se branche sur le pipeline de transpileur multi-représentation de Qiskit.
Toutes ces fonctionnalités sont expliquées dans plusieurs guides pour t'aider à démarrer. Pour une vue d'ensemble qui parcourt exactement le pipeline présenté ci-dessus, commence par le guide du modèle de Fermi-Hubbard 1D.
Exemples de cas d'usage
Des composants de ce package ont été utilisés dans des travaux de recherche liés aux articles suivants :
-
La compilation de circuits aléatoire qDRIFT dans [1].
-
La synthèse fermion-vers-qubit pendant le processus de transpilation dans [2].
Discussion technique
Intentions de conception
Ce package est délibérément conçu pour s'aligner sur Qiskit : il repose sur un cœur implémenté en Rust et fournit des liaisons de langage officielles pour Python et C. Son API cherche à établir des parallèles avec Qiskit afin de s'intégrer de façon fluide aux flux de travail des utilisateurs ayant l'expérience de la programmation avec Qiskit.
Un principe central de la conception de qiskit-fermions a été de découpler la représentation de ses circuits fermioniques de leur forme en qubits. Pour être plus précis : les circuits fermioniques ont un sens en eux-mêmes et ne nécessitent pas de correspondance vers l'espace des qubits pour être interprétables. De plus, la représentation des circuits fermioniques ne peut faire aucune hypothèse sur l'encodage fermion-vers-qubit appliqué ultérieurement. Par conséquent, bien que Jordan-Wigner conserve une position et un rôle dominants, il n'est pas supposé être l'encodage fermion-vers-qubit _par défaut_.
Relation avec ffsim
ffsim et qiskit-fermions se répartissent le travail plutôt que de se chevaucher. ffsim gère les opérateurs d'ansatz de haut niveau et leur simulation rapide : il construit un opérateur UCJ ou UCCSD à partir d'amplitudes coupled-cluster ou d'un vecteur de paramètres, et simule des états fermioniques dans un espace compact à nombre de particules fixe. qiskit-fermions gère le côté circuit : il exprime cet opérateur sous forme de FermionicCircuit sur des modes fermioniques et le transpile en circuit de qubits via n'importe quel encodage fermion-vers-qubit.
Ce dernier point est la raison d'amener ici un opérateur ffsim. Les portes Qiskit propres à ffsim sont spécifiques à la transformation de Jordan-Wigner ; abaisser un ansatz via un autre encodage (par exemple un encodage local qui échange des qubits contre des circuits moins profonds) est donc ce qu'apporte ce package. Inversement, ce package ne réimplémente pas les mathématiques de l'ansatz, de sorte que UCJ et UCC prennent directement un opérateur ffsim en entrée.
Côté simulation, ffsim est le backend. Les portes et opérateurs de ce package implémentent les méthodes de protocole que consomment les fonctions de simulation de ffsim (_apply_unitary_, _linear_operator_ et _trace_ ; voir qiskit_fermions.protocols), de sorte que les outils de ffsim fonctionnent dessus nativement, sans étape de conversion. Construire des opérateurs, les mapper et transpiler les circuits obtenus ne nécessitent pas du tout ffsim.
Pour la vue d'ensemble, lis le guide de la relation avec ffsim.
Problèmes connus
Tant que l'API C de Qiskit n'a pas atteint la parité de fonctionnalités avec son API Python, certains composants de ce package restent également exclusifs à son API Python. Cela inclut toute la bibliothèque de circuits (qiskit_fermions.circuit) ainsi que les passes de transpileur (qiskit_fermions.transpiler).
Travaux futurs
-
Migrer la bibliothèque de circuits et les passes de transpileur dans le cœur Rust (et fournir une API C pour interagir avec elles)
-
Étendre la bibliothèque d'implémentations efficaces de conversion d'opérateurs
-
Étendre la bibliothèque de structures de données d'opérateurs efficaces
Contribuer
Le code source est disponible sur GitHub.
Le guide du développeur se trouve dans CONTRIBUTING.md, à la racine du dépôt de ce projet. En participant, tu t'engages à respecter le code de conduite de Qiskit.
Citer ce package
Si tu utilises ce package dans tes recherches, utilise le fichier CITATION.bib du dépôt de ce projet pour citer la ou les références appropriées.
Licence
Politique de dépréciation
Ce package suit le versionnage sémantique. Les changements incompatibles ne sont effectués qu'occasionnellement, pour améliorer l'expérience utilisateur. Lorsque c'est possible, les anciennes interfaces sont conservées et marquées comme dépréciées aussi longtemps qu'elles peuvent coexister avec les nouvelles. Chaque amélioration substantielle, changement incompatible ou dépréciation est documenté dans les notes de version.
Références
[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].