Skip to main content
IBM Quantum Platform

BasisTranslator

class qiskit.transpiler.passes.BasisTranslator(*args, **kwargs)

GitHub

Bases : TransformationPass

Traduit les portes vers une base cible en recherchant un ensemble de traductions à partir d'une base donnée EquivalenceLibrary.

Ce laissez-passer fonctionne en plusieurs étapes :

  • Déterminer la base de la source à partir du circuit d'entrée.
  • Effectuer une recherche Dijkstra sur les ensembles de bases, en commençant par la base cible de l'appareil. De nouvelles portes sont générées en utilisant les règles de la base fournie EquivalenceLibrary et la recherche s'arrête si toutes les portes de la base source ont été générées.
  • Le chemin trouvé, en tant qu'ensemble de règles provenant de EquivalenceLibrary,, est composé d'un ensemble de règles de remplacement de portes.
  • Les règles de remplacement composées sont appliquées sur place à chaque nœud op qui ne se trouve pas déjà dans la base cible.

Si l'argument « target keyword » est spécifié et que Target cet objet contient des opérations non globales (c'est-à-dire définies uniquement pour un sous-ensemble de qubits), telles que calculées par get_non_global_operation_names(), cette étape tentera d'adapter la traduction de sortie à ces contraintes. Pour les opérations sur un seul qubit, le processus est simple : le cycle effectuera une recherche en combinant l'ensemble des opérations globales avec l'ensemble des opérations définies uniquement sur ce qubit. Pour les portes à plusieurs qubits, la situation est un peu plus complexe : bien que le comportement soit initialement similaire à celui du cas d'un seul qubit, il ne suffit pas de simplement utiliser tous les qubits sur lesquels l'opération est effectuée (lorsque l'ordre n'a pas d'importance). Nous devons également prendre en compte les qubits locaux potentiels définis sur des sous-ensembles des arguments quantiques de l'opération multi-qubits. Cela signifie que l'ensemble cible utilisé pour la recherche d'une porte multi-qubits non globale est l'union des opérations globales, des portes multi-qubits non globales partageant les mêmes qubits et de toutes les portes non globales définies sur n'importe quel sous-ensemble des qubits utilisés.

Remarque

Dans le cas d'opérations non globales, il est possible qu'une seule exécution de cette passe produise une traduction incomplète si des portes non globales sont définies sur des qubits qui sont un sous-ensemble d'une porte multiqubit plus large. Par exemple, si une porte u n'est définie que sur le qubit 0 et une porte x que sur le qubit 1, il est possible, lors de la traduction d'une opération à 2 qubits sur les qubits 0 et 1, que la sortie comporte u sur le qubit 1 et x sur le qubit 0. En général, le fait d'effectuer cette passe une deuxième fois permet de corriger ces problèmes.


Erreurs de traduction

Cette étape générera une erreur s'il n'existe aucun chemin permettant de convertir une porte d'entrée dans la base spécifiée. Cependant, dans le cadre d'un PassManager configuré par défaut, ce pass est exécuté plusieurs fois à différentes étapes du pipeline de compilation. Cela signifie que, potentiellement, les portes d'entrée qui sont converties ne faisaient pas partie du circuit d'entrée à transpile() l'origine, puisqu'elles ont été générées par une transformation intermédiaire au sein du circuit.

Lorsque cette erreur se produit, cela signifie généralement que soit la base cible n'est pas universelle, soit des règles d'équivalence supplémentaires sont nécessaires dans l'instance EquivalenceLibrary utilisée par le BasisTranslator passage. Pour plus d'informations sur l'ajout de règles d'équivalence personnalisées, consultez la section « Portes de base personnalisées ».

Initialiser une instance de BasisTranslator.

param equivalence_library

La bibliothèque d'équivalence qui sera utilisée par la passe BasisTranslator. (Les instructions de cette bibliothèque ne seront pas déroulées par cette passe)

type equivalence_library

EquivalenceLibrary

param target_basis

Noms des bases cibles à dérouler, par exemple ['u3', 'cx'].

type target_basis

[listtr]

param target

La cible de compilation du backend

type cible

cible

param min_qubits

Le nombre minimum de qubits à traduire pour les opérations dans le dag d'entrée.

type min_qubits

int


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)

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

Traduire un circuit DAGCircuit d'entrée dans la base cible.

Paramètres

dag (DAGCircuit) – input dag

Augmentations

TranspilerError – si l'objectif de base ne peut être atteint

Retours

circuit traduit.

Type de retour

DAGCircuit

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.