{
  "cells": [
    {
      "cell_type": "markdown",
      "id": "38b90986-2529-4974-9dbd-931f3089b7fa",
      "metadata": {},
      "source": [
        "---\n",
        "title: \"Modes d'exécution utilisant l'API REST\"\n",
        "description: \"Comment exécuter une tâche de calcul quantique dans une session du service de calcul « IBM Quantum ».\"\n",
        "---\n",
        "\n",
        "<span id=\"execution-modes-using-rest-api\" />\n",
        "\n",
        "# Modes d'exécution utilisant l'API REST\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "d501206a-c250-4df7-befc-317678659d32",
      "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",
        "<details>\n",
        "  <summary><b>Versions de package</b></summary>\n",
        "\n",
        "  Le code présenté sur cette page a été développé en tenant compte des exigences suivantes.\n",
        "  Nous vous recommandons d'utiliser ces versions ou des versions plus récentes.\n",
        "\n",
        "  ```\n",
        "  qiskit[all]~=2.3.0\n",
        "  ```\n",
        "</details>\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "2153584e-5711-4168-a4a5-0b94d02dd3e7",
      "metadata": {},
      "source": [
        "Vous pouvez exécuter vos charges de travail de base d' IBM Quantum à l'aide des API REST selon l'un des trois modes d'exécution suivants, en fonction de vos besoins : « job », « session » et « batch ». Cette rubrique présente ces modes.\n",
        "\n",
        "<Admonition type=\"note\">\n",
        "  Cette documentation utilise le `requests` module Python pour présenter l'API REST du service IBM Quantum Compute. Toutefois, ce workflow peut être exécuté à l'aide de n'importe quel langage ou framework prenant en charge l'utilisation des API REST. Pour plus de détails, consultez la [documentation de référence](/docs/api/qiskit-runtime-rest) de l'API.\n",
        "</Admonition>\n",
        "\n",
        "<span id=\"job-mode-with-rest-api\" />\n",
        "\n",
        "## Mode de travail avec API REST\n",
        "\n",
        "En mode « job », une seule requête de base est envoyée à Estimator ou Sampler, sans gestionnaire de contexte. Découvrez comment exécuter un circuit quantique à l'aide [d](/docs/guides/estimator-rest-api) 'Estimator et de [Sampler](/docs/guides/sampler-rest-api) à travers quelques exemples.\n",
        "\n",
        "<span id=\"session-mode-with-rest-api\" />\n",
        "\n",
        "## Mode session avec API REST\n",
        "\n",
        "Une session est une fonctionnalité qui permet d'exécuter efficacement des charges de travail itératives comportant plusieurs tâches sur des ordinateurs quantiques. L'utilisation de sessions permet d'éviter les retards liés à la mise en file d'attente séparée de chaque tâche, ce qui peut s'avérer particulièrement utile pour les tâches itératives nécessitant des échanges fréquents entre les ressources classiques et quantiques. Vous trouverez plus de détails sur les sessions dans la [documentation](/docs/guides/execution-modes).\n",
        "\n",
        "<Admonition type=\"note\">\n",
        "  Les utilisateurs du plan ouvert ne peuvent pas soumettre de travaux de session.\n",
        "</Admonition>\n",
        "\n",
        "<span id=\"start-a-session\" />\n",
        "\n",
        "### Commencer une session\n",
        "\n",
        "Commencez par créer une session et obtenez un identifiant de session.\n",
        "\n",
        "```python\n",
        "import json\n",
        "import requests\n",
        "\n",
        "sessionsUrl = \"https://quantum.cloud.ibm.com/api/v1/sessions\"\n",
        "auth_id = \"Bearer <YOUR_BEARER_TOKEN>\"\n",
        "backend = \"<BACKEND_NAME>\"\n",
        "crn = \"<SERVICE-CRN>\"\n",
        "\n",
        "headersList = {\n",
        "  \"Accept\": \"application/json\",\n",
        "  \"Content-Type\": \"application/json\",\n",
        "  \"Authorization\": auth_id,\n",
        "  \"Service-CRN\": crn\n",
        "}\n",
        "\n",
        "payload = json.dumps({\n",
        "  \"backend\": backend,\n",
        "  \"mode\": 'dedicated',\n",
        "})\n",
        "\n",
        "response = requests.request(\"POST\", sessionsUrl, data=payload,  headers=headersList)\n",
        "\n",
        "sessionId = response.json()['id']\n",
        "\n",
        "print(response.json())\n",
        "```\n",
        "\n",
        "Sortie\n",
        "\n",
        "```text\n",
        "{'id': 'crw9s7cdbt40008jxesg'}\n",
        "```\n",
        "\n",
        "<span id=\"close-a-session\" />\n",
        "\n",
        "### Fermer une session\n",
        "\n",
        "Il est bon de fermer un site `Session` lorsque tous les travaux sont terminés. Cela réduira le temps d'attente pour les utilisateurs suivants.\n",
        "\n",
        "```python\n",
        "closureURL=\"https://quantum.cloud.ibm.com/api/v1/sessions/\"+sessionId+\"/close\"\n",
        "\n",
        "headersList = {\n",
        "  \"Accept\": \"application/json\",\n",
        "  \"Authorization\": auth_id,\n",
        "  \"Service-CRN\": crn\n",
        "}\n",
        "\n",
        "closure_response = requests.request(\n",
        "    \"DELETE\",\n",
        "    closureURL,\n",
        "    headers=headersList\n",
        "    )\n",
        "\n",
        "print(\"Session closure response ok?:\",closure_response.ok,closure_response.text)\n",
        "```\n",
        "\n",
        "Sortie\n",
        "\n",
        "```text\n",
        "Session closure response ok?: True\n",
        "```\n",
        "\n",
        "<span id=\"batch-mode-with-rest-api\" />\n",
        "\n",
        "## Mode batch avec API REST\n",
        "\n",
        "Vous pouvez également soumettre un travail par lots en spécifiant le `mode` dans le corps de la requête. Le mode batch peut permettre de réduire le temps de traitement si toutes les tâches peuvent être fournies dès le départ. Pour en savoir plus sur le mode batch, consultez le guide [d'introduction aux modes d'exécution](/docs/guides/execution-modes#batch-mode).\n",
        "\n",
        "```python\n",
        "import json\n",
        "import requests\n",
        "\n",
        "sessionsUrl = \"https://quantum.cloud.ibm.com/api/v1/sessions\"\n",
        "\n",
        "headersList = {\n",
        "  \"Accept\": \"application/json\",\n",
        "  \"Authorization\": auth_id,\n",
        "  \"Service-CRN\": crn,\n",
        "  'Content-Type': 'application/json'\n",
        "}\n",
        "\n",
        "payload = json.dumps({\n",
        "  \"backend\": backend,\n",
        "  \"instance\": \"hub1/group1/project1\",\n",
        "  \"mode\": \"batch\"\n",
        "})\n",
        "\n",
        "response = requests.request(\"POST\", sessionsUrl, data=payload,  headers=headersList)\n",
        "\n",
        "sessionId = response.json()['id']\n",
        "```\n",
        "\n",
        "<span id=\"examples-of-jobs-submitted-in-a-session\" />\n",
        "\n",
        "## Exemples de tâches soumises lors d'une session\n",
        "\n",
        "Une fois qu'une session est créée, un ou plusieurs travaux d'échantillonneur ou d'estimateur peuvent être soumis à la même session en spécifiant l'identifiant de la session.\n",
        "\n",
        "<Admonition type=\"note\">\n",
        "  L'adresse `<parameter values>` dans une adresse `PUB` peut être un paramètre unique ou une liste de paramètres. Il prend également en charge la diffusion sur `numpy` .\n",
        "</Admonition>\n",
        "\n",
        "<span id=\"estimator-jobs-in-session-mode\" />\n",
        "\n",
        "### Tâches de l'estimateur en mode session\n",
        "\n",
        "<Tabs>\n",
        "  <TabItem value=\"1 circuit, 4 observables\" label=\"1 circuit, 4 observables\">\n",
        "    ```python\n",
        "    job_input = {\n",
        "    'program_id': 'estimator',\n",
        "    \"backend\": backend,\n",
        "    \"session_id\": sessionId, # This specifies the previously created Session\n",
        "    \"params\": {\n",
        "        \"pubs\": [[resulting_qasm, [obs1, obs2, obs3, obs4]]], #primitive unified blocs (PUBs) containing one circuit each.\n",
        "        \"options\":{\n",
        "                \"transpilation\":{\"optimization_level\": 1},\n",
        "                \"twirling\": {\"enable_gates\": True,\"enable_measure\": True},\n",
        "                # \"dynamical_decoupling\": {\"enable\": True, \"sequence_type\": \"XpXm\"},   #(optional)\n",
        "                    },\n",
        "    }\n",
        "\n",
        "    }\n",
        "    ```\n",
        "  </TabItem>\n",
        "\n",
        "  <TabItem value=\"1 circuit, 4 observables, 2 parameter sets\" label=\"1 circuit, 4 observables, 2 parameter sets\">\n",
        "    ```python\n",
        "    job_input = {\n",
        "    'program_id': 'estimator',\n",
        "    \"backend\": backend,\n",
        "    \"session_id\": sessionId, # This specifies the previously created Session\n",
        "    \"params\": {\n",
        "        \"pubs\": [[resulting_qasm, [[obs1], [obs2], [obs3], [obs4]], [[vals1], [vals2]]]], #primitive unified blocs (PUBs) containing one circuit each\n",
        "        \"options\":{\n",
        "                \"transpilation\":{\"optimization_level\": 1},\n",
        "                \"twirling\": {\"enable_gates\": True,\"enable_measure\": True},\n",
        "                # \"dynamical_decoupling\": {\"enable\": True, \"sequence_type\": \"XpXm\"},   #(optional)\n",
        "                    },\n",
        "    }\n",
        "    }\n",
        "    ```\n",
        "  </TabItem>\n",
        "\n",
        "  <TabItem value=\"2 circuits, 2 observables\" label=\"2 circuits, 2 observables\">\n",
        "    ```python\n",
        "      job_input = {\n",
        "      'program_id': 'estimator',\n",
        "      \"backend\": backend,\n",
        "      \"session_id\": sessionId, # This specifies the previously created Session\n",
        "      \"params\": {\n",
        "          \"pubs\": [[resulting_qasm, obs1],[resulting_qasm, obs2]], #primitive unified blocs (PUBs) containing one circuit each\n",
        "          \"options\":{\n",
        "                  \"transpilation\":{\"optimization_level\": 1},\n",
        "                  \"twirling\": {\"enable_gates\": True,\"enable_measure\": True},\n",
        "                  # \"dynamical_decoupling\": {\"enable\": True, \"sequence_type\": \"XpXm\"},   #(optional)\n",
        "                      },\n",
        "      }\n",
        "    }\n",
        "    ```\n",
        "  </TabItem>\n",
        "</Tabs>\n",
        "\n",
        "<span id=\"sampler-jobs-in-session-mode\" />\n",
        "\n",
        "### Tâches d'échantillonnage en mode session\n",
        "\n",
        "<Tabs>\n",
        "  <TabItem value=\"1 circuit, no parameters\" label=\"1 circuit, no parameters\">\n",
        "    ```python\n",
        "    job_input = {\n",
        "    'program_id': 'sampler',\n",
        "    \"backend\": backend,\n",
        "    \"session_id\": sessionId, # This specifies the previously created Session\n",
        "    \"params\": {\n",
        "        \"pubs\": [[resulting_qasm]], #primitive unified blocs (PUBs) containing one circuit each\n",
        "        \"options\":{\n",
        "                \"transpilation\":{\"optimization_level\": 1},\n",
        "                \"twirling\": {\"enable_gates\": True,\"enable_measure\": True},\n",
        "                # \"dynamical_decoupling\": {\"enable\": True, \"sequence_type\": \"XpXm\"},   #(optional)\n",
        "                    },\n",
        "    }\n",
        "\n",
        "    }\n",
        "    ```\n",
        "  </TabItem>\n",
        "\n",
        "  <TabItem value=\"1 circuit, 3 parameter sets\" label=\"1 circuit, 3 parameter sets\">\n",
        "    ```python\n",
        "    job_input = {\n",
        "    'program_id': 'sampler',\n",
        "    \"backend\": backend,\n",
        "    \"session_id\": sessionId, # This specifies the previously created Session\n",
        "    \"params\": {\n",
        "        \"pubs\": [[resulting_qasm, [vals1, vals2, vals3]]], #primitive unified blocs (PUBs) containing one circuit each\n",
        "        \"options\":{\n",
        "                \"transpilation\":{\"optimization_level\": 1},\n",
        "                \"twirling\": {\"enable_gates\": True,\"enable_measure\": True},\n",
        "                # \"dynamical_decoupling\": {\"enable\": True, \"sequence_type\": \"XpXm\"},   #(optional)\n",
        "                    },\n",
        "    }\n",
        "    }\n",
        "    ```\n",
        "  </TabItem>\n",
        "\n",
        "  <TabItem value=\"2 circuits, 1 parameter set\" label=\"2 circuits, 1 parameter set\">\n",
        "    ```python\n",
        "      job_input = {\n",
        "      'program_id': 'sampler',\n",
        "      \"backend\": backend,\n",
        "      \"session_id\": sessionId, # This specifies the previously created Session\n",
        "      \"params\": {\n",
        "          \"pubs\": [[resulting_qasm, [val1]],[resulting_qasm,None,100]], #primitive unified blocs (PUBs) containing one circuit each\n",
        "          \"options\":{\n",
        "                  \"transpilation\":{\"optimization_level\": 1},\n",
        "                  \"twirling\": {\"enable_gates\": True,\"enable_measure\": True},\n",
        "                  # \"dynamical_decoupling\": {\"enable\": True, \"sequence_type\": \"XpXm\"},   #(optional)\n",
        "                      },\n",
        "      }\n",
        "    }\n",
        "    ```\n",
        "  </TabItem>\n",
        "</Tabs>\n",
        "\n",
        "<span id=\"next-steps\" />\n",
        "\n",
        "## Etapes suivantes\n",
        "\n",
        "<Admonition type=\"tip\" title=\"Recommandations\">\n",
        "  * Consultez les exemples détaillés de primitives [Sampler](/docs/guides/sampler-rest-api) à l'aide de l'API REST.\n",
        "  * Consultez les exemples détaillés de primitives [Estimator](/docs/guides/estimator-rest-api) à l'aide de l'API REST.\n",
        "  * Entraînez-vous à utiliser les primitives en suivant la [leçon sur la fonction de coût](/learning/courses/variational-algorithm-design/cost-functions) sur le site IBM Quantum® Learning.\n",
        "  * Découvrez comment effectuer une transpilation en local dans la section «[ Transpilation](/docs/guides/transpile) ».\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": 4
}