PrepareSlaterDeterminant
class PrepareSlaterDeterminant(occupation, rotation_unitary)
Bases: FermionicGate
Calcula un determinante de Slater a partir de una ocupación y una rotación orbital.
Esta puerta está formada por una ocupación de referencia InitializeModes seguida de un OrbitalRotation: declara que los modos sobre los que actúa comienzan en el determinante definido por y occupation , a continuación, se rotan en rotation_unitary. Dado que se conoce la ocupación inicial, al transpilar esta puerta se puede utilizar la descomposición rectangular givens_decomposition_slater() para obtener una síntesis con un número reducido de puertas (véase GivensDecompositionSlaterDeterminantSynthesis), en lugar de la descomposición cuadrada completa que requeriría una puerta por sí OrbitalRotation sola.
Siguiendo la convención OrbitalRotation , al rotar los modos ocupados, estos se proyectan sobre las columnas correspondientes de rotation_unitary; dichas columnas abarcan el espacio ocupado del determinante de Slater preparado.
Semántica de la simulación
En la simulación, esta puerta es del tipo «validar y luego rotar», no un generador de estados: dado un vector de estado entrante, comprueba que dicho vector se encuentre confinado en el subespacio que define occupation (mediante InitializeModes) y, a continuación, aplica ( rotation_unitary mediante OrbitalRotation). Por lo tanto, requiere un vector de estado de referencia real, generado externamente (por ejemplo, mediante ffsim.slater_determinant()). El comportamiento del generador —la emisión de las puertas que establecen el estado de ocupación de referencia— se encuentra en el complemento de síntesis, no en la ruta de simulación.
Aplicar (en lugar de omitir) la rotación es lo que garantiza que la fusión de un InitializeModes y un OrbitalRotation en esta única puerta deje inalterado el estado final simulado.
Se trata de un prototipo en fase inicial de desarrollo. Ten en cuenta que pueden producirse cambios en su interfaz sin previo aviso durante la fase de desarrollo previa al lanzamiento de este paquete.
La inicialización de una instancia de esta puerta se puede realizar con los argumentos que se indican a continuación.
Parámetros
- occupation (Sequence[bool]) – una secuencia de valores booleanos que indica la ocupación de referencia para cada modo sobre el que actúa esta puerta.
- rotation_unitary (np.ndarray) – la matriz unitaria que define la rotación orbital mediante , donde es el número de modos (
len(occupation)). Debe ser cuadrada y unitaria; esto es responsabilidad de quien la invoca y no se verifica.
Subidas
ValueError – si no es rotation_unitary una matriz cuadrada cuya dimensión coincida con la longitud de occupation.
Atributos
occupation
La ocupación de referencia (un valor booleano por modo) a la que se aplica la rotación.
rotation_unitary
La matriz unitaria que representa los coeficientes de rotación orbital.
Métodos del protocolo
_apply_unitary_placed_
_apply_unitary_placed_(vec, norb, nelec, copy, freg_indices)
Valida la ocupación de referencia y aplica la rotación, colocando los modos en vec.
Delegados en la definición de la puerta (_build_definition()): el término inicial InitializeModes verifica que vec quede confinado al subespacio que define occupation , y el término siguiente lo OrbitalRotation gira. Consulta «esas puertas» para _apply_unitary_placed_ conocer la semántica completa (confinamiento en subespacios y el rechazo de las rotaciones que mezclan espines).
Parámetros
- vec (ndarray) – el vector de estado de referencia que se va a validar y rotar.
- norb (int) – el número de orbitales espaciales del vector de estado global.
- nelec (int |tuple[int, int]) – o bien un único número entero para un sistema sin espín, o bien un par de números enteros que representan el número de fermiones de espín alfa y de espín beta.
- copy (bool) – si se debe copiar el vector antes de realizar operaciones con él.
- freg_indices (list[int]) – los índices de los modos absolutos (globales) a los que se asignan los modos locales de esta puerta.
Devuelve
El vector transformado.
Tipo de retorno