Programas de fondo
qiskit_addon_mpf.backends
Backends opcionales para el algoritmo DynamicMPF algoritmo.
Disponibilidad
La posibilidad de utilizar un determinado backend depende de la disponibilidad de la biblioteca de redes tensoriales subyacente. Esto puede afirmarse fácilmente en tiempo de ejecución utilizando los siguientes indicadores:
HAS_QUIMB
Indica si la dependencia opcional quimb está instalada.
HAS_TENPY
Indica si la dependencia opcional tenpy está instalada.
Programas de fondo
Dependiendo de la disponibilidad (véase más arriba), están disponibles los siguientes backends:
quimb_tebd | A quimb-basado en TEBD. |
quimb_layers | Un backend de evolución temporal por capas que utiliza quimb. |
quimb_circuit | Un backend de evolución temporal basado en circuitos que utiliza quimb. |
tenpy_tebd | A tenpy-basado en TEBD. |
tenpy_layers | Un backend de evolución temporal por capas que utiliza tenpy. |
Interfaz
La interfaz implementada por cualquiera de estos backends opcionales se compone de las siguientes clases:
Evolucionar
class Evolver
Bases: ABC
La interfaz para los algoritmos de evolución temporal utilizados en DynamicMPF.
Esta interfaz de evolución temporal es utilizada por el DynamicMPF.lhs y DynamicMPF.rhs y debe hacer evolucionar en el tiempo un objeto State bajo su capucha. El mecanismo exacto del algoritmo se describe con más detalle en DynamicMPF, Statey setup_dynamic_lse().
conjugate
abstract property
Tipo: bool
Devuelve si esta instancia de evolvente temporal actúa sobre el lado derecho.
evolved_time
abstract property
Tipo: float
Devuelve el tiempo de evolución actual.
step
abstract step()
Realiza un único paso temporal de este algoritmo de evolución temporal.
Esto debería actuar sobre el objeto State (para el que esta interfaz no prescribe ningún nombre). Si esta instancia del algoritmo de evolución temporal debe evolucionar el State desde el lado izquierdo o derecho, depende del valor de conjugate.
Tipo de retorno
Ninguna
Estado
class State
Bases: ABC
La interfaz para el DynamicMPF.evolution_state.
Este estado de evolución temporal se comparte entre las instancias LHS y RHS Evolver de la instancia DynamicMPF instancia. En la mayoría de los casos en los que un backend concreto que implemente esta interfaz se base en redes tensoriales, este estado será un operador de producto matricial (MPO). Esto se debe a que la mayoría de los algoritmos de evolución temporal normalmente evolucionan un estado producto matricial (MPS) como se muestra pictóricamente a continuación, donde los bloques de evolución temporal (U#) se aplican sucesivamente a un MPS unidimensional (S#). Aquí, la red tensorial crece hacia la derecha a medida que avanza el tiempo.
MPS Evolution
S0┄┄┲━━━━┱┄┄┄┄┄┄┄┄┲━━━━┱┄
│ ┃ U1 ┃ ┃ U5 ┃
S1┄┄┺━━━━┹┄┲━━━━┱┄┺━━━━┹┄
│ ┃ U3 ┃
S2┄┄┲━━━━┱┄┺━━━━┹┄┲━━━━┱┄ ...
│ ┃ U2 ┃ ┃ U6 ┃
S3┄┄┺━━━━┹┄┲━━━━┱┄┺━━━━┹┄
│ ┃ U4 ┃
S4┄┄┄┄┄┄┄┄┄┺━━━━┹┄┄┄┄┄┄┄┄Sin embargo, en nuestro caso, queremos que dos motores de evolución temporal compartan un mismo estado. Para conseguirlo, podemos hacer que uno de ellos evolucione el estado desde la derecha (igual que antes, U#), pero que el segundo lo haga desde la izquierda (V#). Esto requiere que el estado también tenga enlaces que vayan en esa dirección, convirtiéndolo en un MPO bidimensional (M#) en lugar del MPS unidimensional de antes.
MPO Evolution
┄┲━━━━┱┄┄┄┄┄┄┄┄┲━━━━┱┄┄M0┄┄┲━━━━┱┄┄┄┄┄┄┄┄┲━━━━┱┄
┃ V5 ┃ ┃ V1 ┃ │ ┃ U1 ┃ ┃ U5 ┃
┄┺━━━━┹┄┲━━━━┱┄┺━━━━┹┄┄M1┄┄┺━━━━┹┄┲━━━━┱┄┺━━━━┹┄
┃ V3 ┃ │ ┃ U3 ┃
... ┄┲━━━━┱┄┺━━━━┹┄┲━━━━┱┄┄M2┄┄┲━━━━┱┄┺━━━━┹┄┲━━━━┱┄ ...
┃ V6 ┃ ┃ V2 ┃ │ ┃ U2 ┃ ┃ U6 ┃
┄┺━━━━┹┄┲━━━━┱┄┺━━━━┹┄┄M3┄┄┺━━━━┹┄┲━━━━┱┄┺━━━━┹┄
┃ V4 ┃ │ ┃ U4 ┃
┄┄┄┄┄┄┄┄┺━━━━┹┄┄┄┄┄┄┄┄┄M4┄┄┄┄┄┄┄┄┄┺━━━━┹┄┄┄┄┄┄┄┄overlap
abstract overlap(initial_state)
Calcula el solapamiento de este estado con el estado inicial proporcionado.
Una implementación concreta de este método debería generar un error TypeError si el objeto initial_state proporcionado no está soportado por el backend que lo implementa.
Parámetros
initial_state (Any) – el estado inicial con el que calcular el solapamiento.
Eleva
TypeError - si el estado inicial proporcionado tiene un tipo incompatible.
Devuelve
La superposición de este estado con el proporcionado.
Tipo de retorno