{
  "cells": [
    {
      "cell_type": "markdown",
      "id": "f7d9993f",
      "metadata": {},
      "source": [
        "---\n",
        "title: \"Mitigação de erros em redes tensoriais (TEM) - Uma função Qiskit da Algorithmiq\"\n",
        "description: \"Introdução ao TEM, uma função Qiskit da Algorithmiq, para calcular estimativas com mitigação de erros de pós-processamento de software usando redes tensoriais.\"\n",
        "---\n",
        "\n",
        "{/* cspell:ignore POVM, mathbf, Filippov, Lindblad, Leahy, Rossi, García, Pérez, Minev, Kandala, Temme, informationally  */}\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "dde95705",
      "metadata": {},
      "source": [
        "<span id=\"tensor-network-error-mitigation-tem-a-qiskit-function-by-algorithmiq\" />\n",
        "\n",
        "# Mitigação de erros em redes tensoriais (TEM): uma função Qiskit da Algorithmiq\n",
        "\n",
        "*Consulte a [referência da API](/docs/api/functions/algorithmiq-tem)*\n",
        "\n",
        "<Admonition type=\"note\" title=\"Nota\">\n",
        "  As funções do Qiskit são um recurso experimental disponível apenas para usuários dos planos IBM Quantum® Premium Plan, Flex Plan e On-Prem (via IBM Quantum Platform API). Eles estão no status de versão prévia e estão sujeitos a alterações.\n",
        "</Admonition>\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "b130b1ae",
      "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 nesta página foi desenvolvido utilizando os seguintes requisitos.\n",
        "    Recomendamos usar essas versões ou mais recentes.\n",
        "\n",
        "    ```\n",
        "    qiskit[all]~=2.5.0\n",
        "    ```\n",
        "  </AccordionItem>\n",
        "</Accordion>\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "47066e9a",
      "metadata": {},
      "source": [
        "<span id=\"overview\" />\n",
        "\n",
        "## Visão geral\n",
        "\n",
        "O método Tensor-network Error Mitigation (TEM) da Algorithmiq é um algoritmo híbrido algoritmo híbrido quântico-clássico projetado para realizar a atenuação de ruído inteiramente no no estágio clássico de pós-processamento. Com o TEM, o usuário pode calcular os valores de expectativa dos observáveis, mitigando os inevitáveis erros induzidos por ruído que ocorrem no hardware quântico com maior precisão e eficiência de custo, tornando-a uma opção altamente atraente para pesquisadores quânticos e profissionais do e profissionais do setor.\n",
        "\n",
        "O método consiste na construção de uma rede de tensores que representa o inverso do canal de ruído global o canal de ruído global que afeta o estado do processador quântico e, em seguida aplicar o mapa aos resultados de medição informacionalmente completos adquiridos do estado do estado ruidoso para obter estimadores imparciais para os observáveis.\n",
        "\n",
        "Como vantagem, o TEM aproveita medições informativamente completas para dar\n",
        "acesso a um vasto conjunto de valores esperados mitigados de observáveis e tem\n",
        "sobrecarga de amostragem ideal no hardware quântico, conforme descrito em Filippov et\n",
        "al. (2023), e Filippov\n",
        "et [arXiv:2307.11740](https://arxiv.org/abs/2307.11740) al. (2024). [arXiv:2403.13542](https://arxiv.org/abs/2403.13542) A\n",
        "sobrecarga de medição refere-se ao número de medições adicionais necessárias para\n",
        "realizar uma mitigação eficiente de erros, um fator crítico na viabilidade dos\n",
        "cálculos quânticos. Portanto, o TEM tem o potencial de permitir a vantagem quântica\n",
        "em cenários complexos, como aplicações nas áreas de caos quântico,\n",
        "física de muitos corpos, dinâmica de Hubbard e simulações de química de pequenas moléculas.\n",
        "O artigo foi publicado na revista Nature Communications.\n",
        "\n",
        "Os principais recursos e benefícios do TEM podem ser resumidos da seguinte forma:\n",
        "\n",
        "1. **Ótima sobrecarga de medição** : O TEM é ideal com relação a [limites teóricos](https://journals.aps.org/prl/abstract/10.1103/PhysRevLett.131.210601), o que significa que nenhum método pode alcançar uma sobrecarga de medição menor. Em outras palavras, o TEM requer o número mínimo de medições adicionais para realizar a mitigação de erros. Isso, por sua vez, significa que o TEM usa um tempo de execução quântico mínimo.\n",
        "2. **Custo-benefício** : Como o TEM lida com a atenuação de ruído inteiramente no pós-processamento, não há necessidade de adicionar circuitos extras ao computador quântico, o que quânticos, o que não só torna a computação mais barata, mas também diminui o risco de introdução de erros adicionais devido às imperfeições dos dispositivos quânticos dispositivos quânticos.\n",
        "3. **Estimativa de vários observáveis** : Graças às medições com informações completas completa, o TEM estima com eficiência vários observáveis com os mesmos dados de medição do computador quântico.\n",
        "4. **Mitigação de erros de medição** : O TEM Qiskit Function também inclui um [método proprietário de atenuação de erros de medição](https://journals.aps.org/prresearch/abstract/10.1103/PhysRevResearch.5.033154) capaz de reduzir significativamente os erros de leitura após uma curta execução de calibração.\n",
        "5. **Precisão** : O TEM melhora significativamente a precisão e a confiabilidade das simulações quânticas digitais, tornando os algoritmos quânticos mais precisos e confiáveis.\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "5f761442",
      "metadata": {},
      "source": [
        "<span id=\"description\" />\n",
        "\n",
        "## Descrição\n",
        "\n",
        "A função TEM permite que você obtenha valores de expectativa atenuados por erro para vários observáveis em um circuito quântico com o mínimo de sobrecarga de amostragem. O circuito circuito é medido com uma medida de valor de operador positivo informacionalmente completa (IC-POVM), e os resultados de medição coletados são processados em um computador clássico. Essa medição é usada para executar os métodos de rede tensorial e criar um mapa de inversão de ruído. A função aplica um mapa que inverte totalmente inverte todo o circuito ruidoso usando redes de tensores para representar as camadas ruidosas camadas.\n",
        "\n",
        "![Esquemas do TEM](https://eu-de.quantum.cloud.ibm.com/docs/images/guides/algorithmiq-tem/tem_scheme.svg \"Estimativa mitigada por erro de um observável O por meio de resultados de medição pós-processamento do processador quântico com ruído. U e N denotam uma operação quântica ideal e o mapa de ruído associado, que pode ser geralmente não local (e estendido para caixas cinzas). D representa um tensor de operadores que são duplos aos efeitos na medição do IC. O módulo de atenuação de ruído M é uma rede tensorial que é eficientemente contratada do meio para fora. A primeira iteração da contração é representada pela linha roxa pontilhada, a segunda pela linha tracejada e a terceira pela linha sólida.\")\n",
        "\n",
        "Depois que os circuitos são submetidos à função, eles são transpilados e otimizados para minimizar o número de camadas com portas de dois qubits (as portas mais mais ruidosas em dispositivos quânticos). O ruído que afeta as camadas é aprendido por meio de [Qiskit Runtime](/docs/api/qiskit-ibm-runtime/noise-learner-noise-learner) usando um modelo de ruído Pauli-Lindblad esparso, conforme descrito em E. van den Berg, Z. Minev, A. Kandala, K. Temme, Nat. Física. (2023).\n",
        "[arXiv:2201.09866](https://arxiv.org/abs/2201.09866).\n",
        "\n",
        "O modelo de ruído é uma descrição precisa do ruído no dispositivo capaz de capturar recursos sutis, inclusive o cross-talk de qubit. Entretanto, o ruído nos dispositivos dispositivos pode flutuar e se desviar, e o ruído aprendido pode não ser preciso no no ponto em que a estimativa é feita. Isso pode resultar em resultados imprecisos resultados imprecisos.\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "2995da29",
      "metadata": {},
      "source": [
        "<span id=\"get-started\" />\n",
        "\n",
        "## Introdução\n",
        "\n",
        "Autentique-se usando sua [chave de API IBM Quantum Platform](http://quantum.cloud.ibm.com/) e selecione a função TEM da seguinte forma. (Este trecho pressupõe que você já tenha [salvo sua conta](/docs/guides/functions-get-started#install-qiskit-functions-catalog-client) no seu ambiente local.)\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 1,
      "id": "cc0a8093",
      "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": [
        "from qiskit_ibm_catalog import QiskitFunctionsCatalog\n",
        "\n",
        "tem_function_name = \"algorithmiq/tem\"\n",
        "catalog = QiskitFunctionsCatalog(channel=\"ibm_quantum_platform\")\n",
        "# verify that you have access to the function\n",
        "catalog.list()"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 2,
      "id": "08fa6dcf",
      "metadata": {},
      "outputs": [],
      "source": [
        "# Load your function\n",
        "tem = catalog.load(tem_function_name)"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "ae7adcc7",
      "metadata": {},
      "source": [
        "<span id=\"example\" />\n",
        "\n",
        "## Exemplo\n",
        "\n",
        "O trecho a seguir mostra um exemplo em que o TEM é usado para computar os valores de expectativa de um observável dado um circuito quântico simples.\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 3,
      "id": "ab05b87f",
      "metadata": {},
      "outputs": [],
      "source": [
        "from qiskit import QuantumCircuit\n",
        "from qiskit.quantum_info import SparsePauliOp\n",
        "\n",
        "# Create a quantum circuit\n",
        "qc = QuantumCircuit(3)\n",
        "qc.u(0.4, 0.9, -0.3, 0)\n",
        "qc.u(-0.4, 0.2, 1.3, 1)\n",
        "qc.u(-1.2, -1.2, 0.3, 2)\n",
        "for _ in range(2):\n",
        "    qc.barrier()\n",
        "    qc.cx(0, 1)\n",
        "    qc.cx(2, 1)\n",
        "    qc.barrier()\n",
        "    qc.u(0.4, 0.9, -0.3, 0)\n",
        "    qc.u(-0.4, 0.2, 1.3, 1)\n",
        "    qc.u(-1.2, -1.2, 0.3, 2)\n",
        "\n",
        "# Define the observables\n",
        "observable = SparsePauliOp(\"IYX\", 1.0)\n",
        "\n",
        "# Define the execution options\n",
        "pub = (qc, [observable])\n",
        "options = {\"default_precision\": 0.02}\n",
        "\n",
        "# Define backend to use. TEM will choose the least-busy device\n",
        "# reported by IBM if not specified\n",
        "backend_name = \"ibm_marrakesh\"\n",
        "\n",
        "# Run the TEM function (uses around three minutes of QPU time)\n",
        "job = tem.run(pubs=[pub], backend_name=backend_name, options=options)"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "6e2a97e2",
      "metadata": {},
      "source": [
        "Use as APIs do Qiskit Serverless para verificar o status da carga de trabalho do Qiskit Function:\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 4,
      "id": "47b0db71",
      "metadata": {},
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "44f9a7aa-a101-4e81-a6d7-740e5000c41b\n"
          ]
        },
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "QUEUED\n"
          ]
        }
      ],
      "source": [
        "# Print the ID so you can use it later, if necessary\n",
        "print(job.job_id)\n",
        "print(job.status())"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "fbaeace8",
      "metadata": {},
      "source": [
        "Você pode retornar os resultados como:\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 5,
      "id": "ad5b9a53",
      "metadata": {},
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "0.016561872123930566\n"
          ]
        }
      ],
      "source": [
        "result = job.result()\n",
        "evs = result[0].data.evs\n",
        "print(evs[0])"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "e5e138d3",
      "metadata": {},
      "source": [
        "<Admonition type=\"info\">\n",
        "  O valor esperado para o circuito sem ruído para o operador em questão deve estar em torno de `0.18409094298943401`.\n",
        "</Admonition>\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "e9ec2e67",
      "metadata": {},
      "source": [
        "<span id=\"get-support\" />\n",
        "\n",
        "## Obtenha suporte\n",
        "\n",
        "Entre em contato com a [qiskit\\ \\_ibm@algorithmiq.fi](mailto:qiskit_ibm@algorithmiq.fi)\n",
        "\n",
        "Certifique-se de incluir as seguintes informações:\n",
        "\n",
        "* Qiskit Function Job ID (`qiskit-ibm-catalog`), `job.job_id`\n",
        "* Uma descrição detalhada do problema\n",
        "* Quaisquer mensagens ou códigos de erro relevantes\n",
        "* Etapas para reproduzir o problema\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "5a6a25c8",
      "metadata": {},
      "source": [
        "<span id=\"next-steps\" />\n",
        "\n",
        "## Próximas etapas\n",
        "\n",
        "<Admonition type=\"tip\" title=\"Recomendações\">\n",
        "  * [Solicite acesso à funcionalidade de mitigação de erros da rede de tensores do Algorithmiq](https://quantum.ibm.com/functions?id=4b1b9d76-c18b-4788-b70b-15125111fbe6).\n",
        "  * Consulte a [referência da API](/docs/api/functions/algorithmiq-tem) para esta função do Qiskit.\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
}