Skip to main content
IBM Quantum Platform

HighLevelSynthesis

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

GitHub

Bases : TransformationPass

Synthétiser des objets de niveau supérieur et dérouler des définitions personnalisées.

L'entrée de cette passe est un DAG qui peut contenir des objets de niveau supérieur, y compris des objets mathématiques abstraits (par exemple, des objets de type LinearFunction), des opérations annotées (objets de type AnnotatedOperation) et des portes personnalisées.

Dans le cas d'utilisation le plus courant, lorsque basis_gates ou target est spécifié, tous les objets de niveau supérieur sont synthétisés, de sorte que la sortie est un fichier DAGCircuit sans ces objets. Plus précisément, chaque porte du DAG de sortie est soit directement supportée par la cible, soit dans equivalence_library.

Les objets mathématiques abstraits sont synthétisés à l'aide de plugins de synthèse, en appliquant les méthodes de synthèse spécifiées dans la configuration de synthèse de haut niveau (voir la documentation de HLSConfig).

À titre d'exemple, supposons que op_a et op_b sont les noms de deux objets de niveau supérieur, que les objets op_a ont deux méthodes de synthèse default qui ne nécessite aucun paramètre supplémentaire et other avec deux paramètres entiers facultatifs option_1 et option_2, que les objets op_b ont une seule méthode de synthèse default, et que qc est un circuit quantique contenant les objets op_a et op_b . L'extrait de code suivant :

hls_config = HLSConfig(op_b=[("other", {"option_1": 7, "option_2": 4})])
pm = PassManager([HighLevelSynthesis(hls_config=hls_config)])
transpiled_qc = pm.run(qc)

montre comment exécuter la méthode de synthèse alternative other pour les objets op_b, tout en utilisant les méthodes default pour tous les autres objets de haut niveau, y compris les objets op_a.

Les opérations annotées (composées d'une opération de base et d'une liste de modificateurs d'inversion, de contrôle et de puissance) sont synthétisées de manière récursive, en synthétisant d'abord l'opération de base, puis en appliquant des méthodes de synthèse pour créer des versions inversées, contrôlées ou puissantes de cette opération.)

Les portes personnalisées sont synthétisées en déroulant récursivement leurs définitions, jusqu'à ce que chaque porte soit prise en charge par la cible ou figure dans la bibliothèque d'équivalence.

Lorsque ni basis_gates ni target ne sont spécifiés, la passe ne synthétise que les objets mathématiques abstraits de haut niveau et les opérations annotées, sans descendre dans la porte definitions. Cela correspond à l'ancien comportement de la passe, qui permettait de synthétiser certains objets de plus haut niveau à l'aide de plugins et de laisser les autres portes intactes.

La synthèse de haut niveau transmet à la routine de synthèse des informations sur les qubits auxiliaires disponibles et indique si leur état est propre (défini comme 0|0\rangle ) ou sale (état inconnu) par l'intermédiaire des arguments respectifs "num_clean_ancillas" et "num_dirty_ancillas". Si qubits_initially_zero est True (par défaut), les qubits sont supposés être dans l'état 0|0\rangle. Lorsqu'on ajoute au circuit un bloc synthétisé utilisant des qubits auxiliaires, on utilise d'abord les qubits auxiliaires propres.

Remarque

Les méthodes de synthèse sont supposées maintenir l'état des qubits auxiliaires. Concrètement, cela signifie que les qubits auxiliaires propres doivent toujours être dans l'état 0|0\rangle après le bloc synthétisé, tandis que les qubits auxiliaires sales sont réutilisés uniquement en tant que qubits sales.

HighLevelSynthesis initialisateur.

Paramètres

  • hls_config – le fichier de configuration de la synthèse de haut niveau qui définit les méthodes et les paramètres de synthèse pour divers objets de haut niveau du circuit. Si cela n'est pas précisé, les méthodes et paramètres de synthèse par défaut seront utilisés.
  • coupling_map – graphe orienté représenté sous la forme d'une carte de couplage.
  • cible – la cible du backend à utiliser pour ce passage. Si ce paramètre est spécifié, il sera utilisé à la place de la carte de couplage.
  • use_qubit_indices - un drapeau indiquant si cette passe de synthèse est exécutée avant ou après l'établissement de la disposition, c'est-à-dire si les indices de qubits des objets de niveau supérieur correspondent aux indices de qubits sur le backend cible.
  • equivalence_library - La bibliothèque d'équivalence utilisée (les instructions de cette bibliothèque ne seront pas déroulées par cette passe).
  • basis_gates – noms des bases cibles vers lesquelles effectuer le dépliage, par exemple [‘u3’, « cx »]. Ignoré si target est également spécifié.
  • min_qubits - Le nombre minimum de qubits pour les opérations dans le dag d'entrée à traduire.
  • qubits_initialement_zero - Indique si les qubits sont initialement dans l'état 0|0\rangle. Cela permet à la synthèse de haut niveau d'utiliser des qubits auxiliaires propres (c'est-à-dire dans l'état zéro) pour synthétiser une opération.
  • optimization_metric - Spécifie le critère d'optimisation utilisé par les méthodes de synthèse par défaut pour les objets de haut niveau (si disponible).

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

Exécuter la passe HighLevelSynthesis sur dag.

Paramètres

dag (DAGCircuit) – entrée dag.

Retours

Dag de sortie avec des opérations de plus haut niveau synthétisées.

Augmentations

  • TranspilerError – lorsque le transpileur n'est pas en mesure de synthétiser le DAG donné
  • ( par exemple , lorsque la méthode de synthèse spécifiée n'est pas disponible )****.

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.