{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Your first code with Qiskit: Gates and measurements"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "ibmqfactory.load_account:WARNING:2022-06-08 09:38:57,953: Credentials are already in use. The existing account in the session will be replaced.\n"
     ]
    }
   ],
   "source": [
    "from qiskit import IBMQ\n",
    "# Loading your IBM Quantum account(s)\n",
    "provider = IBMQ.load_account()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<IBMQSimulator('ibmq_qasm_simulator') from IBMQ(hub='ibm-q', group='open', project='main')>,\n",
       " <IBMQBackend('ibmq_armonk') from IBMQ(hub='ibm-q', group='open', project='main')>,\n",
       " <IBMQBackend('ibmq_santiago') from IBMQ(hub='ibm-q', group='open', project='main')>,\n",
       " <IBMQBackend('ibmq_bogota') from IBMQ(hub='ibm-q', group='open', project='main')>,\n",
       " <IBMQBackend('ibmq_lima') from IBMQ(hub='ibm-q', group='open', project='main')>,\n",
       " <IBMQBackend('ibmq_belem') from IBMQ(hub='ibm-q', group='open', project='main')>,\n",
       " <IBMQBackend('ibmq_quito') from IBMQ(hub='ibm-q', group='open', project='main')>,\n",
       " <IBMQSimulator('simulator_statevector') from IBMQ(hub='ibm-q', group='open', project='main')>,\n",
       " <IBMQSimulator('simulator_mps') from IBMQ(hub='ibm-q', group='open', project='main')>,\n",
       " <IBMQSimulator('simulator_extended_stabilizer') from IBMQ(hub='ibm-q', group='open', project='main')>,\n",
       " <IBMQSimulator('simulator_stabilizer') from IBMQ(hub='ibm-q', group='open', project='main')>,\n",
       " <IBMQBackend('ibmq_manila') from IBMQ(hub='ibm-q', group='open', project='main')>]"
      ]
     },
     "execution_count": 46,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "provider = IBMQ.get_provider(hub='ibm-q', group='open', project='main')\n",
    "provider.backends()    # List all available providers"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Your first quantum circuit\n",
    "\n",
    "Let's begin exploring the different tools in Qiskit Terra. For that, we will now create a Quantum Circuit.\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [],
   "source": [
    "from qiskit import QuantumCircuit\n",
    "\n",
    "circuit = QuantumCircuit(2)\n",
    "circuit.h(0)\n",
    "circuit.cx(0, 1)\n",
    "circuit.measure_all()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Do you recognize this circuit? It creates 1 of the 4 Bell states, which are maximally entangled and build an orthonormal basis."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 437.491x204.68 with 1 Axes>"
      ]
     },
     "execution_count": 48,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "circuit.draw(initial_state=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now let's run the circuit in the Aer simulator and plot the results in a histogram.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'11': 491, '00': 533}"
      ]
     },
     "execution_count": 50,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from qiskit import Aer\n",
    "\n",
    "sim = Aer.get_backend('aer_simulator')  # this is the simulator we'll use\n",
    "result = sim.run(circuit).result()  # we run the experiment and get the result from that experiment\n",
    "# from the results, we get a dictionary containing the number of times (counts)\n",
    "# each result appeared\n",
    "counts = result.get_counts()\n",
    "counts"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 504x360 with 1 Axes>"
      ]
     },
     "execution_count": 51,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from qiskit.visualization import plot_histogram\n",
    "\n",
    "# and display it on a histogram\n",
    "plot_histogram(counts)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [],
   "source": [
    "backend = Aer.get_backend('unitary_simulator')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAKAAAABOCAYAAACngR3fAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAFBUlEQVR4nO3df0icBRzH8c/d7aYOrc2Oef4Y2s0f4LG79Fzzr04bCx0RKyiSFDKbJUqhg/5KiIIjnP0AY4siMgiMadaKJNiYdyyMyAk6F3RrzrnLX7f8MU+d6d31h0ywqZx6j99n7vP68zn9+j3uzfOgz+FpgsFgEERCtNIL0IONAZIoBkiiGCCJYoAkigGSKAZIohggiWKAJIoBkigGSKIYIIligCSKAZIoBkiiGCCJYoAkigGSKAZIohggiWKAJIoBkigGSKIYIIligCSKAZIoBkiidkgvcD/58wIwNSq9xebF7AUynpTeYhEDXIepUWDCI73F9sJLMIligCSKAZIoBkiiGKAKFDtScP7S1yEf304YIIligCSKAZIo1QUYCARQX1+PtLQ0REZGwmq1wuVyISMjA+Xl5dLrUZip7k5IWVkZWltbUVtbC5vNho6ODhQVFcHr9aKmpkZ6PUXodHosBObvOb7gn8cOnV5go62jqgCbmprQ2NgIp9MJu90OAMjPz0dXVxdaW1uRnZ0tvKEyjHtSMHjrr2XHZud8GJ8aRvwjJqGttoaqLsEOhwMFBQVL8d2VmpoKvV4Pi8UitJmynsp5GW2/fYbLfRfhD/gxNTOOU2ffRIrxAFITsqTXU5RqzoAejwe9vb2orq6+57GBgQGYzWZEREQIbKa8w9kvYW5+Bg3fVWJk4gaidkbDYrLjvVd+hE6nmpdIEap5dh7P4ttMjEbjsuOzs7NwuVwoLCwMaY5Gown7bnfVv94O6/48RWYfPXQcRw8dV2T2/7lcThwsylf0Z4T6CXCquQQbDAYAgNvtXna8rq4OQ0NDsNlsEmuRwlRzBjSZTLBYLHA4HIiNjUViYiJaWlrQ1tYGACEHqORnL3Z+sz3eD2i35yF4Wh2fUamaM6BWq0VzczPMZjMqKipQWloKg8GAyspK6HS6bfsLyINONWdAAEhPT0d7e/uyYyUlJcjMzERUVJTQVqQkVQW4ks7OTuTm5kqvEZJbk3/jjPMk8rOK8OkP1dBotMjYdxAVz3y07jkfNr+K6TuTm5oRjl2UpppL8Ep8Ph/cbvd98wfoS+5zsKUfQdzuZJx87QI+rvwFE75RXB+6vO45h7OLNz0jHLsoTdVnwOjoaPj9fuk1VtR9zYl3vnoWpngrhseuY3/CY4jZFYuqYw2Iiohe+jqdVg+tVhfyjHdLz6Knz4WqYw3YqY/c9IxQd5Gi6jOgmh149Alk7HscH1Q4YTHZ8cZzp3Dn3+llL3jfYA8mp71IjssMeUYwGFw2JxwzQpkjhQFu0NBYH+JjF+/TeidvYsLnhSnBuvT47ZkxfPJ9FU48/0XIMwwPJ+LaYPfSnHDMCHWOFAa4QTeGryDZaIY/4IdGo0XX1XOwpR0BAPj9C3i/qRjlT9cj9iHj0rHxqZE1ZwBYmhOOGavtoiYMcIP6R64gJc6M+YU5TPhG0XX1PNKTcgAArp5muG/+js9/egsnTufhj/5fMTzejy9/fnvNGf/cHoLb04n0pJywzFhtFzXRBJW8dbDNrHUnxNV9BnbrC6t+78WebxG9aw+yUtf+nxhrzQnHDADYnQTkvLjmiC3DANdhu9yKU1OAvASTKFX/HVBtYvZKbxAeanoevASTKF6CSRQDJFEMkEQxQBLFAEkUAyRRDJBEMUASxQBJFAMkUQyQRDFAEsUASRQDJFEMkEQxQBLFAEkUAyRR/wHAihfPXj6kMgAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 193.726x84.28 with 1 Axes>"
      ]
     },
     "execution_count": 53,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from numpy import pi \n",
    "circuit = QuantumCircuit(1)\n",
    "circuit.u(pi/2,pi/2,pi/2,0)\n",
    "circuit.draw()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$$\n",
       "\n",
       "\\begin{bmatrix}\n",
       "0.707 & -0.707i  \\\\\n",
       " 0.707i & -0.707  \\\\\n",
       " \\end{bmatrix}\n",
       "$$"
      ],
      "text/plain": [
       "<IPython.core.display.Latex object>"
      ]
     },
     "execution_count": 54,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from qiskit.visualization import array_to_latex\n",
    "from qiskit import transpile\n",
    "job = backend.run(transpile(circuit, backend))\n",
    "array_to_latex(job.result().get_unitary(circuit, decimals=3))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "You may try other gates: x, y, z, id, h, s, sdg, t, tdg, rx(pi/2, 0), ry(pi/2, 0), rz(pi/2, 0)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Multi-Qubit Gates"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "How does Qiskit order basis vectors?"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Within the physics community, the qubits of a multi-qubit systems are typically ordered with the first qubit on the left-most side of the tensor product and the last qubit on the right-most side. For instance, if the first qubit is in state |0⟩ and second is in state |1⟩, their joint state would be|01⟩. Qiskit uses a slightly different ordering of the qubits, in which the qubits are represented from the most significant bit (MSB) on the left to the least significant bit (LSB) on the right (big-endian). This is similar to bitstring representation on classical computers, and enables easy conversion from bitstrings to integers after measurements are performed. For the example just given, the joint state would be represented as ∣10⟩. \n",
    "\n",
    "Importantly, this change in the representation of multi-qubit states affects the way multi-qubit gates are represented in Qiskit, as discussed here https://qiskit.org/documentation/tutorials/circuits/3_summary_of_quantum_operations.html#Two-qubit-gates\n",
    "\n",
    "The representation used in Qiskit enumerates the basis vectors in increasing order of the integers they represent. For instance, the basis vectors for a 2-qubit system would be ordered as |00⟩, |01⟩, |10⟩, and |11⟩. Thinking of the basis vectors as bit strings, they encode the integers 0,1,2 and 3, respectively."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 146.652x144.48 with 1 Axes>"
      ]
     },
     "execution_count": 55,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "circuit = QuantumCircuit(2)\n",
    "circuit.cx(0,1)\n",
    "circuit.draw()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$$\n",
       "\n",
       "\\begin{bmatrix}\n",
       "1 & 0 & 0 & 0  \\\\\n",
       " 0 & 0 & 0 & 1  \\\\\n",
       " 0 & 0 & 1 & 0  \\\\\n",
       " 0 & 1 & 0 & 0  \\\\\n",
       " \\end{bmatrix}\n",
       "$$"
      ],
      "text/plain": [
       "<IPython.core.display.Latex object>"
      ]
     },
     "execution_count": 56,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "job = backend.run(transpile(circuit, backend))\n",
    "array_to_latex(job.result().get_unitary(circuit, decimals=3))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "You may try other gates such as: cy, cz, ch, crz, swap\n",
    "\n",
    "And check all gates here: https://qiskit.org/documentation/stubs/qiskit.circuit.QuantumCircuit.html#qiskit.circuit.QuantumCircuit"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "There are different drawing formats. The parameter output (str) selects the output method to use for drawing the circuit. Valid choices are ``text, mpl, latex, latex_source``. See [qiskit.circuit.QuantumCircuit.draw](https://qiskit.org/documentation/stubs/qiskit.circuit.QuantumCircuit.draw.html?highlight=draw)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 190.495x144.48 with 1 Axes>"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "circuit.draw(initial_state=True, output='mpl')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Quantum Circuit Properties"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "When constructing quantum circuits, there are several properties that help quantify the “size” of the circuits, and their ability to be run on a noisy quantum device. Some of these, like number of qubits, are straightforward to understand, while others like depth and number of tensor components require a bit more explanation. Here we will explain all of these properties, and, in preparation for understanding how circuits change when run on actual devices, highlight the conditions under which they change."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 942.378x746.48 with 1 Axes>"
      ]
     },
     "execution_count": 57,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "qc = QuantumCircuit(12)\n",
    "for idx in range(5):\n",
    "   qc.h(idx)\n",
    "   qc.cx(idx, idx+5)\n",
    "\n",
    "qc.cx(1, 7)\n",
    "qc.x(8)\n",
    "qc.cx(1, 9)\n",
    "qc.x(7)\n",
    "qc.cx(1, 11)\n",
    "qc.swap(6, 11)\n",
    "qc.swap(6, 9)\n",
    "qc.swap(6, 10)\n",
    "qc.x(6)\n",
    "qc.draw()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "From the plot, it is easy to see that this circuit has 12 qubits, and a collection of Hadamard, CNOT, X, and SWAP gates. But how to quantify this programmatically? Because we can do single-qubit gates on all the qubits simultaneously, the number of qubits in this circuit is equal to the width of the circuit:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "12"
      ]
     },
     "execution_count": 58,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "qc.width()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can also just get the number of qubits directly:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "12"
      ]
     },
     "execution_count": 59,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "qc.num_qubits"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**IMPORTANT**\n",
    "\n",
    "For a quantum circuit composed from just qubits, the circuit width is equal to the number of qubits. This is the definition used in quantum computing. However, for more complicated circuits with classical registers, and classically controlled gates, this equivalence breaks down. As such, from now on we will not refer to the number of qubits in a quantum circuit as the width\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "It is also straightforward to get the number and type of the gates in a circuit using `QuantumCircuit.count_ops()`:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "OrderedDict([('cx', 8), ('h', 5), ('x', 3), ('swap', 3)])"
      ]
     },
     "execution_count": 60,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "qc.count_ops()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can also get just the raw count of operations by computing the circuits `QuantumCircuit.size()`:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "19"
      ]
     },
     "execution_count": 61,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "qc.size()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "A particularly important circuit property is known as the circuit depth. The depth of a quantum circuit is a measure of how many “layers” of quantum gates, executed in parallel, it takes to complete the computation defined by the circuit. Because quantum gates take time to implement, the depth of a circuit roughly corresponds to the amount of time it takes the quantum computer to execute the circuit. Thus, the depth of a circuit is one important quantity used to measure if a quantum circuit can be run on a device."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "9"
      ]
     },
     "execution_count": 62,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "qc.depth()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Final Statevector and Unitary"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "To save the final statevector of the simulation we can append the circuit with the ``save_statevector`` instruction. Note that this instruction should be applied before any measurements if we do not want to save the collapsed post-measurement state"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$$\n",
       "\n",
       "\\begin{bmatrix}\n",
       "\\tfrac{1}{\\sqrt{2}} & 0 & 0 & \\tfrac{1}{\\sqrt{2}}  \\\\\n",
       " \\end{bmatrix}\n",
       "$$"
      ],
      "text/plain": [
       "<IPython.core.display.Latex object>"
      ]
     },
     "execution_count": 63,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Saving the final statevector\n",
    "# Construct quantum circuit without measure\n",
    "\n",
    "from qiskit.visualization import array_to_latex\n",
    "\n",
    "circuit = QuantumCircuit(2)\n",
    "circuit.h(0)\n",
    "circuit.cx(0, 1)\n",
    "circuit.save_statevector()\n",
    "\n",
    "backend = Aer.get_backend('aer_simulator')\n",
    "result = backend.run(circuit).result()\n",
    "array_to_latex(result.get_statevector())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "To save the unitary matrix for a ``QuantumCircuit`` we can append the circuit with the ``save_unitary`` instruction. Note that this circuit cannot contain any measurements or resets since these instructions are not supported on for the ``\"unitary\"`` simulation method"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$$\n",
       "\n",
       "\\begin{bmatrix}\n",
       "\\tfrac{1}{\\sqrt{2}} & \\tfrac{1}{\\sqrt{2}} & 0 & 0  \\\\\n",
       " 0 & 0 & \\tfrac{1}{\\sqrt{2}} & -\\tfrac{1}{\\sqrt{2}}  \\\\\n",
       " 0 & 0 & \\tfrac{1}{\\sqrt{2}} & \\tfrac{1}{\\sqrt{2}}  \\\\\n",
       " \\tfrac{1}{\\sqrt{2}} & -\\tfrac{1}{\\sqrt{2}} & 0 & 0  \\\\\n",
       " \\end{bmatrix}\n",
       "$$"
      ],
      "text/plain": [
       "<IPython.core.display.Latex object>"
      ]
     },
     "execution_count": 64,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Saving the circuit unitary\n",
    "# Construct quantum circuit without measure\n",
    "\n",
    "circuit = QuantumCircuit(2)\n",
    "circuit.h(0)\n",
    "circuit.cx(0, 1)\n",
    "circuit.save_unitary()\n",
    "\n",
    "result = backend.run(circuit).result()\n",
    "array_to_latex(result.get_unitary())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can also apply save instructions at multiple locations in a circuit. Note that when doing this we must provide a unique label for each instruction to retrieve them from the results."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'psi_5': Statevector([-1.+0.00000000e+00j,  0.-5.55111512e-17j],\n",
       "             dims=(2,)),\n",
       " 'psi_3': Statevector([0.58778525+0.j        , 0.        -0.80901699j],\n",
       "             dims=(2,)),\n",
       " 'psi_2': Statevector([0.95105652+0.j        , 0.        -0.30901699j],\n",
       "             dims=(2,)),\n",
       " 'psi_0': Statevector([1.+0.j, 0.+0.j],\n",
       "             dims=(2,)),\n",
       " 'psi_4': Statevector([-0.30901699+0.j        ,  0.        -0.95105652j],\n",
       "             dims=(2,)),\n",
       " 'psi_1': Statevector([1.+0.j, 0.+0.j],\n",
       "             dims=(2,))}"
      ]
     },
     "execution_count": 65,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Saving multiple states\n",
    "# Construct quantum circuit without measure\n",
    "import numpy as np\n",
    "\n",
    "steps = 5\n",
    "circ = QuantumCircuit(1)\n",
    "for i in range(steps):\n",
    "    circ.save_statevector(label=f'psi_{i}')\n",
    "    circ.rx(i * np.pi / steps, 0)\n",
    "circ.save_statevector(label=f'psi_{steps}')\n",
    "\n",
    "# Transpile for simulator\n",
    "simulator = Aer.get_backend('aer_simulator')\n",
    "circ = transpile(circ, simulator)\n",
    "\n",
    "# Run and get saved data\n",
    "result = simulator.run(circ).result()\n",
    "data = result.data(0)\n",
    "data"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### Setting a custom statevector\n",
    "\n",
    "The ``set_statevector`` instruction can be used to set a custom Statevector state. The input statevector must be valid."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'statevector': Statevector([ 0.18572453-0.03102771j, -0.26191269-0.18155865j,\n",
       "               0.12367038-0.47837907j,  0.66510011-0.4200986j ],\n",
       "             dims=(2, 2))}"
      ]
     },
     "execution_count": 66,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import qiskit.quantum_info as qi\n",
    "# Generate a random statevector\n",
    "num_qubits = 2\n",
    "psi = qi.random_statevector(2 ** num_qubits, seed=100)\n",
    "\n",
    "# Set initial state to generated statevector\n",
    "circ = QuantumCircuit(num_qubits)\n",
    "circ.set_statevector(psi)\n",
    "circ.save_state()\n",
    "\n",
    "# Transpile for simulator\n",
    "simulator = Aer.get_backend('aer_simulator')\n",
    "circ = transpile(circ, simulator)\n",
    "\n",
    "# Run and get saved data\n",
    "result = simulator.run(circ).result()\n",
    "result.data(0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 327.397x264.88 with 1 Axes>"
      ]
     },
     "execution_count": 67,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Initialization (Using the initialize instruction)\n",
    "\n",
    "qc = QuantumCircuit(4)\n",
    "\n",
    "qc.initialize('01+-')\n",
    "qc.draw()\n",
    "qc.decompose().draw()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$$\n",
       "\n",
       "\\begin{bmatrix}\n",
       "\\tfrac{1}{\\sqrt{2}} & \\tfrac{1}{\\sqrt{2}} & 0 & 0  \\\\\n",
       " \\end{bmatrix}\n",
       "$$"
      ],
      "text/plain": [
       "<IPython.core.display.Latex object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 206.852x144.48 with 1 Axes>"
      ]
     },
     "execution_count": 68,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Initialization\n",
    "\n",
    "import math\n",
    "\n",
    "desired_vector = [1 / math.sqrt(2), 1 / math.sqrt(2), 0, 0]\n",
    "display(array_to_latex(desired_vector))\n",
    "\n",
    "\n",
    "qc = QuantumCircuit(2)\n",
    "qc.initialize(desired_vector, [0, 1])\n",
    "qc.draw()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 808.852x144.48 with 1 Axes>"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "qc.decompose().decompose().decompose().decompose().draw()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "There is another option to initalize the circuit to a desired quantum state. \n",
    "We use ` qiskit.circuit.QuantumCircuit.isometry` In general, it is used for attaching an arbitrary isometry from m to n qubits to a circuit. In particular, this allows to attach arbitrary unitaries on n qubits (m=n) or to prepare any state on n qubits (m=0). The decomposition used here was introduced by Iten et al. in https://arxiv.org/abs/1501.06911. This is important because in many experimental architectures, the C-NOT gate is relatively 'expensive' and hence we aim to keep the number of these as low as possible. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 206.852x144.48 with 1 Axes>"
      ]
     },
     "execution_count": 69,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Isometry\n",
    "qc = QuantumCircuit(2)\n",
    "qc.isometry(desired_vector, q_input=[],q_ancillas_for_output=[0,1])\n",
    "qc.draw()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 447.652x144.48 with 1 Axes>"
      ]
     },
     "execution_count": 70,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "qc.decompose().decompose().decompose().decompose().draw()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 387.452x144.48 with 1 Axes>"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "simulator = Aer.get_backend('aer_simulator')\n",
    "qc_transpiled = transpile(qc, simulator, optimization_level=3)\n",
    "qc_transpiled.draw()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's compare both circuit outputs. Which one has more gates?"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Other components"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 387.597x204.68 with 1 Axes>"
      ]
     },
     "execution_count": 71,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#Composite gates\n",
    "from qiskit import QuantumRegister\n",
    "# Build a sub-circuit\n",
    "sub_q = QuantumRegister(2)\n",
    "sub_circ = QuantumCircuit(sub_q, name='sub_circ')\n",
    "sub_circ.h(sub_q[0])\n",
    "sub_circ.crz(1, sub_q[0], sub_q[1])\n",
    "sub_circ.barrier()\n",
    "sub_circ.id(sub_q[1])\n",
    "sub_circ.u(1, 2, -2, sub_q[0])\n",
    "\n",
    "# Convert to a gate and stick it into an arbitrary place in the bigger circuit\n",
    "sub_inst = sub_circ.to_instruction()\n",
    "\n",
    "qr = QuantumRegister(3, 'q')\n",
    "circ = QuantumCircuit(qr)\n",
    "circ.h(qr[0])\n",
    "circ.cx(qr[0], qr[1])\n",
    "circ.cx(qr[1], qr[2])\n",
    "circ.append(sub_inst, [qr[1], qr[2]])\n",
    "\n",
    "circ.draw()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Circuits are not immediately decomposed upon conversion to_instruction to allow circuit design at higher levels of abstraction. When desired, or before compilation, sub-circuits will be decomposed via the decompose method."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 507.997x204.68 with 1 Axes>"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "decomposed_circ = circ.decompose() # Does not modify original circuit\n",
    "decomposed_circ.draw()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAANgAAACFCAYAAAA5MDbEAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAQBElEQVR4nO3dfVAUd57H8ffAgU8kWTySuD4/gsMgjKBozMpDXA2abI4omDNqqYcREXMbU5WKd+tDWXFNxahoLj5UbnNlymxMBB8uV4vJJiqjREiiJBpFF6MgoqyKTxFBI/C7PyhnxQ7MqNN0z/h9VVnFNM2vP2Pxme7+0TNtUUophBC68DM6gBC+TAomhI6kYELoSAomhI6kYELoSAomhI6kYELoSAomhI7cKtjZs2d58cUX6d27NzExMTzxxBNs3boVgKCgoBZ/tqysjIiIiLsO1ty4/v7+2O12IiIiSE1Npaam5p63obeZM2ficDhITEwkPDwcm83GqlWrjI4lWpHLgimlSE5OJi4ujhMnTrB//34+/vhjKioqWiOfRrt27fj+++85dOgQgYGBrFu3zpAc7igsLKRv374sX76c4uJiCgsLWb16NcXFxUZHE63EZcF27txJYGAgM2fOdC7r0aMHL7/8smbdFStWEBERQUREBCtXrnQur6urY+LEiVitVlJSUqipqQEgOTmZmJgYbDYb77333l2HHz58OD/++CMA9fX1vPTSS9hsNkaNGkVtbW2z27h27RrPPPMMUVFRRERE8MknnwDw4YcfEhsbi91uJz09nfr6+ha3f/z4cR599FF69uyJ3W6nY8eO9OnTh59++okjR44QGhpKly5diI6OBuChhx7CarVy+vTpu36uwkspF1atWqVeeeWVZr/foUMHpZRS+/btUxEREaq6ulpdvXpVhYeHq6KiIlVaWqoAlZ+fr5RSatq0aertt99WSil14cIFpZRSNTU1ymazqaqqKs24zW3v5s2b6rnnnlNr1qxRpaWlyt/fX3333XdKKaVSU1PVhg0bmt1GTk6Omj59unPMy5cvq+LiYvXss8+qn3/+WSmlVEZGhvrggw+UUkqNHj1anT59+hfzJCcnq927dyullIqPj1cHDx5USim1fPly9f777zdZt7S0VHXr1k1duXKl2f9P4VvuepIjMzOTqKgoBg8e3GR5fn4+zz//PB06dCAo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\n",
      "text/plain": [
       "<Figure size 267.052x144.48 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/latex": [
       "$$\n",
       "\n",
       "\\begin{bmatrix}\n",
       "\\tfrac{1}{\\sqrt{2}}i & \\tfrac{1}{\\sqrt{2}}i & 0 & 0  \\\\\n",
       " 0 & 0 & \\tfrac{1}{\\sqrt{2}}i & -\\tfrac{1}{\\sqrt{2}}i  \\\\\n",
       " 0 & 0 & \\tfrac{1}{\\sqrt{2}}i & \\tfrac{1}{\\sqrt{2}}i  \\\\\n",
       " \\tfrac{1}{\\sqrt{2}}i & -\\tfrac{1}{\\sqrt{2}}i & 0 & 0  \\\\\n",
       " \\end{bmatrix}\n",
       "$$"
      ],
      "text/plain": [
       "<IPython.core.display.Latex object>"
      ]
     },
     "execution_count": 72,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Circuit with Global Phase\n",
    "\n",
    "circuit = QuantumCircuit(2)\n",
    "circuit.h(0)\n",
    "#circuit.save_unitary()\n",
    "circuit.cx(0, 1)\n",
    "circuit.global_phase = np.pi / 2\n",
    "circuit.save_unitary()\n",
    "\n",
    "display(circuit.draw())\n",
    "#backend = Aer.get_backend('unitary_simulator')\n",
    "backend = Aer.get_backend('aer_simulator_unitary')\n",
    "result = backend.run(circuit).result()\n",
    "array_to_latex(result.get_unitary())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 297.479x144.48 with 1 Axes>"
      ]
     },
     "execution_count": 73,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Parameterized Quantum Circuits \n",
    "\n",
    "from qiskit.circuit import Parameter\n",
    "theta = Parameter('theta')\n",
    "\n",
    "circuit = QuantumCircuit(1)\n",
    "circuit.rx(theta, 0)\n",
    "circuit.measure_all()\n",
    "circuit.draw()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[{'1': 504, '0': 520}, {'1': 1024}, {'0': 1024}]"
      ]
     },
     "execution_count": 74,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "res = sim.run(circuit, parameter_binds=[{theta: [np.pi/2, np.pi, 0]}]).result()  # Different bindings\n",
    "res.get_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "ParameterView([])\n"
     ]
    }
   ],
   "source": [
    "#We can inspect the circuit’s parameters\n",
    "print(qc.parameters)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 447.652x204.68 with 1 Axes>"
      ]
     },
     "execution_count": 76,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Random Circuit\n",
    "\n",
    "from qiskit.circuit.random import random_circuit\n",
    "\n",
    "circ = random_circuit(2, 2, measure=True)\n",
    "circ.draw(output='mpl')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 206.997x264.88 with 1 Axes>"
      ]
     },
     "execution_count": 77,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Pauli\n",
    "from qiskit.quantum_info.operators import Pauli\n",
    "\n",
    "circuit = QuantumCircuit(4)\n",
    "IXYZ = Pauli('IXYZ')\n",
    "circuit.append(IXYZ, [0, 1, 2, 3])\n",
    "circuit.draw()\n",
    "# circuit.decompose().draw()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 206.997x264.88 with 1 Axes>"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Pauli with phase \n",
    "from qiskit.quantum_info.operators import Pauli\n",
    "\n",
    "circuit = QuantumCircuit(4)\n",
    "iIXYZ = Pauli('iIXYZ')  # ['', '-i', '-', 'i']\n",
    "circuit.append(iIXYZ, [0, 1, 2, 3])\n",
    "circuit.draw()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 206.852x144.48 with 1 Axes>"
      ]
     },
     "execution_count": 78,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Any unitary!\n",
    "matrix = [[0, 0, 0, 1],\n",
    "          [0, 0, 1, 0],\n",
    "          [1, 0, 0, 0],\n",
    "          [0, 1, 0, 0]]\n",
    "          \n",
    "circuit = QuantumCircuit(2)\n",
    "circuit.unitary(matrix, [0, 1])\n",
    "circuit.draw()\n",
    "# circuit.decompose().draw() #synthesis"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAKoAAADWCAYAAABBlhk4AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAOv0lEQVR4nO3de1SUh5nH8d/McM9IkSAgtKig4wWVIiZSawMaRRsxS9SA2LDKksgGm43atcZUrYhhq6XGbDZbY9pKoim2orWGotZEGDSENHiBRhsJIBK8RECRcIcZ+ofH2UWHOBLhfR/8fc7xHH3nwDwz5+u8vML4aDo7OztBpHJapQcgsgVDJREYKonAUEkEhkoiMFQSgaGSCAyVRGCoJAJDJREYKonAUEkEhkoiMFQSgaGSCAyVRGCoJAJDJREYKonAUEkEhkoiMFQSgaGSCAyVRGCoJAJDJRHslB6gPzl3FPjqqtJT9I4BnsDIacrdP0O9j766CtRVKT1F/8RTP4nAUEkEhkoiMFQSgaGSCAyVRGCoJAJDJREYKomg6lDNZjPS0tIwYsQIODk5ISgoCEajESNHjsSSJUuUHs9mJrMJ27NWYv76QXhyzQAkvz0PNxprlB5LFFWHmpCQgJSUFCQmJuLgwYOIjo5GbGwsysvLERISovR4Ntud8wvkn/kzXn/hY2T87Ob3WDdlxCk8lSyq/V5/RkYG0tPTkZubi7CwMADA1KlTcfLkSezbtw8TJkxQeELbZRdsxzMz1mHww/4AgOdmb8aiTcPx5fUL8Bo4ROHpZFDtK2pqaipmzZplifSW4cOHw97eHuPHjwcAVFRUICwsDAaDAePGjcOxY8eUGLdbDc11uFpXiRG+/3cG8PEIgIuTK8ouFSk4mSyqDLWqqgqffvopnn766Ttuq6ysRGBgIBwdHQEAiYmJiImJQUlJCd58800sWLAAbW1td70PjUZz338Zjbl33E9T61cAgIecv9XluN7JDU0t9T14dpRhNOb2ynNmK9WGCgDe3t5djjc3N8NoNFpO+zU1NTh+/DgSEhIAAJMnT4aPjw9ycnL6duCv4eI4AADQ2Hyjy/GGljq4OLkqMZJIqgzVw8MDAFBSUtLl+ObNm3H58mXLhVRlZSW8vLwsr64AMGzYMFy4cOGu99HZ2Xnff4WFhd9xP3pnN3i6+aH04knLscu15WhqqYf/4PE9eXoUERYW3ivPma1UeTHl7++P8ePHIzU1Fe7u7vD19UVmZiays7MBQNQVPwA8EboEf8jdhKDhU+Hq8jDeyl6FiYaZ8HYfqvRoYqjyFVWr1WLPnj0IDAzE888/j/j4eHh4eGDp0qXQ6XSWCyk/Pz98+eWXaG1ttXzs+fPnMWSIuq6kF0x9CaGj5+DHrz2C2I2+MJtNeGnhLqXHEkUjaQ16XFwcioqKUFxcbDkWERGBqKgoJCUlIT8/H/Pnz0dFRQUcHBz6fL7C3f33rShu3wYmLlDu/lV56u9OYWEhQkNDuxzbtm0bFi9ejK1bt8LBwQEZGRmKREq9S0yoDQ0NKCkpQVJSUpfj/v7+yMvLU2gq6itiQtXr9TCZTEqPQQpR5cUU0e0YKonAUEkEhkoiMFQSgaGSCAyVRGCoJAJDJREYKonAUEkEhkoiMFQSgaGSCAyVRGCoJAJDJREYKonAUEkEhkoiMFQSgaGSCAyVRGCoJAJDJREYKonAUEkEhkoiMFQSgaGSCAyVRGCoJIKqQ+0vS3vpm1P1/zidkJCAffv2Ye3atQgJCUF+fj5iY2NRXV2NFStWKD2eTXJO78aB/DdQfqkILe1NOLypQ+mRRFJtqP1laa/eeSDmfC8Jbe3NeHUvzwI9pdpTv61Le9etWweDwQCtVovMzEwlRv1aj4yciWnBsZbN0tQzqgz1Xpb2zpo1C4cOHcJjjz3W12NSH1JtqMDdl/YCNxf1+vvf+6tVX22X7i+4XdoKW5f20oNDlRdTfbG0tzc2a/bnFZNhYeHo/LVy20hV+Ypq69JeCUxmE9raW9De0QYAaGtvQVt7S6/8RenPVPmKCgAGgwE5OTldjsXFxWHMmDFwdnZWaKp79/6JnUj7Y7zlz7Nfvjn7ztXnuQb9HojaLj169GiEhoZix44dlmNr167Fjh07UF1dDb1eD2dnZxiNRgQEBPT5fP351K/0dmlVnvqtubW09/Z/6E9JSUFVVRVaW1tRW1uLqqoqRSKl3qXaU//tuLT3wSbmFZUebAyVRGCoJAJDJREYKonAUEkEhkoiMFQSgaGSCAz1AXTlWgVmrNSgWtAPJoj5Fmp/drbiI+w8koyzlR/BbOrAdzxHIWrKfyBi4iKlR1MNhqqwwnN/xbr0JxE7dTVWL3wXDvbO+PgfWdi6NxGXa8uxaGbyHR/TYWqHnc5egWmVw1AV9vr+pZj63VjERfzcciwsKBotbU3YkvksZj4Sj3f+uh4mczt0WnsUnD2AsKAYJM75FX6R8QzOVuSjtb0JPh7D8ewTmxBimGH5PEVlRqQfXoMLV85Ao9Fi0uhI/HRButU5Pvx0P959PwWXasvg7joYP3p8DR6f8KPefvg2Y6gKqqouwaWaUrw4d9sdt00LXogtexJw8vMjAIC84j1YtWAnfhL9W7R3tKKz04wpY+fipzFvw8HeCfuObcWGd+bh7ZfK4KYfhPJLxVj9m5l4ce42TA2ORWenGZ9Vfmx1jhMlR/CrPQlIXrQfgUO/j5KqQqz+zUwMcvsOxvur4929vJhSUF1DNQDA41u+d9xmb+cA14c8cL3hKgBg7NApCP9uDHRaHZwcXODsqMf0kGfg4jQAdjp7RIevhJ3OAee++AQAkFWwDaFj5mDmI4vhYOcIR3tnBAWEW53jT8dfw1NTXsQ4/x9Aq9VilN+jeHzCMzhy4p3eeeA9wFdUBbnpBwEAam5chJ/nqC63tXe0ob6xBm4PDcLF6s/hddvbVlrbm7E9ayX+9lk26htroNFo0dz6FW403oz/yvUKDPcJtmmOK9fOo6g0B3vztliOmTtNGDvsB9/g0d1fDFVBvh4jMNjdHzmnfo8JIx7vclvu6d2ARoMJhhk4U5EPjabryS8zbwv+Xp6HzYkfwHvgUGg0Gsz7uYflTYPeA4fiYs3nNs3hOXAIIiYuRnT4yvvzwHoBT/0K0mg0+PFT/4MPTu7Cu+9vRH3TNbS2NyOvOBO/PrAMMeGrMNh9mNWPbWqph72dI1xdHka7qQ07j2xAQ0ud5fbZoYn46OwBHDmxE20drWhtb0ZRWa7VzzV3yjLsPfYq/l5+DCazCe0dbSipOoFzXxT2wqPuGb6iKuzRUT/E5sQPsPPIBvwxdzPMZhN8BxmwJDINsx79t24/bv5jK1B68SQWpPhA7+yGuVOWwXvgUMvtAT5BeCUhG+mH1uCN/S/ATmeP74150urXqRNHRmDF/Lew/S8rUVV9DhqNFkO9ArFo5oZeeMQ9I+pdqGrHd6H2Hp76SQSGSiIwVBKBoZIIDJVEYKgkAkMlERgqicBQSQSGSiIwVBKBoZIIqg6VS3vpFlX/mF9/WNr71l9W4eN/ZKG67gs4OeoxadRsPDt7E1xd3JUeTRTVhtpflvZqtTq8FLsLQ73HoqG5Dpt3/yt++YfFSIk/oPRooqj21G/L0t7r168jMjISBoMBQUFBiIiIQGlpqUITW5fww1QM9w2Gnc4ebvpBeGrKiyju5iftqXuqDNXWpb0ajQbLli1DSUkJioqKEBkZifj4eCufUT1OlX4Af58gpccQR7WhAndf2uvm5obp06dbbp88eTLOnz9v030osbT3WPFeZBVsQ9KTr93Ds6EOXNprRU+X9m7duhVRUVG9PV6PGIv24NXM57Bh8QGM+LaMr6/VRJUXUz1Z2pucnIzS0lIcPXrUpvvoy6W9hz7Zge3v/QQb4t/D2GHfv+/32xe4tNeKe13au3HjRmRlZeHQoUNwcXFRaGrr/nT8v7E96z/xX88dFhupGoh6F2pcXByKiopQXFxsOZacnIzs7GwcPnwYbm5uyg0H66+oM1ZqoNPawd7Oscvx915p6MPJvjml34WqylN/dwoLCxEaGmr585kzZ7B+/XoEBAQgPDzccvz06dN9P1w3jvxSzOuAqokJ9dbS3qSkJMuxwMBA7r1/QIgJlUt7H2yqvJgiuh1DJREYKonAUEkEhkoiMFQSgaGSCAyVRGCoJAJDJREYKonAUEkEhkoiMFQSgaGSCAyVRGCoJAJDJREYKonAUEkEhkoiMFQSgaGSCAyVRGCoJAJDJREYKonAUEkEhkoiMFQSgaGSCAyVRGCoJIKqQ+0v26V/d/BniEsdhn9Z44qn13tiwzvzcfV6pdJjiaLqUBMSEpCSkoLExEQcPHgQ0dHRiI2NRXl5ebdL0dRoekgcti0/jT9vrMfOlyvg6eaHV95VcMWIQKr9P/z7y3ZpAPDzHGX5fSc6odFo8UX1OQUnkke1odqyXRoAoqKiUF5eDp1OB3t7e6SmpnbZj6oWR0/9Hq/tex5NLfXQae3w73O2KD2SKKoM9dZ26eXLl99x2//fLg0A6enplkVop06dQnh4OK5duwadTteXI9/VtOCFmBa8ENfqr+DgJ7/FsMHjlB5JFFV+jWrrdmkAXbb13bhxAxqNxqbdU0pslwYAd1dvPDHpOaz5XSTqm67Z9oSoALdLW3Gv26WXLl0Kf39/zJs3D3v37oWdnSpPFBYmUwda2hpRW39J6VHEUOUuVLPZjODgYFy+fBlpaWldtktXVlaioKAAkyZNuuPjjEYjli9fjry8POj1+j6f29ouVLPZjAMf/S/CgqIxUO+J6roqvLH/BZRdOo30VZ9Dp1P3X6pblN6FqspX1HvdLn1LWFgYtFotPvzwwz6e+Ov97bNsLEkbizkvP4QXXp8ERwcXbFryvphI1UC1z5TBYEBOTk6XY3FxcRgzZgycnZ0B3NyPWltbiyFDhgC4eTFVVlaG0aNH9/m83dFqtUhNyFZ6DPFUG6o1t2+XbmxsRExMDBoaGmBnZwcnJyfs2rULfn5+Ck5JvUFMqNa2S3t5eaGgoEDBqaiviAmV26UfbKq8mCK6HUMlERgqicBQSQSGSiIwVBKBoZIIYv4dVYIBnkpP0HuUfmyq/Okpotvx1E8iMFQSgaGSCAyVRGCoJAJDJREYKonAUEkEhkoiMFQSgaGSCAyVRGCoJAJDJREYKonAUEkEhkoiMFQS4Z+lomfsBWnwigAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 206.997x264.88 with 1 Axes>"
      ]
     },
     "execution_count": 79,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Classical logic\n",
    "from qiskit.circuit import classical_function, Int1\n",
    "\n",
    "@classical_function\n",
    "def oracle(x: Int1, y: Int1, z: Int1) -> Int1:\n",
    "    return not x and (y or z)\n",
    "\n",
    "circuit = QuantumCircuit(4)\n",
    "circuit.append(oracle, [0, 1, 2, 3])\n",
    "circuit.draw()\n",
    "# circuit.decompose().draw() #synthesis"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 206.852x144.48 with 1 Axes>"
      ]
     },
     "execution_count": 80,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Classical logic\n",
    "from qiskit.circuit import classical_function, Int1\n",
    "@classical_function\n",
    "def oracle(x: Int1) -> Int1:\n",
    "    return not x\n",
    "circuit = QuantumCircuit(2)\n",
    "circuit.append(oracle, [0, 1])\n",
    "circuit.draw()\n",
    "# circuit.decompose().draw() #synthesis"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### How to create an operator?"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "https://qiskit.org/documentation/tutorials/circuits_advanced/02_operators_overview.html"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<h3>Version Information</h3><table><tr><th>Qiskit Software</th><th>Version</th></tr><tr><td><code>qiskit-terra</code></td><td>0.20.0</td></tr><tr><td><code>qiskit-aer</code></td><td>0.10.3</td></tr><tr><td><code>qiskit-ignis</code></td><td>0.7.0</td></tr><tr><td><code>qiskit-ibmq-provider</code></td><td>0.18.3</td></tr><tr><td><code>qiskit</code></td><td>0.35.0</td></tr><tr><td><code>qiskit-nature</code></td><td>0.3.2</td></tr><tr><td><code>qiskit-finance</code></td><td>0.3.1</td></tr><tr><td><code>qiskit-optimization</code></td><td>0.3.2</td></tr><tr><td><code>qiskit-machine-learning</code></td><td>0.4.0</td></tr><tr><th>System information</th></tr><tr><td>Python version</td><td>3.8.13</td></tr><tr><td>Python compiler</td><td>GCC 10.3.0</td></tr><tr><td>Python build</td><td>default, Mar 25 2022 06:04:10</td></tr><tr><td>OS</td><td>Linux</td></tr><tr><td>CPUs</td><td>8</td></tr><tr><td>Memory (Gb)</td><td>31.211315155029297</td></tr><tr><td colspan='2'>Wed Jun 08 09:07:58 2022 UTC</td></tr></table>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<div style='width: 100%; background-color:#d5d9e0;padding-left: 10px; padding-bottom: 10px; padding-right: 10px; padding-top: 5px'><h3>This code is a part of Qiskit</h3><p>&copy; Copyright IBM 2017, 2022.</p><p>This code is licensed under the Apache License, Version 2.0. You may<br>obtain a copy of this license in the LICENSE.txt file in the root directory<br> of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.<p>Any modifications or derivative works of this code must retain this<br>copyright notice, and modified files need to carry a notice indicating<br>that they have been altered from the originals.</p></div>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import qiskit.tools.jupyter\n",
    "%qiskit_version_table\n",
    "%qiskit_copyright"
   ]
  }
 ],
 "metadata": {
  "colab": {
   "collapsed_sections": [
    "7d_uf8JI12oJ",
    "Li9fj6uVzyFR",
    "9PBnSGwum9ZJ",
    "s0UwnaaJQkqa",
    "YqAqumfLri_P",
    "yWcE6S_Qp61P",
    "yhGcFXBa4aEM",
    "ZocPglAL6zRm",
    "58JawO_lFBGY",
    "iTzbCQzm67Uw",
    "EQ8dJq6v7NW-"
   ],
   "name": "Workshop.ipynb",
   "provenance": []
  },
  "kernelspec": {
   "display_name": "Qiskit v0.35.0 (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.8.13"
  },
  "widgets": {
   "application/vnd.jupyter.widget-state+json": {
    "state": {
     "07d48d30920340ae888d20f9ba2b07f9": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "DescriptionStyleModel",
      "state": {
       "description_width": ""
      }
     },
     "0ea60f7f3e75459c99f3785bb9eb4b61": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HTMLModel",
      "state": {
       "layout": "IPY_MODEL_4f3fea89c851443f887d3b6f2b2d1c7f",
       "style": "IPY_MODEL_7a3f11240f464eb096ba450f43fe7734",
       "value": "<h5>Message</h5>"
      }
     },
     "14897d6204b44571a3d124249c75d473": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HTMLModel",
      "state": {
       "layout": "IPY_MODEL_8ad46cae2c1e446e99a5cca1ed15de8f",
       "style": "IPY_MODEL_18eea866487f4b5bbaecd0fc66566257",
       "value": "<p style='font-family: IBM Plex Sans, Arial, Helvetica, sans-serif; font-size: 20px; font-weight: medium;'>Circuit Properties</p>"
      }
     },
     "18eea866487f4b5bbaecd0fc66566257": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "DescriptionStyleModel",
      "state": {
       "description_width": ""
      }
     },
     "27398326e85a482a8e9c140d39b5869f": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "width": "70px"
      }
     },
     "4f3fea89c851443f887d3b6f2b2d1c7f": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "53b185d9ed334ffa8624f29257858bfe": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "grid_area": "right",
       "padding": "0px 0px 0px 0px",
       "width": "70px"
      }
     },
     "5945c9abc06747cfb7995f56d0c400ca": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HTMLModel",
      "state": {
       "layout": "IPY_MODEL_a4325b18b77b44d2bcaf43d7e094e0f5",
       "style": "IPY_MODEL_bdcb18fb7391413b994e50795e35c65f",
       "value": "<h5>Status</h5>"
      }
     },
     "6091dcc7188e46ffb25cd3831fb833a5": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HBoxModel",
      "state": {
       "children": [
        "IPY_MODEL_e6e03a7b06364918bdb1a7e093f7ca55",
        "IPY_MODEL_d9e9d8b65f444557bd05b39dc6a7ff9e",
        "IPY_MODEL_5945c9abc06747cfb7995f56d0c400ca",
        "IPY_MODEL_93147352c1af424e94c709825e25e5d6",
        "IPY_MODEL_0ea60f7f3e75459c99f3785bb9eb4b61"
       ],
       "layout": "IPY_MODEL_7e5b6a1c2b2245bebbd129227a06bf08"
      }
     },
     "62b8055c644146fa88b932c2af25208f": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "width": "145px"
      }
     },
     "7a3f11240f464eb096ba450f43fe7734": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "DescriptionStyleModel",
      "state": {
       "description_width": ""
      }
     },
     "7e5b6a1c2b2245bebbd129227a06bf08": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "margin": "0px 0px 0px 37px",
       "width": "600px"
      }
     },
     "8ad46cae2c1e446e99a5cca1ed15de8f": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "margin": "0px 0px 10px 0px"
      }
     },
     "8bcae152c44c44be8c041b6d9e61407f": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "width": "190px"
      }
     },
     "93147352c1af424e94c709825e25e5d6": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HTMLModel",
      "state": {
       "layout": "IPY_MODEL_27398326e85a482a8e9c140d39b5869f",
       "style": "IPY_MODEL_07d48d30920340ae888d20f9ba2b07f9",
       "value": "<h5>Queue</h5>"
      }
     },
     "a4325b18b77b44d2bcaf43d7e094e0f5": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "width": "95px"
      }
     },
     "a7b4269e8aa34908b6389311ef4ca895": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "ButtonStyleModel",
      "state": {}
     },
     "bdcb18fb7391413b994e50795e35c65f": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "DescriptionStyleModel",
      "state": {
       "description_width": ""
      }
     },
     "c11fc1e9e7874701963fecc805b6d489": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "ButtonModel",
      "state": {
       "button_style": "primary",
       "description": "Clear",
       "layout": "IPY_MODEL_53b185d9ed334ffa8624f29257858bfe",
       "style": "IPY_MODEL_a7b4269e8aa34908b6389311ef4ca895"
      }
     },
     "cdc8ad7445b64b62863f0972b09dbc53": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "DescriptionStyleModel",
      "state": {
       "description_width": ""
      }
     },
     "d9e9d8b65f444557bd05b39dc6a7ff9e": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HTMLModel",
      "state": {
       "layout": "IPY_MODEL_62b8055c644146fa88b932c2af25208f",
       "style": "IPY_MODEL_cdc8ad7445b64b62863f0972b09dbc53",
       "value": "<h5>Backend</h5>"
      }
     },
     "e6e03a7b06364918bdb1a7e093f7ca55": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "HTMLModel",
      "state": {
       "layout": "IPY_MODEL_8bcae152c44c44be8c041b6d9e61407f",
       "style": "IPY_MODEL_fc489dfb77e84dbebfc9ce017c585b94",
       "value": "<h5>Job ID</h5>"
      }
     },
     "ed122becc4f344c8a5f9be2af83f7be2": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "GridBoxModel",
      "state": {
       "children": [
        "IPY_MODEL_c11fc1e9e7874701963fecc805b6d489"
       ],
       "layout": "IPY_MODEL_f24dbfc68bdd4a45b31f39f8e64c842f"
      }
     },
     "f24dbfc68bdd4a45b31f39f8e64c842f": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.2.0",
      "model_name": "LayoutModel",
      "state": {
       "grid_template_areas": "\n                                       \". . . . right \"\n                                        ",
       "grid_template_columns": "20% 20% 20% 20% 20%",
       "width": "100%"
      }
     },
     "fc489dfb77e84dbebfc9ce017c585b94": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.5.0",
      "model_name": "DescriptionStyleModel",
      "state": {
       "description_width": ""
      }
     }
    },
    "version_major": 2,
    "version_minor": 0
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
