{
  "cells": [
    {
      "cell_type": "markdown",
      "id": "c5693a08-8ac2-4ca6-bfa9-3bf6148d257b",
      "metadata": {},
      "source": [
        "---\n",
        "title: \"Paramètres par défaut et options de configuration de la transpilation\"\n",
        "description: \"Paramètres par défaut et options de configuration pour la transpilation de circuits quantiques dans l' Qiskit SDK (outil de compilation de circuits quantiques).\"\n",
        "---\n",
        "\n",
        "<span id=\"transpilation-default-settings-and-configuration-options\" />\n",
        "\n",
        "# Paramètres par défaut et options de configuration de la transpilation\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "051470e1-7466-4ad7-affe-6ceec583d5d5",
      "metadata": {
        "tags": [
          "version-info"
        ]
      },
      "source": [
        "{/*\n",
        "  DO NOT EDIT THIS CELL!!!\n",
        "  This cell's content is generated automatically by a script. Anything you add\n",
        "  here will be removed next time the notebook is run. To add new content, create\n",
        "  a new cell before or after this one.\n",
        "  */}\n",
        "\n",
        "<Accordion>\n",
        "  <AccordionItem title=\"Versions de package\">\n",
        "    Le code de cette page a été développé en tenant compte des exigences suivantes.\n",
        "    Nous recommandons d'utiliser ces versions ou des versions plus récentes.\n",
        "\n",
        "    ```\n",
        "    qiskit[all]~=2.5.1\n",
        "    qiskit-ibm-runtime~=0.47.0\n",
        "    ```\n",
        "  </AccordionItem>\n",
        "</Accordion>\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "a3513040-821f-4e07-9f82-98e8ba38819b",
      "metadata": {},
      "source": [
        "Les circuits abstraits doivent être transposés parce que les QPU ont un ensemble limité de portes de base et ne peuvent pas exécuter d'opérations arbitraires. La fonction du transpileur est de modifier des circuits arbitraires de manière à ce qu'ils puissent fonctionner sur une QPU donnée.  Pour ce faire, les circuits sont convertis en portes de base et des portes SWAP sont introduites si nécessaire, de sorte que la connectivité du circuit corresponde à celle de la QPU.\n",
        "\n",
        "Comme expliqué dans [Transpiler avec les gestionnaires de passage](transpile-with-pass-managers), vous pouvez créer un [gestionnaire de passage](/docs/api/qiskit/qiskit.transpiler.PassManager) à l'aide de la fonction [`generate_preset_pass_manager`](/docs/api/qiskit/qiskit.transpiler.generate_preset_pass_manager#qiskit.transpiler.generate_preset_pass_manager) et passer un circuit ou une liste de circuits à sa méthode [run](/docs/api/qiskit/qiskit.transpiler.PassManager#run) pour les transpiler. Vous pouvez appeler `generate_preset_pass_manager` en indiquant uniquement le niveau d'optimisation et le backend, en choisissant d'utiliser les valeurs par défaut pour toutes les autres options, ou vous pouvez passer des arguments supplémentaires à la fonction pour affiner la transpilation.\n",
        "\n",
        "<span id=\"basic-usage-without-parameters\" />\n",
        "\n",
        "## Utilisation de base sans paramètres\n",
        "\n",
        "Dans cet exemple, nous transmettons un circuit et une QPU cible au transpileur sans spécifier d'autres paramètres.\n",
        "\n",
        "Créez un circuit et visualisez le résultat :\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 1,
      "id": "f7070db2-2b3e-4dcd-bbc7-cac7662867b3",
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/plain": [
              "<Image src=\"/docs/images/guides/defaults-and-configuration-options/extracted-outputs/f7070db2-2b3e-4dcd-bbc7-cac7662867b3-0.svg\" alt=\"Output of the previous code cell\" />"
            ]
          },
          "execution_count": 1,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "from qiskit import QuantumCircuit\n",
        "from qiskit.circuit.library import grover_operator, DiagonalGate\n",
        "from qiskit_ibm_runtime.fake_provider import FakeSherbrooke\n",
        "\n",
        "# Create circuit to test transpiler on\n",
        "oracle = DiagonalGate([1] * 7 + [-1])\n",
        "qc = QuantumCircuit(3)\n",
        "qc.h([0, 1, 2])\n",
        "qc = qc.compose(grover_operator(oracle))\n",
        "\n",
        "# Add measurements to the circuit\n",
        "qc.measure_all()\n",
        "\n",
        "# View the circuit\n",
        "qc.draw(output=\"mpl\")"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "24622567-920c-48d9-aeba-d85a8dd34788",
      "metadata": {},
      "source": [
        "Transpilez le circuit et visualisez le résultat :\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 2,
      "id": "27ab746b-e3d7-49a7-b40b-d1e2d9ca6088",
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/plain": [
              "<Image src=\"/docs/images/guides/defaults-and-configuration-options/extracted-outputs/27ab746b-e3d7-49a7-b40b-d1e2d9ca6088-0.svg\" alt=\"Output of the previous code cell\" />"
            ]
          },
          "execution_count": 2,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "from qiskit.transpiler import generate_preset_pass_manager\n",
        "\n",
        "# Specify the QPU to target\n",
        "backend = FakeSherbrooke()\n",
        "\n",
        "# Transpile the circuit\n",
        "pass_manager = generate_preset_pass_manager(\n",
        "    optimization_level=1, backend=backend\n",
        ")\n",
        "transpiled_circ = pass_manager.run(qc)\n",
        "\n",
        "# View the transpiled circuit\n",
        "transpiled_circ.draw(output=\"mpl\", idle_wires=False)"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "6c0e9d2d-511e-4948-9f48-3b7b0fe56d7a",
      "metadata": {},
      "source": [
        "<span id=\"all-available-parameters\" />\n",
        "\n",
        "## Tous les paramètres disponibles\n",
        "\n",
        "Voici tous les paramètres disponibles pour la fonction [`generate_preset_pass_manager`](/docs/api/qiskit/qiskit.transpiler.generate_preset_pass_manager#qiskit.transpiler.generate_preset_pass_manager) sont énumérés ci-dessous.  Il existe deux catégories d'arguments : ceux qui décrivent la cible de la compilation et ceux qui influencent le fonctionnement du transpileur.\n",
        "\n",
        "Tous les paramètres, à l'exception de `optimization_level` , sont facultatifs.  Pour plus de détails, voir la [documentation de l'API Transpiler](/docs/api/qiskit/transpiler#transpiler-api).\n",
        "\n",
        "* `optimization_level` (int) - Le degré d'optimisation à effectuer sur les circuits. Entier dans la plage (0 - 3). Les niveaux supérieurs génèrent des circuits plus optimisés, au prix d'un temps de transpilation plus long. Voir [Définir le niveau d'optimisation du transpilateur](set-optimization) pour plus de détails.\n",
        "\n",
        "<span id=\"parameters-used-to-describe-the-compilation-target\" />\n",
        "\n",
        "### Paramètres utilisés pour décrire la cible de compilation :\n",
        "\n",
        "Ces arguments décrivent la QPU cible pour l'exécution du circuit, y compris des informations telles que la carte de couplage de la QPU (qui décrit la connectivité des qubits), les portes de base prises en charge par la QPU et les taux d'erreur des portes.\n",
        "\n",
        "La plupart de ces paramètres sont décrits en détail dans la section [Paramètres couramment utilisés pour la transpilation](common-parameters).\n",
        "\n",
        "<Accordion>\n",
        "  <AccordionItem title=\"**Paramètres QPU (`Backend`)**\">\n",
        "    **Paramètres de backend** - Si vous spécifiez `backend`, vous n'avez pas besoin de spécifier `target` ou d'autres options de backend. De même, si vous spécifiez `target`, vous n'avez pas besoin de spécifier `backend` ou d'autres options de backend.\n",
        "\n",
        "    * `backend` (Backend) - Si cette option est activée, le transpileur compile le circuit d'entrée dans ce dispositif. Si une autre option ayant un impact sur ces paramètres est définie, telle que `coupling_map`, elle remplace les paramètres de `backend`.\n",
        "    * `target` (Cible) - Cible du transpondeur dorsal. Normalement, il est spécifié dans l'argument backend, mais si vous avez construit manuellement un objet Target, vous pouvez le spécifier ici. Cela remplace la cible de `backend`.\n",
        "    * `backend_properties` ( BackendProperties ) - Propriétés renvoyées par une QPU, y compris des informations sur les erreurs de porte, les erreurs de lecture, les temps de cohérence des qubits, etc. Trouvez une QPU qui fournit ces informations en exécutant `backend.properties()`.\n",
        "    * `timing_constraints` (Dictstr\\[, int] | None) - Restriction matérielle de contrôle facultative sur la résolution temporelle des instructions. Cette information est fournie par la configuration de la QPU. Si la QPU n'a pas de restriction sur l'allocation du temps d'instruction, `timing_constraints` est `None` et aucun ajustement n'est effectué. Une QPU peut signaler un ensemble de restrictions, à savoir\n",
        "      * `granularity`: Valeur entière représentant la résolution minimale de la porte d'impulsion en unités de dt. Une porte d'impulsion définie par l'utilisateur doit avoir une durée qui est un multiple de cette valeur de granularité.\n",
        "      * `min_length`: Valeur entière représentant la longueur minimale de la porte d'impulsion en unités de dt. Une porte d'impulsion définie par l'utilisateur doit être plus longue que cette longueur.\n",
        "      * `pulse_alignment`: Valeur entière représentant une résolution temporelle de l'heure de début de l'instruction de la porte. Les instructions de porte doivent commencer à un moment qui est un multiple de cette valeur.\n",
        "      * `acquire_alignment`: Valeur entière représentant une résolution temporelle de l'heure de début de l'instruction de mesure. L'instruction de mesure doit commencer à un moment qui est un multiple de cette valeur.\n",
        "  </AccordionItem>\n",
        "\n",
        "  <AccordionItem title=\"**Paramètres de disposition et de topologie**\">\n",
        "    * `basis_gates` ( \\[Liststr] | None) - Liste de noms de portes de base à dérouler.  Par exemple \\[' u1 ', ' u2 ', ' u3 ', ' cx ']. Si `None`, ne pas dérouler.\n",
        "    * `coupling_map` ( CouplingMap | List\\[ \\[Listint] ]) - 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. Les formats suivants sont pris en charge :\n",
        "      * CouplingMap instance\n",
        "      * Liste - doit être donnée sous la forme d'une matrice d'adjacence, où chaque entrée spécifie toutes les interactions dirigées à deux qubits prises en charge par la QPU.  Par exemple : \\[\\[0, 1], \\[0, 3], \\[1, 2], \\[1, 5], \\[2, 5], \\[4, 1], \\[5, 3] ]\n",
        "    * `inst_map` ( \\[ListInstructionScheduleMap] | None) - Correspondance entre les opérations du circuit et les programmes d'impulsions. Si `None`, c'est la valeur `instruction_schedule_map` de la QPU qui est utilisée.\n",
        "  </AccordionItem>\n",
        "</Accordion>\n",
        "\n",
        "<span id=\"parameters-used-to-influence-how-the-transpiler-works\" />\n",
        "\n",
        "### Paramètres utilisés pour influencer le fonctionnement du transcompilateur\n",
        "\n",
        "Ces paramètres ont une incidence sur des étapes spécifiques de la transpilation. Certains d'entre eux peuvent avoir un impact sur plusieurs étapes, mais n'ont été répertoriés que sous une seule étape pour des raisons de simplicité. Si vous spécifiez un argument, tel que `initial_layout` pour les qubits que vous souhaitez utiliser, cette valeur prévaut sur toutes les passes qui pourraient la modifier. En d'autres termes, le transpileur ne modifiera rien de ce que vous aurez spécifié manuellement. Pour plus d'informations sur les étapes spécifiques, voir les [étapes du Transpiler](transpiler-stages).\n",
        "\n",
        "<Accordion>\n",
        "  <AccordionItem title=\"**Phase d'initialisation**\">\n",
        "    * `hls_config` (HLSConfig) - Une classe de configuration facultative `HLSConfig` qui est transmise directement à la passe de transformation `HighLevelSynthesis` . Cette classe de configuration permet de spécifier les listes d'algorithmes de synthèse et leurs paramètres pour divers objets de haut niveau.\n",
        "    * `init_method` (str) - Le nom du plugin à utiliser pour l'étape d'initialisation. Par défaut, un plugin externe n'est pas utilisé. Vous pouvez voir la liste des plugins installés en exécutant `list_stage_plugins()` avec `init` comme argument de nom de scène.\n",
        "    * `unitary_synthesis_method` (str) - Le nom de la méthode de synthèse unitaire à utiliser. Par défaut, `default` est utilisé. Vous pouvez voir la liste des plugins installés en lançant `unitary_synthesis_plugin_names()`.\n",
        "    * `unitary_synthesis_plugin_config` (dict) - Un dictionnaire de configuration optionnel qui est transmis directement au plugin de synthèse unitaire. Par défaut, ce paramètre n'a pas d'effet car la méthode de synthèse unitaire par défaut ne prend pas en compte la configuration personnalisée. L'application d'une configuration personnalisée ne devrait être nécessaire que lorsqu'un plugin de synthèse unitaire est spécifié avec l'argument `unitary_synthesis` . Comme cette option est propre à chaque plugin de synthèse unitaire, reportez-vous à la documentation du plugin pour savoir comment l'utiliser.\n",
        "  </AccordionItem>\n",
        "\n",
        "  <AccordionItem title=\"**Phase de mise en page**\">\n",
        "    * `initial_layout` (Disposition | Dictionnaire | Liste) - Position initiale des qubits virtuels sur les qubits physiques. Si cette disposition rend le circuit compatible avec les `coupling_map` contraintes, elle sera utilisée. La disposition finale n'est pas garantie d'être identique, car le transcompilateur peut permuter les qubits par des échanges ou d'autres moyens. Pour plus de détails, consultez la [section Mise en page initiale](common-parameters#initial-layout).\n",
        "    * `layout_method` (str) - Nom de la passe de sélection de la mise en page (`default`, `dense`, `sabre`, et `trivial`). Il peut également s'agir du nom du plugin externe à utiliser pour la phase de mise en page. Vous pouvez obtenir une liste des plugins installés en lançant `list_stage_plugins()` avec `layout` comme argument `stage_name` . La valeur par défaut est `sabre`.\n",
        "  </AccordionItem>\n",
        "\n",
        "  <AccordionItem title=\"**Étape de routage**\">\n",
        "    * `routing_method` (str) - Nom de la passe de routage (`basic`, `lookahead`, `default`, `sabre`, ou `none`). Il peut également s'agir du nom du plugin externe à utiliser pour l'étape de routage. Vous pouvez obtenir une liste des plugins installés en lançant `list_stage_plugins()` avec `routing` comme argument `stage_name` . La valeur par défaut est `sabre`.\n",
        "  </AccordionItem>\n",
        "\n",
        "  <AccordionItem title=\"**Étape de traduction**\">\n",
        "    * `translation_method` (str) - Nom de la passe de traduction (`default`, `synthesis`, `translator`, `ibm_backend`, `ibm_dynamic_circuits`, `ibm_fractional`) Il peut également s'agir du nom du plugin externe à utiliser pour l'étape de traduction. Vous pouvez obtenir une liste des plugins installés en lançant `list_stage_plugins()` avec `translation` comme argument `stage_name` . La valeur par défaut est `translator`.\n",
        "  </AccordionItem>\n",
        "\n",
        "  <AccordionItem title=\"**Phase d'optimisation**\">\n",
        "    * `approximation_degree` (float, in the range 0-1 | None) - Cadran heuristique utilisé pour l'approximation du circuit ( 1.0 = pas d'approximation, 0.0 = approximation maximale). La valeur par défaut est 1.0.  En spécifiant `None` , on fixe le degré d'approximation au taux d'erreur signalé. Voir la [section Degré d'approximation](common-parameters#approx-degree) pour plus de détails.\n",
        "    * `optimization_method` (str) - Le nom du plugin à utiliser pour l'étape d'optimisation. Par défaut, un plugin externe n'est pas utilisé. Vous pouvez obtenir une liste des plugins installés en lançant `list_stage_plugins()` avec `optimization` comme argument `stage_name` .\n",
        "  </AccordionItem>\n",
        "\n",
        "  <AccordionItem title=\"**Phase de planification**\">\n",
        "    * `scheduling_method` (str) - Nom de la passe d'ordonnancement. Il peut également s'agir du nom du plugin externe à utiliser pour l'étape de planification. Vous pouvez obtenir une liste des plugins installés en lançant `list_stage_plugins()` avec `scheduling` comme argument `stage_name` .\n",
        "      * as\\_soon\\_as\\_possible\" : Programmer les instructions avec avidité, le plus tôt possible sur une ressource qubit (alias : `asap`).\n",
        "      * as\\_late\\_as\\_possible\" : Programmation tardive des instructions, c'est-à-dire maintien des qubits dans l'état fondamental lorsque cela est possible (alias : `alap`). Il s'agit de la valeur par défaut.\n",
        "  </AccordionItem>\n",
        "\n",
        "  <AccordionItem title=\"**Exécution du transpilateur**\">\n",
        "    * `seed_transpiler` (int) - Définit des graines aléatoires pour les parties stochastiques du transpilateur.\n",
        "  </AccordionItem>\n",
        "</Accordion>\n",
        "\n",
        "Les valeurs par défaut suivantes sont utilisées si vous ne spécifiez aucun des paramètres ci-dessus. Pour plus d'informations, reportez-vous à la [page de référence de l'API](../api/qiskit/transpiler_preset) de la méthode :\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 3,
      "id": "bcaab4a6",
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/plain": [
              "<qiskit.transpiler.passmanager.StagedPassManager at 0x7f1b3d2d0c90>"
            ]
          },
          "execution_count": 3,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "generate_preset_pass_manager(\n",
        "    optimization_level=1,\n",
        "    backend=None,\n",
        "    target=None,\n",
        "    basis_gates=None,\n",
        "    coupling_map=None,\n",
        "    initial_layout=None,\n",
        "    layout_method=None,\n",
        "    routing_method=None,\n",
        "    translation_method=None,\n",
        "    scheduling_method=None,\n",
        "    approximation_degree=1.0,\n",
        "    seed_transpiler=None,\n",
        "    unitary_synthesis_method=\"default\",\n",
        "    unitary_synthesis_plugin_config=None,\n",
        "    hls_config=None,\n",
        "    init_method=None,\n",
        "    optimization_method=None,\n",
        ")"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "f1acc6e6",
      "metadata": {},
      "source": [
        "<span id=\"next-steps\" />\n",
        "\n",
        "## Etapes suivantes\n",
        "\n",
        "<Admonition type=\"tip\" title=\"Recommandations\">\n",
        "  * Apprenez à [définir le niveau d'optimisation](set-optimization).\n",
        "  * Revoir plus [Les paramètres les plus couramment utilisés](common-parameters).\n",
        "  * Découvrez comment [définir le niveau d'optimisation](/docs/guides/runtime-options-overview).\n",
        "  * Consultez la rubrique «[ Transpile avec les gestionnaires de passes](/docs/guides/transpile-with-pass-managers) ».\n",
        "  * Pour des exemples, voir [Représentation des ordinateurs quantiques](/docs/guides/represent-quantum-computers).\n",
        "  * Découvrez [comment transcompiler des circuits](/docs/guides/circuit-transpilation-settings) dans le cadre du workflow « Qiskit patterns ».\n",
        "  * Consultez la [documentation de l'API Transpile](/docs/api/qiskit/transpiler).\n",
        "</Admonition>\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "id": "a1b8767d",
      "source": "© IBM Corp., 2017-2026"
    }
  ],
  "metadata": {
    "kernelspec": {
      "display_name": "Python 3",
      "language": "python",
      "name": "python3"
    },
    "language_info": {
      "codemirror_mode": {
        "name": "ipython",
        "version": 3
      },
      "file_extension": ".py",
      "mimetype": "text/x-python",
      "name": "python",
      "nbconvert_exporter": "python",
      "pygments_lexer": "ipython3",
      "version": "3"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 5
}