Skip to main content
IBM Quantum Platform

DAGDipendenza

class qiskit.dagcircuit.DAGDependency

GitHub

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_clbits(clbits)

GitHub

Aggiungere i singoli fili del clbit.

add_creg

add_creg(creg)

GitHub

Aggiungere clbit in un registro classico.

add_op_node

add_op_node(operation, qargs, cargs)

GitHub

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_qreg(qreg)

GitHub

Aggiungere qubit in un registro quantistico.

add_qubits

add_qubits(qubits)

GitHub

Aggiungere i fili dei singoli qubit.

copy

copy()

GitHub

Funzione per copiare un oggetto DAGDependency. :returns: una copia di un oggetto DAGDependency. :rtype: DAGDependency

depth

depth()

GitHub

Restituisce la profondità del circuito. :returns: la profondità del circuito :rtype: int

direct_predecessors

direct_predecessors(node_id)

GitHub

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)

GitHub

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')

GitHub

Disegna il grafo delle dipendenze DAG.

Questa funzione richiede pydot, che a sua volta richiede l'installazione di Graphviz.

Avvertenza

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()

GitHub

Enumerazione di tutti i bordi.

Risultati

corrispondente all'etichetta.

Tipo di restituzione

Elenco

get_edges

get_edges(src_id, dest_id)

GitHub

Enumerazione dei bordi tra due nodi tramite il metodo get_all\code(01) edge_data.

Parametri

  • src_id (int) – etichetta del primo nodo.
  • dest_id (int) – etichetta del secondo nodo.

Risultati

corrispondenti a tutti i bordi tra i due nodi.

Tipo di restituzione

Elenco

get_in_edges

get_in_edges(node_id)

GitHub

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)

GitHub

Parametri

node_id (int) – etichetta del nodo considerato.

Risultati

corrispondente all'etichetta.

Tipo di restituzione

nodo

get_nodes

get_nodes()

GitHub

Risultati

iteratore su tutti i nodi.

Tipo di restituzione

generatore (dict )

get_out_edges

get_out_edges(node_id)

GitHub

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)

GitHub

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)

GitHub

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_block fornito con un singolo nodo introdurrebbe un ciclo (che invaliderebbe il DAGDependency) e solleva un DAGDependencyError se viene introdotto un ciclo. Questo controllo comporta una penalità sul tempo di esecuzione. Se si può garantire che l'input node_block sia un blocco contiguo e non introduca un ciclo quando viene contratto a un singolo nodo, si può impostare False per 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

size()

GitHub

Restituisce il numero di porte del circuito

successors

successors(node_id)

GitHub

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

to_retworkx

to_retworkx()

GitHub

Restituisce la DAGDependency in formato retworkx.

topological_nodes

topological_nodes()

GitHub

Rendere i nodi in ordine topologico.

Risultati

nodo in ordine topologico.

Tipo di restituzione

generatore (DAGNode )

Questa pagina è stata utile?
Segnala un bug, un errore di battitura o richiedi contenuti su GitHub.