{ "cells": [ { "cell_type": "markdown", "id": "c00ac6be-6f71-4106-8f72-12903962a9e8", "metadata": {}, "source": [ "# Convolution\n", "\n", "In this notebook we will see how to perform discrete convolutions using the Toeplitz tensor." ] }, { "cell_type": "code", "execution_count": 1, "id": "6ab4b362-602b-4db5-ab76-3e72b3aca391", "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "from trainsum.numpy import trainsum as ts\n", "import matplotlib.pyplot as plt\n", "\n", "opts = ts.variational(max_rank=10, cutoff=1e-10)\n", "ts.set_options(opts)\n", "\n", "opts = ts.cross(max_rank=20, eps=0.0)\n", "ts.set_options(opts)" ] }, { "cell_type": "markdown", "id": "a3467563-7e36-43e0-87c4-340439949472", "metadata": {}, "source": [ "First we set some global options so we do not need context manager for every operation" ] }, { "cell_type": "code", "execution_count": 2, "id": "2f0e89ea-dbb4-4b75-9eea-298252ccfb34", "metadata": {}, "outputs": [], "source": [ "# define the problem domain\n", "dim = ts.dimension(1024)\n", "shape = ts.trainshape(1024)\n", "domain = ts.domain(0, 1)\n", "grid = ts.uniform_grid(dim, domain)" ] }, { "cell_type": "markdown", "id": "8b130344-fe58-4d41-9ae1-8a1cf9358b86", "metadata": {}, "source": [ "The first example will be one dimensional so we define a simple uniformly spaced 1D grid with 1024 points." ] }, { "cell_type": "code", "execution_count": 3, "id": "fcee83c9-fba8-46ca-aee7-b0f239233da8", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA9UAAAFfCAYAAABA/u+IAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAASOpJREFUeJzt3Xt8VPWd//H3zGQySYBcICQhEAgiggoCgmC8W7lUrNZeXKuusLa1q5VdNbutUIvUdhVrt9ZdF0u1pfa31YraVrdCKWkUFUWQS1DuImK4JeGWTEggmWTO748kA5EAM5Mz58zMeT0fjzwgJ+ec+c4nZ84nn/P9nu9xGYZhCAAAAAAARMxtdwMAAAAAAEhUFNUAAAAAAESJohoAAAAAgChRVAMAAAAAECWKagAAAAAAokRRDQAAAABAlCiqAQAAAACIUordDQhHMBjU3r171atXL7lcLrubAwBwOMMwVF9fr8LCQrndXJ82A7keABBvws33CVFU7927V0VFRXY3AwCATnbt2qUBAwbY3YykQK4HAMSrM+X7hCiqe/XqJantzWRmZnZrX4FAQEuXLtXkyZPl9XrNaF7SIlbhI1bhI1bhI1aRsTJefr9fRUVFofyE7iPX24NYhY9YRYZ4hY9Yhc/qWIWb7xOiqO4YBpaZmWlKos3IyFBmZiYH7RkQq/ARq/ARq/ARq8jYES+GKZuHXG8PYhU+YhUZ4hU+YhU+u2J1pnzPjWAAAAAAAESJohoAAAAAgChRVAMAAAAAECWKagAAAAAAokRRDQAAAABAlCiqAQAAAACIEkU1AAAAAABRoqgGAAAAACBKERfVb7/9tq6//noVFhbK5XLp1VdfPeM2y5Yt04UXXiifz6ezzz5bzz33XBRNBQAAViDXAwAQvoiL6oaGBo0aNUrz5s0La/1PP/1U1113na6++mpVVFTovvvu07e//W397W9/i7ixAAAg9sj1AACELyXSDa699lpde+21Ya8/f/58DR48WD//+c8lSeeee66WL1+uX/ziF5oyZUqX2zQ1NampqSn0vd/vlyQFAgEFAoFIm9xJx/bd3Y8TxCJWv19Zqdc/rDJtf/HCMAwdrvXod7tXyuVy2d2cuOb0WI0uytLMLw4La13OV5GxMl7J/jsh1ztHLGK1auch/f79XXpw6jDlZ6aZtl+7cVxFhniFj1iFz+pYhfs6ERfVkVqxYoUmTpzYadmUKVN03333nXKbuXPn6uGHHz5p+dKlS5WRkWFKu8rKykzZjxOYGauffeBRY0uyFlIufVpfZ3cjEoRzY7WmslbFxz5RZmr423C+iowV8WpsbIz5ayQScn3iMzNWv9vm1tqDbnnr9+qa/oZp+40XHFeRIV7hI1bhsypW4eb7mBfVVVVVys/P77QsPz9ffr9fR48eVXp6+knbzJo1S6WlpaHv/X6/ioqKNHnyZGVmZnarPYFAQGVlZZo0aZK8Xm+39pXsYhGrB9e+IbW0aM6XhqtvT58p+4wHra2tWr9+vUaNGiWPx2N3c+Kak2N170sfqjVo6Mqrv6B+WWfuveF8FRkr49XRq4o25PrEFYtY/dW/XjpYrbS+AzV16vmm7DMecFxFhniFj1iFz+pYhZvvY15UR8Pn88nnO7ng8nq9pgXPzH0lOzNj1dFHffXwAhXn9jBln/EgEAhIuys09YJCjqszcHKsSl/+SK0y5PWmRPTeOV9Fxop48fvoPnJ9fDEzVm53W7avPHw0KePPcRUZ4hU+YhU+q2IV7mvE/JFaBQUFqq6u7rSsurpamZmZXV65RnJLvkFgQOQMPghIMuR6nKjjHLfzALdJAHCGmBfVJSUlKi8v77SsrKxMJSUlsX5pAABgAXI9ulLlP6ajza12NwMAYi7iovrIkSOqqKhQRUWFpLbHaFRUVKiyslJS2z1S06ZNC61/1113aceOHfr+97+vLVu26Omnn9ZLL72k+++/35x3gITkwEmfgeP3PwBxjlwPs3x2qMHuJgBAzEVcVK9evVpjxozRmDFjJEmlpaUaM2aMHnroIUnSvn37QklXkgYPHqxFixaprKxMo0aN0s9//nP9+te/PuUjNpDcDMa9AtwGgbhHrkd3nJjqGQIOwAkinqjsqquuOm1h9Nxzz3W5zbp16yJ9KQAAYANyPcyy8yA91QCSX8zvqQa64mIcLByIox6AExgnjMf5jKIagANQVMNSDHsFuA0CgHN8eoCiGkDyo6gGAABATHx2kHuqASQ/imrYgtm/4UQc9wCc4MTBOPvqeKwWgORHUQ1LMeoV4HMAwFl4rBaAZEdRDQAAgJjhsVoAkh1FNSxlMFUZHIxZ7wE4weczPY/VApDsKKoBAABgur69fJJ4rBaA5EdRDVswYRMAAMltcJ8eknisFoDkR1ENSzFBE5ys42ISnwMAyazjHFecmyGJx2oBSH4U1QAAADBdcW5bTzWP1QKQ7CiqYQsX47/hQBz1AJwkJyNVvdJSJEmVh+itBpC8KKphKUa9AsyCDyDZtZ3jXJIG53JfNYDkR1ENAAAA07lcUjGTlQFwAIpq2IJhsHAibnsA4DRn9W0rqnfsP2JzSwAgdiiqYS1GvQLM/g0gqZ14jhvSt6ckaQc91QCSGEU1AAAATOeSK9RT/Qk91QCSGEU1bMEoWDgRhz0Apzkrt62nurYxoEMNzTa3BgBig6IalmLWY4C7IAAktxPPcempHvXPTpdEbzWA5EVRDQAAAPO1D89hsjIAyY6iGrZwMRAWTsRhD8CBOiYr+2Q/k5UBSE4U1bAUsx4DksEHAUAS+/w5bgg91QCSHEU1AAAATNcxOOcseqoBJDmKatiC2b/hRBz2AJyoY/h35aFGNbcEbW4NAJiPohqWYtArwOcAQHL7/DkuP9OnHqketQYNVR6itxpA8qGoBgAAgOlc7cPSXC4XQ8ABJDWKatiCYbBwIhf3PQBwqI7HavGsagDJiKIalmLWY4BZ8AEkt67OcR33Ve+gpxpAEqKoBgAAgOlOHJtDTzWAZEZRDXswChYOxOhvAE51Yk81o9YAJBuKaliKNApIfBIAJLOuznCDc3vI5ZLqjgZ0sKHZ8jYBQCxRVAMAAMB0J47OSfN61D87XRL3VQNIPhTVsIWL8d9wII56AE5wquHdxx+rxX3VAJILRTUsxW1UAJ8DAM50dntR/XE1RTWA5EJRDQAAANN9fnLGc/Lbi+qaehtaAwCxQ1ENWzALMpzIxYEPwMGG5veSJG2rpqgGkFwoqgHAYoz+BuAEn58/5ey8tp7qan+T6o4G7GgSAMQERTVsQX8dAADOkpXuVUFmmiRpO0PAASQRimoAsAgXkwA4wekmYxzafl/1NiYrA5BEKKphmVM9YgNwGj4KAJygq2kkzmm/r5oZwAEkE4pq2IIJmwAAcJ6hecwADiD5UFQDgEW4lgTACYzTTMfIDOAAkhFFNSzDkFegzen+4ASAZNZxTzUzgANIJhTVsAUddgAAOE9mGjOAA0g+FNUAYBkuJwFIfmcamcYM4ACSTVRF9bx581RcXKy0tDRNmDBBq1atOu36Tz75pIYNG6b09HQVFRXp/vvv17Fjx6JqMBIXA16BNtwKgURArkd3nWpS0nO4rxpAkom4qF64cKFKS0s1Z84crV27VqNGjdKUKVNUU1PT5fovvPCCZs6cqTlz5mjz5s36zW9+o4ULF+oHP/hBtxuPxMWETQAQv8j1iKVz2nuqt9fQUw0gOaREusETTzyhO++8U3fccYckaf78+Vq0aJEWLFigmTNnnrT+e++9p0svvVS33nqrJKm4uFi33HKLVq5cecrXaGpqUlNTU+h7v98vSQoEAgoEujepRcf23d2PE5gdq9bg8e65QKBFgUDyVNYcV+Fzcqxc7eM1Wlpawnr/To5VNKyMV7L/Tsj1zhGLWAWDQUlS6ynOdYN7p0uStlXVJ9TviOMqMsQrfMQqfFbHKtzXiaiobm5u1po1azRr1qzQMrfbrYkTJ2rFihVdbnPJJZfo97//vVatWqXx48drx44dWrx4sW6//fZTvs7cuXP18MMPn7R86dKlysjIiKTJp1RWVmbKfpzArFi1GlLHIVdWVqYeXlN2G1c4rsLnxFg1NXkkufTOO+9oR4/wt3NirLrDing1NjbG/DXsQq53JjNjdfCgW5JbFRUVcu9ed9LPj7ZIUoqq65v0yv8tVkbEXTz24riKDPEKH7EKn1WxCjffR3QaO3DggFpbW5Wfn99peX5+vrZs2dLlNrfeeqsOHDigyy67TIZhqKWlRXfddddph4TNmjVLpaWloe/9fr+Kioo0efJkZWZmRtLkkwQCAZWVlWnSpEnyepOwqjOR2bFqaQ2q9P2/S5ImT56krPTkiT/HVficHKv/+GiZFGjWZZddrnP79Trj+k6OVTSsjFdHr2oyItc7Syxi9YeqD/Sx/7DGjBmjqSMLulznya1vqcrfpMGjSjR2UI4prxtrHFeRIV7hI1bhszpW4eb7mF8bXLZsmR599FE9/fTTmjBhgrZv3657771XP/nJTzR79uwut/H5fPL5fCct93q9pgXPzH0lO7Ni5XIHj+8zJTnjz3EVPifGqmPSnpSUlIjeuxNj1R1WxIvfR2fk+sRnaqzaz3Uej+eU+xya30tV/ibtOHhMF5+dWL8jjqvIEK/wEavwWRWrcF8joqI6NzdXHo9H1dXVnZZXV1eroKDrK5GzZ8/W7bffrm9/+9uSpJEjR6qhoUHf+c539OCDD8rt5qleTsGEx0Abg08D4hi5HmY53aSkwwt66Z2PD2hrVfKO+gDgHBFludTUVI0dO1bl5eWhZcFgUOXl5SopKelym8bGxpOSqcfjkSQZPFfGuZJnjjIASCrkelhheEHbEP/NVTxWC0Dii3j4d2lpqaZPn65x48Zp/PjxevLJJ9XQ0BCaIXTatGnq37+/5s6dK0m6/vrr9cQTT2jMmDGhIWGzZ8/W9ddfH0q4cAb+roLTdfTa8FlAvCPXozvCOced26+tqN6yzy/DME75TGsASAQRF9U333yz9u/fr4ceekhVVVUaPXq0lixZEprQpLKystPV6h/+8IdyuVz64Q9/qD179qhv3766/vrr9cgjj5j3LgAAgGnI9TCD6zTD0obk9VCK2yX/sRbtqzumwux0C1sGAOaKaqKyGTNmaMaMGV3+bNmyZZ1fICVFc+bM0Zw5c6J5KSQpLkjDiU73ByYQb8j1iCVfikdD+vbU1up6banyU1QDSGjMHALLMDkTAADJL9xsP7z90YKb93FfNYDERlENAAAA051pVFposrJ9zAAOILFRVMMWDIKFE3HbAwAc19FTvYUZwAEkOIpqWIYZj4E2fBYAJLUwz3Hntc8AvmP/ER0LtMawQQAQWxTVAAAAMN2ZBufk9fIpJ8OroCFtrzliSZsAIBYoqmELnkcJJ+KoB4DjXC4X91UDSAoU1QBgMWbCB5DMIjnHcV81gGRAUQ0AAADThTMo7dz2nuotVfRUA0hcFNWwBcNg4UTc9gDACSKZjPHcfh3Dv+tlMIsjgARFUQ3LkCuBNnwWAKDN0PyecrukQw3N2l/fZHdzACAqFNWwBR12AAAkuzMn+zSvR4Nze0iSNnNfNYAERVENAAAA00Q6GGd4+xDwTXu5rxpAYqKohmWY8RhowycBAI47v7CtqN64t87mlgBAdCiqYQsXU5UBAJDUwr3Va0RhliRpIz3VABIURTUAWIS5BAA4QaSzeHf0VH96oEH1xwKxaBIAxBRFNSzDjMdAGx4bA8AJwr2O2KenT4VZaZK4rxpAYqKohi3osQMAAB3O7982BHwDRTWABERRDQAW4WISACeIZixO6L7qPUxWBiDxUFTDMgx4BdrwWQDgBK4IriSO6N92X/UGZgAHkIAoqgEAAGCrEe3Dv7fXHNHR5labWwMAkaGoBgCL8Cg5AE4QzVyMeb18yu3pU9CQtlRxXzWAxEJRDcsw4zHQho8CACeI5DKiy+U6YQg4RTWAxEJRDVswYRMAADgRk5UBSFQU1QBgES4mAXCCaAfjMFkZgERFUQ3LMOIV6MCnAUDyi/RC4vntPdVbq+rV3BKMQYsAIDYoqmELJmwCAAAnGpCTrqx0rwKthrZV19vdHAAIG0U1AFiES0kAHCHK2RhdLpfOL2wfAs591QASCEU1LMOMx0AbPgsAnCCaeSRGDmgbAr5+N0U1gMRBUQ1bMGETAAD4vNEDsiVJ63fV2toOAIgERTUAWMTF1SQADtCdwTijirIlSVur63W0udWU9gBArFFUwzoMeQUk8VEA4AzRTEraLytNfXv51Bo0tGkfQ8ABJAaKatiC/joAAPB5LpdLo9qHgFfsoqgGkBgoqgHAIlxMAuAE3Z2McXRR+2Rl3FcNIEFQVMMyBoNeAUnM/g3AIaK8kthxX/X63bWmNQUAYomiGrZgwiYAANCVC/pnS5I+O9ioww3N9jYGAMJAUQ0AVuFaEgAH6O7ItKwMr87K7SGJ3moAiYGiGpZhyCvQxuDDAMABunMdMTQEnMnKACQAimrYgg47AACSkxnXDUcNaJ+sjJ5qAAmAohoALMLFJAAIz/Ge6lpG9wCIexTVsAwpEWjDZwGAE3RnUtJz+2XK63HpYEOzdh8+amKrAMB8FNWwBZN/AwCQnMzoWE7zenRuv0xJUgXPqwYQ5yiqYRmGb8HpOnpt+CgAwJmNbh8Cvq6y1tZ2AMCZUFTDFjynGgCA5NbdTD92UI4kaU3l4e43BgBiiKIaAAAApjFrMM6FA9uK6o176nS0udWkvQKA+SiqYRlGvMLpOnptDD4NAHBGA3LSlZ/pU0vQ0Ic8WgtAHIuqqJ43b56Ki4uVlpamCRMmaNWqVaddv7a2Vvfcc4/69esnn8+nc845R4sXL46qwQAAIPbI9eiu7t7p5XK5QkPAV3/GEHAA8SvionrhwoUqLS3VnDlztHbtWo0aNUpTpkxRTU1Nl+s3Nzdr0qRJ2rlzp1555RVt3bpVzz77rPr379/txgNAImEqASQKcj26w8yJSccO6i1JWktRDSCOpUS6wRNPPKE777xTd9xxhyRp/vz5WrRokRYsWKCZM2eetP6CBQt06NAhvffee/J6vZKk4uLi075GU1OTmpqaQt/7/X5JUiAQUCAQiLTJnXRs3939OIHZsTpxP8kWf46r8Dk5Vh1/aLa0tIT1/p0cq2hYGa9k/52Q650jJrEKnetau73fUf17SZLWfHZYTU3NcrvtuzrJcRUZ4hU+YhU+q2MV7uu4jAguJzY3NysjI0OvvPKKbrzxxtDy6dOnq7a2Vq+99tpJ20ydOlW9e/dWRkaGXnvtNfXt21e33nqrHnjgAXk8ni5f50c/+pEefvjhk5a/8MILysjICLe5iDP+Zmn2mhS5ZOjJEiYcgfPMrfCo6qhL95zXqnOyuK86kTU2NurWW29VXV2dMjMz7W6Oqcj16K6frvdob6NL3z23VcOyu3euawlKM1d5FDBc+sHoFuWnm9RIAAhDuPk+op7qAwcOqLW1Vfn5+Z2W5+fna8uWLV1us2PHDr3xxhu67bbbtHjxYm3fvl3f/e53FQgENGfOnC63mTVrlkpLS0Pf+/1+FRUVafLkyd3+4yUQCKisrEyTJk0KXU1H18yO1YEjTZq95i3J5dLUqVNNaGH84LgKn5NjNe+T91R19IgmTBivkrP6nHF9J8cqGlbGq6NXNRmR650lFrF6esd7UuMRjZ8wXpcOOfO57kxerP5AH+w8rJ7FF2jq2AEmtDA6HFeRIV7hI1bhszpW4eb7iId/RyoYDCovL0/PPPOMPB6Pxo4dqz179uhnP/vZKROtz+eTz+c7abnX6zUteGbuK9mZFStPyvHe6WSNPcdV+JwYq47ns3s8KRG9dyfGqjusiBe/j87I9YnPzFh1nOu8KZGd605lXHFvfbDzsCp2+3Xrxfb/PjmuIkO8wkeswmdVrMJ9jYiK6tzcXHk8HlVXV3daXl1drYKCgi636devn7xeb6fhX+eee66qqqrU3Nys1NTUSJqAJMBcTQAQv8j1iDfj2mcAX8NkZQDiVESzf6empmrs2LEqLy8PLQsGgyovL1dJSUmX21x66aXavn27gsFgaNm2bdvUr18/kiwAR2H2byQCcj26y8TJvyVJFw5sK6o/2d+gww3N5u4cAEwQ8SO1SktL9eyzz+p3v/udNm/erLvvvlsNDQ2hGUKnTZumWbNmhda/++67dejQId17773atm2bFi1apEcffVT33HOPee8CiYF5mQBJ5v/BCZiNXA8zmHUdMadHqob07SFJWltJbzWA+BPxPdU333yz9u/fr4ceekhVVVUaPXq0lixZEprQpLKyUm738Vq9qKhIf/vb33T//ffrggsuUP/+/XXvvffqgQceMO9dIKG46K4DgLhGrke8GTeotz7Z36BVOw/pmnPzz7wBAFgoqonKZsyYoRkzZnT5s2XLlp20rKSkRO+//340LwUAAGxArke0jBgMTRs/uLcWrt6llTsOmb5vAOiuiId/A9FixCvQJhZ/cAJA3DFxYNqEs3pLkj7aU6eGphbzdgwAJqCohuUY/A0AACIxICdD/bPT1Ro0mAUcQNyhqAYAizCfAAAniNVkjB291e/vOBibFwCAKFFUwzLMeAy04bMAwAlcJo9Nu3hwH0nSyk+5rxpAfKGohuXorAMAAJHq6Kn+cHetjja32twaADiOohoALML1JABOEKvBOAN7Z6ggM02BVoPnVQOIKxTVsAwzHgNt+CQAcAKzR6a5XC5d3N5bvZL7qgHEEYpqWM7se6wAAIAzTDir7b7q97mvGkAcoagGAIswnwAAJzBiOBvjhMFtPdUVu2p1LMB91QDiA0U1LMOMx0CbWP7BCQDxIhbXEQfn9lDfXj41twRVsas2Bq8AAJGjqIb16K0DAABRcLlcod7qFZ9wXzWA+EBRDQAWYfg3ACeI9VicS8/OlSS9u/1AjF8JAMJDUQ3LMOAVaMNnAYATuGJ0JfGy9qJ63a5a1R8LxOQ1ACASFNWwHJ11AAAksRhfOSzqnaFBfTLUGjS0ilnAAcQBimoAsAiPkwMAc3QMAX/nY4aAA7AfRTUs0zHjMfeVwvEY/w3AAWKZ7y/jvmoAcYSiGgAAAKax4rrhJUP6yOWSPq45omr/MQteEQBOjaIaACzCKA0AMEd2RqpG9s+SJC1nCDgAm1FUwzLto7+5rxSOZzD+G4ADxDrb82gtAPGCohoAAACm6ZhDJdYuby+ql28/YNlrAkBXKKoBwCKM0QAA81w4KEe+FLdq6pu0veaI3c0B4GAU1bAc95XC6ehQAeAEsc73aV6Pxg/uLUl6m/uqAdiIohoAAACmsfK64RVD+0qSlm2tsfBVAaAzimoAsArDNADAVFcPbyuqV356SI3NLTa3BoBTUVTDMsdn/wacjeHfAJwh9hl/SN+eGpCTruaWoFZ8cjDmrwcAXaGoBgAAgGmsvHDocrl09bA8SdKbDAEHYBOKagCwCKM0AMB8HUPA39yyn0drAbAFRTUsY7RPXeLivlI4HH/yAXACq9J9yVm5Sk1xa0/tUR6tBcAWFNUAAAAwjWHxpcP0VI8uPquPJIaAA7AHRTUAWIRBGgAQG1cPOz4EHACsRlENyzD7N9CGe/4AOIGV+b5jsrLVnx1S/bGAha8MABTVAAAAMJEd1w2Lc3tocG4PBVoNvbv9gPUNAOBoFNWwDH1zcLqOXhs+CwCcwOqJSTt6q/++mfuqAViLohrWY/w3AAAw2aTz8iVJ5Zur1dIatLk1AJyEohoAAACmsWvaiIuKc5Sd4dXhxoDWfHbYnkYAcCSKaliGyZngdB1DIfkoAHACqwempXjc+sLwtiHgSzdVW/zqAJyMohqWY/Q3AACIhcnnFUiSlm6q4mI+AMtQVAOARbigBACxdcU5ufKluLXr0FFtqaq3uzkAHIKiGpbhejHQgU8DgORn8eTfkqSM1BRdPrSvJGnpRoaAA7AGRTUsZ/UjNgAAgHNMPr9tFvCyzVU2twSAU1BUA4BFuJ4EwAnsvpf5muF5crukDXv82lN71Na2AHAGimpYhvlCgDZ8FgA4gcummST69PRp3KDekqSlG+mtBhB7FNWwHL11AAAglqaMaJsFfPFH+2xuCQAnoKgGAIvY1WsDAFaKh8E4143sJ0n6YOdh7atjCDiA2KKohoXiIc0C9uOTAMAJ7ByZVpCVpouKcyRJiz9iCDiA2IqqqJ43b56Ki4uVlpamCRMmaNWqVWFt9+KLL8rlcunGG2+M5mWRJOirA4D4R65HtOJl3oiO3urXP9xrc0sAJLuIi+qFCxeqtLRUc+bM0dq1azVq1ChNmTJFNTU1p91u586d+vd//3ddfvnlUTcWABIaV5SQIMj1SAZTR/aTyyWtq6zV7sONdjcHQBJLiXSDJ554QnfeeafuuOMOSdL8+fO1aNEiLViwQDNnzuxym9bWVt122216+OGH9c4776i2tva0r9HU1KSmpqbQ936/X5IUCAQUCAQibXInHdt3dz9OYHasmgMtJ+07WXBchc/Jsep4zExLS0tY79/JsYqGlfFK9t8Jud45YhErQ5Gd62IlJ92jiwblaNXOw/pLxR59+7Libu2P4yoyxCt8xCp8Vscq3NeJqKhubm7WmjVrNGvWrNAyt9utiRMnasWKFafc7sc//rHy8vL0rW99S++8884ZX2fu3Ll6+OGHT1q+dOlSZWRkRNLkUyorKzNlP05gVqyqGiUpRc3NzVq8eLEp+4w3HFfhc2KsDh30SHJp7bp1MirDHx/pxFh1hxXxamxM3l4vcr0zmRmrY0fbznXvvrtcn/UwbbdRGehyaZU8+sPyrSr0bzJlnxxXkSFe4SNW4bMqVuHm+4iK6gMHDqi1tVX5+fmdlufn52vLli1dbrN8+XL95je/UUVFRdivM2vWLJWWloa+9/v9Kioq0uTJk5WZmRlJk08SCARUVlamSZMmyev1dmtfyc7sWH1cc0Rz17+n1NRUTZ16tQktjB8cV+Fzcqye3/eBPqk/rAvHjNG17Y97OR0nxyoaVsaro1c1GZHrnSUWsXp0w1uqCzTp0ksv0/mF3ftddtf4I0360+NvqbLBpZElV6koJ/oLNhxXkSFe4SNW4bM6VuHm+4iHf0eivr5et99+u5599lnl5uaGvZ3P55PP5ztpudfrNS14Zu4r2ZkVq5SUtsPN7XIlbew5rsLnxFi52qfCdXs8Eb13J8aqO6yIF7+P48j1ycHUWLk69plie/z75Xh18Vl99N4nB/XXjft1z9Vnd3ufHFeRIV7hI1bhsypW4b5GREV1bm6uPB6PqqurOy2vrq5WQcHJvS6ffPKJdu7cqeuvvz60LBgMtr1wSoq2bt2qIUOGRNIEAAAQQ+R6dFe8zP7d4YZRhXrvk4N6dd0effeqIaELnABglohm/05NTdXYsWNVXl4eWhYMBlVeXq6SkpKT1h8+fLg++ugjVVRUhL5uuOEGXX311aqoqFBRUVH33wEAJAj+jkMiINcj2Vw7sp9SU9z6uOaINu5N3ls3ANgn4uHfpaWlmj59usaNG6fx48frySefVENDQ2iG0GnTpql///6aO3eu0tLSNGLEiE7bZ2dnS9JJy5H8Oq5cU1jA6eKtFwf4PHI9zOCKk+cIZqV7Nem8fC36cJ/+uHa3RvTPsrtJAJJMxEX1zTffrP379+uhhx5SVVWVRo8erSVLloQmNKmsrJTbHfHjrwEAQJwg16M74vG64VfH9NeiD/fpL+v36gdTz5XXw/ELwDxRTVQ2Y8YMzZgxo8ufLVu27LTbPvfcc9G8JAAkvHjptQHCQa5HMrninL7q0yNVB440652P9+sLw/PPvBEAhInLdLCMEbp2TWEBZ4vHXhwAMFs83e7l9bh1/ahCSdKf1u6xuTUAkg1FNQAAAEwTr/NGfPXC/pKksk3V8h8L2NwaAMmEohoALBJPvTYA4DQj+2fp7LyeamoJavGH++xuDoAkQlENyzD7N9DGiNduHAAwUbzle5fLpa9dOECStHD1LptbAyCZUFQDAADARPF74fBrY/srxe3Suspaba2qt7s5AJIERTUAWCTeem0AwGnyeqXpmnPzJEl/WFVpc2sAJAuKalgmNPzb3mYAAAALxOtjBL8xfqAk6c/r9uhYoNXm1gBIBhTVAAAAME28TxtxxdC+6p+drrqjAf1tY5XdzQGQBCiqAcAi8dprAwBO4nG7dNO4tgnLGAIOwAwU1bCM0T5xCfeVwunivRcHAMwQz/n+H8YVye2S3t9xSJ8eaLC7OQASHEU1AAAATJMI1w0Ls9N15Tl9JUkvrPzM5tYASHQU1QBgkXjutQEAs8X7Ke8fLx4kSVr4wS41NrfY3BoAiYyiGpY5Pvt3vKdZILaMhOjHAYDkdtWwPA3snSH/sRa9um6v3c0BkMAoqgEAAGAaI0EmjvC4XZpW0tZb/bv3diZMuwHEH4pqAAAAmC4Rbnm5aVyR0r0eba2u1/s7DtndHAAJiqIalkuEJAvEEp0hABAfstK9+uqF/SW19VYDQDQoqgEAAGCaRLtuOP2SYknS0k1V2n240d7GAEhIFNUAYBEXwzQAOEpinPPOye+lS4b0UdCQ/t8KHq8FIHIU1bDM8dm/AWdj+DeAZJaI57hvXz5YkvTCykr5jwVsbg2ARENRDQAAAEe76pw8nZPfU0eaWvTCykq7mwMgwVBUA4BFGKUBwEkS6Y4Xt9ul71wxRJK0YPmnampptblFABIJRTUsY7RPXcJ9pXC6BBwZCQBhS9TnPd8wqlAFmWmqqW/Sa+v22t0cAAmEohoAAACOl5ri1rcua7u3+ldvf6JgMDEvDgCwHkU1LJOgF64B03QM0kjUXhwAiEQijkv7xvgi9UpL0Sf7G/T3zdV2NwdAgqCoBgAAgGkS+bJhrzSvbr94kCTpqTe2cxEUQFgoqgHAIonYawMATvOtywYrI9Wjj/bU6Y0tNXY3B0ACoKiGZTqu9TJPGZyOfg8ATpCoE5P26enT7SVtvdX/Vf4xvdUAzoiiGgAAAOZJghr0O5efpXSvRx/urtObW+mtBnB6FNUAYJFE7bUBAKfp09OnaZe091b/nd5qAKdHUQ3LdCQk6go4Hn+bAXCARE/3Hb3V6+mtBnAGFNUAAAAwTbJcN+zT06dp7fdWP75kK8+tBnBKFNUAYJFE77UBAKe568oh6pWWoi1V9frLh/vsbg6AOEVRDcuEZv+mtIDDGUnTjwMAp5YMt3vl9EjV3VcNkST9ony7WoI2NwhAXKKoBgAAgGmSbVKvOy4ZrPxMn/bUHtPy6iS4UgDAdBTVAGCRZOi1AQCnSU/16P6J50iSlu52q/5YwOYWAYg3FNWwTMeFawoLOF2SdeIAQJeS6Xavr48doLNye6ihxaX5b39qd3MAxBmKagAAAJgmGa8bpnjc+v6UoZKk3773mXYeaLC5RQDiCUU1AFgmeXptAMBpvjCsr4ZnBRVoNfQfizbZ3RwAcYSiGhZqu3ZNWQGnS8ZeHAD4vGS73cvlcukrxUGluF36++YaLdtaY3eTAMQJimoAAACYJpnnjSjIkG6/eKAk6cevb1Izz9gCIIpqALBMsvXaAIATzbjqLPXpkaod+xv023eZtAwARTUsdHz2byoLOFsy9+IAQLLLTPfqgWuHS5Ke/PvH2nWo0eYWAbAbRTUAAABMYzhg5oibxg7QxWf11tFAq3746gYZXC0FHI2iGgAswhgNAEgOLpdLj35lpFJT3Hpr23793/q9djcJgI0oqmGZjmu4FBZwOif04gBAst/tdVbfnvrXL5wtSfrxXzbpcEOzzS0CYJeoiup58+apuLhYaWlpmjBhglatWnXKdZ999lldfvnlysnJUU5OjiZOnHja9QEAgP3I9YiWk0ZCf+eKITonv6cONjTrkcWb7W4OAJtEXFQvXLhQpaWlmjNnjtauXatRo0ZpypQpqqnp+ll9y5Yt0y233KI333xTK1asUFFRkSZPnqw9e/Z0u/EAkEiSvdcGyYNcDzM4YWLS1BS35n71Arlc0itrdqtsU7XdTQJgg5RIN3jiiSd055136o477pAkzZ8/X4sWLdKCBQs0c+bMk9Z//vnnO33/61//Wn/84x9VXl6uadOmdfkaTU1NampqCn3v9/slSYFAQIFAINImd9KxfXf34wRmxyoQaGn/n5F08ee4Cp+TYxUMtnXftLS0hvX+nRyraFgZr2T/nZDrnSOWsWoJBBQIRPynZtw6VawuKOypb14ySL959zPN/OOHGll4ifr0SLWjiXGFz2H4iFX4rI5VuK/jMiKYrrC5uVkZGRl65ZVXdOONN4aWT58+XbW1tXrttdfOuI/6+nrl5eXp5Zdf1pe+9KUu1/nRj36khx9++KTlL7zwgjIyMsJtLuLMJ37pvzemKC/N0INjWu1uDmC532x168NDbt00uFWXFThofGQSamxs1K233qq6ujplZmba3RxTkevRXf/2vkcthktzLmxRb5/drbFGICj9/EOP9h11aWROUN8aFmR0EpAEws33EV0+PHDggFpbW5Wfn99peX5+vrZs2RLWPh544AEVFhZq4sSJp1xn1qxZKi0tDX3v9/tDQ8m6+8dLIBBQWVmZJk2aJK/X2619JTuzY/XBzsP6740fqGfPHpo69TITWhg/OK7C5+RYLaqr0IeHajRixAhNHV90xvWdHKtoWBmvjl7VZESud5ZYxOp7H/xdagnqmi98Qf2y0kzZZzw4U6zOGVuvr/3qfX102K1j/Ubqaxf2t6GV8YPPYfiIVfisjlW4+d7SMTmPPfaYXnzxRS1btkxpaac+yfp8Pvl8J1/a9Hq9pgXPzH0lO7Ni5fF4JLXdY5Wssee4Cp8TY+V2tU1j4fZ4InrvToxVd1gRL34fp0auT0ymxqp9IE5KSkpSxv9UsbpgYG/dP+kcPb5kq/5j8VZdcnaeBvZh1AWfw/ARq/BZFatwXyOiicpyc3Pl8XhUXd15Eobq6moVFBScdtv//M//1GOPPaalS5fqggsuiORlAQCARcj1QPT++Yohuqg4R0eaWnTPC2vV1MLtboATRFRUp6amauzYsSovLw8tCwaDKi8vV0lJySm3e/zxx/WTn/xES5Ys0bhx46JvLZKCE2YDBbrCoY9EQK6HWZx4zvO4Xfqvb4xRToZXH+2p0yOLeMwW4AQRP1KrtLRUzz77rH73u99p8+bNuvvuu9XQ0BCaIXTatGmaNWtWaP2f/vSnmj17thYsWKDi4mJVVVWpqqpKR44cMe9dICEwLRPQzkkPcUVCItejOwyHZ/zC7HQ9cfNoSdL/W/GZXv9wr70NAhBzEd9TffPNN2v//v166KGHVFVVpdGjR2vJkiWhCU0qKyvldh+v1X/5y1+qublZX//61zvtZ86cOfrRj37UvdYDAADTkeuB7rl6WJ6+e9UQPb3sE83840c6vzBLg3N72N0sADES1URlM2bM0IwZM7r82bJlyzp9v3PnzmheAknMgaPBAEnOHAqJxEWuR3e5HJ7xSyedo9WfHdaqTw/pn/93tf549yXqlcYkVEAyinj4NxAtRrwCbfgoAEhm5Ps2KR63/ueWMcrP9Glb9RHdv7BCrUGCAyQjimoAAAAgBvIy0/TM7ePkS3Hr75tr9J9Lt9rdJAAxQFENyzEEFk7l9KGQAJyFfN9mVFG2Hv962yPmfrnsE/153W6bWwTAbBTVsIzTZwMFOjA0EkAy4xR3si+P7q/vXjVEkvTAKx/p/R0HbW4RADNRVAMAAAAx9u+Th+mL5xeouTWoO3+3Wpv3+e1uEgCTUFTDcgyBhWNx6ANwEE55nbndLj35jdEaX9xb9U0tmr5glXYfbrS7WQBMQFEN6zAeDJAkGYz/BpDEOMedWprXo2enj9Ow/F6qqW/StAWrdKih2e5mAegmimoAAADAIlnpXj33zYtUmJWmHfsbdNuvV6q2kcIaSGQU1bAcs4HCqTj0ATgKJ71T6peVrv/99gTl9vRp8z6//vE3K1XXGLC7WQCiRFENyzAYDGjDZwFAMuMcF54hfXvqD3dOUJ8eqdqwx69pC1bKf4zCGkhEFNUAAACADYbm99ILd16snAyv1u+u0+2/XqnD3GMNJByKaliGeUvgdK72ex/4LABwAp72EZ5hBb30/LePF9b/8KsVqqo7ZnezAESAohoAAACm4cJh5M4rzNTLd5WoIDNNH9cc0dfnv6edBxrsbhaAMFFUAwAAADY7O6+XXrm7RINze2j34aP6+vwVWr+r1u5mAQgDRTUsY7RPXeJi+m84VMeRTycOACcg3UduQE6GXvrnEp3XL1MHjjTp5mdW6K8f7bO7WQDOgKIaAAAAiBN9e/n00l0l+sLwPB0LBHX382s1783tMhhXD8QtimoAsAi9NgCAcPT0pejZaeN0x6XFkqSf/W2r/u3l9Tra3GpvwwB0iaIalum4wEpdAaejtwGAE5Dvu8fjdmnO9efrx18+X26X9Ke1e/SVp99lAjMgDlFUAwAAwBRcNDTftJJi/f5bE5TbM1Vbqup1/VPLtWRDld3NAnACimoAsAi9NgCAaFxydq5e/5fLNW5QjuqbWnTX79fo4b9s1LEAw8GBeEBRDct0XLvmvlIAAJIfT/swV0FWmv7wnYt15+WDJUm/fXenrn9quTburbO5ZQAoqgEAAGAKRn/Hltfj1oPXnaff/tNFyu3p08c1R3TjvHf1y2WfqDVI8AG7UFQDgEXotQEAmOHq4Xn6232Xa/J5+Qq0Gvrpki366tPv0msN2ISiGpbpmLyEugJOR08OgGR14umNdB9bfXr69Kvbx+rxr12gXmkpWr+7Tjf8z7t6dPFmNTa32N08wFEoqgEAAIAE5HK59A8XFam89EpdN7KfWoOGnnl7hyb/4m0t3VjFbOyARSiqAcAi9NoAcBJGplknLzNN8267UL+ZPk79s9O1+/BRfed/1+jWZ1cyJBywAEU1LBOa/ZvSAg5niJ4DAMmJnlF7XXNuvpbef4W+e9UQpaa4tWLHQX3pqeX6/ivrVe0/ZnfzgKRFUQ0AAAAkiR6+FH3/i8P1xr9dqetHFcowpJdW79YVj7+pH/9lk2rqKa4Bs1FUw3IMB4NjcewDcBBGptlrQE6GnrpljP549yUaNyhHTS1BLXj3U13x+Jv6j9c3aX99k91NBJIGRTWsw4gwQBKzfwNIXpze4s/YQTl6+a4S/e+3xuvCgdk6Fgjq18s/1eWPv6EfvvqRPj3QYHcTgYSXYncDAAAAAMSOy+XS5UP76rKzc/XWtv36xd8/1vpdtfr9+5V6fmWlJp6brzsvP0sXFefIxZBCIGIU1bAcp2o4FUMhATgKp7y443K5dNWwPF15Tl+9v+OQfv3ODpVvqVHZpmqVbarWef0ydcuEgfry6EJlpnntbi6QMCiqYRlmPAba8EkAkKy4vSUxuFwulQzpo5IhfbS95oh+s/xT/Wntbm3a59fsVzfo0UWbdf2ofvrG+IEaU5RN7zVwBhTVAAAAgEOdnddTc786Ug98cZj+tHaP/rCqUh/XHNFLq3frpdW7dVZuD90wulA3jCrUWX172t1cIC5RVMN6XO2EQ3HoA3ASznmJJTsjVd+8bLDuuLRYaz47rBdWVWrRh/u040CDnvz7x3ry7x9rZP8s3TCqUF8cUaCi3hl2NxmIGxTVsAxDwoA2fBYAJCtu9Up8LpdL44p7a1xxbz18w/kq21St1yr2avn2A/poT50+2lOnRxZv1vCCXpp0Xr4mnZevEYVZcru5igLnoqgGAAAAcJJeaV599cIB+uqFA3TwSJMWf7RPr3+4Tx/sPKQtVfXaUlWvp97YrvxMn646J0+XDs3VpUP6qE9Pn91NByxFUQ3LcR0TTsWxD8BJOOcllz49fbq9pFi3lxTrcEOz3tzaNmv4W9v2q9rfpIWrd2nh6l2SpPP6ZarkrBx5D7t0+bEW9fYykziSG0U1LMOQV6ANwyMBJCtyvTPk9EgN9WAfC7Tq/R0H9e72A3rn4wPaUlWvTfv82rTPL8mjZx59Q8MKMjV2ULbGDeqtsYNyNCAnnRnFkVQoqgEAAABEJc3r0VXD8nTVsDxJ0v76Jr33yQG9s22/3ty4WwebXNq8z6/N+/z6/fuVkqS8Xj6N7J+l8/tn6fzCTI3on6XCrDQKbSQsimpYjvMlnIpjH4CTUCA5U99ePn15dH9NPT9Pi32fadzl1+jDPfVa/dlhrfnssDburVNNfZPKt9SofEtNaLucDK/OL8zSeYWZOjuvZ+grM42h44h/FNWwDCPCgDYMjwQAOEVeL5+uHdlT147sJ0k6FmjVhj112rjXr41767Rhj1/bqut1uDGg5dsPaPn2A522z8/0aWheL52d11ND+vbQwD49NLB3hvpnpys1xW3HWwJOQlENAAAAwBJpXk/okV0dmlpata3qiDbsrdPWqnptrzmij2vqVe1vCn19vth2u6R+Weka2Duj7atPhgbkpKsgM00FWWnKz0xTmtdj9duDQ1FUw3IMBoNTuTj6ATgIZzyEy5fi0cgBWRo5IKvTcv+xgLbXHNH2miP6pOaIPtl/RLsOHVXloUYdDbRqT+1R7ak9qhU7Dna535wMrwqy0lWQ6Wv/N019e/nUp2eqcnumqnePtv/38qVwuwK6haIaljEY8woAQFIj1cNMmWleXTgwRxcOzOm03DAM7T/SpF2HGlV5qFGVB9sK7d2HG1XtP6Z9dcfU1BLU4caADjcGtHnf6V8n1eNW7x6p6tMzVX16+tSnR6qy0r3KTPe2/ZuW0vn79n97pHooxiEpyqJ63rx5+tnPfqaqqiqNGjVKTz31lMaPH3/K9V9++WXNnj1bO3fu1NChQ/XTn/5UU6dOjbrRAAAgtsj1AOKVy+VSXq805fVK09hBvU/6uWEYqjsa0L66Y6ryH1N1XVuhXe0/pgNHmnTgSLMONTTr4JEmNTS3qrk1qCp/27qR8LhdykxLUc+0FPVITVFGqkc9fO3/pqYow9f+b2qKevg8nf5N93qU5nXLl+KRR0EdOCZV+4+pZ7ohX4pHvhS33G4K9kQRcVG9cOFClZaWav78+ZowYYKefPJJTZkyRVu3blVeXt5J67/33nu65ZZbNHfuXH3pS1/SCy+8oBtvvFFr167ViBEjTHkTSCxc0YNTcegjUZDrYQbOebCLy+VSdkaqsjNSdW6/zNOueyzQqoPtBfbBI82h/9cdDch/LKC6oy3yHw2Evu/4f6DVUGvQCPWGd1+KfrLu7U5LUj1u+VLc8rUX36F/U9xK9biV4nEpxeNWqselFHfb9ycu97pd8nrcbf9vX8eb4pK3fV3vCcs9bpdcrrYLBR6XS+72fz3u4/93u3XSMo/bJfcJPzvTdi655HK33R7icrnkdrXdHudytZ0z3K62m+Xcro5liXEicRkRjsmdMGGCLrroIv3P//yPJCkYDKqoqEj/8i//opkzZ560/s0336yGhga9/vrroWUXX3yxRo8erfnz53f5Gk1NTWpqagp97/f7VVRUpAMHDigz8/QfjNM52NCs7z6/Todra5WTnZ0wvyS7GIZhaqwONwa040CDLhyYrYV3nrq3IxEFAgGVlZVp0qRJ8np59MPpODlWD766US+t2aPCrDT1y0o74/pmfwaTXbjxmvnFczS6KLtbr+X3+5Wbm6u6urpu5aV4lci5XpLuf2m9Nu6s4rMTBrPPM62GoYpddZKk9bO/oIzU5LnT0Mn5KxrJHC/DMHQsEFRde5Hd0NyqxuZWNTa1qrG55fj3zS1qbG5t+77p+PdHmlvUFAjqWCCoppZWNbUE1XisWS2GW63cQ3GSE4ttl0sygkF5PJ62gryj+FZ7gd6+7q3ji3TfNWd3+7XDzfcRnemam5u1Zs0azZo1K7TM7XZr4sSJWrFiRZfbrFixQqWlpZ2WTZkyRa+++uopX2fu3Ll6+OGHT1q+dOlSZWRkRNLkTmqbpLW7UiS59Gl9XdT7cRbzYxVsOKTFixebus94UVZWZncTEoYTY+WvdknyaG/dMe2tC3eIGeeryJw5XuXvrNDe7O790dLY2Nit7eNZoud6SVq93aOqo3x2wmd+rHqkGCovWypPEl7TcGL+6g6nxcsrKbv9KySl/avHmbZuVashtQSlwOe+WoJSwJBagq627w2pNSgFjfb/t38F2/9tCUpBwxVa3ho8vs5JX0EpqLY5EQy5FGzfjyGF/t/x81P+/ww/N7oxdaFh6HMXG1xqaQmedptNW7drcdO2qF+zQ7j5PqKi+sCBA2ptbVV+fn6n5fn5+dqyZUuX21RVVXW5flVV1SlfZ9asWZ2Sc8fV68mTJ3fr6vWxQKuyh1Rr/fr1GjVqlDweptk/ndbWVtNj5XG7NGFwb/VKS54r11JyX401m5NjNbElqJs+PaSjza1hrR+Lz2AyCzdeYwdlK7enr1uv5ff7u7V9PEv0XC9JPc6q1nsfrOWzE4ZYnWfOL8zUgJx00/YXD5ycv6JBvMLnhFgZRttweUPtRbZhtBftRqgAl4y2Yt5oX96+3YnfNzcH9PY77+iyyy6TJyWlbTvjxP20rZed7lXfXt3L9VL4+T4uKxufzyef7+QgeL3ebh1oXq9XUy8olHZXaOoFhUl70JolEAgQqwh19xh1EifGyuuVrjmvX9jr8xmMjJXx4vfRfbHK9ZJ05fB8Neww+OyEgfNM5JyYv7qDeIWPWJ1ZIBBQb59U3DfTkliF+xruSHaam5srj8ej6urqTsurq6tVUFDQ5TYFBQURrQ8AAOxDrgcAIDIRFdWpqakaO3asysvLQ8uCwaDKy8tVUlLS5TYlJSWd1pfa7q041foAAMA+5HoAACIT8fDv0tJSTZ8+XePGjdP48eP15JNPqqGhQXfccYckadq0aerfv7/mzp0rSbr33nt15ZVX6uc//7muu+46vfjii1q9erWeeeYZc98JAAAwBbkeAIDwRVxU33zzzdq/f78eeughVVVVafTo0VqyZElogpLKykq53cc7wC+55BK98MIL+uEPf6gf/OAHGjp0qF599VWeWwkAQJwi1wMAEL6oJiqbMWOGZsyY0eXPli1bdtKym266STfddFM0LwUAAGxArgcAIDwR3VMNAAAAAACOo6gGAAAAACBKFNUAAAAAAESJohoAAAAAgChRVAMAAAAAEKWoZv+2mmEYkiS/39/tfQUCATU2Nsrv98vr9XZ7f8mMWIWPWIWPWIWPWEXGynh15KOO/ITuI9fbg1iFj1hFhniFj1iFz+pYhZvvE6Korq+vlyQVFRXZ3BIAAI6rr69XVlaW3c1ICuR6AEC8OlO+dxkJcJk9GAxq79696tWrl1wuV7f25ff7VVRUpF27dikzM9OkFiYnYhU+YhU+YhU+YhUZK+NlGIbq6+tVWFgot5s7qcxArrcHsQofsYoM8QofsQqf1bEKN98nRE+12+3WgAEDTN1nZmYmB22YiFX4iFX4iFX4iFVkrIoXPdTmItfbi1iFj1hFhniFj1iFz8pYhZPvubwOAAAAAECUKKoBAAAAAIiS44pqn8+nOXPmyOfz2d2UuEeswkeswkeswkesIkO80IFjIXzEKnzEKjLEK3zEKnzxGquEmKgMAAAAAIB45LieagAAAAAAzEJRDQAAAABAlCiqAQAAAACIEkU1AAAAAABRoqgGAAAAACBKjiqq582bp+LiYqWlpWnChAlatWqV3U2y3Ny5c3XRRRepV69eysvL04033qitW7d2WufYsWO655571KdPH/Xs2VNf+9rXVF1d3WmdyspKXXfddcrIyFBeXp6+973vqaWlxcq3YrnHHntMLpdL9913X2gZsTpuz549+sd//Ef16dNH6enpGjlypFavXh36uWEYeuihh9SvXz+lp6dr4sSJ+vjjjzvt49ChQ7rtttuUmZmp7Oxsfetb39KRI0esfisx1draqtmzZ2vw4MFKT0/XkCFD9JOf/EQnPojBybF6++23df3116uwsFAul0uvvvpqp5+bFZsPP/xQl19+udLS0lRUVKTHH3881m8NFnJ6vifXR49cf3rk+vCR708tKXO94RAvvviikZqaaixYsMDYuHGjceeddxrZ2dlGdXW13U2z1JQpU4zf/va3xoYNG4yKigpj6tSpxsCBA40jR46E1rnrrruMoqIio7y83Fi9erVx8cUXG5dcckno5y0tLcaIESOMiRMnGuvWrTMWL15s5ObmGrNmzbLjLVli1apVRnFxsXHBBRcY9957b2g5sWpz6NAhY9CgQcY//dM/GStXrjR27Nhh/O1vfzO2b98eWuexxx4zsrKyjFdffdVYv369ccMNNxiDBw82jh49Glrni1/8ojFq1Cjj/fffN9555x3j7LPPNm655RY73lLMPPLII0afPn2M119/3fj000+Nl19+2ejZs6fxX//1X6F1nByrxYsXGw8++KDxpz/9yZBk/PnPf+70czNiU1dXZ+Tn5xu33XabsWHDBuMPf/iDkZ6ebvzqV7+y6m0ihsj35PpoketPj1wfGfL9qSVjrndMUT1+/HjjnnvuCX3f2tpqFBYWGnPnzrWxVfarqakxJBlvvfWWYRiGUVtba3i9XuPll18OrbN582ZDkrFixQrDMNo+CG6326iqqgqt88tf/tLIzMw0mpqarH0DFqivrzeGDh1qlJWVGVdeeWUo0RKr4x544AHjsssuO+XPg8GgUVBQYPzsZz8LLautrTV8Pp/xhz/8wTAMw9i0aZMhyfjggw9C6/z1r381XC6XsWfPntg13mLXXXed8c1vfrPTsq9+9avGbbfdZhgGsTrR5xOtWbF5+umnjZycnE6fwQceeMAYNmxYjN8RrEC+Pxm5/szI9WdGro8M+T48yZLrHTH8u7m5WWvWrNHEiRNDy9xutyZOnKgVK1bY2DL71dXVSZJ69+4tSVqzZo0CgUCnWA0fPlwDBw4MxWrFihUaOXKk8vPzQ+tMmTJFfr9fGzdutLD11rjnnnt03XXXdYqJRKxO9H//938aN26cbrrpJuXl5WnMmDF69tlnQz//9NNPVVVV1SlWWVlZmjBhQqdYZWdna9y4caF1Jk6cKLfbrZUrV1r3ZmLskksuUXl5ubZt2yZJWr9+vZYvX65rr71WErE6HbNis2LFCl1xxRVKTU0NrTNlyhRt3bpVhw8ftujdIBbI910j158Zuf7MyPWRId9HJ1FzfYrpe4xDBw4cUGtra6eTnSTl5+dry5YtNrXKfsFgUPfdd58uvfRSjRgxQpJUVVWl1NRUZWdnd1o3Pz9fVVVVoXW6imXHz5LJiy++qLVr1+qDDz446WfE6rgdO3bol7/8pUpLS/WDH/xAH3zwgf71X/9Vqampmj59eui9dhWLE2OVl5fX6ecpKSnq3bt3UsVq5syZ8vv9Gj58uDwej1pbW/XII4/otttukyRidRpmxaaqqkqDBw8+aR8dP8vJyYlJ+xF75PuTkevPjFwfHnJ9ZMj30UnUXO+Iohpdu+eee7RhwwYtX77c7qbEpV27dunee+9VWVmZ0tLS7G5OXAsGgxo3bpweffRRSdKYMWO0YcMGzZ8/X9OnT7e5dfHlpZde0vPPP68XXnhB559/vioqKnTfffepsLCQWAEwHbn+9Mj14SPXR4Z87yyOGP6dm5srj8dz0kyN1dXVKigosKlV9poxY4Zef/11vfnmmxowYEBoeUFBgZqbm1VbW9tp/RNjVVBQ0GUsO36WLNasWaOamhpdeOGFSklJUUpKit566y3993//t1JSUpSfn0+s2vXr10/nnXdep2XnnnuuKisrJR1/r6f7DBYUFKimpqbTz1taWnTo0KGkitX3vvc9zZw5U9/4xjc0cuRI3X777br//vs1d+5cScTqdMyKjVM+l05Evu+MXH9m5PrwkesjQ76PTqLmekcU1ampqRo7dqzKy8tDy4LBoMrLy1VSUmJjy6xnGIZmzJihP//5z3rjjTdOGhYxduxYeb3eTrHaunWrKisrQ7EqKSnRRx991OlgLisrU2Zm5kkn20R2zTXX6KOPPlJFRUXoa9y4cbrttttC/ydWbS699NKTHteybds2DRo0SJI0ePBgFRQUdIqV3+/XypUrO8WqtrZWa9asCa3zxhtvKBgMasKECRa8C2s0NjbK7e586vV4PAoGg5KI1emYFZuSkhK9/fbbCgQCoXXKyso0bNgwhn4nOPJ9G3J9+Mj14SPXR4Z8H52EzfUxmf4sDr344ouGz+cznnvuOWPTpk3Gd77zHSM7O7vTTI1OcPfddxtZWVnGsmXLjH379oW+GhsbQ+vcddddxsCBA4033njDWL16tVFSUmKUlJSEft7x6IjJkycbFRUVxpIlS4y+ffsm3aMjunLijKCGQaw6rFq1ykhJSTEeeeQR4+OPPzaef/55IyMjw/j9738fWuexxx4zsrOzjddee8348MMPjS9/+ctdPh5hzJgxxsqVK43ly5cbQ4cOTfjHRnze9OnTjf79+4cesfGnP/3JyM3NNb7//e+H1nFyrOrr641169YZ69atMyQZTzzxhLFu3Trjs88+MwzDnNjU1tYa+fn5xu23325s2LDBePHFF42MjAweqZUkyPfk+u4i13eNXB8Z8v2pJWOud0xRbRiG8dRTTxkDBw40UlNTjfHjxxvvv/++3U2ynKQuv37729+G1jl69Kjx3e9+18jJyTEyMjKMr3zlK8a+ffs67Wfnzp3Gtddea6Snpxu5ubnGv/3bvxmBQMDid2O9zydaYnXcX/7yF2PEiBGGz+czhg8fbjzzzDOdfh4MBo3Zs2cb+fn5hs/nM6655hpj69atndY5ePCgccsttxg9e/Y0MjMzjTvuuMOor6+38m3EnN/vN+69915j4MCBRlpamnHWWWcZDz74YKdHPjg5Vm+++WaX56jp06cbhmFebNavX29cdtllhs/nM/r372889thjVr1FWMDp+Z5c3z3k+lMj14ePfH9qyZjrXYZhGOb3fwMAAAAAkPwccU81AAAAAACxQFENAAAAAECUKKoBAAAAAIgSRTUAAAAAAFGiqAYAAAAAIEoU1QAAAAAARImiGgAAAACAKFFUAwAAAAAQJYpqAAAAAACiRFENAAAAAECUKKoBAAAAAIjS/wfYHcBb7rdrHAAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# create a square and exponential function\n", "square = (ts.shift(dim, -256)) @ (ts.shift(dim, 2*256) @ ts.full(shape, 1.0))\n", "exp = ts.shift(dim, -256) @ ts.exp(grid, -10.0, 0.0)\n", "\n", "# visualize the functions\n", "fig, ax = plt.subplots(ncols=2, figsize=(12, 4))\n", "ax[0].plot(square.to_tensor())\n", "ax[0].grid()\n", "ax[1].plot(exp.to_tensor())\n", "ax[1].grid()\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "942f3741-20ed-4509-80c9-ebe7e0ffa63d", "metadata": {}, "source": [ "Having defined the grid we can define two simple function that are textbook examples for explaining a\n", "convolution. On the left we have a simple square function. On the right is a exponential decay of some kind." ] }, { "cell_type": "code", "execution_count": 4, "id": "4e98676c-9d58-4f26-af48-8502f8b66d6f", "metadata": {}, "outputs": [ { "data": { "image/png": "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7US8pUuXmv/7v/9r/uMf/zAB8/nnn+/2/N13322mpaWZL7zwgvnhhx+aX/va18ySkhKzvb29q82FF15onn766eaaNWvMt956yzz11FPNb33rW13PNzU1mXl5eebs2bPNTZs2mU8//bSZkJBg/u53v+urtxmRvqhv5syZY1544YXdPkv19fXd2qhveseMGTPMxx57zNy0aZO5ceNG8+KLLzaLi4vNlpaWrjahOJbt3r3bTExMNBcsWGBu3rzZfPDBB0273W4uW7as19+jigTTNMeNG2fOnTu367Hf7zcLCwvNRYsWWZgqut1+++3m6aef3uNzjY2NpsPhMJ977rmubVu2bDEBc/Xq1aZpBg+cNpvNrKys7Grz8MMPm6mpqabH4+nV7NHu87+IAoGAmZ+fb953331d2xobG02Xy2U+/fTTpmma5ubNm03AXLduXVebV1991TQMwzx48KBpmqb529/+1szIyOjWPz/5yU/MoUOH9vI7ih5HKhJmzpx5xK9R3/Sd6upqEzBXrVplmmbojmU333yzOXLkyG6vdfnll5szZszo7bdkxvzphs7OTtavX8/UqVO7ttlsNqZOncrq1astTBb9duzYQWFhIYMGDWL27Nns27cPgPXr1+P1erv1ybBhwyguLu7qk9WrVzN69Gjy8vK62syYMQO3280nn3zSt28kypWVlVFZWdmtP9LS0hg/fny3/khPT+fss8/uajN16lRsNhtr167tanPeeefhdDq72syYMYNt27bR0NDQR+8mOr3xxhvk5uYydOhQrr32Wurq6rqeU9/0naamJgAyMzOB0B3LVq9e3W0fh9r0xe+omC8Samtr8fv93ToIIC8vj8rKSotSRb/x48fz+OOPs2zZMh5++GHKyso499xzaW5uprKyEqfTSXp6erev+WyfVFZW9thnh56T0Dn0/TzaZ6SyspLc3Nxuz8fFxZGZmak+62UXXnghTzzxBCtWrOCee+5h1apVXHTRRfj9fkB901cCgQDz589n0qRJjBo1CiBkx7IjtXG73bS3t/fG2+kSkUtFS+S76KKLuv592mmnMX78eAYMGMCzzz5LQkKChclEIssVV1zR9e/Ro0dz2mmnccopp/DGG28wZcoUC5PFlrlz57Jp0ybefvttq6OEVMyPJGRnZ2O32w+72rSqqor8/HyLUsWe9PR0hgwZws6dO8nPz6ezs5PGxsZubT7bJ/n5+T322aHnJHQOfT+P9hnJz8+nurq62/M+n4/6+nr1WR8bNGgQ2dnZ7Ny5E1Df9IV58+bxyiuvsHLlSvr379+1PVTHsiO1SU1N7fU/qmK+SHA6nYwZM4YVK1Z0bQsEAqxYsYKJEydamCy2tLS0sGvXLgoKChgzZgwOh6Nbn2zbto19+/Z19cnEiRP5+OOPux38SktLSU1NZcSIEX2eP5qVlJSQn5/frT/cbjdr167t1h+NjY2sX7++q83rr79OIBBg/PjxXW3efPNNvF5vV5vS0lKGDh1KRkZGH72b6HfgwAHq6uooKCgA1De9yTRN5s2bx/PPP8/rr79OSUlJt+dDdSybOHFit30catMnv6N6/dLICPDMM8+YLpfLfPzxx83Nmzeb11xzjZment7talMJrR//+MfmG2+8YZaVlZnvvPOOOXXqVDM7O9usrq42TTN421BxcbH5+uuvm++//745ceJEc+LEiV1ff+i2oenTp5sbN240ly1bZubk5OgWyBPU3NxsbtiwwdywYYMJmPfff7+5YcMGc+/evaZpBm+BTE9PN1988UXzo48+MmfOnNnjLZBnnnmmuXbtWvPtt982Bw8e3O02u8bGRjMvL8/89re/bW7atMl85plnzMTERN1m9wWO1jfNzc3mf//3f5urV682y8rKzNdee80866yzzMGDB5sdHR1d+1Df9I5rr73WTEtLM994441ut6C2tbV1tQnFsezQLZA33XSTuWXLFnPJkiW6BbKvPfjgg2ZxcbHpdDrNcePGmWvWrLE6UlS7/PLLzYKCAtPpdJr9+vUzL7/8cnPnzp1dz7e3t5vXXXedmZGRYSYmJppf//rXzYqKim772LNnj3nRRReZCQkJZnZ2tvnjH//Y9Hq9ff1WosLKlStN4LD/5syZY5pm8DbIW2+91czLyzNdLpc5ZcoUc9u2bd32UVdXZ37rW98yk5OTzdTUVPN73/ue2dzc3K3Nhx9+aE6ePNl0uVxmv379zLvvvruv3mLEOlrftLW1mdOnTzdzcnJMh8NhDhgwwLz66qsP+wNHfdM7euoXwHzssce62oTqWLZy5UrzjDPOMJ1Opzlo0KBur9GbDNM0zd4frxAREZFIE/PXJIiIiEjPVCSIiIhIj1QkiIiISI9UJIiIiEiPVCSIiIhIj1QkiIiISI9UJIiIiEiPVCSIiIhIj1QkiIiISI9UJIiIiEiPVCSIiIhIj/4/YAZiSBGye2MAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# create the convolution operator\n", "toeplitz = ts.toeplitz(dim, mode=\"full\")\n", "\n", "# apply the convolution operator\n", "res = ts.einsum(\"ijk,j,k->i\", toeplitz, exp, square)\n", "\n", "# calculate the reference\n", "ref = np.convolve(square.to_tensor(), exp.to_tensor())\n", "\n", "# plot the results\n", "plt.figure(figsize=(6,4))\n", "plt.plot(ref)\n", "plt.plot(res.to_tensor(), linestyle=\"dashed\")\n", "plt.grid()\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "f5a243da-23b7-4d24-b2a3-4e855d35e4f8", "metadata": {}, "source": [ "In this cell we construct the 3D toeplitz tensor with rank=2. After that we use the einstein summation\n", "\"ijk,j,k->i\" to perform the convolution. Finally we compare the result against NumPy's convolve function." ] }, { "cell_type": "code", "execution_count": 5, "id": "d9855edf-bfef-455b-81a1-d3c93b8ed60a", "metadata": {}, "outputs": [], "source": [ "# define the problem domain\n", "shape = ts.trainshape(1024, 1024)\n", "dims = shape.dims\n", "domains = ts.domain(-10, 10), ts.domain(-10, 10)\n", "grid = ts.uniform_grid(dims, domains)" ] }, { "cell_type": "markdown", "id": "7c585ea6-7883-4b89-851d-868a349de211", "metadata": {}, "source": [ "Next we want to perform a 2D convolution, so we create a 2D grid." ] }, { "cell_type": "code", "execution_count": 6, "id": "478e0ec6-06d6-4526-a459-1243b00e6b45", "metadata": {}, "outputs": [ { "data": { "image/png": "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ALCSDTHZXN6m3yh7h+J92zj8ltZ9mQEBP7bnF8kyH/A7zaBfL88q90XzflLFD7cblfy0it/Wth/FNv36vkna9atKflLVD/dt1WUfQr+S+7JOpnRyjYDvjJ+AryrZV1V5FTKyqnbGV/fToG/88rjtxrfnt32dvl7fNj5/2LZ9qvlLVrHQb3DttdfKGKNLL700Ljt06JB27NihE044QY973ON0/vnna//+/dnz7r//fp133nk65phjtGHDBr3+9a9Xr9db6M0FAADAkPidN8JmbNNP1jE6gnH4vmI/KOB3CqljpE4h5y8x6Idl3UK2a6qQ3zX+frXMdqtl4bYdqy5lcjssL8ck6y/lWPL4DJdqvfAcZa/X+j7N7elW2+/89lu//a5T+P0LBzDqZQqfwYADI/2f7wzfgwmdF6buusi+V/99J9/+UAeCsGQsaCX/zjvv1F/+5V/ql3/5l7Plr33ta/V//s//0Sc+8QmtW7dOl1xyiV72spfpH//xHyVJZVnqvPPO08aNG/WlL31JP/rRj/Tbv/3bGhsb09vf/vaF3GQAAAAMgd95I2LYKr5p3InLkvvJa5pm8Iz3QxU/uZhGwE/b8zuhNT+EX1OF31Cx7/gqfVLR779utuwnrfphWbIr7e36qtv1Q4t+WGYVT6VX3TZVFd+Pwzehqm9VFeD9xZXVARJTJi37pa0+DzkZU912Sqr6pqhq7davV1i/sY22/fDdJMX9qnIf2hFU72g6Pj/bUbVX8LO/Dar5S9GCVfIfeeQRbd++XR/4wAd03HHHxeUHDx7UX/3VX+md73yn/v2///c644wz9MEPflBf+tKX9OUvf1mS9Pd///f65je/qY985CN6xjOeoRe+8IV661vfqve85z2amppaqE0GAADAEPidN+Laqvj1nexGPQ4/rRI37odx9iY5TV4M93WIzwO+r2rHiraJle3qtomVcNc1sp20Ut5WgZds1yTVel+F76pRza9vt1361s2e71+/a+L97JJuX2P74z51GvubfA7xc4v3888wHkBpdkukpwfs67ZofLHZV001f7lasJC/Y8cOnXfeedq6dWu2fO/evZqens6Wn3rqqTrllFO0e/duSdLu3bt1+umna2JiIq6zbds2TU5O6t57712oTQYAAMAQ+J03IoYIbQMn25u1TV/9y9PW8uxc920B39TXafBNg33S/t4X8LtGtit/SYO3X5aFdyM7nhwAGB/Qqj+etOuP1wcLWl+327INzaDfGF6QB/7Qqm/yzyMJ+tm8BUmgzz/nubTtq/4+GzeP9u8Ij60Fade/6aab9NWvflV33nln32P79u3T+Pi41q9fny2fmJjQvn374jrpP/zh8fBYm8OHD+vw4cPx/uTk5NHsAgAAAFrwO2/ENar42UDtvkH5zVUHBMmsfT+fUC9r2x8Y8ENrflLF7yi269t4W7F93xWN2+nFmHrivTgB3yyT7gXp5HtO2YR71bXL2vNju37plxdVe74x1SR8hTFSKVlTt+5XM+mHlvtqsj2XXUuSrWbt96361RgAf9tamTChYHoGBDNT2356J+3VT1cIL0B7/lI37yH/gQce0Gte8xrt3LlTq1evnu+XH+iaa67RW97ylsfs/QAAAFYafueNkDlX8ZOFoYrfVxVW/7LW1vEiLq+r02EMfkvAj63rJgv5Nr0dQ34S+GPYT8blGyUz7Sdj8sO++t3oP/Wcsln165n1FWfRVwj1Tn48vmRKJeHeL/dt8oUN4V4qyuabFdX4fEn9Qd9UY/RdiOHWnwav8G8WXlT+DfwXaPzGu/7vv4ryPtT7U+nFifY1RK5nbP6SMu/t+nv37tWDDz6oX/mVX1G321W329Vtt92m66+/Xt1uVxMTE5qamtKBAwey5+3fv18bN26UJG3cuLFvFtZwP6zTdMUVV+jgwYPx8sADD8z3rgEAAKxo/M4bcUNV8dP7bdV6tVfxi+alqE75lp3zvhgc8OMs+s0Z6+VvN9ryu0krfrp8fOYx93ZMKgesM2h5dgnrZHMDJNsTt12xnb+5T3nLfn27r2W/5XNMl8/aVZG07A/+jtW/nPb8JW/eK/nnnnuuvvGNb2TLXvGKV+jUU0/VG9/4Rp188skaGxvTrl27dP7550uS7rvvPt1///3asmWLJGnLli26+uqr9eCDD2rDhg2SpJ07d2rt2rU67bTTWt931apVWrVq1XzvDgAAADx+542Io67iqy8TDhco62q+awRSFeG0eQMCfsfUlfuur9x3jWwhuW7Vmm9D1T6p6NtOUrlvXPpb9qsK9tCz68cWfX+dXorkdmlkCldV8sPnF9r2kzb6wlTz6PtN8kIrfnXb+LZ8p8J3FlRVfCdTDR2In7ONn//Atv20ZV918Z5q/vI37yH/8Y9/vJ72tKdly4499lidcMIJcflFF12kyy67TMcff7zWrl2rV7/61dqyZYue85znSJKe//zn67TTTtPLX/5yXXfdddq3b5/e/OY3a8eOHfwDDwAAsEj4nTfCjrKKH1+jr02/ucwH+mzivXCdnBovOW1eGvCtD/RxLH43tO0rBvo4Zj/ebwT8Tgj3rq9d37XtbppbY5u+y9r1Fdr0Q3t+DPg+c5fGfwSuOkOeP31eYZxsz8f3UirqBvw66LtCcjYeXJArZFwyJj+MOwhPcLbxmau/bd+5/GBPls2TMfjxvsmXD5X6sVgWZOK92fzP//k/VRSFzj//fB0+fFjbtm3Te9/73vh4p9PRzTffrFe96lXasmWLjj32WF144YX64z/+48XYXAAAAAyJ33kjYC5VfJNW8cMC1VX8Zht5VsVPTxHX1qLeHvBtNwn1Sdivx+k3An42Pt8NqOS7OYZ8NSbd82PwOz7QpxX9EPQLyRRGRenqzC1TTbQXPke1BP2stSAEfiPj/JpOkrN1Nb9Iv6RqW5wx1YrOXxtTj8NP5tqbqZqvuC1Y6oxzo3kIZnJyUuvWrdOv6SXqmrHF3pxlwRRO7/j4/6enn/3IYm8KRtxd//B4XXHBL8i1zWqDPj03rS/o0zp48KDWrl272JsDAIuO33lHobVV32TLTRbY8yq9aanSmzCxXnpdFNWp3Ir6vvw57xWCfad5XYd8263H4du2gJ8G/W4e7m3ast9Jwn2jop9V8gvXfnAjTbjNifesySv5zQp+CPtlfSmy206mVy8rei5e1485mZ6TKZ2Knq1a/MvqWqWVKW12Letv23BxkrVy6X1XXzvrqjDvnF/mqjb+cJGq9f1+Z9HRObWm/tGMlwtmIX7nLUolHwAAAMAS0daNr8b1TFV8NQ4KtI7FT9v0+yeKiy366SnyYhW/P+CHIF+H/zzY1/ddo6Lvg32nDvZZwDeNsC8pBtmQaZ2JgddYUxW8reRiq77xu5ycNs/vrk0+lljFj29nVKgaly9JhatuF9U57+riiH9/40Krfnrxbfvh2EQ2Nj+02ddVfWNmquaH10mq+snH0dflgCWDkA8AAABAkvy0b/1L+xclSTgL9FLrJHyFD5nZOPzGGPxO8zptwa/Oed8X8Lvp2Py0bT+p3qe3C1cHfF/NVwz5LjmQ0VahDuE+uW2r5O6sk+mYOuj71vxqsj0XuyOSswdW7fgmnBwvTK9nVDhXHbhwVet+eD/XURWqOyY52ODb9uMwAj9Wv/ChvzEJojOu/u6M/M6kt5vfu2ssMf5Ue1jKCPkAAADAStDWqt834V58QDH8tQV3pcsUVmq/FMl10ubvYhu/8aeHy4O+TcK+zarzScDvKqvcx3W6Lmnbd3IdH+47PtR3qpBviiodmyIE/Pq6jzN14A4B35nquvT3O/52Mga/al5wssZk8+DV13XQ98P7JVWb6Vx1EKMIBxc61fsbfy1XyDlbDR0In3Go6rcE/fh9NcfmNybiq+K9i/vtb7T8jbQsZ5b9RUfIBwAAANDeqt9axVcdCIep4odA33L6vLSSr7Si3zebfmjfb1Tw4/0Q8F0W9POQX19MkV+KwvmKe1V5l7LMWw9PTwK+9QHfWb+91khlun+KlyrgO9+yb+pKvuQr9lXQl6TCGTlXtedb56r7nXoIvCn8wYbC1HMDFKaq4Lv6MzYtAT+r5se2/bCzrqX93i8PRf1mru8v9mMJIOQDAAAAGNCqXz2SVeqzNn3/eAj+M51GrxnujWlp11d1vvt48cG+Y5LKfNKi301Dvg/18baTfPCvwr2V6TiZjlNRWBWdKtxXAd9Wt41kVAf+wPmqupPxc9kZWVtUQdwa2bKQtekBiyKbwb/afX+We1Ol5dCiH699uLexFd8lgb/6XAp/ikAlIT9U7PvG6KeV/b7vJg36ytv2pcag/P6/E1r2lzZCPgAAADDqjqpVv7FarNgrWa+9gq844VvjdnpavU4j6GeXtJJfz6rvknAfQ31cVgV813VS11fuO06ma1V0qjDf6VgVhVWncOoUIeDXF2NctstOvnU+vVij0hYqrZHtFCrLQrYwsj7gx8DvPyvrg76MfNU+D/rVBPd+TH44qOAr+qGKHye9LySThf3qDVwy6WF6u/0SWvSrOQNcWskP2T9+AH3pP/lbaVlOy/6iIuQDAAAAK10a5I2aN5L1kgMAacBP+wDCa7UF+r4qvhrX1cUWfhx+83R4zbH5oS0/DfjdNOBbma5T0bHqdK06HatOUV13C387hH1js6DflAb80hUx4Je2UM8WKotCZadQWTqVPVeFfWMkU1QZ2VSB3vhw7+R8qA8Bvx57n16sk2SlIn5Oqk7/54yfODAeQWifcT8ckDH11+NiZ4ZL2vbTqn7zj4OW/eWEkA8AAACscG31/PqRpPobV06C/sBqvmav4mfj8dMwbxrt+kpOp5dMxBcm2GsJ+KZrq+q9D/fdTnU91inV9SG/W5T+2qpjrDpZJd/F/OpkYiW/9CG/Z8OlU10XhabLTnx+WThZH/CdiiwHh7b/Io69TwN+NRa/moXPqCiq2fZD277zp+Vzfnx+Ne5/UDU/HINpqeKHIw9Z0Ff9Pc/Ysk+uX8oI+QAAAMCKZFpup6G9rVXfVDX7rJKvPECGJxb94b+1im+Uz6wfxuOHUJ/cjpX99FR5Xcl2GgF/rAr4oXrf7ZYa65Qa8yF/rFNqrCg1lgZ9Y7NqvklibBXK6yp+z9UBf9qWmrYdTRcddQqn6aKQKToyRir9pXqNOuhXod748ffKqvmyfny+9XMMhNvh8+pUQV/W+QMkjWq+NS2hvnGwJrbrKwZ84/ykfEO17KePEPmXGkI+AAAAMMoGjsdP7zeuZ3qdZqv+gLHfdUu46hnnG+HfmaSKn0y2V4d75bcL5afG6yqOv29W8DvdKtx3u6XGO6XG/PV4p9R4UWqs06uujQ/6JlTzrQ/5Ugi01antfJu+D/nTtqOeKzRlO5ouu5ryrf9FUVfzjelIkkr/EcagH8bWN8fdW8UQH6/DvlsjV7j4OZnCVFX9ENiToO+siRX8trH5JpsrYZiW/eTvo5nxw99G8zmMy180hHwAAABgJWsN9s3KfqPqn7bqN582sHVfMeDXs9DnY/GzoN8M/em4/I7Lg36YYK8R8Me6pca7pca7PY13Sq3q9LSq0/NB34f8otSYqS51y771u+LkYsgvYqv+tOtUF9vRmO1oylh1bUcd000m78s/nTKehq+Ibflyzp+Oz1Wt+VaxJb86NZ/zQT8N+CYJ+i4eQDHVufh8O7+qwN/4DgZ+17F932+kMY12/ZZqPQX8JYuQDwAAAKxggzO+6VvBxLA/S6t+a9CvW/Or1v1mmG+p4rdV8xst+/EUeb6K3wz4q7q96uID/upOT6sKH/aLnsZNLwb9WMlXPvmedUZWdSU/BPypoqsp29VhY9W13Rkn7pOrKvpVuJecrYJ9nDnfJpdOy+34ebns8zJ+lnznK/n9XRXJ99TXsp8HfGOqzoL4vbvsRt+fCBl/aSLkAwAAACtas2rv7zUrvyZ5IKnkm/TxrFVfdat+M+wXSkK/v4TbZkBFP23Tj9euruJ3rIqOq0J+x/qQXwX81Z1prQ7XRXW9qqjCfgj6XVO17lch38bT6MXT58mPxXeFei4E/FKHTamuKdUprYqs1b8Snh8v1srZwod8P76+CFV7U4f7vlDvb/d9ZkYqXN9Y/KpNX/H7MGnoVxrSfdCPrfhJm71RHuYHjsvHUkLIBwAAAEbVwDJ96wMzvE5/Vb+vkp8+PlOrfgiecZlJZtpXfumof1l6iW36rppFv2vVTcbfh8r96m5PazrT8bK6mNaqorquQn6pMdOL1fwijp6vwqxVXcmvWvW7mnI9TZmuumZM3TBhX9kI+PF891XF3vrKvQ1j8X1bvrJgP/NFYUZ9o6o93/gKvB8iMLBlP34/bZX8sDyZYX9O4+nT8I/FRsgHAAAARlZLmG8L6tnyxgrDjMfvawdPlg1o1VeRVPL9tdIqdWvoz6v4KpRX8Tulut1qBv3xTl3Fr8L9lI7x12uKOuivMlUlP1Tzu76S32zXLxUm3etoynU15bq+im99yLfJgYEqI1v/XOuMrDWyrqyr+aWROiap6Bu50rUPYfDVfDU+L2dUTcBXhKBffb5m0HeRLmv+EQwcl9+YRT9W/P3imSbZZ/K9RUHIBwAAANCQt+5Lmnk8frasXh67u9PKcbNVP7Tnx9ZzxYp/1pqeVPXlA786TqZwMh2nTqc6Xd5Y4av43bIaf99pBP1iqg76pgr6MeQrhPwwrt5X8v2Y/J7rqKcihvwxO6aurJ+oz4d7qT7lnoysK6pJ+6xR6YystbKlkem46tR4VjKlSWbRl1yZ7Gv4TOMpB139efmLMSY/lV7SQZG16cdjM41KvlEyLj/J5clyLB+EfAAAAGCFaqnzD/kE03LXB/u0NaAlYLq+ifkUq/tpsFffxcXrWMUvfBXfn76uW/jx+HH2/DTgT+uYYkrHdKa0pqguq00V9MeLnsbV364f4q01IeRXlfwxlRpTWZ0yz9hqZnvVAd85I9vxE/UVPfU6hXq2UGmtysKq6BhfuTd+mIKr2uvT896Hgxnp+PvY8WBi8K8+P+fH4LuWAzDJl9QYVlHH97RK31qSb1k2aCkWGyEfAAAAgNJq/MBJ97LqfhLi0+UxYFZ3wxh8yVf2fdDPKvVZtXpAq35S1a8DflXJ7/hKfh3w6zH5q4qeVvv2/NXFdAz4x5ipapmZ8pX8aob9rupKfgz5oZJvqjH5XVeq60oVzqnwp66TFCfoKzv+gECnU13bMg/6tpAtq+13pava9sv+/Wy27Pd1OcRLFfCr09zXXRQmfHfN+83vrhnwG5Pv5e35RPuljpAPAAAArFimcT3EquF221PaTttmqkZ256v9MdA3LiH41/dbWvYLFy/yl6JwWSV/rChjJX9V0R/01xTTWmOmdExxuGrXNz0/Lt/Pri+rjnEht0uqOuBLPy5/WlZdWXV8tb8o/Kz4xqgsinrsfqdTTdJXFJrudDRmO5ourHp+W21RyPp9CJX8MGQhrdyr7zMxVYt90f+YUdXOX30Vje+iMfyi77ucYWx9/9D6NPkT+JcaQj4AAACwogwR6LPVm+ub/rumubytul+v11+JlprhPrajF8pDbbz24/F90O8UrmrX90F/vCjj6fFWFT2tMn6yvXhdhfs1xbTGTalxlRozTl252C0fWElWTj05dfykfIWfWc/KqCz87PvhNHtFR1O2o/Gio6mio7GiVLco1S066vjtDdueTqhnsv01fQc72g6ApAFfabt+/ErS76LxvfR9kUlgP6IZ9gn8SwEhHwAAAIDXDPCN4G4GrJe0+ue3pXRseF6Zrpf3hfu2ar5JJqLzlW9j6oAfx+QXtmq799fjRZkEfR/2TSPsy2rcWHVNFZA6PjSH2OrkVErqyFUVfFe9t/Onq7MyKk2hadPRqqKjKdfTeNHVuC01Vthq1n5fwa/G8fugb0LQd7GlvnV/2w6A+M+2mlyvEe6Vf7b930sz6Ps9NeFLGlTWJ8gvB4R8AAAAYBT1VeBnWncurxsuIUi2VPblo2DrKdykLGT2temb/sCfhN0qEEvyAdkYp8JYdYxv2Td10B8rSo2ZakK9MVPGWfTDGPxVKjXuA/64kcaM1JFRR0ZF8vlZ51QaH/CrJf4UeaVKU6hUTz3T0bjpacp04/j+saLUmK0CftdvY2GqAxIh4IfquzNOpkg/r/B5JPMaxHXD5+mSz9PJyZ8+L4Z+Uw+n7/uOTf0dxhn25/A3MPS6c+0IwNEi5AMAAAArhslvzhjuTevNmVdNn9MS/k0I/9Witjb0ZsgNz8kfc/UZ+QoXK+OFD/odf+76rrEaMzYJ+mngr8bgjxurMSONGaMxGXWNUaFCRbIv1lRt+j3nfJiu/sdWMV89FfF1w/t0TRm3oWvqKn4I+FUl32dg4+IBkf5qvfqXp/dVf0Ym/YxavweTXc2qr7Lf8rjSh6n0LwWEfAAAAGClGLpin7dzm3yQ94CntAT8ZFEM92loV+Pxxibk4d7FSeXqoF9fCuPUiRfbd+n60+N1/Qz6XYUALo1J6vqA31VHHWOSffbt+s5IppRz1X1rXPUaLrxWGS/hIEP9/vX2Ff4StjsdR+/8wQs1uxlm+JxcGvCVT4SfDZlo+576VCHdGCOXza4/ZHgn4y8JhHwAAAAA8yKt0kfpLO/yKzSq1IOq963HFpJ1jD/NXfXyzl/8mHdj6zb+MGu+nxW/XqbqYqqA31GhjinUkYn/E6r2MlbOFXLGysqo45x/rn9d5+r3CK356bbE7XP1KIbmfquxvyY/ONL6uaVPCgcMQit+42HXfApGEiEfAAAAQGKOMbAtnDbMVtztq06nr5VV7/19H+4lJdV8+UCt6tR2LZcYvP3Y+jDGvpBRoSrkV7cLGRMm3quq2s6vb/26hVzyfKcinnrPxUBfmPq28dtmTL3N1au37GPj822eva6t6yH7/MwQ3+Kc0z5l+uWimH0VAAAAAJjJY1sfzoKxmtnYxUJ2tbwO2UbhzHRV+Jby081XTQZmQNG8etFwPwSpwgf1+F6huyAEeNX3laxbb7xT66dnFiBQ9/XxYxQR8gEAAACMOEItVg5CPgAAAICj9Ni2cTspm7nPZVtQ9bNXE+T5dntJzlXX1smP3K+eb9Pn+0n10tdz8eJi277zz6ueb5J1THyf8L7NGn6+rdV+tH56zZkJ54Pru4ERxJh8AAAAAIk5Ts/mBtxOGDdzrGwZhp6kbD8WPCZpkwVj53ywdpJ1RtZVwbvtUrpC1hT+vlTKyMrFSynr2/WtjMsn3rOy2br188P7FSpd/V5OptqeMGDAb5tz9TaH0B8Dfd8RAIXRB4Pvt3zuQ3X6zznnc2BguSDkAwAAAJgXRlWIzTifXGNl2vWH2pZLHvTT16svsWruQuW8Gm1fhf1C1hUqw0XhYur7xqqUVDqnnpyMqcK9Wk+hVx0E6LlwW/654fVN/R5+mU23pZ4dINvubL/TfVTjc2hvL8iflLUkNL6ItoMDGEmEfAAAAGClGLpI77Ip2p2cwlzzg6fQd/23k0XxAEA4LXyz+tyyCXE9X8E3vp0+3HfJxTqjMl7qoN2L15143TOFeqoe66mMk/EZJ8mUsq6aZT9sSFWtrwJ+T07TknrO+OeH1+rES/q+1aXePhsr+r6aH05071QdYPD3/UkE+qv0jY8pnjXPtTxetzu0f099nF/FNRYNWcWn2L8kEPIBAACAFSMJ6SGQDQz9jXVnOjjQNta7pZIcgnt4KAuyjdvNqr4JxekY8Kv71vrgbI2sLVTaOtyHy7Tratr1kuuOpmTVVTh/vR9Zb5ysM9Wp8ZLzzFvnVKq6TDtp2klTzmjKFZpyHU33Xbo+8NfbUNr64vz2urhPJvsMsnDftjy9r/ozau8KaGkRGDaMzxbw27oJsOgI+QAAAMAocq46j9xQ62r4Xu4YJNPU3XhcIcy7fP3Yqh+uq+UmC7nV/SzwJ7PjGWv86xo5G6r4eeW+Z4sqbNuOposk2LuuxlxXY65UR1YdY+sKvqyspK6cOsZvQ3xbp9JJPUk9pyrcq9CUOppyHR12XU35S/U+nfr9XUc9W1f2rTMx6DubVu5NPgtgX7h32bK8W8L5oO+y9eSS0/P15e+wbrL+sOa0LsH/sUbIBwAAAOA10n52oMAlLfzNowJpUGyExngwwDSq8X49tbSnNwJuvFj/fJsEfGtU2io492wd8Hu20FTR0ZTtaKro6rDtasyU6roxdZyv4FvJFJIzpayTxny1vpBUJEnWqpqVvyejaWdiuD9kx3TIjemwv0y56n2mXbd6X9fRtPWt/Ekl38ZKvg/61gzc3/bAX3+2Jgv16feRHATo+15csq7qJ/ZV7psBncC+HBDyAQAAgBVlLmV7tXQENA8EaEA4TIKky9cLlfr00hpkrb84E859V1e7raqgb+ugH0O+rcL9uO1qqih12JbqmjF1rVXXWBXWqlP4Fn0rWWNkjVEpW1X4fdAPrKTSmTiOP1Tvq8uYDtnxKvBbH/itr+zbblXNtx31bAj6PuDbEPD9ftvm/uafR9tnZJL7WYhPP/fsu2h8L/kX3f+9zwkHAJYKQj4AAACwYoXAPkTwT1cZ1N7dbP/290Px3/mA3zervKvb9Fur+DZcTAzDoQKejsUPAX+6tL56X6pbVhX8jrGxRV9FVcW3RTXrfakqwI+prMbpO6fCuPjJhFPh9VTEdvwp19UhV4X7n7mqoh+C/iHb1eGyCvlTtqvp0lf002p+qOBbIxOunan3dWBnQ+NgRyPo1xPxNb6LQeG+rwOg/Wvtf1J6jaWEkA8AAABAsR1fSZ6PoT5U8/06MbWHtvBm1b6+X7XoV+uEgJ+Ouw+BNgTXKuS6GOiz0OtvO6uqZb80ch2jsjQqi0K9otB00dFUYdUtO+qarrrGqmutCuPUUXUtSSr8pH3GqFd01HM9dU1ZVfrlVLgk5Pup+Xp+dv4w/v6QD/c/s+P6qR3Xz0LIL6tq/uGyq6my6iqYLjvqlYV6ZSFbFlUlv/RBv2zfT5N9Hmqt7qfBv67oh3kGFL+j7H7zu5PyvN43u374XpsrYiki5AMAAAAr1BD1+wFPqG5kd0O4lPMxMAmSjYp9deq4sLy6bazJKvfqu/iWfWtkSsl1nA/6hWzHqbSuatcvQ9DvqmutOmWoyju/xWFTjKwpVBa++m866jqrrimrkB+PPPjT38modB1Nq5pMb8qGVv2qkv+zclw/s+P6WZkG/U5dyS+rSr61hWxZbbd8u76JVX1Jpcn2u1nZN2GCAOfq67TC3+iiyL68xqkNXfpYWGVguX/YpVhshHwAAAAADSH0mXgUwDknk1bzsyDZHjBNKOjHsO/8JHOubk1PA74Nj7e06peS6dSVfFMauUJynaoiXhaFCl/JL0qnwlgVphsDexXyw95VM/L3iqr9ftz0NG6qSn5o6zdG/oBF1X1QqpodP5wibyqMyffV+59ZH/TLKuAfKqtK/uFeR1NlR72yo7IsVKZV/NLIlKYO82lF3zYm3gsV/ZZKfvW5Kgn9SWW/5UBL6wGY1op+c8HsfzJYfIR8AAAAYGS11OrTRSGYZcPyGys4tcyw7/L1QphUM1DWYdI4SdbJFVWodzYN+nWgzVrUSyNTpEHfyBROpjBS4av5pZErCtnCqVd0VBinwoRrP4Fe/AiqtnubnL9+uuho3HQ1Znpx7H4h52fXd/VzZKpZ8l3hQ35VpT9kx3TYh/xD5Zh+5i+HyzEd7nU1VXbrVv1eJ6/il36fSuMDvukL+aFVP/t8kmuFVn4/077JDrw0vot0WfYHEY/GJItdfr95EKD5cBtOn7coCPkAAADAqGrJ+HmyH/Z1XBX0mwcImm3hLlm/UVF21klFOI2eH5+fzphvB4Xc9ousZHq+mm+q1ntjpJ7pVFV44/wl33PrjGynHl8/7kIV34/fN1ZFSyXfqj4wEMfl2+qUeYdtt6reh+teXcmfKjua7lWVfFsWsr1CrmekXhLuWyr4g/fbZZdQrc/mNQifafo9xO/H9X0/8cH0+5uTYRI/HiuEfAAAAGBFC8k9BMGqRd85tU++5/JqvpNpzObux+X73Gd89T57vFnJzyacSyfdS26Xqqr6RVXNV2GqAN+rQn6o5pem8OG+I5NuvkLAr9rue51qbP247WisSGbgD5V8U4fWMLt+6ZKWfZsE/TIE/dCiX92e6nV9wC9U9pKx+LF67y+hS6Ev8Lvkvuur4ochDqYZ6GNFX/H7aIb6eu9cntEbk+5lZ0LIVzyqvzosHEI+AAAAsIINLPYb/0jalT/TuPy+FvFmxbjRsu+MbzU3eahthvoY7vPbMn4UQWHkCn9gwhQq1b9DMeD7SzUWv9B44QO+LZOQX43nrw4QuDhdn3WFSld3AMSgbzuaKruasp0q4JddTfX8sp6v4vc6KnuFXK+QeiYJ+eq/WM1Q3Xd992OQt0mrfrNS39eu3wz9Ln6/2YeW3+j7TLE0EfIBAACAlWxwyldW9p1tXH5Yry3g2yqYx5Z932rurGkE15YKfjo231SvUxRG1vix+aY68OB8yJeqCeqzTXJ1yC9doV5RatoVmi6qU+aN+etQyTdhLH8cky85H/LLMJbfVuPzq9Pj1afKC+35U2UV7tOA73q+it8zMr26el+URkVf2G+p4sfbzn+G9f0ZW/WzCfZavusk6FeLsvJ9+xNJ+UsWIR8AAAAYZfEc9zMsSzP9oKH6oX8/BPx4Gjznx9g3qvaqlldj8p0P+FW4VxFm2HfVTPnNan4I9WUd7EMVvyglW0jGGBlT7YfxfflVLPVBP262kQtVfFuotIV6nUJjttB0YdUtSnULG0N+mLDPJCnWyeQHCVx1Orxp24nX1WnyqlPlTZd1uC/LQm66ruKbcCmToN9rVPGbM+2XzaAvPx4/CfDJafWyVv2W6r5rq+TH6xnS+6DM3/YcJt1bNIR8AAAAYEVKE32zcm/yNbIivm+1j0Ff7S37NhwUSIJ/GvT9ee9N4a9DK35s168q9FXAdypMNaO+9W36xlTHCqyRCmNk04n+Q9BPs6w1Kq1VaU0VzIuOD/gddQubtOr7Cfvk4idSTb4XQr4P+jZcqqDfC+HenyavjJPs9Qf8wgf7opSKEPBLf7/0+x7b9htV/DK05qfB38+sn51Cz7V/L32Vfef/NwT95LvOCvqDKvuE+aWGkA8AAACscIML+C67qmfYb7TsJ1X9fFb9umocb1tXPS9pN3fGh/tQufet+MY6FWU13t76tvwQ7mUkK6PCuCr4J3sQgn711qY6L32s5hv1rK2CfVGoUzh1iryKn066F6Rj+ktXdQSU1lSdAbYK9T1byMZJ9vws+mWjgt+rA35V0Vfdqt/zBzRC4A8hvnTZOH3Fdv3GpVG5jyMqBo7Db1byk3VnmDGfWL+0EfIBAACAlS6GeCWJvyX6D2rZN+ks+8qDZQj1/mJMSzXfhEn4qhBb+HPIy+SV+7R6X982Mr527/z4+boKXcg5J2uroG87RmWnUMda9QobA35RuCzgV5X8/ONxScgPBwtK3/5vrakq96Wpwn1ZyJXVBHtK2vOLMBa/J1/RT6r4SUU/vVRhPx+Ln4/TT6r4LaG/OR7fKfmAsoAfPrQBfxxpEZ9C/pJWLMSL/vCHP9Rv/dZv6YQTTtCaNWt0+umn6ytf+Up83Dmnq666SieddJLWrFmjrVu36rvf/W72Gg899JC2b9+utWvXav369brooov0yCOPLMTmAgAAYEj8zlumBo6ZHhTq6mDYt5pTHGtfrze4Tdy03U6DaJmE17J5yavYRbjd86G4F2778DwtFdM+VE8bmelCmq7GxNvpQuV0R73pjqanupqe7mpquqtDU2M6NNXVoemuDk2P6WdT1eWn0/UlLDs07dedqp43Nd3VtH+93nRH5XRH1r+fpguZ6aLajp6ptmu62u6iZ+L2x/1I9y/b78ZnEqr45WxV/MHfSR38XeP7TL/j+k9hcFV/wHLG4y+qeQ/5P/nJT3T22WdrbGxMn/vc5/TNb35Tf/Znf6bjjjsurnPdddfp+uuv1w033KA9e/bo2GOP1bZt23To0KG4zvbt23Xvvfdq586duvnmm3X77bfr4osvnu/NBQAAwJD4nTfa3MCSbJL208Q/TNC3jdv+Ytoufux5kZ4iLrauu6Tq7W/3QmBuCc7Tvmo+XV00bRphv1BvqqPpqU4M6VNTXR2e6uqwD/6Hk8uhqTEdnq4en5ru+oME1fN7Ux2V/nVDuNd0/d5FCPgx0PcH/CIJ9fn+1jPsF8ln0vb5tVbwB47RV/1dxkDe/I7b/x4G/51gqZj3dv13vOMdOvnkk/XBD34wLtu8eXO87ZzTu971Lr35zW/WS17yEknS//7f/1sTExP61Kc+pQsuuEDf+ta3dMstt+jOO+/UmWeeKUl697vfrRe96EX60z/9U23atGm+NxsAAACz4HfeiAvZbdaWff8fY5QHfdM6y36YcM+Zxu3Ch1Oj6nR6Rr5CnbTmyyRj8f3ke5KsnH+sqlpahREARoWvTFtnqgfixVQz/JdOrnByHckUTjJOtnB+hv76uv/zMT7/mjiRn/x4f5Umvocpq6EG1enxkjH3Yfx9qNrH6r1keq46UJFV833Qt3kVv3mQJM6ob/PPuy3cu76AH/atUclv/lEkxwFo1V/65r2S/5nPfEZnnnmmfuM3fkMbNmzQM5/5TH3gAx+Ij3//+9/Xvn37tHXr1rhs3bp1Ouuss7R7925J0u7du7V+/fr4D78kbd26VUVRaM+ePfO9yQAAABgCv/OWuaNq2W8ERqXLFFaauZrfqDJXgdXmLfvJdRFvt8xC36uDcVYRD7enjYpp+UtolTcyU3ULv6YKuSlf3Z/qqJwK14Mv6Xpuunq+pkLlvvCvb+J7hm2oKvpq3d64H8nke7FrwfrPofH51K36Ng/0tvF5D/pOku4LF/4uWg8GJH8Lg/5Ghvk7w2Nq3kP+9773Pb3vfe/Tk5/8ZP3d3/2dXvWqV+kP/uAP9OEPf1iStG/fPknSxMRE9ryJiYn42L59+7Rhw4bs8W63q+OPPz6u03T48GFNTk5mFwAAAMwffueNvvZW7FkODjTawPsOCIRKcxJCTRJQ83b99Dodp+5b+Xt1235b0I/BPmnfT4N+4YN+EcbKh5A+VUhTnSr0TxVyU52WSwj1nfgcM1X4UF/4120E/J5pbMfggF8dyKhn04/7nVbz0+vsc7T+gImtP+eZqvjJwZq8ZX/m751W/eVh3tv1rbU688wz9fa3v12S9MxnPlP33HOPbrjhBl144YXz/XbRNddco7e85S0L9voAAAArHb/zRpRT3ZEfMlzasu/6VwvLnXx7e5xtvw76ddu+rZ5s/fPCtSnyGfeNqgq1VM22L1fNni/fqi9/yjy/JXVE9feTAnYR3tYauUJy1lX3C3+/rN7eFdV7VcMHVI0RULqjyV6nLetWMq46naAJbfpxzHy4Nsm57pPW/PTgRVK1L3ouXhfJ+Py+CfgaY/Cz8fjOd0e4cEkDfqOKryT4h/1KVsla+dVYpsZtLCnzXsk/6aSTdNppp2XLnvrUp+r++++XJG3cuFGStH///myd/fv3x8c2btyoBx98MHu81+vpoYceius0XXHFFTp48GC8PPDAA/OyPwAAAKjwO28EDKzYuuSea11e329v+26/2Ox+3xjyOFO8zSfmK202o3wRzh+fBOFYBZ/2wbjn8sn40qr+tFExlbbwp8tMvG2al9CCn1yaz2l93en+6n1dwffbOp1W8xsBv9ecVd/WYb6sPi/TNrt+XwXfzvDdqP+7nCHJu9a/hWH+vvBYm/eQf/bZZ+u+++7Lln3nO9/RE5/4REnV5CwbN27Url274uOTk5Pas2ePtmzZIknasmWLDhw4oL1798Z1br31VllrddZZZ7W+76pVq7R27drsAgAAgPnD77wVIqvihmun9ipv2p4fFqiuHrfM+l5Xnn2buQ+wMcw2ThlXJEG/8EE/Bvkw+36cVd81wn3jMpWG87BMdVifaoT3GZcPeN3me2bb4Q9ETCez6McDE3nALxqfg5Kw39+mnx9ASS8zfj8Dq/iu8f2rNdNjaZr3dv3Xvva1eu5zn6u3v/3t+s//+T/rjjvu0Pvf/369//3vl1S1w1x66aV629vepic/+cnavHmzrrzySm3atEkvfelLJVVHhF/wghfola98pW644QZNT0/rkksu0QUXXMCMqwAAAIuE33kjzDnflZ727Se9+n39/PnN/pn25fvmlVePra1fzlbt+kbVbPvG2KSFX1XPe1nVJMMM+vLt+tVLG9+a7+T8TPquUx10CLPf2071Mq5ILmV1rcLImerFXTKjfnW77TNKJt13prptVV8PusQx9UmrfjgVXs/f7jkVdkDAb85dkIb6ePCkHpM/cOLD5lj8Zgv/wM6N5pedvAaWpHkP+c961rP0yU9+UldccYX++I//WJs3b9a73vUubd++Pa7zhje8QY8++qguvvhiHThwQOecc45uueUWrV69Oq5z44036pJLLtG5556roih0/vnn6/rrr5/vzQUAAMCQ+J03Ipyrx57PtIrUGJtf3Qh3pfqGc64+41425luNsflFrOa7mJptdYygOiIgU50Qz79BfbvwL29lVHR883ineoazTurU4/KdlVzHyYQx+YU/ABACvb92RbUPVbA39e0BTJKFw20za9Cvz3WfjcePE+zV4+6b1fu8s8H6Vn2XVfCbp88bOBa/OQlf/LI1axV/qExP8F8yjHOj+W1MTk5q3bp1+jW9RF0zttibsyyYwukdH///9PSzH1nsTcGIu+sfHq8rLviF6qg7ZtVz0/qCPq2DBw/SogoA4nfevBgU8k1dxjYmWS8s90HY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fAAAAAAARgQhHwAAAACAEUHIBwAAAABgRBDyAQAAAAAYEYR8AAAAAABGBCEfAAAAAIARQcgHAAAAAGBEEPIBAAAAABgRhHwAAAAAAEYEIR8AAAAAgBFByAcAAAAAYEQQ8gEAAAAAGBGEfAAAAAAARgQhHwAAAACAEUHIBwAAAABgRBDyAQAAAAAYEYR8AAAAAABGxJxD/u23364Xv/jF2rRpk4wx+tSnPpU97pzTVVddpZNOOklr1qzR1q1b9d3vfjdb56GHHtL27du1du1arV+/XhdddJEeeeSRbJ2vf/3r+tVf/VWtXr1aJ598sq677rq57x0AAACGxu88AFj+5hzyH330UT396U/Xe97zntbHr7vuOl1//fW64YYbtGfPHh177LHatm2bDh06FNfZvn277r33Xu3cuVM333yzbr/9dl188cXx8cnJST3/+c/XE5/4RO3du1d/8id/ov/xP/6H3v/+9x/BLgIAAGAY/M4DgOXPOOfcET/ZGH3yk5/US1/6UknV0d1Nmzbpda97nf7wD/9QknTw4EFNTEzoQx/6kC644AJ961vf0mmnnaY777xTZ555piTplltu0Yte9CL90z/9kzZt2qT3ve99etOb3qR9+/ZpfHxcknT55ZfrU5/6lL797W8PtW2Tk5Nat26dfk0vUdeMHekuAsCi67lpfUGf1sGDB7V27drF3hwAKwS/8wBg4S3E77x5HZP//e9/X/v27dPWrVvjsnXr1umss87S7t27JUm7d+/W+vXr4z/8krR161YVRaE9e/bEdZ73vOfFf/gladu2bbrvvvv0k5/8pPW9Dx8+rMnJyewCAACA+cHvPABYHuY15O/bt0+SNDExkS2fmJiIj+3bt08bNmzIHu92uzr++OOzddpeI32PpmuuuUbr1q2Ll5NPPvnodwgAAACS+J0HAMvFyMyuf8UVV+jgwYPx8sADDyz2JgEAAGAe8DsPAIY3ryF/48aNkqT9+/dny/fv3x8f27hxox588MHs8V6vp4ceeihbp+010vdoWrVqldauXZtdAAAAMD/4nQcAy8O8hvzNmzdr48aN2rVrV1w2OTmpPXv2aMuWLZKkLVu26MCBA9q7d29c59Zbb5W1VmeddVZc5/bbb9f09HRcZ+fOnXrKU56i4447bj43GQAAAEPgdx4ALA9zDvmPPPKI7r77bt19992SqklY7r77bt1///0yxujSSy/V2972Nn3mM5/RN77xDf32b/+2Nm3aFGdmfepTn6oXvOAFeuUrX6k77rhD//iP/6hLLrlEF1xwgTZt2iRJ+q//9b9qfHxcF110ke699159/OMf15//+Z/rsssum7cdBwAAQI7feQCw/HXn+oSvfOUr+nf/7t/F++Ef5AsvvFAf+tCH9IY3vEGPPvqoLr74Yh04cEDnnHOObrnlFq1evTo+58Ybb9Qll1yic889V0VR6Pzzz9f1118fH1+3bp3+/u//Xjt27NAZZ5yhE088UVdddVV2jlUAAADML37nAcDyZ5xzbrE3YiEcPHhQ69ev1zl6kbri/KkAlq+epvVFfVYHDhzQunXrFntzAGDR8TsPwKhYiN95c67kLxf/+q//Kkn6oj67yFsCAPPj4YcfJuQDgPidB2D0zOfvvJEN+ccff7wk6f77718RP4onJyd18skn64EHHlgRM86yv6Nvpe3zTPvrnNPDDz8cx7MCwErH77zRttL2V1p5+8z+1hbid97IhvyiqOYUXLdu3Yr4wwlW2mll2N/Rt9L2edD+roQfsQAwLH7nrQwrbX+llbfP7G9lvn/nzesp9AAAAAAAwOIh5AMAAAAAMCJGNuSvWrVKf/RHf6RVq1Yt9qY8Jtjf0bbS9ldaefu80vYXAI7GSvs3k/0dfSttn9nfhTWyp9ADAAAAAGClGdlKPgAAAAAAKw0hHwAAAACAEUHIBwAAAABgRBDyAQAAAAAYESMZ8t/znvfoSU96klavXq2zzjpLd9xxx2Jv0hG55ppr9KxnPUuPf/zjtWHDBr30pS/Vfffdl61z6NAh7dixQyeccIIe97jH6fzzz9f+/fuzde6//36dd955OuaYY7Rhwwa9/vWvV6/Xeyx35Yhce+21Msbo0ksvjctGbX9/+MMf6rd+67d0wgknaM2aNTr99NP1la98JT7unNNVV12lk046SWvWrNHWrVv13e9+N3uNhx56SNu3b9fatWu1fv16XXTRRXrkkUce612ZVVmWuvLKK7V582atWbNGv/iLv6i3vvWtSuf+XO77e/vtt+vFL36xNm3aJGOMPvWpT2WPz9f+ff3rX9ev/uqvavXq1Tr55JN13XXXLfSuAcCSMgq/9fidx++85f67p2nUf+stq995bsTcdNNNbnx83P2v//W/3L333ute+cpXuvXr17v9+/cv9qbN2bZt29wHP/hBd88997i7777bvehFL3KnnHKKe+SRR+I6v/d7v+dOPvlkt2vXLveVr3zFPec5z3HPfe5z4+O9Xs897WlPc1u3bnV33XWX++xnP+tOPPFEd8UVVyzGLg3tjjvucE960pPcL//yL7vXvOY1cfko7e9DDz3knvjEJ7rf+Z3fcXv27HHf+9733N/93d+5//t//29c59prr3Xr1q1zn/rUp9zXvvY19x/+w39wmzdvdj/72c/iOi94wQvc05/+dPflL3/Z/cM//IP7N//m37jf/M3fXIxdmtHVV1/tTjjhBHfzzTe773//++4Tn/iEe9zjHuf+/M//PK6z3Pf3s5/9rHvTm97k/uZv/sZJcp/85Cezx+dj/w4ePOgmJibc9u3b3T333OM+9rGPuTVr1ri//Mu/fKx2EwAW1aj81uN3Hr/zlvvvnqZR/623nH7njVzIf/azn+127NgR75dl6TZt2uSuueaaRdyq+fHggw86Se62225zzjl34MABNzY25j7xiU/Edb71rW85SW737t3OueqPsSgKt2/fvrjO+973Prd27Vp3+PDhx3YHhvTwww+7Jz/5yW7nzp3u3/7bfxv/8R+1/X3jG9/ozjnnnIGPW2vdxo0b3Z/8yZ/EZQcOHHCrVq1yH/vYx5xzzn3zm990ktydd94Z1/nc5z7njDHuhz/84cJt/BE477zz3O/+7u9my172spe57du3O+dGb3+b//jP1/69973vdccdd1z29/zGN77RPeUpT1ngPQKApWFUf+vxO2+09nel/c5zbmX91lvqv/NGql1/ampKe/fu1datW+Oyoii0detW7d69exG3bH4cPHhQknT88cdLkvbu3avp6elsf0899VSdcsopcX93796t008/XRMTE3Gdbdu2aXJyUvfee+9juPXD27Fjh84777xsv6TR29/PfOYzOvPMM/Ubv/Eb2rBhg575zGfqAx/4QHz8+9//vvbt25ft77p163TWWWdl+7t+/XqdeeaZcZ2tW7eqKArt2bPnsduZITz3uc/Vrl279J3vfEeS9LWvfU1f/OIX9cIXvlDS6O1v03zt3+7du/W85z1P4+PjcZ1t27bpvvvu009+8pPHaG8AYHGM8m89fueN1v6utN950sr+rbfUfud1j3aHlpJ/+Zd/UVmW2f/hS9LExIS+/e1vL9JWzQ9rrS699FKdffbZetrTniZJ2rdvn8bHx7V+/fps3YmJCe3bty+u0/Z5hMeWmptuuklf/epXdeedd/Y9Nmr7+73vfU/ve9/7dNlll+m///f/rjvvvFN/8Ad/oPHxcV144YVxe9v2J93fDRs2ZI93u10df/zxS25/L7/8ck1OTurUU09Vp9NRWZa6+uqrtX37dkkauf1tmq/927dvnzZv3tz3GuGx4447bkG2HwCWglH9rcfvvNHb35X2O09a2b/1ltrvvJEK+aNsx44duueee/TFL35xsTdlwTzwwAN6zWteo507d2r16tWLvTkLzlqrM888U29/+9slSc985jN1zz336IYbbtCFF164yFs3//76r/9aN954oz760Y/ql37pl3T33Xfr0ksv1aZNm0ZyfwEAGBa/80bPSvudJ/FbbykZqXb9E088UZ1Op28Wzv3792vjxo2LtFVH75JLLtHNN9+sz3/+83rCE54Ql2/cuFFTU1M6cOBAtn66vxs3bmz9PMJjS8nevXv14IMP6ld+5VfU7XbV7XZ122236frrr1e329XExMRI7e9JJ52k0047LVv21Kc+Vffff7+kentn+nveuHGjHnzwwezxXq+nhx56aMnt7+tf/3pdfvnluuCCC3T66afr5S9/uV772tfqmmuukTR6+9s0X/u3nP7GAWC+jeJvPX7n8TsvtZx/96zk33pL7XfeSIX88fFxnXHGGdq1a1dcZq3Vrl27tGXLlkXcsiPjnNMll1yiT37yk7r11lv7WjfOOOMMjY2NZft733336f7774/7u2XLFn3jG9/I/qB27typtWvX9v3Ds9jOPfdcfeMb39Ddd98dL2eeeaa2b98eb4/S/p599tl9p8r5zne+oyc+8YmSpM2bN2vjxo3Z/k5OTmrPnj3Z/h44cEB79+6N69x6662y1uqss856DPZieD/96U9VFPk/OZ1OR9ZaSaO3v03ztX9btmzR7bffrunp6bjOzp079ZSnPIVWfQAjb5R+6/E7j995o/a7ZyX/1ltyv/PmPpfg0nbTTTe5VatWuQ996EPum9/8prv44ovd+vXrs1k4l4tXvepVbt26de4LX/iC+9GPfhQvP/3pT+M6v/d7v+dOOeUUd+utt7qvfOUrbsuWLW7Lli3x8XCqkec///nu7rvvdrfccov7uZ/7uSV5qpE26ayrzo3W/t5xxx2u2+26q6++2n33u991N954ozvmmGPcRz7ykbjOtdde69avX+8+/elPu69//evuJS95SeupOJ75zGe6PXv2uC9+8YvuyU9+8pI4zUjThRde6H7+538+nlblb/7mb9yJJ57o3vCGN8R1lvv+Pvzww+6uu+5yd911l5Pk3vnOd7q77rrL/eAHP3DOzc/+HThwwE1MTLiXv/zl7p577nE33XSTO+aYYziFHoAVY1R+6/E7j995y/13T9Oo/9ZbTr/zRi7kO+fcu9/9bnfKKae48fFx9+xnP9t9+ctfXuxNOiKSWi8f/OAH4zo/+9nP3O///u+74447zh1zzDHuP/7H/+h+9KMfZa/z//7f/3MvfOEL3Zo1a9yJJ57oXve617np6enHeG+OTPMf/1Hb37/92791T3va09yqVavcqaee6t7//vdnj1tr3ZVXXukmJibcqlWr3Lnnnuvuu+++bJ1//dd/db/5m7/pHve4x7m1a9e6V7ziFe7hhx9+LHdjKJOTk+41r3mNO+WUU9zq1avdL/zCL7g3velN2SlClvv+fv7zn2/9v9kLL7zQOTd/+/e1r33NnXPOOW7VqlXu53/+59211177WO0iACwJo/Bbj995/M5b7r97mkb9t95y+p1nnHNu+Lo/AAAAAABYqkZqTD4AAAAAACsZIR8AAAAAgBFByAcAAAAAYEQQ8gEAAAAAGBGEfAAAAAAARgQhHwAAAACAEUHIBwAAAABgRBDyAQAAAAAYEYR8AAAAAABGBCEfAAAAAIARQcgHAAAAAGBEEPIBAAAAABgR/z9M9E+68a03iwAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "#create a picture with a square\n", "train = ts.full(shape, 1.0)\n", "op = ts.shift(dims[0], -256) @ ts.shift(dims[0], 2*256)\n", "train = ts.einsum(\"ij,jk->ik\", op, train)\n", "train = ts.einsum(\"ij,kj->ki\", op, train)\n", "\n", "# learn the gaussian kernel\n", "func = lambda idxs: np.exp(-0.2*np.sum(grid.to_coords(idxs)**2, axis=0))\n", "kernel = ts.tensortrain(shape, func)\n", "\n", "# plot the picture and the guassian kernel\n", "fig, ax = plt.subplots(ncols=2, figsize=(15, 4))\n", "ax[0].imshow(train.to_tensor())\n", "ax[1].imshow(kernel.to_tensor())\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "802b5da3-b664-4dc4-b825-bc4a43cfd859", "metadata": {}, "source": [ "Using the 2D grid we define a square function and a gaussian-shaped function." ] }, { "cell_type": "code", "execution_count": 7, "id": "cddb90ae-4d83-45a1-812a-e9d51bb26faf", "metadata": {}, "outputs": [ { "data": { "image/png": "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8d3vfrfNl88wDMPMBMbU9UAIUZh+22234YMf/CAA3an8ox/9KL7+9a9jeHgYy5cvxxe/+EUXogSA3/zmN7jiiiuwefNmHHLIIVi1ahVuuOEG1GqZ9m7evBlXXXUVnnzySbz+9a/Hxz/+cXeMVuCuBwzDMNOXdnc9OKB+dp0Mix3DMMz0pd1iN64GKtMBq+EN1IFKyjnDMEx1aaAOICvLD5TKit0LL7wAAPghvjfFZ8IwDMOMl5dffhl9fX0HvJ/Kip0d1WX37t1tuVFMMUNDQ1i0aBGeffbZtoQamGL4Pk8efK8nh9HuMxHh5ZdfxsKFC9tyvMqKnZS6V0VfXx//YCeB3t5evs+TAN/nyYPv9eTQ7D6306jw++wYhmGYysNixzAMw1SeyopdT08PPvGJT/AQYhMM3+fJge/z5MH3enKY7Ptc2X52DMMwDGOprLNjGIZhGAuLHcMwDFN5WOwYhmGYysNixzAMw1QeFjuGYRim8lRS7G655Ra84Q1vwEEHHYTFixfn3ozONOe6666DECKY3vSmN7n1r732GlavXo3DDjsMr3vd63D++efn3iy/e/durFy5ErNmzcL8+fNx9dVXo9FoTPaldBRbtmzBueeei4ULF0IIgbvvvjtYT0S49tprsWDBAhx88MFYunQpfvWrXwV5XnzxRVx88cXo7e3FnDlzcOmll2L//v1Bnh07duC0007DQQcdhEWLFuHGG2+c6EvrOEa71x/84Adzv/Gzzz47yMP3ujkbNmzA29/+dsyePRvz58/He97zHuzatSvI066yYvPmzXjrW9+Knp4evPGNb8Ttt98+9hOminHXXXdRd3c33XrrrbRz50667LLLaM6cObRnz56pPrVpwyc+8Qk6/vjj6bnnnnPT73//e7f+wx/+MC1atIg2bdpEP/nJT+id73wn/bt/9+/c+kajQSeccAItXbqUfvazn9H3vvc9mjdvHq1fv34qLqdj+N73vkd/93d/R9/+9rcJAH3nO98J1t9www3U19dHd999N/385z+nP/3TP6WjjjqK/vCHP7g8Z599Np188sn0yCOP0A9+8AN64xvfSBdeeKFbv2/fPurv76eLL76YnnjiCfr6179OBx98MP2v//W/JusyO4LR7vWqVavo7LPPDn7jL774YpCH73Vzli9fTrfddhs98cQTtH37djrnnHPoiCOOoP3797s87Sgr/vVf/5VmzZpFa9eupSeffJI+//nPU5IkdN99943pfCsndu94xzto9erVbjlNU1q4cCFt2LBhCs9qevGJT3yCTj755MJ1e/fupa6uLvrWt77l0n7xi18QANq6dSsR6YJGSkmDg4Muz5e+9CXq7e2l4eHhCT336UJcACulaGBggG666SaXtnfvXurp6aGvf/3rRET05JNPEgB67LHHXJ5/+Zd/ISEE/b//9/+IiOiLX/wiHXroocF9XrduHR177LETfEWdS5nYnXfeeaXb8L0eO88//zwBoIceeoiI2ldWfOxjH6Pjjz8+ONb73vc+Wr58+ZjOr1JhzJGREWzbtg1Lly51aVJKLF26FFu3bp3CM5t+/OpXv8LChQtx9NFH4+KLL8bu3bsBANu2bUO9Xg/u8Zve9CYcccQR7h5v3boVJ554Ivr7+12e5cuXY2hoCDt37pzcC5kmPPPMMxgcHAzua19fHxYvXhzc1zlz5uBtb3uby7N06VJIKfHoo4+6PKeffjq6u7tdnuXLl2PXrl146aWXJulqpgebN2/G/Pnzceyxx+KKK65wrwUD+F6Ph3379gHI3jjTrrJi69atwT5snrGW6ZUSu3/7t39DmqbBjQOA/v5+DA4OTtFZTT8WL16M22+/Hffddx++9KUv4ZlnnsFpp52Gl19+GYODg+ju7sacOXOCbfx7PDg4WPgd2HVMHntfmv12BwcHMX/+/GB9rVbD3Llz+d6PkbPPPhtf+9rXsGnTJvz93/89HnroIaxYsQJpmgLgez1WlFL4yEc+gne961044YQTAKBtZUVZnqGhIfzhD39o+Rwr+4ofZvysWLHCzZ900klYvHgxjjzySHzzm9/EwQcfPIVnxjDt4YILLnDzJ554Ik466SQcc8wx2Lx5M84666wpPLPpyerVq/HEE0/ghz/84VSfSimVcnbz5s1DkiS51j579uzBwMDAFJ3V9GfOnDn4kz/5Ezz11FMYGBjAyMgI9u7dG+Tx7/HAwEDhd2DXMXnsfWn22x0YGMDzzz8frG80GnjxxRf53h8gRx99NObNm4ennnoKAN/rsbBmzRrce++9ePDBB/H617/epberrCjL09vbO6aH70qJXXd3N0499VRs2rTJpSmlsGnTJixZsmQKz2x6s3//fjz99NNYsGABTj31VHR1dQX3eNeuXdi9e7e7x0uWLMHjjz8eFBYbN25Eb28vjjvuuEk//+nAUUcdhYGBgeC+Dg0N4dFHHw3u6969e7Ft2zaX54EHHoBSCosXL3Z5tmzZgnq97vJs3LgRxx57LA499NBJuprpx29/+1u88MILWLBgAQC+161ARFizZg2+853v4IEHHsBRRx0VrG9XWbFkyZJgHzbPmMv08bS66WTuuusu6unpodtvv52efPJJuvzyy2nOnDlBax+mOR/96Edp8+bN9Mwzz9CPfvQjWrp0Kc2bN4+ef/55ItLNiY844gh64IEH6Cc/+QktWbKElixZ4ra3zYmXLVtG27dvp/vuu48OP/zwGd/14OWXX6af/exn9LOf/YwA0M0330w/+9nP6De/+Q0R6a4Hc+bMoXvuuYd27NhB5513XmHXg7e85S306KOP0g9/+EP64z/+46A5/N69e6m/v58uueQSeuKJJ+iuu+6iWbNmzZjm8JZm9/rll1+mv/3bv6WtW7fSM888Q/fffz+99a1vpT/+4z+m1157ze2D73VzrrjiCurr66PNmzcHXTheffVVl6cdZYXtenD11VfTL37xC7rlllu464Hl85//PB1xxBHU3d1N73jHO+iRRx6Z6lOaVrzvfe+jBQsWUHd3N/3RH/0Rve9976OnnnrKrf/DH/5Af/3Xf02HHnoozZo1i/7sz/6MnnvuuWAfv/71r2nFihV08MEH07x58+ijH/0o1ev1yb6UjuLBBx8kALlp1apVRKS7H3z84x+n/v5+6unpobPOOot27doV7OOFF16gCy+8kF73utdRb28v/cVf/AW9/PLLQZ6f//zn9O53v5t6enroj/7oj+iGG26YrEvsGJrd61dffZWWLVtGhx9+OHV1ddGRRx5Jl112We6BmO91c4ruLwC67bbbXJ52lRUPPvggnXLKKdTd3U1HH310cIxW4ffZMQzDMJWnUnV2DMMwDFMEix3DMAxTeVjsGIZhmMrDYscwDMNUHhY7hmEYpvKw2DEMwzCVh8WOYRiGqTwsdgzDMEzlYbFjGIZhKg+LHcMwDFN5WOwYhmGYyvP/AeNV9JYeZBAMAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# create the convolution operator\n", "toeplitz = ts.toeplitz(dims[0], mode=\"full\")\n", "toeplitz.extend(ts.toeplitz(dims[1], mode=\"full\"))\n", "\n", "# apply the convolution operator\n", "res = ts.einsum(\"ijkmno,jn,ko->im\", toeplitz, train, kernel)\n", "\n", "# plot the result\n", "plt.figure()\n", "plt.imshow(res.to_tensor())\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "6d09dc0b-3731-4a63-8fd7-529d2ae641db", "metadata": {}, "source": [ "Finally we create a multilevel Toeplitz matrix by calculating the outer product of two normal\n", "Toeplitz matrices (using the extend method). After doing so we write down the correct einsum\n", "expression and execute it." ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.14.2" } }, "nbformat": 4, "nbformat_minor": 5 }