{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Adding new blocks\n", "\n", "In this tutorial you will learn how to create your own circuit blocks by extending the `CircuitBlock` class.\n", "\n", "### Table of contents\n", "- [Non-parameterized blocks](#non-parameterized-blocks)\n", "- [Parameterized blocks](#parameterized-blocks-encoding-blocks)\n", "- [Non-gate blocks](#non-gate-blocks)\n", "- [Additional remarks](#additional-remarks)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#Necessary imports\n", "import matplotlib.pyplot as plt\n", "from qiskit import QuantumCircuit\n", "\n", "from qailab.circuit import build_circuit\n", "from qailab.circuit.base import CircuitBlock, EncodingBlock, NonGateBlock\n", "\n", "#Utility function\n", "def show_circuit(circ):\n", " fig = plt.figure(figsize=(12,8))\n", " ax1,ax2 = fig.add_subplot(1,2,1),fig.add_subplot(1,2,2)\n", " ax1.set_title('Block form')\n", " ax2.set_title('Decomposed')\n", " circ.draw('mpl',ax=ax1)\n", " circ.decompose().draw('mpl',ax=ax2)\n", " \n", " plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Non-parameterized blocks\n", "\n", "The simplest kind of circuit block. Simply subclass `CircuitBlock` and modify the `_build_circuit` function. You can also modify `__init__()` to give a custom name to your block (visible when drawing the circuit for example)." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from qiskit import QuantumCircuit\n", "\n", "\n", "class MyCustomBlock(CircuitBlock):\n", " \"\"\"\n", " Adds a hadamard gate on every even qubit.\n", " \"\"\"\n", " def __init__(self) -> None:\n", " super().__init__('MyCustomName')\n", " \n", " def _build_circuit(self, num_qubits: int) -> QuantumCircuit:\n", " circuit = QuantumCircuit(num_qubits)\n", " for i in range(num_qubits):\n", " if i % 2 == 0:\n", " circuit.h(i)\n", " return circuit\n", "\n", "circ = build_circuit(3,[MyCustomBlock()])\n", "\n", "show_circuit(circ)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Parameterized blocks (encoding blocks)\n", "\n", "Parameterized blocks allow you to encode either the input vector or weights into the quantum circuit. \n", "The procedure for adding your own is largely the same, however `EncoderBlock` provides a convenience method `_create_parameters()` for creating uniquely named lists of parameters for you to use." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from typing import Literal\n", "\n", "\n", "class MyCustomEncodingBlock(EncodingBlock):\n", " \"\"\"\n", " Adds an Rx then an Ry gate to every qubit\n", " \"\"\"\n", " def __init__(self, block_type: Literal['input','weight'] = 'input') -> None:\n", " super().__init__(\"MyCustomNameDos\", block_type)\n", " \n", " def _build_circuit(self, num_qubits: int) -> QuantumCircuit:\n", " if self._parameters is None:\n", " self._parameters = self._create_parameters(2*num_qubits) #Initialize 2*num_qubits new parameters\n", " circuit = QuantumCircuit(num_qubits)\n", " for i in range(num_qubits):\n", " circuit.rx(self._parameters[2*i],i)\n", " circuit.ry(self._parameters[2*i+1],i)\n", " \n", " return circuit\n", " \n", "circ = build_circuit(3,[MyCustomEncodingBlock()])\n", "\n", "show_circuit(circ.assign_parameters(list(range(len(circ.parameters))))) # Assign sample parameters, as without them draw() puts the entire name in the graph." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Non-gate blocks\n", "\n", "Some quantum circuits cannot be converted to gates (e.g circuits with measurements). \n", "If you create a block that cannot be converted to a gate, you can subclass `NonGateBlock`, which will change the way in which the block is added to a circuit. \n", "The drawback of this solution is that if the circuit has a lot of other gates, which can together be converted to a single gate, they will remain in their decomposed form. " ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "This will throw an error!\n", "!ERROR! 'Circuit with classical bits cannot be converted to gate.'\n" ] } ], "source": [ "class MyCustomMeasurementBlock(CircuitBlock):\n", " \"\"\"\n", " Adds a hadamard gate to every qubit, then measures only odd qubits.\n", " \"\"\"\n", " def __init__(self) -> None:\n", " super().__init__('MyCustomNameTres')\n", " \n", " def _build_circuit(self, num_qubits: int) -> QuantumCircuit:\n", " circuit = QuantumCircuit(num_qubits,num_qubits//2) # Add classical bits for measurements\n", " clbit = 0\n", " for i in range(num_qubits):\n", " circuit.h(i)\n", " if i % 2 == 1:\n", " circuit.measure(i,clbit)\n", " clbit += 1\n", " \n", " return circuit\n", "\n", "print(\"This will throw an error!\")\n", "try:\n", " circ = build_circuit(3,[MyCustomMeasurementBlock()],measure_qubits=[])\n", "except Exception as e:\n", " print(f\"!ERROR! {e}\")" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "image/png": "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KTMzUzExMSotLZUk/eEPf9CoUaMqXT8mJqbeanGmXtqpUyft2bNHX331lb755hstXbpUb775pv70pz/pqaeesvysJk2apClTplS6D16hBFdBsIXLKy4ullR2prcyLVq0kJ+fn/bs2VNh2e7du+Xu7m45C9uuXTtt377dpuPeeOONio+P19SpUxUYGKi33nqrlt9AioyMrLK+8uUAALiq+fPnS5JGjRpleWzIy8tLI0aMuOR2tvTtyMhI/fLLLyotLbU6CV1fPbb8ivPFV0b37t0rqWzU5PJj2tr3/f39NWHCBE2YMEGFhYW66aab9Ne//lVPPvmkWrRoocDAQJWUlFT7s4qMjNT27dsr1FZZHYAz4lZkuLSioiIlJibK29vbcvvOb3l4eCg+Pl6ff/655RYgqWwUwU8++USDBg1SUFCQJOnmm29WcnKyPv300wr7qeyM7OTJk/X666/r7bff1uOPP17r7zF69Ght3LhRGzZssMzLzc3VO++8o6ioKHXu3LnW+wYAwJmtWrVKzzzzjKKjo3X77berZcuWGjZsmObNm6cTJ05UWP/06dOWz7b07dGjR+vkyZP6z3/+Y1lWXFysN954QwEBARo6dGidfp/U1FSrerKyspSQkKCePXsqNDTUUpMtff/s2bNW+/b29lbnzp1lGIaKiork4eGhm2++WUuXLq004F/8sxo9erRSU1O1ZMkSy7zz58/rnXfeqZsvDtQzrtjCpXz99deWs5mnTp3SJ598on379umJJ56whNPKPPvss1q5cqUGDRqk3//+9/L09NS8efNUUFCgF154wbLeo48+qiVLlujWW2/VnXfeqV69eik9PV1ffPGF3n77bfXo0aPCvh944AFlZWXpj3/8oxo3bqzZs2fX+Hs98cQTWrBgga699lo99NBDatq0qT766CMdOnRIS5cutettzgAA1JfyPl5cXKy0tDStWrVKK1euVGRkpL744gv5+PhIKhssctCgQerWrZvuuecetW3bVmlpadqwYYOOHTum5ORkSbb17XvvvVfz5s3T1KlTtWXLFkVFRWnJkiVat26dXn31VQUGBtbpd+zQoYPuuusubdq0SSEhIfrXv/6ltLQ0ffDBB5Z1bO378fHxCg0N1cCBAxUSEqJdu3bpH//4h8aMGWOp+/nnn9fq1at11VVX6Z577lHnzp2Vnp6un3/+Wd99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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "class MyCustomMeasurementBlock(NonGateBlock,CircuitBlock):\n", " \"\"\"\n", " Adds a hadamard gate to every qubit, then measures only odd qubits.\n", " \"\"\"\n", " def __init__(self) -> None:\n", " super().__init__('MyCustomNameTres')\n", " \n", " def _build_circuit(self, num_qubits: int) -> QuantumCircuit:\n", " circuit = QuantumCircuit(num_qubits,num_qubits//2) # Add classical bits for measurements\n", " clbit = 0\n", " for i in range(num_qubits):\n", " circuit.h(i)\n", " if i % 2 == 1:\n", " circuit.measure(i,clbit)\n", " clbit += 1\n", " \n", " return circuit\n", "\n", "circ = build_circuit(3,[MyCustomMeasurementBlock()],measure_qubits=[])\n", "show_circuit(circ)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Additional remarks\n", "\n", "- Circuits created by your block can have more qubits than `num_qubits`. These additional qubits are treated as purely auxiliary and won't be measured by default.\n", "- If two blocks create one auxiliary qubit each, the final circuit produced by `build_circuit` will have an additional 2 qubits." ] } ], "metadata": { "kernelspec": { "display_name": ".venv", "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.12.9" } }, "nbformat": 4, "nbformat_minor": 2 }