Propagation de Pauli
Le package pauli-prop fournit une interface Python accélérée par Rust pour effectuer la propagation de Pauli.
La propagation de Pauli est un cadre permettant d'approximer l'évolution d'opérateurs dans la base de Pauli sous l'action d'autres opérateurs, tels que les portes de Circuit quantique et les canaux de bruit. Cette approche peut être efficace lorsque les opérateurs concernés devraient rester parcimonieux dans la base de Pauli.
Les sous-routines de ce package peuvent être utilisées pour implémenter des techniques de mitigation d'erreurs telles que le lightcone shading [6] et l'absorption de bruit propagé [7], la rétropropagation d'opérateurs [8] pour la réduction de la profondeur des Circuits, et la simulation classique de valeurs moyennes [1-5].
Pour commencer
Un guide simple pour t'aider à démarrer rapidement avec ce package est disponible dans le guide de démarrage rapide.
Exemples de cas d'usage
La propagation de Pauli peut être utilisée comme moteur de bas niveau pour implémenter diverses techniques. Voici quelques exemples où elle a été utilisée :
-
Lightcone shading pour réduire le surcoût d'échantillonnage de l'annulation probabiliste d'erreurs (PEC) afin de mitiger les valeurs moyennes dans un modèle d'Ising à champ transverse 1D et 2D [6] [
qiskit-addon-slcdocs] -
Absorption des informations du modèle de bruit dans une observable cible pour mitiger les valeurs moyennes dans un modèle d'Ising à champ transverse 2D [7] [
qiskit-addon-pnadocs] -
Suppression des portes finales pour produire des Circuits de Trotter de plus faible profondeur pour l'évolution temporelle d'un modèle de spins 2D [8] [
qiskit-addon-obpdocs]
Discussion technique
Détails du logiciel
-
Interface Python accélérée par Rust
-
Prise en charge des simulations bruitées [guide]
-
Possibilité de tronquer des termes pendant l'évolution selon une tolérance absolue sur les coefficients, un nombre fixe de termes dans l'opérateur en évolution, ou une combinaison des deux
-
Possibilité d'effectuer la propagation de Pauli dans les cadres de Schrödinger et de Heisenberg
-
Technique novatrice pour approximer la conjugaison d'un opérateur en somme de Pauli par un autre opérateur de Pauli. Cette implémentation heuristique génère de manière gloutonne les contributions au produit supposées les plus significatives. Voir l'annexe B de [7] pour plus d'informations.
-
Mono-thread
Besoins en ressources de calcul
Le coût en mémoire et en temps des routines de propagation de Pauli augmente généralement avec la taille que l'opérateur évolué est autorisé à atteindre.
propagate_through_rotation_gates() : Lorsque l'opérateur de Pauli est propagé dans la base de Pauli sous l'action d'une séquence de portes de rotation de Pauli d'un Circuit à qubits, le nombre de termes croît en vers un maximum de composantes de Pauli uniques. Pour contrôler l'utilisation de la mémoire, l'opérateur est tronqué après l'application de chaque porte, ce qui introduit une certaine erreur proportionnelle aux magnitudes des coefficients des termes tronqués. Les besoins en mémoire sont linéaires en la taille de l'opérateur évolué, et le temps d'exécution croît linéairement à la fois avec la taille de l'opérateur et le nombre de portes.
propagate_through_operator() : Conjugue un opérateur dans la base de Pauli par un autre en accumulant de manière gloutonne des termes dans la somme, , où sont des indices parcimonieux sur la base de Pauli. Cette implémentation trie les coefficients de chaque opérateur par magnitude décroissante, puis recherche dans l'espace d'indices 3D les termes aux plus grands coefficients, en partant de l'origine et en accumulant des triplets jusqu'à une coupure spécifiée. Le temps passé à la recherche peut souvent être rendu négligeable en augmentant le pas de recherche dans l'espace , ce qui procure une accélération cubique pour cette sous-routine. Dans notre profilage, un temps significatif peut être consacré au tri des opérateurs et à la multiplication de Pauli pour générer les termes du nouvel opérateur.
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.
Nous utilisons les issues GitHub pour suivre les demandes et les bugs.
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
Nous suivons le versionnage sémantique. Nous pouvons occasionnellement apporter des changements incompatibles afin d'améliorer l'expérience utilisateur. Lorsque c'est possible, nous conserverons les anciennes interfaces et les marquerons comme dépréciées, tant qu'elles peuvent coexister avec les nouvelles. Chaque amélioration substantielle, changement incompatible ou dépréciation sera documenté dans les notes de version.
Références
-
[Tomislav Begušić, Johnnie Gray, Garnet Kin-Lic Chan, Fast and converged classical simulations of evidence for the utility of quantum computing before fault tolerance, arXiv:2308.05077 [quant-ph].
-
Nicolas Loizeau, et al., Quantum many-body simulations with PauliStrings.jl, arXiv:2410.09654 [quant-ph].
-
Manuel S. Rudolph, et al., Pauli Propagation: A Computational Framework for Simulating Quantum Systems, arXiv:2505.21606 [quant-ph].
-
Hrant Gharibyan, et al., A Practical Guide to using Pauli Path Simulators for Utility-Scale Quantum Experiments, arXiv:2507.10771 [quant-ph].
-
Lukas Broers, et al., Scalable Simulation of Quantum Many-Body Dynamics with Or-Represented Quantum Algebra, arXiv:2506.13241 [quant-ph].
-
Andrew Eddins, Minh C. Tran, Patrick Rall, Lightcone shading for classically accelerated quantum error mitigation, arXiv:2409.04401 [quant-ph].
-
Andrew Eddins, et al., Computing noise-canceling observables via Pauli propagation, arXiv:2606.20441 [quant-ph].
8 Bryce Fuller, et al., Improved Quantum Computation using Operator Backpropagation, arXiv:2502.01897 [quant-ph].