{
  "cells": [
    {
      "cell_type": "markdown",
      "id": "f7d9993f",
      "metadata": {},
      "source": [
        "---\n",
        "title: \"HI-VQE Chemie – Eine Qiskit-Funktion von Qunova Computing\"\n",
        "description: \"Dokumentation zur HI-VQE-Qiskit-Funktion von Qunova Computing. Es kann verwendet werden, um den Grundzustand und die Grundzustandsenergie chemischer Systeme zu berechnen.\"\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 Chemie – Eine Qiskit-Funktion von Qunova Computing\n",
        "\n",
        "*Siehe [API-Referenz](/docs/api/functions/qunova-chemistry)*\n",
        "\n",
        "<Admonition type=\"note\">\n",
        "  Qiskit-Funktionen sind eine experimentelle Funktion, die nur für Benutzer des IBM Quantum® Premium Plan, Flex Plan und On-Prem (über IBM Quantum Platform API) Plan verfügbar ist. Sie befinden sich im Status einer Vorabversion und können sich noch ändern.\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=\"Paketversionen\">\n",
        "    Der Code auf dieser Seite wurde unter Berücksichtigung der folgenden Anforderungen entwickelt.\n",
        "    Wir empfehlen die Verwendung dieser oder neuerer Versionen.\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",
        "## Übersicht\n",
        "\n",
        "In der Quantenchemie konzentriert sich das Problem der elektronischen Struktur darauf, die Lösungen der elektronischen Schrödinger-Gleichung zu finden - die Quantenwellenfunktionen, die das Verhalten der Elektronen des Systems beschreiben. Diese Wellenfunktionen sind Vektoren aus komplexen Amplituden, wobei jede Amplitude dem Beitrag einer möglichen Elektronenkonfiguration entspricht.\n",
        "\n",
        "Der Grundzustand ist die Wellenfunktion des Systems mit der niedrigsten Energie und hat eine besondere Bedeutung bei der Untersuchung von Molekülsystemen. Der genaueste Ansatz zur Berechnung des Grundzustands berücksichtigt alle möglichen Elektronenkonfigurationen, was jedoch bei größeren Systemen schwierig wird, da die Anzahl der Konfigurationen exponentiell mit der Systemgröße wächst.\n",
        "\n",
        "Der Handover Iterative Variational Quantum Eigensolver (HI-VQE) ist ein innovatives hybrides quantenklassisches Verfahren zur genauen Abschätzung des Grundzustands von molekularen Systemen. Es integriert Quantenhardware mit klassischem Rechnen, wobei Quantenprozessoren zur effizienten Untersuchung von Elektronenkonfigurationen eingesetzt werden und die resultierende Wellenfunktion auf klassischen Computern berechnet wird. Durch die Erzeugung kompakter, aber chemisch genauer Wellenfunktionen verbessert HI-VQE die Forschung und Entdeckung in der Quantenchemie und den Materialwissenschaften.\n",
        "\n",
        "![Abbildung zeigt einen Überblick über den HI-VQE-Algorithmus von Qunova](https://quantum.cloud.ibm.com/docs/images/guides/qunova-chemistry/overview.svg)\n",
        "\n",
        "HI-VQE reduziert die Rechenkomplexität des elektronischen Strukturproblems durch eine effiziente Abschätzung des Grundzustands mit hoher Genauigkeit. Sie konzentriert sich auf eine sorgfältig ausgewählte Teilmenge der wichtigsten Elektronenkonfigurationen und optimiert so sowohl die Genauigkeit als auch die Effizienz.\n",
        "\n",
        "Durch die Kombination der Stärken von klassischen und Quantencomputern verfeinert und verbessert HI-VQE iterativ die aktuell geschätzte Wellenfunktion. Die einzigartigen Techniken zur Konstruktion von Unterräumen tragen dazu bei, die Auswahl der Konfigurationen effizienter zu gestalten, so dass die Benutzer eine bessere Kontrolle über die Berechnungen und eine höhere Genauigkeit bei quantenchemischen Simulationen haben.\n",
        "\n",
        "Wenn Sie mehr über den Algorithmus erfahren möchten, können Sie [die dazugehörige Forschungsarbeit lesen.](https://arxiv.org/abs/2503.06292)\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "5f761442",
      "metadata": {},
      "source": [
        "<span id=\"description\" />\n",
        "\n",
        "## Beschreibung\n",
        "\n",
        "Die Anzahl der Elektronenkonfigurationen für ein molekulares System wächst exponentiell mit der Größe des Systems. Bei bestimmten elektronischen Zuständen, wie z. B. dem Grundzustand, ist es jedoch üblich, dass nur ein kleiner Teil der Konfigurationen wesentlich zur Energie des Zustands beiträgt. Ausgewählte Konfigurationsinteraktionsmethoden (SCI) nutzen diese geringe Anzahl von Konfigurationen, um die Rechenkosten zu senken, indem sie die relevantesten Konfigurationen identifizieren und sich auf diese konzentrieren. Diese Untermenge von Konfigurationen wird als Unterraum bezeichnet.\n",
        "\n",
        "HI-VQE nutzt die inhärente Effizienz von Quantencomputern zur Darstellung molekularer Systeme, um die Unterraumsuche zu unterstützen. Es integriert klassische und Quanten-Subroutinen, um das Problem der elektronischen Struktur mit hoher Genauigkeit zu lösen. Im Gegensatz zu bestehenden Quanten-SCI-Methoden kombiniert HI-VQE Variations-Training, iterative Unterraum-Konstruktion und Vor-Diagonalisierungs-Konfigurations-Screening, um die Effizienz zu erhöhen, indem Quantenmessungen, Iterationen und klassische Diagonalisierungskosten reduziert werden. HI-VQE kann daher auf größere molekulare Systeme angewandt werden, die mehr Qubits erfordern, und reduziert die Kosten für die Lösung eines Problems einer bestimmten Größe mit demselben Genauigkeitsgrad.\n",
        "\n",
        "![Abbildung mit einer detaillierten Beschreibung der einzelnen Schritte des HI-VQE-Algorithmus von Qunova.](https://quantum.cloud.ibm.com/docs/images/guides/qunova-chemistry/description.avif)\n",
        "\n",
        "Zur Berechnung des Grundzustands eines Systems verwendet HI-VQE zunächst das klassische Chemiepaket PySCF, um aus den vom Benutzer bereitgestellten Eingaben, wie der Molekülgeometrie und anderen molekularen Informationen, eine molekulare Darstellung zu erzeugen. Anschließend wird eine hybride quantenklassische Optimierungsschleife eingeleitet, in der ein Unterraum iterativ verfeinert wird, um den Grundzustand optimal darzustellen und gleichzeitig die Anzahl der enthaltenen Konfigurationen zu minimieren. Die Schleife wird so lange fortgesetzt, bis Konvergenzkriterien, wie z. B. die Größe des Unterraums oder die Stabilität der Energie, erfüllt sind. Diese Ergebnisse können verwendet werden, um genaue potenzielle Energieflächen zu konstruieren und weitere Analysen des Systems durchzuführen.\n",
        "\n",
        "Im Mittelpunkt der Optimierungsschleife steht die Anpassung der Parameter eines Quantenschaltkreises, um einen hochwertigen Unterraum zu erzeugen. HI-VQE bietet drei Optionen für Quantenschaltungen an: [`excitation_preserving`](/docs/api/qiskit/qiskit.circuit.library.excitation_preserving)„ [efficient\\_su2](/docs/api/qiskit/qiskit.circuit.library.efficient_su2) “ und „[LUCJ](https://qiskit-community.github.io/ffsim/explanations/lucj.html) “. Die Optimierung wird aufgrund ihrer allgemeinen Eignung nahe am Hartree-Fock-Referenzzustand initialisiert. Die Schaltung wird anschließend auf einem Quantenbauelement ausgeführt, und aus dem resultierenden Quantenzustand werden Konfigurationen abgetastet, bevor diese als Binärzeichenfolgen zurückgegeben werden. Aufgrund des Rauschens von Quantenbauelementen können einige der abgetasteten Konfigurationen physikalisch ungültig sein, da sie die Erhaltung der Elektronenzahl oder des Spins nicht gewährleisten. HI-VQE löst dieses Problem mithilfe des Konfigurationswiederherstellungsprozesses aus dem Paket [„qiskit-addon-sqd“](/docs/addons/qiskit-addon-sqd), sodass Benutzer ungültige Konfigurationen entweder korrigieren oder verwerfen können.\n",
        "\n",
        "Die gültigen Konfigurationen werden dann einem optionalen Screening unterzogen, um diejenigen auszusortieren, von denen man annimmt, dass sie einen minimalen Beitrag leisten. Dadurch verringert sich die Dimension des Unterraums, was die Kosten des Diagonalisierungsschritts senkt. Wenn das Screening aktiviert ist, wird ein vorläufiger Unterraum-Hamiltonian aus den gültigen Konfigurationen konstruiert und eine Diagonalisierung mit sehr lockeren Abbruchkriterien durchgeführt. Obwohl die Genauigkeit der sich ergebenden Amplituden für jede Konfiguration gering ist, ist es effektiv für die Vorhersage, welche Konfigurationen in dieser Iteration aus dem Unterraum herausgenommen werden sollen, und es ist schnell zu berechnen.\n",
        "\n",
        "Die ausgewählten Konfigurationen werden dem Unterraum hinzugefügt, und der Hamiltonian des Systems wird in diesen Unterraum projiziert. Der Unterraum wird iterativ aktualisiert, wobei die wichtigsten Konfigurationen über alle Iterationen hinweg erhalten bleiben. Dieser Ansatz unterscheidet sich von anderen Methoden, da der Quantenschaltkreis nicht bei jedem Schritt den vollständigen Grundzustand annähern muss.\n",
        "\n",
        "Anschließend wird der Unterraum-Hamiltonian klassisch diagonalisiert, um den niedrigsten Eigenwert und den entsprechenden Eigenvektor zu erhalten, die eine Annäherung an den Grundzustand und dessen Energie darstellen. Da sich die Qualität des Unterraums durch Iterationen verbessert, kommt der berechnete Grundzustand dem wahren Grundzustand immer näher. An dieser Stelle kann ein zusätzlicher Screening-Schritt durchgeführt werden, um alle Konfigurationen aus dem Unterraum zu entfernen, die keinen wesentlichen Beitrag zum berechneten Grundzustand leisten. Dieser Schritt stellt sicher, dass der in die nächste Iteration übernommene Unterraum so kompakt wie möglich ist. Dies wird auf der Grundlage der Amplituden bewertet, die durch die Diagonalisierung zurückgegeben werden, da diese den wichtigen Beitrag jeder Konfiguration zum berechneten Grundzustand darstellen.\n",
        "\n",
        "Durch eine Konvergenzprüfung wird dann festgestellt, ob weiteres Training die Ergebnisse verbessern würde. Ist dies der Fall, wird ein optionaler klassischer Expansionsschritt durchgeführt, die Parameter des Quantenschaltkreises werden aktualisiert, um die berechnete Energie weiter zu minimieren, und der Vorgang wird wiederholt. Der Schritt der klassischen Expansion erzeugt zusätzliche Konfigurationen für den Unterraum, die die vom Quantengerät abgetasteten Konfigurationen ergänzen. Es identifiziert zunächst die Konfiguration mit der größten Amplitude in den Diagonalisierungsergebnissen, bevor es aus der identifizierten Konfiguration neue Konfigurationen mit Einzel- und Doppelanregungen erzeugt. Die gewünschte Anzahl dieser Konfigurationen wird dann dem Unterraum hinzugefügt.\n",
        "\n",
        "Sobald festgestellt wird, dass die Iterationen konvergiert haben, gibt HI-VQE den berechneten Grundzustand (in Form der Zustände im Unterraum und ihrer Amplituden in der Grundzustandswellenfunktion), seine Energie und ein Maß für die Energievarianz zurück, das einen Hinweis darauf gibt, ob der berechnete Zustand einen Eigenzustand des System-Hamiltonians bildet.\n",
        "\n",
        "Der Benutzer kann den verwendeten Quantenschaltkreis und die Anzahl der Schüsse für jeden Quantenschaltkreis bestimmen sowie die Größe des Unterraums kontrollieren oder die klassische Generierung zusätzlicher Konfigurationen zur Unterstützung der quantengenerierten Konfigurationen aktivieren. Auf diese Weise können die Benutzer das Verhalten von HI-VQE an ihre gewünschten Anwendungen anpassen.\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "73390a19",
      "metadata": {},
      "source": [
        "<span id=\"get-started\" />\n",
        "\n",
        "## Erste Schritte\n",
        "\n",
        "[Beantragen Sie](https://forms.office.com/r/zN3hvMTqJ1) zunächst den Zugriff auf die Funktion.\n",
        "Authentifizieren Sie sich anschließend mit Ihrem [IBM Quantum® API-Schlüssel](http://quantum.cloud.ibm.com/) und wählen Sie, sofern Sie [Ihr Konto bereits in Ihrer lokalen Umgebung gespeichert](/docs/guides/functions-get-started#install-qiskit-functions-catalog-client) haben, die Qiskit-Funktion wie folgt aus:\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",
        "## Beispiel\n",
        "\n",
        "Das erste Beispiel zeigt, wie die Grundzustandsenergie für ein Molekül NH3 mit dem HI-VQE-Algorithmus berechnet wird.\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "b03aa968",
      "metadata": {},
      "source": [
        "<span id=\"define-the-molecular-geometry-and-options\" />\n",
        "\n",
        "#### Definieren Sie die Molekülgeometrie und Optionen\n",
        "\n",
        "Die Molekülgeometrie von NH3 wird mit kartesischen Koordinaten angegeben, die für jedes Atom durch \";\" getrennt sind.\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": [
        "Zusätzliche Optionen können für das Molekularsystem im folgenden Wörterbuchformat definiert und bereitgestellt werden.\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": [
        "Führen Sie die Funktion mit Geometrie- und Optionseingaben aus.\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": [
        "Es ist ratsam, die ID des Funktionsauftrags auszudrucken, damit sie bei Supportanfragen angegeben werden kann, falls etwas schief läuft.\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": [
        "In diesem Beispiel werden dann 16 Qubits mit 8 Orbitalen der Basis sto3g für ein NH3 Molekül verwendet.\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "ad1c9bcb",
      "metadata": {},
      "source": [
        "Überprüfen Sie [den Status](/docs/guides/functions-get-started#check-job-status) Ihrer Qiskit-Funktions-Workload oder rufen Sie [die Ergebnisse](/docs/guides/functions-get-started#retrieve-results) wie folgt ab:\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": [
        "Nach Abschluss des Auftrags können die Ergebnisse unter `result()` abgerufen werden.\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": [
        "Um die Energie des Grundzustands abzurufen, verwenden Sie die Taste \"Energie\". Der Schlüssel \"Eigenvektor\" liefert die CI-Koeffizienten mit der entsprechenden Bitstring-Notation der Elektronenkonfiguration, die mit den \"Zuständen\" der Ergebnisse gespeichert wird.\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",
        "## Lizenzierung\n",
        "\n",
        "Bitte beachten Sie, dass die Nutzung dieser Qiskit-Funktion auf Probleme beschränkt ist, die höchstens 20 Qubits erfordern, es sei denn, es liegt eine Lizenz vor, die eine höhere Obergrenze gewährt.\n",
        "\n",
        "Bei Fragen zur Lizenz wenden Sie sich bitte per E-Mail an [qiskit.support @ qunovacomputing.com](mailto:qiskit.support@qunovacomputing.com).\n",
        "\n",
        "<span id=\"example-of-licensed-function-use\" />\n",
        "\n",
        "### Beispiel für die Verwendung einer lizenzierten Funktion\n",
        "\n",
        "Lizenzierte Benutzer erhalten ein Lizenz-Token und müssen anschließend mithilfe einer Wrapper-Bibliothek ihr Lizenz-Token an die Funktion übermitteln.\n",
        "Die Wrapper-Bibliothek kann [unter PyPI](https://pypi.org/project/hivqe-qiskit-function-utils/) mit `pip install hivqe-qiskit-function-utils`. installiert werden.\n",
        "Das folgende Beispiel zeigt, wie diese Bibliothek verwendet werden sollte, um beim Aufruf der Funktion Ihr Lizenz-Token zu übermitteln.\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",
        "## Leistung\n",
        "\n",
        "Dieser Abschnitt zeigt die demonstrierten Benchmark-Rechnungen von HI-VQE mit einem 24-Qubit-Fall für Li2S, einem 40-Qubit-Fall für ein N2 Molekül und einem 44-Qubit-Fall für ein FeP-NO System.\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",
        "#### Dissoziationspotential-Energieoberflächenkurve für ein Molekül „ Li2S ” mit 24 Qubits\n",
        "\n",
        "Die PES-Kurve wird mit der FCI-Referenz und der anfänglichen Schätzung von RHF zusammen mit dem Energiefehler der FCI-Referenz dargestellt.\n",
        "\n",
        "![Abbildung, die zeigt, dass HI-VQE Lösungen innerhalb der chemischen Genauigkeit einer klassischen Referenz-PES-Kurve für das System „ Li2S “ erzeugt](https://quantum.cloud.ibm.com/docs/images/guides/qunova-chemistry/Li2S_PES.avif).\n",
        "\n",
        "Die Berechnungen wurden mit den folgenden Geometrien und Optionen durchgeführt.\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": [
        "Die roten Punkte stellen die HI-VQE-Berechnungsergebnisse für sechs verschiedene Geometrien dar, und drei Geometrien, die 1.51, 2.40 und 3.80 Angström entsprechen, werden als Eingabe in der obigen Zelle bereitgestellt.\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "4d8d6cad",
      "metadata": {},
      "source": [
        "<span id=\"dissociation-pes-curve-for-an-n2-molecule-with-40-qubits\" />\n",
        "\n",
        "#### Dissoziations-PES-Kurve für ein Molekül „ N2 ” mit 40 Qubits\n",
        "\n",
        "Das Stickstoffmolekül wurde als Multireferenzsystem mit großen Korrelationsenergiebeiträgen jenseits des Hartree-Fock-Zustands identifiziert. Wir haben eine Benchmark-Berechnung für das Molekül N2 mit der cc-pvdz-Basis ( 20o,14e ) unter Verwendung der Auswahl der aktiven Homo-Lumo-Orbitale durchgeführt. Die CAS-Nummer (complete active space), die dieses Problem darstellt, lautet 6.009.350.400. Es ist nicht möglich, die Lösung des Eigenwertproblems (für Energie und elektronische Struktur) mit dieser Anzahl von Zuständen mit einem leistungsfähigen Desktop zu erhalten ( 16cpu/64GB ). Mit HI-VQE können die Benutzer den Unterraum der CAS-Zustände effizient durchsuchen, um chemisch genaue Ergebnisse zu finden, und dabei erheblich Rechenressourcen sparen. Die folgenden Diagramme zeigen die PES-Kurve von 40 Qubits HI-VQE-Berechnung der N2 Moleküldissoziation.\n",
        "\n",
        "![Abbildung, die zeigt, dass HI-VQE Lösungen innerhalb der chemischen Genauigkeit einer klassischen Referenz-PES-Kurve für das System „ N2 “ erzeugt.](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",
        "#### Dissoziations-PES-Kurve für fünfkoordiniertes Eisen(II)-Porphyrin mit einem NO-System mit 44 Qubits\n",
        "\n",
        "Ein weiteres interessantes chemisches System ist ein Eisen(II)-Porphyrin-Komplex ( FeP ) mit einem koordinierten Stickstoffmonoxid (NO)-Liganden, der ein biologisch relevantes Metalloporphyrin-System darstellt, das bei verschiedenen physiologischen Prozessen eine entscheidende Rolle spielt. In diesem Beispiel wurde HI-VQE verwendet, um die genaue potentielle Energieoberflächenkurve der intermolekularen Wechselwirkung zwischen FeP und NO (Grundzustandsenergie für unterschiedlich getrennte Geometrien) zu schätzen. Das kombinierte System hat insgesamt 450 Orbitale und 202 Elektronen ( 450o,202e ) mit 6-31g(d ) Basis. Die homo-lumo aktive Orbitalauswahl wurde verwendet, um den kleineren Fall aus dem realen Fall mit ( 22o,22e ) zu berechnen. Aus den folgenden Benchmark-Ergebnissen geht hervor, dass wir die chemische Genauigkeit (> 1.6 mHa ) mit einer hochmodernen klassischen Computerchemie-Berechnung der CASCI(DMRG)-Referenz ( 22o,22e ) erreichen konnten.\n",
        "\n",
        "![Abbildung, die zeigt, dass HI-VQE Lösungen innerhalb der chemischen Genauigkeit einer klassischen Referenz-PES-Kurve für das System „ FeP-NO “ erzeugt.](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",
        "## Benchmarks\n",
        "\n",
        "* Die exakte Matrixgröße ist die Anzahl der Determinanten für die exakte Lösung, wie FCI und CASCI.\n",
        "* HI-VQE-Berechnungsmuster und berechnet den Unterraum davon (d. h. die HI-VQE-Matrixgröße).\n",
        "* Die Gesamtzeit umfasst die QPU-Laufzeit und die Qiskit-Funktionsläufe mit CPU.\n",
        "* Die Genauigkeit wird anhand der Energiedifferenz zur exakten Lösung geschätzt.\n",
        "\n",
        "| Chemisches System | Anzahl der Qubits | Genaue Matrixgröße | HI-VQE-Matrixgröße | E(diff) von exact ( mHa ) | Anzahl der Iterationen | Gesamtzeit | QPU-Laufzeitnutzung |\n",
        "| ----------------- | ----------------- | ------------------ | ------------------ | ------------------------- | ---------------------- | ---------- | ------------------- |\n",
        "| $NH_3$ (8o,10e)   | 16                | 3136               | 1936               | 0.08                      | 6                      | 37 s       | 34 s                |\n",
        "| $Li_2S$ (10o,10e) | 20 Jahre          | 63504              | 3969               | 0.60                      | 5                      | 250 s      | 50 s                |\n",
        "| $NH_3$ (15o,10e)  | 30 Stunden        | 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",
        "## Fehlermeldungen abrufen\n",
        "\n",
        "Wenn Ihre Arbeitslast fehlschlägt, lautet der Status `ERROR` und der Aufruf von `job.result()` löst eine Ausnahme aus:\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",
        "## Unterstützung anfordern\n",
        "\n",
        "Sie können eine E-Mail [qiskit.support qunovacomputing.com](mailto:qiskit.support@qunovacomputing.com) senden, um Hilfe zu dieser Funktion zu erhalten.\n",
        "\n",
        "Wenn Sie Hilfe bei der Behebung eines bestimmten Fehlers benötigen, geben Sie bitte die Function Job ID des Auftrags an, bei dem der Fehler aufgetreten ist.\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "5a6a25c8",
      "metadata": {},
      "source": [
        "<span id=\"next-steps\" />\n",
        "\n",
        "## Nächste Schritte\n",
        "\n",
        "<Admonition type=\"tip\" title=\"Empfehlungen\">\n",
        "  * Beantragen Sie den Zugang zu dieser Funktion, indem Sie [dieses Formular](https://forms.office.com/r/zN3hvMTqJ1) ausfüllen.\n",
        "  * Rufen Sie die [API-Referenz](/docs/api/functions/qunova-chemistry) für diese Qiskit-Funktion auf.\n",
        "  * Versuchen Sie die [Dissoziations-PES-Kurve für FeP-NO mit dem HI-VQE-Tutorial zu berechnen](/docs/tutorials/qunova-hivqe).\n",
        "  * Rezension [Pellow-Jarman, A., et al. (2025).  HIVQE: Übergabe eines iterativen variationalen Quanteneigenschaftslösers für effiziente quantenchemische Berechnungen. arXiv Vorabdruck arXiv:2503.06292](https://arxiv.org/abs/2503.06292).\n",
        "  * Probieren Sie die [Dissoziations-PES-Kurven mit](/docs/tutorials/qunova-hivqe) dem Tutorial „Qunova- HiVQE ” aus.\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
}