{
  "cells": [
    {
      "cell_type": "markdown",
      "id": "f7d9993f",
      "metadata": {},
      "source": [
        "---\n",
        "title: \"HI-VQE Chemistry - Une fonction Qiskit par Qunova Computing\"\n",
        "description: \"Documentation relative à la fonction HI-VQE Qiskit de Qunova Computing. Il peut être utilisé pour déterminer l'état fondamental et l'énergie fondamentale des systèmes chimiques.\"\n",
        "---\n",
        "\n",
        "{/* cspell:ignore lumo hivqe DMRG ccsd, ffsim, pvdz, Qunova, HI-VQE, AVAS, Dooh, pyscf, nucmod, GTO's, lucj, pseudopotential, pseudopotentials, magmom, Jastrow, multireference, Pellow, Jarman */}\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "dde95705",
      "metadata": {},
      "source": [
        "<span id=\"hi-vqe-chemistry---a-qiskit-function-by-qunova-computing\" />\n",
        "\n",
        "# HI-VQE Chemistry - Une fonction Qiskit par Qunova Computing\n",
        "\n",
        "*Consultez la [documentation de l'API](/docs/api/functions/qunova-chemistry)*\n",
        "\n",
        "<Admonition type=\"note\">\n",
        "  Les fonctions Qiskit sont une fonctionnalité expérimentale disponible uniquement pour IBM Quantum® Premium Plan, Flex Plan, et On-Prem (via IBM Quantum Platform API). Elles sont en cours de publication et peuvent être modifiées.\n",
        "</Admonition>\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "bbfca10c",
      "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 figurant sur cette page a été développé selon les exigences suivantes.\n",
        "    Nous recommandons d'utiliser ces versions ou des versions plus récentes.\n",
        "\n",
        "    ```\n",
        "    qiskit-ibm-runtime~=0.45.0\n",
        "    ```\n",
        "  </AccordionItem>\n",
        "</Accordion>\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "e3498f9b",
      "metadata": {},
      "source": [
        "<span id=\"overview\" />\n",
        "\n",
        "## Aperçu\n",
        "\n",
        "En chimie quantique, le problème de la structure électronique consiste à trouver les solutions de l'équation électronique de Schrödinger - les fonctions d'onde quantiques décrivant le comportement des électrons du système. Ces fonctions d'onde sont des vecteurs d'amplitudes complexes, chaque amplitude correspondant à la contribution d'une configuration électronique possible.\n",
        "\n",
        "L'état fondamental est la fonction d'onde de la plus basse énergie du système et revêt une importance particulière dans l'étude des systèmes moléculaires. L'approche la plus précise pour calculer l'état fondamental prend en compte toutes les configurations électroniques possibles, mais cela devient impossible pour les systèmes de grande taille, car le nombre de configurations croît de manière exponentielle avec la taille du système.\n",
        "\n",
        "Le Handover Iterative Variational Quantum Eigensolver (HI-VQE) est une méthode hybride quantique-classique innovante qui permet d'estimer avec précision l'état fondamental des systèmes moléculaires. Il intègre le matériel quantique à l'informatique classique, en utilisant des processeurs quantiques pour explorer efficacement les configurations électroniques candidates et en calculant la fonction d'onde résultante sur des ordinateurs classiques. En générant des fonctions d'onde compactes mais chimiquement précises, HI-VQE favorise la recherche et la découverte en chimie quantique et en science des matériaux.\n",
        "\n",
        "![Image montrant une vue d'ensemble de l'algorithme HI-VQE de Qunova](https://quantum.cloud.ibm.com/docs/images/guides/qunova-chemistry/overview.svg)\n",
        "\n",
        "HI-VQE réduit la complexité de calcul du problème de la structure électronique en estimant efficacement l'état fondamental avec une grande précision. Il se concentre sur un sous-ensemble soigneusement sélectionné des configurations électroniques les plus pertinentes, optimisant à la fois la précision et l'efficacité.\n",
        "\n",
        "En combinant les forces des ordinateurs classiques et quantiques, HI-VQE affine et améliore de manière itérative la fonction d'onde estimée actuelle. Ses techniques uniques de construction de sous-espaces contribuent à rendre la sélection des configurations plus efficace, de sorte que les utilisateurs disposent d'un meilleur contrôle informatique et d'une plus grande précision dans les simulations de chimie quantique.\n",
        "\n",
        "Si vous souhaitez en savoir plus sur cet algorithme, vous pouvez [consulter l'article de recherche associé.](https://arxiv.org/abs/2503.06292)\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "5f761442",
      "metadata": {},
      "source": [
        "<span id=\"description\" />\n",
        "\n",
        "## Description\n",
        "\n",
        "Le nombre de configurations électroniques pour un système moléculaire croît de manière exponentielle avec la taille du système. Toutefois, pour certains états électroniques, tels que l'état fondamental, il est courant que seule une petite fraction des configurations contribue de manière significative à l'énergie de l'état. Les méthodes d'interaction avec des configurations sélectionnées (SCI) exploitent cette rareté pour réduire les coûts de calcul en identifiant et en se concentrant sur les configurations les plus pertinentes. Ce sous-ensemble de configurations est appelé sous-espace.\n",
        "\n",
        "HI-VQE tire parti de l'efficacité inhérente des ordinateurs quantiques pour représenter les systèmes moléculaires et faciliter la recherche de sous-espaces. Il intègre des sous-programmes classiques et quantiques pour résoudre le problème de la structure électronique avec une grande précision. Contrairement aux méthodes SCI quantiques existantes, HI-VQE combine l'apprentissage variationnel, la construction itérative de sous-espaces et le filtrage de configuration avant diagonalisation afin d'améliorer l'efficacité en réduisant les mesures quantiques, les itérations et les coûts de diagonalisation classique. HI-VQE peut donc être appliqué à des systèmes moléculaires plus grands qui nécessitent plus de qubits, et réduit le coût de résolution d'un problème d'une taille donnée avec le même degré de précision.\n",
        "\n",
        "![Image présentant une description détaillée de chaque étape de l'algorithme HI-VQE de Qunova.](https://quantum.cloud.ibm.com/docs/images/guides/qunova-chemistry/description.avif)\n",
        "\n",
        "Pour calculer l'état fondamental d'un système, HI-VQE utilise d'abord le logiciel de chimie classique PySCF pour générer une représentation moléculaire à partir des données fournies par l'utilisateur, telles que la géométrie moléculaire et d'autres informations moléculaires. Il entre ensuite dans une boucle d'optimisation hybride quantique-classique, affinant itérativement un sous-espace pour représenter de manière optimale l'état fondamental tout en minimisant le nombre de configurations incluses. La boucle se poursuit jusqu'à ce que les critères de convergence, tels que la taille du sous-espace ou la stabilité de l'énergie, soient remplis, après quoi la fonction d'onde et l'énergie de l'état fondamental calculées sont émises. Ces résultats peuvent être utilisés pour construire des surfaces d'énergie potentielle précises et effectuer une analyse plus poussée du système.\n",
        "\n",
        "La boucle d'optimisation vise à ajuster les paramètres d'un circuit quantique afin de générer un sous-espace de haute qualité. HI-VQE propose trois options de circuits quantiques : [`excitation_preserving`](/docs/api/qiskit/qiskit.circuit.library.excitation_preserving), [efficient\\_su2](/docs/api/qiskit/qiskit.circuit.library.efficient_su2) et [LUCJ](https://qiskit-community.github.io/ffsim/explanations/lucj.html). L'optimisation est initialisée à proximité de l'état de référence de Hartree-Fock, en raison de sa pertinence générale. Le circuit est ensuite exécuté sur un dispositif quantique, puis des configurations sont échantillonnées à partir de l'état quantique obtenu avant d'être renvoyées sous forme de chaînes binaires. En raison du bruit des dispositifs quantiques, certaines configurations échantillonnées peuvent être physiquement invalides, car elles ne respectent pas la conservation du nombre d'électrons ou du spin. HI-VQE résout ce problème en utilisant le processus de restauration de la configuration du paquet [qiskit-addon-sqd](/docs/addons/qiskit-addon-sqd), ce qui permet aux utilisateurs soit de corriger les configurations invalides, soit de les ignorer.\n",
        "\n",
        "Les configurations valides font ensuite l'objet d'une étape de sélection facultative afin d'éliminer celles dont la contribution est jugée minimale. La dimension du sous-espace est ainsi réduite, ce qui diminue le coût de l'étape de diagonalisation. Si le filtrage est activé, un hamiltonien préliminaire du sous-espace est construit à partir des configurations valides et une diagonalisation est effectuée avec des critères de terminaison très souples. Bien que la précision des amplitudes obtenues pour chaque configuration soit faible, elle est efficace pour prédire les configurations à exclure du sous-espace à cette itération, et elle est rapide à calculer.\n",
        "\n",
        "Les configurations sélectionnées sont ajoutées au sous-espace et l'hamiltonien du système est projeté dans ce sous-espace. Le sous-espace est mis à jour de manière itérative, en conservant les configurations les plus pertinentes d'une itération à l'autre. Cette approche contraste avec les autres méthodes car le circuit quantique n'a pas besoin d'approcher l'état fondamental complet à chaque étape.\n",
        "\n",
        "Ensuite, l'hamiltonien du sous-espace est diagonalisé de manière classique pour obtenir la valeur propre la plus basse et son vecteur propre correspondant, représentant une approximation de l'état fondamental et de son énergie. Au fur et à mesure que la qualité du sous-espace s'améliore au fil des itérations, l'état fondamental calculé se rapproche davantage de l'état fondamental réel. Une étape supplémentaire de filtrage peut être réalisée à ce stade pour éliminer toutes les configurations du sous-espace qui ne contribuent pas de manière substantielle à l'état fondamental calculé. Cette étape permet de s'assurer que le sous-espace transporté dans l'itération suivante est aussi compact que possible. Cette évaluation est basée sur les amplitudes obtenues par la diagonalisation, car elles représentent l'importance de la contribution de chaque configuration à l'état fondamental calculé.\n",
        "\n",
        "Un contrôle de convergence permet ensuite de déterminer si une formation supplémentaire permettrait d'améliorer les résultats. Si c'est le cas, une étape optionnelle d'expansion classique est effectuée, les paramètres du circuit quantique sont mis à jour pour minimiser encore l'énergie calculée, et le processus se répète. L'étape d'expansion classique génère des configurations supplémentaires pour le sous-espace, complétant les configurations échantillonnées à partir du dispositif quantique. Il identifie d'abord la configuration ayant la plus grande amplitude dans les résultats de la diagonalisation, avant de générer de nouvelles configurations avec des excitations simples et doubles à partir de la configuration identifiée. Le nombre souhaité de ces configurations est ensuite ajouté au sous-espace.\n",
        "\n",
        "Une fois qu'il est établi que les itérations ont convergé, HI-VQE renvoie l'état fondamental calculé (sous la forme des états du sous-espace et de leurs amplitudes dans la fonction d'onde de l'état fondamental), son énergie et une mesure de la variance de l'énergie qui indique si l'état calculé forme un état propre du hamiltonien du système.\n",
        "\n",
        "Les utilisateurs peuvent décider du circuit quantique utilisé et du nombre de prises de vue pour chaque circuit quantique, ainsi que contrôler la taille du sous-espace ou permettre la génération classique de configurations supplémentaires pour aider les configurations générées par le circuit quantique. Les utilisateurs peuvent ainsi adapter le comportement de HI-VQE à leurs applications.\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "73390a19",
      "metadata": {},
      "source": [
        "<span id=\"get-started\" />\n",
        "\n",
        "## Premiers pas\n",
        "\n",
        "Commencez par [demander l'accès à la fonction](https://forms.office.com/r/zN3hvMTqJ1).\n",
        "Ensuite, authentifiez-vous à l'aide de votre [clé API IBM Quantum®](http://quantum.cloud.ibm.com/) et, si vous avez déjà [enregistré votre compte](/docs/guides/functions-get-started#install-qiskit-functions-catalog-client) dans votre environnement local, sélectionnez la fonction Qiskit comme suit :\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 1,
      "id": "95a715d2",
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/plain": [
              "[QiskitFunction(qunova/hivqe-chemistry),\n",
              " QiskitFunction(global-data-quantum/quantum-portfolio-optimizer),\n",
              " QiskitFunction(algorithmiq/tem),\n",
              " QiskitFunction(qedma/qesem),\n",
              " QiskitFunction(multiverse/singularity),\n",
              " QiskitFunction(ibm/circuit-function),\n",
              " QiskitFunction(q-ctrl/optimization-solver),\n",
              " QiskitFunction(colibritd/quick-pde),\n",
              " QiskitFunction(q-ctrl/performance-management),\n",
              " QiskitFunction(kipu-quantum/iskay-quantum-optimizer)]"
            ]
          },
          "execution_count": 1,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "import reprlib\n",
        "from qiskit_ibm_catalog import QiskitFunctionsCatalog\n",
        "\n",
        "catalog = QiskitFunctionsCatalog(channel=\"ibm_quantum_platform\")\n",
        "\n",
        "# Verify that you have access to the function\n",
        "catalog.list()"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "id": "968af861",
      "metadata": {},
      "outputs": [],
      "source": [
        "# Load the function\n",
        "function = catalog.load(\"qunova/hivqe-chemistry\")"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "c3e0cc98",
      "metadata": {},
      "source": [
        "<span id=\"example\" />\n",
        "\n",
        "## Exemple\n",
        "\n",
        "Le premier exemple montre comment calculer l'énergie de l'état fondamental d'une molécule NH3 à l'aide de l'algorithme HI-VQE.\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "b03aa968",
      "metadata": {},
      "source": [
        "<span id=\"define-the-molecular-geometry-and-options\" />\n",
        "\n",
        "#### Définir la géométrie moléculaire et les options\n",
        "\n",
        "La géométrie moléculaire de NH3 est fournie avec des coordonnées cartésiennes séparées par des \";\" pour chaque atome.\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 3,
      "id": "970dadd1",
      "metadata": {},
      "outputs": [],
      "source": [
        "# Define the molecule geometry\n",
        "geometry = \"\"\"\n",
        "N         -0.85188       -0.02741        0.03141;\n",
        "H          0.16545        0.00593       -0.01648;\n",
        "H         -1.16348       -0.39357       -0.86702;\n",
        "H         -1.16348        0.94228        0.06281;\n",
        "\"\"\""
      ]
    },
    {
      "cell_type": "markdown",
      "id": "64429e13",
      "metadata": {},
      "source": [
        "Des options supplémentaires peuvent être définies et fournies pour le système moléculaire dans le format de dictionnaire suivant.\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 4,
      "id": "0f9e9a3c",
      "metadata": {},
      "outputs": [],
      "source": [
        "# Configure some options for the job.\n",
        "molecule_options = {\"basis\": \"sto3g\"}\n",
        "hivqe_options = {\"shots\": 100, \"max_iter\": 20}"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "bf180336",
      "metadata": {},
      "source": [
        "Exécuter la fonction avec les entrées de géométrie et d'option.\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "id": "fdebf7f0",
      "metadata": {},
      "outputs": [],
      "source": [
        "# Run HI-VQE\n",
        "job = function.run(\n",
        "    geometry=geometry,\n",
        "    # `backend_name` is the name of a backend with at least 16 qubits,\n",
        "    # for example, \"ibm_marrakesh\".\n",
        "    backend_name=backend_name,\n",
        "    max_states=2000,\n",
        "    max_expansion_states=10,\n",
        "    molecule_options=molecule_options,\n",
        "    hivqe_options=hivqe_options,\n",
        ")"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "75e46808-1638-4f14-bfe4-ea3eba2f738b",
      "metadata": {},
      "source": [
        "Il est conseillé d'imprimer l'identifiant du travail de la fonction afin de pouvoir le fournir dans les demandes d'assistance en cas de problème.\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 6,
      "id": "87585ede-2ec4-467a-a269-514f59026602",
      "metadata": {},
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "Job ID: e5ced6f2-fd1d-4244-a6aa-bd27cfb0cdee\n"
          ]
        }
      ],
      "source": [
        "print(\"Job ID:\", job.job_id)"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "608cf736",
      "metadata": {},
      "source": [
        "Cet exemple utilise 16 qubits avec 8 orbitales de la base sto3g pour une molécule NH3.\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "ad1c9bcb",
      "metadata": {},
      "source": [
        "Pour vérifier [l'état](/docs/guides/functions-get-started#check-job-status) de votre charge de travail Qiskit Function ou récupérer [les résultats](/docs/guides/functions-get-started#retrieve-results), procédez comme suit :\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 7,
      "id": "b442c581",
      "metadata": {},
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "QUEUED\n"
          ]
        }
      ],
      "source": [
        "print(job.status())"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "aef704b8",
      "metadata": {},
      "source": [
        "Une fois le travail terminé, les résultats peuvent être obtenus à l'aide de l'instance `result()` .\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 8,
      "id": "f447e506",
      "metadata": {},
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "{'eigenvector': [0.9824448589364075, 0.009527106392132133, 6.854074372058527e-08, 3.591500190038039e-07, 0.0012975231577544268, 2.310159709002111e-05, ...], 'energy': -55.52108557170985, 'energy_history': [-55.51901898989887, -55.52056881448526, -55.52065046778772, -55.520690696813716, -55.520691108428, -55.520708448092634, ...], 'energy_variance': 3.066239097617371e-10, ...}\n"
          ]
        }
      ],
      "source": [
        "result = job.result()\n",
        "\n",
        "# Output can be long, so we display a shortened representation\n",
        "shortened_result = reprlib.repr(result)\n",
        "print(shortened_result)"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "2b6fb05c",
      "metadata": {},
      "source": [
        "Pour accéder à l'énergie de l'état fondamental, utilisez la touche \"énergie\". La clé \"vecteur propre\" fournit les coefficients CI avec la notation de la chaîne de bits correspondante de la configuration électronique stockée avec les \"états\" des résultats.\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "id": "28cd677c",
      "metadata": {},
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "|Exact Energy - HI-VQE Energy|: 0.06246299427914437 mHa\n",
            "Sampled Number of States: 1936\n"
          ]
        }
      ],
      "source": [
        "fci_energy = -55.521148034704126  # the exact energy using FCI method\n",
        "hivqe_energy = result[\"energy\"]\n",
        "print(\n",
        "    f\"|Exact Energy - HI-VQE Energy|: \"\n",
        "    f\"{abs(fci_energy - hivqe_energy) * 1000} mHa\"\n",
        ")\n",
        "print(f\"Sampled Number of States: {len(result['states'])}\")"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "5f252348-720f-47c0-9e7f-ae5e5512b8d1",
      "metadata": {},
      "source": [
        "<span id=\"licensing\" />\n",
        "\n",
        "## Octroi de licence\n",
        "\n",
        "Veuillez noter que l'utilisation de cette fonction Qiskit est limitée aux problèmes nécessitant au maximum 20 qubits, sauf si une licence accordant une limite supérieure a été obtenue.\n",
        "\n",
        "Pour toute question concernant les licences, veuillez envoyer un e-mail à [qiskit.support @ qunovacomputing.com](mailto:qiskit.support@qunovacomputing.com).\n",
        "\n",
        "<span id=\"example-of-licensed-function-use\" />\n",
        "\n",
        "### Exemple d'utilisation d'une fonction sous licence\n",
        "\n",
        "Les utilisateurs disposant d'une licence se voient attribuer un jeton de licence et doivent ensuite utiliser une bibliothèque de wrapper pour transmettre ce jeton à la fonction.\n",
        "La bibliothèque de wrappers peut être installée [à partir de PyPI](https://pypi.org/project/hivqe-qiskit-function-utils/) avec `pip install hivqe-qiskit-function-utils`.\n",
        "L'exemple ci-dessous montre comment utiliser cette bibliothèque pour transmettre votre jeton de licence lors de l'appel de la fonction.\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "id": "a1d9ad0f-4add-4ef8-a63c-c1601b13e322",
      "metadata": {},
      "outputs": [],
      "source": [
        "import math\n",
        "from qiskit_ibm_catalog import QiskitFunctionsCatalog\n",
        "from hivqe_qiskit_function_utils import FunctionWrapper\n",
        "\n",
        "catalog = QiskitFunctionsCatalog(\n",
        "    token=\"your_qiskit_functions_catalog_token\",\n",
        "    channel=\"ibm_quantum_platform\",\n",
        "    instance=\"your_ibm_instance\",\n",
        ")\n",
        "\n",
        "molecule_geometry = f\"\"\"\n",
        "O 0 0 0;\n",
        "H {-0.957*math.sin(math.radians(104.5)/2.0)} {0.957*math.cos(math.radians(104.5)/2.0)} 0;\n",
        "H {0.957*math.sin(math.radians(104.5)/2.0)} {0.957*math.cos(math.radians(104.5)/2.0)} 0\n",
        "\"\"\"\n",
        "\n",
        "hivqe = FunctionWrapper(\n",
        "    token=\"your_hivqe_license_token\",\n",
        "    function=catalog.load(\"qunova/hivqe-chemistry\"),\n",
        ")\n",
        "job = hivqe.run(\n",
        "    geometry=molecule_geometry,\n",
        "    backend_name=\"ibm_torino\",\n",
        "    max_states=10000,\n",
        "    max_expansion_states=1000,\n",
        "    hivqe_options={\"ansatz\": \"epa\", \"max_iter\": 10},\n",
        ")\n",
        "result = job.result()"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "4af252f6",
      "metadata": {},
      "source": [
        "<span id=\"performance\" />\n",
        "\n",
        "## lente\n",
        "\n",
        "Cette section présente les calculs de référence de HI-VQE avec un cas de 24 qubits pour Li2S, un cas de 40 qubits pour une molécule N2 et un cas de 44 qubits pour un système FeP-NO.\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "54d8f446",
      "metadata": {},
      "source": [
        "<span id=\"dissociation-potential-energy-surface-curve-for-an-li2s-molecule-with-24-qubits\" />\n",
        "\n",
        "#### Courbe de surface d'énergie potentielle de dissociation pour une molécule d' Li2S e à 24 qubits\n",
        "\n",
        "La courbe PES est présentée avec la référence FCI et l'estimation initiale de RHF, ainsi que l'erreur énergétique de la référence FCI.\n",
        "\n",
        "![Image montrant que HI-VQE produit des solutions avec une précision chimique équivalente à celle d'une courbe PES de référence classique pour le système d' Li2S](https://quantum.cloud.ibm.com/docs/images/guides/qunova-chemistry/Li2S_PES.avif).\n",
        "\n",
        "Les calculs ont été effectués avec les géométries et options suivantes.\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 11,
      "id": "8c998f54",
      "metadata": {},
      "outputs": [],
      "source": [
        "# Define Li2S geometries\n",
        "Li2S_geoms = {\n",
        "    \"Li2S_1.51\": \"S        -1.239044    0.671232   -0.030374;Li       -1.506327    0.432403   -1.498949;Li       -0.899996    0.973348    1.826768;\",\n",
        "    \"Li2S_2.40\": \"S        -1.741432    0.680397    0.346702;Li       -0.529307    0.488006   -1.729343;Li       -1.284307    0.989409    2.177209;\",\n",
        "    \"Li2S_3.80\": \"S        -2.707255    0.674298    0.909161;Li        0.079218    0.552012   -1.671656;Li       -0.927010    0.931502    1.557063;\",\n",
        "}\n",
        "\n",
        "# Configure some options for the job.\n",
        "molecule_options = {\n",
        "    \"basis\": \"sto3g\",\n",
        "}\n",
        "hivqe_options = {\n",
        "    \"shots\": 100,\n",
        "    \"max_iter\": 20,\n",
        "}\n",
        "\n",
        "results = []\n",
        "for geom in [\"Li2S_1.51\", \"Li2S_2.40\", \"Li2S_3.80\"]:\n",
        "    # Run HI-VQE\n",
        "    job = function.run(\n",
        "        geometry=Li2S_geoms[geom],\n",
        "        backend_name=backend_name,  # can use any device with at least 38 qubits\n",
        "        max_states=2000,\n",
        "        max_expansion_states=10,\n",
        "        molecule_options=molecule_options,\n",
        "        hivqe_options=hivqe_options,\n",
        "    )\n",
        "    results.append(job.result())"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "81129f0f",
      "metadata": {},
      "source": [
        "Les points rouges représentent les résultats des calculs HI-VQE pour six géométries différentes, et trois géométries correspondant à 1.51, 2.40, et 3.80 Angstrom sont fournies comme entrée dans la cellule ci-dessus.\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "4d8d6cad",
      "metadata": {},
      "source": [
        "<span id=\"dissociation-pes-curve-for-an-n2-molecule-with-40-qubits\" />\n",
        "\n",
        "#### Courbe PES de dissociation pour une molécule d' N2 e à 40 qubits\n",
        "\n",
        "La molécule d'azote a été identifiée comme un système multiréférence avec de grandes contributions d'énergie de corrélation au-delà de l'état Hartree-Fock. Nous avons effectué un calcul de référence pour la molécule N2 avec la base cc-pvdz, ( 20o,14e ) en utilisant la sélection des orbitales actives homo-lumo. Le numéro de l'espace actif complet (CAS) représentant ce problème est 6 009 350 400. Il n'est pas possible d'obtenir la solution du problème des valeurs propres (pour l'énergie et la structure électronique) avec ce nombre d'états à l'aide d'un ordinateur de bureau puissant ( 16cpu/64GB ). Avec HI-VQE, les utilisateurs peuvent rechercher efficacement le sous-espace des états CAS pour trouver des résultats chimiquement exacts tout en économisant considérablement les ressources de calcul. Les graphiques suivants montrent la courbe PES du calcul HI-VQE de 40 qubits de la dissociation de la molécule N2.\n",
        "\n",
        "![Image montrant que HI-VQE produit des solutions avec une précision chimique équivalente à celle d'une courbe PES de référence classique pour le système d' N2.](https://quantum.cloud.ibm.com/docs/images/guides/qunova-chemistry/N2_PES_40qubits.avif)\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "e84bc625",
      "metadata": {},
      "source": [
        "<span id=\"dissociation-pes-curve-for-five-coordinated-ironii-porphyrin-with-an-no-system-with-44-qubits\" />\n",
        "\n",
        "#### Courbe PES de dissociation pour le fer(II)-porphyrine à cinq coordonnées avec un système NO à 44 qubits\n",
        "\n",
        "Un autre système chimique intéressant est un complexe fer(II)-porphyrine ( FeP ) avec un ligand coordonné d'oxyde nitrique (NO), qui représente un système métalloporphyrinique biologiquement pertinent qui joue un rôle crucial dans divers processus physiologiques. Dans cet exemple, HI-VQE a été utilisé pour estimer la courbe précise de la surface d'énergie potentielle de l'interaction intermoléculaire entre FeP et NO (énergie de l'état fondamental pour différentes géométries séparées). Le système combiné comporte 450 orbitales et 202 électrons ( 450o,202e ) avec 6-31g(d ) de base au total. La sélection de l'orbite active homo-lumo a été utilisée pour calculer le cas le plus petit à partir du cas réel avec ( 22o,22e ). D'après les résultats de référence suivants, nous avons pu atteindre la précision chimique (> 1.6 mHa ) avec un calcul de chimie informatique classique de pointe de la référence CASCI(DMRG) ( 22o,22e ).\n",
        "\n",
        "![Image montrant que HI-VQE produit des solutions avec une précision chimique équivalente à celle d'une courbe PES de référence classique pour le système d' FeP-NO.](https://quantum.cloud.ibm.com/docs/images/guides/qunova-chemistry/fepno_44qubits.avif)\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "b34fe075",
      "metadata": {},
      "source": [
        "<span id=\"benchmarks\" />\n",
        "\n",
        "## Tests de performances\n",
        "\n",
        "* La taille de la matrice exacte est le nombre de déterminants pour la solution exacte, comme FCI et CASCI.\n",
        "* Le calcul HI-VQE échantillonne et calcule le sous-espace de l'échantillon (c'est-à-dire la taille de la matrice HI-VQE).\n",
        "* Le temps total comprend le temps d'exécution du QPU et les exécutions de la fonction Qiskit avec le CPU.\n",
        "* La précision est estimée à partir de la différence d'énergie par rapport à la solution exacte.\n",
        "\n",
        "| Système chimique  | Nombre de qubits | Taille exacte de la matrice | Taille de la matrice HI-VQE | E(diff) from exact ( mHa ) | Nombre d'itérations | Temps total | Utilisation de la durée d'exécution du QPU |\n",
        "| ----------------- | ---------------- | --------------------------- | --------------------------- | -------------------------- | ------------------- | ----------- | ------------------------------------------ |\n",
        "| $NH_3$ (8o,10e)   | 16               | 3136                        | 1936                        | 0.08                       | 6                   | 37 s        | 34 s                                       |\n",
        "| $Li_2S$ (10o,10e) | 20               | 63504                       | 3969                        | 0.60                       | 5                   | 250 s       | 50 s                                       |\n",
        "| $NH_3$ (15o,10e)  | 30               | 9018009                     | 49729                       | 0.90                       | 5                   | 354 s       | 54 s                                       |\n",
        "| $N_2$ (16o,14e)   | 32               | 130873600                   | 1798281                     | 1.10                       | 9                   | 6531 s      | 121 s                                      |\n",
        "| $3H_2O$ (18o,24e) | 36               | 344622096                   | 399424                      | 0.90                       | 24                  | 5174 s      | 130 s                                      |\n",
        "| $N_2$ (20o,14e)   | 40               | 6009350400                  | 9012004                     | 1.20                       | 21                  | 46547 s     | 258 s                                      |\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "04236c83",
      "metadata": {},
      "source": [
        "<span id=\"fetch-error-messages\" />\n",
        "\n",
        "## Récupérer les messages d'erreur\n",
        "\n",
        "Si votre charge de travail échoue, le statut sera `ERROR` et l'appel à `job.result()` soulèvera une exception :\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 12,
      "id": "90c6de7c",
      "metadata": {
        "editable": true,
        "slideshow": {
          "slide_type": ""
        },
        "tags": [
          "raises-exception"
        ]
      },
      "outputs": [
        {
          "ename": "QiskitServerlessException",
          "evalue": "[\"runner.UnknownRuntimeError: 'An unexpected error occurred during job execution. Please make sure that your inputs are valid. If you are still experiencing problems, you can contact the Qunova Computing support service at qiskit.support@qunovacomputing.com and provide the Function job ID of this job for more assistance. -- https://docs.quantum.ibm.com/errors#1500'\\n\"]",
          "output_type": "error",
          "traceback": [
            "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
            "\u001b[0;31mQiskitServerlessException\u001b[0m                 Traceback (most recent call last)",
            "Cell \u001b[0;32mIn[12], line 10\u001b[0m\n\u001b[1;32m      1\u001b[0m job \u001b[38;5;241m=\u001b[39m function\u001b[38;5;241m.\u001b[39mrun(\n\u001b[1;32m      2\u001b[0m     geometry\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124minvalid-geometry\u001b[39m\u001b[38;5;124m\"\u001b[39m,  \u001b[38;5;66;03m# This will cause an error\u001b[39;00m\n\u001b[1;32m      3\u001b[0m     backend_name\u001b[38;5;241m=\u001b[39mbackend_name,\n\u001b[0;32m   (...)\u001b[0m\n\u001b[1;32m      7\u001b[0m     hivqe_options\u001b[38;5;241m=\u001b[39mhivqe_options,\n\u001b[1;32m      8\u001b[0m )\n\u001b[0;32m---> 10\u001b[0m \u001b[43mjob\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mresult\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n",
            "File \u001b[0;32m~/work/documentation/documentation/.tox/py311/lib/python3.11/site-packages/qiskit_serverless/core/job.py:253\u001b[0m, in \u001b[0;36mJob.result\u001b[0;34m(self, wait, cadence, verbose, maxwait)\u001b[0m\n\u001b[1;32m    251\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mstatus() \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mERROR\u001b[39m\u001b[38;5;124m\"\u001b[39m:\n\u001b[1;32m    252\u001b[0m     \u001b[38;5;28;01mif\u001b[39;00m results:\n\u001b[0;32m--> 253\u001b[0m         \u001b[38;5;28;01mraise\u001b[39;00m QiskitServerlessException(results)\n\u001b[1;32m    255\u001b[0m     \u001b[38;5;28;01mraise\u001b[39;00m QiskitServerlessException(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mfiltered_logs(include\u001b[38;5;241m=\u001b[39m\u001b[38;5;124mr\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m(?i)error|exception\u001b[39m\u001b[38;5;124m\"\u001b[39m))\n\u001b[1;32m    257\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(results, \u001b[38;5;28mstr\u001b[39m):\n",
            "\u001b[0;31mQiskitServerlessException\u001b[0m: [\"runner.UnknownRuntimeError: 'An unexpected error occurred during job execution. Please make sure that your inputs are valid. If you are still experiencing problems, you can contact the Qunova Computing support service at qiskit.support@qunovacomputing.com and provide the Function job ID of this job for more assistance. -- https://docs.quantum.ibm.com/errors#1500'\\n\"]"
          ]
        }
      ],
      "source": [
        "job = function.run(\n",
        "    geometry=\"invalid-geometry\",  # This will cause an error\n",
        "    backend_name=backend_name,\n",
        "    max_states=2000,\n",
        "    max_expansion_states=15,\n",
        "    molecule_options=molecule_options,\n",
        "    hivqe_options=hivqe_options,\n",
        ")\n",
        "\n",
        "job.result()"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 13,
      "id": "0b8de82f-3c5a-4024-8e3a-ef8efa83cfb9",
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/plain": [
              "'ERROR'"
            ]
          },
          "execution_count": 13,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "job.status()"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "e9ec2e67",
      "metadata": {},
      "source": [
        "<span id=\"get-support\" />\n",
        "\n",
        "## Obtenir de l'aide\n",
        "\n",
        "Vous pouvez envoyer un e-mail à [qiskit.support @ qunovacomputing.com](mailto:qiskit.support@qunovacomputing.com) pour obtenir de l'aide sur cette fonction.\n",
        "\n",
        "Si vous souhaitez obtenir de l'aide pour résoudre une erreur spécifique, veuillez fournir l'identifiant de fonction du travail qui a rencontré l'erreur.\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "5a6a25c8",
      "metadata": {},
      "source": [
        "<span id=\"next-steps\" />\n",
        "\n",
        "## Etapes suivantes\n",
        "\n",
        "<Admonition type=\"tip\" title=\"Recommandations\">\n",
        "  * Demandez l'accès à la fonction en remplissant [ce formulaire.](https://forms.office.com/r/zN3hvMTqJ1)\n",
        "  * Consultez [la documentation de l'API](/docs/api/functions/qunova-chemistry) relative à cette fonction Qiskit.\n",
        "  * Essayez le tutoriel [Calculer la courbe de dissociation PES pour FeP-NO avec HI-VQE](/docs/tutorials/qunova-hivqe).\n",
        "  * Critique [Pellow-Jarman, A., et al. (2025).  HIVQE : Solveur itératif itératif d'équations quantiques pour des calculs efficaces en chimie quantique. arXiv prépublication arXiv:2503.06292](https://arxiv.org/abs/2503.06292).\n",
        "  * Essayez les [courbes PES de dissociation avec](/docs/tutorials/qunova-hivqe) le tutoriel d' HiVQE s Qunova.\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
}