Qiskit Fermions
qiskit-fermions estende o Qiskit SDK com ferramentas para trabalhar com sistemas fermiônicos. Dentro de seu escopo, ele oferece o seguinte:
-
Estruturas de dados eficientes para a representação e a manipulação de operadores fermiônicos em diferentes formas
-
Um framework para implementar métodos de conversão de operadores (incluindo codificações férmion-para-qubit)
-
Uma biblioteca de implementações eficientes de métodos de conversão comuns
-
Um framework e uma biblioteca de portas para expressar circuitos fermiônicos
-
Um pipeline de transpilação integrado ao processo do transpilador do Qiskit para sintetizar circuitos fermiônicos em circuitos baseados em qubits
Além disso, o qiskit-fermions se integra com outras ferramentas do ecossistema, como:
- ffsim para os operadores de ansatz de alto nível e a simulação eficiente de circuitos fermiônicos (veja Relação com o ffsim)
Primeiros passos
A descrição esquemática na imagem acima dá uma ideia da amplitude de recursos e do fluxo de trabalho geral que este pacote oferece. Você pode trabalhar no regime fermiônico, tanto com a representação de operadores quanto com a de circuitos, antes de definir uma codificação de férmion para qubit que se conecta ao pipeline de transpilação multirrepresentação do Qiskit.
Todos esses recursos são explicados em vários guias para ajudar você a começar. Para uma visão geral que percorre exatamente o pipeline mostrado acima, comece pelo guia do modelo de Fermi-Hubbard 1D.
Exemplos de casos de uso
Componentes deste pacote foram usados em pesquisas relacionadas aos seguintes artigos:
-
A compilação aleatorizada de circuitos qDRIFT em [1].
-
A síntese de férmion para qubit durante o processo de transpilação em [2].
Discussão técnica
Intenções de design
Este pacote foi projetado deliberadamente para se alinhar ao Qiskit: ele se baseia em um núcleo implementado em Rust e oferece bindings oficiais para Python e C. Sua API procura traçar paralelos com o Qiskit para se integrar sem atritos aos fluxos de trabalho de quem tem experiência em programar com o Qiskit.
Um princípio central do design do qiskit-fermions foi o desacoplamento entre a representação fermiônica dos circuitos e a sua forma em qubits. Em termos mais precisos: os circuitos fermiônicos têm significado por si mesmos e não exigem um mapeamento para o espaço de qubits para serem interpretados. Além disso, a representação fermiônica do circuito não pode fazer suposições sobre a codificação de férmion para qubit aplicada depois. Consequentemente, embora Jordan-Wigner mantenha uma posição e um papel dominantes, ela não é presumida como a codificação de férmion para qubit _padrão_.
Relação com o ffsim
O ffsim e o qiskit-fermions dividem o trabalho em vez de se sobrepor. O ffsim cuida dos operadores de ansatz de alto nível e da sua simulação rápida: ele constrói um operador UCJ ou UCCSD a partir de amplitudes de coupled-cluster ou de um vetor de parâmetros, e simula estados fermiônicos em um espaço compacto de número fixo de partículas. O qiskit-fermions cuida do lado dos circuitos: ele expressa esse operador como um FermionicCircuit sobre modos fermiônicos e o transpila para um circuito de qubits por meio de qualquer codificação de férmion para qubit.
Esse último ponto é o motivo para trazer um operador do ffsim para cá. As portas Qiskit do próprio ffsim são específicas da transformação de Jordan-Wigner, então reduzir um ansatz por meio de uma codificação diferente (uma codificação local que troca qubits por circuitos mais rasos, por exemplo) é o que este pacote acrescenta. Por outro lado, este pacote não reimplementa a matemática do ansatz, então UCJ e UCC aceitam um operador do ffsim diretamente como entrada.
No lado da simulação, o ffsim é o Backend. As portas e os operadores deste pacote implementam os métodos de protocolo que as funções de simulação do ffsim consomem (_apply_unitary_, _linear_operator_ e _trace_; veja qiskit_fermions.protocols), de modo que as ferramentas do ffsim funcionam com eles nativamente, sem etapa de conversão. Construir operadores, mapeá-los e transpilar os circuitos resultantes não exige o ffsim de forma alguma.
Para o quadro completo, leia o guia da relação com o ffsim.
Problemas conhecidos
Enquanto a API C do Qiskit ainda não tiver atingido paridade de recursos com a sua API Python, alguns componentes deste pacote continuarão exclusivos da API Python também. Isso inclui toda a biblioteca de circuitos (qiskit_fermions.circuit), bem como os passes do transpilador (qiskit_fermions.transpiler).
Trabalhos futuros
-
Migrar a biblioteca de circuitos e os passes do transpilador para o núcleo em Rust (e fornecer uma API C para interagir com eles)
-
Ampliar a biblioteca de implementações eficientes de conversão de operadores
-
Ampliar a biblioteca de estruturas de dados eficientes para operadores
Como contribuir
O código-fonte está disponível no GitHub.
O guia do desenvolvedor está em CONTRIBUTING.md, na raiz do repositório deste projeto. Ao participar, espera-se que você respeite o código de conduta do Qiskit.
Como citar este pacote
Se você usar este pacote em sua pesquisa, use o arquivo CITATION.bib do repositório deste projeto para citar a(s) referência(s) apropriada(s).
Licença
Política de descontinuação
Este pacote segue o versionamento semântico. Mudanças incompatíveis são feitas apenas ocasionalmente, para melhorar a experiência de uso. Quando possível, as interfaces antigas são mantidas e marcadas como obsoletas pelo tempo em que puderem coexistir com as novas. Cada melhoria substancial, mudança incompatível ou descontinuação é documentada nas Notas de versão.
Referências
[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].