FermionicCircuit
class FermionicCircuit(num_modes)
Bases: object
Una envoltura de QuantumCircuit para expresar circuitos fermiónicos.
Esta clase mantiene una API reducida en comparación con la API completa del. subyacente QuantumCircuit. Esto se hace para evitar revelar (entre otros métodos) la capacidad de aplicar puertas basadas en qubits a un circuito fermiónico, lo que no sería una operación bien definida en el caso general.
La inicialización de una instancia de circuito puede realizarse con los argumentos que se indican a continuación.
Parámetros
num_modes (int) – el número de modos fermiónicos sobre los que actúa este circuito.
Atributos
metadata
Vuelve a exponer metadata.
modes
El modo fermiónico sobre el que bits actúa este circuito.
register
Tipo: FermionicRegister
El circuito interno FermionicRegister...
Métodos
append
append(gate, fargs, cargs=None, *, copy=True)
Añade un FermionicGate a este circuito.
Parámetros
-
gate (FermionicGate) – la puerta fermiónica que se debe aplicar.
-
fargs (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – los modos fermiónicos sobre los que actúa esta puerta.
-
cargs (None) –
los bits clásicos sobre los que actúa esta puerta.
AvisoActualmente no se admiten puertas de este tipo.
Subidas
ValueError – si el objeto proporcionado no es gate una instancia de FermionicGate.
Tipo de retorno
Ninguna
count_ops
decompose
decompose(gates_to_decompose=None, reps=1)
Vuelve a exponer decompose().
Parámetros
- gates_to_decompose (str |type[Instruction] | Sequence[str |type[Instruction]] | None)
- reps (int)
Tipo de retorno
draw
Métodos del protocolo
_apply_unitary_
_apply_unitary_(vec, norb, nelec, copy)
Aplica este circuito a un vector de estado de ffsim, implementando el protocolo de ffsim.
Esto recorre el circuito en orden topológico y aplica el efecto unitario de cada instrucción al vector de estado mediante el ffsim.SupportsApplyUnitary protocolo de ffsim (que se refleja localmente como SupportsApplyUnitary). Cada instrucción que actúa sobre un subconjunto del registro ve cómo se renombran los modos fermiónicos de dicho subconjunto con sus índices absolutos (globales) antes de aplicarse.
Consúltese _apply_unitary_placed_() para obtener más detalles; este método parte de la base de que los modos del circuito son los modos del vector 0..num_modes (es decir, una disposición de modos identidad).
Parámetros
- vec (ndarray) – el vector de estado al que se va a aplicar este circuito. Si el circuito está vacío, lo devuelve sin cambios.
- norb (int) – el número de orbitales espaciales.
- nelec (int |tuple[int, int]) – o bien un único número entero que represente el número de fermiones en un sistema sin espín, o bien un par de números enteros que indiquen 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.
Devuelve
El vector transformado.
Subidas
- TypeError – si una instrucción de circuito no implementa el protocolo
ffsim.SupportsApplyUnitaryde ffsim. - ValueError – si una instrucción de circuito se niega a aplicar su protocolo unitario para los valores dados
norbynelec; o si una instrucción que solo implementa el protocolo_apply_unitary_básico se sitúa en un subconjunto en modo no identidad.
Tipo de retorno
_apply_unitary_placed_
_apply_unitary_placed_(vec, norb, nelec, copy, freg_indices)
Aplica este circuito tras asignar sus modos a los modos globales del vector.
Esto recorre el circuito en orden topológico y aplica el efecto unitario de cada instrucción al vector de estado mediante el protocolo ffsim.SupportsApplyUnitary de ffsim. Los modos propios de cada instrucción se asignan en primer lugar mediante la ubicación de este circuito: un modo local del circuito se asigna m al modo global freg_indices[m], por lo que una subinstrucción que actúa sobre los modos locales del circuito [m0, m1, ...] se aplica a los modos globales [freg_indices[m0], freg_indices[m1], ...]. Con la colocación de identidad, esto freg_indices == 0..num_modes es exactamente así _apply_unitary_(); una colocación de subconjunto permite que este circuito actúe como la definición de una puerta colocada en un subconjunto de un registro más grande (p. ej., UCJ). Esta extensión que tiene en cuenta la ubicación está documentada como SupportsApplyUnitaryPlaced — un protocolo específico del paquete que no tiene equivalente en ffsim.
Una instrucción se coloca en sus modos absolutos únicamente si implementa la extensión _apply_unitary_placed_ sensible a la ubicación (SupportsApplyUnitaryPlaced). Una instrucción que solo implemente la versión básica de ffsim ( _apply_unitary_SupportsApplyUnitary ), que no tiene ningún argumento de modo y, por lo tanto, actúa sobre los modos del 0..k vector, solo puede aplicarse cuando su ubicación es la identidad [0, 1, ..., k-1]; en cualquier otro subconjunto, la ubicación no puede expresarse y la instrucción se rechaza, en lugar de aplicarse de forma silenciosa en los modos incorrectos.
Parámetros
- vec (ndarray) – el vector de estado al que se va a aplicar este circuito. Si el circuito está vacío, lo devuelve sin cambios.
- 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 que represente el número de fermiones en un sistema sin espín, o bien un par de números enteros que indiquen 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 modo absolutos (globales) a los que se corresponden los modos de este circuito.
Devuelve
El vector transformado.
Subidas
- TypeError – si una instrucción de circuito no implementa el protocolo
ffsim.SupportsApplyUnitaryde ffsim. - ValueError – si una instrucción de circuito se niega a aplicar su protocolo unitario para los valores dados
norbynelec; o si una instrucción que solo implementa el protocolo_apply_unitary_básico se sitúa en un subconjunto en modo no identidad.
Tipo de retorno