Backend
qiskit_addon_mpf.backends
Backend opzionali per l'algoritmo DynamicMPF algoritmo.
Disponibilità
La possibilità di utilizzare un determinato backend dipende dalla disponibilità della libreria di rete tensoriale sottostante. Questo può essere facilmente affermato in fase di esecuzione utilizzando i seguenti indicatori:
HAS_QUIMB
Indica se la dipendenza opzionale quimb è installata.
HAS_TENPY
Indica se la dipendenza opzionale tenpy è installata.
Backend
A seconda della disponibilità (vedi sopra), sono disponibili i seguenti backend:
quimb_tebd | A quimb-basato sul backend TEBD. |
quimb_layers | Un backend a evoluzione temporale a strati che utilizza quimb. |
quimb_circuit | Un backend ad evoluzione temporale basato su circuiti che utilizza quimb. |
tenpy_tebd | A tenpy-basato sul backend TEBD. |
tenpy_layers | Un backend a evoluzione temporale a strati che utilizza tenpy. |
Interfaccia
L'interfaccia implementata da uno qualsiasi di questi backend opzionali è costituita dalle seguenti classi:
Evolver
class Evolver
Basi: ABC
L'interfaccia per gli algoritmi di evoluzione temporale utilizzati all'interno di DynamicMPF.
Questa interfaccia di evoluzione temporale è utilizzata dai programmi DynamicMPF.lhs e DynamicMPF.rhs e dovrebbe far evolvere nel tempo un oggetto State sotto il suo cappuccio. Il meccanismo esatto dell'algoritmo è descritto in dettaglio in DynamicMPF, State, e setup_dynamic_lse().
conjugate
abstract property
Tipo: bool
Restituisce se questa istanza di time-evolver agisce sul lato destro.
evolved_time
abstract property
Tipo: float
Restituisce il tempo di evoluzione corrente.
step
abstract step()
Eseguire un singolo passo temporale di questo algoritmo di evoluzione temporale.
Questo dovrebbe agire sull'oggetto referenziato internamente State (per il quale questa interfaccia non prescrive alcun nome). Se questa istanza dell'algoritmo di evoluzione temporale debba far evolvere il State dal lato destro o sinistro, dipende dal valore di conjugate.
Tipo di restituzione
Nessuna
Stato
class State
Basi: ABC
L'interfaccia per il file DynamicMPF.evolution_state.
Questo stato di evoluzione temporale è condiviso tra le istanze di LHS e RHS Evolver dell'istanza DynamicMPF istanza. Nella maggior parte dei casi in cui un backend concreto che implementa questa interfaccia è basato su reti tensoriali, questo stato sarà un operatore di prodotto matriciale (MPO). Questo perché la maggior parte degli algoritmi di evoluzione temporale normalmente evolve uno stato prodotto da una matrice (MPS), come mostrato nella figura seguente, in cui i blocchi di evoluzione temporale (U#) vengono applicati successivamente a un MPS unidimensionale (S#). In questo caso, la rete tensoriale cresce verso destra con il passare del tempo.
MPS Evolution
S0┄┄┲━━━━┱┄┄┄┄┄┄┄┄┲━━━━┱┄
│ ┃ U1 ┃ ┃ U5 ┃
S1┄┄┺━━━━┹┄┲━━━━┱┄┺━━━━┹┄
│ ┃ U3 ┃
S2┄┄┲━━━━┱┄┺━━━━┹┄┲━━━━┱┄ ...
│ ┃ U2 ┃ ┃ U6 ┃
S3┄┄┺━━━━┹┄┲━━━━┱┄┺━━━━┹┄
│ ┃ U4 ┃
S4┄┄┄┄┄┄┄┄┄┺━━━━┹┄┄┄┄┄┄┄┄Tuttavia, nel nostro caso, vogliamo che due motori di evoluzione temporale condividano un unico stato. Per ottenere questo risultato, possiamo fare in modo che uno di loro evolva lo stato da destra (proprio come prima, U#), ma che il secondo evolva lo stato da sinistra (V#). Ciò richiede che lo stato abbia anche legami che vanno in quella direzione, rendendolo un MPO bidimensionale (M#) anziché l'MPS unidimensionale di prima.
MPO Evolution
┄┲━━━━┱┄┄┄┄┄┄┄┄┲━━━━┱┄┄M0┄┄┲━━━━┱┄┄┄┄┄┄┄┄┲━━━━┱┄
┃ V5 ┃ ┃ V1 ┃ │ ┃ U1 ┃ ┃ U5 ┃
┄┺━━━━┹┄┲━━━━┱┄┺━━━━┹┄┄M1┄┄┺━━━━┹┄┲━━━━┱┄┺━━━━┹┄
┃ V3 ┃ │ ┃ U3 ┃
... ┄┲━━━━┱┄┺━━━━┹┄┲━━━━┱┄┄M2┄┄┲━━━━┱┄┺━━━━┹┄┲━━━━┱┄ ...
┃ V6 ┃ ┃ V2 ┃ │ ┃ U2 ┃ ┃ U6 ┃
┄┺━━━━┹┄┲━━━━┱┄┺━━━━┹┄┄M3┄┄┺━━━━┹┄┲━━━━┱┄┺━━━━┹┄
┃ V4 ┃ │ ┃ U4 ┃
┄┄┄┄┄┄┄┄┺━━━━┹┄┄┄┄┄┄┄┄┄M4┄┄┄┄┄┄┄┄┄┺━━━━┹┄┄┄┄┄┄┄┄overlap
abstract overlap(initial_state)
Calcolare la sovrapposizione di questo stato con lo stato iniziale fornito.
Un'implementazione concreta di questo metodo dovrebbe sollevare un problema TypeError se l'oggetto initial_state fornito non è supportato dal backend che lo implementa.
Parametri
initial_state (Any) – lo stato iniziale con cui calcolare la sovrapposizione.
Aumenti
TypeError - se lo stato iniziale fornito ha un tipo incompatibile.
Risultati
La sovrapposizione di questo stato con quello fornito.
Tipo di restituzione