{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "b48de935",
   "metadata": {},
   "source": [
    "# Two-qubit and multi-qubit circuits with Qiskit\n",
    "\n",
    "This notebook is continuation of the first tutorial on **one-qubit circuits**, now two or more qubits are considered. \n",
    "\n",
    "Goals:\n",
    "\n",
    "1. Define circuits with **two and more qubits**\n",
    "2. Apply two-qubit gates: **CNOT** and **controlled-U**\n",
    "3. Prepare and measure **Bell states**, show histograms\n",
    "4. Measure **ZZ**, **XZ**, and **XY** on Bell states using **basis rotations**\n",
    "5. Show a few **3+ qubit** circuits, **multi-controlled** operations, and how to **measure all qubits**\n",
    "\n",
    "Everything runs on **local simulation** (no account needed).\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "66674160",
   "metadata": {},
   "source": [
    "## 0. Imports\n",
    "\n",
    "We will use:\n",
    "\n",
    "- `QuantumCircuit` for circuits\n",
    "- `Statevector` for exact (ideal) states\n",
    "- `StatevectorSampler` for shot-based measurement counts\n",
    "- `plot_histogram` for plotting results\n",
    "\n",
    "> Reminder: with multiple qubits, gates can create **correlations** and **entanglement**.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "399b0621",
   "metadata": {},
   "outputs": [],
   "source": [
    "from qiskit import QuantumCircuit\n",
    "from qiskit.quantum_info import Statevector\n",
    "from qiskit.primitives import StatevectorSampler\n",
    "from qiskit.visualization import plot_histogram\n",
    "from qiskit.circuit.library import XGate, ZGate, YGate\n",
    "\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from IPython.display import display\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b7898755",
   "metadata": {},
   "source": [
    "## 1. Defining circuits with two and more qubits\n",
    "\n",
    "A two-qubit circuit with two classical bits:\n",
    "\n",
    "```python\n",
    "qc2 = QuantumCircuit(2, 2, name=\"two_qubit_example\")\n",
    "```\n",
    "- 2 qubits (wires 0 and 1)\n",
    "- 2 classical bits (to store measurement results)\n",
    "  \n",
    "A three-qubit circuit with three classical bits:\n",
    "```python  \n",
    "qc3 = QuantumCircuit(3, 3, name=\"three_qubit_example\")\n",
    "```\n",
    "...\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fc51cda7",
   "metadata": {},
   "source": [
    "### Qubit order and bitstrings (important!)\n",
    "\n",
    "- Qubit 0 is drawn at the **top** of the circuit diagram.\n",
    "- Measurement results (bitstrings) are displayed with the **highest classical bit on the left**.\n",
    "\n",
    "Note that this convention is called `Little Endian`(the reverse convention is `Big Endian`) \n",
    "\n",
    "So the string `'10'` means:\n",
    "- classical bit 1 = 1 (left character)\n",
    "- classical bit 0 = 0 (right character)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "91cb8306-2b1c-4cfc-ab28-a753ad9c3672",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 370.906x284.278 with 1 Axes>"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "qc = QuantumCircuit(2, 2, name=\"demo\")\n",
    "qc.h(0)\n",
    "qc.x(1)\n",
    "qc.measure([0, 1], [0, 1])\n",
    "qc.draw(\"mpl\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fefe1c93-b374-4d2c-b6eb-e61e378aa307",
   "metadata": {},
   "source": [
    "### A useful shortcut for measuring all qubits "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "aa501891-731a-4916-8a15-61db8fd05b3a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 496.776x367.889 with 1 Axes>"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "qc2 = QuantumCircuit(2, 2, name=\"demo\")\n",
    "qc2.h(0)\n",
    "qc2.x(1)\n",
    "qc2.measure_all()\n",
    "qc2.draw(\"mpl\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e97502a1-daca-4e16-ac4f-4c168292d685",
   "metadata": {},
   "source": [
    "### Exercice 1: \n",
    "\n",
    "- Make your own circuit using single qubit operation on different qubits and display it. \n",
    "- Make a circuit with 3 or 4 qubits. "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "371e0a15",
   "metadata": {},
   "source": [
    "## 2. Two-qubit gates\n",
    "\n",
    "### 2.1 CNOT (CX)\n",
    "\n",
    "`cx(control, target)` flips the target qubit **only if** the control qubit is `1`.\n",
    "\n",
    "Try: start from `|10⟩` and apply CX(0,1) → you get `|11⟩`.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "0a01598a-f347-4cca-972a-0ea56c7c1f16",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 580.387x367.889 with 1 Axes>"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "qc_c = QuantumCircuit(2, 2, name=\"CNOT_example\")\n",
    "qc_c.x(0)      # |10>\n",
    "qc_c.cx(0, 1)  # -> |11>\n",
    "\n",
    "#sv = Statevector.from_instruction(qc_c)\n",
    "#print(\"Statevector probabilities:\", sv.probabilities_dict())\n",
    "qc_c.measure_all()\n",
    "qc_c.draw(\"mpl\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "caa37e3a",
   "metadata": {},
   "source": [
    "### 2.2 Controlled-U (control on one qubit)\n",
    "\n",
    "Many single-qubit gates `U` can be turned into a controlled gate using `.control(1)`.\n",
    "\n",
    "Below we build controlled-Z and controlled-Y from single-qubit `ZGate` and `YGate`.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "37d9f1ad",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 454.517x200.667 with 1 Axes>"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cu_z = ZGate().control(1)\n",
    "cu_y = YGate().control(1)\n",
    "\n",
    "qc_cu = QuantumCircuit(2, name=\"controlled_U_examples\")\n",
    "qc_cu.h(0)\n",
    "qc_cu.append(cu_z, [0, 1])\n",
    "qc_cu.barrier()\n",
    "qc_cu.append(cu_y, [0, 1])\n",
    "qc_cu.draw(\"mpl\")\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2568fcaf",
   "metadata": {},
   "source": [
    "You can also use some controlled rotations directly, for example `cry(theta, control, target)`.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "f94f6d34",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPEAAACuCAYAAADnE+srAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAADu9JREFUeJzt3QlUleedBvCHC7KDCqiAyKZgEFlSEcW4j7ZFY+okMbUlak+0tmdqYFKCbVrTxDqGOGPH1HhMNWPimMUx0TZuSYwn2gSNG0EirigCkS2KYJBduLfnfT1gCNhRcgX+331+53gu91uunxef+67fe+0sFosFRCSWqbsvgIi+G4aYSDiGmEg4hphIOIaYSDiGmEg4hphIOIaYSDiGmEg4hphIOIaYSDiGmEg4hphIOIaYSDiGmEg4hphIOIaYSDiGmEg4hphIOIaYSDiGmEg4hphIOIaYSDiGmEg4hphIOIaYSDiGmEg4hphIOIaYSDiGmEg4hphIOIaYSDiGmEg4hphIOIaYSDiGmEg4hphIOIfuvgBqz2KxoLauSdRb4+riADs7u+6+DJvEEPdAKsDuozdBkurDc+Hm2qu7L8MmsTpNJBxDTCQcQ0wkHENMJBxDTCQcQ0wkHENMJBxDTCQcQ0wkHENMJBxDTCQcQ0wkHENMJJzhQ1xeXo7FixdjyJAhcHZ2xqBBg5CSkoKamhrMnz9f3z63Zs2a7r5MuseaG2/gq8OnUfjBURTtO46a4nLDvOeGvhUxOzsbiYmJKCsrg5ubG4YNG4aSkhKsXr0aeXl5qKio0MfFxsbCqJYnj8DvFsTiiT98itffO99u//4N05AQ0x8jZm/HqQuVMJrarypxduOHyH3rY9RfuXZrh50dAqZ8DxFPJGLgRNm/f5ORS+AZM2boAKempqK0tBRZWVn6+YoVK7B7924cO3ZMl8TR0dEwqufXHkfO+Qr899OjMHCAa5t9//54JCaO9MNza7MMGeCrORex8/tpOPHStrYBViwWFO39HHt/8h/IXPaGXohBKsOGODk5GUVFRVi0aBFWrlwJDw+P1n2qeh0TE4OmpiYEBwfD09MTRnWjyYx5Sz6Fm0svbHh+XOv28ODeWP5kHA6fuIz/2pgDo6nKL8VHs5eh7vK3wtuBk2u3I3vlO5DKkCE+c+YMtmzZAh8fH6Snp3d4zIgRI/SjCvM35efn46GHHtKh79u3L+bOnYurV69CsuNnriJ9wxf4wQMB+PkjQ2Ey2WHT8vGqRqkDbjbLLYVu5/MX3kJDxXXcqS9WbcX1S5chkSFDvHnzZpjNZiQlJcHd3b3DY1xcXNqF+Pr165g0aZIuwdVrrF+/HhkZGXjwwQf160m2bP1xZJ+9ipWp8Xj5mQSMiuqP37/8OXILvobR1JZV4MsPjt7dSRYLcjfthUSGDPG+ffv0owrk7aigfjvEKrTFxcV47733dHBnzZqFt99+G4cPH8aOHTsgWVOTRZe6zk72+LcfRyAjqwwvvXkSRnTxbxmwNN/9h+6Fd/ZDIkP2ThcWFurHoKCgDvertvDBgwfbhXjXrl0YO3YsAgMDW7clJCQgNDQUO3fuxMyZMzt1PXFxcbpD7U6Z0QvwWgJr+7q6EQ2NzXDsZY/3My6pwsdqwsLDYcIN9ATTzEEYA7+7Pk+1nwMHDoLZruubF76+vsjMzOzUuYYMsRoDVurq6jrcr9rLqvdatXtDQkJat58+fVqXvt8WGRmp93WWCrAq4e+YnSPgBat7/Y/jdIBP51ViycJYvLMnHxeL7rzd+M+UlpQAlkb0BNUe3oBb584tLimGGbL6CAwZYvWpVllZqYeUVEn6TWqoKS0tTf+shpa+uVayOqdPnz7tXs/Lywvnzp37TtdzN1RJXArrevKnwzAp3h+/W52J7fsLkbVlJl774zhMfOJ9q7y+n79/jymJm82O6EwOq9AIv4H+6A53+3/E8CGeMmWK7qFW48FTp05FeHi43q7GhefMmaNL4a6c5HG31aSa2htWXXd6SKAn0lPicDTnCla8dkL3Rj//ShbSU0bqcL/8dudrGS3O5+b2mHWna7+qxLtxv4SlqfmuzhubPBvJz8jr+zBkx5YaB/b29salS5d0VTgqKgphYWGIj4/X7dvJkyd3OLykhpSuXWs/rqhmdqnSWCJV0di4bDzsTXaYt+ST1uGk/3w9B8dOXtHhDg24NYZuBK4D+iJo2qi7OsfOZIfwx6dCIkOGOCAgQA8NTZ8+Xc+XLigo0CFct26dnqmVm5vbYYgjIiI6bPuqbWqfRKnzovDA/QPwh7VZOJt/azhJhflnz34KB3uTrlYbzYjfJ8HZp/cdHx+b+hjcB/WDRIYMsaJCp3qb1div+nPkyBEsXLhQd3qpUJtMJgwfPrzNOWpY6cCBA63DT4o6T82zVlM4pbkvpDeW/ep7OPTFZfzpf9sPJ53Ou6ar1RPi/HS12kg8Agfg+1uehavv/1+Dik5+GNFPPQqp7CySJ412ggrl6NGjMXToUJw9e7bNvqqqKl31VjO9li5divr6el0179evHw4dOqSD3xWs3Sa25e9iqiv/GrmbPsK5N/eitvTmDS8tVJX7vicS4fdA2w9zaQxbEt9OTk5Oh1VpRc2hVhNF/Pz8MHv2bCxYsABjxozRJXpXBZisy8WnN2J+PQuPHn0F03Yuh1PfmzP4nPv3waQNaeIDbNje6c6GWBk8eLAOLRmLycEe/eOGwt7Z8eZze+N8KBvnX2KlEBNJY3Mlccu8aiKjsLmSmMhoGGIi4RhiIuEYYiLhGGIi4RhiIuEYYiLhGGIi4RhiIuEYYiLhGGIi4Wxu7rQEri4O+v5caddM3YPvfA+kVuDsiTfYU8/E6jSRcAwxkXAMMZFwDDGRcAwxkXAMMZFwDDGRcAwxkXAMMZFwDDGRcAwxkXAMMZFwDDGRcAwxkXAMMZFwDDGRcAwxkXBc2YN6JIvFgqa6Buu/rtnS+nijtt6qr+3g4qRXZelqdhb1bhH1MCpgbw1+HJIk5b2JXq7OXf73sjpNJBxDTCQcQ0wkHENMJBxDTCQcQ0wkHENMJBxDTCQcZ2yRofgmROKHf13aZtuNmjpUXSxF3tZPcWbD+7A0m2EkDDEZ0sW/ZqBoX5b6djq49OuDIbMmIH7pz9A7bCAOpa2DkTDEZEhXc/JxcVtG6/NzG/fgXzP+jPCf/guyXtyMhqtVMAq2ickmNNU14ErWediZTPAMGgAjYYjJZngE3wxvw7VqGIlNhLi8vByLFy/GkCFD4OzsjEGDBiElJQU1NTWYP3++vn1szZo13X2ZZEUOLo5w8vKAk7cn+twXiFEvLIB3VKgujVUnl5EYvk2cnZ2NxMRElJWVwc3NDcOGDUNJSQlWr16NvLw8VFRU6ONiY2O7+1LJiu5fPFv/+aaC3Ydx5Jn/Mdz7bDJ6CTxjxgwd4NTUVJSWliIrK0s/X7FiBXbv3o1jx47pkjg6Orq7L5es6NwbH2HPY0uxN2k5Mpe9gfqK63Dz80ZzQ2PrMRNeeQoT1v26zXmOfdzxWParCH14nJjfh6FDnJycjKKiIixatAgrV66Eh4dH6z5VvY6JiUFTUxOCg4Ph6enZrddK1lV1sQylGTko3nccJ9dux8fzXoRP7GAkrPhF6zGHnnkV/UcORcjMB1q3jX5hAS4fPauHqKQwbIjPnDmDLVu2wMfHB+np6R0eM2LECP2owtyiJfTx8fFwcuqe5VbI+q5kntOTPVRg+8UN1dsar1Xjs9RXMGr5ArgM6Iug6aPhOyYSh34jaxzZsCHevHkzzGYzkpKS4O7u3uExLi4u7UJ84cIFbNu2Db6+vhg5cmSXXS/de1+s2gpzUzPuT/tx67bi/dko2PkZxq9JxugXf65D3VApq/fasCHet2+ffpw0adJtj1Gl7rdDPH78eN123rFjB6ZMmdIFV0pd5XpBGfK3H4T/+Gj0HxXRuj1z6SZ4hPjqqnfRx1nifiGG7Z0uLCzUj0FBQR3uV23hgwcPtguxyWT9z7W4uDjdmUZ3rpfFhOcQb/W37MSft+kqtSqN9zz6fOtEkOrCy6g88+V3eu3wsHDcsOvcvGxV88vMzOzUuYYNsRoDVurq6jrcr9rLqvdadXaFhITc02tRAS4uLr6nf4fRONrZA52YWFV26BQ2+j162/1fny/GpoBb1WlrKiktQaOlGV3NsCFWn2yVlZV6SCkhIaHNPlVdTktL0z+roaV73XmlroXuviSGsJuN/P38v1NJ3FmGDbFqz6oeajUePHXqVISHh+vtalx4zpw5uhTuqkkena0m2TKJ607nns/lutPWpMaBvb29cenSJURGRiIqKgphYWF66Cg0NBSTJ09u1x4m2/XhI8/h1F92QCLD9k4HBAQgIyMD06dP1/OlCwoK4OXlhXXr1umZWrm5ufo4hpikM2x1WomIiMCuXbvaba+urtahVj3Rw4cP75ZrI7IWQ4f4dk6dOqW/sEu1k11dXdvt37p1q348ffp0m+dqeqYaLiLqSWwyxDk5Of+0Kj1r1qwOn8+bNw8bN27sgiskunMMcQf4RZEkCUNMNiVo+mj4jYvC4d++iqn/96xeRA9mM27U1OPIktdQcTIf0thkiFvmVZPtCZw2Cnnv/l3//MnCP6Gxqvbm9sR4jH3pV9gx5WlIY5MhJuNy9HTFj/avgr2zI2pLymFy6gWPwAHI2/oJDv32VQwYORQHUm4uxdQSYH2eh6tqR0EihpgMpbGqFhf/lqGrxydWbYX/xBhEJz+Mz57+C/wnxODysXOwNN2a3zx29ZPwGxOpf977+AuQyLCTPch2eQ0PQUXOzbatd/Tg1nZu4A9HovCDo22OPZD8Mt6N+yWyVmxG3BJZ0zxbMMRkOF6Rwa3B9Y4O1QvJK/4TY/U9wx3Je/cTvaqHU9+OF5DoyRhiMhRXXy/dtq0tu7mKqVdEECrPfgmf+8P0bYhNtfWtbWe1JE8LVUqrFT2kreqhsE1MxqtKn7w1TNRYVYP75v0ADRXX8eWHt6rSvTxdMXF9KhycHWExW1B/tQofz+14Lbaezs7CmQ1kA7ci/ujvq7Dnked0WO+VpLw3u+VWRJbEZBO2T3wKRsU2MZFwDDGRcAwxkXDs2KIeSfW3qqVkJXFw6Z5vDGGIiYRjdZpIOIaYSDiGmEg4hphIOIaYSDiGmEg4hphIOIaYSDiGmEg4hphIOIaYSDiGmEg4hphIOIaYSDiGmEg4hphIOIaYSDiGmEg4hphIOIaYSDiGmEg4hphIOIaYSDiGmEg4hpgIsv0D7YPaZRWJwsgAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 287.294x200.667 with 1 Axes>"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "theta = np.pi/3\n",
    "qc_cry = QuantumCircuit(2, name=\"controlled_RY\")\n",
    "qc_cry.x(0)            # make control = 1\n",
    "qc_cry.cry(theta, 0, 1)\n",
    "qc_cry.draw(\"mpl\")\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "394a1456-3b2e-4033-a5df-425d7b31e552",
   "metadata": {},
   "source": [
    "## 3. Bell states\n",
    "\n",
    "The Bell states writes:\n",
    "\n",
    "- \\(|\\Phi^+\\rangle = (|00\\rangle + |11\\rangle)/\\sqrt{2}\\)\n",
    "\n",
    "We can prepare them using:\n",
    "\n",
    "1. `H` on qubit 0\n",
    "2. `CX(0,1)`\n",
    "3. optional `X`/`Z` corrections"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f7795956-1712-4f02-9ed5-208d8ed11726",
   "metadata": {},
   "source": [
    "### Preparing the Bell state and making shoots or ideal (statevector)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "0969518c-183a-4aea-8933-ddd993c7b5fe",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Ideal probabilities: {np.str_('00'): np.float64(0.4999999999999999), np.str_('11'): np.float64(0.4999999999999999)}\n",
      "Sampled counts: {'00': 507, '11': 493}\n"
     ]
    },
    {
     "data": {
      "image/png": "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C6H2xDru4t0n6gg2YMAA95iOC7UnVscwvY9K5URjoGq79Bm95+h11C5Z26AZcb766qvwa3rfzQcffOCGkdLrerPkaH++++672e40RpgDAGSaTmQ6uc6aNcud5HVSjwwxKsXRMp3EFixY4KrmzzvvPPvjjz/c4xoDUdWLmuJP7S8vuOACd3LT2IWZoedrhhmdNF9//XVXJaxw56eAoJIQhSq1VVJHHr23AqQCpqoOddIeMWLEEc/TrCbz5893oUNzET///PPhxw8cOOCqyvQaqhbUSd87yfupU9LDDz/sTvIKnfqcem5maRvUflVjQKpaVTcFj0gKytqfnTt3dp2TNLC3AoSCqXz99dcugGjWHbWF1WDurVq1ivm+eg2Nlajg6knvNWJtp3q8n3TSSa5ZiIY80liXd911l02ePNk9T+10Fdi07d7zVIWsfaUQrtCsakl9j7oA0Hr79+93x5VCnr95iIKjPremGoxnn4jaAOsYUmmZjimN36n30bZ7r63Pqu3yQmj//v3dYzpWNO6nAqC21TvOPbpYGDVqlHtdBXvR/tQFw7x58yxbNGgwMrZt2zZdirm/AJCV3449e/aEFi9e7P4eYWjxo3fLgtatW4duvfVW9++ff/7Zfab58+eHH//pp5/cskcffdTd//TTT0PFixcP7d27N83r1KhRI/TMM8/EfJ/TTz899MQTT4TvV61aNfya0XTv3j1UqlSp0K5du8LLnn766VCxYsVChw4dCm97w4YN0zzvrrvuCtWsWTN0+PDh8LIxY8Yc8bzatWunWWfAgAFuWSxfffWV2w87duxw92fNmuXuT5w4MbzOli1bQkWKFAlNmjTJ3R8/fnyoRIkS4ceHDh0aatCgQZrPeMkll0T9Ljze+/z555/ufs+ePUO9e/dOs46+k7x587rj780333Tfz/bt20PxeOutt0L58uVLsy8yeo1o2xnNzTffHOrcuXPMzysvv/zyEd/Xvn373H6cPn26u6/3atu2bfhxLS9UqFDc+8Q7rj/66KOo2xm5j2Xnzp2hAgUKhF599dXwsv3794cqVqwYeuCBB9I87+233476uiVLlgxNmDAh6mPp/mb4UDIHAMgUlSyotEpVRp5atWqlqSpUSZVK3jRziEo2vJsGt1YJiehxlcTUrl3bPVeP67UzWzLXoEEDK1q0aPi+SoT02io59Pi31fsM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AAAAAUaYAwAACDDCHAAAQIAR5gAAAAKMMAcAABBghDkAAIAAI8wBAAAEGGEOAAAgwAhzAAAAAUaYAwAACDDCHAAAQIAR5gAAAAKMMAcAABBghDkAAIAAI8wBAAAEGGEOAAAgwAhzAAAAAUaYAwAACDDCHAAAQIAR5gAAAAKMMAcAABBghDkAAIAAI8wBAAAEGGEOAAAgwAhzAAAAAUaYAwAACDDCHAAAQIAR5gAAAAKMMAcAABBghDkAAIAAI8wBAAAEGGEOAAAgwAhzAAAAAUaYAwAACDDCHAAAQIAR5gAAAAKMMAcAABBghDkAAIAAI8wBAAAEGGEOAAAgwAhzAAAAAUaYAwAACDDCHAAAQG4Mc3Xq1LFHH33UtmzZktgtAgAAQPLD3MqVK61v37520kkn2VVXXWUff/xxVl8KAAAARzvMrV+/3p566imrW7euTZo0yc4//3w75ZRTbNSoUe4xAAAApHCYK1asmPXp08e++uor+/bbb+3vf/+7/fnnn3bXXXdZlSpV7PLLL7cPPvjAQqFQYrcYAAAAie0AUa9ePXviiSds7dq19vLLL1vLli3tnXfesYsuusiqVq1qw4cPtzVr1iTirQAAAJCs3qyFChWyDh06WMeOHa18+fKuVG716tUuzFWvXt1uvvlm2717dyLfEgAAIFdLWJj78MMP7corr3QdIgYMGGB58uSxu+++23777TebPHmynXnmmTZ27FgX6AAAAJAY+bPzZFWdjhs3zsaPH2+///67W9a+fXvXlu7iiy+2fPnyuWUqlfvrX//qlqn6FQAAADkc5tQebvr06Xbo0CErV66cK43r3bu3VatWLeZzmjdvblOnTs3qWwIAACBRYU6hrG3btq4U7rLLLrP8+TN+KZXMVaxYMatvCQAAgESFuV9++cWNK5cZGpNONwAAAORwB4h///vf9u6776a7zpQpU+yGG27I6lsAAAAgWWFuwoQJtmjRonTX0WDCL774YlbfAgAAAEdznLlIe/fujastHQAAALImW0lLY8lFo8GCV61a5abzosMDAABAipTM5c2b140d540fN2zYsPB9/02lcSeffLItXLjQunbtmqxtBwAAyPUyVTLXqlWrcGncnDlzrEqVKlHHlVOgK1WqlBu6pFevXrl+JwMAAKREmJs9e3aaUroePXrYkCFDkrFdAAAASGabucOHD2f1qQAAAAhCb1YAAACkSMmcBv9VezkNFqy5WOMdDFjPeeGFF7KzjQAAAMhumNMgwQpmAwYMcGFO9+NBmAMAAEiBMLd8+XL3t1KlSmnuAwAAIABhrmrVquneBwAAwNFHBwgAAIDcUDK3cuXKLL+JBhcGAABADoY5zfQQay7W9Og5Bw8ezPTzAAAAkMAw161btyyFOQAAAKTI0CQAAABILXSAAAAACDDCHAAAQIAxnRcAAECAMZ0XAABAgDGdFwAAQIAxnRcAAECA0QECAAAgN4e5t956yy655BI3ZVeJEiXc30svvdTefvvtxGwhAAAAsl/NGklTdF199dX25ptvWigUsvz589uJJ55o69evt3fffdfee+8969y5s7322mvuMQAAAKRQydzIkSPtjTfesHPOOcc+/fRT27t3r61bt879nTNnjrVs2dIFvVGjRiV2iwEAAJD9MDd+/HirVauWzZgxw1q0aGF58/7vpfRXQU7LTzvtNBs3blxW3wIAAADJCnMqhbv44otjVqEWKFDAPa71AAAAkGJhrnLlyrZz585019m1a5frEAEAAIAUC3M33nijTZ48OWbJ25o1a2zSpEluPQAAACRH3N1MV65cmeb+lVdeaZ9//rk1bNjQbrvtNtdOrly5crZhwwbXIeKxxx5zy6644opkbDcAAAAyE+aqVatmefLkOWK5hiUZNGhQ1OUaomTKlCluGBMAAADkYJjr1q1b1DAHAACAAIS5CRMmJHdLAAAAkGnMzQoAABBghDkAAIAAy9akqTt27LAnn3zSzfawdu1a27dv3xHrqJ3d0qVLs/M2AAAASHSY27RpkzVv3twFteLFi9v27dutRIkStn//ftuzZ49bp2LFim4mCAAAAKRYNeuwYcNckHvppZfszz//dMtuv/12N+vDvHnzrEmTJm44kx9//DGR2wsAAIBEhLmpU6faeeedZ9dee+0RQ5acddZZ9sEHH9iKFSts+PDhWX0LAAAAJCvMaRovzf7gyZcvX7h6VUqWLGkXXnihm/ILAAAAKRbm1D7uwIEDacLb6tWr06yjtnSa3gsAAAApFuaqV6/uqlE9KqX76KOPbMuWLe6+Sunee+89q1KlSmK2FAAAAIkLc+3bt7eZM2fa7t273f0+ffrYxo0brUGDBnbFFVdY3bp1XQeJ66+/PqtvAQAAgGSFub/97W/23HPPhcPc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F154oY0ZM8b69u3rpveaNm2adevWLc06v/zyi1WpUiWrbwEAAIBkhbmBAwfae++9Z4888oi7X6FCBbvnnnvCj2/cuNE+//xz17sVAAAAKRbmypcvbz/++KPNnDnT3W/VqpUVL148/PjmzZtdT9YOHTokZksBAACQuDAnRYoUsYsuuijqY3Xq1HE3AAAAJA/TeQEAAOTWkrlDhw65wYFnzJhha9eudcOVRNJwJV5VLAAAAFIkzO3atcuNKffll1+6mR4U2rxpvMS7r78AAABIsWrWESNG2BdffGHDhw93nR0U3IYNG+Zmhpg0aZIbMPiKK66IWloHAACAHA5z//3vf+3ss8+2wYMHu8GCPeXKlXMhbtasWa76lblZAQAAUjDMrVy50oW58AvlzZumFE4zRHTq1MlefPHF7G8lAAAAEhvmjjvuOBfgPCVKlHBVrJFj0Sn0AQAAIMXCXNWqVdMEtbp169rHH38cLp1TGzr1YtXMEAAAAEixMHfeeee5dnEHDx5097t37+7CXbNmzaxfv37WsmVLW7RokXXu3DmR2wsAAIBEDE3Sq1cvO/HEE23Tpk2u9O2GG26wb775xp566ikX4kRBTj1cAQAAkGJh7tRTT7UBAwakWfbEE0/YkCFDbNmyZa4aVm3mAAAAkKIzQERTpkwZdwMAAEDyMTcrAABAbiyZ0wwP8dB0XkuXLs3q2wAAACAZYe7w4cNR513dtm2bbd261f1bHSMKFiyY1bcAAABAssLcihUr0n3sjjvusA0bNthHH32U1bcAAABATrSZq1atmk2aNMn+/PNPGzRoUDLeAgAAAMnsAFGgQAE7//zzbfLkyexoAACAIPZm3b17t/3xxx/JfAsAAIBcLWlh7tNPP7XXX3/datasmay3AAAAyPWy3AGibdu2UZdrrtY1a9aEO0hoRggAAACkWJibPXt21OUarqRkyZLWvn1716NV7eYAAACQguPMAQAAIOBzs27cuNFVqyrcVapUycqXL5+YLQMAAEByOkDs27fPHnjgATv11FPdLA+NGze2Jk2auDBXunRpu/3229MdVBgAAAA5FOZWrVplZ511lg0cONDNuaowpyCnm/6toUgee+wxF/BmzJgRft66desYcw4AACAnw9yBAwesY8eO9sMPP9hVV11lP/30k61evdq++OILd9O/teyaa65xoe7SSy91JXQK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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sampler = StatevectorSampler()\n",
    "\n",
    "# --- Ideal circuit (no measurement) ---\n",
    "qc_ideal = QuantumCircuit(2, name=\"bell_ideal\")\n",
    "qc_ideal.h(0)\n",
    "qc_ideal.cx(0, 1)\n",
    "\n",
    "ideal_state = Statevector.from_instruction(qc_ideal)\n",
    "ideal_probs = ideal_state.probabilities_dict()\n",
    "\n",
    "# --- Sampled circuit (with measurement) ---\n",
    "qc_sampled = QuantumCircuit(2, 2, name=\"bell_sampled\")\n",
    "qc_sampled.h(0)\n",
    "qc_sampled.cx(0, 1)\n",
    "qc_sampled.measure([0, 1], [0, 1])\n",
    "\n",
    "sampled_job = sampler.run([qc_sampled], shots=1000)\n",
    "sampled_result = sampled_job.result()\n",
    "sampled_counts = sampled_result[0].data.c.get_counts()\n",
    "\n",
    "print(\"Ideal probabilities:\", ideal_probs)\n",
    "print(\"Sampled counts:\", sampled_counts)\n",
    "\n",
    "# --- Histogram comparison (Jupyter-friendly) ---\n",
    "fig = plot_histogram(\n",
    "    [sampled_counts, ideal_probs],\n",
    "    legend=[\"sampled counts (1000 shots)\", \"ideal probabilities (statevector)\"]\n",
    ")\n",
    "display(fig)\n",
    "plt.close(fig)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2f1f0970-7e81-48fb-a6df-563737f23cdd",
   "metadata": {},
   "source": [
    "### Exercice 2\n",
    "- Generalize the Bell state by replacing the `H`gate with an `R_Y` rotation with an angle $\\theta$. What is the expected result? Display the circuit\n",
    "- Show the corresponding circuit and perform a set of measurements. Change $\\theta$ and show the corresponding result through a histogram\n",
    "- Make a three-qubit circuit with some controlled operations, plot the circuits, and eventually the measurement result.     "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "833a9734-0829-4352-aadd-a067ef3227b9",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "9982b8b6-cee3-4f09-a907-1bde51a8e6fc",
   "metadata": {},
   "source": [
    "## 4. Measuring ZZ, XZ, and XY on a Bell state (basis rotations)\n",
    "\n",
    "A standard measurement is in the Z (computational) basis.\n",
    "\n",
    "To measure other Pauli operators, we **rotate before measuring**:\n",
    "\n",
    "- Measure **Z**: do nothing\n",
    "- Measure **X**: apply **H** before measurement\n",
    "- Measure **Y**: apply **Sdg** then **H** before measurement\n",
    "\n",
    "For two qubits:\n",
    "- **ZZ** means Z on qubit 0 and Z on qubit 1\n",
    "- **XZ** means X on qubit 0 and Z on qubit 1\n",
    "- **XY** means X on qubit 0 and Y on qubit 1\n",
    "\n",
    "After rotations, we measure both qubits in Z basis and compute:\n",
    "\n",
    "- map bit `0 -> +1`, bit `1 -> -1`\n",
    "- multiply the two eigenvalues for each bitstring\n",
    "- average over all shots\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "7e443caf-2938-4564-a7dc-402f1182b93f",
   "metadata": {},
   "outputs": [],
   "source": [
    "# this rourine is a useful routine that takes the measurement results and maps it to the correct +1 or -1 results.  \n",
    "\n",
    "def exp_from_two_qubit_counts(counts, shots=None):\n",
    "    \"\"\"Compute expectation value of the product observable from a 2-qubit measurement.\n",
    "\n",
    "    Assumes that after basis rotations, measurement in Z gives eigenvalues:\n",
    "    0 -> +1, 1 -> -1 for each qubit, and we want the product (qubit0 * qubit1).\n",
    "\n",
    "    Note: Qiskit strings are 'b1b0' (highest classical bit on the left).\n",
    "    \"\"\"\n",
    "    if shots is None:\n",
    "        shots = sum(counts.values())\n",
    "    total = 0.0\n",
    "    for bitstring, c in counts.items():\n",
    "        b1 = int(bitstring[0])\n",
    "        b0 = int(bitstring[1])\n",
    "        ev0 = 1 if b0 == 0 else -1\n",
    "        ev1 = 1 if b1 == 0 else -1\n",
    "        total += (ev0 * ev1) * c\n",
    "    return total / shots"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "41203381-fd8c-4af3-9af2-efb633ee0263",
   "metadata": {},
   "source": [
    "### Exercice 3\n",
    "- If you have time, explain the routine using tensor products or $Z_0 Z_1$ and associated eigenbasis."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "663beafe-7985-4b50-91ea-d83ad388d63b",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "34440adc-db4c-44ad-9860-ddd6c2e17897",
   "metadata": {},
   "source": [
    "### 4.1 Measure ZZ, XZ, XY on |Phi+>\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "86e833a4-4d15-4639-a685-aa88a5af8d08",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 454.517x284.278 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Counts ZZ: {'00': 2030, '11': 1970}\n",
      "<ZZ> from counts: 1.0\n"
     ]
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 454.517x284.278 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Counts XZ: {'00': 961, '01': 1022, '10': 979, '11': 1038}\n",
      "<XZ> from counts: -0.0005\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAfIAAADuCAYAAADC8oWEAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAIB9JREFUeJzt3Qd4VHW+//FveodAAoQWOkioUsTQYQEhiKihqFxhRVHv1SuWRfav+1fxrqBYdq+6LHJFRV0VFMQCKgpSRBQB8SogCAJSQglSQggJKff5/nBiOskwyZzf5P16nnmSmTPl5MzJ+ZxfPX55eXl5AgAArOTv7RUAAADuI8gBALAYQQ4AgMUIcgAALEaQAwBgMYIcAACLEeQAAFiMIAcAwGIEOQAAFiPIAQCwGEEOAIDFCHIAACxGkAMAYDGCHAAAixHkAABYjCAHAMBiBDkAABYjyAEAsBhBDgCAxQhyAAAsRpADAGAxghwAAIsR5AAAWIwgBwDAYgQ5AAAWI8gBALAYQQ4AgMUIcgAALEaQAwBgMYIcAACLEeQAAFiMIAcAwGIEOQAAFiPIAQCwGEEOAIDFCHIAACxGkAMAYLFAb68AisvLyxPJzLRr04SEiJ+fn7fXwmewD0D3gZycHKs2REBAAMcBLyDInSgzU7LHTBCbBC6YJxIa6u3V8B3sA9WehvjChQut2g7JyckSGEisVDWq1gEAsBhBDgCAxQhyAAAsRpADAGAxghwAAIsR5AAAWIwgBwDAYgQ5AAAWI8gBALAYQQ4AgMUIcgCoBnJzc+XXX3+VQ4cOyZEjRyQtLa1Cr8/OzpZ3331XsrKyKm0d4R4mxQUAH/Xzzz/Ll19+Kbt27ZI9e/ZIRkZGoeW1atWS5s2bS6tWraRv375Su3btUkP8b3/7m2zcuFF27Ngh99xzjwQHB1fRX4ELIcgBwMdK3mvXrpWPP/7YBHhZjh8/bsJZbwsWLJBu3brJ8OHDpU2bNiWGuNqyZYvs27dPWrRoUel/C8rH54M8NTVVZs6cKYsWLZL9+/dLnTp15Nprr5Xp06fLXXfdJS+99JI899xzcuedd3p7VVFJcnJyZcnqffLuir1y7ESmhIYESIdWteSWa9tI/TrhbHf4jMOHD8vs2bNl27ZtxZZpabtJkyYSHh5uLpF68uRJ2b17t5w5cyb/BGD9+vXmdsUVV8j1119vrmRWMMS1FD5lyhRC3GF8Osg3b94sw4YNM21CERERkpCQIAcPHpRnn33WnKlqe5Hq3Lmz+KJVqUdk8LqV8nhCR7m3xSUlPif4gwWSVLe+LO7RR3zRy4t3yCP/3CS/pKQXevztZbvl0dnfyqjBzeT5BxIlJto3L8HKPlB9rFmzRl588UXJzMzMf6xp06YyePBg6dq1q0RHRxd7jYa3Hh+1BL98+XI5ceKEefyTTz6RTZs2mYLP1q1bC4V4hw4dqvCvQrUOci2Jjxgxwuyk9913nzz88MMSFRVllmkJferUqeZs08/PTzp27Ojt1UUl0KB+eNamUpdn5+TJWx//LJu2HZNVLydJXCylc9hJg/fll1/Ovx8bGyuTJk0yxzY9xpXG399fGjRoIKNHj5ZrrrlGli1bJm+99Zbp0Hb06FFzU4S4s/lsr3WtNteqdK0yf+qpp/JDXN1///3SqVMn0/ajZ6w1atTw6rrC8976aFeZIV7Qjr0nZeRdn0lubh5fBayzevXqQiHev39/efLJJ80xrqwQL0oLNklJSfLYY4+Z6veCbrrpJkriDuaTQa7tQ/PnzzdnpTNmzCjxOVrVpHRnL0jbjK666ioT/Nqjc/z48XLs2LEqWW94hrb/PfY/31XoNet/OCqffXWArwBW0RrHuXPn5t+/+uqr5bbbbpOwsDC33k8LN1oid7WbFyzx6zI4k08G+ZtvvmnafsaNGyeRkZElPse1oxcMch1XOWDAAFOS1/eYM2eOaXe68sorzfvZ6kxOjqRmZpZ480VfbDosP+w8XuHXzZpfvIOQr6hu+0B1oMekF154Ib9NXI9dY8eOrVApvKCivdO1Ol0LQ0qHrr333nseXHt4kk+2ka9YsSJ/xy6NhnXRINfgPnDggKmqio+PN481atRIevbsKe+//74527XRo9u3mFt18fHa899tRX30xX5Tmnf3QOhk1W0fqA6++OKL/N7pdevWlQkTJng0xLVjm3YS/stf/mJOGnTkT58+fcxnwVl8Msj37t1rfupQi9J2Wu2lWTTIP/zwQ+ndu3d+iKvExEQzYcIHH3zgdpDr2EytAiuvMH9/2do5UTzllvjmktygcYnLhn21yiOf0bp1a8lwSK3FifAkkdAeFX5d1rlcadS4mfiJ96sQ2QegYVpa06DSceIu2rEtNDTUoyHu6p2uNZJakMnJyTE923VYWlnHAWZ+c09cXJxs2LDBrdf6ZJCnp58falR0FiMXbT/XXu3aDt6sWbP8x3WYhfbeLKpdu3b5QzDcoSGuJf3yCg8IEPHgiLiWkZHyhzr1pDLpsD6tvnWEuOMi7hzT8nLk4IHzJ4Hexj6AkJCQUjfCzp07zaxtSgsa7du3r5QQV9oBbsmSJSbIP//8cxk1apQEBQWVehwoOPwNVSPQV89sdMYiHQepJeqCUlJSzI6qig7N0NeUNNZSJ1LYvn37Ra1PRUtjttEhLE4pkWcEnZTzMwRUTFDOQanbsKE4AfsAypoC1VWjqHScuDtV6uUJcaXHxB49epipXk+dOiXff/+9dOnSpdTjACXyqskJnw/yQYMGmbajJ554wuzkWt2jvvnmG7nxxhtNabwqJ4KpaHVJ3tmzkj1mgthE51/2c7Nqz9POncuVJkPnS8rRwj1vL2TuE+PkxhGPiBOwD0CDduHChSVuCFdpvOAInMoI8YLNgxrkrs8uLcj1OKDD2FC17Cv6lYOOE4+JiTHzAWu1uO6celGAyy67zFRDDRw4sMShZzrczDWzUUE6A1xpFxOA8wQF+csdY9tW6DU6VevoIb83swBOpR3PtBe50pnXKjoPRkVDXOlxs+AQXTiLTwa59jTXYWM6+b92ANGdXoNYh2poW4+eNZYU5G3bti2xLVwf02Wwx9SJHeWq/r93WixLZHigvP/sIAkNoSQB59N5LVzt0KV16PVkiKt69erld6arSH8fVA2fDHKlwau90HVsuN6+/vprufXWW01HOA12nZqwaAcR7Z2pQzpcQ9OUvk7nZdfpXmGPwEB/efvpgXLrqDZSVvNh80ZRsvrl4dKtXZ2qXD3gokrkOgRMaxArUlOor3MnxJW2wetn6ufVrFmTb89h/PJ04Gw1osF8+eWXm8v0/fjjj4WWaUcO3al1EoRp06bJ2bNnTTW9Vl+tW7fOhH9VsLF9NHDBPMe0kRe150CazHlnu7y7Yo/s2HNSdCbWkGB/WfjMH2Ror0YSEOC881n2AZTVRu4ufb+333670uZOT05Opo3cC6pdXaL2uCypWl1pW5NOJjN58mS57rrrzA6ppXQ9i62qEIfnNW0YJdMndzO3RoPelANHzkhsdKgM71u+qnfAV7iCVtu8uYqZ7yDIi2jRooWpkgcAXzRy5EhvrwI8rNoVM8sqkQMAYJtqVyJ3zcMOAIAvqHYlcgAAfAlBDgCAxQhyAAAsRpADAGAxghwAAIsR5AAAWIwgBwDAYgQ5AAAWI8gBALAYQQ4AgMUIcgAALFbtrkduA/OVZGaKVUJCxM/PT5zOdRnThnXDZf9n14tTsQ9A94GcnByPbYgnX5gvaenpEhURIVNuG1vsvicEBARYcRzwNdXuoik2MP8IoaHeXg14EfsAdB/Qa4d7ipbYcvPO/9T3LXof9qJqHQAAixHkAABYjCAHAMBiBDkAABYjyAEAsBhBDgCAxQhyAAAsRpADAGAxghwAAIsR5AAAWIwgBwDAYgQ5AAAWI8gBALAYQQ4AgMUIcgAALEaQAwBgMYIcAACLBXp7BQAUl5cncjbHri0TGiDi5+e598vTjZCZKdYICRE/T26Aak6//5wcu/4JAgICvLIPEOSAA2mI91kqVlmTJBLmySNKZqZkj5kgtghcME8kNNTbq+EzNMQXLlwoNklOTpbAwKqPVarWAQCwGEEOAIDFCHIAACxGkAMAYDGCHNVGbm6e5GpPaFePaADwAfRah8/6cfcJeXf5Xtm4NdXc9hw8nb8sJTVD+kz4ULomxEqfLvVkRP94CQ4K8Or6AoA7CHL4XKn73eV7ZNb8bbJifUqpz9MC+RffHja3//7XFqkXEyaTktvIf4xtK/XrhFfpOgPAxaBqHT5j9/40GTTpIxl134oyQ7wkh49lyF/nbJa2Vy+UlxfvoOodgDUIcviEee/9JB2SF8nn31QswIs6mZYlEx9aI1feuUyOn7JoVjEA1RZBDus9Pe97+eP/Xy3pGdkee8+la/ZL/4lL5eivGR57TwCoDAQ5rPbP+dvkT0+vr5T3/t8dv8oVt38ip05nVcr7A7DLiRMnJCvLeccDOrvBWpt/PCZ3PbGuUj/j2x+PyT1Pfi1zp/URX5e6/BU5tuIVafPYSm+vCuAxaWlpsnPnTvn5559lz549kp6ebuZxDw4Olnr16knz5s3NLT4+Xvz9Sy/b/vrrr/Loo49KXFyc3Hvvveb1TkGQw0pZ53Jkwl9WS3Z2xcaDf/PmVRIXGy6HUs9I9+vfL9drXnp3h4wa1FSG9Wns5toCqEp5eXmybds2WbZsmXzzzTelXkXt+++/z/9dQ33w4MHSr18/iYqKKjHEDx06ZG7z5s2TSZMmiVNUi6r11NRUuf/++6Vly5YSGhoqjRs3lsmTJ5szs5tvvtlcdu7555/39mqiAv7+2hZT9V1RGuKN6kWYnxVx66NrzcmDL9rz3C3y7dhI+eWft8vprWvM73rLs+wSkoA6cOCAPPTQQyZ4v/rqq3JfCvXw4cPy+uuvyx133CEffvih5ObmFgtxVbduXbnmmmvESXy+RL5582YZNmyY+RIiIiIkISFBDh48KM8++6zs2rXLfEmqc+fO3l5VlFN2dq48/9bWKt1e+w+nm8llxg5tLk6XeehnObTwcUnbslqyjv4i/kEhElQrTsJbXSaxA/8oUR0HFHp+0/980dx8sWp9VeoRGbxupTye0FHubXFJic8J/mCBJNWtL4t7+H7ziS/Lzc2VpUuXyvz58+XcuXP5j9esWVN69uwprVq1kmbNmklMTIypQj979qz88ssvsnv3bpMTrtK5toFroK9fv15uuOEGmT17dqEQ15OE2NhYcZJAXy+JjxgxwnwJ9913nzz88MP5VSYzZ86UqVOnmmvHaom8Y8eO3l5dlNOSNftk36H0Kt9e/3hrq+ODPP2nDbLjwX7iFxgktfuPl7D4dpKblSGZB3+SU5uXSUBYVLEgB2yXk5Mjc+bMkVWrVuU/pm3Zo0ePlssuu0yCgoKKvSYyMtIU7PQ2fPhwU8DTE4Hly5ebqvkdO3bItGnT8ueUcGqI+3yQ33XXXbJ//36588475amnniq0TKva33jjDfnuu+/MWVqNGjW8tp6omNc+2OmVTbZm02HZcyBNmjYs3H7mJCnzp0lu5hlp+8RmCW/Wqdjyc8fPlywAXyqJzykQ4low01rYsWPHSkhISLnfp0GDBnLLLbdIr169ZNasWXL06NH8EK9du7ZjQ9yn28i1o4NWseiGnzFjRonP6dq1q/nZqdPvBzxX8OtZnO4EulPAWdb/cNRrn/3NllRxsrMHf5KAqJgSQ1xpFTvgS5YsWZIf4gEBAXL33XfL+PHjKxTiBWmnt6K917XEHxYWJk7ls0H+5ptvmjO1cePGmSqUkri+mIJBrsMUFi5caKplunfvXmXri/I5cizDK9XqLnrxFScLiWshOWnH5Pi6Rd5eFUc5k5MjqZmZJd5gd8e2BQsWmN+10KWdmHv06OH2+7k6tmnHN+Wqkj958qS89tpr4lQ+W7W+YsUK83PAgNLbA7X0XTTI+/btKykp56f5fOSRR2Tt2rWVvq4ovy27jnt1c23Z6d3Pv5D6Y/4iad99Kj8/niwhDVpJZNveEtGqu0S27y9hjdtKdfXo9i3mBt+h1d7aEe3cbx3bkpKSTE2qu0rqna61s1qjm5GRIStXrpTExMRCeeEUPhvke/fuNT+bNGlS4vLs7Oz8kC74xZQ1IYC7unXrlr9z4OJkBLUWiRpX5hjxssTFhuX/3PfpdaU+r7Rx5suWr5ZGjSZKZfMLDpN6f/+pwq+LvCRR2j69UQ6/97Sc3PiRHFv+srmZZQl9pOnkVyQkruQOe34BQeIf7H71YevWrSQvy3NT2ob5+8vWzokeea9b4ptLcoOS5wEY9tXvHaQuRuvWrSXjtyFLTnTNTXdLRGQNSTmUIo0aNSp232l0wpXSmkXVli1b5Kefzv+P1K9f37SJezLEXW3iN954o2mDV4sXLy4zyHUfcHfmN60F3rBhg1uv9dkg1zHiSs+kSqLt59qrXXuxa2e3yqQ7h1YBwQOiYkSiyh4jXh6BAf7lfm5BWZlnq+S79A8Jl3puvjasaQcT2CrzyF45/cMqSf30RTNGfOf0kSbo/YOKz0oV03+cublLe/1qRztPCQ8IEPHQqNCWkZHyhzrubtHy//1ahe9Uub+tm/7Ufbjofae5UBu3TvbiMnr0aLdnWisrxF21ujquXL9f7Xu1b98+MxdJSfQ5mV5orvHZINezm+PHj8umTZtMdUhBWnU+ZcoU87sOO6vsDm26LvCMzMAoSS2jFH3B7yI2zIR4dk6uHEotvfRY2nuFBvtLTMOGUhUlck8IqdtEQgaOl9oDbpTt/6+PpG9bK2d+Wi+RCb3F07TXr6dL5DbRv9/JJXJ/PTH67WfDhg2L3XeasoJZ26xdpdfo6Gi3q9QvFOJK80FnfNPZ3FzNthMmTCh1H7iYErm7fDbIBw0aZM6ennjiCfMlaJWH0un6tKpES+NVNRGMu9UlKE6vRla3/xslbpryTLmq1elaEtcQbzz4rQpv4rv/fbTMmDyz0r8avZBbn6Weez89GEW07mGCPOtY5ZS+duz4ScI8eETJO3tWsseUfMB0Ih137BcaKk41/R//klOn06V+XH3TP6jofafR5k/teFwSrVJ3zbzWq1cvMx9IZYR4wb5Tr776qmmX3759e5n7gDvrcrHsOuWtAB0nrjP4aDVIu3btpEOHDmZmHz1z0wnyBw4caJ7nxI4LKF2d2mHSOK7iVeKe0rWtM8eRupza/Knk5RS/nGtuZoaZEEaFNU7wwpoBnqOzsbm0atWqUkNc6aygWtp29b8qOHOcE/hsiVw7b6xZs8ZUoesYQ73qjc7g88ILL5jJ7lu0aGGeR5Dbp0eHOl4bgta9vbODfN/ceyQ77ZhEX3aVhDXpYNras1L3ya+r3pDMgzuk9oDxpg0dsJkez12aN29eqSHuon2ptC+BjinXGozK7ltVET4b5Kpt27amk0JRp0+fNjuC9lBv3769V9YN7hs/opW88+nv/8hVpV+3OGnSwLmzuqnGE5+RE1+/J6e3fSHHv1woOeknJCCipoQ16ShxyVMlZuAfvb2KwEXTY7hLTExMpYd40c9xdaZ2Cp8O8rKGLWhbh7abh4cXH670zjvvmJ9bt24tdL9p06ZmKBm8K6lPI4mvHyG/pFTtP9N/jHX+OOwalw4xN5zXL7auZI0YU+bmuNByOM/EiRPl1KlTpoo74LdOe+Xtr+TuBVD08qZaq6uTxOi1y52kWga56yo3pVWr61CGku5rT8VXXjk/rAfeExDgL3fd0E7+9PT6KvtMPXG4ZmDTKvs8AKUrbX6QCxkyZIikpaWZ5taKzp2ubeSudnKnIchL4JooH86lQf7G0l2yaduxKvm8/3m4twQF+WzfUKDaSE5ONhdVKak21lbV8sh0oRI5nE9D9eX/6itBgRXbhXV8uF5bvDxjzl0mJbeRIT2dN/MVAPf4UohX2xK5ax522K1j69oy68GeMmnaF+V+TXnGmhfUrV2sPP0n9+dvBoDKVi1L5PAdtyS3kb/f7/7Vjspy6SUx8tGsKyQqwr2pHwGgKhDksN7kf2svr8/oJ1ER5y856AlX9Y+Xz+cmSWwt587UBQCKIIdPGDe8pfyw6FoZnHhxvUpr1Qg2JwWL/3uQ1IyiJA7A+aplGzl8U3z9SPlk9lD5YOUvMmv+Nvnky/LPKd6wbrjcNvoSuW3UJVI3xjMXLAGAqkCQw6foxUGuGtDE3Hb+ckoWr9grG7emysZtqbJrX5rk5p4fWhgdFWzawLsmxEqfLvUkqU9jCaxgD3gAcAKCHD6rZXwN+dMfC88rfu5crgQE+Im/f+VeuhYAqgpBjmqFSV0A+BrqEgEAsBhBDgCAxQhyAAAsRpADAGAxOrsBDhQaILImSaxbZ48KCZHABfPEGiEh3l4Dn6LXGdcrlXnKky/Ml7T0dImKiJApt40tdt8TKnJtdE8iyAEH8vMTCavm/506J4CEMkVudf7+AwM990+QJyI6jYT+1Pctet9mVK0DAGAxghwAAIsR5AAAWIwgBwDAYgQ5AAAWI8gBALAYQQ4AgMUIcgAALEaQAwBgMYIcAACLEeQAAFiMIAcAwGIEOQAAFiPIAQCwGEEOAIDFCHIAACxGkAMAYDGCHAAAixHkAABYjCAHAMBiBDkAABYjyAEAsBhB7gBPPvmkJCYmSq1atSQ6Olp69+4tH3/8sbdXCwDKtHTpUuncubOEhIRI06ZN5ZlnnqlWW2z16tUycuRIadKkifj5+clf//pXr6wHQe4AK1askIkTJ8rnn38u69evl549e8qVV14pa9eu9faqAUCJNmzYYEJs2LBhsnnzZnnkkUfkgQcekNmzZ1ebLXb69GlJSEiQmTNnSlxcnNfWI9Brn4x8H330UaGtoTuFlsgXLVokvXr1YksBcBwtfXfv3l1mzJhh7rdt21a2bNkijz/+uNx+++1SHSQlJZmbmjp1qtfWgyB3oNzcXDl16pRERER4e1UAWObEqdNy5NiJYo9n5+Tk/9yxe3+x+wU1bRQnwUFlx4PWGN58882FHhs6dKg89dRTsn//fmnUqJF46/i5c+/Bi/r7a9eMktjaNcUWBLkDTZ8+XU6cOCG33nqrt1cFgGWCggLl7aUrJe30mRKXn8k4Ky8tWFrq/UtaxEurpg0v+DkpKSnFqpNd93WZt4Lc399ftuzYLV9v3ubW3x8cHCSTb0oWm9BG7jCzZs0yQf7OO+947R8BgL0iwkJl1LB+br82eVhf03HLZsMHXC4xtWq49doRAxMlJtq913oLQe4gWiU1ZcoUef/992XQoEHeXh0AlmrTvLFcfmlChV93zdA+EhURXq7n1q9fXw4dOlToscOHD+cv86bg4CAZO3xAhU9I2rZsIt06thHbEOQO8dBDD8m0adPMcA5CHMDFSurfQ2Jrlb+dt2v71tK+dbNyP1874n7yySeFHtNOujoUywm1ifEN68mAxEvL/fyI8FBJHmpnbQRB7gB33323GUv+2muvSZs2bcxZrt5Onjzp7VUDYCktlY65coD4lyOYomtEyohBPSv0/vfcc48ZLvvggw/Kjz/+KPPmzZPnnntO/vznP4tT/KFnF2kYF1uu5147tK9ERoRVePiZDr3TW1ZWljlu6+87d+6UquSXl5eXV6WfiOJfQin/aBMmTJBXXnmFLQbAbZ+u2SDLv9xU6nI9+ky6YYQ0b1zx6vAlS5aYseMa5NrRbfLkyXLvvfc66ts6knpcnp23SLKzz/dSL0m3Dm1kVFLF+xWsXLlSBgwYUOzxfv36mWVVhSC3zO59KdIoro7pmQoAF5KTkyv/fP092X/oaInL+17WUZIGXO7TG3Lthh/kg+VflrhMh5ppL/WQkGCxFVXrFtHhJHMXLJWZc96Sk6dOe3t1AFggIMDfVLEHBgYUWxZXp7YM6dNdfF1i13bSsknDEmsjRg/vb3WIK4LcIqu+/s5UD9WqESU1opgsBkD51I2JNp3figb82FIC3tf4+/nJ6KR+EloksPv26CTN3GhScBqCvICcnBzT4WzIkCFSp04dcyGA+Ph4M1vRiy++aJZ7szT+1eat5vdBvbta2bMSgPdc3qVdoYlehvTpJvXrxlSbr6RmjUi5ekjvQrURg3t3E19AkP9Gp0QdPHiwjB8/Xj799FMJDg6WTp06men+li1bJpMmTZK0tDSvl8bjG9Qr16xLAFC0VDoqqb+EhYaYKVj7dO9Y7TZQ54SW0vGS5qY24roRA32mNoLObr8ZPXp0/mxqr776aqGeiDrJwdy5c02PTHfmP39u3iJJO53h9pekAwvS0s9PtxgeFiqBAb6x8wGoeueysyXA399MZVod5eXlmW0QHBQkThIVGSb/OeFat15LkIvIxo0bpVu3bhIYGCjffvuttG/f3qNf0PR//EtOnU736HsCAHxHjcgIeeCOcW69ljFMIrJ48WKzMYYPH+7xEHedabmL0jgA+L6oi8gJglxEtm4934ksMTFRKoO71SXqw+Xr5IsN35u28X//t6vo5AYAKIQg/62jm6pZs3KuP+tuG3nB0njq8ZMyY9YblbB2AACb28gJcm2bqHH+knWVNbe5hvjFtpHrNXMBACiKIBeRdu3ayaJFi2TdunXilLYP2sYBoPqIuog2cnqti5ie6l26dJGgoCBz5ZqEhIpfx9fTaBsHAJRH9RxIWMSll14qY8aMkXPnzsmwYcNk1apVhZbrOPIZM2ZIenrVDCFjFjcAQHlRIi/Q4W3kyJH5l55r2LChNGjQQFJSUuTAgQOmqvv48eMSHR0tlY3SOACgvCiRF+jw9tlnn5kZ3Pr37y9nzpyR7777zsx+dMUVV5jHo6KipCroxe11cn/mVAcAXAglcoc6m5klIcFBjBsHAJSJIAcAwGJUrQMAYDGCHAAAixHkAABYjCAHAMBiBDkAABYjyAEAsBhBDgCAxQhyAAAsRpADAGAxghwAAIsR5AAAWIwgBwDAYgQ5AAAWI8gBALAYQQ4AgMUIcgAALEaQAwBgMYIcAACLEeQAAFiMIAcAwGIEOQAAFiPIAQCwGEEOAIDFCHIAACxGkAMAYDGCHAAAixHkAABYjCAHAMBiBDkAABYjyAEAsBhBDgCAxQhyAAAsRpADAGAxghwAAIsR5AAAWIwgBwDAYgQ5AAAWI8gBALAYQQ4AgNjr/wATnpOyY2okagAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 621.739x284.278 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Counts XY: {'01': 1029, '00': 991, '11': 984, '10': 996}\n",
      "<XY> from counts: -0.0125\n"
     ]
    }
   ],
   "source": [
    "#### Measuring ZZ\n",
    "#### No rotations needed.\n",
    "\n",
    "qc_zzm = QuantumCircuit(2, 2, name=\"Bell_ZZ\")\n",
    "qc_zzm.h(0)\n",
    "qc_zzm.cx(0,1)\n",
    "qc_zzm.measure([0, 1], [0, 1])\n",
    "\n",
    "figzz=qc_zzm.draw(\"mpl\")\n",
    "display(figzz)\n",
    "\n",
    "shots = 4000\n",
    "counts_zz = sampler.run([qc_zzm], shots=shots).result()[0].data.c.get_counts()\n",
    "print(\"Counts ZZ:\", counts_zz)\n",
    "print(\"<ZZ> from counts:\", exp_from_two_qubit_counts(counts_zz, shots))\n",
    "\n",
    "#### Measuring XZ\n",
    "\n",
    "qc_xzm = QuantumCircuit(2, 2, name=\"Bell_ZZ\")\n",
    "qc_xzm.h(0)\n",
    "qc_xzm.cx(0,1)\n",
    "qc_xzm.h(0) # added here to rotate z->x \n",
    "qc_xzm.measure([0, 1], [0, 1])\n",
    "\n",
    "figxz=qc_xzm.draw(\"mpl\")\n",
    "display(figxz)\n",
    "\n",
    "counts_xz = sampler.run([qc_xzm], shots=shots).result()[0].data.c.get_counts()\n",
    "print(\"Counts XZ:\", counts_xz)\n",
    "print(\"<XZ> from counts:\", exp_from_two_qubit_counts(counts_xz, shots))\n",
    "\n",
    "### Measuring XY\n",
    "qc_xym = QuantumCircuit(2, 2, name=\"Bell_ZZ\")\n",
    "qc_xym.h(0)\n",
    "qc_xym.cx(0,1)\n",
    "qc_xym.h(0)   # added here to rotate z->x \n",
    "qc_xym.sdg(1) # added here to rotate z->y \n",
    "qc_xym.h(1)   # added here to rotate z->y \n",
    "qc_xym.measure([0, 1], [0, 1])\n",
    "\n",
    "figxy = qc_xym.draw(\"mpl\")\n",
    "display(figxy)\n",
    "\n",
    "counts_xy = sampler.run([qc_xym], shots=shots).result()[0].data.c.get_counts()\n",
    "print(\"Counts XY:\", counts_xy)\n",
    "print(\"<XY> from counts:\", exp_from_two_qubit_counts(counts_xy, shots))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2638fc16-7e73-4408-b5b8-14080f20159b",
   "metadata": {},
   "source": [
    "### 4.4 Compare histograms for ZZ, XZ, XY measurement bases\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "id": "986df8ab",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAnUAAAHWCAYAAAARl3+JAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAQlxJREFUeJzt3QeUFNXW9vFNTio5SjQAgggIgiQFRRAxhytiQhGEK14RMV8VMKCIYEIxIeKrguGaEAVEVAQUlYuAAQGJSpYkIPlbz3m/6remJzAzND3dp/+/tXrNTFVNd3VXd9euffY5J9/+/fv3GwAAAJJa/rzeAQAAABw8gjoAAAAPENQBAAB4gKAOAADAAwR1AAAAHiCoAwAA8ABBHQAAgAcI6gAAADxQMK93IFnt27fP/vjjDzv88MMtX758eb07AAAkHc1/sHXrVqtSpYrlz58/3Xl2165dluoKFSpkBQoUyNa2BHW5pICuWrVquf13AADw/61YscKqVq0aeT0UzC1ZssQFdjArVaqUVapU6YBJJIK6XFKGLngjHnHEEbznAADIoS1btrgESXBODbJ3q1atctkprYvO4KWS/fv32/bt223t2rXu78qVK2e5PUFdLgXRsgI6gjoAAHIvnIHas2ePC2TUJFu8ePGUf1mLFSvmXgMFdhUqVMiyKTZ1w18AAJBw9u7d634WLlw4r3clYQTB7e7du7PcjqAOAAAkHDoh5vy1IKgDAADwAEFdgjj22GNdO7micd2KFi1qL7zwQpptVq9ebWXLlo1so3b2zz//PLJ+1qxZLl0drNdN2//8889p7qdPnz6u8DTY5pRTTonb8wQAAIcGHSUSxLJly6xVq1Z2ySWX2I4dO+yee+6xnj17Wvv27a1WrVpum3r16tnGjRvt+uuvtyOPPNIGDBhgp59+epr6gxNOOMHOOeccO/74423ixIkuMGzatKlt27bNbTNu3DgbMWKEK7bU/z///PM2bdo069atm40ePTpPXwMAADJT846P4vriLH24c462V5KlXbt2ma5v27at6836xRdfZHkfp556quVWvv16BOSqG3bJkiVt8+bNh6T36/Tp061169b2r3/9y5544gmbP3++NWjQwM4++2z78MMP3TbPPfec9erVy+644w4bPHhwhvfTsGFDmzt3rnsjiXoTKeMXHvtHBZjqbcQgjwCAvD6X/v33326MOiU01GqVLEHdrl277M8//0y3/IMPPnDnaiVVlIiJPtfq786dO7vnqiRL+DkHMntNotH8mqAWL17sfgZZuqefftr9fPDBByPbKGMn48ePz/A+lKn78ccfrUSJEpFl6hKtJtmwJk2aHLBHDQAAyJxayzRAcPim1rX+/fvbXXfd5VriypQpk26b+++/39avX2/vvvtulgFbdtD8moAUtffo0cPV2PXt2zdNkKfm1TDVxm3YsCHNMgVxGuMneJMtWrQosk5NtRqZOqx69eru5++//+6adQEAwMHZtGmTnXfeea7ZVYFbRp555hkbM2aMTZ06Nc2MGrlFpi4BKXJXYPfee+/l6v/VPDty5Ei7+OKLXQZOtXgAACA+VOLUtWtXK1iwoL322msZDkny5ZdfusSN6txbtmwZk8clqEswahpVunbs2LGufi5w9NFHu5+qj4t+40Q3p5522mmuafatt95ybxjd3+TJk906Zf909RC2fPly95MsHQAAB0/NrTNnzrT3338/zRRo4fOuEi/qEHnddddZrBDUJQg1iyo4U5Hlyy+/bJdeemm6YUhEvWIDwZAn4eAvo/uVIJBTr9fo5trZs2dboUKFYvhsAABITWPHjrWhQ4e6nxquLJpGuLjgggusfv369vjjj8f0sampSxDly5d3GTUFb6px++yzz9zyOnXquAyahigpXbq060Xzz3/+003qqyFJVFMX9Hy9/PLLXfR/0UUXuf9R0eUbb7zhsnMq0JThw4dbly5dIv+vIU1Uf3f11Vfn6fMHACDZzZkzx7p3724PP/ywdezYMcNtlJlTAkedGdU8G0sEdQlCAV3QyzXo6Spt2rRx7e7y008/ucj+2WefdX8XKVLEJkyYENlW3cJnzJhhX331VWSZgrdPPvkk8rcygOoyreJMdbEOHoMx6gAAyD31YD3//PNdx4grrrjCDR8WpgSLzrUqjVLtu4YSi95G53FNLJBbjFOXoOPUAQDgO5/GqXvllVfcQP6ZqVGjhuswsXTp0ky3UflVRveR3XHqyNQBAICEl9MgK95UxpTXpUx0lAAAeOWmm25y5SnB/NaqM46eiklZoWC9xvMMl6CoeSw8h3b4Fu6Yprrl8ONoOKq//vorrs8VCCOoAwB4RUXo6umv+qaMRgTQVE3qIHbvvfe6zmIasP2aa65xzVuiwG3KlClpbjVr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1AEAAHiAoA4AAMADBHUAAAAeIKgDAADwAEEdAACABwjqAAAAPEBQBwAA4AGCOgAAAA8Q1AEAAHiAoA4AAMADBHUAAAAeIKgDAADwAEEdAACABwjqAAAAPEBQBwAAkMpB3ZdffmnLly/PcpsVK1a47QAAAJCgQV27du1s9OjRWW4zZswYtx0AAAASNKjbv3//AbfZt2+f5cuXL7cPAQAAgESoqVu4cKGVLFnyUD4EAAAAzKxgTl6Fa6+9Ns3f7733ni1dujTddnv37o3U03Xq1IkXGgAAIJGCunANnZpV58yZ424Z0fqTTjrJhg8ffvB7CQAAgNgFdUuWLInU0x111FHWt29fu+mmm9JtV6BAAStdurSVKFEiJ3cPAACAeAR1NWrUiPz+8ssvW+PGjdMsAwAAQBIEdWFXX311bPcEAAAA8Q/qArNmzbJvv/3WNm3a5DpIZFRbd8899xzswwAAAOBQBHV//vmnnX/++TZ9+vQsx6wjqAMAAEjgoK5fv3721VdfWdu2bV1TbNWqVa1gwYNO/AEAACAXch2FjR8/3po1a2ZTpkxh1ggAAIBknVFix44ddsoppxDQAQAAJHNQ16hRowxnkwAAAEASBXX33XefffDBB/b111/Hdo8AAAAQv5q61atXW+fOne3UU0+1yy+/3E488UQ74ogjMtz2qquuyu3DAAAA4FAGdd26dXP1dBrORHPC6qa/w7ROywjqAAAAEjSo0zRhAACkui3ff2CbZ4yzAo9utX379tkdd9xhgwcPjqzXMg3/pXFd9bvmRh83bpydccYZkW0qVapk69evd4P458+f303B+fbbb7tWsMCDDz7o7nfbtm0uYVK5cmV3P61bt477c0ZiYpowAAAOwr4d26xg6SOt7+Vn25AhQ9KtV6nStGnT7M4773RB2o033mhnnXWWrVu3zkqVKuW2Ofnkk+3ss8+24447zubPn2/9+/d35U1bt25167/88kv797//bS1atLAHHnjAVq1aZTfccIN16NDBtm/fzvHDwXWUAJB6dGI555xzrEqVKi5T8N5776Urubj33ntdBqFYsWLWvn17W7hwYWS9esx3797datWq5dYfffTRrtPVrl270tzPm2++6XrYFy9e3GUsHn300bg9RyCnSrW+zCpfMcQeeeSRdOuUmZs0aZIL7B566CG7+OKL7ZtvvrE9e/a4z0pA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PEBQBwAA4AGCOgAAAA8Q1AEAAHiAoA4APBAMZMCABkDqYkgT5JrmyV2yZImbck1q1Kjh5sJF8tDUePnzc23noyC4S8W5qYFURVCHXHnhhRfs5ZdfttmzZ1vBggWtXr16VrduXWvVqpV17tzZqlatSsCQZAGAbgR4yWnChAm2ceNG27Nnj5UvX96aN2/OBRaQggjqkGMbNmywY4891m644Qbr0aOHbdmyxZ1UpkyZYosWLbIGDRrY8OHDrVatWi5QIFOQeBQAnHjiiXbRRRe5uY7r16+fJnunY6bbggULrHLlyik70Xii27p1q/Xq1csmT57sAroqVarYYYcd5gK6tm3b2j/+8Q+XQedzmLh03P7880+rUKFCXu8KPEC7C3Lstddes9q1a9v9999v1atXt+OPP95uu+02mzhxor344ov2xx9/2Nlnn22bNm0ioEtQr776qi1btswFAwrClWl99NFHXZO6snUK6FauXGldunSx9evX5/XuIhNPPvmkzZs3z9555x0XGIwdO9YF6aVLl3afU30uN2/ezOcwgT399NNWp04du/HGG23atGm2ffv2dNvowvnjjz+23bt358k+InkQ1CHHChUqZH/99Zf98ssv7u+///7bdu3a5X5v166djRkzxl19KmBAYpo7d67Lsn744Yf21VdfWfv27e2pp55ymR5leBQcKFD49ddf7aijjsrr3UUmdKLv3r27tWnTxv2tC6zrr7/efQaHDBliX3/9tXXr1o3XL4G98cYb7qLqm2++cZ+9Jk2a2IABA2z+/Pm2d+9et40C9IEDB7rvXiArBHXIsUsuucRlcxQEKKArWrSo6yyhZjtRbZ2af5QJQuLZuXOna26tWbOmy7S2bNnSNZfrpKJArlKlSi5rcPPNN9vtt9+e17uLTChro+P47rvvupII0cWUAgF9Pjt06GAjRoxwJREKEJB41q1b5747e/fubbNmzXLH6YILLrDRo0dbo0aN7NRTT7WRI0faM8884+okgQOhpg45EtRb6URy0003uWaBSy+91H0pNW7c2FatWmWff/659ezZ0zULKXBAYgZ2CgSUmYvuAatg4dNPP3UdXlasWGFHHnlknu4rMqdM3JVXXumayfv27Zuuc4Sa0HWRpdpIjmPi0felsuIKzhWEBxSYz5gxw0aNGuW+a/U9u3z5ctcBDcgKQR1yHRQsXrzYvvjiC3v//fddE56CPZ04FBRcfvnlNmjQIF7dBD+hKEuQ0TA0qpdU7+bffvstT/YNB6bOD8rM6TjdddddLhBQx4jLLrvMdY6YM2eOffDBB+7i6rvvvuMlTVA7duxwP4sVK5Zhh5b+/fvbZ5995kYaAA6EoA7ZpoL5cePGuYJ6BQJlypRxBdnNmjVzWToV+CoI6NSpk+sdS6/XxD2GQ4cOdUNfqFersnXnnnuuy8zpxKLMnTq8aLk6vCDxqVOSmuxef/11F8yVLFnSlUWoh/Odd95pJ598cl7vInJB5S1qhlXnF0ohkB0Edci2a6+91n744QcXtGnYBDXfqV7n999/d5kBFfKq4BfJcQwPP/xwdwx//vln18yqQLxfv37WokWLvN5NZCO7owA8TFkeLVcnJmXn9BmlDiu5jmFG27z55psu+xoM8g5khaAO2aIThk4SGo9OxbvBMgV16oavzI6GVHj77bddDzwkzzFUM7qOoQaU1vAXOomEx61D4rnlllvcQN/qKamOLUWKFMlwLEJl0hmjLnmPoTKwpUqVypP9Q3Ki9yuy5aeffnJDW5QoUSKyTM2ryu4o+6OBh/WlpKAOyXUMjznmGNe8o2Oo2UHeeuutPN1PZE1NrOqtrM4RGkJIzatTp051YwwG45ipsF7HVBk7yiCS5xiuXbvW1UnKtm3b7KqrrqLnMnKETB2yRc0Aqq/SF45qd9SrNfpkMWzYMPdlRVF2YuIY+uG6665zTXEqoNcYZ8qSa/gg1bVquKGOHTu6ujr1QGew2sTEMcShQqYO2aLajwceeMBlADSEgoI39Z4Mem6pN6yGV9DI6EhMHMPkp4sqZVvVJKefd999ty1ZssQFcU2bNrWHH37YTjnlFDcAsT6nSDwcQxxKZOqQI2rO0XAXmolA9VmtW7d29SCaIqxcuXIua3DCCSfwqiYwjmFyU52Vmlp1AaWZXDTLQDhrrtkHFND997//tYYNG+bpviJjHEMcKgR1yBXVfowfP97ee+89lwFS54iLL77YjjvuOF7RJMEx9IeGoVGHiAIFCrgOLxoYPKM5RJG4OIaIBYI6HLToGQmQfDiG/lBtqwYivvXWW/N6V5BLHEPkFkEdAHhEnSOUseNCK3lxDJFbBHUAAAAeoM0MAADAAwR1AAAAHiCoAwAA8ABBHQAAgAcI6gAAADxAUAcAAOABgjoAAAAPENQBAAB4gKAOAADAkt//A6w3hCkwozpSAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig = plot_histogram([counts_zz, counts_xz, counts_xy], legend=[\"ZZ\", \"XZ\", \"XY\"])\n",
    "display(fig)\n",
    "plt.close(fig)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "944d5891-0103-42b4-b8d3-8b2484984398",
   "metadata": {},
   "source": [
    "### Exercice 4\n",
    "- Do the same as above but for a generalized Bell state where the `H`gate is replaced by a `R_Y`rotation with angle $\\theta$, change $\\theta$ and see the result.  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "5cf2e937-a413-4b54-9152-36e1e9e2effb",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "7852a1b7",
   "metadata": {},
   "source": [
    "## 5. More than two qubits (optional)\n",
    "\n",
    "This part is more advanced and will not be covered during the lecture. But participant who wants just \n",
    "to see few more primitives on three qubits can go through the tutorial. \n",
    "\n",
    "### 5.1 A simple three-qubit circuit\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "id": "b5f98ecd",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 287.496x284.278 with 1 Axes>"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "qc3 = QuantumCircuit(3, name=\"three_qubit_demo\")\n",
    "qc3.h(0)\n",
    "qc3.cx(0, 1)\n",
    "qc3.ry(np.pi/4, 2)\n",
    "qc3.draw(\"mpl\")\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "84dcff74",
   "metadata": {},
   "source": [
    "### 5.2 Measure all qubits\n",
    "\n",
    "`measure_all()` is a convenient beginner method to measure every qubit.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "id": "3feb9b63",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 663.998x367.889 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "3-qubit counts: {'100': 141, '111': 155, '000': 849, '011': 855}\n"
     ]
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "qc3m = qc3.copy()\n",
    "qc3m.measure_all()\n",
    "display(qc3m.draw(\"mpl\"))\n",
    "\n",
    "counts3 = sampler.run([qc3m], shots=2000).result()[0].data.meas.get_counts()\n",
    "print(\"3-qubit counts:\", counts3)\n",
    "\n",
    "fig = plot_histogram(counts3)\n",
    "display(fig)\n",
    "plt.close(fig)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "61893b14",
   "metadata": {},
   "source": [
    "### 5.3 Multi-controlled operations (Toffoli / CCX)\n",
    "\n",
    "Toffoli (CCX) has two controls and one target.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "id": "e49ac7ba",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 287.496x284.278 with 1 Axes>"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "qc_toff = QuantumCircuit(3, name=\"toffoli\")\n",
    "qc_toff.x(0)\n",
    "qc_toff.x(1)\n",
    "qc_toff.ccx(0, 1, 2)\n",
    "qc_toff.draw(\"mpl\")\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "id": "22ab2f49",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Toffoli counts: {'111': 1000}\n"
     ]
    },
    {
     "data": {
      "image/png": "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ANjaF08AAFBIxW7u3Lkb3Hf33Xff1KcBAKCxg90ee+yxQZsTpz6rVq3a1KcBAKCxg13awqSuYJdWbLz66qsxZ86cvBVKCoAAADThYDdu3Lh6j6VtTu64444YM2ZMPPDAA5v6FAAAbOnFE6mSd+WVV8b+++8fV111VWM8BQAAm3NV7KGHHhpTpkxpzKcAAGBzBLt3333XwgkAgKY+x64+VVVV8eGHH+Y5eL/+9a/jhBNOaOinAACgIYNd5bdi17eAYscdd8yLKAAAaMLBbuDAgXUGuxT4UqA77LDD4vvf/3507dr1654jAACNGex+97vfbepdAQBoBH4rFgCgEA2yeOL555+PmTNnxpIlS6Jjx47Rt2/fOPLIIxvioQEA2BzB7oUXXsjz6N55553qBROVeXf77LNPPPTQQzFgwICv8xQAADR2sHvjjTdi0KBB8fnnn8e3vvWtOO6442KXXXaJ+fPnx3//93/HpEmTYvDgwfHiiy9Gnz59NvVpAABo7GB30003xZdffhlPPfVUnHTSSbWOXX311TFx4sT4u7/7u9zvF7/4xaY+DQAAjb14Iq2KPfPMM9cJdRWpPR1P1TsAAJpwsFu8eHHsueee6+2Tjqd+AAA04WDXo0ePPH9ufV566aXcDwCAJhzs0vy5NBx7/fXXxxdffFHrWLp9ww035GHY0047LRrSjTfemFfe1rzsu+++tZ774osvjp122im22267GDp0aCxYsKDWY8ydOzeGDBkS7du3z7+McdVVV8WqVasa9DwBAJrN4okU6CZMmBC33npr/Ou//mscfvjh0a1btxyiXn755Vi0aFHstddeuV9D23///eOZZ56pvt269f9/GZdddlk8+eST8V//9V/RqVOnuOSSS+Lv//7v8157yerVq3Oo6969e96u5aOPPorhw4dHmzZt8msBANjqgl2qiKWh2B/96Ed51WtaHVuxzTbb5P3tfvrTn0bnzp2joaUgl4LZ2tJ8vgceeCAeeeSROP7443Nb2ktvv/32y+f6t3/7t3kbljfffDMHwxRE02bKN998c17Jm6qBbdu2bfDzBQBo8j8p1qVLl3jwwQdzoHr11Vfjueeey9eVgJWON4bZs2fnuXupInjOOefkodVkxowZsXLlyjjxxBOr+6Zh2t133z2mTZuWb6frAw88MIe6irTfXvrVjLQ3HwDAVlOx+/GP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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "qc_toff_m = QuantumCircuit(3, 3, name=\"toffoli_measured\")\n",
    "qc_toff_m.compose(qc_toff, inplace=True)\n",
    "qc_toff_m.measure([0, 1, 2], [0, 1, 2])\n",
    "\n",
    "counts_toff = sampler.run([qc_toff_m], shots=1000).result()[0].data.c.get_counts()\n",
    "print(\"Toffoli counts:\", counts_toff)\n",
    "\n",
    "fig = plot_histogram(counts_toff)\n",
    "display(fig)\n",
    "plt.close(fig)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6840ea47",
   "metadata": {},
   "source": [
    "### 5.4 A four-qubit example: X with three controls\n",
    "\n",
    "We can build a multi-controlled-X gate from `XGate().control(3)` and apply it to 4 qubits total.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "id": "95141a65",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 287.496x367.889 with 1 Axes>"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "mcx = XGate().control(3)\n",
    "\n",
    "qc4 = QuantumCircuit(4, name=\"C3X_demo\")\n",
    "qc4.x(0); qc4.x(1); qc4.x(2)   # set the 3 controls to 1\n",
    "qc4.append(mcx, [0, 1, 2, 3])  # target is qubit 3\n",
    "qc4.draw(\"mpl\")\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "id": "4667eaa0",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "4-qubit counts: {'1111': 1000}\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAnYAAAHWCAYAAAD6oMSKAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAJqdJREFUeJzt3Qmw1tV5P/CHXUFBENkUcWlEcYO4FRdcAypjQ6JOokYwsTI66sQ1SlUU1xTHajJ1qa1K02o17UQlaCmKVYyiECziEh1iUXBhUWQ1Itt/zmne+78X7kXAe+Fy+Hxm3nnve37n3RPer89Zfk1Wr169OgAA2OI13dwvAACA+iHYAQAUQrADACiEYAcAUAjBDgCgEIIdAEAhBDsAgEIIdgAAhWi+uV/AlmrVqlXx8ccfx/bbbx9NmjTZ3C8HAChUOpfE4sWLo1u3btG06bprcoLdRkqhrnv37ht7dwCADTJr1qzYZZdd1tlHsNtIqVJX+ZDbtm27sQ8DALBOixYtysWkSvZYF8FuI1WGX1OoE+wAgIa2PlO/LJ4AACiEYAcAUAjBDmADTZgwIU455ZS8Qi0NjTzxxBNrrWAbPnx4dO3aNbbddts44YQTYvr06TX6zJ8/P84666w8lWOHHXaIc889N5YsWVKjz7Rp0+Koo46KbbbZJs+vGTlypO8KWCfBDmADLV26NA488MC4++67az2eAtgvf/nLuO++++LVV1+NNm3axIABA+LLL7+s6pNC3VtvvRXPPPNMjBkzJofFoUOH1pgs3b9//+jRo0dMmTIlbr/99rjhhhvi/vvv930BdWqyOv2nJRss/aPbrl27WLhwocUTsBVLFbvHH388Bg0alG+nf1JTJe/yyy+PK664Irelfyc6d+4co0aNih/+8Ifxhz/8IXr16hWTJ0+Ogw8+OPcZO3ZsnHzyyfHhhx/m+997771xzTXXxOzZs6Nly5a5z9VXX52rg++8885mfMdAY84cKnYA9WjGjBk5jKXh14r0D/Jhhx0WEydOzLfTdRp+rYS6JPVPG4+mCl+lT79+/apCXZKqfu+++258/vnnvjOgVoIdQD1KoS5JFbrq0u3KsXTdqVOnGsebN28eHTp0qNGntseo/hwAaxLsAAAKIdgB1KMuXbrk6zlz5tRoT7crx9L13LlzaxxfsWJFXilbvU9tj1H9OQDWJNgB1KPdd989B6/x48fXmPic5s717ds3307XCxYsyKtdK5577rlYtWpVnotX6ZNWyi5fvryqT1pB27Nnz2jfvr3vDKiVYAewgdJ+c1OnTs2XyoKJ9PfMmTPzKtlLLrkkbr755hg9enS88cYbMXjw4LzStbJydp999okTTzwxzjvvvJg0aVK89NJLcdFFF+UVs6lfcuaZZ+aFE2l/u7QtymOPPRa/+MUv4rLLLvN9AXWy3clGst0JbL2ef/75OPbYY9dqHzJkSN7SJG15cv311+c951Jl7sgjj4x77rkn9tprr6q+adg1hbnf/va3eTXsqaeemve+22677WpsUHzhhRfmbVE6duwYF198cVx11VWb7H0CW17mEOw2wYcMALApMoehWACAQgh2AACFEOwAAAoh2AEAFEKwAwAohGAHAFAIwQ4AoBCCHQBAIQQ7AIBCCHYAAIUQ7AAACiHYAQAUQrADACiEYAcAUAjBDgCgEIIdAEAhGl2wmzBhQpxyyinRrVu3aNKkSTzxxBM1jq9evTqGDx8eXbt2jW233TZOOOGEmD59eo0+8+fPj7POOivatm0bO+ywQ5x77rmxZMmSGn2mTZsWRx11VGyzzTbRvXv3GDly5CZ5fwAAW02wW7p0aRx44IFx991313o8BbBf/vKXcd9998Wrr74abdq0iQEDBsSXX35Z1SeFurfeeiueeeaZGDNmTA6LQ4cOrTq+aNGi6N+/f/To0SOmTJkSt99+e9xwww1x//33b5L3CADQEJqsTiWwRipV7B5//PEYNGhQvp1eaqrkXX755XHFFVfktoULF0bnzp1j1KhR8cMf/jD+8Ic/RK9evWLy5Mlx8MEH5z5jx46Nk08+OT788MN8/3vvvTeuueaamD17drRs2TL3ufrqq3N18J133lmv15bCYbt27fLzp8ogAEBD2JDM0egqdusyY8aMHMbS8GtFeqOHHXZYTJw4Md9O12n4tRLqktS/adOmucJX6dOvX7+qUJekqt+7774bn3/++SZ9TwAA9aV5bEFSqEtSha66dLtyLF136tSpxvHmzZtHhw4davTZfffd13qMyrH27duv9dzLli3Ll+rpOVm+fHm+JCk8NmvWLFauXBmrVq2q6ltpX7FiRa46VqS2dKyu9srjVn8fSeq/Pu0tWrTIryO9nupV0NS/rva6Xrv35Hvyvz3/f/JvhH/L/T7FZvnNrX7fooLd5nTbbbfFiBEj1mofN25ctG7dOv+96667Rp8+ffLCjJkzZ1b16dmzZ+y9994xadKkmDdvXlV779698zy/NAdw8eLFVe19+/bN4TQ99oUvNvhbAwC+gbuPihg4cGB8+umnVSOIyfbbbx/HHXdczJo1K6ZOnVrVvtNOO8Xhhx+eF3+m0cKKunLEzjvvXGaw69KlS76eM2dOXhVbkW6nkFTpM3fu3Br3S6k6rZSt3D9dp/tUV7ld6bOmYcOGxWWXXVajYpdW06ZFGJXx7pS0kwMOOCD222+/qr6V9kMPPXStylyShoVra0+PHS+O26DPCADYtPLvdUR07Ngxz+mvXplLUl5Ic/zXbP/Wt74Ve+65Z1V7XTlizZ09ipljl4ZPU/AaP358jYCV5s6lKleSrhcsWJBXu1Y899xzuaSZ5uJV+qQqWfWhzrSCNlXWahuGTVq1apUDXPVLpfRauVQCWbqurT2VXau3V77AutrT3wBA49biz7/X6fe7+u95Zdi2rva68kJd7VtksEupNJUrKyXLtGAi/Z1KkinhXnLJJXHzzTfH6NGj44033ojBgwfnFFxZObvPPvvEiSeeGOedd14e+nzppZfioosuyitmK2n5zDPPzAsn0v52aVuUxx57LH7xi1/UqMgBAGxpGt1Q7O9///s49thjq25XwtaQIUPyliY/+9nP8l53aV+6VJk78sgj83YmaaPhiocffjiHueOPPz6n5FNPPTXvfVd9JW2ev3bhhXHQQQfl0mna9Lj6XncAAFuaRr2PXWO2qfax2+3qpxrssQGAb+79nw+MhlTsPnYAANRNsAMAKIRgBwBQCMEOAKAQgh0AQCEEOwCAQgh2AACFEOwAAAoh2AEAFEKwAwAohGAHAFAIwQ4AoBCCHQBAIQQ7AIBCCHYAAIUQ7AAACiHYAQAUQrADACiEYAcAUAjBDgCgEIIdAEAhBDsAgEIIdgAAhRDsAAAKIdgBABRCsAMAKIRgBwBQCMEOAKAQgh0AQCEEOwCAQgh2AACFEOwAAAoh2AEAFEKwAwAohGAHAFAIwQ4AoBCCHQBAIQQ7AIBCCHYAAIUQ7AAACiHYAQAUQrADACiEYAcAUAjBDgCgEIIdAEAhBDsAgEIIdgAAhRDsAAAKIdgBABRCsAMAKIRgBwBQCMEOAKAQgh0AQCEEOwCAQgh2AACFEOwAAAoh2AEAFEKwAwAohGAHAFAIwQ4AoBCCHQBAIQQ7AIBCCHYAAIUQ7AAACiHYAQAUQrADACiEYAcAUAjBDgCgEIIdAEAhBDsAgEIIdgAAhRDsAAAKIdgBABRCsAMAKIRgBwBQCMEOAKAQgh0AQCEEOwCAQgh2AACFEOwAAAqxRQa73XbbLZo0abLW5cILL8zHjznmmLWOnX/++TUeY+bMmTFw4MBo3bp1dOrUKa688spYsWLFZnpHAADfXPPYAk2ePDlWrlxZdfvNN9+M73znO3H66adXtZ133nlx4403Vt1OAa4i3TeFui5dusTLL78cn3zySQwePDhatGgRt9566yZ8JwAAW3mw22mnnWrc/vnPfx577rlnHH300TWCXAputRk3bly8/fbb8eyzz0bnzp2jd+/ecdNNN8VVV10VN9xwQ7Rs2bLB3wMAQH3bIodiq/vqq6/iX//1X+MnP/lJHnKtePjhh6Njx46x3377xbBhw+KLL76oOjZx4sTYf//9c6irGDBgQCxatCjeeuutTf4eAAC22opddU888UQsWLAgzjnnnKq2M888M3r06BHdunWLadOm5Urcu+++G7/5zW/y8dmzZ9cIdUnldjpWm2XLluVLRQqByfLly/Mladq0aTRr1iwP9a5ataqqb6U9zeFbvXp1VXtqS8fqaq88LgDQeC1fvjxP50q//dWniqWCU/PmzetsrysvrNle/b7FB7sHHnggTjrppBziKoYOHVr1d6rMde3aNY4//vh477338pDtxrjttttixIgRtQ7rVubv7brrrtGnT58cJtPijIqePXvG3nvvHZMmTYp58+ZVtach4BRAJ0yYEIsXL65q79u3b17QkR4bAGjcxo0bl+fuf/rpp3lUsGL77beP4447LmbNmhVTp06tMaXs8MMPj+nTp+fCU0VdOWLnnXde79fSZHX1UtEW5oMPPog99tgjV+K++93v1tlv6dKlsd1228XYsWPzkOvw4cNj9OjRNT7kGTNm5Md67bXX8oe6PhW77t275y+xbdu2DVax+9Z1wh0ANGbTb+rfoBW7JUuWRIcOHWLhwoVVmaPIit1DDz2UK1spJa9LJcClyl2lInbLLbfE3Llz8/2TZ555Jn9YvXr1qvUxWrVqlS9rSl9kulSXvpR0WVP6EmtTV/uajwsAND4t/vx7nYJZuqyprva68sKa7bX1KS7YpSSbgt2QIUNqBKM03PrII4/EySefHDvuuGMuZ1566aXRr1+/OOCAA3Kf/v375wB39tlnx8iRI/O8umuvvTbvg1dbeAMA2BJsscEubVWSxp/Tatjq0lYl6dhdd92Vh2DTcOmpp56ag1v15DtmzJi44IILcvWuTZs2OSBW3/cOAGBLs8UGu1R1q216YApyL7zwwtfePy1aePrppxvo1QEAbHpb/D52AAD8H8EOAKAQgh0AQCEEOwCAQgh2AACFEOwAAAoh2AEAFEKwAwAohGAHAFAIwQ4AoBCCHQBAIQQ7AIBCCHYAAIUQ7AAACiHYAQAUQrADACiEYAcAUAjBDgCgEIIdAEAhBDsAgEIIdgAAhRDsAAAKIdgBABRCsAMAKIRgBwBQCMEOAKAQgh0AQCEEOwCAQgh2AACFEOwAAAoh2AEAFEKwAwAohGAHAFAIwQ4AoBCCHQBAIQQ7AIBCCHYAAIUQ7AAACiHYAQAUQrADACiEYAcAsLUHuwkTJsTMmTPX2WfWrFm5HwAAjTjYHXvssTFq1Kh19vnVr36V+wEA0IiD3erVq7+2z6pVq6JJkyYb+xQAADSWOXbTp0+Pdu3aNeRTAADwZ81jA/zkJz+pcfuJJ56I999/f61+K1eurJpfd9JJJ23IUwAAsCmCXfU5dWmIderUqflSm3T8kEMOiTvvvHNjXxsAAA0V7GbMmFE1v26PPfaISy65JH7605+u1a9Zs2bRvn37aNOmzYY8PAAAmyrY9ejRo+rvhx56KPr06VOjDQCALSTYVTdkyJD6fSUAAGyeYFcxadKkmDx5cixYsCAvmqhtrt111133TZ8GAICGCnbz58+PQYMGxUsvvbTOPe0EOwCARh7sLrvssvjd734XxxxzTB6W3WWXXaJ5829cAAQAYCNtdBIbM2ZMHHrooTF+/HhnlwAA2JLPPPGnP/0p+vXrJ9QBAGzpwa537961nnUCAIAtLNhdf/31MXr06HjllVfq9xUBALBp59jNnj07Bg4cGEcffXScddZZ8e1vfzvatm1ba9/Bgwdv7NMAALCemqxe114l69C0adM8v6763dPt6tKx1Fbb/nZbukWLFkW7du1i4cKFdQba+rDb1U812GMDAN/c+z8fGI0lc2x0xS6dUgwAgMbDKcUAALb2xRMAABRSsZs5c+Z6991111039mkAAGjoYLfbbrut1+bEqc+KFSs29mkAAGjoYJe2MKkt2KUVG6+//nrMmDEjb4WSAiAAAI042I0aNarOY2mbkzvuuCNGjhwZDzzwwMY+BQAAm3vxRKrkXXHFFbHvvvvGlVde2RBPAQDAplwVe/DBB8dzzz3XkE8BAMCmCHbvvfeehRMAAI19jl1dVq1aFR999FGeg/fkk0/G8ccfX99PAQBAfQa7yrli17WAon379nkRBQAAjTjY9evXr9ZglwJfCnSHHHJI/PjHP45OnTp909cIAEBDBrvnn39+Y+8KAEADcK5YAIBC1MviiZdeeimmTp0aixYtirZt20bv3r3jiCOOqI+HBgBgUwS7l19+Oc+j++Mf/1i1YKIy7+5b3/pWPPTQQ9G3b99v8hQAADR0sHvrrbeif//+8cUXX8R3vvOdOPbYY6Nr164xe/bs+O///u8YN25cDBgwIF555ZXo1avXxj4NAAANHexuvPHG+Oqrr+Lpp5+OE088scaxq666KsaOHRt/9Vd/lfs9+uijG/s0AAA09OKJtCr2tNNOWyvUVaT2dDxV7wAAaMTBbuHChbH77ruvs086nvoBANCIg123bt3y/Ll1efXVV3M/AAAacbBL8+fScOx1110XX375ZY1j6fb111+fh2G/+93vRn264YYb8srb6pe99967xnNfeOGFseOOO8Z2220Xp556asyZM6fGY8ycOTMGDhwYrVu3zmfGuPLKK2PFihX1+joBALaYxRMp0I0ZMyZuvfXW+Id/+Ic49NBDo3PnzjlETZ48OebNmxd77LFH7lff9t1333j22Werbjdv/v/fxqWXXhpPPfVU/Pu//3u0a9cuLrroovj+97+f99pLVq5cmUNdly5d8nYtn3zySQwePDhatGiR3wsAwFYX7FJFLA3F/uxnP8urXtPq2Iptttkm72/3t3/7t9GhQ4eobynIpWC2pjSf74EHHohHHnkkjjvuuNyW9tLbZ5998mv9y7/8y7wNy9tvv52DYQqiaTPlm266Ka/kTdXAli1b1vvrBQBo9KcU69ixYzz44IM5UL3++uvx4osv5utKwErHG8L06dPz3L1UETzrrLPy0GoyZcqUWL58eZxwwglVfdMw7a677hoTJ07Mt9P1/vvvn0NdRdpvL501I+3NV5dly5blPtUvSXq+yiVVA5N0XVt7Gu6t3r5q1ap1tqe/AYDGbfmff6/T73f13/PKNK+62uvKC3W1N0jF7pZbbomlS5fGiBEj8vBlkq5TWKpI+9tdc801sf3228fVV18d9emwww6LUaNGRc+ePfMwanodRx11VLz55pt5c+RUcdthhx1q3CeFuHQsSdfVQ13leOVYXW677bb8XGtKFcA0Vy9JAbJPnz4xbdq0qrCZpNeaAuakSZPyEHVFqhb26NEjJkyYEIsXL65qT2frSHP/0mMDAI3buHHj8jSvTz/9tKqQlKQclEYQZ82alU+9WrHTTjvF4YcfngtV7777blV7XTli5513bphgl4Yvhw8fHiNHjqwKdbVJ4SoN1aZFCSmIpbNS1JeTTjqp6u8DDjggP34KR7/+9a9j2223jYYybNiwuOyyy6pup4pd9+7d89k30vlxk6ZNm1a9rv3226+qb6U9zUNMp12raNasWb7u169fre3pseNF4Q4AGrP+6ff6zyOZJ598clV75TSrKS9U3yWk+ulX99xzz6r2unLEkiVLGmYo9le/+lW0b98+L0j4Omllappfl+a4NaRUndtrr73y+WrTvLtULVywYEGNPmlBR2VOXrpec5Vs5XZt8/YqWrVqlQNc9UuSAm7lUglk6bq29jQ3sHp75Qusq31d4RkAaBxa/Pn3Ov1+V/89ryzurKu9rrxQV3u9B7u0ijTNX0sh5+ukPqlvZTVqQ0kp9r333svnqT3ooIPyBzB+/Piq46nEmcqZaXgzSddvvPFGzJ07t6rPM888k4Oac9oCAFuyDQp2H3/8cV6wsL7SmSfSPLj6dMUVV8QLL7wQ77//fg6a3/ve93KSPeOMM/L2Jueee24eMk176KXFFGl1bgpzaUVspVyaAtzZZ5+dF3r813/9V1x77bW5wrg+gRUAoLHaoDl2qZS4ISs1U9/KsGJ9+fDDD3OI++yzz/LkwyOPPDJvZZL+Tu688878nGlj4rSSNa14veeee6run0Jg2n/vggsuyIGvTZs2MWTIkLjxxhvr9XUCADTqYJcm/qXVp+sr9d2QlRzrI+2Zty5pD7277747X+qSFltU33cPAKAEG1ROS9uKPPfcc3kY9OukPqlvWvEJAEAjC3ZpHloaXj3ttNPyXi11ScOkp59+et6ALw15AgDQyIZiv/3tb8cll1wSd911V16AcP755+c96nbZZZd8/KOPPsorUu+///68EW9axJDuAwBAw9vgM0/c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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "qc4m = QuantumCircuit(4, 4, name=\"C3X_measured\")\n",
    "qc4m.compose(qc4, inplace=True)\n",
    "qc4m.measure([0, 1, 2, 3], [0, 1, 2, 3])\n",
    "\n",
    "counts4 = sampler.run([qc4m], shots=1000).result()[0].data.c.get_counts()\n",
    "print(\"4-qubit counts:\", counts4)\n",
    "\n",
    "fig = plot_histogram(counts4)\n",
    "display(fig)\n",
    "plt.close(fig)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "3982ff13-218d-4e75-a299-1ca9dc5b3938",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "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.11.13"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
