{
  "cells": [
    {
      "cell_type": "markdown",
      "id": "f7d9993f",
      "metadata": {},
      "source": [
        "---\n",
        "title: \"Mitigación de errores en redes tensoriales (TEM) - una función Qiskit de Algorithmiq\"\n",
        "description: \"Introducción a TEM, una función Qiskit de Algorithmiq, para calcular estimaciones con mitigación de errores de posprocesamiento de software utilizando redes tensoriales.\"\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",
        "# Mitigación de errores en redes tensoriales (TEM): una función Qiskit de Algorithmiq\n",
        "\n",
        "*Consulte la [referencia de la API](/docs/api/functions/algorithmiq-tem)*\n",
        "\n",
        "<Admonition type=\"note\" title=\"Nota\">\n",
        "  Las funciones Qiskit son una función experimental disponible únicamente para los usuarios de los planes IBM Quantum® Premium Plan, Flex Plan y On-Prem (a través de IBM Quantum Platform API). Se trata de versiones preliminares sujetas a cambios.\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=\"Versiones del paquete\">\n",
        "    El código de esta página se ha desarrollado siguiendo los siguientes requisitos.\n",
        "    Recomendamos utilizar estas versiones o posteriores.\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",
        "## Visión general\n",
        "\n",
        "El método Tensor-network Error Mitigation (TEM) de Algorithmiq es un algoritmo híbrido algoritmo híbrido cuántico-clásico diseñado para realizar la mitigación del ruido enteramente en en la fase clásica de posprocesamiento. Con TEM, el usuario puede calcular los valores esperados de los observables mitigando los inevitables errores inducidos por el ruido que se producen en el hardware cuántico con mayor precisión y rentabilidad, lo que la convierte en una opción muy atractiva tanto para los investigadores de la industria.\n",
        "\n",
        "El método consiste en construir una red tensorial que represente la inversa de el canal de ruido global que afecta al estado del procesador cuántico y, a continuación el mapa a los resultados de medición informacionalmente completos adquiridos del del estado ruidoso para obtener estimadores insesgados de los observables.\n",
        "\n",
        "Como ventaja, TEM aprovecha mediciones completas desde el punto de vista informativo para dar\n",
        "acceso a un amplio conjunto de valores esperados mitigados de observables y tiene\n",
        "una sobrecarga de muestreo óptima en el hardware cuántico, como se describe en Filippov et\n",
        "al. (2023), y Filippov\n",
        "et [arXiv:2307.11740](https://arxiv.org/abs/2307.11740) al. (2024). [arXiv:2403.13542](https://arxiv.org/abs/2403.13542) La\n",
        "sobrecarga de medición se refiere al número de mediciones adicionales necesarias para\n",
        "llevar a cabo una mitigación eficiente de los errores, un factor crítico en la viabilidad de los\n",
        "cálculos cuánticos. Por lo tanto, el TEM tiene el potencial de permitir la ventaja cuántica\n",
        "en escenarios complejos, como aplicaciones en los campos del caos cuántico,\n",
        "la física de muchos cuerpos, la dinámica de Hubbard y las simulaciones de química de moléculas pequeñas\n",
        ".\n",
        "\n",
        "Las principales características y ventajas del TEM pueden resumirse así:\n",
        "\n",
        "1. **Sobrecarga de medición óptima** : TEM es óptima con respecto a [límites teóricos](https://journals.aps.org/prl/abstract/10.1103/PhysRevLett.131.210601), lo que significa que ningún método puede lograr una sobrecarga de medición menor. En otras en otras palabras, TEM requiere el mínimo número de mediciones adicionales para realizar mitigación de errores. Esto a su vez significa que TEM utiliza un tiempo de ejecución cuántico mínimo.\n",
        "2. **Rentabilidad** : Dado que el TEM se encarga de la mitigación del ruido totalmente en la postprocesamiento, no es necesario añadir circuitos adicionales al ordenador cuántico cuántico, lo que no sólo abarata el cálculo, sino que reduce el riesgo de riesgo de introducir errores adicionales debidos a las imperfecciones de los dispositivos cuánticos cuánticos.\n",
        "3. **Estimación de múltiples observables** : Gracias a las mediciones tEM estima eficientemente múltiples observables con la misma datos de medida del ordenador cuántico.\n",
        "4. **Mitigación de errores de medición** : La función TEM Qiskit también incluye un [método propio de mitigación de errores de medición](https://journals.aps.org/prresearch/abstract/10.1103/PhysRevResearch.5.033154) capaz de reducir significativamente los errores de lectura tras un breve proceso de calibración.\n",
        "5. **Precisión** : El TEM mejora significativamente la precisión y fiabilidad de las simulaciones cuánticas digitales, haciendo que los algoritmos cuánticos sean más precisos y fiables.\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "5f761442",
      "metadata": {},
      "source": [
        "<span id=\"description\" />\n",
        "\n",
        "## Descripción\n",
        "\n",
        "La función TEM permite obtener valores de expectativa mitigados por error para múltiples observables en un circuito cuántico con una sobrecarga de muestreo mínima. El circuito el circuito se mide con una medida de operador-valor positiva informacionalmente completa (IC-POVM) (IC-POVM), y los resultados de las mediciones se procesan en un ordenador clásico ordenador clásico. Esta medición se utiliza para realizar los métodos de red tensorial y construir un mapa de inversión de ruido. La función aplica un mapa que invierte todo el circuito ruidoso utilizando redes tensoriales para representar las capas ruidosas ruidosas.\n",
        "\n",
        "![Esquema TEM](https://quantum.cloud.ibm.com/docs/images/guides/algorithmiq-tem/tem_scheme.svg \"Estimación mitigada por error de un observable O a través del post-procesamiento de los resultados de medición del procesador cuántico ruidoso. U y N denotan una operación cuántica ideal y el mapa de ruido asociado, que puede ser generalmente no local (y extenderse a las cajas grises). D representa un tensor de operadores que son duales a los efectos en la medición del CI. El módulo de mitigación de ruido M es una red tensorial que se contrae eficientemente de la mitad hacia fuera. La primera iteración de la contracción está representada por la línea púrpura discontinua, la segunda por la línea discontinua y la tercera por la línea continua.\")\n",
        "\n",
        "Una vez que los circuitos se someten a la función, se transpilan y optimizados para minimizar el número de capas con puertas de dos qubits (las puertas más ruidosas de los dispositivos cuánticos) más ruidosas de los dispositivos cuánticos). El ruido que afecta a las capas se aprende mediante [Qiskit Runtime](/docs/api/qiskit-ibm-runtime/noise-learner-noise-learner) utilizando un modelo de ruido disperso de Pauli-Lindblad como se describe en 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",
        "El modelo de ruido es una descripción precisa del ruido en el dispositivo capaz de capturar características sutiles, incluida la interferencia entre qubits. Sin embargo, el ruido de los dispositivos puede fluctuar y derivar, y el ruido aprendido podría no ser exacto en el momento en que se realiza la estimación el momento en que se realiza la estimación. Esto podría dar lugar a resultados inexactos.\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "2995da29",
      "metadata": {},
      "source": [
        "<span id=\"get-started\" />\n",
        "\n",
        "## Cómo empezar\n",
        "\n",
        "Autentíquese utilizando su [clave API IBM Quantum Platform](http://quantum.cloud.ibm.com/) y seleccione la función TEM de la siguiente manera. (En este fragmento de código se da por hecho que ya has [guardado tu cuenta](/docs/guides/functions-get-started#install-qiskit-functions-catalog-client) en tu entorno 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",
        "## Ejemplo\n",
        "\n",
        "El siguiente fragmento muestra un ejemplo en el que TEM se utiliza para calcular los valores de expectativa de un observable dado un circuito cuántico simple.\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": [
        "Utilice las API sin servidor de Qiskit para comprobar el estado de su carga de trabajo 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": [
        "Puede devolver los 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",
        "  El valor esperado para el circuito sin ruido para el operador dado debería estar en torno a `0.18409094298943401`.\n",
        "</Admonition>\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "e9ec2e67",
      "metadata": {},
      "source": [
        "<span id=\"get-support\" />\n",
        "\n",
        "## Obtener soporte\n",
        "\n",
        "Contacta con [qiskit\\ \\_ibm@algorithmiq.fi](mailto:qiskit_ibm@algorithmiq.fi)\n",
        "\n",
        "Asegúrese de incluir la siguiente información:\n",
        "\n",
        "* Qiskit Función ID del puesto (`qiskit-ibm-catalog`), `job.job_id`\n",
        "* Descripción detallada del problema\n",
        "* Cualquier mensaje o código de error relevante\n",
        "* Pasos para reproducir el problema\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "5a6a25c8",
      "metadata": {},
      "source": [
        "<span id=\"next-steps\" />\n",
        "\n",
        "## Próximos pasos\n",
        "\n",
        "<Admonition type=\"tip\" title=\"Recomendaciones\">\n",
        "  * [Solicitar acceso a la función de mitigación de errores de redes Tensor de Algorithmiq](https://quantum.ibm.com/functions?id=4b1b9d76-c18b-4788-b70b-15125111fbe6).\n",
        "  * Consulta la [referencia](/docs/api/functions/algorithmiq-tem) de la API de esta función de 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
}