BlockCollector
class qiskit.dagcircuit.BlockCollector(dag)
Basi: object
Questa classe implementa diverse strategie per suddividere un DAG (grafico aciclico diretto) in blocchi di nodi che soddisfano determinati criteri. Funziona sia con la rappresentazione DAGCircuit che con DAGDependency quella di un DAG, dove la seconda tiene conto della commutatività tra i nodi.
La raccolta di nodi da DAGDependency porta generalmente a risultati più ottimali, ma è più lenta, poiché richiede la costruzione preliminare di una DAGDependency. Pertanto, DAGCircuit dovrebbe essere usato con impostazioni di transpiler più basse e DAGDependency con impostazioni di transpiler più alte.
In generale, esistono più modi per raccogliere i blocchi massimi. Gli approcci utilizzati sono del tipo "partendo dai nodi di ingresso di un DAG, si raccoglie avidamente il più grande blocco di nodi che corrisponde a determinati criteri". Per ulteriori dettagli, vedere https://github.com/Qiskit/qiskit/issues/5775.
Parametri
dag (Union[DAGCircuit, DAGDependency]) – Il DAG di ingresso.
Aumenti
DAGCircuitError – l'oggetto di input non è un DAG.
Metodi
collect_all_matching_blocks
collect_all_matching_blocks(filter_fn, split_blocks=True, min_block_size=2, split_layers=False, collect_from_back=False, max_block_width=None)
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.
Dopo che i blocchi sono stati raccolti, possono essere raffinati facoltativamente. L'opzione split_blocks consente di suddividere i blocchi raccolti in sottoblocchi su sottoinsiemi di qubit disgiunti. L'opzione split_layers consente di suddividere i blocchi raccolti in livelli di istruzioni non sovrapposte. L'opzione min_block_size specifica il numero minimo di porte nel blocco affinché il blocco venga raccolto. L'opzione max_block_width specifica il numero massimo di qubit su cui è possibile definire un blocco.
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(filter_fn, max_block_width)
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.
Parametri
Tipo di restituzione
elenco [ DAGOpNode | DAGDepNode ]