Skip to main content
IBM Quantum Platform

FermionicCircuit

class FermionicCircuit(num_modes)

Bases: object

Um wrapper em torno de para QuantumCircuit expressar circuitos fermiónicos.

Essa classe mantém uma API reduzida em comparação com a API completa do QuantumCircuit. Isso é feito para evitar expor (entre outros métodos) a capacidade de aplicar portas baseadas em qubits a um circuito fermiónico, o que não seria uma operação bem definida no caso geral.

A inicialização de uma instância de circuito pode ser feita com os argumentos listados a seguir.

Parâmetros

num_modes (int) – o número de modos fermiónicos sobre os quais esse circuito atua.


Atributos

metadata

Reexibe metadata.

modes

O modo fermiónico sobre o qual bits este circuito atua.

register

Tipo: FermionicRegister

O circuito interno FermionicRegister...


Métodos

append

append(gate, fargs, cargs=None, *, copy=True)

Acrescenta um FermionicGate a este circuito.

Parâmetros

  • gate (FermionicGate) – a porta fermiónica a ser aplicada.

  • fargs (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – os modos fermiónicos sobre os quais essa porta atua.

  • cargs (None) –

    os bits clássicos sobre os quais esse portão atua.

    Aviso

    Atualmente, nenhum portão desse tipo é compatível.

  • copy (bool) – encaminhado para append().

Aumentos

ValueError – se o objeto fornecido não for gate uma instância de FermionicGate.

Tipo de retorno

Nenhum

count_ops

count_ops()

Reexibe count_ops().

Tipo de retorno

OrderedDict [ str, int ]

decompose

decompose(gates_to_decompose=None, reps=1)

Reexibe decompose().

Parâmetros

Tipo de retorno

FermionicCircuit

draw

draw(*args, **kwargs)

Exibe diretamente o método draw() do circuito interno.

Tipo de retorno

Qualquer

Métodos do protocolo

_apply_unitary_

_apply_unitary_(vec, norb, nelec, copy)

Aplica este circuito a um vetor de estado do ffsim, implementando o protocolo do ffsim.

Isso percorre o circuito na ordem topológica e aplica o efeito unitário de cada instrução ao vetor de estado por meio do protocolo ffsim.SupportsApplyUnitary do ffsim (espelhado localmente como SupportsApplyUnitary). Cada instrução que atua sobre um subconjunto do registro tem seus modos fermiônicos renomeados para seus índices absolutos (globais) antes de ser aplicada.

Consulte _apply_unitary_placed_() para obter mais detalhes; esse método pressupõe que os modos do circuito sejam os modos do vetor 0..num_modes (ou seja, uma disposição de modos identidade).

Parâmetros

  • vec (ndarray) – o vetor de estado ao qual se aplica este circuito. Um circuito vazio o retorna inalterado.
  • norb (int) – o número de orbitais espaciais.
  • nelec (int |tuple[int, int]) – ou um único número inteiro representando o número de férmions para um sistema sem spin, ou um par de números inteiros que indicam o número de férmions de spin alfa e de spin beta.
  • copy (bool) – se é necessário copiar o vetor antes de realizar operações nele.

Retorna

O vetor transformado.

Aumentos

  • TypeError – se uma instrução de circuito não implementar o protocolo ffsim.SupportsApplyUnitary do ffsim.
  • ValueError – se uma instrução de circuito se recusar a aplicar seu protocolo unitário para os valores dados de e norb nelec; ou se uma instrução que implemente apenas o protocolo _apply_unitary_ simples for colocada em um subconjunto no modo não-identidade.

Tipo de retorno

ndarray

_apply_unitary_placed_

_apply_unitary_placed_(vec, norb, nelec, copy, freg_indices)

Aplica este circuito após inserir seus modos nos modos globais do vetor.

Isso percorre o circuito na ordem topológica e aplica o efeito unitário de cada instrução ao vetor de estado por meio do protocolo ffsim.SupportsApplyUnitary do ffsim. Os modos próprios de cada instrução são, em primeiro lugar, mapeados por meio da disposição desse circuito: um modo local do circuito é mapeado m para o modo global freg_indices[m]; assim, uma subinstrução que atua sobre os modos locais do circuito [m0, m1, ...] é aplicada aos modos globais [freg_indices[m0], freg_indices[m1], ...]. Com a colocação de identidade, isso freg_indices == 0..num_modes é exatamente o que ocorre _apply_unitary_(); uma colocação em subconjunto permite que esse circuito funcione como a definição de uma porta colocada em um subconjunto de um registro maior (por exemplo, UCJ). Essa extensão sensível à localização está documentada como SupportsApplyUnitaryPlaced – um protocolo específico do pacote, sem equivalente no ffsim.

Uma instrução é colocada em seus modos absolutos somente se implementar a extensão _apply_unitary_placed_ sensível ao posicionamento (SupportsApplyUnitaryPlaced). Uma instrução que implemente apenas a função simples ( _apply_unitary_SupportsApplyUnitary ) do ffsim — que não possui argumento de modo e, portanto, atua nos modos 0..k do vetor — só pode ser executada quando seu posicionamento for a identidade [0, 1, ..., k-1]; em qualquer outro subconjunto, o posicionamento não pode ser expresso e a instrução é rejeitada, em vez de ser aplicada silenciosamente nos modos incorretos.

Parâmetros

  • vec (ndarray) – o vetor de estado ao qual se aplica este circuito. Um circuito vazio o retorna inalterado.
  • norb (int) – o número de orbitais espaciais do vetor de estado global.
  • nelec (int |tuple[int, int]) – ou um único número inteiro representando o número de férmions para um sistema sem spin, ou um par de números inteiros que indicam o número de férmions de spin alfa e de spin beta.
  • copy (bool) – se é necessário copiar o vetor antes de realizar operações nele.
  • freg_indices (list[int]) – os índices dos modos absolutos (globais) aos quais os modos deste circuito se mapeiam.

Retorna

O vetor transformado.

Aumentos

  • TypeError – se uma instrução de circuito não implementar o protocolo ffsim.SupportsApplyUnitary do ffsim.
  • ValueError – se uma instrução de circuito se recusar a aplicar seu protocolo unitário para os valores dados de e norb nelec; ou se uma instrução que implemente apenas o protocolo _apply_unitary_ simples for colocada em um subconjunto no modo não-identidade.

Tipo de retorno

ndarray

Esta página foi útil?
Relate um bug, erro de digitação ou solicite conteúdo no GitHub.