{
  "cells": [
    {
      "cell_type": "markdown",
      "id": "c5693a08-8ac2-4ca6-bfa9-3bf6148d257b",
      "metadata": {},
      "source": [
        "---\n",
        "title: \"Configuración predeterminada y opciones de configuración de Transpilation\"\n",
        "description: \"Los ajustes predeterminados y las opciones de configuración para la transpilación de circuitos cuánticos en Qiskit SDK.\"\n",
        "---\n",
        "\n",
        "<span id=\"transpilation-default-settings-and-configuration-options\" />\n",
        "\n",
        "# Configuración predeterminada y opciones de configuración de Transpilation\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=\"Versiones del paquete\">\n",
        "    El código de esta página se ha desarrollado teniendo en cuenta los siguientes requisitos.\n",
        "    Recomendamos utilizar estas versiones o versiones más recientes.\n",
        "\n",
        "    ```\n",
        "    qiskit[all]~=2.5.0\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": [
        "Los circuitos abstractos deben transpilarse porque las QPU tienen un conjunto limitado de puertas base y no pueden ejecutar operaciones arbitrarias. La función del transpilador es cambiar circuitos arbitrarios para que puedan ejecutarse en una QPU especificada.  Para ello, se traducen los circuitos a las puertas base compatibles y se introducen las puertas SWAP necesarias para que la conectividad del circuito coincida con la de la QPU.\n",
        "\n",
        "Como se explica en [Transpile con administradores de pases](transpile-with-pass-managers), puede crear un [administrador de pases](/docs/api/qiskit/qiskit.transpiler.PassManager) usando el [`generate_preset_pass_manager`](/docs/api/qiskit/qiskit.transpiler.generate_preset_pass_manager#qiskit.transpiler.generate_preset_pass_manager) función y pasa un circuito o lista de circuitos a su método [de ejecución](/docs/api/qiskit/qiskit.transpiler.PassManager#run) para transpilarlos. Puede llamar a `generate_preset_pass_manager` pasando sólo el nivel de optimización y el backend, eligiendo utilizar los valores por defecto para el resto de opciones, o puede pasar argumentos adicionales a la función para afinar la transpilación.\n",
        "\n",
        "<span id=\"basic-usage-without-parameters\" />\n",
        "\n",
        "## Uso básico sin parámetros\n",
        "\n",
        "En este ejemplo, pasamos un circuito y una QPU de destino al transpilador sin especificar más parámetros.\n",
        "\n",
        "Crea un circuito y visualiza el resultado:\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": [
        "Transpila el circuito y visualiza el resultado:\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",
        "## Todos los parámetros disponibles\n",
        "\n",
        "A continuación se indican todos los parámetros disponibles para la función [`generate_preset_pass_manager`](/docs/api/qiskit/qiskit.transpiler.generate_preset_pass_manager#qiskit.transpiler.generate_preset_pass_manager) función.  Hay dos clases de argumentos: los que describen el objetivo de la compilación y los que influyen en el funcionamiento del transpilador.\n",
        "\n",
        "Todos los parámetros, excepto `optimization_level` , son opcionales.  Para más información, consulte [la documentación de la API Transpiler](/docs/api/qiskit/transpiler#transpiler-api).\n",
        "\n",
        "* `optimization_level` (int) - Cuánta optimización realizar en los circuitos. Número entero en el rango (0 - 3). Los niveles más altos generan circuitos más optimizados, a costa de un mayor tiempo de transpilación. Consulte [Establecer el nivel de optimización del transpilador](set-optimization) para obtener más detalles.\n",
        "\n",
        "<span id=\"parameters-used-to-describe-the-compilation-target\" />\n",
        "\n",
        "### Parámetros utilizados para describir el objetivo de compilación:\n",
        "\n",
        "Estos argumentos describen la QPU de destino para la ejecución del circuito, incluyendo información como el mapa de acoplamiento de la QPU (que describe la conectividad de los qubits), las puertas base soportadas por la QPU y las tasas de error de las puertas.\n",
        "\n",
        "Muchos de estos parámetros se describen detalladamente en [Parámetros de uso común para la transpilación](common-parameters).\n",
        "\n",
        "<Accordion>\n",
        "  <AccordionItem title=\"**Parámetros de la QPU (`Backend`)**\">\n",
        "    **Parámetros** de backend - Si especifica `backend`, no necesita especificar `target` ni ninguna otra opción de backend. Del mismo modo, si especifica `target`, no necesita especificar `backend` ni ninguna otra opción de backend.\n",
        "\n",
        "    * `backend` (Backend) - Si se establece, el transpilador compila el circuito de entrada a este dispositivo. Si se establece cualquier otra opción que afecte a estos ajustes, como `coupling_map`, anula los ajustes de `backend`.\n",
        "    * `target` (Objetivo) - Un objetivo de transpilador backend. Normalmente se especifica como parte del argumento backend, pero si ha construido manualmente un objeto Target, puede especificarlo aquí. Esto anula el objetivo de `backend`.\n",
        "    * `backend_properties` ( BackendProperties ) - Propiedades devueltas por una QPU, incluyendo información sobre errores de puerta, errores de lectura, tiempos de coherencia de qubits, etc. Encuentra una QPU que proporcione esta información ejecutando `backend.properties()`.\n",
        "    * `timing_constraints` (Dictstr\\[, int] | None) - Una restricción opcional de hardware de control en la resolución de tiempo de instrucción. Esta información la proporciona la configuración de la QPU. Si la QPU no tiene ninguna restricción en la asignación del tiempo de instrucción, `timing_constraints` es `None` y no se realiza ningún ajuste. Una QPU podría informar de un conjunto de restricciones, a saber:\n",
        "      * `granularity`: Un valor entero que representa la resolución mínima de la puerta de impulsos en unidades de dt. Una puerta de impulsos definida por el usuario debe tener una duración que sea múltiplo de este valor de granularidad.\n",
        "      * `min_length`: Un valor entero que representa la longitud mínima de la puerta de impulsos en unidades de dt. Una puerta de impulsos definida por el usuario debe ser más larga que esta longitud.\n",
        "      * `pulse_alignment`: Un valor entero que representa una resolución temporal del tiempo de inicio de la instrucción de puerta. Las instrucciones de puerta deben comenzar a una hora que sea múltiplo de este valor.\n",
        "      * `acquire_alignment`: Un valor entero que representa una resolución temporal de la hora de inicio de la instrucción de medida. La instrucción de medida debe comenzar a una hora que sea múltiplo de este valor.\n",
        "  </AccordionItem>\n",
        "\n",
        "  <AccordionItem title=\"**Parámetros de diseño y topología**\">\n",
        "    * `basis_gates` ( \\[Liststr] | None) - Lista de nombres de puertas base a las que desenrollar.  Por ejemplo \\[, ' u1 ', ' u2 ', ' u3 ', 'cx']. Si `None`, no desenrolle.\n",
        "    * `coupling_map` ( CouplingMap | List\\[ \\[Listint] ]) - Mapa de acoplamiento dirigido (posiblemente personalizado) al objetivo en el mapeo. Si el mapa de acoplamiento es simétrico, es necesario especificar ambas direcciones. Estos formatos son compatibles:\n",
        "      * CouplingMap instancia\n",
        "      * Lista - debe darse como una matriz de adyacencia, donde cada entrada especifica todas las interacciones dirigidas de dos qubits soportadas por la QPU.  Por ejemplo: \\[\\[0, 1], \\[0, 3], \\[1, 2], \\[1, 5], \\[2, 5], \\[4, 1], \\[5, 3] ]\n",
        "    * `inst_map` ( \\[ListInstructionScheduleMap] | None) - Asignación de operaciones de circuito a programas de pulsos. Si `None`, se utiliza el `instruction_schedule_map` de la QPU.\n",
        "  </AccordionItem>\n",
        "</Accordion>\n",
        "\n",
        "<span id=\"parameters-used-to-influence-how-the-transpiler-works\" />\n",
        "\n",
        "### Parámetros utilizados para influir en el funcionamiento del transpilador\n",
        "\n",
        "Estos parámetros influyen en etapas específicas de la transpilación. Algunas de ellas pueden afectar a varias etapas, pero sólo se han incluido en una etapa para simplificar. Si especifica un argumento, como `initial_layout` para los qubits que desea utilizar, ese valor anula todos los pases que podrían cambiarlo. En otras palabras, el transpilador no cambiará nada de lo que especifiques manualmente. Para obtener más información sobre etapas concretas, consulte [Etapas del transpilador](transpiler-stages).\n",
        "\n",
        "<Accordion>\n",
        "  <AccordionItem title=\"**Etapa de inicialización**\">\n",
        "    * `hls_config` (HLSConfig) - Una clase de configuración opcional `HLSConfig` que se pasa directamente a la pasada de transformación `HighLevelSynthesis` . Esta clase de configuración permite especificar las listas de algoritmos de síntesis y sus parámetros para varios objetos de alto nivel.\n",
        "    * `init_method` (str) - El nombre del plugin a utilizar para la etapa de inicialización. Por defecto, no se utiliza un plugin externo. Puede ver una lista de los plugins instalados ejecutando `list_stage_plugins()` con `init` como argumento.\n",
        "    * `unitary_synthesis_method` (str) - El nombre del método de síntesis unitaria a utilizar. Por defecto, se utiliza `default` . Puede ver una lista de los plugins instalados ejecutando `unitary_synthesis_plugin_names()`.\n",
        "    * `unitary_synthesis_plugin_config` (dict) - Un diccionario de configuración opcional que se pasa directamente al plugin de síntesis unitaria. Por defecto, este ajuste no tiene ningún efecto porque el método de síntesis unitaria por defecto no toma configuración personalizada. La aplicación de una configuración personalizada sólo debería ser necesaria cuando se especifica un plugin de síntesis unitaria con el argumento `unitary_synthesis` . Como esto es algo personalizado para cada plugin de síntesis unitaria, consulte la documentación del plugin para saber cómo utilizar esta opción.\n",
        "  </AccordionItem>\n",
        "\n",
        "  <AccordionItem title=\"**Etapa de diseño**\">\n",
        "    * `initial_layout` (Diseño | Diccionario | Lista) - Posición inicial de los qubits virtuales en los qubits físicos. Si este diseño hace que el circuito sea compatible con las `coupling_map` restricciones, se utilizará. No se garantiza que el diseño final sea el mismo, ya que el transpilador podría permutar los qubits mediante intercambios u otros medios. Para obtener más información, consulte la [sección Diseño inicial](common-parameters#initial-layout).\n",
        "    * `layout_method` (str) - Nombre del pase de selección de diseño (`default`, `dense`, `sabre`, y `trivial`). Este también puede ser el nombre del plugin externo a utilizar para la etapa de diseño. Puede ver una lista de los plugins instalados ejecutando `list_stage_plugins()` con `layout` como argumento `stage_name` . El valor por defecto es `sabre`.\n",
        "  </AccordionItem>\n",
        "\n",
        "  <AccordionItem title=\"**Etapa de enrutamiento**\">\n",
        "    * `routing_method` (str) - Nombre del pase de enrutamiento (`basic`, `lookahead`, `default`, `sabre`, o `none`). También puede ser el nombre del plugin externo a utilizar para la etapa de enrutamiento. Puede ver una lista de los plugins instalados ejecutando `list_stage_plugins()` con `routing` como argumento `stage_name` . El valor por defecto es `sabre`.\n",
        "  </AccordionItem>\n",
        "\n",
        "  <AccordionItem title=\"**Etapa de traducción**\">\n",
        "    * `translation_method` (str) - Nombre del paso de traducción (`default`, `synthesis`, `translator`, `ibm_backend`, `ibm_dynamic_circuits`, `ibm_fractional`) También puede ser el nombre del plugin externo a utilizar para la etapa de traducción. Puede ver una lista de los plugins instalados ejecutando `list_stage_plugins()` con `translation` como argumento `stage_name` . El valor predeterminado es `translator`.\n",
        "  </AccordionItem>\n",
        "\n",
        "  <AccordionItem title=\"**Etapa de optimización**\">\n",
        "    * `approximation_degree` (float, en el rango 0-1 | Ninguno) - Dial heurístico utilizado para la aproximación del circuito ( 1.0 = ninguna aproximación, 0.0 = máxima aproximación). El valor por defecto es 1.0.  Especificando `None` se establece el grado de aproximación a la tasa de error informada. Consulte la [sección Grado de aproximación](common-parameters#approx-degree) para obtener más detalles.\n",
        "    * `optimization_method` (str) - El nombre del plugin a utilizar para la etapa de optimización. Por defecto no se utiliza un plugin externo. Puede ver una lista de los plugins instalados ejecutando `list_stage_plugins()` con `optimization` como argumento `stage_name` .\n",
        "  </AccordionItem>\n",
        "\n",
        "  <AccordionItem title=\"**Etapa de programación**\">\n",
        "    * `scheduling_method` (str) - Nombre del pase de programación. También puede ser el nombre del plugin externo que se utilizará para la fase de programación. Puede ver una lista de los plugins instalados ejecutando `list_stage_plugins()` con `scheduling` como argumento `stage_name` .\n",
        "      * 'as\\_soon\\_as\\possible': Programa instrucciones con avidez, lo antes posible en un recurso qubit (alias: `asap`).\n",
        "      * as\\_late\\_as\\_possible': Programar las instrucciones tarde, es decir, manteniendo los qubits en el estado de tierra cuando sea posible (alias: `alap`). Este es el valor por defecto.\n",
        "  </AccordionItem>\n",
        "\n",
        "  <AccordionItem title=\"**Ejecución del transpilador**\">\n",
        "    * `seed_transpiler` (int) - Establece semillas aleatorias para las partes estocásticas del transpilador.\n",
        "  </AccordionItem>\n",
        "</Accordion>\n",
        "\n",
        "Si no especifica ninguno de los parámetros anteriores, se utilizarán los siguientes valores por defecto. Consulte la [página de referencia de la API](../api/qiskit/transpiler_preset) del método para obtener más información:\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 3,
      "id": "bcaab4a6",
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/plain": [
              "<qiskit.transpiler.passmanager.StagedPassManager at 0x7f0bfe29df90>"
            ]
          },
          "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",
        "## Próximos pasos\n",
        "\n",
        "<Admonition type=\"tip\" title=\"Recomendaciones\">\n",
        "  * Aprende a [establecer el nivel de optimización](set-optimization).\n",
        "  * Revisar más [Parámetros de uso común](common-parameters).\n",
        "  * Descubre cómo [configurar el nivel de optimización al utilizar Qiskit Runtime](/docs/guides/runtime-options-overview).\n",
        "  * Consulte el tema «[Transpile con gestores de pases](/docs/guides/transpile-with-pass-managers) ».\n",
        "  * Para ver ejemplos, consulte [Representación de ordenadores cuánticos](/docs/guides/represent-quantum-computers).\n",
        "  * Aprenda [a transpilear circuitos](/docs/guides/circuit-transpilation-settings) como parte del flujo de trabajo de patrones de Qiskit utilizando Qiskit Runtime.\n",
        "  * Revise la [documentación de la API de 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
}