Skip to main content
IBM Quantum Platform

StarPreRouting

class qiskit.transpiler.passes.StarPreRouting

GitHub

Basi: TransformationPass

Eseguire il pre-routing da stella a lineare

Questo passaggio è un passaggio di ottimizzazione logica che riscrive qualsiasi sottocircuito di connettività a stella esclusivamente 2q gate come un equivalente di connettività lineare con swap.

Ad esempio:

from qiskit.circuit import QuantumCircuit
from qiskit.transpiler.passes import StarPreRouting

qc = QuantumCircuit(10)
qc.h(0)
qc.cx(0, range(1, 5))
qc.h(9)
qc.cx(9, range(8, 4, -1))
qc.measure_all()
StarPreRouting()(qc).draw("mpl")
Schema del circuito prodotto dal codice precedente.

Questo passaggio è stato ispirato da un passaggio simile descritto nella Sezione IV di: C. Campbell et al, "Superstaq: Deep Optimization of Quantum Programs", 2023 IEEE International Conference on Quantum Computing and Engineering (QCE), Bellevue, WA, USA, 2023, pp. 1020-1032, doi: 10.1109/QCE57702.2023.00116.


Attributi

is_analysis_pass

Controlla se il passaggio è un passaggio di analisi.

Se il passo è un AnalysisPass,, significa che il passo può analizzare il DAG e scrivere i risultati di tale analisi nel set di proprietà. Questo tipo di passaggio non consente di modificare il DAG.

is_transformation_pass

Controlla se il passaggio è un passaggio di trasformazione.

Se il passaggio è un TransformationPass,, significa che il passaggio può manipolare il DAG, ma non può modificare il set di proprietà (ma può essere letto).


Metodi

collect_all_matching_blocks

collect_all_matching_blocks(dag, min_block_size=2)

GitHub

Raccoglie tutti i blocchi che corrispondono a una determinata funzione di filtraggio filter_fn. In questo modo si trova iterativamente il blocco più grande che non corrisponde al filtro_fn, poi il blocco più grande che corrisponde al filtro_fn e così via, finché non rimangono più nodi non raccolti. Intuitivamente, trovare blocchi più grandi di nodi non corrispondenti aiuta a trovare successivamente blocchi più grandi di nodi corrispondenti. L'opzione min_block_size specifica il numero minimo di porte nel blocco affinché il blocco venga raccolto.

Per impostazione predefinita, i blocchi vengono raccolti nella direzione dagli ingressi verso le uscite del circuito. L'opzione collect_from_back permette di cambiare questa direzione, cioè di raccogliere i blocchi dalle uscite verso gli ingressi del circuito.

Restituisce solo l'elenco dei blocchi corrispondenti.

collect_matching_block

collect_matching_block(dag, filter_fn)

GitHub

Raccoglie in modo iterativo il blocco più grande di nodi di ingresso (cioè i nodi con _in_degree uguale a 0) che corrispondono a una determinata funzione di filtraggio. Ad esempio, è possibile raccogliere blocchi di porte swap, blocchi di porte lineari (CX e SWAP), blocchi di porte Clifford, blocchi di porte a un qubit, blocchi di porte a due qubit, ecc. Qui "iterativamente" significa che una volta raccolto un nodo, il _in_degree di ogni suo immediato successore viene diminuito di 1, consentendo ad altri nodi di diventare input e di essere idonei alla raccolta nel blocco corrente. Restituisce il blocco di nodi raccolti.

determine_star_blocks_processing

determine_star_blocks_processing(dag, min_block_size)

GitHub

Restituisce i blocchi stella in dag e l'ordine di elaborazione dei nodi all'interno di questi blocchi stella :param dag: un dag su cui determinare i blocchi stella. :type dag: DAGCircuit o DAGDependency :param min_block_size: numero minimo di porte a due qubit in un blocco stellare. :type min_block_size: int

Risultati

un elenco di blocchi stella nel dag dato Union[ [ListDAGOpNode], [ListDAGDepNode] ]: un elenco di operazioni che specifica l'ordine di elaborazione

Tipo di restituzione

[ElencoBloccoStar]

Parametri

execute

execute(passmanager_ir, state, callback=None)

GitHub

Eseguire l'attività di ottimizzazione per l'IR Qiskit in ingresso.

Parametri

  • passmanager_ir (DAGCircuit) – Qiskit IR da ottimizzare.
  • state (DAGCircuit) – Stato associato all'esecuzione del flusso di lavoro da parte dello stesso gestore dei passaggi.
  • callback (Callable[[Task, DAGCircuit, PropertySet, float, int], None] | None) – Una funzione di callback che viene chiamata ad ogni esecuzione di un'attività di ottimizzazione.

Risultati

Qiskit IR ottimizzato e stato del flusso di lavoro.

Tipo di restituzione

tuple [ DAGCircuit, PassManagerState ]

name

name()

GitHub

Nome del passo.

Tipo di restituzione

STR

run

run(dag)

GitHub

Eseguire un passaggio sul circuito DAG. Questo viene implementato dallo sviluppatore del passaggio.

Parametri

dag - il dag su cui viene eseguito il passaggio.

Aumenti

NotImplementedError - quando questo viene lasciato non implementato per un passaggio.

star_preroute

star_preroute(dag, blocks, processing_order)

GitHub

Restituisce i blocchi stella nel dag e l'ordine di elaborazione dei nodi all'interno di questi blocchi stella :param dag: un dag su cui deve essere eseguito il pre-instradamento a stella. :type dag: DAGCircuit o DAGDependency :param blocks: un elenco di blocchi stella nel dag dato. :type blocks: [ListStarBlock] :param processing_order: un elenco di operazioni che specificano :type processing_order: Union[ [ListDAGOpNode], [ListDAGDepNode] ] :param ordine di elaborazione:

Risultati

un dag che specifica il circuito pre-routing qubit_mapping: la mappatura finale dei qubit dopo il pre-routing

Tipo di restituzione

nuovo_dag

update_status

update_status(state, run_state)

GitHub

Aggiornare lo stato del flusso di lavoro.

Parametri

  • state (PassManagerState) – Passare lo stato del gestore da aggiornare.
  • run_state (RunState) – Stato di completamento dell'attività corrente.

Risultati

Stato aggiornato del gestore dei passaggi.

Tipo di restituzione

PassManagerState

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