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)
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_base | cible | portes_de_base |
| carte de couplage | cible | carte de couplage |
| dt | cible | dt |
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']). SiNone, 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 :
CouplingMapinstance- 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 :
-
Layoutinstance -
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]}
-
-
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 commandelist_stage_plugins()avec"layout"comme argumentstage_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 utilisantlist_stage_plugins()avec"routing"comme argumentstage_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'étapetranslation. Vous pouvez consulter la liste des plugins installés en utilisant la commandelist_stage_plugins()avec"translation"comme argumentstage_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') SiNone, aucune programmation ne sera effectuée. Il peut également s'agir du nom du plugin externe à utiliser pour l'étapescheduling. Vous pouvez consulter la liste des plugins installés en utilisant la commandelist_stage_plugins()avec"scheduling"comme argumentstage_name. -
dt (float | None) – Temps d'échantillonnage du backend (résolution) en secondes. Si
None(valeur par défaut),backend.dtest utilisé. -
approximation_degree (float | None) – Curseur heuristique utilisé pour l'approximation des circuits, où
1.0signifie « aucune approximation » (dans les limites de la tolérance numérique) et0.0signifie « approximation maximale ». Sitargetest disponible, une valeur deNoneindique 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_SEEDvariable d'environnement ettranspiler_seedsur 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
circuitsparamè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 deunitary_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 unTargetobjet, vous pouvez le spécifier manuellement ici. Cela remplacera la cible debackend. -
hls_config (HLSConfig | None) – Une classe
HLSConfigde configuration facultative qui sera transmise directement àHighLevelSynthesisla 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 commandelist_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 commandelist_stage_plugins()avec"optimization"comme argumentstage_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_processesdans le fichier de configuration de l'utilisateur et la variable d'environnementQISKIT_NUM_PROCS. S'il est défini surNone, 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