VF2PostLayout
class qiskit.transpiler.passes.VF2PostLayout(*args, **kwargs)
Bases : AnalysisPass
Une passe pour améliorer une présentation existante après transposition d'un circuit sur un graphe de couplage, en tant que problème d'isomorphisme de sous-graphes, résolu par VF2++.
Contrairement à la passe de VF2Layout qui est conçu pour trouver un schéma initial pour un circuit au début du processus de transpilation, ce processus est conçu pour essayer de trouver un meilleur schéma une fois la transpilation terminée. La phase initiale de mise en page du transpileur ne dispose pas d'autant d'informations qu'après la transpilation. Ce laissez-passer est conçu pour être jumelé dans une filière similaire à celle des laissez-passer de mise en page. Cette étape consiste à retirer tous les fils inutilisés du circuit, à utiliser VF2 pour trouver un sous-graphe dans le graphe de couplage sur lequel le circuit peut fonctionner avec une meilleure fidélité, puis à mettre à jour le schéma du circuit pour utiliser les nouveaux qubits. L'algorithme utilisé dans cette passe est décrit dans le document suivant arXiv:2209.15512.
Si une solution est trouvée, cela signifie qu'il existe un schéma d'erreur inférieur pour le circuit. Si une solution est trouvée, la disposition sera définie dans l'ensemble de propriétés comme property_set['post_layout']. Toutefois, si aucune solution ou aucune meilleure solution n'est trouvée, aucune property_set['post_layout'] n'est définie. Le motif d'arrêt est défini à l'adresse property_set['VF2PostLayout_stop_reason'] dans tous les cas et sera l'une des valeurs énumérées à l'adresse VF2PostLayoutStopReason , qui a les valeurs suivantes :
"solution found": Si une solution a été trouvée."no better solution found": Si la disposition initiale du circuit est la meilleure solution."nonexistent solution": Si aucune solution n'a été trouvée.">2q gates in basis": Si VF2PostLayout ne peut pas travailler avec la base du circuit.
Par défaut, cette passe construit une carte de notation heuristique basée sur les taux d'erreur dans le site target. Toutefois, des analyses peuvent être effectuées avant ce passage et définir vf2_avg_error_map dans l'ensemble de propriétés avec une instance ErrorMap . Si une valeur est NaN , elle est traitée comme un bord idéal :
from qiskit.transpiler.passes.layout.vf2_utils import ErrorMap
error_map = ErrorMap(3)
error_map.add_error((0, 0), 0.0024)
error_map.add_error((0, 1), 0.01)
error_map.add_error((1, 1), 0.0032)qui représente la carte des erreurs pour une cible à 2 qubits, où le taux d'erreur moyen de 1q est de 0.0024 sur le qubit 0 et de 0.0032 sur le qubit 1. Le taux d'erreur moyen de 2q pour les portes qui opèrent sur (0, 1) est alors de 0.01 et (1, 0) n'est pas pris en charge par la cible. Elle sera utilisée pour la notation si elle est définie comme la clé vf2_avg_error_map dans l'ensemble des propriétés lors de l'exécution de VF2PostLayout est exécuté.
Initialisation d'une instance de passe VF2PostLayout
Paramètres
- target (Target) – Une cible représentant l'appareil dorsal sur lequel
VF2PostLayoutdoit être exécuté. - seed (int) – Définit la graine du PRNG. -1 Cela signifie qu'il n'y a pas de mélange de nœuds.
- call_limit (int) – Le nombre de visites d'état à tenter dans chaque exécution de VF2.
- time_limit (float) – Le temps total d'exécution en secondes
VF2PostLayout - strict_direction (bool) – Si la passe est configurée pour suivre la direction stricte dans le graphique de couplage. Si cette valeur est fixée à false, le pass traitera toute arête du graphe de couplage comme une arête faible et le graphe d'interaction sera non orienté. Aux fins de l'évaluation des schémas, le taux d'erreur moyen pour chaque qubit et chaque lien 2q sera utilisé. Cela permet d'exécuter la passe avant la traduction de la base et de travailler avec toutes les opérations 1q et 2q. Cependant, si
strict_direction=Truela passe s'attend à ce que l'objet d'entréeDAGCircuitsoitrun()soit dans le jeu d'instructions cible. - max_trials (int) – Le nombre maximum d'essais à effectuer VF2 pour trouver une disposition. Une valeur de
0(valeur par défaut) signifie "illimité".
Augmentations
TypeError - Au moment de l'exécution, si target n'est pas fourni.
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
execute
execute(passmanager_ir, state, callback=None)
Exécuter la tâche d'optimisation pour l'entrée Qiskit IR.
Paramètres
- passmanager_ir (IR) – IR Qiskit à optimiser.
- state (PassManagerState) – État associé à l'exécution du flux de travail par le gestionnaire de passe lui-même.
- callback (Callable[[Task, IR_OUT, 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 [ IR_OUT, PassManagerState ]
name
run
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