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.
AvisoAtualmente, nenhum portão desse tipo é compatível.
Aumentos
ValueError – se o objeto fornecido não for gate uma instância de FermionicGate.
Tipo de retorno
Nenhum
count_ops
decompose
decompose(gates_to_decompose=None, reps=1)
Reexibe decompose().
Parâmetros
- gates_to_decompose (str |type[Instruction] | Sequence[str |type[Instruction]] | None)
- reps (int)
Tipo de retorno
draw
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.SupportsApplyUnitarydo ffsim. - ValueError – se uma instrução de circuito se recusar a aplicar seu protocolo unitário para os valores dados de e
norbnelec; 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
_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.SupportsApplyUnitarydo ffsim. - ValueError – se uma instrução de circuito se recusar a aplicar seu protocolo unitário para os valores dados de e
norbnelec; 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