DAGDipendenza
class qiskit.dagcircuit.DAGDependency
Basi: object
Oggetto per rappresentare un circuito quantistico come un grafico aciclico diretto (DAG) attraverso le dipendenze delle operazioni (cioè la mancanza di commutazione).
I nodi del grafo sono operazioni rappresentate da porte quantistiche. Gli spigoli corrispondono alla non commutazione tra due operazioni (cioè a una dipendenza). Un bordo diretto dal nodo A al nodo B significa che l'operazione A non è in commutazione con l'operazione B. I metodi dell'oggetto consentono di costruire circuiti.
I nodi del grafo hanno i seguenti attributi: 'operazione', 'successori', 'predecessori'.
Esempio:
Circuito a campana senza misura.
┌───┐
qr_0: ┤ H ├──■──
└───┘┌─┴─┐
qr_1: ─────┤ X ├
└───┘Il DAG delle dipendenze per il circuito di cui sopra è rappresentato da due nodi. Il primo corrisponde alla porta di Hadamard, il secondo alla porta CNOT, poiché le porte non sono commutative e c'è un bordo tra i due nodi.
Riferimenti:
[1] Iten, R., Moyard, R., Metger, T., Sutter, D. e Woerner, S., 2020. Pattern matching esatto e pratico per l'ottimizzazione dei circuiti quantistici. arXiv:1909.05270
Creare una DAGDependency vuota.
Attributi
global_phase
Restituisce la fase globale del circuito.
Metodi
add_clbits
add_creg
add_op_node
add_op_node(operation, qargs, cargs)
Aggiungere un DAGDepNode al grafo e aggiornare i bordi.
Parametri
- operation (qiskit.circuit.Operation) – funzionamento come porta quantistica
- qargs (list[Qubit]) – elenco dei qubit su cui agisce l'operazione
- cargs (list[Clbit]) – elenco dei cavi standard a cui collegare
add_qreg
add_qubits
copy
copy()
Funzione per copiare un oggetto DAGDependency. :returns: una copia di un oggetto DAGDependency. :rtype: DAGDependency
depth
depth()
Restituisce la profondità del circuito. :returns: la profondità del circuito :rtype: int
direct_predecessors
direct_predecessors(node_id)
Id dei predecessori diretti di un dato nodo come elenco ordinato.
Parametri
node_id (int) – etichetta del nodo considerato.
Risultati
id dei predecessori diretti come elenco ordinato
Tipo di restituzione
Elenco
direct_successors
direct_successors(node_id)
Id dei successori diretti di un dato nodo come elenco ordinato.
Parametri
node_id (int) – etichetta del nodo considerato.
Risultati
id dei successori diretti come elenco ordinato
Tipo di restituzione
Elenco
draw
draw(scale=0.7, filename=None, style='color')
Disegna il grafo delle dipendenze DAG.
Questa funzione richiede pydot, che a sua volta richiede l'installazione di Graphviz.
Questa funzione richiamerà lo strumento Graphviz di sistema su un file contenente stringhe modificabili dall'utente (come le etichette dei gate o i nomi dei registri). Si raccomanda di richiamare questa funzione solo con dati di input attendibili.
Parametri
- scale (float) – fattore di scala
- filename (str) – percorso del file in cui salvare l'immagine (formato dedotto dal nome)
- style (str) – 'plain': Grafo B&W 'color' (predefinito): nodi di input/output/op colorati
Risultati
se nel notebook Jupyter e non si salva su file, altrimenti None.
Tipo di restituzione
IPython.display.Image
get_all_edges
get_all_edges()
Enumerazione di tutti i bordi.
Risultati
corrispondente all'etichetta.
Tipo di restituzione
Elenco
get_edges
get_edges(src_id, dest_id)
Enumerazione dei bordi tra due nodi tramite il metodo get_all\code(01) edge_data.
Parametri
Risultati
corrispondenti a tutti i bordi tra i due nodi.
Tipo di restituzione
Elenco
get_in_edges
get_in_edges(node_id)
Enumerazione di tutti i bordi in entrata per un dato nodo.
Parametri
node_id (int) – etichetta del nodo considerato.
Risultati
corrispondenti dati dei bordi in entrata.
Tipo di restituzione
Elenco
get_node
get_node(node_id)
Parametri
node_id (int) – etichetta del nodo considerato.
Risultati
corrispondente all'etichetta.
Tipo di restituzione
nodo
get_nodes
get_out_edges
get_out_edges(node_id)
Enumerazione di tutti i bordi uscenti per un dato nodo.
Parametri
node_id (int) – etichetta del nodo considerato.
Risultati
i dati corrispondenti ai bordi in uscita.
Tipo di restituzione
Elenco
predecessors
predecessors(node_id)
Id dei predecessori di un dato nodo come elenco ordinato.
Parametri
node_id (int) – etichetta del nodo considerato.
Risultati
tutti i predecessori id come elenco ordinato
Tipo di restituzione
Elenco
replace_block_with_op
replace_block_with_op(node_block, op, wire_pos_map, cycle_check=True)
Sostituire un blocco di nodi con un singolo nodo.
Viene utilizzato per consolidare un blocco di DAGDepNodes in un'unica operazione. Un esempio tipico è rappresentato da un blocco di porte CX e SWAP consolidate in un sito LinearFunction. Questa funzione è un adattamento di una funzione simile di DAGCircuit.
È importante che tale consolidamento preservi le ipotesi di commutatività presenti in DAGDependency. A titolo di esempio, si supponga che ogni nodo di un blocco [A, B, C, D] commuta con un altro nodo E. Sia F il nodo consolidato, F = A o B o C o D. Allora anche F commuta con E e quindi il risultato della sostituzione di [A, B, C, D] con F risulta in una DAGDipendenza valida. Cioè, qualsiasi deduzione sulla commutatività in DAGDipendenza consolidata è corretta. D'altra parte, supponiamo che almeno uno dei nodi, ad esempio B, non sia commutativo con E. Allora la DAGDependency consolidata implicherebbe che F non commuta con E. Anche se F ed E potrebbero effettivamente fare i pendolari, è comunque lecito supporre che non lo facciano. In altre parole, l'attuale implementazione del consolidamento può portare a risultati non ottimali ma non errati.
Parametri
- node_block (List[DAGDepNode]) – Un elenco di nodi dag che rappresenta il blocco di nodi da sostituire
- op (qiskit.circuit.Operation) – L'operazione di sostituzione del blocco con
- wire_pos_map (Dict[Qubit, int]) – Il dizionario che associa il qarg alla posizione. Ciò è necessario per ricostruire l'ordine qarg su più gate nel nodo combinato a singola operazione.
- cycle_check (bool) – Se impostato su True, questo metodo controlla se la sostituzione del
node_blockfornito con un singolo nodo introdurrebbe un ciclo (che invaliderebbe ilDAGDependency) e solleva unDAGDependencyErrorse viene introdotto un ciclo. Questo controllo comporta una penalità sul tempo di esecuzione. Se si può garantire che l'inputnode_blocksia un blocco contiguo e non introduca un ciclo quando viene contratto a un singolo nodo, si può impostareFalseper migliorare le prestazioni di runtime di questo metodo.
Aumenti
DAGDependencyError – se cycle_check è impostato su True e la sostituzione del blocco specificato introduce un ciclo, oppure se node_block è vuoto.
size
successors
successors(node_id)
Id dei successori di un dato nodo come elenco ordinato.
Parametri
node_id (int) – etichetta del nodo considerato.
Risultati
tutti gli id dei successori come elenco ordinato
Tipo di restituzione
Elenco