Qiskit Fermions
qiskit-fermions rozszerza Qiskit SDK o narzędzia do pracy z układami fermionowymi. W swoim zakresie zapewnia następujące elementy:
-
Wydajne struktury danych do reprezentowania i przetwarzania operatorów fermionowych w różnych postaciach
-
Framework do implementowania metod konwersji operatorów (w tym kodowań fermion–kubit)
-
Bibliotekę wydajnych implementacji popularnych metod konwersji
-
Framework i bibliotekę bramek do wyrażania obwodów fermionowych
-
Potok transpilacji zintegrowany z procesem transpilera Qiskit, służący do syntezy obwodów fermionowych w obwody oparte na kubitach
Dodatkowo qiskit-fermions integruje się z innymi narzędziami ekosystemu, takimi jak:
- ffsim do wysokopoziomowych operatorów ansatzu i wydajnej symulacji obwodów fermionowych (zobacz Relacja z ffsim)
Rozpocznij
Schematyczny opis na powyższym obrazie daje wgląd w zakres funkcji i ogólny przepływ pracy, które oferuje ten pakiet. Możesz pracować w reżimie fermionowym zarówno z reprezentacją operatorową, jak i obwodową, zanim zdefiniujesz kodowanie fermion–kubit, które trafia do wielo-reprezentacyjnego potoku transpilatora Qiskit.
Wszystkie te funkcje są wyjaśnione w kilku przewodnikach, które pomogą Ci zacząć. Aby zobaczyć omówienie przechodzące dokładnie przez potok pokazany powyżej, zacznij od przewodnika po jednowymiarowym modelu Fermiego-Hubbarda.
Przykłady zastosowań
Komponenty tego pakietu zostały użyte w badaniach opisanych w następujących artykułach:
Omówienie techniczne
Założenia projektowe
Ten pakiet został celowo zaprojektowany tak, aby był spójny z Qiskit: opiera się na rdzeniu zaimplementowanym w Rust i udostępnia oficjalne powiązania językowe dla Pythona i C. Jego API ma się upodabniać do Qiskit, aby bezproblemowo wpasować się w przepływy pracy użytkowników z doświadczeniem w programowaniu w Qiskit.
Podstawową zasadą projektu qiskit-fermions było oddzielenie reprezentacji obwodu fermionowego od jego postaci kubitowej. Dokładniej: obwody fermionowe mają sens same w sobie i nie wymagają odwzorowania na przestrzeń kubitów, aby można je było interpretować. Ponadto reprezentacja obwodu fermionowego nie może czynić żadnych założeń co do kodowania fermion–kubit stosowanego później. W konsekwencji, choć Jordan-Wigner zachowuje dominującą pozycję i rolę, nie jest zakładany jako _domyślne_ kodowanie fermion–kubit.
Relacja z ffsim
ffsim i qiskit-fermions dzielą się pracą, a nie na siebie zachodzą. ffsim odpowiada za wysokopoziomowe operatory ansatzu i ich szybką symulację: konstruuje operator UCJ lub UCCSD z amplitud coupled-cluster lub wektora parametrów i symuluje stany fermionowe w zwartej przestrzeni o stałej liczbie cząstek. qiskit-fermions odpowiada za stronę obwodową: wyraża ten operator jako FermionicCircuit na modach fermionowych i transpiluje go do obwodu kubitowego przez dowolne kodowanie fermion–kubit.
Ten ostatni punkt jest powodem, dla którego warto przenieść operator ffsim tutaj. Własne bramki Qiskit z ffsim są specyficzne dla transformacji Jordana-Wignera, więc sprowadzenie ansatzu przez inne kodowanie (na przykład lokalne kodowanie wymieniające kubity na płytsze obwody) to właśnie to, co dodaje ten pakiet. Z kolei ten pakiet nie implementuje ponownie matematyki ansatzu, więc UCJ i UCC przyjmują operator ffsim bezpośrednio jako dane wejściowe.
Po stronie symulacji ffsim jest backendem. Bramki i operatory tego pakietu implementują metody protokołu, z których korzystają funkcje symulacji ffsim (_apply_unitary_, _linear_operator_ i _trace_; zobacz qiskit_fermions.protocols), więc narzędzia ffsim działają na nich natywnie, bez kroku konwersji. Budowanie operatorów, ich odwzorowywanie i transpilacja powstałych obwodów w ogóle nie wymagają ffsim.
Pełny obraz znajdziesz w przewodniku o relacji z ffsim.
Znane problemy
Dopóki C API Qiskit nie osiągnie parytetu funkcji z jego API Pythona, niektóre komponenty tego pakietu pozostają dostępne wyłącznie w API Pythona. Dotyczy to całej biblioteki obwodów (qiskit_fermions.circuit) oraz przebiegów transpilatora (qiskit_fermions.transpiler).
Plany na przyszłość
-
Przeniesienie biblioteki obwodów i przebiegów transpilatora do rdzenia w Rust (wraz z udostępnieniem C API do współpracy z nimi)
-
Rozszerzenie biblioteki wydajnych implementacji konwersji operatorów
-
Rozszerzenie biblioteki wydajnych struktur danych operatorów
Współtworzenie
Kod źródłowy jest dostępny na GitHubie.
Przewodnik dla deweloperów znajduje się w pliku CONTRIBUTING.md w katalogu głównym repozytorium tego projektu. Uczestnicząc, zobowiązujesz się przestrzegać kodeksu postępowania Qiskit.
Cytowanie tego pakietu
Jeśli używasz tego pakietu w swoich badaniach, skorzystaj z pliku CITATION.bib w repozytorium tego projektu, aby zacytować odpowiednie źródła.
Licencja
Polityka wycofywania
Ten pakiet stosuje wersjonowanie semantyczne. Zmiany łamiące zgodność wprowadzane są tylko okazjonalnie, aby poprawić doświadczenie użytkownika. Gdy to możliwe, stare interfejsy są zachowywane i oznaczane jako przestarzałe, dopóki mogą współistnieć z nowymi. Każde istotne ulepszenie, zmiana łamiąca zgodność lub wycofanie jest udokumentowane w informacjach o wydaniu.
Bibliografia
[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].