{
  "cells": [
    {
      "cell_type": "markdown",
      "id": "f7d9993f",
      "metadata": {},
      "source": [
        "---\n",
        "title: \"HI-VQE Chemistry - Una funzione Qiskit di Qunova Computing\"\n",
        "description: \"Documentazione relativa alla funzione Qiskit HI-VQE di Qunova Computing. Può essere utilizzato per risolvere lo stato fondamentale e l'energia dello stato fondamentale dei sistemi chimici.\"\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 - Una funzione Qiskit di Qunova Computing\n",
        "\n",
        "*Consulta la [documentazione dell'API](/docs/api/functions/qunova-chemistry)*\n",
        "\n",
        "<Admonition type=\"note\">\n",
        "  Le funzioni Qiskit sono una funzione sperimentale disponibile solo per gli utenti di IBM Quantum® Premium Plan, Flex Plan e On-Prem (tramite IBM Quantum Platform API) Plan. Sono in stato di anteprima e sono soggetti a modifiche.\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=\"Versioni del pacchetto\">\n",
        "    Il codice presente in questa pagina è stato sviluppato utilizzando i seguenti requisiti.\n",
        "    Si consiglia di utilizzare queste versioni o versioni più recenti.\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",
        "## Panoramica\n",
        "\n",
        "Nella chimica quantistica, il problema della struttura elettronica si concentra sulla ricerca delle soluzioni dell'equazione di Schrödinger elettronica - le funzioni d'onda quantistiche che descrivono il comportamento degli elettroni del sistema. Queste funzioni d'onda sono vettori di ampiezze complesse, con ogni ampiezza corrispondente al contributo di una possibile configurazione di elettroni.\n",
        "\n",
        "Lo stato fondamentale è la funzione d'onda a più bassa energia del sistema e riveste una particolare importanza nello studio dei sistemi molecolari. L'approccio più accurato per il calcolo dello stato fondamentale considera tutte le possibili configurazioni degli elettroni, ma questo diventa intrattabile per sistemi più grandi, poiché il numero di configurazioni cresce esponenzialmente con le dimensioni del sistema.\n",
        "\n",
        "L'Handover Iterative Variational Quantum Eigensolver (HI-VQE) è un innovativo metodo ibrido quantistico-classico per stimare con precisione lo stato fondamentale dei sistemi molecolari. Integra l'hardware quantistico con l'informatica classica, utilizzando processori quantistici per esplorare in modo efficiente le configurazioni degli elettroni candidati e calcolando la funzione d'onda risultante su computer classici. Generando funzioni d'onda compatte ma chimicamente accurate, HI-VQE migliora la ricerca e la scoperta nella chimica quantistica e nella scienza dei materiali.\n",
        "\n",
        "![Immagine che mostra una panoramica dell'algoritmo HI-VQE di Qunova](https://quantum.cloud.ibm.com/docs/images/guides/qunova-chemistry/overview.svg)\n",
        "\n",
        "HI-VQE riduce la complessità computazionale del problema della struttura elettronica stimando in modo efficiente lo stato fondamentale con un'elevata precisione. Si concentra su un sottoinsieme accuratamente selezionato delle configurazioni di elettroni più rilevanti, ottimizzando sia l'accuratezza che l'efficienza.\n",
        "\n",
        "Combinando i punti di forza dei computer classici e quantistici, HI-VQE perfeziona e migliora iterativamente la funzione d'onda della stima corrente. Le sue esclusive tecniche di costruzione del sottospazio contribuiscono a rendere più efficiente la selezione della configurazione, in modo che gli utenti abbiano un maggiore controllo computazionale e una migliore precisione nelle simulazioni di chimica quantistica.\n",
        "\n",
        "Se desideri approfondire la conoscenza dell'algoritmo, puoi [leggere il documento di ricerca correlato.](https://arxiv.org/abs/2503.06292)\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "5f761442",
      "metadata": {},
      "source": [
        "<span id=\"description\" />\n",
        "\n",
        "## Descrizione\n",
        "\n",
        "Il numero di configurazioni di elettroni per un sistema molecolare cresce esponenzialmente con le dimensioni del sistema. Tuttavia, per alcuni stati elettronici, come lo stato fondamentale, è comune che solo una piccola frazione di configurazioni contribuisca significativamente all'energia dello stato. I metodi di interazione di configurazione selezionata (SCI) sfruttano questa spazialità per ridurre i costi computazionali, identificando e concentrandosi sulle configurazioni più rilevanti. Questo sottoinsieme di configurazioni viene definito sottospazio.\n",
        "\n",
        "HI-VQE sfrutta l'efficienza intrinseca dei computer quantistici per la rappresentazione dei sistemi molecolari, per aiutare la ricerca del sottospazio. Integra subroutine classiche e quantistiche per risolvere il problema della struttura elettronica con elevata precisione. A differenza dei metodi quantistici SCI esistenti, HI-VQE combina l'addestramento variazionale, la costruzione iterativa del sottospazio e lo screening della configurazione di pre-diagonalizzazione per migliorare l'efficienza riducendo le misure quantistiche, le iterazioni e i costi di diagonalizzazione classica. HI-VQE può quindi essere applicato a sistemi molecolari più grandi, che richiedono un maggior numero di qubit, e riduce il costo per risolvere un problema di una data dimensione con lo stesso grado di precisione.\n",
        "\n",
        "![Immagine che illustra in dettaglio ogni fase dell'algoritmo HI-VQE di Qunova.](https://quantum.cloud.ibm.com/docs/images/guides/qunova-chemistry/description.avif)\n",
        "\n",
        "Per calcolare lo stato fondamentale di un sistema, HI-VQE utilizza innanzitutto il pacchetto di chimica classica PySCF per generare una rappresentazione molecolare a partire da input forniti dall'utente, come la geometria molecolare e altre informazioni molecolari. Si entra quindi in un ciclo di ottimizzazione ibrido quantistico-classico, affinando iterativamente un sottospazio per rappresentare in modo ottimale lo stato fondamentale, riducendo al minimo il numero di configurazioni incluse. Il ciclo continua fino a quando non vengono soddisfatti i criteri di convergenza, come la dimensione del sottospazio o la stabilità dell'energia, dopodiché vengono emessi la funzione d'onda e l'energia dello stato fondamentale calcolate. Questi risultati possono essere utilizzati per costruire superfici di energia potenziale accurate ed eseguire ulteriori analisi del sistema.\n",
        "\n",
        "Il ciclo di ottimizzazione si concentra sulla regolazione dei parametri di un circuito quantistico al fine di generare un sottospazio di alta qualità. HI-VQE offre tre opzioni di circuiti quantistici: [`excitation_preserving`](/docs/api/qiskit/qiskit.circuit.library.excitation_preserving), [efficient\\_su2](/docs/api/qiskit/qiskit.circuit.library.efficient_su2) e [LUCJ](https://qiskit-community.github.io/ffsim/explanations/lucj.html). L'ottimizzazione viene avviata in prossimità dello stato di riferimento di Hartree-Fock, data la sua idoneità generale. Il circuito viene quindi eseguito su un dispositivo quantistico e, dallo stato quantistico risultante, vengono campionate alcune configurazioni, che vengono poi restituite sotto forma di stringhe binarie. A causa del rumore dei dispositivi quantistici, alcune configurazioni campionate potrebbero risultare fisicamente non valide, in quanto non conservano il numero di elettroni o lo spin. HI-VQE risolve questo problema utilizzando il processo di ripristino della configurazione del pacchetto [qiskit-addon-sqd](/docs/addons/qiskit-addon-sqd), in modo che gli utenti possano correggere le configurazioni non valide oppure scartarle.\n",
        "\n",
        "Le configurazioni valide vengono quindi sottoposte a una fase di screening opzionale per eliminare quelle che si prevede contribuiscano in misura minima. In questo modo si riduce la dimensione del sottospazio, diminuendo il costo della fase di diagonalizzazione. Se lo screening è abilitato, viene costruita un'hamiltoniana preliminare del sottospazio a partire dalle configurazioni valide e viene eseguita una diagonalizzazione con criteri di terminazione molto laschi. Sebbene l'accuratezza delle ampiezze risultanti per ogni configurazione sia bassa, è efficace per prevedere quali configurazioni lasciare fuori dal sottospazio in questa iterazione ed è veloce da calcolare.\n",
        "\n",
        "Le configurazioni selezionate vengono aggiunte al sottospazio e l'hamiltoniana del sistema viene proiettata in questo sottospazio. Il sottospazio si aggiorna iterativamente, conservando le configurazioni più rilevanti tra le iterazioni. Questo approccio si contrappone ai metodi alternativi perché il circuito quantistico non ha bisogno di approssimare l'intero stato fondamentale a ogni passo.\n",
        "\n",
        "Successivamente, l'hamiltoniana del sottospazio viene diagonalizzata in modo classico per ottenere l'autovalore più basso e l'autovettore corrispondente, che rappresentano un'approssimazione dello stato fondamentale e della sua energia. Man mano che la qualità del sottospazio migliora attraverso le iterazioni, il ground state calcolato approssima meglio il vero ground state. A questo punto si può eseguire un'ulteriore fase di screening per rimuovere dal sottospazio tutte le configurazioni che non hanno un contributo sostanziale allo stato fondamentale calcolato. Questa fase garantisce che il sottospazio trasportato nell'iterazione successiva sia il più compatto possibile. Questo viene valutato in base alle ampiezze restituite dalla diagonalizzazione, che rappresentano il contributo importante di ciascuna configurazione allo stato fondamentale calcolato.\n",
        "\n",
        "Un controllo di convergenza determina poi se un ulteriore addestramento possa migliorare i risultati. In caso affermativo, si esegue una fase opzionale di espansione classica, si aggiornano i parametri del circuito quantistico per minimizzare ulteriormente l'energia calcolata e si ripete il processo. La fase di espansione classica genera configurazioni aggiuntive per il sottospazio, integrando le configurazioni campionate dal dispositivo quantistico. Identifica innanzitutto la configurazione con l'ampiezza maggiore nei risultati della diagonalizzazione, prima di generare nuove configurazioni con eccitazioni singole e doppie a partire dalla configurazione identificata. Il numero desiderato di queste configurazioni viene quindi aggiunto al sottospazio.\n",
        "\n",
        "Una volta determinata la convergenza delle iterazioni, HI-VQE restituisce lo stato fondamentale calcolato (sotto forma di stati nel sottospazio e delle loro ampiezze nella funzione d'onda dello stato fondamentale), la sua energia e una misura di varianza dell'energia che indica se lo stato calcolato forma un autostato dell'hamiltoniana del sistema.\n",
        "\n",
        "Gli utenti possono decidere il circuito quantistico utilizzato e il numero di scatti effettuati per ogni circuito quantistico, nonché controllare la dimensione del sottospazio o consentire la generazione classica di configurazioni aggiuntive per assistere le configurazioni generate in modo quantistico. In questo modo gli utenti possono adattare il comportamento di HI-VQE alle applicazioni desiderate.\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "73390a19",
      "metadata": {},
      "source": [
        "<span id=\"get-started\" />\n",
        "\n",
        "## Introduzione\n",
        "\n",
        "Per prima cosa, [richiedi l'accesso alla funzione](https://forms.office.com/r/zN3hvMTqJ1).\n",
        "Successivamente, autenticati utilizzando la tua [chiave API IBM Quantum®](http://quantum.cloud.ibm.com/) e, supponendo che tu abbia già [salvato il tuo account](/docs/guides/functions-get-started#install-qiskit-functions-catalog-client) nel tuo ambiente locale, seleziona la funzione Qiskit come segue:\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",
        "## Esempio\n",
        "\n",
        "Il primo esempio mostra come calcolare l'energia di stato fondamentale di una molecola NH3 utilizzando l'algoritmo HI-VQE.\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "b03aa968",
      "metadata": {},
      "source": [
        "<span id=\"define-the-molecular-geometry-and-options\" />\n",
        "\n",
        "#### Definire la geometria molecolare e le opzioni\n",
        "\n",
        "La geometria molecolare di NH3 è fornita con coordinate cartesiane separate da \";\" per ogni atomo.\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": [
        "È possibile definire e fornire opzioni aggiuntive per il sistema molecolare nel seguente formato dizionario.\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": [
        "Eseguire la funzione con gli input della geometria e delle opzioni.\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": [
        "È buona norma stampare l'ID del lavoro della funzione, in modo da poterlo fornire nelle richieste di assistenza in caso di problemi.\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": [
        "Questo esempio utilizza quindi 16 qubit con 8 orbitali della base sto3g per una molecola NH3.\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "ad1c9bcb",
      "metadata": {},
      "source": [
        "Per verificare [lo stato](/docs/guides/functions-get-started#check-job-status) del carico di lavoro della funzione Qiskit o per ottenere [i risultati, procedere](/docs/guides/functions-get-started#retrieve-results) come segue:\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": [
        "Al termine del lavoro, i risultati possono essere ottenuti con l'istanza `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": [
        "Per accedere all'energia dello stato fondamentale, utilizzare il tasto \"energia\". La chiave \"eigenvector\" fornisce i coefficienti CI con la corrispondente notazione bitstring della configurazione degli elettroni memorizzata con gli \"stati\" dei risultati.\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",
        "## Licenze\n",
        "\n",
        "Si noti che l'uso di questa funzione di Qiskit è limitato a problemi che richiedono al massimo 20 qubit, a meno che non si ottenga una licenza che conceda un limite superiore.\n",
        "\n",
        "Per qualsiasi domanda relativa alle licenze, inviate un’e-mail a [qiskit.support @ qunovacomputing.com](mailto:qiskit.support@qunovacomputing.com).\n",
        "\n",
        "<span id=\"example-of-licensed-function-use\" />\n",
        "\n",
        "### Esempio di utilizzo di una funzione con licenza\n",
        "\n",
        "Agli utenti con licenza viene assegnato un token di licenza, dopodiché devono utilizzare una libreria wrapper per inviare il proprio token di licenza alla funzione.\n",
        "La libreria wrapper può essere installata [da PyPI](https://pypi.org/project/hivqe-qiskit-function-utils/) con `pip install hivqe-qiskit-function-utils`.\n",
        "L'esempio riportato di seguito illustra come utilizzare questa libreria per inviare il proprio token di licenza quando si chiama la funzione.\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",
        "## Prestazioni\n",
        "\n",
        "Questa sezione mostra i calcoli di benchmark dimostrati di HI-VQE con un caso a 24-qubit per Li2S, un caso a 40-qubit per una molecola N2 e un caso a 44-qubit per un sistema 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",
        "#### Curva della superficie dell'energia potenziale di dissociazione per una molecola di Li2S a con 24 qubit\n",
        "\n",
        "La curva PES è mostrata con il riferimento FCI e l'ipotesi iniziale di RHF, insieme all'errore energetico del riferimento FCI.\n",
        "\n",
        "![Immagine che mostra che HI-VQE produce soluzioni con un'accuratezza chimica pari a quella di una curva PES di riferimento classica per il sistema dell' Li2S](https://quantum.cloud.ibm.com/docs/images/guides/qunova-chemistry/Li2S_PES.avif).\n",
        "\n",
        "I calcoli sono stati eseguiti con le seguenti geometrie e opzioni.\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": [
        "I punti rossi rappresentano i risultati del calcolo HI-VQE per sei diverse geometrie, e tre geometrie corrispondenti a 1.51, 2.40, e 3.80 Angstrom sono fornite come input nella cella sopra.\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "4d8d6cad",
      "metadata": {},
      "source": [
        "<span id=\"dissociation-pes-curve-for-an-n2-molecule-with-40-qubits\" />\n",
        "\n",
        "#### Curva PES di dissociazione per una molecola di N2 con 40 qubit\n",
        "\n",
        "La molecola di azoto è stata identificata come un sistema multireferenziale con grandi contributi di energia di correlazione oltre lo stato Hartree-Fock. Abbiamo condotto un calcolo di riferimento per la molecola N2 con base cc-pvdz, ( 20o,14e ) utilizzando la selezione degli orbitali attivi omo-lumo. Il numero dello spazio attivo completo (CAS) per rappresentare questo problema è 6.009.350.400. Non è possibile ottenere la soluzione del problema degli autovalori (per l'energia e la struttura elettronica) con questo numero di stati utilizzando un potente desktop ( 16cpu/64GB ). Con HI-VQE, gli utenti possono cercare in modo efficiente nel sottospazio degli stati CAS per trovare risultati chimicamente accurati, con un notevole risparmio di risorse di calcolo. I grafici seguenti mostrano la curva PES del calcolo HI-VQE di 40 qubit della dissociazione della molecola N2.\n",
        "\n",
        "![Immagine che mostra come HI-VQE produca soluzioni con un'accuratezza chimica pari a quella di una curva PES di riferimento classica per il sistema dell' 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",
        "#### Curva PES di dissociazione per ferro(II)-porfirina a cinque coordinati con un sistema NO con 44 qubit\n",
        "\n",
        "Un altro sistema chimico interessante è un complesso ferro(II)-porfirina ( FeP ) con un ligando coordinato di ossido nitrico (NO), che rappresenta un sistema metalloporfirico biologicamente rilevante che svolge ruoli cruciali in vari processi fisiologici. In questo esempio, HI-VQE è stato utilizzato per stimare l'accurata curva della superficie di energia potenziale dell'interazione intermolecolare tra FeP e NO (energia di stato fondamentale per geometrie diversamente separate). Il sistema combinato ha 450 orbitali e 202 elettroni ( 450o,202e ) con base 6-31g(d ) in totale. La selezione degli orbitali attivi omo-lumo è stata utilizzata per calcolare il caso più piccolo dal caso reale con ( 22o,22e ). Dai seguenti risultati di benchmark, siamo stati in grado di raggiungere l'accuratezza chimica (> 1.6 mHa ) con un calcolo di chimica classica computerizzata allo stato dell'arte del riferimento CASCI(DMRG) ( 22o,22e ).\n",
        "\n",
        "![Immagine che mostra come HI-VQE produca soluzioni con un'accuratezza chimica pari a quella di una curva PES di riferimento classica per il sistema dell' 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",
        "## Benchmark\n",
        "\n",
        "* La dimensione della matrice esatta è il numero di determinanti per la soluzione esatta, come FCI e CASCI.\n",
        "* I campioni di calcolo HI-VQE e il calcolo del sottospazio di esso (come la dimensione della matrice HI-VQE).\n",
        "* Il tempo totale include il tempo di esecuzione della QPU e l'esecuzione della funzione Qiskit con la CPU.\n",
        "* L'accuratezza è stimata dalla differenza di energia rispetto alla soluzione esatta.\n",
        "\n",
        "| Sistema chimico   | Numero di qubit | Dimensione esatta della matrice | Dimensione della matrice HI-VQE | E(diff) da exact ( mHa ) | Numero di iterazioni | Tempo totale | Utilizzo del runtime della 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",
        "## Recupera i messaggi di errore\n",
        "\n",
        "Se il carico di lavoro fallisce, lo stato sarà `ERROR` e la chiamata a `job.result()` solleverà un'eccezione:\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",
        "## Ottenere supporto\n",
        "\n",
        "Per ricevere assistenza su questa funzione, puoi inviare un'e-mail a [qiskit.support qunovacomputing.com](mailto:qiskit.support@qunovacomputing.com)\n",
        "\n",
        "Se si desidera assistenza per la risoluzione di un errore specifico, fornire l'ID del lavoro di funzione che ha riscontrato l'errore.\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "5a6a25c8",
      "metadata": {},
      "source": [
        "<span id=\"next-steps\" />\n",
        "\n",
        "## Passi successivi\n",
        "\n",
        "<Admonition type=\"tip\" title=\"Suggerimenti\">\n",
        "  * Richiedete l'accesso alla funzione compilando [questo modulo](https://forms.office.com/r/zN3hvMTqJ1).\n",
        "  * Consulta la documentazione [di riferimento dell'API](/docs/api/functions/qunova-chemistry) relativa a questa funzione di Qiskit.\n",
        "  * Provate l'esercitazione [Calcolo della curva PES di dissociazione per FeP-NO con HI-VQE](/docs/tutorials/qunova-hivqe).\n",
        "  * Recensione [Pellow-Jarman, A., et al. (2025).  HIVQE: Risolutore iterativo iterativo di autovalori quantistici per calcoli efficienti di chimica quantistica. arXiv preprint arXiv:2503.06292](https://arxiv.org/abs/2503.06292).\n",
        "  * Prova le [curve PES di dissociazione con](/docs/tutorials/qunova-hivqe) il tutorial Qunova HiVQE.\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
}