UCJ
class UCJ(ucj_op)
Basi: FermionicGate
Implementa l'ansatz del cluster unitario (locale) di Jastrow ((L)UCJ).
Un operatore di Jastrow di tipo cluster unitario ha la forma
dove ogni è un OrbitalRotation, ogni è un operatore di Coulomb diagonale
e rappresenta una rotazione orbitale finale facoltativa. Il numero di termini corrisponde al numero di ripetizioni dell'ansatz.
L'operatore stesso è stato creato da ffsim, e questo gate lo trasforma in un FermionicCircuit. Questa divisione dei compiti è voluta: ffsim gestisce la parte matematica dell’ansatz (doppia fattorizzazione delle ampie he, la variante compressa, il raggruppamento dei vettori di parametri guidato da un ottimizzatore variazionale), mentre questo gate esprime il risultato sotto forma di modi fermionici, in modo che il transpiler possa convertirlo tramite qualsiasi codifica da fermioni a qubit. Il fatto di passare un operatore ffsim senza modificarlo è ciò che garantisce la coerenza tra i due; si veda la guida alle relazioni ffsim.
Accetta uno qualsiasi dei tre operatori UCJ di ffsim, il cui tipo determina la variante di spin e il numero di modi su cui agisce questo gate:
UCJOpSpinBalancedagisce sui modi a spin2 * norba blocchi, con una rotazione orbitale condivisa da entrambi i settori di spin e matrici di Coulomb diagonali[alpha-alpha, alpha-beta](beta-beta riutilizza alfa-alfa, beta-alfa riutilizza alfa-beta).UCJOpSpinUnbalancedagisce sui modi di spin2 * norba blocchi, con rotazioni[alpha, beta]e matrici[alpha-alpha, alpha-beta, beta-beta]indipendenti.UCJOpSpinlessagisce sui modinorbsenza spin.
La teoria di ffsim è UCJOpSpinless valida anche su un settore con spin, dove i suoi tensori agiscono su entrambi i settori di spin senza alcun termine di spin incrociato. La larghezza di un gate deve essere fissata al momento della sua costruzione, pertanto questo gate legge sempre quel tipo come un registro a norbmodalità singola. Costruisci l'operazione di lettura a due registri come un il UCJOpSpinBalanced cui blocco alfa-beta è zero, che è lo stesso operatore.
ffsim non supporta Windows (a causa della sua dipendenza incondizionata da PySCF ), quindi questo gate richiede il comando extra ffsim (pip install "qiskit-fermions[ffsim]") e non è disponibile su tale sistema. Utilizza WSL su Windows.
Si tratta di un prototipo in fase iniziale di sviluppo. Si prega di prestare attenzione alle modifiche all'interfaccia che potrebbero essere apportate senza preavviso durante la fase di sviluppo pre-rilascio di questo pacchetto.
>>> import ffsim
>>> from qiskit_fermions.circuit.library import UCJ
>>> ucj_op = ffsim.random.random_ucj_op_spin_balanced(3, n_reps=1, seed=1234)
>>> gate = UCJ(ucj_op)
>>> gate.norb, gate.num_modes, gate.n_reps
(3, 6, 1)
L'inizializzazione di un'istanza di questo gate può essere effettuata utilizzando l'argomento indicato di seguito.
Parametri
ucj_op (Any) – l'operatore UCJ di ffsim da utilizzare per costruire il circuito, ovvero uno tra UCJOpSpinBalanced, o UCJOpSpinUnbalanced UCJOpSpinless. Il suo tipo determina la variante di spin e il numero di modi su cui agisce questo gate (vedere la stringa di documentazione della classe).
Aumenti
- MissingOptionalLibraryError – se non
ffsimè installato. - TypeError – se non
ucj_opè uno dei tre tipi di operatore UCJ di ffsim.
Attributi
n_reps
Il numero di ripetizioni dell'ansatz.
norb
Il numero degli orbitali spaziali.
ucj_op
L'operatore ffsim UCJ su cui si basa il circuito di questo gate.
Metodi del protocollo
_apply_unitary_placed_
_apply_unitary_placed_(vec, norb, nelec, copy, freg_indices)
Applica l'ansatz dopo aver mappato le sue modalità sulle modalità globali del vettore.
Questo crea la definizione del gate (le rotazioni orbitali per ripetizione e le evoluzioni diagonali di Coulomb) e la applica a vec, con il circuito di definizione posizionato sui modi globali freg_indices (ciascuna delle sue istruzioni viene riassegnata ai modi assoluti corrispondenti). Vedi _define() per la sequenza esatta delle porte.
Parametri
- vec (ndarray) – il vettore di stato su cui agire.
- norb (int) – il numero di orbitali spaziali del vettore di stato globale.
- nelec (int |tuple[int, int]) – o un singolo numero intero per un sistema senza spin, oppure una coppia di numeri interi che indicano il numero di fermioni con spin alfa e beta.
- copy (bool) – se copiare il vettore prima di eseguire operazioni su di esso.
- freg_indices (list[int]) – gli indici delle modalità assolute (globali) a cui si mappano le modalità locali di questo gate.
Risultati
Il vettore trasformato.
Tipo di restituzione