OrbitalRotation
class OrbitalRotation(rotation_unitary)
Bases: FermionicGate
Implementa uma rotação orbital.
Dada uma matriz unitária de tipo “ ” (rotation_unitary), esse portão implementa a mudança de base de partícula única que mapeia os operadores de criação da seguinte forma:
o que equivale a aplicar o operador unitário de muitos corpos
O número de modos fermiónicos sobre os quais a porta atua é a dimensão de rotation_unitary.
A inicialização de uma instância dessa porta pode ser feita com os argumentos listados a seguir.
Parâmetros
rotation_unitary (np.ndarray) – a matriz unitária que define a rotação orbital por meio de . Ela deve ser quadrada e unitária; isso é de responsabilidade do chamador e não é verificado.
Atributos
rotation_unitary
A matriz unitária que representa os coeficientes de rotação orbital.
Métodos
from_t1_amplitudes
classmethod from_t1_amplitudes(t1)
Constrói uma rotação orbital a partir de amplitudes de tipo “ ” (singles).
A rotação é o unitário, em que a matriz de amplitude está incorporada ao gerador anti-hermitiano sobre todos os orbitais
com os orbitais ocupados listados antes dos virtuais. Trata-se da rotação orbital de excitação única que entra na hipótese (L)UCJ quando ela é inicializada a partir de amplitudes do método de clusters acoplados; consulte UCJ.
Parâmetros
t1 (ndarray) – as amplitudes de forma do (nocc, nvrt), em que nocc é o número de orbitais ocupados e nvrt é o número de orbitais virtuais.
Retorna
Um modo que atua OrbitalRotation em , cujo valor é rotation_unitary .
Tipo de retorno
Métodos do protocolo
_apply_unitary_placed_
_apply_unitary_placed_(vec, norb, nelec, copy, freg_indices)
Aplica a rotação orbital após posicioná-la nos modos globais do vetor.
A parte local da porta ( rotation_unitary uma matriz de tipo que atua sobre os modos num_modes da porta) é, em primeiro lugar, incorporada ao registro completo: uma matriz identidade com o número de modos do vetor de estado, com inscrito rotation_unitary nas linhas/colunas selecionadas por freg_indices.
No caso do spinful, a matriz incorporada deve ser diagonal em blocos em relação à divisão alfa/beta. Uma rotação com blocos fora da diagonal com valores diferentes de zero para alfa/beta mistura os setores de spin, o que não conserva as contagens individuais de elétrons alfa/beta e, portanto, mapeia a amplitude para fora do setor (n_alpha, n_beta) fixo — uma operação que o vetor de estado do setor fixo não pode representar. Essa rotação é rejeitada com um ValueError.
A matriz incorporada é então aplicada de uma das duas maneiras a seguir:
- Caminho rápido (somente quando
ffsimestiver instalado): a matriz incorporada é aplicada por meio do kernel de rotação de Givensffsim.apply_orbital_rotation()do. De acordo com a convenção de blocos de spin (os modos0..norbsão orbitais alfa, os modosnorb..2*norbsão orbitais beta), os dois blocos diagonais correspondem às rotações por spin passadas ao ffsim como(mat_a, mat_b). - Caminho geral : caso contrário (ou seja, quando não estiver
ffsimdisponível), a rotação é aplicada como a evolução sob seu gerador , onde é a matriz incorporada. é convertida em umscipy``LinearOperatorpor meio delinear_operator()(com o suporte do kernel matriz-vetor nativo do FCI) e aplicada por meio descipy.sparse.linalg.expm_multiply(). Isso refleteEvolution._apply_unitary_placed_().
Parâmetros
- vec (ndarray) – o vetor de estado sobre o qual se deve agir.
- norb (int) – o número de orbitais espaciais do vetor de estado global.
- nelec (int |tuple[int, int]) – ou um único número inteiro, no caso de um sistema sem spin, ou um par de números inteiros que representam o número de férmions de spin alfa e de spin beta. Um número inteiro seleciona a interpretação dos modos sem spin (os
norbmodos são orbitais); um par seleciona a interpretação dos modos2 * norbcom spin em blocos(orb, spin). - copy (bool) – se é necessário copiar o vetor antes de realizar operações nele.
- freg_indices (list[int]) – os índices dos modos absolutos (globais) para os quais os modos locais dessa porta se mapeiam. A rotação é incorporada a esses modos globais antes de ser aplicada.
Retorna
O vetor transformado.
Aumentos
ValueError – se nelec for um par com spin e a rotação (aplicada) misturar os setores de spin alfa e beta.
Tipo de retorno