{
  "cells": [
    {
      "cell_type": "markdown",
      "id": "c5693a08-8ac2-4ca6-bfa9-3bf6148d257b",
      "metadata": {},
      "source": [
        "---\n",
        "title: \"Impostazioni predefinite di transpilation e opzioni di configurazione\"\n",
        "description: \"Le impostazioni predefinite e le opzioni di configurazione per la trasposizione dei circuiti quantistici nell' Qiskit SDK e.\"\n",
        "---\n",
        "\n",
        "<span id=\"transpilation-default-settings-and-configuration-options\" />\n",
        "\n",
        "# Impostazioni predefinite di transpilation e opzioni di configurazione\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "051470e1-7466-4ad7-affe-6ceec583d5d5",
      "metadata": {
        "tags": [
          "version-info"
        ]
      },
      "source": [
        "{/*\n",
        "  DO NOT EDIT THIS CELL!!!\n",
        "  This cell's content is generated automatically by a script. Anything you add\n",
        "  here will be removed next time the notebook is run. To add new content, create\n",
        "  a new cell before or after this one.\n",
        "  */}\n",
        "\n",
        "<Accordion>\n",
        "  <AccordionItem title=\"Versioni del pacchetto\">\n",
        "    Il codice di questa pagina è stato sviluppato in base ai seguenti requisiti.\n",
        "    Si consiglia di utilizzare queste versioni o versioni più recenti.\n",
        "\n",
        "    ```\n",
        "    qiskit[all]~=2.5.1\n",
        "    qiskit-ibm-runtime~=0.47.0\n",
        "    ```\n",
        "  </AccordionItem>\n",
        "</Accordion>\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "a3513040-821f-4e07-9f82-98e8ba38819b",
      "metadata": {},
      "source": [
        "I circuiti astratti devono essere transpilati perché le QPU hanno un insieme limitato di porte di base e non possono eseguire operazioni arbitrarie. La funzione del transpiler è quella di modificare circuiti arbitrari in modo che possano essere eseguiti su una specifica QPU.  Ciò avviene traducendo i circuiti nelle porte di base supportate e introducendo le porte SWAP come necessario, in modo che la connettività del circuito corrisponda a quella della QPU.\n",
        "\n",
        "Come spiegato in [Transpile con i gestori di pass](transpile-with-pass-managers), è possibile creare un [gestore di pass](/docs/api/qiskit/qiskit.transpiler.PassManager) utilizzando la funzione [`generate_preset_pass_manager`](/docs/api/qiskit/qiskit.transpiler.generate_preset_pass_manager#qiskit.transpiler.generate_preset_pass_manager) e passare un circuito o un elenco di circuiti al suo metodo di [esecuzione](/docs/api/qiskit/qiskit.transpiler.PassManager#run) per eseguire la transpilazione. Si può chiamare `generate_preset_pass_manager` passando solo il livello di ottimizzazione e il backend, scegliendo di usare i valori predefiniti per tutte le altre opzioni, oppure si possono passare argomenti aggiuntivi alla funzione per affinare la trasposizione.\n",
        "\n",
        "<span id=\"basic-usage-without-parameters\" />\n",
        "\n",
        "## Utilizzo di base senza parametri\n",
        "\n",
        "In questo esempio, passiamo al transpiler un circuito e una QPU di destinazione senza specificare altri parametri.\n",
        "\n",
        "Creare un circuito e visualizzare il risultato:\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 1,
      "id": "f7070db2-2b3e-4dcd-bbc7-cac7662867b3",
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/plain": [
              "<Image src=\"/docs/images/guides/defaults-and-configuration-options/extracted-outputs/f7070db2-2b3e-4dcd-bbc7-cac7662867b3-0.svg\" alt=\"Output of the previous code cell\" />"
            ]
          },
          "execution_count": 1,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "from qiskit import QuantumCircuit\n",
        "from qiskit.circuit.library import grover_operator, DiagonalGate\n",
        "from qiskit_ibm_runtime.fake_provider import FakeSherbrooke\n",
        "\n",
        "# Create circuit to test transpiler on\n",
        "oracle = DiagonalGate([1] * 7 + [-1])\n",
        "qc = QuantumCircuit(3)\n",
        "qc.h([0, 1, 2])\n",
        "qc = qc.compose(grover_operator(oracle))\n",
        "\n",
        "# Add measurements to the circuit\n",
        "qc.measure_all()\n",
        "\n",
        "# View the circuit\n",
        "qc.draw(output=\"mpl\")"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "24622567-920c-48d9-aeba-d85a8dd34788",
      "metadata": {},
      "source": [
        "Transpilare il circuito e visualizzare il risultato:\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 2,
      "id": "27ab746b-e3d7-49a7-b40b-d1e2d9ca6088",
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/plain": [
              "<Image src=\"/docs/images/guides/defaults-and-configuration-options/extracted-outputs/27ab746b-e3d7-49a7-b40b-d1e2d9ca6088-0.svg\" alt=\"Output of the previous code cell\" />"
            ]
          },
          "execution_count": 2,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "from qiskit.transpiler import generate_preset_pass_manager\n",
        "\n",
        "# Specify the QPU to target\n",
        "backend = FakeSherbrooke()\n",
        "\n",
        "# Transpile the circuit\n",
        "pass_manager = generate_preset_pass_manager(\n",
        "    optimization_level=1, backend=backend\n",
        ")\n",
        "transpiled_circ = pass_manager.run(qc)\n",
        "\n",
        "# View the transpiled circuit\n",
        "transpiled_circ.draw(output=\"mpl\", idle_wires=False)"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "6c0e9d2d-511e-4948-9f48-3b7b0fe56d7a",
      "metadata": {},
      "source": [
        "<span id=\"all-available-parameters\" />\n",
        "\n",
        "## Tutti i parametri disponibili\n",
        "\n",
        "Di seguito sono riportati tutti i parametri disponibili per la funzione [`generate_preset_pass_manager`](/docs/api/qiskit/qiskit.transpiler.generate_preset_pass_manager#qiskit.transpiler.generate_preset_pass_manager) della funzione.  Esistono due classi di argomenti: quelli che descrivono l'obiettivo della compilazione e quelli che influenzano il funzionamento del transpiler.\n",
        "\n",
        "Tutti i parametri, tranne `optimization_level` , sono facoltativi.  Per maggiori dettagli, consultare la [documentazione dell'API Transpiler](/docs/api/qiskit/transpiler#transpiler-api).\n",
        "\n",
        "* `optimization_level` (int) - Quantità di ottimizzazione da eseguire sui circuiti. Numero intero nell'intervallo (0 - 3). Livelli più alti generano circuiti più ottimizzati, a scapito di un tempo di trasposizione più lungo. Per maggiori dettagli, vedere [Impostare il livello di ottimizzazione del transpiler](set-optimization).\n",
        "\n",
        "<span id=\"parameters-used-to-describe-the-compilation-target\" />\n",
        "\n",
        "### Parametri utilizzati per descrivere l'obiettivo della compilazione:\n",
        "\n",
        "Questi argomenti descrivono la QPU di destinazione per l'esecuzione del circuito, includendo informazioni come la mappa di accoppiamento della QPU (che descrive la connettività dei qubit), le porte di base supportate dalla QPU e i tassi di errore delle porte.\n",
        "\n",
        "Molti di questi parametri sono descritti in dettaglio in [Parametri comunemente usati per la transpilazione](common-parameters).\n",
        "\n",
        "<Accordion>\n",
        "  <AccordionItem title=\"**Parametri QPU (`Backend`)**\">\n",
        "    **Parametri di backend** - Se si specifica `backend`, non è necessario specificare `target` o altre opzioni di backend. Allo stesso modo, se si specifica `target`, non è necessario specificare `backend` o altre opzioni di backend.\n",
        "\n",
        "    * `backend` (Backend) - Se è impostato, il transpiler compila il circuito di ingresso su questo dispositivo. Se viene impostata un'altra opzione che influisce su queste impostazioni, come ad esempio `coupling_map`, essa sovrascrive le impostazioni di `backend`.\n",
        "    * `target` (Target) - Un target del backend transpiler. Normalmente viene specificato come parte dell'argomento backend, ma se si è costruito manualmente un oggetto Target, è possibile specificarlo qui. Questo sostituisce l'obiettivo di `backend`.\n",
        "    * `backend_properties` ( BackendProperties ) - Proprietà restituite da una QPU, comprese le informazioni sugli errori di gate, gli errori di lettura, i tempi di coerenza dei qubit e così via. Per trovare una QPU che fornisca queste informazioni, eseguire `backend.properties()`.\n",
        "    * `timing_constraints` (Dictstr\\[, int] | None) - Una restrizione hardware di controllo opzionale sulla risoluzione temporale delle istruzioni. Queste informazioni sono fornite dalla configurazione della QPU. Se la QPU non ha alcuna restrizione sull'allocazione del tempo di istruzione, `timing_constraints` è `None` e non viene eseguita alcuna regolazione. Una QPU potrebbe riferire una serie di restrizioni, in particolare:\n",
        "      * `granularity`: Un valore intero che rappresenta la risoluzione minima del gate degli impulsi in unità di dt. Un gate a impulsi definito dall'utente deve avere una durata che sia un multiplo di questo valore di granularità.\n",
        "      * `min_length`: Un valore intero che rappresenta la lunghezza minima del gate dell'impulso in unità di dt. Un gate di impulsi definito dall'utente dovrebbe essere più lungo di questa lunghezza.\n",
        "      * `pulse_alignment`: Un valore intero che rappresenta la risoluzione temporale dell'ora di inizio dell'istruzione del gate. Le istruzioni del gate devono iniziare in un momento che è un multiplo di questo valore.\n",
        "      * `acquire_alignment`: Un valore intero che rappresenta la risoluzione temporale dell'ora di inizio dell'istruzione di misura. L'istruzione di misura deve iniziare in un momento che è un multiplo di questo valore.\n",
        "  </AccordionItem>\n",
        "\n",
        "  <AccordionItem title=\"**Parametri di layout e topologia**\">\n",
        "    * `basis_gates` ( \\[Liststr] | None) - Elenco dei nomi delle porte di base a cui eseguire lo scorrimento.  Ad esempio \\[' u1 ', ' u2 ', ' u3 ', 'cx']. Se `None`, non srotolare.\n",
        "    * `coupling_map` ( CouplingMap | List\\[ \\[Listint] ]) - Mappa di accoppiamento diretto (eventualmente personalizzata) con l'obiettivo nella mappatura. Se la mappa di accoppiamento è simmetrica, è necessario specificare entrambe le direzioni. Sono supportati i seguenti formati:\n",
        "      * CouplingMap istanza\n",
        "      * Elenco - deve essere fornito come matrice di adiacenza, dove ogni voce specifica tutte le interazioni dirette a due qubit supportate dalla QPU.  Ad esempio: \\[\\[0, 1], \\[0, 3], \\[1, 2], \\[1, 5], \\[2, 5], \\[4, 1], \\[5, 3] ]\n",
        "    * `inst_map` ( \\[ListInstructionScheduleMap] | None) - Mappatura delle operazioni del circuito con le pianificazioni degli impulsi. Se `None`, viene utilizzato `instruction_schedule_map` della QPU.\n",
        "  </AccordionItem>\n",
        "</Accordion>\n",
        "\n",
        "<span id=\"parameters-used-to-influence-how-the-transpiler-works\" />\n",
        "\n",
        "### Parametri utilizzati per influenzare il funzionamento del transpiler\n",
        "\n",
        "Questi parametri hanno un impatto su specifiche fasi di traspirazione. Alcuni di essi potrebbero avere un impatto su più fasi, ma per semplicità sono stati elencati in una sola fase. Se si specifica un argomento, come ad esempio `initial_layout` per i qubit che si desidera utilizzare, tale valore sovrascrive tutti i passaggi che potrebbero modificarlo. In altre parole, il transpiler non modificherà nulla di quanto specificato manualmente. Per informazioni su fasi specifiche, vedere [Fasi del transpiler](transpiler-stages).\n",
        "\n",
        "<Accordion>\n",
        "  <AccordionItem title=\"**Fase di inizializzazione**\">\n",
        "    * `hls_config` (HLSConfig) - Una classe di configurazione opzionale `HLSConfig` che viene passata direttamente al passaggio di trasformazione `HighLevelSynthesis` . Questa classe di configurazione consente di specificare gli elenchi di algoritmi di sintesi e i loro parametri per vari oggetti di alto livello.\n",
        "    * `init_method` (str) - Il nome del plugin da usare per la fase di inizializzazione. Per impostazione predefinita, un plugin esterno non viene utilizzato. È possibile vedere l'elenco dei plugin installati eseguendo `list_stage_plugins()` con `init` come argomento del nome dello stage.\n",
        "    * `unitary_synthesis_method` (str) - Il nome del metodo di sintesi unitaria da utilizzare. Per impostazione predefinita, viene utilizzato `default` . È possibile vedere l'elenco dei plugin installati eseguendo `unitary_synthesis_plugin_names()`.\n",
        "    * `unitary_synthesis_plugin_config` (dict) - Un dizionario di configurazione opzionale che viene passato direttamente al plugin di sintesi unitaria. Per impostazione predefinita, questa impostazione non ha alcun effetto perché il metodo di sintesi unitario predefinito non richiede una configurazione personalizzata. L'applicazione di una configurazione personalizzata dovrebbe essere necessaria solo quando viene specificato un plugin di sintesi unitaria con l'argomento `unitary_synthesis` . Poiché questa opzione è personalizzata per ogni plugin di sintesi unitaria, si rimanda alla documentazione del plugin per sapere come utilizzarla.\n",
        "  </AccordionItem>\n",
        "\n",
        "  <AccordionItem title=\"**Fase di layout**\">\n",
        "    * `initial_layout` (Layout | Dict | List) - Posizione iniziale dei qubit virtuali sui qubit fisici. Se questo layout rende il circuito compatibile con i `coupling_map` vincoli, verrà utilizzato. Il layout finale non è garantito essere lo stesso, poiché il transpiler potrebbe permutare i qubit tramite scambi o altri mezzi. Per tutti i dettagli, consultare la [sezione Layout iniziale.](common-parameters#initial-layout)\n",
        "    * `layout_method` (str) - Nome del passaggio di selezione del layout (`default`, `dense`, `sabre` e `trivial`). Può anche essere il nome del plugin esterno da usare per lo stage di layout. Si può vedere l'elenco dei plugin installati eseguendo `list_stage_plugins()` con `layout` come argomento `stage_name` . Il valore predefinito è `sabre`.\n",
        "  </AccordionItem>\n",
        "\n",
        "  <AccordionItem title=\"**Fase di instradamento**\">\n",
        "    * `routing_method` (str) - Nome del passaggio di instradamento (`basic`, `lookahead`, `default`, `sabre`, o `none`). Questo può anche essere il nome del plugin esterno da usare per lo stadio di routing. Si può vedere l'elenco dei plugin installati eseguendo `list_stage_plugins()` con `routing` come argomento `stage_name` . Il valore predefinito è `sabre`.\n",
        "  </AccordionItem>\n",
        "\n",
        "  <AccordionItem title=\"**Fase di traduzione**\">\n",
        "    * `translation_method` (str) - Nome del passaggio di traduzione (`default`, `synthesis`, `translator`, `ibm_backend`, `ibm_dynamic_circuits`, `ibm_fractional`) Questo può anche essere il nome del plugin esterno da usare per la fase di traduzione. Si può vedere l'elenco dei plugin installati eseguendo `list_stage_plugins()` con `translation` come argomento `stage_name` . Il valore predefinito è `translator`.\n",
        "  </AccordionItem>\n",
        "\n",
        "  <AccordionItem title=\"**Fase di ottimizzazione**\">\n",
        "    * `approximation_degree` (float, nell'intervallo 0-1 | Nessuno) - Quadrante euristico usato per l'approssimazione del circuito ( 1.0 = nessuna approssimazione, 0.0 = approssimazione massima). Il valore predefinito è 1.0.  Specificando `None` si imposta il grado di approssimazione al tasso di errore riportato. Per maggiori dettagli, consultare la [sezione Grado di approssimazione](common-parameters#approx-degree).\n",
        "    * `optimization_method` (str) - Il nome del plugin da usare per la fase di ottimizzazione. Per impostazione predefinita, non viene utilizzato un plugin esterno. Si può vedere l'elenco dei plugin installati eseguendo `list_stage_plugins()` con `optimization` come argomento `stage_name` .\n",
        "  </AccordionItem>\n",
        "\n",
        "  <AccordionItem title=\"**Fase di programmazione**\">\n",
        "    * `scheduling_method` (str) - Nome del passaggio di pianificazione. Può anche essere il nome del plugin esterno da utilizzare per la fase di pianificazione. Si può vedere l'elenco dei plugin installati eseguendo `list_stage_plugins()` con `scheduling` come argomento `stage_name` .\n",
        "      * 'as\\_soon\\_as\\possible': Programma le istruzioni in modo avido, il più presto possibile su una risorsa di qubit (alias: `asap`).\n",
        "      * 'as\\_late\\_as\\possible': Programma le istruzioni in ritardo, cioè mantenendo i qubit nello stato di massa quando possibile (alias: `alap`). Questo è il valore predefinito.\n",
        "  </AccordionItem>\n",
        "\n",
        "  <AccordionItem title=\"**Esecuzione del transpiler**\">\n",
        "    * `seed_transpiler` (int) - Imposta i semi casuali per le parti stocastiche del transpiler.\n",
        "  </AccordionItem>\n",
        "</Accordion>\n",
        "\n",
        "Se non si specifica alcun parametro, vengono utilizzati i seguenti valori predefiniti. Per ulteriori informazioni, consultare la [pagina di riferimento dell'API](../api/qiskit/transpiler_preset) del metodo:\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 3,
      "id": "bcaab4a6",
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/plain": [
              "<qiskit.transpiler.passmanager.StagedPassManager at 0x7f1b3d2d0c90>"
            ]
          },
          "execution_count": 3,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "generate_preset_pass_manager(\n",
        "    optimization_level=1,\n",
        "    backend=None,\n",
        "    target=None,\n",
        "    basis_gates=None,\n",
        "    coupling_map=None,\n",
        "    initial_layout=None,\n",
        "    layout_method=None,\n",
        "    routing_method=None,\n",
        "    translation_method=None,\n",
        "    scheduling_method=None,\n",
        "    approximation_degree=1.0,\n",
        "    seed_transpiler=None,\n",
        "    unitary_synthesis_method=\"default\",\n",
        "    unitary_synthesis_plugin_config=None,\n",
        "    hls_config=None,\n",
        "    init_method=None,\n",
        "    optimization_method=None,\n",
        ")"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "f1acc6e6",
      "metadata": {},
      "source": [
        "<span id=\"next-steps\" />\n",
        "\n",
        "## Passi successivi\n",
        "\n",
        "<Admonition type=\"tip\" title=\"Suggerimenti\">\n",
        "  * Imparare a [impostare il livello di ottimizzazione](set-optimization).\n",
        "  * Rivedere altri [parametri comunemente utilizzati](common-parameters).\n",
        "  * Scopri come [impostare il livello di ottimizzazione](/docs/guides/runtime-options-overview).\n",
        "  * Consulta l'argomento [\"Transpile con gestori di pass\"](/docs/guides/transpile-with-pass-managers).\n",
        "  * Per alcuni esempi, consultare [Rappresentazione dei computer quantistici](/docs/guides/represent-quantum-computers).\n",
        "  * Scopri [come traspilare i circuiti](/docs/guides/circuit-transpilation-settings) nell'ambito del flusso di lavoro dei modelli di Qiskit.\n",
        "  * Consultare la [documentazione dell'API Transpile](/docs/api/qiskit/transpiler).\n",
        "</Admonition>\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "id": "a1b8767d",
      "source": "© IBM Corp., 2017-2026"
    }
  ],
  "metadata": {
    "kernelspec": {
      "display_name": "Python 3",
      "language": "python",
      "name": "python3"
    },
    "language_info": {
      "codemirror_mode": {
        "name": "ipython",
        "version": 3
      },
      "file_extension": ".py",
      "mimetype": "text/x-python",
      "name": "python",
      "nbconvert_exporter": "python",
      "pygments_lexer": "ipython3",
      "version": "3"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 5
}