Skip to main content
IBM Quantum Platform

BlockCollector

class qiskit.dagcircuit.BlockCollector(dag)

GitHub

Bases : object

Cette classe met en œuvre diverses stratégies permettant de diviser un DAG (graphe acyclique dirigé) en blocs de nœuds répondant à certains critères. Cela fonctionne aussi bien avec les DAGCircuit représentations DAGDependency et d'un graphe orienté non cyclique (DAG), cette dernière tenant compte de la commutativité entre les nœuds.

La collecte de nœuds à partir de DAGDépendance conduit généralement à des résultats plus optimaux, mais elle est plus lente, car elle nécessite la construction préalable d'un DAGDépendance. Ainsi, DAGCircuit devrait être utilisé avec des paramètres de transpilation inférieurs, et DAGDependency devrait être utilisé avec des paramètres de transpilation supérieurs.

En général, il existe plusieurs façons de collecter les blocs maximaux. Les approches utilisées ici sont du type "à partir des nœuds d'entrée d'un DAG, collecter avec avidité le plus grand bloc de nœuds correspondant à certains critères". Pour plus de détails, voir https://github.com/Qiskit/qiskit/issues/5775.

Paramètres

dag (Union[DAGCircuit, DAGDependency]) – Le DAG d'entrée.

Augmentations

DAGCircuitError – l'objet d'entrée n'est pas un DAG.


Méthodes

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)

GitHub

Rassemble tous les blocs qui correspondent à une fonction de filtrage donnée filter_fn. Il s'agit de trouver itérativement le plus grand bloc qui ne correspond pas à filter_fn, puis le plus grand bloc qui correspond à filter_fn, et ainsi de suite, jusqu'à ce qu'il n'y ait plus de nœuds non collectés. Intuitivement, la recherche de blocs plus importants de nœuds non concordants permet de trouver ultérieurement des blocs plus importants de nœuds concordants.

Une fois les blocs collectés, ils peuvent être affinés de manière facultative. L'option split_blocks permet de diviser les blocs collectés en sous-blocs sur des sous-ensembles de qubits disjoints. Cette option split_layers permet de diviser les blocs collectés en couches d'instructions qui ne se chevauchent pas. L'option min_block_size spécifie le nombre minimum de portes dans le bloc pour que celui-ci soit collecté. L'option max_block_width spécifie le nombre maximal de qubits sur lesquels un bloc peut être défini.

Par défaut, les blocs sont collectés dans le sens des entrées vers les sorties du circuit. L'option collect_from_back permet de changer cette direction, c'est-à-dire de rassembler les blocs des sorties vers les entrées du circuit.

Renvoie uniquement la liste des blocs correspondants.

collect_matching_block

collect_matching_block(filter_fn, max_block_width)

GitHub

Collecte itérativement le plus grand bloc de nœuds d'entrée (c'est-à-dire les nœuds dont l'adresse _in_degree est égale à 0) correspondant à une fonction de filtrage donnée. Il peut s'agir, par exemple, de rassembler des blocs de portes à permutation, des blocs de portes linéaires (CX et SWAP), des blocs de portes de Clifford, des blocs de portes à un qubit, des blocs de portes à deux qubits, etc. Le terme "itératif" signifie qu'une fois qu'un nœud est collecté, le site _in_degree de chacun de ses successeurs immédiats est diminué de 1, ce qui permet à un plus grand nombre de nœuds d'entrer en jeu et d'être éligibles à la collecte dans le bloc actuel. Renvoie le bloc de nœuds collectés.

Paramètres

Type de retour

liste [ DAGOpNode | DAGDepNode ]

Cette page a-t-elle été utile ?
Signaler un bogue, une coquille ou proposer du contenu sur GitHub.