PrepareSlaterDeterminant
class PrepareSlaterDeterminant(occupation, rotation_unitary)
Bases: FermionicGate
Calcula um determinante de Slater a partir de uma ocupação e de uma rotação orbital.
Esta porta é composta por uma ocupação de referência InitializeModes seguida por um OrbitalRotation: ela declara que os modos sobre os quais atua começam no determinante definido por e occupation são, em seguida, girados em rotation_unitary. Como a ocupação inicial é conhecida, a transpilagem dessa porta pode utilizar a decomposição retangular para givens_decomposition_slater() uma síntese com número reduzido de portas (ver GivensDecompositionSlaterDeterminantSynthesis), em vez da decomposição quadrada completa que um por si OrbitalRotation só exigiria.
Seguindo a convenção OrbitalRotation , a rotação dos modos ocupados os mapeia para as colunas correspondentes de rotation_unitary; essas colunas abrangem o espaço ocupado do determinante de Slater preparado.
Semântica da simulação
Nesta simulação, esse portão é do tipo “validar e depois girar”, e não um produtor de estado: dado um vetor de estado de entrada, ele verifica se o vetor está restrito ao subespaço definido occupation por (por meio de InitializeModes) e, em seguida, aplica rotation_unitary (por meio de OrbitalRotation). Portanto, é necessário um vetor de estado de referência real, preparado externamente (por exemplo, por meio de ffsim.slater_determinant()). O comportamento do produtor — que gera os gates que definem a ocupação de referência — está no plug-in de síntese, e não no caminho de simulação.
A aplicação (em vez da omissão) da rotação é o que garante que a fusão de um InitializeModes e um OrbitalRotation nessa única porta deixe o estado final simulado inalterado.
Este é um protótipo em fase inicial de desenvolvimento. Fique atento a possíveis alterações na interface sem aviso prévio durante a fase de desenvolvimento pré-lançamento deste pacote.
A inicialização de uma instância deste portão pode ser feita com os argumentos listados abaixo.
Parâmetros
- occupation (Sequence[bool]) – uma sequência de valores booleanos que indica a ocupação de referência para cada modo sobre o qual essa porta atua.
- rotation_unitary (np.ndarray) – a matriz unitária que define a rotação orbital por meio de , onde é o número de modos (
len(occupation)). Ela deve ser quadrada e unitária; isso é de responsabilidade do chamador e não é verificado.
Aumentos
ValueError – se não rotation_unitary for uma matriz quadrada cuja dimensão corresponda ao comprimento de occupation.
Atributos
occupation
A ocupação de referência (um valor booleano por modo) à qual a rotação é aplicada.
rotation_unitary
A matriz unitária que representa os coeficientes de rotação orbital.
Métodos do protocolo
_apply_unitary_placed_
_apply_unitary_placed_(vec, norb, nelec, copy, freg_indices)
Valida a ocupação de referência e aplica a rotação, posicionando os modos em vec.
Delegados à definição do portão (_build_definition()): o termo inicial InitializeModes verifica se vec está restrito ao subespaço que define occupation , e o termo seguinte o OrbitalRotation gira. Consulte “esses portões” para _apply_unitary_placed_ conhecer toda a semântica (confinamento em subespaço e a rejeição de rotações que misturam o spin).
Parâmetros
- vec (ndarray) – o vetor de estado de referência a ser validado e girado.
- norb (int) – o número de orbitais espaciais do vetor de estado global.
- nelec (int |tuple[int, int]) – seja um único número inteiro para um sistema sem spin, seja um par de números inteiros que armazenam os números dos férmions de spin alfa e 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) para os quais os modos locais dessa porta se mapeiam.
Retorna
O vetor transformado.
Tipo de retorno