Skip to main content
IBM Quantum Platform

StarPreRouting

class qiskit.transpiler.passes.StarPreRouting

GitHub

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")
Schéma de circuit produit par le code précédent.

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)

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

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

GitHub

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

execute

execute(passmanager_ir, state, callback=None)

GitHub

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

tuple [ DAGCircuit, PassManagerState ]

name

name()

GitHub

Nom du laissez-passer.

Type de retour

str

run

run(dag)

GitHub

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)

GitHub

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)

GitHub

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

PassManagerState

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