{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Advanced: Extending lambeq" ] }, { "cell_type": "raw", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "In this tutorial you will find examples of how to extend ``lambeq`` to add more :term:`readers `, :term:`rewrite rules ` and :term:`ansätze `, so you can start making your own `contributions `_ to the toolkit.\n", "\n", ":download:`Download code <../_code/extend-lambeq.ipynb>`" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Creating readers" ] }, { "cell_type": "raw", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "The :py:class:`.Reader` class is an abstract base class for converting sentences to diagrams. Each :term:`reader` can be seen as a different :term:`compositional model`, and ``lambeq`` can accommodate any compositional model that represents sentences in a :term:`string diagram`/\\ :term:`tensor network` form.\n", "\n", "A concrete subclass of :py:class:`.Reader` should implement the :py:meth:`.Reader.sentence2diagram` method, which converts a single sentence into a rigid diagram." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Reader example: \"Comb\" reader\n", "\n", "In this example we will create a reader that, given a sentence, it generates the following tensor network:\n", "\n", "
\n", "\"drawing\"\n", "
\n", "\n", "Note that the particular compositional model is not appropriate for classical experiments, since the tensor that implements the layer can become very large for long sentences. However, the model can be implemented without problems on a quantum computer." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "image/png": "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z9PS0jzvDUePHjWSzK5duzzrKysrTZs2bcxf/vIXY4wxr732munbt68xxpiCggIzePBgM2bMGM/7w8iRI81LL71kjKnfe8WiRYtMSEiIqaioaPCY/EHAzlAeP35c1dXVGjp0qGdZSEiIBg0apLKyMq9tk5KSPP++PW19+/KnJCUkJHjNMMTFxXmth3/55JNPVF1drUGDBnmWtW/fXr169fI8Lykp0WOPPab4+Hi1a9dOaWlpkqTy8nJJX1zCSExM9MxSFhcXq6KiQk888YQkqbS0VJcvX1ZUVJTatm3reZw4cYJLYH4sJiZGjz76qPLy8pSbm6tHH31U0dHRXtt8/PHHmjRpkrp166aIiAjPJbHbvXFbSkqK1/NBgwapb9++Wr16tSRp7dq16tKli0aMGNF0A4JP1bc30HyVlZUpODhYgwcP9iyLiopSr169PNkhLS1Nhw4d0tmzZ1VcXKz09HSlp6erqKhI1dXV+vDDD5Weni6p/u8VXbp0UUxMjE/H2tj865OoDgkJCfH82+VySZLXJYza629vwyWO5uvKlSvKyMhQRkaG8vPzFRMTo/LycmVkZHh9GHrKlClat26dFixYoHXr1mnUqFGKioqSJF2+fFlxcXGeyx61RUZG+mgkaIgZM2boJz/5iSTp9ddfr7P+scceU5cuXfT222/r/vvvV01Njfr161fng/Lh4eF1Xvv000/r9ddf14IFC5Sbm6vp06d7fqeg+atvbyCwffOb31THjh1VXFys4uJivfLKK4qNjdWvf/1r7dmzR9XV1UpNTZVU//eKu/0+aW4CdobywQcfVGhoqHbt2uVZVl1drT179qhPnz4OVoam1q1bN4WEhHh9NubChQs6evSoJOnw4cP67LPPtGzZMg0fPly9e/e+64zz5MmT9Z///EclJSXasGGDpkyZ4lmXnJysTz/9VMHBwerevbvX484ZL/iXUaNG6caNG6qurlZGRobXus8++0xHjhzRL37xCz388MNKTEzUuXPn6r3vzMxMnTp1Sq+99poOHTqkadOmNXb5cIhtb6B5SExM1M2bN7V7927Psts/+9vZweVyafjw4Xr//fd18OBBDRs2TElJSbp+/brefPNNpaSkeAJiS3qvCNhAGR4erh//+MeaN2+etm7dqkOHDmnWrFmqqqrSzJkznS4PTahdu3aaNm2a5s2bp8LCQh08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LCxUTk6O1qxZo7CwMM92brdbsbGxXo+IiAiv40RGRio2NlY9e/bU0qVLdfPmTRUWFvpmkADgQ35/Y3MAaGyFhYWqqqrSyJEj1alTJ6Wmpmr58uUKDw9XWFiY1qxZo9TUVH33u9/VnDlz9NJLL2ngwIENPt7Nmzc9oTU0NLSxhgEAfoMZSgAtzsqVKzVx4kS1atVK/fr1U7du3bR+/XrP+pSUFL344osaP368oqKitHDhwjr7+OMf/6i2bdt6PfLz8722mTRpktq2bavWrVvr+eefV0JCgp588skmHx8A+BqBEkCLcv78eW3cuFGZmZmeZZmZmV6XvSXpl7/8pWpqarRgwQIFB9e9mDNlyhQdOHDA6/H44497bbN8+XIdOHBAH3zwgfr06aOcnBx17NixaQYGAA7ikjeAFmXdunW6du2aBg8e7FlmjFFNTY2OHj2qnj17SpInRN4tTEpS+/bt1b179688VmxsrLp3767u3bsrNzdXjzzyiA4dOqT77ruvkUYDAP6BGUoALcrKlSv1wgsveM0slpaWavjw4Vq1alWTHXfQoEEaOHCgXnnllSY7BgA4hRlKAAHpwoULOnDggNeyS5cuad++fcrPz1fv3r291k2aNElLlizRyy+//KWzkrVVVVXp008/9VrWunVrdejQ4UtfM2fOHI0bN07z589Xp06d6j8YAPBzzFACCEhFRUUaMGCA12PVqlXq06dPnTApSePGjVNFRYW2bNlSr/2//fbbiouL83pMmjTpK18zatQode3alVlKAAGHGUoAAScvL095eXn39JrY2FjdunXLa5kx5q7bFhUVfe3+7vZal8ulsrKye6oLAJoDZigBAABghUAJAAAAKwRKAAAAWCFQAgAAwAqBEgAAAFYIlAAAALDi97cN4hYbAACgpfP3POS3gTI6Olput1uZmZlOlwIAAOA4t9ut6Ohop8u4K5f5sjv3+oHy8nJVVlY6XQaAFmzOnDmSpBUrVjhaBwBER0crPj7e6TLuym9nKCUpPj7eb08cgJYhMjJSkpScnOxsIQDgx/hSDgAAAKwQKAEAAGCFQAkAAAArBEoAAABYIVACAADACoESAAAAVgiUAAAAsOLX96EEAH+Xnp6upKQkhYWFKScnR6GhoZo9e7YWL17sdGkA4DPMUAKApdWrVys8PFy7d+9Wdna2lixZom3btjldFgD4DIESACwlJSVp0aJF6tGjh6ZOnaqUlBRt377d6bIAwGcIlABgKSkpyet5XFycKioqHKoGAHyPQAkAlkJCQryeu1wu1dTUOFQNAPgegRIAAABWCJQAAACwQqAEAACAFe5DCQAWioqK6iwrKCjweR0A4CRmKAEAAGCFQAkAAAArBEoAAABYIVACAADACoESAAAAVgiUAAAAsEKgBAAAgBUCJQAAAKwQKAEAAGCFQAkAAAArBEoAAABYIVACAADACoESAAAAVgiUAAAAsEKgBAAAgBUCJQAAAKwQKAEAAGCFQAkAAAArBEoAAABYIVACAADACoESAAAAVlzGGON0EQDgrz7//HNJUseOHR2uBAD8F4ESAAAAVrjkDQAAACsESgAAAFghUAIAAMAKgRIAAABWCJQAAACwQqAEAACAFQIlAAAArBAoAQAAYIVACQAAACsESgAAAFghUAIAAMAKgRIAAABWCJQAAACwQqAEAACAFQIlAAAArBAoAQAAYIVACQAAACsESgAAAFghUAIAAMAKgRIAAABW/g983W7gjxwEUQAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import warnings\n", "warnings.filterwarnings('ignore')\n", "\n", "from lambeq import AtomicType, Reader\n", "from lambeq.backend.grammar import Box, Id, Word\n", "\n", "N = AtomicType.NOUN\n", "\n", "class CombReader(Reader):\n", " def sentence2diagram(self, sentence):\n", " words = Id().tensor(*[Word(w, N) for w in sentence.split()])\n", " layer = Box('LAYER', words.cod, N)\n", " return words >> layer\n", "\n", "diagram = CombReader().sentence2diagram('John gave Mary a flower')\n", "diagram.draw()" ] }, { "cell_type": "raw", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "Note that, in the above code, the method :py:meth:`~lambeq.backend.grammar.Diagram.tensor` refers to the monoidal product and not to a physical tensor object. What the specific line does, using the monoidal identity :py:obj:`Id()` as a starting point, is to tensor one-by-one the boxes of the words in the sentence accumulatively, from left to right, into a single diagram, as in a standard fold operation. " ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "Id().tensor(*[Word(w, N) for w in ['John', 'gave', 'Mary', 'a', 'flower']]).draw(figsize=(5,1))" ] }, { "cell_type": "raw", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "This diagram is then combined with the ``layer`` box to create the final output of the :term:`reader`.\n", "\n", ".. note::\n", "\n", " In an actual implementation, the ``layer`` box should be shared among all sentences so it can be trained properly." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Creating rewrite rules" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "from lambeq import BobcatParser\n", "\n", "parser = BobcatParser(verbose='text')\n", "d = parser.sentence2diagram('The food is fresh')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### SimpleRewriteRule example: Negation functor" ] }, { "cell_type": "raw", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "The :py:class:`.SimpleRewriteRule` class contains functionality that facilitates the creation of simple :term:`rewrite rules `, without the need to define a new :py:class:`.RewriteRule` class from scratch. A :py:class:`.SimpleRewriteRule` finds words with codomain ``cod`` and name in list ``words``, then replaces their boxes with the diagram in ``template``. \n", "\n", "Here is an example of a negation :term:`functor` using :py:class:`.SimpleRewriteRule`. The functor adds a \"NOT\" box to the wire of certain auxiliary verbs:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "from lambeq import AtomicType, SimpleRewriteRule\n", "\n", "N = AtomicType.NOUN\n", "S = AtomicType.SENTENCE\n", "adj = N @ N.l\n", "\n", "NOT = Box('NOT', S, S)\n", "\n", "negation_rewrite = SimpleRewriteRule(\n", " cod=N.r @ S @ S.l @ N,\n", " template=SimpleRewriteRule.placeholder(N.r @ S @ S.l @ N) >> Id(N.r) @ NOT @ Id(S.l @ N),\n", " words=['is', 'was', 'has', 'have'])" ] }, { "cell_type": "raw", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ ".. note::\n", "\n", " The placeholder ``SimpleRewriteRule.placeholder(t)`` in the template above will be replaced by a box with the same name as the original box and type ``t``.\n", "\n", "A list of :py:class:`.RewriteRule`\\ s can be passed to :py:class:`.Rewriter` to create a rewriting :term:`functor`. If no list is provided, then the default rewriting rules are used (see `Diagram Rewriting <./rewrite.ipynb>`_)." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "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NEkDBw5UWFiYhg4dKgcHB+3atUt79+61OgEbys7Dw0NPPPGEJkyYID8/P4WFhWnGjBlKS0vTqFGjJElPPvmkZs+eraefflpjx47VgQMHNHnyZD377LNycHCQp6enRo0apQkTJqhevXoKCAjQyy+/TIhfiVauXKmjR4+qW7du8vX11apVq5Sbm8thQKrQU089pXnz5mn48OGWswsfPnxYX331lT7++GPFxcVp7dq16tOnjwICArRlyxZduHBBkZGRRpcOVDsjRoxQw4YN9frrrxtdCmC3WE+q3pYtW+jr7UxJbbJs2TK9+OKL+u9//2t0mYDdo0+pevQplY/AuAbr27evVq5cqalTp2r69OlydnZWixYtNHr0aKNLq9beeOMN5ebm6uGHH9bVq1fVsWNH/fDDD/L19ZUkNWzYUKtWrdKECRPUtm1b+fn5adSoUXrllVcs83jzzTctf9H38vLS+PHjdeXKFaMWqcarW7euli5dqilTpig9PV0RERH68ssv1apVK6NLqzWCg4O1ceNGvfDCC+rTp48yMjIUHh6ufv36ycHBQd7e3lq/fr1mz56tlJQUhYeHa+bMmZaTSwIou4SEBH6EBErBelL16OvtT0ltsnDhQh04cMDoEoFqgT6l6tGnVD6TueD/5lHIlStXVLduXX3zzTcaNmyY0eVUS0lJSapfv76WL1+ue++91ybzbNWqlfr27at//vOfNplfbRQREaEhQ4Zo+vTpNpnf6NGjtXfvXv3+++82mV9t9Mgjj+jYsWNav369TeY3f/58jR49Wrm5uVYnYUTZffDBBxo7dqyys7ONLqVSLVq0SDExMcrMzCx0fDYY49ChQ2rWrJl+/fVXdevWzehykMff31/PPfecJk6caHQpyHPPPffIwcFBK1asMLoU5Hn99dc1a9YsTtBlR9atW6e77rpLhw4dUtOmTY0uB5IyMzNVp04dffLJJ3r44YeNLgd5OnTooE6dOun99983uhTkefrpp7Vhwwbt3LnT6FJqHX4CAQAAAAAAAABIIjAGAAAAAAAAAOQhMAYAAAAAAAAASOKkd6VydHSUk5OTHnroIcXExBhdTrWUf5hsV1dXm83T1dVV77zzjj788EObzbO2SUtLs3mb/Oc//5GHh4fN5lnbZGRkqEePHjabX377enh4cAzjCsrKyrLpegKUlaOjo9q1a1fjj59d3TRr1kx169Y1ugzA5hISEpSUlGSTeeXm5qp169bavn27TeYn/XH88LCwMJvND7AH0dHRys3NNboMFBAcHKyAgACjywDsAoFxKTw9PfXjjz9q9+7dlf5caWlpeumll/Too4+qbdu2VfJcI0eOVJs2bSr1uSTJz89Pffr0sdn8Pv/8c/3www82m5+tbd++XZ988ommT5+uOnXqGF1OkRwdHTVy5Eibze/VV19VREREhaf/7bfftHTp0gqfyPD48eOaPXu2XnjhBQUFBZV7+uzsbD333HN68MEHdeutt1aohjfeeEPNmjXTkCFDKjS9JJudGFKShg8frvT0dKWmptpsnsXZvHmzvv76a82ePbvSn2vTpk1avHixZs2aVenPJUmdOnWqkucBCgoMDNTOnTt16NAhm/6QhIo7f/68Nm/erLFjxxpdCmBTCQkJioyMVFpamk3n26FDB5vNy93dXfHx8YTGqDFcXFx08uRJHThwwOhSkCcjI0MbNmxQly5djC4FsAsmc/7unzDc5cuX5efnpyVLlui+++6r1Oe6dOmS6tWrp6VLl2rw4MGV+ly10VdffaXhw4crNTWVPW7LaO7cuRo3bpwyMzMrNP3vv/+uzp07a8+ePWrdunW5p88/U/GiRYs0YsSICtUQFRWlnj17Vkloam8+/vhjjRkzRlXRpXz00Ud64oknlJOTU+nPVVssWrRIMTExyszMlLOzs9HlIM/dd9+tHTt2aPfu3apfv77R5dRqZrNZf/nLX7RmzRrt37+/Qj9MonLcc889cnBw0IoVK4wupdravn27OnTooM8++0yRkZFGl1NIfHy8HnroIW3btk3R0dFGl1MtrVu3TnfddZcOHTqkpk2bGl0O8jzxxBP65JNPtGPHDjVr1szocmq9CRMm6O2339a2bdsUFRVldDnI8/TTT2vDhg3auXOn0aXUOuxhDAAAYIfmz5+vNm3a6JFHHtE333wjT09Po0uqlcxms9555x0tXrxYixcvJixGjRUZGUkgC1Sht956Sz///LOGDx+uH374Qf7+/kaXVGstXbpUb731lt58803CYiAPJ70DAACwQ0FBQVq0aJF++eUXRUZGasmSJVWyFz/+T3x8vHr16qVx48Zp7NixGjp0qNElAQBqCA8PD33xxRc6evSomjdvrg8//JB/0FWxkydPatiwYbrvvvv05z//Wc8++6zRJQF2g8AYAADATt19993av3+/oqOjNWzYMPXu3VtLly7V9evXjS6txjKbzdqyZYvGjh2rNm3aKCEhQatWrdKcOXOMLg0AUMN06NBBBw4c0L333qvHH39ct912mz799FNduXLF6NJqLLPZrD179uill15SixYt9Ntvv+mzzz7T8uXL5eBARAbkY23ATYuJidGgQYOMLgMwXGpqqt5++20lJycbXQqAGuSWW27RihUrtHLlSl28eFH33Xef6tevrwceeEDffvutzU9UVRvlh8Tjx49Xo0aNdPvtt2vx4sWaMmWK9uzZo/79+xtdImCYmJgYmUwmvfHGG1bjly9fLpPJZLmdk5OjWbNmKSoqSq6urvL19VX//v21ceNGy2O6d+8uk8lU7NC9e/eqWizAbgQEBGjBggXauHGj3N3dNWLECAUEBOjPf/4z4bGN5IfEkyZNUmRkpNq0aaO5c+fq8ccf14EDB/Tggw9afZ4B4BjGAAAA1cKAAQM0YMAAHTx40HI83aFDh8rZ2VlRUVHq0KGDOnbsqA4dOqh169aqU6eO0SXbJbPZrKNHj2rbtm3atm2b4uLitH37diUnJysgIED33Xef7r//ft15551ydHQ0ulzALri6umr69Ol67LHH5OvrW+h+s9msBx54QD/99JPefPNN9ezZUykpKXrvvffUvXt3LV68WIMGDdLSpUstJzg+efKkOnXqpJ9++kmtWrWSJLm4uFTpcgH2pEuXLlq/fr1Onjypb7/9Vt98841GjBghBwcHtWzZUh06dLD09W3btpW7u7vRJdsls9msU6dOWfXz27Zt04ULF+Tj46NBgwZp5syZ6t27N585QAkIjAHUeJmZmXwZqMZoP8Bas2bN9PLLL+vll1/WwYMH9eOPP2rbtm36/ffftWDBAuXk5MjZ2VmtW7dW06ZNFRYWpvDwcIWHh1uu161bt0bvSZOenq6EhASdOHHCcnnixAkdP35cu3fvtvwTJDQ0VB06dND48eN1xx13EBIDxejVq5cOHz6s119/XTNmzCh0/zfffKMlS5bou+++0z333GMZ/9FHH+nixYsaPXq0evfuLT8/P8t96enpkqR69eqpQYMGlb8QQDURGhqqcePGady4cTp58qRWr15tCT6//PJLZWZmWkLkiIgIq/49/7q/v3+N7uczMzN16tQpS/9esK/fs2ePzp8/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tZzJZNKjjz6qu+66S6NHj9awYcPk7Oys1NRU7d+/Xy1btiw0TUJCQoWDoZpkz549WrBggT799FNdvHhRffv21bx58yx7maLqJCQkFLvXire3t9avX6/Zs2crJSVF4eHhmjlzpvr371+meZc0/cKFC3XgwIFC03z11VcaO3as7r//fnXp0qXUMxBXN/v379fLL7+s5cuX69Zbb9X//u//qn79+hWen60+U262rQEAQGELFy4sNK5Ro0bKyMiwGufk5KTnnnuuyBPiFaVRo0Y1+od1AACqMwLjamLdunWFxi1fvtxm82/UqJF++ukn7d271xKCtmrVSq1bt1bXrl1133336Y477pDZbC5US1FfImsas9mso0ePauPGjdq4caN+++037d+/XwEBAXr00Uf16KOPFhmuF6Wy27ImKu01W7dunX7//XetWrVKkvV7MjIyUqtXr67wc5c0fUxMjNUJX7p3727Z8Fm8eLF++uknTZw4UTt37pSzs7MmT56sfv36qVOnTtWqzc1ms/bt26fVq1fr+++/17p16xQWFqZPP/1Uw4cPl6OjY4nTl6X9CqroZ8rNtjUAAAAAACAwxg1at26tf/7zn3rjjTe0cuVKrV69WuvXr9eHH34oSQoKClLnzp3VokULNW3aVE2aNFHTpk0VFBQkk8lkcPU3Lzc3V2fOnNGRI0d05MgRHT58WP/973+1adMmnTt3TpLUqlUr3XHHHZo2bZoGDBhQ6GRegPTH3vu9e/dWz549tWzZMn3zzTd65513NHXqVPn6+qp3797q16+funfvrpCQELt6H+Xk5OjcuXPatGmTVq9erdWrV+v06dNyc3PTXXfdpQ8++ECPPPKIXFxcjC4VAAAAAADYGIExiuTi4qIhQ4ZoyJAhkqSLFy9q8+bN2rhxo7Zs2aJPPvlEp06dsjzezc1NjRs31i233CI/Pz/5+vqqbt26JV56eHhUashsNpuVmpqq5ORkXb58ucTLixcv6tixYzp69KjS09Ml/RH4hYSEKCIiQiNHjtQdd9yhzp07y9fXt9JqRs3j4OCg++67T/fdd5+ys7O1detWSwg7atQomc1mmUwmBQYGqmHDhmrYsKFCQkIs1wve9vLyuul6rl+/rtOnT1uGU6dOFbqdmJionJwcSVLLli31l7/8Rf369dOdd94pV1fXm64BAAAAAADYLwJjlEm9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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from lambeq import Rewriter\n", "from lambeq.backend import draw_equation\n", "\n", "not_d = Rewriter([negation_rewrite])(d)\n", "draw_equation(d, not_d, symbol='->', figsize=(14, 4))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### RewriteRule example: \"Past\" functor" ] }, { "cell_type": "raw", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "Sometimes, a :term:`rewrite rule` may become too complicated to be implemented using the :py:class:`.SimpleRewriteRule` class, so the more general :py:class:`.RewriteRule` class should be used instead. A concrete subclass of a :py:class:`.RewriteRule` should implement the methods :py:meth:`~.RewriteRule.matches` and :py:meth:`~.RewriteRule.rewrite`.\n", "\n", "A rewriter uses the :py:meth:`~.RewriteRule.matches` methods of its :py:class:`.RewriteRule`\\ s to detect if a rule can be applied. If there is a match, then the matching box is replaced with the result of ``rewrite(box)``. \n", "\n", "In the following example, a :term:`functor` that changes the tense of certain auxiliary verbs is implemented by directly subclassing :py:class:`.RewriteRule`:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "from lambeq import RewriteRule\n", "\n", "class PastRewriteRule(RewriteRule):\n", " mapping = {\n", " 'is': 'was',\n", " 'are': 'were',\n", " 'has': 'had'\n", " }\n", " def matches(self, box):\n", " return box.name in self.mapping\n", " \n", " def rewrite(self, box):\n", " new_name = self.mapping[box.name]\n", " return type(box)(name=new_name, cod=box.cod)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "image/png": "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nDjR9FxlZaVZYqybLM+ePYvdu3cjNzfX4q2Chg0bhgMHDjT5upubG8LCwkwJffjw4Y0m+rY8akrkKGQymem7MHnyZLPXamtrUVJS0mRBZ3x8/vx5HDp0qMmCtCkjRozA/v37WxynsVA05q6YmJgmd9wai1xHPMpKriM0NBSPPvooHn30UQD/d/SwftFnHI4cOYJvv/222auqN9fn8/DwgFarNeWw3r17NzgTSKvV8vRuF8Tish1xc3NDYGAgAgMDERUV1aJxDAYDysrKoNPpmtxjaxwEQQAAsz2+Te0J9vPzY6FITsHHxwdRUVEWvzN6vR6lpaUN9t4a/xoMBshkMrMjm3WPavr7+0MuZ3PsSG7cuAFfX18EBgZKHQpZIJfLERIS0uQVqRtTW1uL8vJyi/nMONSdT3ODSqVioUgOTyaTwd/fH/7+/oiJiWnyfTU1NSgvL2/0qKROp4MgCHB3d2/yyKa/vz9/ptFOsTdDFrm5uSEgIEDqMIgcmru7O9RqtdRhkIh2796NZ555BsnJyUhJSUFCQgJPvXcRcrmcOw2ImqFQKHgxRLIKdykQERHVM3bsWDz77LPYu3cvRo4cie7du2PlypXIzs6WOjQiIiKHxeKSiIioHq1WizVr1uD333/H1q1bERcXh2XLliEiIgKJiYlIS0uDTqeTOkwiIiKHwuKSiIioCXK5HA888ADS0tJw48YNrF69GteuXUNycjI6duyIBQsWsMgkIiL6XywuiYio3aqpqUFeXp7Z0NSVf0NDQzF//nwcPnwYKSkpKCgowNtvv93gsv5ERETtFS/oQ0RE7dbhw4dx7733mj135coVREZGmj0nCAIyMjLw6aefYvPmzbhz5w5GjRqFlJQUqFSqNoyYiIjIcbG4JCKidqt3797YtWuX2XN1b15/9epVbNy4ERs2bMDVq1fRsWNHzJ8/H0899VSDApSIiKi9Y3FJRETtVmBgIEaPHt3g+dOnT+P555/H3r17IZfLMXHiRHzwwQcYN24c72VIRETUBBaXRERE9Rw9etR0AZ8nnngCoaGhUodERETk8FhcEhER1TN16lTMmDFD6jCIiIicCq8WS0REVI+vr6/UIRARETkdFpdERERERERkMxaXREREREREZDMWl0RERERERGQzFpdERERERERkMxaXREREREREZDMWl0RERERERGQzFpdERERE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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "past_d = Rewriter([PastRewriteRule()])(d)\n", "draw_equation(d, past_d, symbol='->', figsize=(9, 2))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Creating ansätze" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "d = parser.sentence2diagram('We will go')" ] }, { "cell_type": "raw", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ ":term:`Ansätze ` for the quantum pipeline are implemented by extending the :py:class:`.CircuitAnsatz` class, while ansätze for the classical pipeline need to extend the :py:class:`.TensorAnsatz` class. Both classes extend :py:class:`.BaseAnsatz`, sharing a common interface. Once an :term:`ansatz ` is instantiated, it can be used as a :term:`functor` to convert diagrams to either a :term:`circuit ` or a tensor diagram.\n", "\n", "An :term:`ansatz ` should be initialised with an ``ob_map`` argument, a dictionary which maps a rigid type to the number of :term:`qubits ` in the quantum case, or to a dimension size (e.g. ``Dim(2, 2)``) for the classical case. Some :term:`ansätze ` may require additional arguments (see the `API documentation <../root-api.rst>`_ for more details).\n", "\n", "In ``lambeq``, a :term:`functor` is defined by specifying the mappings for objects ``ob`` and arrows ``ar``. The :py:class:`.CircuitAnsatz` and :py:class:`.TensorAnsatz` classes already implement methods which extend ``ob_map`` to map not just base (atomic) types, but also compound types, into :term:`qubits ` and dimensions respectively. Therefore, to complete a new :term:`ansatz ` class, you only need to provide the mapping from rigid boxes to diagrams. This typically involves the following steps:\n", "\n", "1. Obtain the label of the box using the ``_summarise_box`` method. This provides a unique token which can be used to parameterise the box.\n", "2. Apply the :term:`functor` to the domain and the codomain of the box.\n", "3. Construct and return an :term:`ansatz ` with new domain and codomain -- see how to construct diagrams using the low-level ``lambeq`` backend `here <./discocat.ipynb>`_." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### CircuitAnsatz example: \"Real-valued\" ansatz" ] }, { "cell_type": "raw", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "This :term:`ansatz ` always returns a tensor with real-valued entries, since the ansatz is constructed using only the CNOT and Y rotation gates, which both implement real-valued unitaries.\n", "The :py:class:`.CircuitAnsatz` provides functionality to add postselections or discards to ensure that domains and codomains for the boxes match. To extend the :py:class:`.CircuitAnsatz` to create a new ansatz thus only involves providing a function to generate the circuit within a box." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "from lambeq.backend.quantum import CX, Id, Ry\n", "\n", "from lambeq import CircuitAnsatz\n", " \n", "def real_ansatz_circuit(n_qubits, params):\n", "\n", " circuit = Id(n_qubits)\n", " n_layers = params.shape[0] - 1\n", "\n", " for i in range(n_layers):\n", " syms = params[i]\n", "\n", " # adds a layer of Y rotations\n", " circuit >>= Id().tensor(*[Ry(sym) for sym in syms])\n", "\n", " # adds a ladder of CNOTs\n", " for j in range(n_qubits - 1):\n", " circuit >>= Id(j) @ CX @ Id(n_qubits - j - 2)\n", "\n", " # adds a final layer of Y rotations\n", " circuit >>= Id().tensor(*[Ry(sym) for sym in params[-1]])\n", "\n", " return circuit\n", "\n", "\n", "class RealAnsatz(CircuitAnsatz):\n", " def __init__(self, ob_map, n_layers, n_single_qubit_params = 1, discard = False):\n", "\n", " super().__init__(ob_map,\n", " n_layers,\n", " n_single_qubit_params,\n", " real_ansatz_circuit,\n", " discard,\n", " [Ry, ])\n", "\n", " def params_shape(self, n_qubits):\n", " return (self.n_layers + 1, n_qubits)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABMQAAAP7CAYAAAC0u1IMAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/SrBM8AAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdeVxUZfs/8M/AALIJIiAuuOSKCqK4JG5AalaCT4+ZS+6mX81MM00L10rF1NQe1NxSn0eTytzKSlzATNMMRVFBzX0hFTcEFAbm+v3hj5FRdmbmAPN5v168ZM5yn+uM19znnouzqEREQEREREREREREZCYslA6AiIiIiIiIiIjIlFgQIyIiIiIiIiIis8KCGBERERERERERmRUWxIiIiIiIiIiIyKywIEZERERERERERGaFBTEiIiIiIiIiIjIrLIgREREREREREZFZYUGMiIiIiIiIiIjMCgtiRERERERERERkVlgQIyIiIiIiIiIis8KCGBERERERERERmRUWxIiIiIiIiIiIyKywIEZERERERERERGaFBTEiIiIiIiIiIjIrLIgREREREREREZFZYUGMiIiIiIiIiIjMCgtiRERERERERERkVlgQIyIiIiIiIiIis8KCGBERERERERERmRUWxIiIiIiIiIiIyKywIEZERERERERERGaFBTEiIiIiIiIiIjIrLIgREREREREREZFZYUGMiIiIiIiIiIjMCgtiRERERERERERkVlgQIyIiIiIiIiIis8KCGBERERERERERmRUWxIiIiIiIiIiIyKywIEZERERERERERGaFBTEiIiIiIiIiIjIrLIgREREREREREZFZYUGMiIiIiIiIiIjMCgtiRERERERERERkVlgQIyIiIiIiIiIis8KCGBERERERERERmRUWxIiIiIiIiIiIyKywIEZERERERERERGaFBTEiIiIiIiIiIjIrLIgREREREREREZFZYUGMiIiIiIiIiIjMCgtiRERERERERERkVlgQIyIiIiIiIiIis8KCGBERERERERERmRUWxIiIiIiIiIiIyKywIEZERERERERERGaFBTEiIiIiIiIiIjIrLIgREREREREREZFZYUGMiIiIiIiIiIjMCgtiRERERERERERkVlgQIyIiIiIiIiIis8KCGBERERERERERmRUWxIiIiIiIiIiIyKywIEZERERERERERGaFBTEiIiIiIiIiIjIrLIgREREREREREZFZYUGMiIiIiIiIiIjMCgtiRERERERERERkVlgQIyIiIiIiIiIis8KCGBERERERERERmRUWxIiIiIiIiIiIyKywIEZERERERERERGaFBTEiIiIiIiIiIjIrLIgREREREREREZFZYUGMiIiIiIiIiIjMCgtiRERERERERERkVlgQIyIiIiIiIiIis8KCGBERERERERERmRUWxIiIiIiIiIiIyKywIEZERERERERERGaFBTEiIiIiIiIiIjIrLIgREREREREREZFZYUGMiIiIiIiIiIjMCgtiRERERERERERkVlgQIyIiIiIiIiIis8KCGBERERERERERmRUWxIiIiIiIiIiIyKywIEZERERERERERGaFBTEiIiIiIiIiIjIrLIgREREREREREZFZYUGMiIiIiIiIiIjMCgtiRERERERERERkVlgQIyIiIiIiIiIis8KCGBERERERERERmRUWxIiIiIiIiIiIyKywIEZERERERERERGaFBTEiIiIiIiIiIjIrLIgREREREREREZFZYUGMiIiIiIiIiIjMCgtiRERERERERERkVlgQIyIiIiIiIiIis8KCmAlkZWXh3LlzyMzMVDoUIlJYSkoKLl++rHQYpLB79+7hxo0bSodBCrt16xZu3bqldBiksOvXr+PevXtKh0FEChMR/P3330hPT1c6FFJQZmYmzp07B61Wq3QoZoEFMSMTEYwaNQoNGjTA0KFDmdhEZuzBgwfo1KkTateuja+//lrpcEghV65cga+vL+rUqYPIyEilwyGFxMbGokGDBmjYsCFiY2OVDocUsnPnTtSpUwe+vr64evWq0uEQkYKmTZuG+vXr49///jcyMjKUDocUoNVqMXToUDRo0ADvvPMORETpkMo9FsSMSEQwYcIErFy5Em+//TbWr1+Pd999l4lNZIZSU1Px2muv4eLFi3jzzTcxfPhwfPfdd0qHRSb2zz//oHPnzrCwsEBgYCD+9a9/Yf/+/UqHRSaWkJCArl27on79+qhbty66du2KhIQEpcMiE/vtt9/w+uuvIygoCBYWFujcuTNu3rypdFhEpIDPP/8cn332GYYMGYLdu3ejf//+vLrIzIgIRo8ejfXr1+Ptt9/G8uXLMXHiRNYOjE3IaKZPny4AJDw8XEREVq9eLQBk4sSJ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vn17+Pn56eYvWLAAnp6e6NChA/r164cJEybkmoBhYWEICwtDs2bN8Pvvv2P79u1wdXXNdZv+/v4YOXIkevfuDTc3N3z++edG2z8iKjz2BwQwD+gJ5gEBzAMieor9ATEHDEslz15gSgYXFxcHHx8fHDp0SO8GePkJCAiAr68vFi1aZNzgiMikFi9ejNDQUKSkpBR6HfYH5c/YsWOxd+9exMXFFXod5kH5ExISAgDYvn17oddhHpQ/3t7eCAoKwuLFiwu9DvOAqPy5desWqlSpgm3btumOD4XB/qB8OXz4MF588UWcOHEC3t7ehVqHOVB8PEOMiIiIiIiIiIjMCgtiRERERERERERkVnhT/VIqOjpa6RCIqJRgf0AA84CeYB4QwDwgoqfYHxBzoPh4hhgREREREREREZkVFsSIiIiIiIiIiMissCBGRERERERERERmhQUxIiIiIiIiIiIyKyyIERERERERERGRWeFTJgFcuXIFSUlJRmv/77//hlqtxpkzZ2BlZWW07QCAq6sratasadRtEJVXxu4LAOD69etQqVQ4evSoUbcDsD8oLlPkQVJSEjIyMpgHpZgp8iAlJQUAmAelmCnyICMjA0lJScwDolLO2P3B3bt3oVarceHCBfYHpZix8+DMmTNQq9WIj4+HRqMx2nYA5gAAqERElA5CSVeuXIGXlxfS0tKUDsUg7OzsEB8fb/aJTVRU5a0vANgfFAfzgADmAT3BPCCibOwPCCh/ecAc4BliSEpKQlpaGtavXw8vLy+lwymR+Ph49O/fH0lJSWad1ETFUZ76AoD9QXExDwhgHtATzAMiysb+gIDylQfMgSfMviCWzcvLCy1atFA6DCJSGPsCApgH9ATzgADmARE9xf6AAOZBecKb6hMRERERERERkVlhQYyIiIiIiIiIiMwKC2JERERERERERGRWWBAjIiIiIiIiIiKzwoIYERERERERERGZFRbE/r8ePXrg4MGDSoehiKSkJLi7u+PatWtKh0LlVEZGBurVq1fsz1hAQADGjRune127dm0sWrRI91qlUmHr1q0lC5IAPP/eGpIh82Dy5MmoWLEi88BIykoefPXVV7Czs2MeGElZyQP2B8ZlzDwwpMmTJ2PMmDFKh0FlQEn7Hyq80vw9k3lgOhkZGahduzb++usvpUN5TpkviA0ePBgqlQoqlQpWVlaoU6cO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4cOhUqnK1O7x48dITExU+2u3kZERevToUabbXH7//Xf06dMHr7/+On744QfI5fIKrwNRRZ05cwbHjh2DXC7HyJEjkZqaihMnTkjzT548KV35CjzZBzZr1kzt6p5u3bpBoVBIn+Pj42FnZydNO3HiBPLz8yt8i2VlBAcHY9q0adi2bRsAYPbs2SgoKHhum3nz5qFfv35ISUnByJEjkZWVhZCQEERGRqJZs2aIjIxE69atUa9ePcyZMwc9e/ZEWloatm3bhgULFkjPlxw/fjzy8vLw888/IyUlBYsXL4aVlRUAVLrPDRs2AAAmTpwo9VkWEydORLt27eDo6Ihz586hW7dueOWVV7B3715kZGTg4cOHuH//PpKSkhAXFwcAOHv2LAAgKSkJ06ZNw5QpU1CzZk2MHj1a2pZlzQEHB4cS48rLy0OzZs3UprVt27bYvvS1117Db7/9hry8vDKvc1EOnDp1Cs7OzgBQLXLg559/xvfffw8AsLCwKPP2mDhxIhYsWAB/f38pB+zt7fHuu+9iypQpWLJkCdatW4dz585JOVDStmzWrBmGDBnywm2paTyXIiKi52FBTMt2794NKysrta8333xT32GRBjRq1Ah9+vTBN998I0373//+h8GDB0ufr1y5gnr16j23n//97384ceKE9AtkkaJ2V65c0WDUpAlvvvkmtm3bhu+//x5jx44t0/NTsrKyoFKpUKdOHbXpderUwd9///3ctmfOnEGvXr3QqlUrREdHw9zcvFLxE5VH0XGsRo0acHNzQ2ZmJqZPn4769eujV69eCA8Pl5YNDw9Ht27d0KhRIwAl7wN9fHxw7tw53Lp1C9nZ2Th37hwmTZokFUMUCgXat29frl/aNWXatGno06cPXFxcADx5TtGff/753DZDhw5FUFAQGjVqBGdnZ0RGRsLX1xdubm64ePEihgwZgnHjxmHv3r34+++/ERcXB5VKhebNm6NVq1Y4evQogCe32Hfq1Alubm5o1KgR+vbti65duwJApfts2rQpAKBr165Sny9y4cIFpKeno2nTpti9ezdat26No0eP4u7du8jLy0NmZibMzc3Rq1cvODo6Srcr/vDDDwCeFBP79OmD3NxctGzZEleuXJG2ZVlzwMTEpMTYVCpVsdtobWxscP/+fTx8+FCaVq9ePTx+/PiF+9inFeVAs2bNMHbsWADAtWvX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8lyKiIieS78vudS/xMTEF75Su6JKe1V0XFycACCys7M1Op4216U608R2mzhxovjtt9+KTc/Pzxf16tUT+/fvl6YNHz5cACj21a1bN7W2zZs3F9u2bSt3LMwD/SgsLBT/+te/BAARERFR6nL/+c9/hLOzs5DL5eK1114TCQkJavPv3r0rPD09hb29vUhNTdV22KQnn3zyiWjdurW+w3ih0o5jixYtEvb29kKpVAohhOjSpYto1apViX28++67YubMmWrTVCqVeOWVV0SHDh2kaSdPnhQAii3brVs3MWnSJOmzi4uLWLFihfQZgIiMjCzfij3j8uXLAoA4efKkEOKf/SgAERcXp7ZM0efnjT1u3DjxxhtviJycHCGEELm5ueLmzZtCCCFu3rwp8vLyirWZMGGCaNy4sTAzMxP29vbi/fffF1lZWRrpUy6XCwCiT58+an0CEOHh4dLnZ7ft999/LywsLETPnj2FEEIUFBSI69evi8LCQhESEiLs7OyK5cCz21IIIfr161ds2z0vB2rVqlXicfLpOMePHy88PDykdZs4caLauj98+FBYW1uLX3/9tdh2KUlJcSsUCgFArF+/Xm2ZlzEHzMzMxCuvvCIAiEOHDqnF/6IccHJyEpcvXxZCqOdAdna2ePDgQZm2ZXZ2drFt9zwuLi7PzYGi2J/9cnFxUVumoudSRPpw8+ZNAUBERUXpOxTSo4SEBAFAJCcn6zsUg8CCWDUqHlSnddElbW+3sLAw8cYbb5Srzd69e4Wrq6vIz88v93jMA/0pLCwUY8aMEUZGRuKHH34od3ulUik6d+4sbGxs1H6RoOrnZSmIlUVhYaFo3LixWL58eYnzT58+LRwcHEr8xbmqqux+NC8vTwQEBAhXV1exbds2cffuXSHEk6LApk2bRKtWrcS1a9d01mdl1mfBggWidu3aYtmyZVL/jx49EjExMaJz585i586dVTIH1qxZIxXyKqoy262q5UBl1qcsOVAVVeZcikgfWBAjIVgQ0zXeMkmkZR999BG6du1a7AHAz5OTk4Pw8PBSXzlPVZNMJsPatWsxePBgDB06FHv37i1z27y8PPTr1w8nT57Evn374OHhob1AiTTk1q1bCAsLw99//13s1t8i7u7uWLx4MS5fvqzj6PRHLpdj165d+PTTT7F48WLY2NjAzMwM9vb22LJlC7766ivUr19f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b0dcXBz8/PxYFCPSMBbEnmPGjBmYM2cOPv30U6xdu7bC/axevRoNGjRAjRo10KFDB/z222/l7iM8PBwTJ07E1KlTMXfu3ArHQkRERET6I4RAaGgoXFxcsHDhQuTl5SEnJwepqalYuHAhXFxcEBoaWiUf20FEmvHee+8hLS0NCoUCgwYNgrGxcYnLGRsbY9CgQVAoFEhLS+Pjcog0jAWxF/j3v/+NSZMm4eOPP8a3335b7vbff/89pkyZgrlz5yIpKQlt2rRBr169kJmZWeY+fvjhB4wePRofffQRli5dCplMVu44iIiIiEj/Fi9ejFmzZqGwsLDYW81VKhUKCwsxa9YsLF68WE8REpE2/f7774iOjsaGDRvQrl27MrVp164dvv76a0RFRfGZYkQaxILYC8hkMqxYsQKjRo3CiBEj8OOPP5ar/ZdffokxY8YgKCgILVu2xLp162BhYYFvvvmmTO337NmDoUOHYsiQIVizZg2LYUREREQvqevXryM4OLhMywYHB/P2SaJqaO3atXB2dsaAAQPK1W7AgAFwcnKq1J1LRKSOBbEykMlkWL9+Pd59910MGTIE+/btK1O7x48fIzExET169JCmGRkZoUePHvj1119f2P7w4cPo378//P39ERERASMj/riIiIiIXlZff/11mf+4KZPJsGHDBi1HRES6dP/+fWzduhVBQUF49OgRcnJypK/c3FxpuaenF33l5eUhKCgI3333He7fv6/HtSCqPkz0HcDLwtjYGP/973+Rm5uLd955B/v370e3bt2e2yYrKwsqlQp16tRRm16nTh2kpaU9t+2vv/6KgIAA+Pj4YNu2bTAx4Y+KiIiI6GW2Y8eOYrdJlkalUmHhwoUsihFVIwUFBcjLy8P8+fMxf/78Upd79vfHZ6Wnp8Pd3V3T4REZHFZZysHU1BTff/89+vbti759++LQoUN47bXXND7OyZMn8eabb6Jdu3bYuXMnzMzMND4GEREREenWvXv3yrW8ubk5xo4dq6VoiEjXrl69ik2bNlW6nwcPHmggGiJiQaycatSogaioKPTq1Qu9e/eGQqEotTpvZ2cHY2Nj3Lx5U236zZs34ejoWGKb1NRUvPHGG2jatCl2794NCwsLja8DEREREemetbU1bty4UeblnZyc+vuzNgAAQxNJREFUEBISosWIiEiXTp8+jU2bNiEuLg7t27dXm5eeno7WrVsDePL7oqWlZbH2J06cgK+vL2rWrKmTeImqOz6UqgIsLS2xZ88eNGzYED179sT58+dLXE4ul8PT0xOHDh2SphUWFuLQoUPo2LFjseUvXbqEHj16wNHREfv370etWrW0tg5EREREpFsDBgyAsbFxmZY1NjYu90O3iahqa9iwIczNzXHs2DFYWlqqfT19IcSz84q+jh49CnNzczRo0EB/K0FUjbAgVkHW1taIiYmBnZ0devTogfT09BKXmzJlCjZs2IDNmzcjNTUV48aNQ05ODoKCgtSWu379Orp37w5LS0scOHAAtWvX1sFaEBEREZGufPjhhxBClGlZIQTGjBmj5YiISJdq1aqFIUOGYN26dWV+nmCRgoICrF+/HkOHDuWFE0QawoJYJdjZ2eHAgQMwMzND9+7dS7wEftCgQVi2bBlCQkLg4eGBU6dOYf/+/WoPSszMzESPHj1QWFiIgwcPlno7JRERERG9vOrXr48FCxaUadkFCxagfv36Wo6IiHTt448/xrVr17Bjx45ytduxYweuXbuGjz/+WEuRERkeFsQqqV69ejh06BAeP36Mnj174tatW8WWmTBhAq5cuYK8vDwcP34cHTp0kOZlZ2fjjTfewL1793Do0CE4OzvrMnwiIiIi0qEZM2Zg0aJFMDIyKnb7pLGxMYyMjLBo0SLMmDFDTxESkTZ5enoiICAAY8aMQVJSUpnaJCUlYcyYMQgMDES7du20HCGR4WBBTANcXFxw6NAhZGVloVevXrh7926Z2j148ABvvvkmrl27hgMHDqBJkybaDZSIiIiI9Eomk2HmzJm4cuUKgoODYWZmBktLS7Rs2RLBwcG4cuUKZs6cCZlMpu9QiUhLtm7dihYtWsDHxwfff/99qbdPFhQUYPv27fDx8UHLli2xZcsWHUdKVL2xIKYhzZo1w4EDB5Ceno4+ffpAqVQ+d/mHDx8iICAAqampiI2Nld4oQkRERETVX/369TF//nw0bdoUo0aNwtmzZzF//nzeJklkAKysrHD48GH4+flh8ODBaNiwIVavXi3NP3HiBBYsWIBGjRphyJAh8PPzw6FDh2BlZaXHqImqHxbENMjd3R379+9HcnIyAgMD8ejRoxKXe/z4Mfr374/jx49jz5498PT01HGkREREREREpC9WVlbYtWsXfv/9d7zxxhtqBTFfX18sWLAAb7zxBn7//Xfs2rWLxTAiLWBBTMNee+017N69G8eOHcO7776L/Px8tfkFBQV47733cOjQIURFRaFz5856ipSIiIiIiIj0ydPTExs3bsSZM2cAAKGhoTh9+jT+/vtvbNy4kRdPEGkRC2Ja0K1bN0RGRmL//v14//33pXvCCwsLMXr0aERGRuJ///sfevbsqedIiYiIiIiISN9q1qwJAHB1dYW7uztq1aql54iIqj8WxLSkd+/e2L59O3bs2IEPP/wQhYWFmDhxIv773//i22+/RWBgoL5DJCIiIiIiIiIySCb6DqA6e+eddxAeHo4PPvgASUlJOHXqFL7++msMGTJE36ERERERERERERksFsS07P3330dOTg5mzpyJL7/8EmPGjNF3SERERERURbRs2RK1a9fWdxhEpGdCCHTt2hWmpqb6DoXIYPCWSR0YO3Ys7t69i3/961/6DoWIiIiIqpBz587h9u3b+g6DiPRMJpPh559/LvZSNiLSHhbEiIiIiIiIiIjIoLAgRkREREREREREBoUFMSIiIiIiIiIiMigsiBERERERERERkUFhQYyIiIiIiIiIiAwKC2JERERERNVUeno6ZDIZTp06VeoyCoUCMpkMd+/e1VlcRKR73B8QqWNBjIiIiIjIgHl7eyMjIwPW1tYAgIiICNjY2Og3KCLSC+4PyJCY6DsAIiIiIiLSH7lcDkdHR32HQURVAPcHZEh4hRgRERERURWVk5ODDz74AFZWVqhbty6WL18OHx8fTJ48GQAgk8mwa9cutTY2NjaIiIhQm5aWlgZvb2/UqFEDrVu3Rnx8vDTv6VukFAoFgoKCcO/ePchkMshkMsybN0+7K0lEZcL9AZFmsSBGRERERFRFTZ8+HfHx8YiKikJsbCwUCgWSkpIq1M/UqVNx8uRJdOzYEf7+/rh9+3ax5by9vbFy5UrUqlULGRkZyMjIwLRp0zSxKkRUSdwfEGkWC2JERERERFWQUqnEpk2bsGzZMnTv3h1ubm7YvHkzCgoKyt3XhAkT0L9/f7i6umLt2rWwtrbGpk2bii0nl8thbW0NmUwGR0dHODo6wsrKShOrQ0SVwP0BkeaxIEZEREREVAVdvHgRjx8/RocOHaRptra2aN68ebn76tixo/S9iYkJvLy8kJqaqpE4iUj7uD8g0jwWxIiIiIiIXlIymQxCCLVp+fn5eoqGiPSJ+wOi8mFBjIiIiIioCmrcuDFMTU1x/PhxaVp2djb++OMP6bO9vT0yMjKkzxcuXEBubm6xvhISEqTvCwoKkJiYCFdX1xLHlcvlUKlUmlgFItIQ7g+INM9E3wEQEREREVFxVlZWGDVqFKZPn47atWvDwcEBwcHBMDL652/afn5+CAsLQ8eOHaFSqTBjxgyYmpoW62v16tVo2rQpXF1dsWLFCmRnZ2PkyJEljtugQQMolUocOnQIbdq0gYWFBSwsLLS2nkT0YtwfEGkerxAjIiIiIqqili5dii5dusDf3x89evRA586d4enpKc1fvnw5nJyc0KVLFwwdOhTTpk0r8ZfV0NBQhIaGok2bNvjll18QHR0NOzu7Esf09vbG2LFjMWjQINjb22PJkiVaWz8iKjvuD4g0SyaevcmYiIiItGrSpEk4fPgwUlJS9B0K6VFAQAAAIDo6Ws+RkD65ubnBz88Pq1atKnMbHx8feHh4YOXKldoLjIh0KjMzE3Xq1EFUVJR0fCgL7g+ql+PHj+P1119HcnIy3Nzc9B1OtccrxIiIiIiIiIiIyKCwIEZERERERERERAaFD9UnIiIiInqJKBQKfYdARFUE9wdEFccrxIiIiIiIiIiIyKCwIEZERERERERERAaFBTEiIiIiIiIiIjIoLIgREREREREREZFBYUGMiIiIiIiIiIgMCt8ySURERERUgqtXryIrK0urY9SvXx/GxsZISkrS6jgAYGdnB2dnZ62PU93oIg90iXlQfnPmzMHXX3+t1TGEEKhRowZGjBgBExPt/pru6emJffv2aXUMopcBC2JERERERM+4evUqXF1dkZubq/Wx9u/fjxUrVmh9HAsLC6SmprIYUg66zANdYR6U361bt3Dr1i34+vqiR48e+g6nws6fP4///ve/yMzMREFBgdYLb0RVHf8HEBERERE9IysrC7m5udiyZQtcXV31HU6lpaamYtiwYcjKymIhpByYBwQAq1evxq1bt7B3714EBweje/fu+g6p3NLT09GlSxe0bNkSMTExLIYRgQUxIiIiIqJSubq6ol27dvoOg/SMeWDYTExMsG3bNrz99tsIDAxEbGwsvL299R1Wmd24cQPdu3eHmZkZDh48CDs7O32HRFQl8KH6RERERERERM9hZmaGH3/8EZ6ennjrrbd08tw/Tbh16xZ69OiBx48f49ChQ6hbt66+QyKqMlgQIyIiIiIiInoBCwsL/PTTT2jWrBl69eqFc+fO6Tuk57p79y569eqFO3fu4NChQ3BxcdF3SERVCgtiRERERERERGVQq1Yt7N+/H3Xr1kWPHj1w8eJFfYdUIqVSiT59+iA9PR0HDhxAs2bN9B0SUZXDghgREREREZEOfPXVV/jggw/0HQZVkq2tLQ4cOAArKyt0794d169f13dIah49eoTA/2vv3qO0qgu9gX8fLiMMg5iCjHmJUjJIw4D0hVJJRhAV0dAQQpMUtfNqGMpKxWO+55wUywvHpeHJMEgtNS9gqFwGHdPy9oKWGWonjxcKb4nKgIkM8/7Rat4ITMCZeZD9+azFWvPs/fvt33e36PGZL3vvZ8SI/OY3v8ncuXOz9957lzsSbJEUYgAAAC2ssbExt9xyS2bOnJkkefrpp1NdXZ0VK1Zs9DHOPvvsnH766S0VkU3QvXv3LFy4MElSU1OTV155pcyJ/urdd9/Nl7/85Tz44IO58847s++++5Y7EmyxFGIAANCKTjjhhBx55JHrba+rq0upVMobb7zR6ploeXV1dTnwwANTKpWSJOecc05OP/30dO7cuWn/iBEjstNOO6VTp07ZZ599csMNN6xzjLPOOiszZ87Ms88+2+r5Wd+uu+6a2travPnmmzn44IPz+uuvb/axrrrqqvTo0SMdOnTIfvvtl0ceeWSTj9HQ0JDjjjsuc+fOze23354DDjhgs/NAESjEAAAAWtj111/fdLvkCy+8kDlz5uSEE05o2v+rX/0qn/nMZ3LrrbfmN7/5TcaNG5fjjz8+c+bMaRrTtWvXDB06NNOmTWvt+LyHPfbYI7W1tfnjH/+YYcOGbdIVf39z0003ZeLEifn2t7+dxYsXp0+fPhk6dOgmXXW2du3anHzyybnlllty0003ZejQoZucA4pGIQYAANCC3n777fzxj39Mz549kyQ333xz+vTpk5133rlpzLnnnpt///d/z8CBA7P77rtnwoQJOeSQQ3Lbbbetc6zhw4fnxhtvbNX8/HOf/vSnM3/+/Dz11FM54ogj8vbbb2/S/Msuuyzjx4/PuHHj0rt371x99dWprKzMtddeu1HzGxsb881vfjM/+tGPMmPGjBx11FGbcxpQOAoxAACAZvLwww/nmGOOycUXX9y0bfbs2RkxYkTT6/vvvz/9+/d/32O9+eab2X777dfZtu+++2bp0qV57rnnmi0zH1zfvn1z11135ZFHHsnIkSOzevXqjZq3evXqLFq0KDU1NU3b2rRpk5qamjz44IMbdYx//dd/zRVXXJFp06Zl7Nixm5UfikghBgAArWzOnDmpqqpa58+wYcPKHYtm8IlPfCKHHXbYOlf33HzzzTn22GObXj///PP56Ec/+k+Pc/PNN+fRRx/NuHHj1tn+t3nPP/98M6amOXz+85/P7Nmzs3DhwowZMyZr1qx53zmvvfZaGhoa0r1793W2d+/ePS+99NL7zp8yZUq+853v5JJLLskpp5yy2dmhiBRiAADQyr74xS/m8ccfX+fPD3/4w3LHohl069YtRx99dJYuXZpHH300r7zySioqKvKRj3ykaczbb7+dDh06vOcx7r333owbNy7XXHNNPv3pT6+zr2PHjkmSVatWtcwJ8IHU1NTkZz/7WWbNmpUTTzwxa9eubbG1rrzyypxzzjn59re/nTPPPLPF1oGtVbtyBwAAgKLp1KlT9thjj3W2LV26tExpaG5VVVUZMWJEbrjhhnz84x/P6NGj19nftWvXLF++fINz77vvvgwfPjyXX35500P4/97fvsmwW7duzR+cZnHEEUfkuuuuy1e+8pVUVVXlyiuvbPp20X/UtWvXtG3bNi+//PI6219++eVUV1e/5xozZszI6aef3vQwfmDTuUIMAACgmX3lK1/JjTfemDvvvDOHHnroOvs++9nP5ne/+916c+rq6nLYYYfl4osvzsknn7zB4/72t79N+/bt17tyjC3L6NGjc8011+T73/9+zj777DQ2Nm5wXEVFRfr165eFCxc2bVu7dm0WLlyYAQMGbHDOz372s5x44ok55ZRTcskll7xn2Qb8c64QAwAAaGZDhw5NQ0ND9txzz7Rv3369fSeddFIaGhrStm3bJH+9TfLwww/PhAkTMnLkyKbnR1VUVKzzYP37778/+++/f9Otk2y5TjzxxNTX1+eMM85I586dc955521w3MSJE/PVr341/fv3z7777pupU6dm5cqV6z0/LknuvPPOjBkzJqNHj873v/99ZRh8AAoxAACAZtauXbuMHj06xx133Hr7hg0blnbt2qW2tjZDhw5NksycOTOrVq3KRRddlIsuuqhp7IEHHpi6urqm1zfeeGMuuOCClo5PM5kwYULq6+tz3nnnpaqqKmecccZ6Y0aNGpVXX301559/fl566aXss88+mTt37noP2r/nnnsycuTIDB8+PDNmzEibNm74gg9CIQYAAK1oxowZG9w+aNCg97ytig+nK664YoPb27Vrl3PPPTeXXXZZUyE2Y8aM9/y78Td333132rRpk6OPPrq5o9KCzj333KxYsSLf/OY3U1VVlZNOOmm9MaeddlpOO+209zzGgw8+mCOOOCKDBg3KT3/607Rr51d5+KD8vwgAAKCVnXLKKXnjjTeyYsWKdO7ceaPmrFy5Mj/60Y+UIR8ypVIpF110Uerr63PyySenU6dO633Rwj/z2GOPZdiwYenbt29uu+22bLPNNi2YForDOykAAEAra9euXSZPnrxJc1wZ9uFVKpVyxRVXpL6+Pscdd1wqKyszYsSI9523ZMmSDBkyJD179sycOXNSWVnZCmmhGNx0DAAAAC2sTZs2+eEPf5ijjjoqX/7yl7NgwYJ/Ov7ZZ59NTU1NqqurM3fu3Gy77batlBSKQSEGAAAAraBdu3a54YYbUlNTkyOPPDIPPPDABsctXbo0NTU16dSpUxYsWJAddtihlZPC1k8hBgAAAK2koqIit9xyS/bdd98cdthhWbRo0Tr7X3nlldTU1KShoSG1tbWprq4uU1LYuinEAAAAoBV17Ngxd9xxR3r16pWhQ4fmySefTJIsX748Q4YMyZtvvpmFCxdmt912K3NS2HopxAAAAKCVde7cOXfffXd22WWX1NTU5LHHHsuhhx6aF198MQsWLMgee+xR7oiwVfMtkwAA8B6WLFlS7gjNYms5j3LZWv7321rOY2vykY98JPPnz88BBxyQfv36pXPnzrnnnnuy1157lTsabPUUYgAA8A+6du2aysrKjB07ttxRmk1lZWW6du1a7hgfKv4e0Bp23HHHLFy4MBdddFHGjBmTfv36lTsSFIJCDAAA/sFuu+2WJUuW5LXXXmvRdb785S/nc5/7XCZNmtSi6yR/LXc8j2jTtNbfg9bk78GWaeedd86VV15Z7hhQKAoxAADYgN12263Fi4OOHTtmxx13TN++fVt0HTZfa/w9AKD1eag+AAAAAIWiEAMAAACgUBRiAAAAABSKQgwAAACAQlGIAQDAVuq5555LqVTK448//p5j6urqUiqV8sYbb7RaLgAoN4UYAAAU2MCBA7Ns2bJ06dIlSTJjxoxst9125Q0FAC2sXbkDAAAA5VNRUZHq6upyxwCAVuUKMQAA2EKtXLkyxx9/fKqqqrLTTjvl0ksvzaBBg3LGGWckSUqlUmbNmrXOnO222y4zZsxYZ9tTTz2VgQMHpkOHDtlrr71y3333Ne37+1sm6+rqMm7cuLz55psplUoplUq54IILWvYkAaAMFGIAALCFmjRpUu67777Mnj078+fPT11dXRYvXrxZxznzzDPz2GOPZcCAARk+fHj+/Oc/rzdu4MCBmTp1arbddtssW7Ysy5Yty1lnndUcpwIAWxSFGAAAbIHq6+szffr0XHLJJRk8eHD23nvvzJw5M2vWrNnkY5122mkZOXJkevXqlWnTpqVLly6ZPn36euMqKirSpUuXlEqlVFdXp7q6OlVVVc1xOgCwRVGIAQDAFugPf/hDVq9enf32269p2/bbb58999xzk481YMCApp/btWuX/v37Z8mSJc2SEwA+jBRiAADwIVUqldLY2LjOtnfffbdMaQDgw0MhBgAAW6Ddd9897du3z8MPP9y0bfny5XnmmWeaXnfr1i3Lli1rev373/8+q1atWu9YDz30UNPPa9asyaJFi9KrV68NrltRUZGGhobmOAUA2GK1K3cAAABgfVVVVTnxxBMzadKk7LDDDtlxxx0zefLktGnz//9N+6CDDsqVV16ZAQMGpKGhId/61rfSvn379Y511VVXpWfPnunVq1cuv/zyLF++PF/72tc2uG6PHj1SX1+fhQsXpk+fPqmsrExlZWWLnScAlIMrxAAAYAv1ve99L/vvv3+GDx+empqafOELX0i/fv2a9l966aXZdddds//++2fMmDE566yzNlheTZkyJVOmTEmfPn3ywAMP5I477kjXrl03uObAgQNz6qmnZtSoUenWrVu++93vttj5AUC5uEIMAAC2UFVVVbnuuuty3XXXNW278847m37+6Ec/mnnz5q0z54033mj6uUePHk3PGBs9evQG1xg0aNB6zyGbNm1apk2b9kHjA8AWyxViAAAAABSKQgwAAACAQnHLJAAAfIjU1dWVOwIAfOi5QgwAAACAQlGIAQAAAFAoCjEAAAAACkUhBgAAAECheKg+AAD8g/r6+jz44IOtss4LL7yQBQsWtOg6FRUVOfDAA1t0DQD4MFGIAQDAP7j22mszYcKEVlnrueeey6xZs1p8nSeeeCJ77bVXi68DAB8GCjEAAPgHw4YNy0UXXZSKiorMnj07H/nIR8odabMsWrQoxx57bD7/+c9n9913L3ccANhiKMQAAOAf9OzZMwsWLMiBBx6Yr3/965k/f346d+5c7lib5Mknn8zJJ5+cvn375o477kjHjh3LHQkAthgeqg8AABuw1157Zd68eXnyySdzxBFH5O233y53pI323//936mpqcnOO++cu++++0NX5gFAS1OIAQDAe+jfv3/uuuuuPPzwwzn66KOzevXqckd6Xy+++GIGDx6cLl26ZP78+R/a2z0BoCUpxAAA4J/4whe+kNmzZ6e2tjZjx47NmjVryh3pPb300ksZPHhw2rRpk9ra2nTv3r3ckQBgi6QQAwCA93HwwQfn5ptvzm233ZaTTjopa9euLXek9bz++usZMmRIVq5cmdra2uyyyy7ljgQAWyyFGAAAbIQRI0bkuuuuy49//ON84xvfSGNjY7kjNXnrrbdyyCGHZNmyZamtrfWNkgDwPnzLJAAAbKTRo0envr4+J598cqqqqnLRRRelVCqVNdOqVaty+OGH55lnnsm9996bXr16lTUPAHwYuEIMAAA2wfjx43P55Zfn4osvzoUXXrjZx7nqqqvSo0ePdOjQIfvtt18eeeSRTT7GO++8ky996UtZvHhx7rrrrnz2s5/d7DwAUCSuEAMAgE10xhlnZMWKFTnvvPNSVVWVCRMmbNL8m266KRMnTszVV1+d/fbbL1OnTs3QoUPz9NNPZ8cdd9yoY6xZsyajR49OXV1d7rrrrgwcOHBzTgUACskVYgAAsBnOO++8TJo0KWeccUamT5++SXMvu+yyjB8/PuPGjUvv3r1z9dVXp7KyMtdee+1GzV+7dm3GjRuXn//857nlllty0EEHbc4pAEBhuUIMAAA2Q6lUysUXX5z6+vqMHz8+nTp1yrHHHvu+81avXp1FixblnHPOadrWpk2b1NTU5MEHH3zf+Y2Njfnf//t/5yc/+Ul+8pOf5PDDD/9A5wEARaQQAwCAzVQqlXLllVdm5cqVOe6441JZWZkjjjjin8557bXX0tDQkO7du6+zvXv37nnqqaf+6dzGxsZMmjQpV199da699tqMGjXqA58DABSRWyYBAOADaNOmTaZPn54RI0bkmGOOSW1tbYut9W//9m+59NJLc8UVV2TcuHEttg4AbO0UYgAA8AG1a9cuP/nJTzJ48OCMGDEiv/zlL99zbNeuXdO2bdu8/PLL62x/+eWXU11d/Z7zLrvsslxwwQW58MILc/rppzdbdgAoIoUYAAA0g4qKitx666353Oc+l0MPPTSLFy9+z3H9+vXLwoULm7atXbs2CxcuzIABAzY45wc/+EHOPPPMnHPOOes8ewwA2DwKMQAAaCYdO3bMz3/+8/Tq1StDhgzJk08+ucFxEydOzDXXXJOZM2dmyZIl+frXv56VK1du8DbI66+/PqeeempOP/30fOc732npUwCAQvBQfQAAaEadO3fO3XffnUGDBuXggw/O/fffn913332dMaNGjcqrr76a888/Py+99FL22WefzJ07d70H7d9+++054YQTcsIJJ2Tq1KkplUqteSoAsNVyhRgAADSzj3zkI5k/f346d+6cwYMH58UXX1xvzGmnnZbnn38+77zzTh5++OHst99+6+yfN29ejj322IwcOTLXXHNN2rTx0R0Amov/qgIAQAvo3r17Fi5cmFKplJqamvUeov/P/OIXv8hRRx2VIUOG5Lrrrkvbtm1bMCkAFI9CDAAAWsguu+yS2trarFixIgcffHBef/31953z6KOP5vDDD8+AAQPys5/9LBUVFa2QFACKRSEGAAAtaPfdd09tbW2WLVuWYcOG5a233nrPsU888UQOOeSQ7LXXXpk9e3Y6dOjQikkBoDgUYgAA0MJ69+6d+fPn5+mnn87w4cOzatWq9cY888wzOfjgg/Oxj30sd911V6qqqsqQFACKQSEGAACt4LOf/WzuuuuuLFq0KCNHjsw777zTtO/5559PTU1Ntt9++8ybNy/bbbdd+YICQAEoxAAAoJUMHDgws2fPzr333pvRo0dnzZo1WbZsWQYPHpz27dtnwYIF6datW7ljAsBWr125AwAAQJEMHjw4t9xyS4466qgcd9xxeeKJJ/KXv/wlDzzwQHbeeedyxwOAQlCIAQBAKzv88MNz/fXXZ8yYMdlhhx3yi1/8Ij169Ch3LAAoDIUYAACUwahRo/LpT3862223XXbZZZdyxwGAQlGIAQBAmey1117ljgAAheSh+gAAAAAUikIMAAAAgEJRiAEAAABQKAoxAAAAAApFIQYAAABAoSjEAAAAACgUhRgAAAAAhaIQAwAAAKBQFGIAAAAAFIpCDAAAAIBCUYgBAAAAUCgKMQAAAAAKRSEGAAAAQKEoxAAAAAAoFIUYAAAAAIWiEAMAAACgUBRiAAAAABSKQgwAAACAQlGIAQAAAFAoCjEAAAAACkUhBgAAAEChKMQAAAAAKBSFGAAAAACFohADAAAAoFAUYgAAAAAUSrtyBwAAKKJtttmm3BEAgC1IY2NjtttuuzQ2NpY7SiEoxAAAyuCdd94pdwQAYAtSKpXyxhtvpFQqlTtKIbhlEgAAAIBCUYgBAAAAUCgKMQAAAAAKRSEGAAAAUEZvvfVWfv/73ydJnn766bz11ltlTrT1U4gBAAAAlMGiRYty4oknZscdd8xxxx2XJDnmmGNSXV2dE088MYsWLSpzwq2XQgwAAACgFdXX12fEiBHp379/amtrc/bZZzftmz59es4777wsWLAg/fv3z4gRI1JfX1/GtFsnhRgAQCtaunRpzj///Nx7772ZP39+evfunfPPPz9Lly4tdzQAoBXU19fnoIMOyr333psbb7wxzz77bCZNmtS0/9Of/nTOPffc/M///E9uvPHG3HvvvTnooIOUYs1MIQYA0AoaGxszZcqUfOxjH8uFF16Y+vr6vPPOO1myZEkuvPDCfOxjH8uUKVPS2NhY7qgAQAv6yle+kqeeeip1dXUZNWpU2rZtu8Fxbdu2zahRo1JXV5ennnoqY8eObeWkWzeFGABAK7j44otzzjnnZO3atWloaFhnX0NDQ9auXZtzzjknF198cZkSAgAt7f/+3/+bO+64I9dcc0369u27UXP69u2bH/zgB5k9e7ZnijUjhRgAQAtbunRpJk+evFFjJ0+e7PZJANhKTZs2LbvttluOPvroTZp39NFHZ9ddd820adNaKFnxKMQAAFrYD37wg5RKpY0aWyqVcs0117RwIgCgtb311lu54YYbMm7cuPzlL3/JypUr1/nzN2+//fZ6+955552MGzcuP/nJT/LWW2+V8Sy2HqVGD6oAgFY1YcKE3HPPPXniiSfKHYVW0rt37yxZsmSjx5dKpXTo0KEFEwEAra2xsTF/+ctfPvBxfv3rX+czn/lMMyQqtnblDgAAsLV78803N2l8586d8x//8R8tlAYAKIdnn302U6dO/cDHWbFixQcPg0IMAKCldenSJX/60582evwuu+yS008/vQUTAQCt7de//nWmTp2ae++9N5/73OfW2bdy5cp07949STa4P0keffTRfPGLX0znzp1b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e+21rFq1Ktdff3169epV7jgf2JIlSzJ27Ni89tprfgGGTeT9APibn/70pxk+fHjmzJmTM844I/vtt1+5I22yX/ziF5k4cWKGDx+eH/3oR+WOU3YKMQCADejVq1er3LIAbPm8HwAdOnTIrFmzMnTo0BxyyCGpq6tLnz59yh1roz3yyCM5/PDD8/nPfz4333xz2rdvX+5IZeeh+gAAAADvo1OnTrnzzjvziU98IgcffHCefvrpckfaKL/5zW9yyCGHZO+9986sWbPSoUOHckfaIijEAAAAADZCly5dMm/evHTr1i01NTV57rnnyh3pn3rmmWdy8MEHp0ePHrnzzjtTVVVV7khbDIUYAAAAwEbq2rVramtrs80222Tw4MH505/+VO5IG/Tcc89l8ODB2WGHHTJv3rxst9125Y60RVGIAQAAtIIrrrgixx9/fLljAM1gp512ysKFC/Puu++mpqYmr776arkjrWPZsmWpqalJRUVFamtr061bt3JH2uIoxAAAAFpYY2NjbrnllsycOTNJ8vTTT6e6ujorVqzY6GOcffbZOf3001sqIrCJPvaxj6W2tjavv/56hg4dmjfeeKPckZL89Rtya2pq8s4772ThwoX56Ec/Wu5IWySFGABAKznhhBNy5JFHrre9rq4upVJpi/kgDTS/urq6HHjggSmVSkmSc845J6effno6d+7ctH/EiBHZaaed0qlTp+yzzz654YYb1jnGWWedlZkzZ+bZZ59t9fzAhn3yk5/MggUL8txzz+XQQw9NfX39Zh/rqquuSo8ePdKhQ4fst99+eeSRRzb5GG+++WaGDh2a1157LbW1tenRo8dm59naKcQAAABa2PXXX990u+QLL7yQOXPm5IQTTmja/6tf/Sqf+cxncuutt+Y3v/lNxo0bl+OPPz5z5sxpGtO1a9cMHTo006ZNa+34wD+x9957Z968efntb3+bESNG5C9/+csmH+Omm27KxIkT8+1vfzuLFy9Onz59MnTo0LzyyisbfYyVK1fmsMMOy//8z/9kwYIF2XPPPTc5R5EoxAAAAFrQ22+/nT/+8Y/p2bNnkuTmm29Onz59svPOOzeNOffcc/Pv//7vGThwYHbfffdMmDAhhxxySG677bZ1jjV8+PDceOONrZofeH+f+9znMmfOnDz44IM55phj8u67727S/Msuuyzjx4/PuHHj0rt371x99dWprKzMtddeu1Hz//KXv+TII4/Mr3/968ydOzef+cxnNuc0CkUhBgAA0EwefvjhHHPMMbn44oubts2ePTsjRoxoen3//fenf//+73usN998M9tvv/062/bdd98sXbo0zz33XLNlBprHAQcckNtvvz3z5s3Lcccdl4aGho2at3r16ixatCg1NTVN29q0aZOampo8+OCD7zv/3XffzZe//OU88MADmTNnTvbdd9/NPociUYgBALSiOXPmpKqqap0/w4YNK3csoJl84hOfyGGHHbbOVR0333xzjj322KbXzz///Ps+5Prmm2/Oo48+mnHjxq2z/W/znn/++WZMDTSXoUOH5qabbsott9ySk08+OWvXrn3fOa+99loaGhrSvXv3dbZ37949L7300j+d29DQkOOPPz5z587NbbfdlgMPPPAD5S8ShRgAQCv64he/mMcff3ydPz/84Q/LHQtoJt26dcvRRx+dpUuX5tFHH80rr7ySioqKfOQjH2ka8/bbb6dDhw7veYx7770348aNyzXXXJNPf/rT6+zr2LFjkmTVqlUtcwLAB3bUUUdlxowZ+dGPfpRvfvObaWxsbJF11q5dm1NOOSU333xzfvrTn/oHtk3UrtwBAACKpFOnTtljjz3W2bZ06dIypQFaQlVVVUaMGJEbbrghH//4xzN69Oh19nft2jXLly/f4Nz77rsvw4cPz+WXX970EP6/9/rrryf5a/EGbLnGjh2blStX5tRTT01VVVW+853vvOfYrl27pm3btnn55ZfX2f7yyy+nurp6g3MaGxszceLETJ8+PT/+8Y8zcuTIZs1fBK4QAwAAaGZf+cpXcuONN+bOO+/MoYceus6+z372s/nd73633py6urocdthhufjii3PyySdv8Li//e1v0759+/WuHAO2PKecckouueSSXHjhhZkyZcp7jquoqEi/fv2ycOHCpm1r167NwoULM2DAgA3OOf/88/Of//mf+f73v5/jjjuu2bMXgSvEAAAAmtnQoUPT0NCQPffcM+3bt19v30knnZSGhoa0bds2yV9vkzz88MMzYcKEjBw5sum5QRUVFes8WP/+++/P/vvv33TrJLBlO/PMM7NixYqcc845qaqqymmnnbbBcRMnTsxXv/rV9O/fP/vuu2+mTp2alStXrvccwSS5+OKL8x//8R/57ne/m69//estfQpbLYUYAABAM2vXrl1Gjx69wSs3hg0blnbt2qW2tjZDhw5NksycOTOrVq3KRRddlIsuuqhp7IEHHpi6urqm1zfeeGMuuOCClo4PNKNvf/vbqa+vz+mnn55OnTptsOQaNWpUXn311Zx//vl56aWXss8++2Tu3LnrPWj/qquuytlnn53zzz8/kyZNaq1T2CopxAAAWsmMGTM2uH3QoEEt9sBdoHyuuOKKDW5v165dzj333Fx22WVNhdiMGTPe8z3ib+6+++60adMmRx99dHNHBVpQqVTK9773vdTX1+ekk05KVVVVjjnmmPXGnXbaae95BVny1+L8tNNOyze/+U3FeDNQiAEAALSyU045JW+88UZWrFiRzp07b9SclStX5kc/+lHatfNrHHzYlEqlfP/73099fX3GjBmTysrKHHbYYRs9/5ZbbsnXvva1jB8/PpdeemlKpVILpi0G76QAAACtrF27dpk8efImzXFlGHy4tWnTJjNmzMiqVasycuTI3HXXXTnooIPed95dd92V0aNH59hjj820adOUYc3Et0wCAAAAtIJ27drlpz/9aQYNGpQjjjgiDz744D8dX1dXl5EjR+awww7LjBkzmr6Igw9OIQYAAADQSrbZZpvcdttt6du3b4YNG5bHHntsg+MeeuihHH744TnggANy0003rfeNtXwwCjEAAACAVlRZWZk5c+bkk5/8ZIYMGZIlS5ass//xxx/PsGHD8tnPfja33357ttlmmzIl3XopxAAAAABa2bbbbpu777471dXVqampybPPPpskeeqppzJkyJDsvvvumTNnTiorK8ucdOukEAMAAAAogx122CELFixIp06dMnjw4Nx///2pqalJ9+7dM2/evHTp0qXcEbdavmUSAGAD/vHWhQ+rreU8oJy2lv8fbS3nAVub6urq1NbWZv/9988BBxyQPfbYIwsWLMgOO+xQ7mhbNYUYAMDf6dq1ayorKzN27NhyR2k2lZWV6dq1a7ljwIeO9wOgtey2225ZuHBhZsyYkfHjx6e6urrckbZ6pcbGxsZyhwCAIpkwYULuueeePPHEE+WOwnt44YUX8tprr7XoGmeccUaSZOrUqS26TvLXX+p32223Fl8Htkat8X7QmrwfAPyVK8QAAP7Bbrvt1uK/MG633XZJkr59+7boOsAH0xrvBwC0Pg/VBwAAAKBQFGIAAAAAFIpCDAAAAIBCUYgBAAAAUCgKMQCArdBzzz2XUqmUxx9//D3H1NXVpVQq5Y033mi1XAAAWwKFGABAQQ0cODDLli1Lly5dkiQzZsxo+vZLAICtWbtyBwAAoDwqKipSXV1d7hgAAK3OFWIAAFuglStX5vjjj09VVVV22mmnXHrppRk0aFDOOOOMJEmpVMqsWbPWmbPddttlxowZ62x76qmnMnDgwHTo0CF77bVX7rvvvqZ9f3/LZF1dXcaNG5c333wzpVIppVIpF1xwQcueJABAmSjEAAC2QJMmTcp9992X2bNnZ/78+amrq8vixYs36zhnnnlmHnvssQwYMCDDhw/Pn//85/XGDRw4MFOnTs22226bZcuWZdmyZTnrrLOa41QAALY4CjEAgC1MfX19pk+fnksuuSSDBw/O3nvvnZkzZ2bNmjWbfKzTTjstI0eOTK9evTJt2rR06dIl06dPX29cRUVFunTpklKplOrq6lRXV6eqqqo5TgcAYIujEAMA2ML84Q9/yOrVq7Pffvs1bdt+++2z5557bvKxBgwY0PRzu3bt0r9//yxZsqRZcgIAfFgpxAAAPoRKpVIaGxvX2fbuu++WKQ0AwIeLQgwAYAuz++67p3379nn44Yebti1fvjzPPPNM0+tu3bpl2bJlTa9///vfZ9WqVesd66GHHmr6ec2aNVm0aFF69eq1wXUrKirS0NDQHKcAALBFa1fuAAAArKuqqionnnhiJk2alB122CE77rhjJk+enDZt/v+/ZR500EG58sorM2DAgDQ0NORb3/pW2rdvv96xrrrqqvTs2TO9evXK5ZdfnuXLl+drX/vaBtft0aNH6uvrs3DhwvTp0yeVlZWprKxssfMEACgXV4gBAGyBvve972X//ffP8OHDU1NTky984Qvp169f0/5LL700u+66a/bff/+MGTMmZ5111gbLqylTpmTKlCnp06dPHnjggdxxxx3p2rXrBtccOHBgTj311IwaNSrdunXLd7/73RY7PwCAcio1/uPDJwCAFjVhwoTcc889eeKJJ8odhTI64ogjkiR33HHHRs8ZNGhQ9tlnn0ydOrWFUgEAFIMrxAAAAAAoFIUYAAAAAIXiofoAAB8SdXV15Y4AALBVcIUYAAAAAIWiEAMAAACgUBRiAAAAABSKQgwAAACAQvFQfQCAv/Puu+9m1qxZLb7On/70pyTJz372sxZf66ijjkq7dj72AQD8jU9GAAB/Z86cOfnyl7/cauu1xlq33357jjzyyBZfBwDgw0IhBgDwdw466KD069cv//3f/5358+fnU5/6VLkjbZYlS5Zk6NCh6dmzZ774xS+WOw4AwBZFIQYA8He6dOmSefPm5cADD8yXvvSl3H///fn4xz9e7lib5Nlnn82XvvSl7Lrrrpk7d266dOlS7kgAAFsUD9UHAPgHO+ywQxYsWJCOHTtm8ODB+eMf/1juSBvtj3/8Y2pqalJZWZkFCxZkhx12KHckAIAtjkIMAGADdtppp9TW1mbNmjWpqanJq6++Wu5I7+uVV15JTU1NGhoasnDhwlRXV5c7EgDAFkkhBgDwHj72sY9l4cKFWb58eYYMGZI33nij3JHe098yLl++PLW1tdltt93KHQkAYIulEAMA+Cd69uyZBQsW5IUXXsiwYcNSX19f7kjrWbFiRQ499NC8+OKLqa2tTc+ePcsdCQBgi6YQAwB4H3vvvXfmzZuXJ598MkcccUTefvvtckdq8vbbb2fEiBF58sknM2/evOy1117ljgQAsMVTiAEAbIT+/fvnzjvvzEMPPZRjjjkmq1evLnekrF69OkcffXQeeuih3Hnnnenfv3+5IwEAfCgoxAAANtL++++f22+/PQsWLMhxxx2XhoaGzTrOVVddlR49eqRDhw7Zb7/98sgjj2zyMdasWZOxY8emtrY2s2bNyv77779ZWQAAikghBgCwCYYOHZqbbropt956a0466aSsXbt2k+bfdNNNmThxYr797W9n8eLF6dOnT4YOHZpXXnllo4+xdu3ajB8/PrfddltuvvnmDBkyZFNPAwCg0BRiAACb6Mgjj8zMmTMzc+bMTJgwIY2NjRs997LLLsv48eMzbty49O7dO1dffXUqKytz7bXXbtT8xsbGfOMb38jMmTPz4x//OCNGjNjc0wAAKKx25Q4AAPBh9JWvfCUrV67MKaecks6dO+fCCy983zmrV6/OokWLcs455zRta9OmTWpqavLggw9u1LrnnnturrrqqvzgBz/ImDFjNjs/AECRKcQAADbTySefnPr6+px55pmpqqrKueee+0/Hv/baa2loaEj37t3X2d69e/c89dRT77vehRdemClTpjRdZQYAwOZRiAEAfAATJ05MfX19Jk+enKqqqnzjG99okXX+8z//M5MnT86//du/5Zvf/GaLrAEAUBQKMQCAD+hf//Vfs2LFikyYMCFVVVX52te+tsFxXbt2Tdu2bfPyyy+vs/3ll19OdXX1ex5/+vTpOeOMMzJp0qScd955zZodAKCIPFQfAOADKpVK+e53v5tTTz01J510Um666aYNjquoqEi/fv2ycOHCpm1r167NwoULM2DAgA3OufHGGzN+/Ph8/etfz8UXX5xSqdQi5wAAUCSuEAMAaAalUilXXXVVVq5cmbFjx6aysjLDhw9fb9zEiRPz1a9+Nf3798++++6bqVOnZuXKlRk3btx6Y3/+85/nuOOOy9ixY3PllVcqwwAAmolCDACgmbRp0ybXXnttVq5cmWOOOSZ33nlnBg8evM6YUaNG5dVXX83555+fl156Kfvss0/mzp273oP2a2trc8wxx2TEiBG59tpr06aNC/sBAJpLqbGxsbHcIQCgSCZMmJB77rknTzzxRLmj0ELeeeedHHnkkfnFL36RBQsWZODAgZs0/5e//GWGDBmSAw88MLNmzUpFRUULJQUAKCb/1AgA0My22Wab3Hrrrenfv38OPfTQLF68eKPnLl68OIceemg+97nP5dZbb1WGAQC0AIUYAEALqKyszM9//vN88pOfzNChQ/O73/3ufec8+eSTGTJkSD71qU/l5z//eTp27NgKSQEAikchBgDQQrbddtvMnTs3O+20U2pqavKHP/zhPcf+4Q9/yMEHH5ydd945d999dzp37tyKSQEAikUhBgDQgrbffvssWLAgnTt3zuDBg7N06dL1xrz44osZPHhwOnfunPnz52f77bcvQ1IAgOJQiAEAtLDu3buntrY2STJ48OC8/PLLTftefvnl1NTUJPnrN0v+47dNAgDQ/BRiAACtYNddd01tbW1WrFiRIUOG5PXXX8/rr7+egw8+OCtWrMjChQuz6667ljsmAEAhtCt3AACAothjjz1SW1ubAw44IMOGDUuSLFu2LPfdd1923333MqcDACgOhRgAQCvq3bt35s+fny9+8YsplUq555570rt373LHAgAoFIUYAEAr69u3b55++ukkSXV1dZnTAAAUj0IMAKAMFGEAAOXjofoAAAAAFIpCDAAAAIBCUYgBAAAAUCgKMQAAAAAKRSEGAAAAQKEoxAAAAAAoFIUYAAAAAIWiEAMAAACgUBRiAAAAABSKQgwAAACAQlGIAQAAAFAoCjEAAAAACkUhBgAAAEChKMQAAAAAKBSFGAAAAACFohADAAAAoFAUYgAAAAAUikIMAAAAgEJRiAEAAABQKAoxAAAAAApFIQYAAABAoSjEAAAAACgUhRgAAAAAhaIQAwAAAKBQFGIAAAAAFIpCDAAAAIBCUYgBAAAAUCgKMQAAAAAKRSEGAAAAQKEoxAAAAAAoFIUYAAAAAIWiEAMAAACgUBRiAAAAABSKQgwAAACAQlGIAQAAAFAoCjEAAAAACkUhBgAAAEChKMQAAAAAKJR25Q4AAEWzzz77pF07/wkGAIByKTU2NjaWOwQAAAAAtBa3TAIAAABQKAoxAAAAAApFIQYAAABAoSjEAAAAACgUhRgAAAAAhaIQAwAAAKBQFGIAAAAAFIpCDAAAAIBCUYgBAAAAUCgKMQAAAAAKRSEGAAAAQKEoxAAAAAAoFIUYAAAAAIWiEAMAAACgUBRiAAAAABSKQgwAAACAQlGIAQAAAFAoCjEAAAAACkUhBgAAAEChKMQAAAAAKBSFGAAAAACFohADAAAAoFAUYgAAAAAUikIMAAAAgEJRiAEAAABQKAoxAAAAAApFIQYAAABAoSjEAAAAACgUhRgAAAAAhaIQAwAAAKBQFGIAAAAAFIpCDAAAAIBCUYgBAAAAUCgKMQAAAAAKRSEGAAAAQKEoxAAAAAAoFIUYAAAAAIWiEAMAAACgUBRiAAAAABSKQgwAAACAQlGIAQAAAFAoCjEAAAAACkUhBgAAAEChKMQAAAAAKBSFGAAAAACFohADAAAAoFAUYgAAAAAUikIMAAAAgEJRiAEAAABQKAoxAAAAAApFIQYAAABAoSjEAAAAACgUhRgAAAAAhaIQAwAAAKBQFGIAAAAAFIpCDAAAAIBCUYgBAAAAUCgKMQAAAAAKRSEGAAAAQKEoxAAAAAAoFIUYAAAAAIWiEAMAAACgUBRiAAAAABSKQgwAAACAQlGIAQAAAFAoCjEAAAAACkUhBgAAAEChKMQAAAAAKBSFGAAAAACFohADAAAAoFAUYgAAAAAUikIMAAAAgEJRiAEAAABQKAoxAAAAAApFIQYAAABAoSjEAAAAACgUhRgAAAAAhaIQAwAAAKBQFGIAAAAAFIpCDAAAAIBCUYgBAAAAUCgKMQAAAAAKRSEGAAAAQKEoxAAAAAAoFIUYAAAAAIWiEAMAAACgUBRiAAAAABSKQgwAAACAQlGIAQAAAFAoCjEAAAAACkUhBgAAAEChKMQAAAAAKJT/B8P8RsRTSFn5AAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "real_d = RealAnsatz({N: 1, S: 1}, n_layers=2)(d)\n", "real_d.draw(figsize=(12, 10))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### TensorAnsatz example: \"Positive\" ansatz" ] }, { "cell_type": "raw", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "This :term:`ansatz ` returns a positive tensor, since the individual tensors are element-wise squared before contracted." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "from lambeq import TensorAnsatz, Symbol\n", "from lambeq.backend import tensor\n", "import math\n", "\n", "class PositiveAnsatz(TensorAnsatz):\n", "\n", " def _ar(self, functor, box):\n", " # step 1: obtain label\n", " name = self._summarise_box(box)\n", "\n", " # step 2: map domain and codomain\n", " dom, cod = functor(box.dom), functor(box.cod)\n", "\n", " # step 3: construct and return ansatz\n", " syms = Symbol(name, math.prod(dom.dim), math.prod(cod.dim))\n", "\n", " return tensor.Box(box.name, dom, cod, syms ** 2)" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from lambeq.backend.tensor import Dim\n", "\n", "ansatz = PositiveAnsatz({N: Dim(2), S: Dim(2)})\n", "positive_d = ansatz(d)\n", "positive_d.draw()" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([8., 8.])" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import numpy as np\n", "from sympy import default_sort_key\n", "\n", "\n", "syms = sorted(positive_d.free_symbols, key=default_sort_key)\n", "sym_dict = {k: -np.ones(k.size) for k in syms}\n", "subbed_diagram = positive_d.lambdify(*syms)(*sym_dict.values())\n", "\n", "subbed_diagram.eval()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Contributions" ] }, { "cell_type": "raw", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "We encourage you to implement your own :term:`readers `, :term:`rewrite rules ` and :term:`ansätze ` and `contribute to lambeq `_ -- detailed guidelines are available `here <../CONTRIBUTING.rst>`_. Below you can find some sources of inspiration:\n", "\n", "* rewrites for relative pronouns: [SCC2014a]_ [SCC2014b]_\n", "* rewrites to deal with coordination: [Kar2016]_\n", "* rewrites to reduce the dimension size of verbs: [Kea2014]_\n", "* rewrites to language circuits (DisCoCirc): [CW2021]_\n", "\n", "* ansätze benchmarked by their expressibility: [SJA2019]_\n", "* high-level examples of ansätze: `[link] `_\n", "\n", ".. rubric:: See also:\n", "\n", "- :ref:`General information about sub-packages `\n", "- :ref:`UML diagrams for sub-packages `\n" ] } ], "metadata": { "language_info": { "name": "python" } }, "nbformat": 4, "nbformat_minor": 4 }