{
  "cells": [
    {
      "cell_type": "markdown",
      "id": "c5693a08-8ac2-4ca6-bfa9-3bf6148d257b",
      "metadata": {},
      "source": [
        "---\n",
        "title: \"Configurações padrão e opções de configuração da transpilação\"\n",
        "description: \"As configurações padrão e opções de configuração para transpilagem de circuitos quânticos no Qiskit SDK.\"\n",
        "---\n",
        "\n",
        "<span id=\"transpilation-default-settings-and-configuration-options\" />\n",
        "\n",
        "# Configurações padrão e opções de configuração da transpilação\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=\"Versões do pacote\">\n",
        "    O código desta página foi desenvolvido usando os seguintes requisitos.\n",
        "    Recomendamos o uso dessas versões ou de versões mais recentes.\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": [
        "Os circuitos abstratos precisam ser transpilados porque as QPUs têm um conjunto limitado de portas de base e não podem executar operações arbitrárias. A função do transpilador é alterar circuitos arbitrários para que eles possam ser executados em uma QPU especificada.  Isso é feito traduzindo os circuitos para as portas de base suportadas e introduzindo portas SWAP conforme necessário, de modo que a conectividade do circuito corresponda à da QPU.\n",
        "\n",
        "Conforme explicado em [Transpile com gerenciadores de passagem](transpile-with-pass-managers), você pode criar um [gerenciador de passagem](/docs/api/qiskit/qiskit.transpiler.PassManager) usando a função [`generate_preset_pass_manager`](/docs/api/qiskit/qiskit.transpiler.generate_preset_pass_manager#qiskit.transpiler.generate_preset_pass_manager) e passar um circuito ou uma lista de circuitos para seu método de [execução](/docs/api/qiskit/qiskit.transpiler.PassManager#run) para transpilá-los. Você pode chamar `generate_preset_pass_manager` passando apenas o nível de otimização e o backend, optando por usar os padrões para todas as outras opções, ou pode passar argumentos adicionais para a função para ajustar a transpilação.\n",
        "\n",
        "<span id=\"basic-usage-without-parameters\" />\n",
        "\n",
        "## Utilização básica sem parâmetros\n",
        "\n",
        "Neste exemplo, passamos um circuito e uma QPU de destino para o transpilador sem especificar nenhum parâmetro adicional.\n",
        "\n",
        "Crie um circuito e veja o 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": [
        "Transpile o circuito e veja o 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 os parâmetros disponíveis\n",
        "\n",
        "A seguir estão todos os parâmetros disponíveis para a função [`generate_preset_pass_manager`](/docs/api/qiskit/qiskit.transpiler.generate_preset_pass_manager#qiskit.transpiler.generate_preset_pass_manager) função.  Há duas classes de argumentos: aqueles que descrevem o alvo da compilação e aqueles que influenciam o funcionamento do transpilador.\n",
        "\n",
        "Todos os parâmetros, exceto `optimization_level` , são opcionais.  Para obter detalhes completos, consulte a [documentação da API do Transpiler](/docs/api/qiskit/transpiler#transpiler-api).\n",
        "\n",
        "* `optimization_level` (int) - O grau de otimização a ser executado nos circuitos. Número inteiro no intervalo (0 - 3). Níveis mais altos geram circuitos mais otimizados, à custa de um tempo de transpilação mais longo. Consulte [Definir o nível de otimização do transpilador](set-optimization) para obter mais detalhes.\n",
        "\n",
        "<span id=\"parameters-used-to-describe-the-compilation-target\" />\n",
        "\n",
        "### Parâmetros usados para descrever o destino da compilação:\n",
        "\n",
        "Esses argumentos descrevem a QPU de destino para a execução do circuito, incluindo informações como o mapa de acoplamento da QPU (que descreve a conectividade dos qubits), as portas de base suportadas pela QPU e as taxas de erro das portas.\n",
        "\n",
        "Muitos desses parâmetros são descritos em detalhes em [Parâmetros comumente usados para transpilação](common-parameters).\n",
        "\n",
        "<Accordion>\n",
        "  <AccordionItem title=\"**Parâmetros QPU (`Backend`)**\">\n",
        "    **Parâmetros de backend** - Se você especificar `backend`, não precisará especificar `target` ou qualquer outra opção de backend. Da mesma forma, se você especificar `target`, não precisará especificar `backend` ou qualquer outra opção de backend.\n",
        "\n",
        "    * `backend` (Backend) - Se isso for definido, o transpilador compila o circuito de entrada para esse dispositivo. Se for definida qualquer outra opção que afete essas configurações, como `coupling_map`, ela substituirá as configurações de `backend`.\n",
        "    * `target` (Target) - Um alvo do transpilador de backend. Normalmente, isso é especificado como parte do argumento de backend, mas se você construiu manualmente um objeto Target, poderá especificá-lo aqui. Isso substitui o alvo de `backend`.\n",
        "    * `backend_properties` ( BackendProperties ) - Propriedades retornadas por uma QPU, incluindo informações sobre erros de porta, erros de leitura, tempos de coerência de qubit e assim por diante. Encontre uma QPU que forneça essas informações executando `backend.properties()`.\n",
        "    * `timing_constraints` (Dictstr\\[, int] | None) - Uma restrição de hardware de controle opcional na resolução de tempo da instrução. Essas informações são fornecidas pela configuração da QPU. Se a QPU não tiver nenhuma restrição na alocação do tempo de instrução, `timing_constraints` será `None` e nenhum ajuste será realizado. Uma QPU pode informar um conjunto de restrições, a saber:\n",
        "      * `granularity`: Um valor inteiro que representa a resolução mínima da porta de pulso em unidades de dt. Uma porta de pulso definida pelo usuário deve ter uma duração que seja um múltiplo desse valor de granularidade.\n",
        "      * `min_length`: Um valor inteiro que representa o comprimento mínimo da porta de pulso em unidades de dt. Uma porta de pulso definida pelo usuário deve ser maior que esse comprimento.\n",
        "      * `pulse_alignment`: Um valor inteiro que representa uma resolução de tempo da hora de início da instrução de porta. As instruções do gate devem começar em um momento que seja um múltiplo desse valor.\n",
        "      * `acquire_alignment`: Um valor inteiro que representa uma resolução de tempo da hora de início da instrução de medição. A instrução de medição deve começar em um horário que seja um múltiplo desse valor.\n",
        "  </AccordionItem>\n",
        "\n",
        "  <AccordionItem title=\"**Parâmetros de layout e topologia**\">\n",
        "    * `basis_gates` ( \\[Liststr] | None) - Lista de nomes de portas de base para as quais desenrolar.  Por exemplo \\[' u1 ', ' u2 ', ' u3 ', 'cx']. Se for `None`, não desenrole.\n",
        "    * `coupling_map` ( CouplingMap | List\\[ \\[Listint] ]) - Mapa de acoplamento direcionado (possivelmente personalizado) para o destino no mapeamento. Se o mapa de acoplamento for simétrico, ambas as direções precisarão ser especificadas. Esses formatos são compatíveis:\n",
        "      * CouplingMap instância\n",
        "      * Lista - deve ser fornecida como uma matriz de adjacência, em que cada entrada especifica todas as interações direcionadas de dois qubits compatíveis com a QPU.  Por exemplo: \\[\\[0, 1], \\[0, 3], \\[1, 2], \\[1, 5], \\[2, 5], \\[4, 1], \\[5, 3] ]\n",
        "    * `inst_map` ( \\[ListInstructionScheduleMap] | None) - Mapeamento das operações do circuito para programações de pulso. Se for `None`, será usado o `instruction_schedule_map` da QPU.\n",
        "  </AccordionItem>\n",
        "</Accordion>\n",
        "\n",
        "<span id=\"parameters-used-to-influence-how-the-transpiler-works\" />\n",
        "\n",
        "### Parâmetros usados para influenciar o funcionamento do transpiler\n",
        "\n",
        "Esses parâmetros afetam estágios específicos de transpilação. Alguns deles podem afetar vários estágios, mas foram listados em apenas um estágio para simplificar. Se você especificar um argumento, como `initial_layout` para os qubits que deseja usar, esse valor substituirá todas as passagens que poderiam alterá-lo. Em outras palavras, o transpilador não alterará nada que você especificar manualmente. Para obter detalhes sobre estágios específicos, consulte [Estágios do transpiler](transpiler-stages).\n",
        "\n",
        "<Accordion>\n",
        "  <AccordionItem title=\"**Fase de inicialização**\">\n",
        "    * `hls_config` (HLSConfig) - Uma classe de configuração opcional `HLSConfig` que é passada diretamente para a passagem de transformação `HighLevelSynthesis` . Essa classe de configuração permite especificar as listas de algoritmos de síntese e seus parâmetros para vários objetos de alto nível.\n",
        "    * `init_method` (str) - O nome do plug-in a ser usado no estágio de inicialização. Por padrão, um plug-in externo não é usado. Você pode ver uma lista dos plug-ins instalados executando `list_stage_plugins()` com `init` como argumento do nome do estágio.\n",
        "    * `unitary_synthesis_method` (str) - O nome do método de síntese unitária a ser usado. Por padrão, `default` é usado. Você pode ver uma lista dos plug-ins instalados executando `unitary_synthesis_plugin_names()`.\n",
        "    * `unitary_synthesis_plugin_config` (dict) - Um dicionário de configuração opcional que é passado diretamente para o plug-in de síntese unitária. Por padrão, essa configuração não tem efeito, pois o método de síntese unitária padrão não requer configuração personalizada. A aplicação de uma configuração personalizada só deve ser necessária quando um plug-in de síntese unitária for especificado com o argumento `unitary_synthesis` . Como isso é personalizado para cada plug-in de síntese unitária, consulte a documentação do plug-in para saber como usar essa opção.\n",
        "  </AccordionItem>\n",
        "\n",
        "  <AccordionItem title=\"**Fase de layout**\">\n",
        "    * `initial_layout` (Layout | Dict | Lista) - Posição inicial dos qubits virtuais nos qubits físicos. Se esse layout tornar o circuito compatível com as `coupling_map` restrições, ele será utilizado. Não é garantido que o layout final seja o mesmo, pois o transpiler pode permutar qubits por meio de trocas ou outros meios. Para obter detalhes completos, consulte a [seção Layout inicial.](common-parameters#initial-layout)\n",
        "    * `layout_method` (str) - Nome da passagem de seleção de layout (`default`, `dense`, `sabre` e `trivial`). Esse também pode ser o nome do plug-in externo a ser usado no estágio de layout. Você pode ver uma lista dos plug-ins instalados executando `list_stage_plugins()` com `layout` como argumento `stage_name` . O valor padrão é `sabre`.\n",
        "  </AccordionItem>\n",
        "\n",
        "  <AccordionItem title=\"**Etapa de roteamento**\">\n",
        "    * `routing_method` (str) - Nome do passe de roteamento (`basic`, `lookahead`, `default`, `sabre` ou `none`). Esse também pode ser o nome do plug-in externo a ser usado no estágio de roteamento. Você pode ver uma lista dos plug-ins instalados executando `list_stage_plugins()` com `routing` como argumento `stage_name` . O valor padrão é `sabre`.\n",
        "  </AccordionItem>\n",
        "\n",
        "  <AccordionItem title=\"**Fase de tradução**\">\n",
        "    * `translation_method` (str) - Nome da etapa de tradução (`default`, `synthesis`, `translator`, `ibm_backend`, `ibm_dynamic_circuits`, `ibm_fractional`) Esse também pode ser o nome do plug-in externo a ser usado na etapa de tradução. Você pode ver uma lista dos plug-ins instalados executando `list_stage_plugins()` com `translation` como argumento `stage_name` . O valor padrão é `translator`.\n",
        "  </AccordionItem>\n",
        "\n",
        "  <AccordionItem title=\"**Fase de otimização**\">\n",
        "    * `approximation_degree` (float, no intervalo 0-1 | None) - Marcador heurístico usado para aproximação do circuito ( 1.0 = nenhuma aproximação, 0.0 = aproximação máxima). O valor padrão é 1.0.  Especificar `None` define o grau de aproximação para a taxa de erro relatada. Consulte a [seção Grau de aproximação](common-parameters#approx-degree) para obter mais detalhes.\n",
        "    * `optimization_method` (str) - O nome do plug-in a ser usado para o estágio de otimização. Por padrão, um plug-in externo não é usado. Você pode ver uma lista dos plug-ins instalados executando `list_stage_plugins()` com `optimization` como argumento `stage_name` .\n",
        "  </AccordionItem>\n",
        "\n",
        "  <AccordionItem title=\"**Fase de programação**\">\n",
        "    * `scheduling_method` (str) - Nome do passe de agendamento. Esse também pode ser o nome do plug-in externo a ser usado na etapa de agendamento. Você pode ver uma lista dos plug-ins instalados executando `list_stage_plugins()` com `scheduling` como argumento `stage_name` .\n",
        "      * 'as\\_soon\\_as\\_possible': Programar instruções com avidez, o mais cedo possível em um recurso de qubit (alias: `asap`).\n",
        "      * 'as\\_late\\_as\\_possible': Programar as instruções com atraso, ou seja, manter os qubits no estado fundamental quando possível (alias: `alap`). Esse é o padrão.\n",
        "  </AccordionItem>\n",
        "\n",
        "  <AccordionItem title=\"**Execução do transpiler**\">\n",
        "    * `seed_transpiler` (int) - Define sementes aleatórias para as partes estocásticas do transpilador.\n",
        "  </AccordionItem>\n",
        "</Accordion>\n",
        "\n",
        "Os valores padrão a seguir serão usados se você não especificar nenhum dos parâmetros acima. Consulte a [página de referência da API](../api/qiskit/transpiler_preset) do método para obter mais informações:\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óximas etapas\n",
        "\n",
        "<Admonition type=\"tip\" title=\"Recomendações\">\n",
        "  * Saiba como [definir o nível de otimização](set-optimization).\n",
        "  * Revisar mais [Parâmetros comumente usados](common-parameters).\n",
        "  * Saiba como [definir o nível de otimização ao usar o Qiskit Runtime](/docs/guides/runtime-options-overview).\n",
        "  * Acesse o tópico “[Transpile com gerenciadores de passes](/docs/guides/transpile-with-pass-managers) ”.\n",
        "  * Para exemplos, consulte [Representando computadores quânticos](/docs/guides/represent-quantum-computers).\n",
        "  * Aprenda [a transpilá-los](/docs/guides/circuit-transpilation-settings) como parte do fluxo de trabalho dos padrões Qiskit usando Qiskit Runtime.\n",
        "  * Consulte a [documentação da API do 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
}