Skip to main content
IBM Quantum Platform

Routines de compilation

qiskit.compiler


Fonctions de compilation de circuits

transpile

qiskit.compiler.transpile(circuits, backend=None, basis_gates=None, coupling_map=None, initial_layout=None, layout_method=None, routing_method=None, translation_method=None, scheduling_method=None, dt=None, approximation_degree=1.0, seed_transpiler=None, optimization_level=None, callback=None, output_name=None, unitary_synthesis_method='default', unitary_synthesis_plugin_config=None, target=None, hls_config=None, init_method=None, optimization_method=None, ignore_backend_supplied_default_methods=False, num_processes=None, qubits_initially_zero=True)

GitHub

Transpiler un ou plusieurs circuits, en fonction de certains objectifs de transpilation souhaités.

La transpilation est potentiellement effectuée en parallèle en utilisant le multiprocessing lorsque circuits est une liste avec > 1 QuantumCircuit en fonction de l'environnement local et de la configuration.

L'ordre de priorité des contraintes de transpilation fonctionne comme suit : si une entrée target est fournie, elle aura la priorité sur toute entrée backend ou sur les contraintes libres (basis_gates, coupling_map, ou dt). Si une adresse backend est fournie en même temps qu'une contrainte non contraignante de la liste ci-dessus, la contrainte non contraignante aura la priorité sur la contrainte correspondante du backend. Ce comportement est résumé dans le tableau ci-dessous. La première colonne du tableau résume les contraintes potentielles fournies par l'utilisateur, et chaque cellule indique si la priorité est attribuée à cette entrée de contrainte spécifique ou à une autre entrée (cible/backend( V2 )).

Fourni par l'utilisateur
cible
backend( V2 )
portes_de_basecibleportes_de_base
carte de couplageciblecarte de couplage
dtcibledt
Remarque

Lorsque la base cible est constituée de portes Clifford+T, cette fonction construit un pipeline de transpileur Clifford+T spécialisé; voir generate_preset_clifford_t_pass_manager() pour une documentation plus détaillée. Les arguments qui ne s'appliquent qu'à la transposition en ensembles de bases continus sont ignorés dans ce flux. Par exemple, le "unitary_synthesis_method" n'est pas pris en compte lors de la synthèse d'opérateurs unitaires à un seul qubit en une séquence de type Clifford+T.

Paramètres

  • circuits (_CircuitT) – Circuit(s) à transposer

  • backend (Backend | None) – Si cette option est activée, le transpileur compilera le circuit d'entrée pour cet appareil cible. Si une autre option est explicitement définie (par exemple, coupling_map), elle prévaudra sur celle du backend.

  • basis_gates (list[str] | None) – Liste des noms de portes de base vers lesquelles effectuer le dépliage (par ex. g.:['u1', 'u2', 'u3', 'cx']). Si None, ne pas effectuer le dépliage.

  • coupling_map (CouplingMap |list[list[int]] | None) –

    Carte de couplage dirigée (éventuellement personnalisée) vers la cible dans la cartographie. Si la carte de couplage est symétrique, les deux directions doivent être spécifiées.

    Plusieurs formats sont pris en charge :

    1. CouplingMap instance
    2. La liste doit être fournie sous la forme d'une matrice d'adjacence, dans laquelle chaque entrée spécifie toutes les interactions orientées à deux qubits prises en charge par le backend, par ex. g.: [[0, 1], [0, 3], [1, 2], [1, 5], [2, 5], [4, 1], [5, 3]]
  • initial_layout (Layout |dict |list | None) –

    Position initiale des qubits virtuels sur les qubits physiques. Si cette disposition rend le circuit compatible avec les contraintes de la carte de couplage, elle sera utilisée. Il n'est pas garanti que la disposition finale soit la même, car le transpileur peut permuter les qubits par des échanges ou d'autres moyens. Plusieurs formats sont pris en charge :

    1. Layout instance

    2. Dict * virtuel à physique :

      {qr[0]: 0,
       qr[1]: 3,
       qr[2]: 5}
      • du physique au virtuel :

        {0: qr[0],
         3: qr[1],
         5: qr[2]}
    3. Liste

      • du virtuel au physique :

        [0, 3, 5]  # virtual qubits are ordered (in addition to named)
      • du physique au virtuel :

        [qr[0], None, None, qr[1], None, qr[2]]
  • layout_method (str | None) – Nom de la passe de sélection de la mise en page ("trivial", "dense", "sabre"). Il peut également s'agir du nom du plugin externe à utiliser pour l'étape layout . Vous pouvez consulter la liste des plugins installés en utilisant la commande list_stage_plugins() avec "layout" comme argument stage_name .

  • routing_method (str | None) – Nom du mode de routage (« basic », « lookahead », « stochastic », « sabre », « none »). Il peut également s'agir du nom du plugin externe à utiliser pour l'étape routing . Vous pouvez afficher la liste des plugins installés en utilisant list_stage_plugins() avec "routing" comme argument stage_name .

  • translation_method (str | None) – Nom de la passe de traduction ("default", "translator" ou "synthesis"). Il peut également s'agir du nom du plugin externe à utiliser pour l'étape translation . Vous pouvez consulter la liste des plugins installés en utilisant la commande list_stage_plugins() avec "translation" comme argument stage_name .

  • scheduling_method (str | None) – Nom du laissez-passer d'ordonnancement. * 'as_soon_as_possible': Ordonnancer les instructions avec avidité, le plus tôt possible sur une ressource qubit. (alias : 'asap') * 'as_late_as_possible': Programmation tardive des instructions, c'est-à-dire maintien des qubits dans l'état fondamental lorsque cela est possible. (alias : 'alap') Si None, aucune programmation ne sera effectuée. Il peut également s'agir du nom du plugin externe à utiliser pour l'étape scheduling . Vous pouvez consulter la liste des plugins installés en utilisant la commande list_stage_plugins() avec "scheduling" comme argument stage_name .

  • dt (float | None) – Temps d'échantillonnage du backend (résolution) en secondes. Si None (valeur par défaut), backend.dt est utilisé.

  • approximation_degree (float | None) – Curseur heuristique utilisé pour l'approximation des circuits, où 1.0 signifie « aucune approximation » (dans les limites de la tolérance numérique) et 0.0 signifie « approximation maximale ». Si target est disponible, une valeur de None indique qu’une approximation est autorisée dans la limite du taux d’erreur indiqué pour une opération dans la cible.

  • seed_transpiler (int | None) – Définit une graine pour le générateur de nombres aléatoires pseudo-aléatoires (PRNG) utilisé par les parties stochastiques du transpileur. Ce paramètre a priorité sur la QISKIT_TRANSPILER_SEED variable d'environnement et transpiler_seed sur le paramètre du fichier de configuration utilisateur.

  • optimization_level (int | None) –

    Le degré d'optimisation à effectuer sur les circuits. Les niveaux supérieurs génèrent des circuits plus optimisés, au prix d'un temps de transpilation plus long.

    • 0 : pas d'optimisation
    • 1 : optimisation de la lumière
    • 2 : optimisation lourde
    • 3 : une optimisation encore plus lourde

    Si None, le niveau 2 sera choisi par défaut.

  • callback (Callable[[BasePass, DAGCircuit, float, PropertySet, int], Any] | None) –

    Une fonction de rappel qui sera appelée après chaque exécution de passe. La fonction sera appelée avec 5 arguments de type mot-clé, | pass_: la passe en cours d'exécution. | dag: la sortie dag de la passe. | time: le temps d'exécution de la passe. | property_set: l'ensemble de propriétés. | count: l'index pour l'exécution de la passe. Les arguments exacts transmis exposent les éléments internes du gestionnaire de passe et sont susceptibles d'être modifiés en fonction de l'évolution des éléments internes du gestionnaire de passe. Si vous avez l'intention de réutiliser une fonction de rappel sur plusieurs versions, assurez-vous que les arguments transmis sont les mêmes. Pour utiliser la fonction de rappel, définissez une fonction qui prendra les kwargs dict et accèdera aux variables. Par exemple :

    def callback_func(**kwargs):
        pass_ = kwargs['pass_']
        dag = kwargs['dag']
        time = kwargs['time']
        property_set = kwargs['property_set']
        count = kwargs['count']
        ...
    transpile(circ, callback=callback_func)
  • output_name (str |list[str] | None) – Une liste contenant des chaînes de caractères permettant d'identifier les circuits de sortie. La longueur de la liste doit correspondre exactement à celle du circuits paramètre.

  • unitary_synthesis_method (str) – Nom de la méthode de synthèse unitaire à utiliser. Par défaut 'default' , on utilise. Vous pouvez consulter la liste des plugins installés à l'aide de unitary_synthesis_plugin_names().

  • unitary_synthesis_plugin_config (dict | None) – Un dictionnaire de configuration optionnel qui sera transmis directement au plugin de synthèse unitaire. Par défaut, ce paramètre n'a aucun effet, car la méthode de synthèse unitaire par défaut ne nécessite pas de configuration personnalisée. Cela ne devrait être nécessaire que lorsqu'un plugin de synthèse unitaire est spécifié avec l'argument unitary_synthesis_method . Comme cette option est propre à chaque plugin de synthèse unitaire, reportez-vous à la documentation du plugin pour savoir comment l'utiliser.

  • target (Target | None) – Une cible de transcompilation côté serveur. En règle générale, cela est spécifié dans l'argument backend , mais si vous avez créé manuellement un Target objet, vous pouvez le spécifier manuellement ici. Cela remplacera la cible de backend.

  • hls_config (HLSConfig | None) – Une classe HLSConfig de configuration facultative qui sera transmise directement à HighLevelSynthesis la phase de transformation. Cette classe de configuration permet de définir les listes d'algorithmes de synthèse et leurs paramètres pour divers objets de haut niveau.

  • init_method (str | None) – Le nom du plugin à utiliser pour l'étape init . Par défaut, un plugin externe n'est pas utilisé. Vous pouvez consulter la liste des plugins installés en utilisant la commande list_stage_plugins() avec "init" comme argument pour le nom de l'étape.

  • optimization_method (str | None) – Le nom du plugin à utiliser pour l'étape optimization . Par défaut, un plugin externe n'est pas utilisé. Vous pouvez consulter la liste des plugins installés en utilisant la commande list_stage_plugins() avec "optimization" comme argument stage_name .

  • ignore_backend_supplied_default_methods (bool) – Si elle vaut True , toute méthode par défaut spécifiée par un backend sera ignorée. Certains backends spécifient d'autres méthodes par défaut pour prendre en charge les passes/plugins spécifiques à la cible de compilation qui prennent en charge les techniques de compilation spécifiques au backend. Si vous préférez que ces valeurs par défaut ne soient pas utilisées, cette option permet de les désactiver.

  • num_processes (int | None) – Le nombre maximum de processus parallèles à lancer pour cet appel à transpile si l'exécution parallèle est activée. Cet argument remplace num_processes dans le fichier de configuration de l'utilisateur et la variable d'environnement QISKIT_NUM_PROCS . S'il est défini sur None , la configuration par défaut du système ou la configuration locale de l'utilisateur sera utilisée.

  • qubits_initially_zero (bool) – Indique si le circuit d'entrée est initialisé à zéro.

Retours

Le(s) circuit(s) transpilé(s).

Augmentations

TranspilerError - en cas de mauvaises entrées dans le transpondeur (comme des paramètres contradictoires) ou d'erreurs dans les passes

Type de retour

_CircuitT

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