StarPreRouting
class qiskit.transpiler.passes.StarPreRouting
Bases : TransformationPass
Pré-routage de l'étoile vers le linéaire
Cette passe est une passe d'optimisation logique qui réécrit n'importe quel sous-circuit de connectivité en étoile à porte uniquement 2q en un équivalent de connectivité linéaire avec des permutations.
Par exemple :
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")![]()
Cette passe a été inspirée par une passe similaire décrite dans la section IV de : 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.
Attributs
is_analysis_pass
Vérifier si la passe est une passe d'analyse.
Si le passe est un AnalysisPass,, cela signifie qu'il peut analyser le DAG et écrire les résultats de cette analyse dans l'ensemble de propriétés. Les modifications sur le DAG ne sont pas autorisées par ce type de passe.
is_transformation_pass
Vérifier si le laissez-passer est un laissez-passer de transformation.
Si la passe est une TransformationPass,, cela signifie qu'elle peut manipuler le DAG, mais qu'elle ne peut pas modifier l'ensemble des propriétés (mais qu'elle peut les lire).
Méthodes
collect_all_matching_blocks
collect_all_matching_blocks(dag, min_block_size=2)
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. L'option min_block_size spécifie le nombre minimum de portes dans le bloc pour que celui-ci soit collecté.
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(dag, filter_fn)
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 s'agit 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 pour être collectés dans le bloc actuel. Renvoie le bloc de nœuds collectés.
determine_star_blocks_processing
determine_star_blocks_processing(dag, min_block_size)
Retourne les blocs en étoile dans le dag et l'ordre de traitement des nœuds dans ces blocs en étoile :param dag : un dag sur lequel les blocs en étoile doivent être déterminés. :type dag : DAGCircuit ou DAGDépendance :param min\block_size : nombre minimum de portes à deux qubits dans un bloc étoile. :type min\block_size : int
Retours
union[ [ListDAGOpNode], [ListDAGDepNode] ] : une liste d'opérations spécifiant l'ordre de traitement
Type de retour
[ListStarBlock]
Paramètres
- dag (DAGCircuit |DAGDependency)
- min_block_size (int)
execute
execute(passmanager_ir, state, callback=None)
Exécuter la tâche d'optimisation pour l'entrée Qiskit IR.
Paramètres
- passmanager_ir (DAGCircuit) – IR Qiskit à optimiser.
- state (DAGCircuit) – État lié à l'exécution du flux de travail par le gestionnaire de passes lui-même.
- callback (Callable[[Task, DAGCircuit, PropertySet, float, int], None] | None) – Une fonction de rappel qui est appelée à chaque exécution d'une tâche d'optimisation.
Retours
Qiskit IR optimisé et état du flux de travail.
Type de retour
name
run
run(dag)
Effectuer une passe sur le circuit DAG. C'est le développeur du laissez-passer qui s'en charge.
Paramètres
dag - le dag sur lequel la passe est exécutée.
Augmentations
NotImplementedError - lorsqu'il n'est pas mis en œuvre pour un passage.
star_preroute
star_preroute(dag, blocks, processing_order)
Retourne les blocs en étoile dans le dag et l'ordre de traitement des noeuds dans ces blocs en étoile :param dag : un dag sur lequel le pré-acheminement en étoile doit être effectué. :type dag : DAGCircuit ou DAGDependency :param blocks : une liste de blocs en étoile dans le dag donné. :type blocks : [ListStarBlock] :param processing_order : une liste d'opérations spécifiant :type processing_order : Union[ [ListDAGOpNode], [ListDAGDepNode] ] :param processing_order :
Retours
un dag spécifiant le circuit préacheminé qubit_mapping : la cartographie finale du qubit après le préacheminement
Type de retour
nouveau_dag
update_status
update_status(state, run_state)
Mettre à jour le statut du flux de travail.
Paramètres
- state (PassManagerState) – Transmettre l'état du gestionnaire à mettre à jour.
- run_state (RunState) – Statut d'achèvement de la tâche en cours.
Retours
Mise à jour de l'état du gestionnaire de passe.
Type de retour