{ "cells": [ { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## Quadrature\n", "\n", "This is a notebook that illustrates differences in the quadrature methods which are central to the evaluation of\n", "\n", "$$\n", "\\int_0^{\\pi} f(\\theta) \\sin \\theta \\; \\mathrm{d}\\theta = \\int_{-1}^{1} f(\\cos \\theta) \\; \\mathrm{d}\\cos \\theta.\n", "$$\n", "\n", "Quadrature is used to compute the projection onto the associated Legendre functions in `torch-harmonics`.\n", "\n", "In order to illustrate how interpolation and quadrature affect the error in the computation of the SHT, this notebook contains example for both errors." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import torch\n", "import scipy\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "n_theta = 80" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "import sys\n", "sys.path.append(\"../torch_harmonics\")\n", "\n", "from quadrature import *" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Test interpolation\n", "\n", "we first assess the interpolation onto the quadrature nodes:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "# interpolation - careful - this breaks if points align (for non-periodic signals)\n", "def interpolate(t, tq, f):\n", " j = np.searchsorted(t, tq) - 1\n", " d = torch.from_numpy( (tq - t[j]) / np.diff(t)[j] )\n", " j = torch.as_tensor(j)\n", " interp = torch.lerp(torch.as_tensor(f[j]), torch.as_tensor(f[j+1]), d)\n", " # interp = f[j] + (f[j+1] - f[j]) * (tq - t[j]) / np.diff(t)[j]\n", " # print(d)\n", " # print(f[j+1] - f[j])\n", " # print(j)\n", " return interp" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "cost_lg, wlg = legendre_gauss_weights(n_theta, -1, 1)\n", "# cost_lg, wlg = lobatto_weights(n_theta, -1, 1)\n", "tq = np.flip(np.arccos(cost_lg))\n", "teq = np.linspace(0, np.pi, n_theta, dtype=np.float64)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.plot(teq, '.')\n", "plt.plot(tq, '.')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "test interpolation:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "f = lambda t : np.cos(4*t)\n", "# f = lambda t : 1 / (1 + 25 * (2*(t-np.pi/2)/np.pi)**2)\n", "# f = lambda t : 1 / (1 + 25 * np.cos(t)**2)\n", "# f = lambda t : t**5 - 3*t**2 - 2*t + 1.0\n", "\n", "interp = interpolate(teq, tq, f(teq))" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "tensor([ 0.9905, 0.9602, 0.9065, 0.8309, 0.7351, 0.6214, 0.4926, 0.3519,\n", " 0.2026, 0.0484, -0.1070, -0.2597, -0.4062, -0.5428, -0.6661, -0.7733,\n", " -0.8617, -0.9292, -0.9741, -0.9953, -0.9923, -0.9652, -0.9147, -0.8418,\n", " -0.7486, -0.6370, -0.5100, -0.3706, -0.2221, -0.0681, 0.0875, 0.2411,\n", " 0.3888, 0.5272, 0.6527, 0.7625, 0.8537, 0.9243, 0.9724, 0.9968,\n", " 0.9968, 0.9724, 0.9243, 0.8537, 0.7625, 0.6527, 0.5272, 0.3888,\n", " 0.2411, 0.0875, -0.0681, -0.2221, -0.3706, -0.5100, -0.6370, -0.7486,\n", " -0.8418, -0.9147, -0.9652, -0.9923, -0.9953, -0.9741, -0.9292, -0.8617,\n", " -0.7733, -0.6661, -0.5428, -0.4062, -0.2597, -0.1070, 0.0484, 0.2026,\n", " 0.3519, 0.4926, 0.6214, 0.7351, 0.8309, 0.9065, 0.9602, 0.9905],\n", " dtype=torch.float64)" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "interp" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 1. , 0.98737534, 0.94982013, 0.88828261, 0.80431657,\n", " 0.70004207, 0.578092 , 0.4415455 , 0.29385027, 0.13873553,\n", " -0.01988219, -0.1779979 , -0.33161928, -0.4768675 , -0.61007515,\n", " -0.72787881, -0.82730403, -0.90584039, -0.9615049 , -0.99289207,\n", " -0.9992094 , -0.98029737, -0.9366335 , -0.86932027, -0.78005731,\n", " -0.67109843, -0.54519477, -0.40552532, -0.25561663, -0.0992538 ,\n", " 0.05961513, 0.21697881, 0.36886392, 0.51143548, 0.64109364,\n", " 0.75456462, 0.84898336, 0.92196585, 0.97166934, 0.99683884,\n", " 0.99683884, 0.97166934, 0.92196585, 0.84898336, 0.75456462,\n", " 0.64109364, 0.51143548, 0.36886392, 0.21697881, 0.05961513,\n", " -0.0992538 , -0.25561663, -0.40552532, -0.54519477, -0.67109843,\n", " -0.78005731, -0.86932027, -0.9366335 , -0.98029737, -0.9992094 ,\n", " -0.99289207, -0.9615049 , -0.90584039, -0.82730403, -0.72787881,\n", " -0.61007515, -0.4768675 , -0.33161928, -0.1779979 , -0.01988219,\n", " 0.13873553, 0.29385027, 0.4415455 , 0.578092 , 0.70004207,\n", " 0.80431657, 0.88828261, 0.94982013, 0.98737534, 1. ])" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "f(teq)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# plt.plot(teq, f(teq), '.-', label=\"reference\")\n", "plt.plot(tq, f(tq), '.-', label=\"reference\")\n", "# plt.plot(tq, interp, '.-', label=\"interpolated\")\n", "plt.legend()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Test quadrature with associated Legendre polynomials\n", "\n", "let us test different quadrature modes:" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "def precompute_legpoly(m_max, l_max, x):\n", " \"\"\"\n", " Computes the values of P^m_n(\\cos \\theta) at the positions specified by x (theta)\n", " The resulting tensor has shape (m_max, l_max, len(x))\n", " \"\"\"\n", "\n", " # compute the tensor P^m_n:\n", " pct = np.zeros((m_max, l_max, len(x)), dtype=np.float64)\n", "\n", " sinx = np.sin(x)\n", " cosx = np.cos(x)\n", "\n", " a = lambda m, l: np.sqrt((4*l**2 - 1) / (l**2 - m**2))\n", " b = lambda m, l: -1 * np.sqrt((2*l+1)/(2*l-3)) * np.sqrt(((l-1)**2 - m**2)/(l**2 - m**2))\n", "\n", " # start by populating the diagonal and the second higher diagonal\n", " amm = np.sqrt( 1. / (4 * np.pi) )\n", " pct[0,0,:] = amm\n", " pct[0,1,:] = a(0, 1) * cosx * amm\n", " for m in range(1, min(m_max, l_max)):\n", " pct[m,m,:] = -1*np.sqrt( (2*m+1) / (2*m) ) * pct[m-1,m-1,:] * sinx\n", " if m + 1 < l_max:\n", " pct[m,m+1,:] = a(m, m+1) * cosx * pct[m,m,:]\n", "\n", " # fill the remaining values on the upper triangle\n", " for m in range(0, m_max):\n", " for l in range(m+2, l_max):\n", " pct[m,l,:] = a(m,l) * cosx * pct[m,l-1,:] + b(m,l) * pct[m,l-2,:]\n", "\n", " return torch.from_numpy(pct)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let us plot the Legendre polynomials:" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXIAAAD4CAYAAADxeG0DAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAAsTAAALEwEAmpwYAABvrUlEQVR4nO2ddXhURxeH37sbd3chIbi7u7sVSmmhBi2laEvta0uVGlSAUqG0tBSKu3txKA4hBOLE3ZNNNrv3+2MDhZKEyMZg3ufJk+TKzNm7u78798yZcyRZlhEIBAJB7UVR3QYIBAKBoGIIIRcIBIJajhBygUAgqOUIIRcIBIJajhBygUAgqOUYVEenDg4Ocp06daqja4FAIKi1XLhwIUmWZcf/bq8WIa9Tpw7nz5+vjq4FAoGg1iJJUkRR24VrRSAQCGo5QsgFAoGgliOEXCAQCGo5QsgFAoGgliOEXCAQCGo5QsgFAoGgliOEXCAQCGo5QsgFAoGgCshKTeHE2j9JiYnWe9tCyAUCgaAKSImO4uyWdWSlJOm9bSHkAoFAUAVkpyYDYG5rp/e2hZALBAJBFZCZohNySzt7vbcthFwgEAiqgOzUFIxMTTEyNdN720LIBQKBoArISknG3Fb/o3EQQi4QCARVQmZqMpZ2+vePgxBygUAgqBKyUpKxECNygUAgqJ3IWi3ZqSlY2DtUSvu1Ssi1Wpns9LzqNkMgEAjKRE5GOlqNBmMzG2RZ1nv7tUrI/14VyPrPzlW3GQKBQFAmsgpDD89siyfsymO+IMjWxZyc9HxU2erqNkUgEAhKzZ0Ycklhga3LYx5+aOduDkBKTHY1WyIQCASlJytZNwpXGllj7Wiq9/YrLOSSJHlKknREkqQASZKuS5I0Sx+GFYW9m07Ik6OzKqsLgUAg0DuZKUkgKbBzc0Ch1P/42UAPbRQAr8uyfFGSJEvggiRJB2RZDtBD2/dhbmOMkamBGJELBIJaRVZyEgqlJQ7ulpXSfoVvDbIsx8qyfLHw70zgBuBe0XaLQpIk7N3MSY4RI3KBQFB7SE9MRJbNsSv0KugbvY7xJUmqA7QCzhax7yVJks5LknQ+MTGx3H3YuVuQHJ1dKSE8AoFAUBmkJyYiKSyxd7eolPb1JuSSJFkAm4DZsixn/He/LMvLZFluK8tyW0dHx3L3Y+9mTn5uAVmpIp5cIBDUfGRZJictBUlhgb17DR6RS5JkiE7EV8uyvFkfbRaHvYfujiYmPAUCQW1AlZWJVqPG0MQacxvjSulDH1ErEvArcEOW5W8qblLJiMgVgUBQm8gsDD20cnREJ5f6Rx8j8i7ARKC3JEmXC38G66HdIjE2M8TCzpjkaBG5IhAIaj4ZhXOC9i6OxH/+OXlhYXrvo8Lhh7IsnwAq5zZTDA7uFmJELhAIagWJt2MAsNFkk/LHSiz79wcfH732UatWdt7B3t2CtLgcNGptdZsiEAgEJZJ4OxZQYh58FaWDA6atWum9j9op5B4WaLUyKbHCvSIQCGo2aXHxSAoLDE7vw7JfXySF/mW3Vgq5Q2HkSlKUcK8IBIKaTVZqMgaGliiy07Hq379S+qiVQm7tZIaBoYJkIeQCgaCGk5edgjEGKG1tMWvXrlL60EeulSpHoZCwczMnSUx4CgSCGowqJw9tQSYmOUZY9u2LZFA5klsrR+QADp6WJEVliqX6AoGgxhIdGA3IWGSnYzlgQKX1U3uF3MOCvGyxVF8gENRcYm5FAmCjzcW8Q/tK66f2CrmnLh1kUmRmNVsiEAgERRMfqhNyt1bNkAwNK62fWivk9u7mIInIFYFAUHNJua0TctehQyq1n1or5EYmBtg4mZF4W4zIBQJBzUOj0ZKbnY5SNsC6S9dK7atWCXlSbhLHoo7d/d/B04KkSDEiFwgENY+U0GS02ixMjc2RDAyQZZntIdsp0Bbova9aJeQLzy9kzpE53Ei+AYCjpyWZKSpU2epqtkwgEAjuJ/LgBWRtBjZurgD8fv133j3xLgcjDuq9r1ol5G+2exMbExteP/o6GfkZOHgWrvAUE54CgaCGEXc5HFmbgWOj+lyIv8Cii4vo592PAXX0H4ZYq4TczsSOr3t8TWxWLO+feP+ukCcIP7lAIKhBaNLSSEovAAowsLXgjaNv4GHpwcedP66UnOS1SsgBWjq15LW2r3E48jBrI1ZjYWcsJjwFAkGNIm3ffjLNdCHSG+N2kpmfyTc9v8HCqIbX7KxKnmn0DAPqDGDRxUUYOBWQGCGEXCAQ1Bxi95xEQy4AV/IDmddpHvVt61daf7VSyCVJ4qPOH+Ft5c3xvP2kJ+aSl6v/mWCBQCAoK+r4eBLD0pC1uhr0/ZoNZ1jdYZXaZ60UcgBzQ3O+6/kd8eYRAMSGp1SzRQKBQAAZO3eSaeGJVpuKxhDe6PpOpfdZa4UcwNfGl5f7PAvA+hM7qtkagUAggNRt20h08CZfkYSDqyfGBsaV3metFnKAgY36IVvkExOewqZbm6rbHIFA8BiTE3iD/FvB5Ji6Y6LIx97Zo0r6rfVCDuBb1w0vVX3mn53PlcQr1W2OQCB4TDn+66dkmjshycZoVRlYO7tUSb+PhJA7+1hhnG2Ju6EXrx15jcScxOo2SSAQPGYcCTuExZGLRDZuAXI2Wo0aayfnKun70RDyOlYAvOPzEZnqTOb8PYd8TX41WyUQCB4XQtNDWf3nm9hlgVXTwSiUupBoGycxIi81jt46ITdKtuLTLp9yJfEK88/OF9WDBAJBpZORn8Gsw7PoflWDZGVJusYWSxtdwRvhWikDxqYG2LqYER+eSf86/Xmp+UtsDtrMX4F/VbdpAoHgEaZAW8CbR98kJSmStre0WA4ZTlJMNkZmOQBYOThViR2PhJADONWxIj48A1mWebXlq/Ty7MWCcws4HXO6uk0TCASPKN9e+JaTMSf5OHcgUr4aTZfBaAtkJDKxsLPHwMjo34PVuRCwHfKz9W7HoyPk3lbkZuSTlZqHQlLwebfP8bH2Ye7RuURkRFS3eQKB4BFjS9AWVgas5KmGT1H39G2M/OqSpnQEQK1K0U10FuTBzT2waQos8IP1EyFov95teWSE/M6EZ0K4blmsuaE5i3svRiEpmH5oOhn5GdVpnkAgeIS4EH+Bj898TEfXjsy2e4LcS5ewGTWKxIhMTC0NyUqIxFoVDgvqwZrxOvFuMgomboWG+l+u/8gIuYOHBQqlRHzYv4LtaenJtz2/JSorirl/z62UyhwCgeDxIiozijlH5uBh4cHCHgvJ3LINDAywbmFPvP8tHNVnycrIxFoVCg2HwNMb4Y1gGPE91O0FSgO92/TICLnSUIGjlyVxYen3bW/r0pb3O77P6djTfPHPFyKSRSAQlJvM/EymH5pOgVzAkl6LsIq4SPr6VVi651OwfRqpWVZY26sACZuR82HUj1CvHygNK9WuR0bIAVx8rEmIyERToL1v++h6o3m+yfOsu7lORLIIBIJyUaAtYO7frxOREca3pg2ps3wgmV+OR5OVj3W3hsR3/AUA4+adALBx964y2x4pIXf2tUKj1pIU9WBB5tltZtPbszdfnfvqvgLOAoFAUCKyjBx5ji82juJU7GneS0ikg/8u8GxPWm5HDJwcsXh7E3EFjZAkQE4DwNbVrcpMfKSE3LWuNQBxoekP7LsTydLAtgFvHH2DwJTAqjZPIBDUFmQZYi7BgXnwXXNWbRjFutxwnlM4MKb/d/BGMOoeC8m+HIz1qNFIBgbEhaZj72FBZlIcxubmmFhYVpm5ehFySZJ+kyQpQZIkf320V14sbE2wsDUmvgghBzAzNOP7Pt9jZWzFqwdfJS47rootFAgENRZZhjh/OPQxLGkNy3rC6aUccnBjgb0tfd17MPvpg9B8HBhbkrZhI8gyNmOfQKuViQ/LwMXHmtS4WGxd3CqlNmdx6GtE/jswUE9tVQhnH2tiixFyACczJ5b2WUp2QTavHnqVrPwH3TACgeAxIiEQjnwGS9vDT13gxHdg4w3Dl3Dthe28LaXQzKE5n/VcgFKhBEAuKCBtwwbMu3bFyMODlJhs1HkaXOpakxYXg41L1blVQE9CLsvyMaBGlOhxrWtNVkoe2Wl5xR5T37Y+3/T8htC0UF4/+jpqrboKLRQIBNVOcggcXQA/dIIfOsDRr8DCGYZ8A3NvwaStRNbrxfST/8PB1IHFvRdjamB69/Sso0cpSEjAdvyTwL/uXAdPEzKSEqvUPw6g/4DGYpAk6SXgJQAvL69K68fZV7cwKC40nbqti89z0NmtM/M6zWPeqXl8eOpDPu3yaakehSKvX+X0prVkpSSjVuWSr8pFq9VSr10nWg0chmu9Bnp7LQKBQI+khMH1LbqfuKu6bV6dYNACaDwcLP9NcJWqSuWVg6+gkTX80PcH7E3t72sqde06DJydsejRA9Dpjamloa5OpyxX+Yi8yoRcluVlwDKAtm3bVlowt6OnJUoDBbEPEXKAUfVGEZcdxw9XfsDV3JXpraYXe2xmchJH//yVm6ePY+XohKtfA4xMTTE0MUWdp+LmqWPcOPE3LnXr0WrgMBp27YGi8DFMIBBUE+lROuH23wwxF3Xb3NvCgM+g8Uiwdn/glNyCXKYfnk5cdhzL+y/Hx9rnvv35kZFknziBw6uvIhnoJDQuJB1nH2vS4mIBsH1UhbyqUBoocPaxIjYorVTHT20xlbicOH6++jPO5s6MrT/2gWOuHNjN33/+ClqZTk9MoN2IMRga3V+Hr+fEF7l+7DCX9+5kz9JvuHHyKENmvoGJuYU+XpZAICgtGbEQsFUn3lH/6La5toS+H+mWydsWH9+t0Wp469hbXEu8xrc9v6WlU8sHjklbvx4kCZsnxgCQnZ5HemIuTbq5kxYbDIDNo+paqUpc/ay5uO82+aoCjExKfomSJPFex/dIzEnk0zOfYm9iT2+v3nf33zx9goPLf6BOi9b0nTwN62ISxRuZmtFqwFBa9h/C1YN7ObziJ/56by4j33gfO7cH7/oCgUCPZCXqxPv6Fog4Bcjg3BR6v68Tb/u6D21ClmU+PfspRyKP8Hb7t+nj3eeBY7QqFWkbNmLZpw+GLjotiA3W+cdd61njfygWE3MLTKsw9BD0F364BjgNNJAkKUqSpBf10W55catng6yViQ8tXaIsQ4UhC3sspIl9E9489iYX4i8AEB8azN4fvsWtQWNGvPF+sSJ+L5Ik0aLfIMa+Nx9VZgZ/vfca4VcuVuj1CASCIshOhgu/wx/D4ev6sHsu5CRDz3fg1XPwyknoPrdUIg6w9PJSNt7ayORmk3m60dNFHpOxazeatDRsn3nm7raYoDQMjHQpQlJjY6p8NA76i1p5SpZlV1mWDWVZ9pBl+Vd9tFteXHytkSSICU4r9TlmhmYs7bMUV3NXZhyawdWwc2z96mPMrK0Z8fr/MDAsW64Ej8ZNefqzb7C0d2Tz5x/if+RAGV+FQCB4gNxUuLQKVo2BhfVgxyzIiIZuc+GV0/DqWej5FjjWL1OzawLX8PPVnxnlN4qZrWYWeYwsy6SsXoVxvXqYtW93d3tMcBouvtYolQpSY2Oq3D8Oj6hrxcjEAEcvS2JK6Se/g62JLcv6LWPSzmfY8OU8HHLMmPDJQsysbcplh7WTC099/BXbv/mc/cuWYG5ji0+rtuVqqzzIGg3qqCjygoIKf4LRpKWhzc0t/MlBzskFQGlri9LODqWtDQa2tiht7TD2q4tJ48YYenoiKR6pRcCC2oQqA27u1rlNgg+BVq2L8+4yE5qMBpdmUIHFN3vD9/L52c/p6dmTeZ3mFRu9lnvpEnkBN3D58MO7x+TlqEmOzqL9UB/yVblkJidi5+ZRblvKyyMp5ACufjb4H4tGo9aiNCy9CLlauDKrYDQ3U/dwoWsuExwrNllpZGrG8NfeYd2H77Dj2y948sMvcPb1q1CbxSHLMir/62QePkT2iZPkBQUhq1R39xt6eGBgb49kZoqhrS0KU1MUZqbIsowmLQ1NSip5gTfJSUlBk/7voiqFhQUmjRph0rgxJs2bYdGlC0obm0p5DVWNLMvkqzS6VX3/QWGgwNCo+iOPZK2W6Fs3iA4MIDczA1VmBrmZGeRmZaLKzMDAyBhn33q41PXDpW59HLy8URpUbra9Sic/W1eQ4foWCDoAmjyw8oAOL0PT0eDWukLifYcT0Sd45/g7tHJqxYLuCzBQFC+JqatWobCywnr4v/nEY0PSQQY3PxtSY6IBsPPwrLBdZeWRFXK3ejZcORRJQkQGrn42pT4vJyOdsIN/49i8MYF2f/PywZdZMWAF1sbW5bbFyNSMUW/N46/357Lly4+Y8OnXWDnqp5afXFBA9ukzZB46SNbhIxQkJIBCgWmrVtg++STG9ethXK8exnXrojA3L3W72vx83Sj+xg1UAQGorgeQum4d8h9/gFKJWatWWPTqhUWvXhj7+jy8wRpAXo6a5JhsUqKzSI7OJjkmi5SYbPJyis9Tb2FnjL2bBfbu5tgV/rZ1Ni/T4KA8yLJMQlgIgaeOcfPUcTKTEwEwMDbG1MIKE0tLTC2tsLJ3JC8nm+DzZ/A/oqs8ozQwwNHbh3odutCy/2CMTM0q1Va9kZ8DwQd00Sa39kFBLli6QtsXdBOWHu1Aj0+GF+MvMufIHOrZ1OP7Pt9jYmBS7LHq+Hgy9h/A7plnUJj9ez1jgtJQKCWcfay4dfYyAPbuQsj1hqufTnhjgtPKJORnt6xHrcpjyLMzqK8czbSD05h2aBq/9PsFM8PyfyEs7OwZ/faHrJ33Jps+/4CnPl6AiUX5R/uarGzSNm4gdeWfqGNikMzMsOjSBYs+vbHo0QMDW9tytw2gMDLCtEkTTJs0ubtNLihA5e9P5t9/k3XkbxIWLCBhwQKMvL2xHDQQmyeewMij6h8rSyIrNY/gC/EEnU+4Wz0KwMjUAHs3c/zaOmPtYIpC+eDoTp2nISU2m5SYbCJvpKDV6EbtSgMFXk3sqNfOmTrNHDA01t+oPTstlcv7dhJ46hhpcbEolAbUadGKbhOexbd1O4zNir4Zy7JMRmICcSFBxIcGER0YwPG/fufc9k20GTyCVoOGFXtutaJWQcghnXjf3APqbDB3hFZP69wmXp30Kt53CEwJZPqh6biYu/Bj3x+xNCo5yiR11WrQarF9esJ922OC0nDytsLASElKdBSSQoGNi6ve7X0YUnUUWmjbtq18/vz5Su/nr4/OYmlnzLAZLUt1fHpCPCvmvEyjbr0ZMFU34XEo4hCvHX2Ndi7tWNpnKcZK44e0UjKR16+ycf483Bs25ol3P0GhLJsIqGNjSflzFWnr16PNysK0bRvsJk3CokcPFMYVs62sqKOjdaJ++AjZp0+DLGPeuTM2Y8di2bsX0r2FZ6uQ3Mx8Qi4mEHQ+QTfhLYOjlyW+LR1x8LTA3t0CC1vjMiU10mi0pMXnkBKTTVxIOsEXE8hJz8fAWIlPcwfqtXXCq7F9uUfqmoICLu/byakNf6FWqfBs0oyGXXrg175TuUPZYoNucmbzWkIvnsPYzJxWg4bRevCIKg+Ne4CCfAg9UijeuyEvA0ztdKsrm4wG7y6VUkXnDqHpoTy/93mMlEasHLgSV4uShVebnU1Qr96Yd+yIx+JFd7er8zUsn32Mlv286DSqLtu//oykyAhe+O7nSrNdkqQLsiw/MNFWq4T8ox3XCYgpfe1Nv8h8nFI0nG5uglyKL61vwHbsEm5wpeMrqE2s7m5PU5wmxmgFFppmeKpfQargg4x97FXq3thBdJ1uRPt2L9U5Jqocep7ZSrsrR5BkmYB6bTndpj/RLr4VskVfWGWm0Mr/OK39j2GdlUqWmRWXG3fhn5Z9yLC0qxIbTFVavOMKcEzVIAHZJhKJtkoSbZTkmuh5VCfLWGdpcUzV4JimwVADaiVEOxoQ7WSApogRfnFYpYThFbQfs+wk0ux8uV2vPypz+4efWErMMuNwCz+BXeJNNEojwhsMJNmlmd7aLw0KWUPT/Mt0yj1Ke9UpLOQssiQLzpl05rRpd/yNWqKRKt9BkC8lEG60EBktdfLfwFh2fug5HS4dYNDfa1g+/l2iXP8NZbTN0NAsJJ9rdY1ItVLS7MzPqMzsCGr+4KLCe2nsZsUHw5qUeExxFCfkj6xrBSDNUolbkgbLbC0ZFiWPfE2z4rGPu0acV8f7RBzARtsJWZ1PrOFqoliOh3oKEuV/nE52bY51ajhu4SfIsK1Dpm3xuWckWUuLgFP0PbER85xMLjTrwYl2g0mzdih3/5VBhqUdRzuN4FiHYfhF+NPm2lE6X9hHp4v7udy4CyfaDSbVRj/zAv/FpFDAnVI1aBU6MY23V5JtIullQqxIJIl0SyXplkpCPGVsMrW4JhVQJ64A98QCopwMiHEsWdCNVOl4BR3ELjEQlYkNt5qNJc2hnt5tzrF0IbjZE5hmJeB9ax91A7ZjmRZJRL3+yJU48pVkDY3zr9FJdYwOqpNYadPJkcw4b9KR0yY9uGLcGo1UdZOyalKIMPoWGTXe+XNLJeKSVkvHiwe47ep3n4gD2GRq0UqQbq5A0mowzk0h1aFeZZlfsp21aUReVlTZan6de5z2Q31oN6TkCbmdi74i/PIFXlyyvNhHzz8D/uSrc18x1Hco87vORyGVf5SXn5vDn2/PokCtZtJXS4rsM9f/OvGffELulSuYtmyJ8/vv3eezrumoo6NJ/vVX0jZuQi4owGroEBxefhnjuqVboPEw0hNzOb87jJtn41EqJZr29KBVPy/MrKrHpQOQeDuTf3aGEX41CRNzQ1r196JpD/cHVhj7HznAod9+AqDDyLG0HTYagypwRWk1Gk6s+5Nz2zbiVKcuw+a8rV+frlYLkWd0bpOAbZCdAIbm0GCgzm3i1xcMi59UrCwScxJ5bu9zpKpSWT5gOY3tG5fqvIy9+4iePRv3xYuw6t//vn3rPzuHgZGC0XPbkBITxYo5Uxk4bQ5Nejy4IlRfPJYjchNzQxw9LYkKTC1RyHMzMwj+5xTN+w0q0X84sfFEVAUqFl9ajKHCkA87f1huMTcyNWPorLf467257P9pMcNf/99dn62s0ZC09AeSfvwRpZ0drp9/jvWI4bUultvQ3R2XefOwf3kqKStWkLpuHRk7dmLZvz+Os2aVO9pFna/h7LZQrh2JQlJKNO/lQav+XphbV+0cQVE4elkyZFpz4sMzOLczjNNbQrh88DZdnqhH/fbOaDUa/l75C5f37cKraQsGvDILK4fKeVIpCoVSSfcJz+HeoDF7l37DqndmM2DabOq161T+RmUZos7D9c1wfStkxoCBKdTvrxPvev3BqPoiZ5Jyk5i8fzKJuYks67es1CIOkLJiBYZeXlj2uV+cVdlqEiMz7+pKcnQkAHbu1TPZ/0gLOYBHA1uuHI5EnacpNrrgxvEjaAoKaNarf5H772VK8ynka/P56cpPKCQF8zrNK7eYO/v60fWpSRxb9RtXD+6lRb9BqOMTiJk7l5xz57AeMQLn995FaVnNk1MVxNDZCee338L+5ZdI+eMPUlf+SeahQ9g++SQO018tU4RN9M1UDq8KJCMxl8bd3Gg/1KdGCPh/ca5jxdDpLYgLTefEhiAOrggg8FQI2cnbiA0KoM3QUXSf8FyZJ7v1Rd027Xnmi0Xs+PYLti+cT/uRY+k6flLpJ4DvlEK7I97pkaA01lWMb/IJ1B8IxtWfMC45N5nJ+yYTmx3L0j5Li0yCVRw558+Te+UKzu+9h/Sf9yn6VirI4NFQ99lNiY4CqJbFQPA4CHlDWy4duE1scBpeTR6cQJJlmWuH9+PiVx9H79KNEKe1mIZW1rLs6jKACol52yEjibh6ib//+AXb7FxUXy5Eq1Lh+vnn2IwaWa42ayoGtrY4zZ6N3TPPkPj996SuWUP69u04TJ2K7cRnUJTgWshXFXB6cwj+x6KxcjRl5GutcK9fsRDLqsDF15rRb7Th5PqTnNv2PbI2l+b9X6THMyOrtBRYUVg7OTP+4684vOIn/tm6Aa1GQ/enny/eLlmGeH+d2+T6ZkgNB4Uh1O0Nvd+DBoPhP/NL1UmKKoXJ+ycTnRXND31/oJ1Lu4efdA9JPy9DaWeHzZjRD+yLCkzFwFiJcx3d602JjsTC1q7aQjwfeSF39bNBoZSICkwtUsjjQm6RFBlBvynF5yL/L5IkMb3ldGRZ5pdrv6CQFLzX8b1yibmkUDDwldn8PmMy+379gV6ODnh/9x3GvjUjGqUyMHBwwPXDD7F7+mniC2PRU9eswWnu61gOGPCAkNwOSObIqkCyUvNo0deTDsN9a8SKy9ISePJvLu5cgpm1FTZuT3PrnBk5mZfp9UxDrBxMH95AJWJgaEi/KdNRGhhwfsdmFAoFXZ969v73IOHGv+KdHAySEnx76vKbNBoKpjXvhnpHxKMyo/i+z/dlFvFc/+tkHz+O42uvoTB98D2KCkzFzc8GpYHuO58SHYldNSwEusMjL+SGxkpcfK2JDCy6Et21w/sxMDamQefShQHeQZIkZrSagVbW8qv/r2hlbblG5tr8fNI/nU/j4Egu1XEhedwE/B5hEb8X43r18Fq2jKyTJ0n48iuiZ8/BvEsXXD6Yh5GXF5oCLSc3BXPtSBS2LmaMeaMNLr7lX2FbHZzdsp4Ta1fi2bgZQ+e8jamFFdePR3NqcwhrPvmH3hMbUq/tw6MnKhNJkuj9/FRkrZZ/tm1EYWBAl94dCsV7CyTeAEkBdbpCp+nQaDjoMTxS3yTlJjFl/xQiMyP5vs/3dHDtUOY2kpctQ2Fpie1T4x/Yl5WaR1p8Do276pJjyVotyVGRNO3Vr8K2l5dHXshB5175Z2cYqiw1Jhb/hjvlq3IJPHmMBh27YWxW9skYSZKY1XoWCknBL9d+Qa1V83Hnj+8WaH0YmsxMoqbPIOfsWZrPfZ2MtDjObFlPvU7dHqsc5hZdumC+ZTOpa9aS+O23hA4bjvmUGZzLaUFsaAYtenvScZQvBoa1ZxQOcHrjGk5tWE2jrj0Z8MpslIXVZJr28MCrqT0Hfg1g//LrJIRn0GlUXRTK6pvMliSJPiMHoI2+zJlNa1Ec/ZJOjpG6lZWDF+rE27J6bzilISEngcn7JxOXHcfSPkvLJeJ5ISFkHjiA/dSXi5yfirqpGxTe8Y+nJ8SjzlPh4FWnQrZXhNoVBlFOPBragcwDo/Jbp0+gVuXSrPfDJzmLQ5IkZraeyastX2V7yHbeOfEOBdric3fcQZ2QQMTESeRcuIDbV1/iMHkyfV+chtLIkP0/L0LWasttU21EUiqxe+ZpfHfvIr/bSPZesCUhOJkevc3oOq5erRJxWZY5ue5PTm1YTZMefRn46py7In4HK3udn79ZD3cuH4xk++Ir5GbmV72xabfh5CL4uQfS923op11PEzcNp5K8OdtgIbywB9pPqRUiHpcdx/N7nyc+O54f+/5YLhEHSF72C5KJCXaTJhW5P/JGCiYWhji46yZzE2+HAeDoXadc/emDx0LInetYYmxmwG3/5Pu2Bxw/gq2rO24NGlW4j6ktpjK79Wz2hO3hzWNvotaoiz02LyyMiPFPob59G8+ffsJ6+HAALGzt6DlxMtGBAVw+sLvCNtU2ZFkm8Iaak3IPjO1taH/7N5Tznif2gw/RZGVVt3mlQpZljv/1O2c2r6NZ7/4MmDqz2NqtSgMF3Z9qQJ9nGxEXms76z86REFH6lcvlJiMGTv8Ay/vCd83gwDzdIqR+nyDNuUb/r3fSqFsvTmzdytVDeyvfHj0QnRXNc3ufI0WVws/9fqaNc5tytZMfFUX6zp3YjhtbZDSVVitz+3oKXk3skBS6eYTEiHCQJBw8ii8hV9k8Fq4VhVKBV2M7IgJSkLUykkJClZVF1A1/2g0fo7fogRebvYihwpAF5xeQp8nj6x5fP5BRLT8yktvPPoes0eD158oHFvg06dmXwFPHOP7XH9Rt3V5vWRJrOgX5Go6uuUng6Ti8m9nT7/nGGModSFzyPSkrV5J9/Diun32GecfyjbKqAlmWOfrnci7s2kaLfoPp88LUUsX+N+zkir27BXt+usbmBRfp/lR9GnfRc3GCzHjdAp3rW+D2aUDW5fHu84Eus6DdvxFbCmDgtNnkZmZw6NefsHf3wr1h6WOvq5rQ9FBe2v8SuQW5LO+/nCYO5V80l/TDj7qnwxdeKHJ/QkQGqiw13k3/nSNIuh2OrYsrhiZVv9DpDo/FiBzAu6k9uRn5JEZmAhB25QKyVkvdNvoVhklNJjGv0zyORx1n6sGpZOX/O5JUx8Vx+/kXkPPy8PrttyJXaUqSpIugkWUO/PI91bHytqpRZavZvvgygafjaDfUhyGvNMfYzBCFuTnOb7+F9+pVSIaG3H7uOeLmf4Y2N7e6TX4AWZY58vsyLuzaRqtBw+jz4itlWsDl6GXJ2P+1xdXPmiN/BnJma0jF3/vsJDj/G/w+FL5pCHve0FXY6fU/mH4Bpp6Abq/dJ+J3UCiUDJnxBlaOjmz/5jMyk5MqZkslEZAcwHN7nqNAW8BvA36rkIjnh4eTvm0btk+Nx9C5aFdShH8ykgReje4R8sjwavWPw2Mk5J6N7UHSvREAIefPYmZtg6tf2UpClYax9cfyRbcvuJJwhRf3v0iqKpWC5GRuP/8CmtRUPJcvx6RB8f1aOznTbcKzhF+5yI0Tf+vdvppEVmoeW76+SHx4Bv0nN6H9UJ+7j6x3MGvVCp+tW7CdOJHUP/8kbOQoci5dqiaLi+b4X79zae8O2gwdRa9nXyrXU56phRHDZrSgcTc3LuyN4MifgWg1ZZwryUmBiyth5UhYWB92zoHMOOj+Bkw7A6+egR5vgsPDi5uYWFgw8o33Ueflsf3r+RTkV4MPvwQuxF/gxX0vYmJgwh+D/qCBXYMKtZe49AckIyPsp0wp9pjb/sk4+1jfDZpQq1SkxsXi6FW9OfkfGyE3szLCyduKCP9kNAUFhF++gE+rtpW27H2w72C+6/UdIWkhvLJ5IqHPPYs6NhbPZT9j2qzpQ89v2X8IrvUa8PfK5eRmZVaKjdVNalw2mxacJzNFxbDpLUoMw1OYmuLy7v/w+v13ZLWaiKefIeHrb5BrgLhc2LWNc9s30aLfYHo880KFXHUKpYKeExrQdkgdbpyKZc/P/qjzNSWfpEqHy2tg9VhdHcvtMyA1DLrM0o26p5/TjcKdyj4XZO/hxeDprxMXEsTB5UtrzBPiiegTTD0wFQdTB1YOWom3VcX803lBQWTs3Ind0xMwcCg6IV1ORj4JEZn3u1WiIkCWcajGiU54jIQcdO6V+PAMQi9dIS8nm7ptK9ff2sOzBz92W8Qzv4aTFxqCwVfvYdamdJMwkkJB38mvosrK5Phfv1eqndVBXGg6mxZcQFMgM+q11rrIolJg3rEDPtu3YTNmNMm//EL4hKfJDw+vXGNL4MbJo/y98hfqdehM7xde1st8iyRJdBjmS4+n6hN+LYnt311Glf2fyfO8TLi6AdZMgAV+sHUqJARCx2nw0t8w8zL0/aDC9SwB/Np1pNMTE7h+9BCX9myvUFv6YGfoTmYcmkEd6zr8PvB3XMxdKtxm4vdLUZiaYvfii8UecztA9zR/r5AnRoQDiBF5VeLdxB5kuHb4OEpDQ+o0a1Wp/cmyjNuizfjGaFn+hBXPpXzLlcQrpT7fqY4vrQeP4NqhfUQHBlSipVVL+LUktn17CWMzQ8a80QZHr7LlklFaWOD6ySe4L1mMOjKS0NFjSNuytcpHi+FXL7F36bd4NG7K4Olzi41OKS9Ne3gwYHJTEm5nsHnhRTLjU3STlesm6sR782RdvpN2U2DyIZh9Ffp/Am6t9J4Kt9OY8fi168jff/7Kbf/Sf4b1zR/X/+Cd4+/Q2rk1vw34DXvTii9MUgUGkrlvH7bPTiox70+EfzJmVkY4eP6bQybpdjiGJqZYV3NQwmMl5E7elphYGBB94yJeTVtU+ixz8k8/kbF7N05z5jD39Y1YGVkxed9kjkUdK3UbncdOwNLekYPLl6IpeHh8ek0n6Hw8u3+8hq2rOWPeaIO1Y/mXqFv164fPtq2YNm1K7DvvEPP6XDSZVeOGig8NZvvXn2Hn7sGIue9VWgpav+ZWDB+RQ3ZCKps/Pkj6mrfh9hloPQme3wtzrsPAz8CjbeXlXkf3hDjo1dewdXVn95KF5GSkP/wkPaKVtSw4t4CF5xcyoM6AUpVnKy0J33yDwsoK++eeK75/jZbIgBS8mtrf99SVeDsMBy/vas9M+lgJuaSQcPbWkJ+bgk+rsuVeKCsZ+/aTuGgxVsOHYT9lMp5Wnvw56E98bXyZeXgmW4K2lKodIxNTer8wlaTICC7s2lqpNlc2QefiOfDrdVx8rRj5Wiu95A03dHHBa8VvOM6eTca+fbqJ0IuVOxGaFhfL5i8+xNTSkjHvfISJuZ6z/BXkw829sPklWOCH+8kJjHT5nAKFJVvzfiRt4iUYvAC8K6eeZXHoUi+/iSork/0/L6myJyC1Rs3/TvyPlQErmdBwAl91/wojpX5unNmnTpF97DgOU6eitC4+/UNcaDp5OQW6p/pCZFkmKSIcx2qOWIHHTMgBlAYRAJjbNqy0PlQBAcS8/TYmLZrj+sknd+/g9qb2rBiwgg6uHZh3ah7fXypdeKFf2w74tevI6Y1rSE+IqzS7K5Nb5+I48Nt1XP1sGDq9xQOFFiqCpFTiMPVl6qxeBZJExMSJJC9fXimrY3PS09j02Ty0Wi1j/vcxFnZ6yjmiUUPQQdj6Kiz0gzVP6irJNxkJE7fg+L9DjHirKwVaQ7Z+d4W0hBz99FtGHL196PrUs4ScP8O1w/srvb/0vHRePvgyu0J3Mav1LN5u/3aFCrrci6zREP/VAgzd3bF95ukSjw29lHS36PYdMpMTUWVnVbt/HB5DIc9MDEKhdCAupHLcFAUpKUS+Oh2ltTWe33//QEFkM0Mzvu/zPaP8RvHz1Z95+/jb5GseHnnR67mXkRQKDv32U42JHCgtt/6J4+BvAZUi4vdi2rIlPls2Y9mvHwkLvybylVcoSE3VW/sF+flsXfgpWakpjHpzXsVzT2sKIPRv2D5TFyq4egzc2K5LBzthA8wNghHf69LEKg1w8LBkxJxWaAq0bP3mEmnx1SPmbQaPwKtpC478sYzU2OhK6ycyM5KJeyZyOeEyn3X9jMnNJus19W/69h3kBQbi+NqcElMoy7JMyOUEPBvb3ffZjQsJAsC57sNDOSubx0rINQUFxAYHYu1aj9DLicha/QqirNUS89bbaJKT8Vj6PQaOjkUeZ6gw5KPOHzGr9Sx2h+1myv4ppKnSSmzbysGRLuOeJuzSeYLOntSr3ZXJzbNxHFwRgFs9nYgXV9xDXygtLXH/9huc571PzqnThI0arRdXiyzL7PtpEbG3Ahn06hzc6pfziU6rgfATsPM13SKdlSPAfxP49YHxa+CNYBj1k666jsGD4uLgYcHIu2J+sVrEXFIoGDhtDgYGhuxesrBS5m6uJF7hmd3PkJybzLJ+yxhWd5he29fm5pL43XeYNGuG1eDBJR6beDuTrJQ86ra6//scFxKEQmmAo3f1Zyt9rIQ8PjSIgrw8fFq2IDs9n/hw/ea1SFnxO9nHj+P09lsPra0pSRKTm03mq+5f4Z/kzzN7niEiI6LEc1oNHIZjHV+O/L6MvJzqGY2VhZtn4zj0ewBu9W0Y8mrli/gdJEnCbsIEvNesQTI0JGLSJJJ//a1Crpazm9cRePIoXZ6cSP2OXct2slarm6Dc8xZ80xh+HwKX/wLvLjBupU68xyyHhoPB4OHVjuzdC8VcI1ebmFvaO9B3ynTiQoI4s3mtXtveF76PF/e9iLmhOasGr6KtywMlKitMyh8rKYiPx/nNNx46yg+5mIikkKjT/P748viQWzh618HAsOoKSBfHYyXkkQH+ALTs3xGFUiLkUqLe2s69coWEb7/Fsl8/bJ96qtTnDfIZxPIBy0nPS2fCrgmciT1T7LEKpZJ+U14lKy2Vk+v/1IfZlUbwhYRqEfF7MW3aBJ/Nm7Ds3ZuEBQuImvYqmvSyR1vcPH2Ck+tX0ahbLzqMGle6k2QZoi7Avnd1ial+GwDnV+iiS574Dd4MgXF/QOMRYFj2yJ07Yq7V6sQ8I6nq0xY06NSVJj36cHbzer2Ex2plLT9c/oG5R+fSyK4Rqwavwsda//5ndXwCycuWYdGnD2btSg56kGWZkEsJuNe3wcT8X8GWtVriQoJxqVtP7/aVh8dKyKNu+GPn7omtswMeDe0IvZSgF3+zJiOD6Ndex9DJCddPPymzH6+VUyv+GvIXTmZOTD0wldU3Vhdrl6tfA1r2H8zlvbuIDw2usO2VQYR/Mgd+u45LXWuGTGtRrdV8lJaWuC/6Dud33yXr5EnCRo8h1/96qc+PC77F3h++xa1+I/q/PLPk91aWIeayLpvgouawvDec/RlcmsKoZbqR9/jV0HQMGFW8JJi9uwUjZreiQK1l26LLZKfnVbjNstLruZexcnRkz9KvUatU5W4nR53D3KNz+fHKjwyvO5xfB/yKnUnpFomVlYQFC5DVapzffOOhx6bEZJOekEvd1vfHiafGxZCfm4OzEPKqRavREB0YgGdj3fL4uq0dyUhSkRRVsfSosiwTO+8D1HFxuH29sMQQppLwtPRk1eBVdPPoxhf/fMFHpz8qNhVu1/GTMLO25sAv36PVPmT5dhUTE5TKnp+vYe9uUW0j8f8iSRJ2E5+hzqo/kbVaIiZMIHX9+ofexDOTk9i68FPMrG0YMffdoh+hZRnir8OhT2BJG1jWA04vBYf6MOIHnXhPWActnqyUepb27hYMndGCnIx8ti+6jCqr+PTJlYGxmRkDX5lDekJ8uZ8SY7JimLRnEoduH2Ju27l82uVTvYUX/pfss/+QsXMn9lMmY+T98GX9oZcTQQKfFve7Ve5MdLrU1X+upvLw2Ah5QlgIalUuHo10Qu7T3AFJgtAKulfSt20jc+9eHGfNwqxVxVaKmhuas6jXIqY0m8KmoE1M3j+ZpNwHs84Zm5nT89kpxIcGc3nfrgr1qU8SIjLYufQqVvYmDJvRAmPTmpUl2bRFC3w2b8KsXTvi5n1A7Dv/KzaTolqlYutXn6BW5TLqzfcxs7a5/4DEm3Dkc1jaAX7sDCe+AWsPGLZIF23yzCZo9TSY2hTVvF5x8bFmyLTmpCfksmPJZfJVVbtwzKNxU1r0G8SF3duJDbpZpnPPx53nqV1PEZMVw9I+S3m2ybN6jUy5F1mtJu6TjzF0dy8xMda9hFxMxNXXGnPr++cu4kJuYWhsgr1H9dXpvJfHRsgjb+j84x6NmwFgammEWz0bgi+U372ijk8g/rPPMW3TBvvJxedoKAsKScHM1jP5qvtXBCQH8OSOJ7mccPmB4xp06kadFq05ue5PMlOqP8VoSkw2OxZfwcTckOGzWmFqWTkjqopiYGuL57KfcXj1VdK3bSN8/FPkR9w/ySxrtexZ+g2JEWEMmfXmvylKk0Pg2AL4oTMsbQ9HvwRzR10ptNdvwrPboc1zYFY5LoGS8Ghgy4CXmpIUmcWupVcpeFiiLT3TbcLzWNjZs++nRWgKHv5UIMsyK6+vZPL+yVgZWbF6yGq6updxErmMpPy5ivzgEJzf/V+RBZX/S1p8DsnRWfi2ejD6LC4kCCefunpPy1Be9CLkkiQNlCTppiRJwZIkva2PNvVNVMA1bF3dsLD990tWv70LafE5JESUfVm3LMvEffghcl4ebvM/1fsS3UE+g1g1eBVGSiOe3/c8f934674bjiRJ9HnhFbQFGv7+/Re99l1W0hNz2bboEgoDiRGzW2Jh+/DIi+pEUipxnDEdz2U/UxAXR9iYJ8g8ePDu/tOb1hD0zym6P/M8vnWc4MR38HN3WNIaDn8KxhYw8Et47QY8v0tXCs2i+guA+DR3oM/zjYgJTmPvL/5oCqquXKCxmRn9Jr9KctRtzm7ZUOKxOeoc3jz2JgvOL6CHRw/+GvJXpUxq3os6Pp6k77/HokcPLHr1KtU5N8/GIUk8kJVTU1BAYlhojZnoBD0IuSRJSmApMAhoDDwlSVKNKiei1er843fcKneo29oRpYGCm2fKvloyY+dOso4cwXH2bIzq1NGTpffTwK4Ba4eupYtbFz7/53PeOfEOOep/Q81sXFzpMPpJbp09SciFs5Viw8PITs9j+6JLaAq0DJ/VEmvHshexri4sunXDZ/MmjOrUIWr6DBK+/pqbJ49yeuMamjRyp03MEt2k5cEPQGEA/T+F2f7w4n7oOBWsXKv7JTxA/XYu9JzQgIhryRz644be10qUhG/rdjTs0oOzW9aTFFl0KG1YehgTdk1gf8R+ZreezXe9vtNbzpSSiP/8C+SCApzf/V+pXDeyVubmmTg8GtlhbnP/wCQpMoICdf6jJeRAeyBYluVQWZbzgbXACD20qzeSbkeQl5ONZ6Fb5Q7GZob4tHAg6Hx8mUYvBYmJxH86H9OWLbGbNFHf5t6HtbE1i3svZnrL6ewO3c0ze54hND307v52w0fj4OnNweU/kJeTXam2/Je83AJ2LLlCTqaaYdNbYu+m55wjVYChuzvef63GZvQwQletZM+iL3E1zqCvdh2SVg19P4RZV2DKYeg8A2xqhk+0JJp0c6fjSF+CzsVzYmNQla4E7vXcSxiZmbH/p8UPTMTvC9/HU7ueultX88VmL1aaP/xeMvbtJ3PvXhymvYKRl1epzokNSSMzRUWDDg+myI2vYROdoB8hdwci7/k/qnDbfUiS9JIkSeclSTqfmKi/+O3SEBsUCFBkkeUGHV1QZam5fT35gX1FIcsycR9/jDY3F9fP5iMpK99HppAUvNziZX7s+yNJOUmM3zmebcHbAFAaGNJ/6kyyU1M5tnpFpdtyhwK1ht0/XCU1JptBLzXF2Uf/ERmVTlYinFuOYvUorBQruFzfCcMCLc2Cc8nvvQqmHoeuc8C2TnVbWmZaD/CmRW9Prh6O4uK+khea6RMzK2t6PzuF2OCbXN67EwBVgYqPT3/M3KNzqWtTl/XD1tPRtWOV2FOQmkrcxx9j0rgx9iXkGv8vgWfiMDBW4tvyQf94TFAgJpZWWDtXPA+6vqiyyU5ZlpfJstxWluW2jsUsXa8s4kKCMLG0wsrxwQo0no3tMLU05ObZ0rlXsg4fJvPAQRxmTMfYt2qX5nZx78KGYRto6tCU906+x/+O/48cdQ6ufg1oPWQEVw/uJTLgWqXbodXKHPgtgJigNHo/2wivJnpKHFUV5KTAhd/hj+HwdX3Y9ToFmQlsz+hLnqEFw6fPxdTclojp75Dy56pal9fmDpIk0eUJP+q1c+bM1lACTsZUWd8Nu/bEp1Vbjq9diX/IeSbsnsCGWxt4oekLeisEUVri53+GJiMD188/QyrlCsyCfA0hFxLwa+VYZPhs1A1/PBo2qZKnidKiDyGPBu593vQo3FZjiAsJwqVuvSIvvFKpoF47Z8KuJj1YheU/aHNziZ//Gcb16pWYu7gycTZ35pd+vzCtxTR2he3iyZ1PEpgSSJdxT2Pt7ML+nxejzq+8hSGyLHNszU1CLyXSdWy9Ih89axy5aXBpNawaoyuFtmMWpEdC19eQp57koOHTxMRnMvDV1/Ds3RefTRux6NaN+PnziXl9LtrsqnVZ6QtJIdHn2UZ4Nbbj71WBhF2pmidhSZLo8+IraLQaflv0Dsk5yfzU9yfmtJmDoaLqlrNnHjpExs6dOLz8MiYNSl/PM+xqEvkqDQ06PvjZzkxOIj0+7u56lJqCPoT8HFBPkiQfSZKMgPFA9deDKkStUpEcebvEiYkGHVzQFsiEXEwosa2kZctQx8TgMu/9Ut/dKwOlQskrLV9hef/l5KhzmLBrAn8Fr6PvlFdJi4vl9MY1ldb3uZ1hXD8eo3t071OD/cWqDLiyDv56UldNZ9s0SLoFnV6Fl47CjIvQ530unA/i+t8H6ThmPA06dQNAaWWFx9LvcZwzh4y9ewkb9yR5ISHV/ILKh9JAwYCXmuLobcW+5deJCU6r9D7T89L5JGAB/9RNxD3emG/c36GLe5dK7/deNGlpxH74IcYNG+LwUulixu9w82wcFrbGuNd/sFpQVOETr8d/5tuqmwoLuSzLBcB0YB9wA1gvy3Lp10BXMvFhwciytkQhd/SyxNbVnMDTxbtX8sPDSVn+K1bDhz00P0NV0c6lHRuHb6SbezcWnl/IR9GL8e3WlfM7NlfK8n3/o1Gc2xVOw86udBxZ/RnfHiA/W5dJcO3TOvHe8hLEXYMOL8PkwzDrKvT7GNxagiQRcuEfjq76jXrtO9P5iQn3NSUpFDi8/BJev/2KJjWVsLHjSN9VcxZflQUjEwOGTm+OpZ0Ju3+4SnJ0xVYzl8TJ6JOM2jaKQ7cP0WfUszh41eH8X2vIz626xF66eaxP0KSm4fbZfKQyVG/Kycjn9vUU6rd3QVI8+AQfGXANY3NzHLwqVuxZ3+jFRy7L8m5ZluvLslxXluX5+mhTX5RmKa0kSTTq5EpcaHqRS/ZlWSbu0/lIxsY4v/Hw/AxVia2JLd/1+o5PunzCjZQbfGu5HYW5SeHCDP2t8Au5mMDRtbeo08yeXk83qDn+QXUuBGyD9c/CV3Vh4wsQdU63MOeFfbpwwQHzwaPNfaXQEiPC2LV4AU51fBn06mvFrgMw79gRny2bMWnYkJjX5xL36Xzk/Ifnj69pmFoYMWxmCwwMFexYcoXMlPLnRSmK3IJc5p+Zz9SDU7EysuKvwX8xpeVL9JsynazUFE5tWK3X/koibeNGMnbvxnH6dEwaly0SOuBEDLJWpmGnol2GUTf8cW/YpMYsBLrDI7+yMy4kCAt7B8xtii+qCtCoiysGhgquHY16YF/mwYNknziB48wZxeYYr04kSWKk30g2Dd+Ej1M9DtQLJzEijCPr9RPFEn0rlf2/XcfFx4r+U5qiUFbzx6YgDwJ3w6bJupH3+km6HN8tJ8Bzu3QLdQZ/BV4diyyFlp2WypavPsbY1JSRb77/0Nqths7OeP/xO3bPPkvqqlVETJyEOja2sl5dpWFlb8qwmS1R52nYsVh/eVmuJF5h3I5xrL25lkmNJ7Fu2Doa2esixNzqN6RF34Fc3L2D+LDKd0/lBQURP/8zzDt3wr6MLhWtRov/sWg8G9li6/JgUrOs1BRSY2PwbFSz/OPwGAh5fEgQrqWI9zQxN6R+e2dunY27b9JTm5dHwudfYFy/PrYTJpTQQvXjbuHObwN+44khrxDqkcPlbVtZf+SXCkVeJEVlsfuHq1g7mOqSYFVXJsOCfAg6AFtegQX1YO1TEHwQmo6GiVt1S+SHfgN1ukIJo6WC/Hy2LfyU3IwMRr45D0s7h2KPvRfJ0BDnd97G/bvvyAsOJmzkKDL//ls/r60KsXe3YMi0ZmQkqdi59ArqCizlz1Hn8NW5r5i4eyIqjYrl/ZfzRrs3MFbev4Cm6/hnMbWy4mAlJ3nT5uYS/dprKMzNcfvyyzKvtg69nER2Wh7NehZd+amm+sfhERfy3KxM0uJjS51qsmlPDwrytQSe/ne0lbpqNeqYGJzfeRvJoGYlgSoKpULJ802fZ8bcJeRbKLi+ciPT97xCXHY5Vq8m6ZIwGZoYMGxmy/vyMVcJmgIIOQzbpuuiTVY/AYG7oNFQeHqTLjnV8CVQtxcoH/7e3K3yE3STwdNfx9m37CW6rAYOwGfTRgzc3Iia+goJCxciq6s242BFcatnS/8Xm5AQnsG+X/zRaMq+lP9M7BlGbx/NnwF/Mq7BOLYM30IH1w5FHmtiYUHPSZOJCwni6oG9FTW/WOI/+5y8oGDcvvyyXE/O1/6OwtLeBO9mRd/co274Y2RqilOdmjc/9EgL+b8rsEon5I6elrj6WXPt7yhkrUxBaipJP/2EefdumHfqVJmm6p2Grk2YOPdzrHKNkA4HMXLbSNYFrkMrl+5Lm5uZz44lV9CotQyb2QJLu5LdD3pDq4Gw47BzDnzdAP4cBde3Qv0B8NRaeCMIRv4A9fqCsmw3ljOb1hJ48ihdx0+iXofO5TbRqE4d6qxdg834J0le/isRzz6HOq52FcX2beVI96d0S/n/Xn2z1E9tGfkZfHjqQ6bsn4KBwoAVA1bwXsf3sDAqeVVvwy498GrWkuNr/iArNUUfL+E+0nftIm3DBuynTMaia9kjZJKjs4gJSqNpD3cURUxygq4wjXuDxiiqYBFgWXmkhfxucdQyjLya9fQgI0lFxPVkkn/6CW12Nk5z51aWiZWKZ6OmdBw1Dp9IUzpn+vHp2U95ds+zBKYElnhevqqAnUuvkpmiYvC05pW/9F6rhYjTsPsN+KYR/DEUrqwFn+7w5CqdeI9eBg0GlaoUWlHcOHmUUxtW07h7b9qPHFthkxXGxrh++CFuCxeSFxhI2MhRZB07VuF2q5Km3d1pN6QOgadiObMttMRjZVlmZ+hORmwdwZbgLTzf9Hk2DttY6jJskiTRd/I0NAVq/v5Dv0neVAEBxL77HqatWuE4c2a52rj6dxRKQwWNO7sVuT8nPY2U6Mga6VYBqPm+ggoQHxqEras7JualFyLfVo6YWxtxZU8w9f9ag82Y0ZjUrzk5FcpKxzFPEXb5IsZnY/ng1bdZEryMJ3c+yfgG45neavoDCYs0ai17f75GYkQGA19uhpufTeUYJssQdR6ub4GArZARDQYmUK+/zu9dr79equgARFy9zN6l3+LesAn9Xpqh14gb66FDMGncmOg5c4h86WXsnn8epzmzyxTyVp20G+pDTkY+F/dGYGphSMu+D+YiCU4NZv7Z+ZyPP08T+yZ83/t7mjiUXJO2KGxd3Ogwahyn1q+mac++1GnZpsL2qxMSiJz2KkpbWzwWLyrX+g5VtppbZ+Oo394ZE4uiz4+4qivg7dWkeYXsrSwe6RF5YkRYmf1ZSqWCJt3diQrNIcfCDYcZMyrJuqpBaWDA4Blz0RSokffcYNvwrYytP5Y1gWsYtmUYO0J23H2s1mplDv4eQOSNVHpNbFhknokKIcsQfRH2vw/fNYdf+8K5X8C1BYxerqum8+Sf0GSU3kQ8PiyEbV/Px87NnZFvvl8phXKNfX2os24tNk+NJ2XFCsLHP0VeWJje+6kMJEmi+1MNqNvakZMbg++bH8pWZ7Pw3ELG7hhLUFoQ8zrNY/Xg1eUS8Tu0G/4Etm4eHPztxwqvQNbm5RE1Ywaa9HQ8f1ha7oiyGydjKcjX0qxH0ZOcAMEX/sHcxrZc8ypVwSMr5Hk5OaQnxOPoXfY8x3Xt01Bq8ojp/jKGTtWfZ7qi2Lm502vSFG5fu8yt/Yd4r+N7rBm6BjcLN/534n88t/c5riVe49iamwRfSKDzGD8aFfOIWWZkWbco5+BHsLgV/NILzvwAjg1g5I+6Ccun1kDzsWCs33SmafFxbP78A0wsLBj9v4/K9GRWVhQmJrh+8AEeS79HHR1N2JgnSNu0uVbkalEoJPo93wSPhrYc/jOQkMsJbAvexvAtw/kj4A9G+I1gx8gdjK0/FmUF46cNDA3pN3ka6fFxnN28rtztyLJM7Hvvo7pyFbcvv8Ck0YMJ8UqDOk/DpQMReDS0xdGr6M+fpkBN+OUL+LZup/e6A/rikXWt3MmHfLe6SxnIWrYEzzQvwg26kxKbjZ2rfkaH1UmzPgOIuHqJE2tW4lTHlyYtWrNq8Cq2BG1h8aXFfPvTKtpED6B+bzta9Stdqs8SSbgB/pt1rpPkIJCUOp93t9eg4dBKr6KTk57Gps/eR6vRMO6Dz0sdZlhRLPv0wWR7U2LefIvYd98l68RxXD/6CKVVzc4OqTRUMGhqM/5acILdyy6zo+EKnHyd+KbXN7RwbKHXvjybNKdx996c276ZRl17Yu9R9s9b8rJfyNixA8dZM7Hq37/ctvgfjSY3U037ocUP+KICrpOfm4Nvm6KjcmoCNfP2ogeSbusebR2965TpvJxz58g+dZpWA3wwMFJyflfteER+GJIkMWDabOw9vdi16CvS4mJRSArG1B/DVza/0iZ6ADedz/K26kW+ufANmfllr5pEUjAc/QqWdoQfOurKolm6wNBvYe4tmLQVWk+qdBHPz81h8xcfkpWSwqi3PsDevWpzwhg6O+P12684vvYamQcOEjpyJNln/6lSG8pKaFooc07O4nvXt8g2TWNk8Ay+a/6T3kX8Dj0mvoiRqSkHflmKrC1b+GPquvUkfvstVkOGYD91arltuDMa92xki2sJc0EhF89iYGiEd7PKuRb64JEV8sSIcIzNzLG0L73fTJZlEhctRunogMukcTTv6UHQhQRSYmpn9rv/YmRiyoi57wGwbeGn5KtyCTwdy/ktt6nbypF35j7HQN+B/O7/O0M2D+GP63+QW1B0ceK7pIbDiW/hp27wfRs4Ml9XcHjQAt0ined2QtsXwLxqRsSaAjXbv/mchPBQhs15G7f6Dauk3/8iKZU4vDSFOn+tRjI05PazzxL32WfFFnuuLmKzYvnw1IeM3j6ai/EXmdbxZV56ZyDmFibsWnKV1LjK+eybWVnT/enniQ68jv/Rgw8/oZD0HTuI+/BDzHt0x+3zzyo0cX3taBS5mWraDS1+Hk2WZULO/4NXsxYYGldRCG45eHSF/HY4Dl51yvRG55w+Tc758zi8PBWFqSkt+3liaKTk3O5HY1QOYOPswtDZb5McFcmGTz/n0B8BeDS0pd8LTXC1dGV+1/msHbqWBnYNWHh+IYM3D2b1jdXkae6ZmEqPglNLYFkvWNQCDn6oCwsc8LluefwLe6HDS2D5YP73ykRTUMCuxQuIuHqJ/i/NwLd19Sc3M23eHN8tW7B95hlSV/5J2KjR5F6+XN1mEZ8dz6dnPmXwlsFsD9nOkw2eZPfo3bzQ9AXsHKwYMasVANu+vURaQuUkvGrasy/uDRtzbNUKstNSH3p8xoEDxLz9Dmbt2+OxaFGFIoPyVQVc2n8bz8Z2uNa1Lva45MgIMhLjqVuD3SrwiAq5LMsk3Q4rk1tFlmUSFi3CwNUVm3G6OGNTCyOa9fIg+EICyTGVlzGuqvFu3pImPccSF3QRU7MrDJ7WHKXhvx+FxvaN+aX/L6wYsII6VnX44p8vGLxxIOv2vEr+8r7wbRPY/x7IWl02wdnXYPJB6DQNrPQ0SVpGCtRqdnz7BUFnT9Fz0hSa9upXLXYUhcLMDJf33sXr9xVo8/MIn/A0Cd98i7Yakm8l5iTq3s/Ng9l0axOj/Eaxa9Qu3unwDrYm/+YjsnE2Y8TsVmgKZLZ9e4mMJP0/SUgKBf1emoFalcvhFT+XeGzW8eNEv/Y6ps2a4fnDUhQPyY/zMPyPRqPKKtk3DhByQecSqwmDgpJ4JIU8IzGB/NxcHL1KH7GSdfQoqitXcZg6FcU9d/pWfb0wNFZy9iELJmoTYVcSCbnijrldc1KjD3P72vkij2tr4cVvtp1YrnXEPS2aTxOOMViZwMo2Y8h+5SS8fBS6zAIbPUyOVoCC/Hx2fPMZIefP0PuFqbQZUqNKxt7FvGNHfLdvx3r0KJKXLSN8zBPkXrlSJX1HZkYy/8x8Bm0exNrAtQytO5Qdo3Ywr9M8XC2KLiJt727B8Nm6JFvbvruk94yJuj486fTEBG6dOUHQP6eKPCbr+HGips/A2M8Pz2U/ozCvWPCBKlvNpf238Wpih4tv8aNxgJALZ3H2rYeFXc2ugvVICnni7XCg9BErsiyT9MOPGLq7YzN61H37TCwMaTPQm7ArSYRfS9KzpVVPhH8ye5f54+htxaQv3sXZ149dixYQFViYQj47Gc6vgD+GwdcNkPa8QYecbP6o/wI/t5+Hp2sbFqSco9/hl1h8cTFJudV7TdT5eWxd8AmhF8/Rb8p0Wg0YWq32PAylhQVun36Kx08/oklPJ3z8U7rc2ZnlmFwuBdeTrzP36FyGbhnKxqCNDPIZxPaR2/mo80d4WBYfN30HR09Lhs9qiSpLzbZvL5Gdpv/qU22Hjcaxji+Hfv0RVdb9T75pW7YS+co0jHx98fp1uV6if85sDSEvt4BOo+qWeFxWSjKxwbeo26Z9hfusbB5JIU+K0Pm0S5v8Pef0aVRXr2I/ZXKRK8Na9vXC1sWMY2tvVShbXHUTeSOFPT9dw97dgmEzWmBmbc6otz7AwtaWzfPfJWbxCF1yqp2zIT0aur0Or5yGV88i9Xqbzo3GsmLgClYPXk1H144sv7acARsH8NHpjwhNr/onFnWeiq1ffkzEtcv0nzqT5n0HVrkN5cWyZ098d+/C9umnSV2zhtDBQ8jYu08vcedaWcvxqONM3jeZ8TvHczL6JM82eZZ9Y/bxSZdP8LIq2xOUk7cVw2a2JCcjn23fXSInQ78uIaWBAQOmziInI52/Vy4HCgdXPy8j9p13MGvXFu8/V2JgV/Fop7jQdK4fj6F5bw8cPEpet3D96CGQZRp26V7hfisbqToWLLRt21Y+f77ox3l9sOPbL0gIC+HFxaXL6RDx7HPkh4ZS9+ABFMZF5/KICUply9eXaD3Qm04jS76T10TCryWxd5k/Nk5mjJzTChODXLi5G/w3kxV4nPXhjcjWmPDE0Ma49poELs3uK8RQFBEZEfxx/Q+2BW8jX5tPe5f2jGswjt5evSu9NmO+KpctX35E9I0ABk6bTePuvSu1v8ok99o1Yud9QN6NG1j06IHz++9j5OFe5nZSValsDd7KhlsbiMyMxMnUiWcaP8MT9Z94IBVDeYgJSmPHkstY2pkwfFZLLGz1G8VxfM0f/LN1A6Pf+gDTXftIXb0aq6FDy1zlpzi0Gi3rPztPXo6apz7ogJFJ8ctoZK2W32a/jIW9PU9+8EWF+9YXkiRdkGX5gQQ3j+SI/E7ESmnIuXSJnLNnsXvhhWJFHHSpPxt2cuHy/tu1buIz6Fw8e368hp2zCSMGRGKy87nCUmgvQ/x1LLq+wNi338PU3o1NByKJzzV7qIgDeFt5M6/TPPY/sZ9ZrWcRnRXN3KNz6b+xP0suLSlX6tzSkJ4Qz9p5bxIdGMCgGa/XahEHMG3WDJ8N63F66y2y//mH0KFDSVy8pFRFn2VZ5nLCZd45/g59N/Tlmwvf4GjqyJfdvmTvmL083/R5vYg4gFs9G4bNaElWWh6bF1wkLV6/0SydxjyFrYsbexd8SuKav7B7/nncvvpSb3lrrh6JIjk6i27j6pco4qBLWZsWH0uzXuVfbFSVPHIj8oL8fBZPeoIOo8fRZdwzDz0+cuor5F66hN/hQw+dRMnNzGf1B2ewd7dg5Gutak65sxLwPxLG0XWhuNnEM9jsXYy1KWDpCo1H6pJTube9W0UnIymBdR++Q35ONk+8Px9nn7I9eWi0Gk7GnGTdzXUcjzqOJEl0cu3EEN8h9PHqg5mhWYVfz23/K+z47ktkrYYhM9/ERw+Jl2oS6uho4hcuJHPPXgwcHXGcPQvrkSOR/pM6NS47jp2hO9kZspOQ9BDMDc0Z5juMcQ3GUc+2dGmby0tCRAY7llxBUkgMn9nioS6K0pJ77RrX3nid41aGNPD2Y+iCRXppFyAzRcVfH53Fvb4NQ6Y1f+h3d/eShYRePMfLP/1Ro+LHixuRP3JCnnQ7nD/emM7gmW/QqEuPEo9VFaYfdZg5A8dp00rVfsCJGI6sCqT7+PrFVhKpdtQqCDnExZ2BnA5uhbfxeQa6/Y5B08E68fYsugQa6Ea76z56G7VKxai3Pij3gprorGg23drErtBdxGTHYGpgSh+vPgzzHUZ71/YYKMqWHUKWZS7u3s7RVb9i5+bBiLnvYutadvdDbSHn4iUSvvyS3CtXMG7QAOe33kTbthkHIg6wM3Qn5+POIyPT0rElw+oOY6jvUL3cKEtLalw22xddRp2nYcirLUqMxX4YsiyTunIl8Qu/xsDRgYgh/bjyz0lGzH0Pv3YdK2yrrJXZufQKMbfSeOqDDlg5mJZ4vCori5+mTqRpr/70ffGVCvevTx4bIb95+gQ7v/uCZ75Y9NARZfTrc8n6+2/8Dh9CaV26D6Ksldn1w1Uib6Qw6vXWDw1fqjIK8iH0CPhvRg7czZnk4VzMHkM9tyj6POWFsm63Ekug3UtafBwbPnmXrJRkekx8gVYDh5X76UMra7mUcIkdITvYH76fTHUm9ib29PbqTS/PXnRw7YCRsuRHZ3V+Hgd/WUrAscP4tevIoFdfw8i06kSrupBlmdjtG0j8+juMElK5UlfJui6gblSHob5DGeIzBE+rqk0/cC8Zybls/+4y2el5DJraDK/GZQ/RK0hNJfbd98g6fBiL3r1x+2w+srk5a96fS0ZiApO+WoKlfcVWBZ/dEcr5XeH0eKo+TUvIcHiHS/t2cvi3n3jm8+9qXLbDx0bIT29cw6mNfzHzjw0lPhKpo6MJ7j8Au0mTcH7rzTL1ocpWs+GL8xTkaxj3v3aYW5ev2EGF0agh7Bhc3ww3doIqDbWRI4fV7xMc60mTri50n9Co2IonJaHKymLPD98QeuEf6nfsSv+XZ2JsVjHxzNPkcTzqOLvDdnMy+iQ5BTmYGZjR1b0rvbx60c29G9bG998Y0+Lj2Pndl8SHBtF53NN0HPVkjc1Apy9uZ9zmSOQRDt8+zOXEyyjVGsZetWDwCRVG2XmYdeqEwytTMWvXrtrdezkZ+WxffJnUmGy6jqtH0x7upbJJ1mhI27SJxG++RZOdjfMbc7GdOPHuuSkx0ax6exbOdf0Y+/78cletD7uaxO4frtKwsyu9JzYslW0r35qJhMTEL/Xn2tEXj42Q71q8gJhbgUz5/tcSj4v//AtSVq/G78B+DF2LXhBREklRWWz66jyOXpaMmN0KpUEViYtWA+HHCwsybIfcFDCyhIZDyPAazZ69NiRFZ9NpZF1a9feq0Bdd1mo5t2MzJ9auxMbZhWFz3ilXWuCiyNPkcTb2LEcij3Dk9hGSVckoJAVN7ZvS3rU9be1bU3A6hEs7t93NqV7Tl0mXl+TcZP6J+4ezsWc5G3uWqKwoAOrb1r/75NLIrhHa7BzS1q0l+bcVaJKTMW3TBoepUzHv2qVaBT0vt4ADv10n4loyjbu40n18g/tWCv+X3KtXifv4E1T+/pi1bYvz++9j0uDB4i3+fx9k34/f0eXJiXQc/WSZ7UqLz2HD5+ewdjJj9NzWGJSicHh0YABrP3iT3i9MrZFrEh4bIV/51kzMbWwZ885HxR6jycwkuGcvLHr1wn3hgnL3FXQunv2/XqdZLw+6P1mJVYS0Wrh9WjfyDtgG2YlgaK4rfdZ0NNTtQ3RYLnuX+aPVyPR/sQneTfW3Ei0qwJ+di78iLyuLns9OoVmf/uUeIRWFVtZyLekax6KO8U/MWdL9Q2gTYI2FyoA0X2NchnSlhU87mto3xcbERm/9VgeyLBOVGYV/sj9XEq9wNvYswWnBAFgYWtDWpS0dXTvSw6NHsQt2tCoVaRs3kbx8OQVxcRg3bIjtk+OwGjoUpaV+c7qXFq1W5p/toVzYG4GLrzUDX276wJOqOj6exCVLSN+4CQMnJ5zefBOrIYOLvQnJsszuJQu5efo4T374Je4NSp9zPF9VwMYvL5Cbmc/Yd9piZV+yX/xOf+s+fJvU2GheXPwLRiYPP6eqeSyEXNZqWfzsWFr0G0jPSVOKPS75199IWLCAOps2Ytqk/NVOAE5sDOLKwUg6jPClzUBv/Y2MtFqIPq/L6R2wFTJjwcAU6veHJndKoZkhyzL+R6M5sT4IaydTBr/SHBtn/fuPs9NS2b1kIbf9r2Dr6kb7keNo1LUnSgP9pbRPjrrN4RU/c9v/CqaujuR0d+es4U1uptxERvc5dbdwp5lDM5o6NKWxfWN8rH2wN7GvdhdDUWi0GmKyYghOC8Y/2R//JH+uJ18nPS8dAGOlMa2cWtHBtQMdXDrQyL5RmSaB5fx80rZtI3X1X+QFBiKZmmI1aBC248Zi0qJFtVyT4AsJHPojAGMzQwa/0gwnbytUN26QvGIFGbv3AGD37CQcXpmG0uLhS+3zcrL5862ZyLLMM18swtTi4TeqfFUBe366RvTNVIbNaolnw9ItJAq9eI4tX35EnxdeoeWAIaU6p6p5LIQ8PSGe5TNepN9L02nep+hVfrJaTXC//hh5eeG98o8K96nVaDm08ga3zsbToo8nXcb4IZXDJ60zToaYi4UFGbZCRhQojcCvn27kXX8gGP9b5SY7PY9ja28ReimROs0d6Pd8Y4xMK69WiKzVEnTuNGc2rSUxIgxrJ2fajxhLk559UBqUbwGQOk9F6MVzBJ48RujFfzA0MaHLkxNp0XfQ3WrlWflZBCQH3BVD/yR/YrP/LUlmaWSJj7UPPlY++Fj74G3ljZOZE05mTjiYOpQ5QqYs5BbkkpiTSHxOPHHZcYRnhBOWHkZYehgRGRGotWoAlJISPxs/mjo0pYlDE5raN8XP1k8vC6dkWUbl70/a+g2k79qFnJODcb16WA0bhmWvnhj5+VWpqCdFZbL7h6tkp+VRL+8Srqd+w8DUBJuxT2A7cVKZFzvFBt1k3Ydv4VqvIWPe/aTEcn25Wfns/P4qibcz6T2pIQ07ls5tqtVq+POtWRTk5/Hc1z/qdYCiTx4LIQ+7dJ7NX3zIkx9+gUejpkUek75jJzFvvIHHjz9g2auXXvqVtTInNgRx9UgUDTq60GtiQ5TKUvrM75RCu15YTSc1HBSGULe3rnZlw8FgYv2fU2RunonjxIYgCvK1tB/mQ6t+XuW/gZQRWZYJvfgPZzatJS4kCAt7Bxp37YlL3fo4162Hpb1DicJRoFYTfuUiN08dI+T8WdR5Ksxt7WjYuTvtR47FzOrhkUDJucncTLlJWEbYXeEMSw8jMTfxvuMkJOxN7e+KurmhOeaG5lgYWmBmaIaFoQWmBqZIPGivRtaQo84hS51Ftjr77k9GfgZJuUnE58Q/UIBDKSnxtPSkjnWd+24uDewaYGpQ+Y/qmqxsMnbvIm3jJlRXrwJg6OGBRc+eWPTqiXm7dpVWGFqbm0v26dNkHjpEyvFz3HDoT4JTa2zM8ug7pRXOjVzK3faNk0fZvXgBDTp3Z8iMuUVOeGemqNix+DIZSSoGTGmCT4vS1yIIOHaYPUu/YcisN2nYueYuyX8shPz8zi0c/fNXXvlldbFiEDZ2HNqsLHx37dRr9IMsy5zfHc4/O8J0o+MXGpe8eiw+4F/xTg7WlULz7akbeTccAqa2RZ6WkZzL0dU3uR2QgqufNb2eaYitS/WUopNlmYgrF/ln20aibwag1ejy0JhZ2+BStx5OdXzRarWoMjPJzcy4+5OZnEh+bi4mFpbU79CFBp2749G4iV787pn5mURlRpGQk0B8TjyJuYl3/07JTSFbnU2WOoscdQ4qTemy+UlImBma3b0JWBpa4mDqgJOZE87mzjiaOt7929PCE0Nl5aYnKC3q+Hiy/j5K1pEjZJ8+jZyXh2RmhknjRpg0bnz3x9jXF6mMI1BZlilISCDvVhB5QUHknD9P9qlTyCoVCgsLLLp3x7J/PxIdWnBsfQi5WWpa9fei3ZA6GBiW733+Z9tGjv/1O+1GPEH3Cc/dty8lJpsdSy6Tn1vA4GnNca9f9PenKArUalbMeRlTSyuenv9NjY6KKk7Ia+bzQzlJiYnC1NKqWBHPvXoV1bVrOL/3nt7fLEmSaDfEBxNzQ46tu8VfH5yhyxP18Gvr9O/oNPGWTrivb4bEQJAUUKcbdJ4BDYeBefETlDkZ+Vw9EsnVw1HIQPfx9Wna3b3KRuFFIUkSdVq2oU7LNhTk55MYEUZcaBDxIUHEhQQReuk8kiRhaml198fOzQOPxs3wbd0W72at9P4Ia2lkSSP7RjSyf/jEWIG2gGx1drFVkBSSAnNDc0wNTFFINffLXRyGzs7YPjkO2yfHFY6Wz5B98iSqgADSNmxELqxWJBkbY+TlhdLODqWtLUpbGwxs7VBaWyGr1WhzctHm5qLNzUHOzSU/Kpq8oCC0GRn/9uXmhs2YMVj26Y1Z27Z3R/1WgHsjB05uCubi3ghCLibQZmAd6rd3LnOkV7vhY8hITODcto1YOTjRsv9g1Hkazu8O5/LB2xibGTDytdbFFlEujnPbNpKRmED/l2bWaBEviUdqRL72A108+PiPvipyf/Sbb5J16DB+R4+WaqKlvMSFpnNs7S0Sb2fi7mtCt4YXsY9eA/H+gATenXVuk8YjwMKpxLbS4nO4fPA2gafj0Gi01G3pSOcxfg9dnVYT0BSoUSgNauRE5OOOrNGQHx6OKiAA1fUA1NFRFKSmoklJRZOaiiYtTef2K0QyNUVR+GPg7Ixx/XoY1/v3x8D24SPg2wHJnNoUQnJ0FuY2xrTo7UmTbm5lmtfRajRsW/gpYZcu0HbEK4RdtSIrNY8GHV3oNKpumdd0BJ87w7av59Owc3eGzHyjTOdWB4/HiDw6qtglvQVJSWTs2Yvtk09WqogDuNil80S3UwQci+BMWA/Wh9bHx3YC3o1t8O7dDTP34tOIyrJMekIuMcFphF9NIuxqEkqlggadXGjV16tSIlIqi/JOgAoqH0mpxLhuXYzr1sV62LAH9ssaDdqsLCRDQyQTE72MVL0a2+PZyI7IgBQu7r/Nqc3BnN8dRoNOrng0sMXVzxpTi+L997Iskxqfi0eTp4gKjOHc1qVYufRh1OvP4Vav9K6UOySEh7J7yUJcfP3oP3VmRV5atfPICLkqK4vczAxs3YqOvU1dvx7UamwnTKgcA9KjdWGC17dA1DkUQFO31tTt5Mf56I4E+5sRcjIfTgXj5BWPq58NSkMFCoWEpJCQJEiOyiImJJ3cwnzPppaGtBngTbNeHtW3elTwWCIplaVOW1GmdiUJryb2eDWxJyEig0sHbnP9eDTXjugWQdm6mOFazwYLG2NkrYxWKyNrdaupIwNS7lYpsveZhFa1n/iQQ1zZp8XJewYGZZjEzU5LZeuCTzA2N2fE3PcwNKrd369HRsjT4mIAsHV5sGakrFaTtnYd5l26YOyrn5WJAGTG6xboXN+sW7ADujzefT7QuU7sfDAFugFdZZmkyCzCryUR4Z/M9WPRaGUZWSPffYK1tDPBs5Etbn42uNa1wdbFrFp94AJBZeLkbcWAyU0pUGtIiMgkNjiNmKB0gs/Fk6/STZxLCgmFQsLASIGrnw1tBnnj3dQeC1sTZLkzZzev4+T6VaTGxjB87rtY2D48Zjw1NprdSxaSm5HB+I++rPFl3EpDhYRckqSxwIdAI6C9LMuVVy3iIaQWCrmNy4Nxo5mHDlGQkIDLRx9WvKPspELx3gLhJwAZHBtBr3d1C3Ucik6yI0kSjl6WOHpZ0m7I/TcTWSujleXShywKBI8QBoZK3PxscPOzoc1A3fdBRpcSv6T5FUmS6DhmPPaeXuz5/htWzJlK0179aDlgSJEDOrVKxdmt6zm/YzNKQ0MGz5xb45JilZeKjsj9gdFAySWwq4DU2BiQJGycHxTy1HXrMHRzw6J7OeNDc1IgcKduoU7YMZA1YF8PerypG3k7lX7pcFFICgllEXHMAsHjiKQoKqq/eOq174zdZx6c3rSWy/t2cnHPdnxatsGvXSc0BWrUKhX5uTlcP3aYrOQkGnfrRbenny/V6L22UCEhl2X5BpR816wq0uJjsbR3eMBPlhcWRs7pMzjOnvVAcv4SUaVD4C7dyDvkMGgLwNYHus7Wibdz01JV0REIBJWPvYcXQ2e9SVZqClcP7uHKgT2EXfrXQSBJCpx86jJk5ht4NKxYWo6aSJX5yCVJegl4CcDLq2zFX0tDWmwMtkW4VdLWbwADA6xHj354I3mZcHOvzucdfBA0+WDtBR2n6RbquLYU4i0Q1GAsbO3oPPZpOowaR1ZKMobGJhiammJgaFQjBpyVxUOFXJKkg0BRa2vflWV5W2k7kmV5GbAMdHHkpbawlKTGxVC/Y5f7tmnz8kjfsgXLPn0wdComXjs/G27t0428g/ZDgQos3aDdZGg6BtzbCPEWCGoZSgNDrJ3KnxKgtvFQIZdluW9VGFIRcrMyUWVlPjDBkbl/P5q0NGyfHHf/CepcCDqgE+9be0GdAxbO0HqSbsLSs0OxpdAEAoGgpvFIhB/eCT20+U8Nx9R16zD08sKsY0coyNP5uq9vgcDdkJ8JZvbQYrxOvL07l7oUmkAgENQkKhp+OApYAjgCuyRJuizL8gC9WFYG0mLvxJD/6yPPCwsj9/wFHCcNQ9o+XVcKLS8dTGygyUidz7tOd1A+EvcygUDwGFPRqJUtwBY92VJuUuNiQZJ0PjFNAYQfJ33BlyDJWKf/AjcsoOFQnXj79oQakp1OIBAI9MEjMRxNi43GysYSg/1vQcB25Kwk0s64YNHAAcPnvwG/PmBQu5fgCgQCQXHUXiHXaiHqH7i+hbTL57GR8+DKEag/gKzsBmhUK7GZ+Sk01E/xCIFAIKip1C4hl2WIvlhYkGFrYSk0Y9ILOlC3cQt4bR8YmZM29RUMHB2x6N6tui0WCASCSqd2xdhtnwHLe8PZn8GlKYxahnrWdXLyZKwbdAQjc9QJCWQdP471yJFlrnoiEAgEtZHapXTNx4FXp8JSaDYApN8OB8DaWRf8n7FjJ2g0WI8aVU1GCgQCQdVSu4Tc58GkV2kJ8QBYOznrijJs3Yppixb6TVcrEAgENZja5VopgoyEOACsnVxQBQSQFxSE9aiR1WuUQCAQVCG1XsjTEuIwMjXF1NKK9C1bkYyMsBo0qLrNEggEgiqj1gt5enwc1o7OoFaTsXMnFn16V0qJKoFAIKip1H4hT4jH2tmFrBMn0aSlYT1iRHWbJBAIBFVKrRZyXcX5eKydXEjfsR2lrS0WXbo8/ESBQCB4hKjVQp6TnkZBfh6W1jZkHTqM1eDBSIYij4pAIHi8qNVCnl4YsWIUGYWcn4/1iOHVbJFAIBBUPbVcyHUx5Jw9j5G3NybNmlWvQQKBQFAN1Gohz0hM0P1x4RJWw4Y90jX5BAKBoDhqt5AnJWBsaISBVovVkMHVbY5AIBBUC7VbyBMTMM1XY9KkCcY+Ykm+QCB4PKnVQp4eE41xeiZWQ4dWtykCgUBQbdRaIZdlmYzkRMzUBVgNFkvyBQLB40utFfKcjHQ0Wi1Wzq4YOjtXtzkCgUBQbdRaIU+6cB4A+7btqtkSgUAgqF5qrZAnHDkEgEvvPtVsiUAgEFQvtVLIZVkm+cplAGzrN6heYwQCgaCaqZVCnnfzJllZmRgaGGJiblHd5ggEAkG1UiuFPGPPXlTGRlg5iUlOgUAgqHVCLssyGXv3kGdjhVVhwWWBQCB4nKl1Qp536xbqiNuoDJRY2jtUtzkCgUBQ7dQ6Ic/ctw+NUokqPw9Le8fqNkcgEAiqnVon5Bn79kPrVgBYOQghFwgEglol5HnBweSHhECblgDCtSIQCATUMiHP2L8fAI1PHQAsHZyq0RqBQCCoGdQqITdwdMR69Giy8/MAsLCzr2aLBAKBoPqpVUJuO3Ysbp/NJzM5CXMbWwxEoWWBQCComJBLkrRAkqRASZKuSpK0RZIkGz3ZVSKZyYlY2An/uEAgEEDFR+QHgKayLDcHbgHvVNykh5OVkiwmOgUCgaCQCgm5LMv7ZVkuKPz3DOBRcZMeTmZykhBygUAgKESfPvIXgD3F7ZQk6SVJks5LknQ+MTGx3J3k5eSQn5sjJjoFAoGgEIOHHSBJ0kGgqKQm78qyvK3wmHeBAmB1ce3IsrwMWAbQtm1buVzWonOrAFiKxUACgUAAlELIZVnuW9J+SZKeA4YCfWRZLrdAl5bMZN1o3lKMyAUCgQAohZCXhCRJA4E3gR6yLOfox6SSyUxJAsSqToFAILhDRX3k3wOWwAFJki5LkvSTHmwqkaxknWvF3FaMyAUCgQAqOCKXZdlPX4aUlsyUJEytrMViIIFAICikVq3shMIYcrEYSCAQCO5SK4Xcws6uus0QCASCGkMtFXLhHxcIBII71CohL8jPJzczQ7hWBAKB4B5qlZBnpaYAIn2tQCAQ3EstE3Jd6KEQcoFAIPiX2iXkhcvzLWzFZKdAIBDcoVYJeXaha8VcjMgFAoHgLrVKyDNTkjEwNMLE3KK6TREIBIIaQ60Scjs3Dxp27YkkSdVtikAgENQYKrREv6pp3mcAzfsMqG4zBAKBoEZRq0bkAoFAIHgQIeQCgUBQyxFCLhAIBLUcIeQCgUBQyxFCLhAIBLUcIeQCgUBQyxFCLhAIBLUcIeQCgUBQy5FkWa76TiUpEYgo5+kOQJIezdEXwq6yIewqG8KuslFT7YKK2eYty7LjfzdWi5BXBEmSzsuy3La67fgvwq6yIewqG8KuslFT7YLKsU24VgQCgaCWI4RcIBAIajm1UciXVbcBxSDsKhvCrrIh7CobNdUuqATbap2PXCAQCAT3UxtH5AKBQCC4ByHkAoFAUMupkUIuSdJYSZKuS5KklSSp2DAdSZIGSpJ0U5KkYEmS3r5nu48kSWcLt6+TJMlIT3bZSZJ0QJKkoMLftkUc00uSpMv3/KgkSRpZuO93SZLC7tnXsqrsKjxOc0/f2+/ZXp3Xq6UkSacL3++rkiQ9ec8+vV6v4j4v9+w3Lnz9wYXXo849+94p3H5TkiS9VjcphV2vSZIUUHh9DkmS5H3PviLf0yqy6zlJkhLv6X/yPfueLXzfgyRJeraK7fr2HptuSZKUds++yrxev0mSlCBJkn8x+yVJkhYX2n1VkqTW9+yr2PWSZbnG/QCNgAbA30DbYo5RAiGAL2AEXAEaF+5bD4wv/Psn4BU92fUV8Hbh328DXz7keDsgBTAr/P934IlKuF6lsgvIKmZ7tV0voD5Qr/BvNyAWsNH39Srp83LPMdOAnwr/Hg+sK/y7ceHxxoBPYTvKKrSr1z2foVfu2FXSe1pFdj0HfF/EuXZAaOFv28K/bavKrv8cPwP4rbKvV2Hb3YHWgH8x+wcDewAJ6Aic1df1qpEjclmWb8iyfPMhh7UHgmVZDpVlOR9YC4yQJEkCegMbC4/7AxipJ9NGFLZX2nafAPbIspyjp/6Lo6x23aW6r5csy7dkWQ4q/DsGSAAeWLmmB4r8vJRg70agT+H1GQGslWU5T5blMCC4sL0qsUuW5SP3fIbOAB566rtCdpXAAOCALMspsiynAgeAgdVk11PAGj31XSKyLB9DN3ArjhHASlnHGcBGkiRX9HC9aqSQlxJ3IPKe/6MKt9kDabIsF/xnuz5wlmU5tvDvOMD5IceP58EP0fzCx6pvJUkyrmK7TCRJOi9J0pk77h5q0PWSJKk9ulFWyD2b9XW9ivu8FHlM4fVIR3d9SnNuZdp1Ly+iG9Xdoaj3tCrtGlP4/myUJMmzjOdWpl0UuqB8gMP3bK6s61UairO9wter2oovS5J0EHApYte7sixvq2p77lCSXff+I8uyLElSsbGbhXfaZsC+eza/g07QjNDFkr4FfFyFdnnLshwtSZIvcFiSpGvoxKrc6Pl6/Qk8K8uytnBzua/Xo4gkSc8AbYEe92x+4D2VZTmk6Bb0zg5gjSzLeZIkvYzuaaZ3FfVdGsYDG2VZ1tyzrTqvV6VRbUIuy3LfCjYRDXje879H4bZkdI8sBoWjqjvbK2yXJEnxkiS5yrIcWyg8CSU0NQ7YIsuy+p6274xO8yRJWgHMrUq7ZFmOLvwdKknS30ArYBPVfL0kSbICdqG7iZ+5p+1yX68iKO7zUtQxUZIkGQDW6D5PpTm3Mu1CkqS+6G6OPWRZzruzvZj3VB/C9FC7ZFlOvuff5ejmRO6c2/M/5/6tB5tKZdc9jAdevXdDJV6v0lCc7RW+XrXZtXIOqCfpIi6M0L1p22Xd7MERdP5pgGcBfY3wtxe2V5p2H/DNFYrZHb/0SKDI2e3KsEuSJNs7rglJkhyALkBAdV+vwvduCzrf4cb/7NPn9Sry81KCvU8Ahwuvz3ZgvKSLavEB6gH/VMCWMtklSVIr4GdguCzLCfdsL/I9rUK7XO/5dzhwo/DvfUD/Qvtsgf7c/2RaqXYV2tYQ3cTh6Xu2Veb1Kg3bgUmF0SsdgfTCwUrFr1dlzeBW5AcYhc5PlAfEA/sKt7sBu+85bjBwC90d9d17tvui+6IFAxsAYz3ZZQ8cAoKAg4Bd4fa2wPJ7jquD7i6r+M/5h4Fr6ARpFWBRVXYBnQv7vlL4+8WacL2AZwA1cPmen5aVcb2K+rygc9UML/zbpPD1BxdeD997zn238LybwCA9f94fZtfBwu/Bneuz/WHvaRXZ9TlwvbD/I0DDe859ofA6BgPPV6Vdhf9/CHzxn/Mq+3qtQRd1pUanXy8CU4GphfslYGmh3de4JyKvotdLLNEXCASCWk5tdq0IBAKBACHkAoFAUOsRQi4QCAS1HCHkAoFAUMsRQi4QCAS1HCHkAoFAUMsRQi4QCAS1nP8DNjBqKLfEKEoAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "m = 0\n", "\n", "pct = np.sqrt(2 * np.pi) * precompute_legpoly(n_theta, n_theta, teq)\n", "\n", "fig, ax = plt.subplots(1, 1)\n", "for l in range(6):\n", " ax.plot(np.cos(teq), pct[0, l])\n", "fig.show()" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "def project(t, w, f, mmax=None):\n", " m = 0\n", " if mmax == None:\n", " mmax = len(t)\n", "\n", " weights = torch.from_numpy(w)\n", " pct = np.sqrt(2 * np.pi) * precompute_legpoly(mmax, mmax, t)\n", " weights = torch.einsum('mlk,k->mlk', pct, weights)\n", "\n", " proj = torch.einsum('...k,lk->...l', torch.as_tensor(f), weights[m])\n", " rec = torch.einsum('...l, lk->...k', proj, pct[m] )\n", " return rec" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "let us compare the accuracy of the different projection methods:" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "t = np.linspace(0, np.pi, n_theta)\n", "plt.plot(t, f(t), label=\"reference\")\n", "\n", "for quadrature in [legendre_gauss_weights, lobatto_weights, clenshaw_curtiss_weights, fejer2_weights]:\n", " cost, wq = quadrature(n_theta, -1, 1)\n", " tq = np.flip(np.arccos(cost))\n", "\n", " out = project(tq, wq, f(tq))\n", "\n", " plt.plot(tq, out, '.-', label=quadrature.__name__)\n", "\n", "plt.legend(loc='lower left')\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "image/png": "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4dSqrnGpHdVsP6eyvRSXEWLUK0vggf5V99bSMtKYsWoGFpsFo87AM0OfIaVJSql6Ao70Cp0adyH9ZNXjurv27OfJVxfwxYrv0CdGcz77BF8t+sq5fvbs2cybN48OHTrw8aqPefL+J7lmyTwATp06xbp16/jql83cPf1mRl//Nd98/g1XXnEZDz/2BFarlezcPE7kSwoLCujZtyePPvQ3XnvhA95++20eeeQR+g8cxIfLvycs6jRL31/KC8+/wMsvvczgwYNZv349bdu2pV27dmzbuI3xN41nw6bNvDXffe94yXtLOHLkCGlpaRiyD3M+q+oygnv27GbBVwuIiIxgy4otpKam8vrrWgD4okWLnNu9/NI8PvzsO3p1SWbzYc17Y/57n3D3jMlMmX47JkMMVquVU6ZT5Y4xtH8vXnxnGXOhpC6C2czatWsZNqAX585n8eSTT/L9999ztOgoC19byEsvvcSjj5Y08idPnuTlZ19myQ9LSG6azI1jbqRn5xJXy1OnytdFeOyh/8eb/1vAtz9oLptTZk7hltm38MDtD2AymbBarWVF1WjcvsrrVpdU1HAv336y1BqtJsB553evzU162pDbtyuJ/K65AKdyKq/hEACd7oCkXikBT0hpksLjgx9ne8Z2rmjYRVMAVVL50/PT2g3cMPZy4uPjyaaIuEYlydXy8vL47bffnDn4iyxFmEwl6aInTJig5eLv2JnMc2cB6J7SnSfueRyz1DNhwgS6du8B+bkYw8K4dNSlICV9+vRx9uZPnTzBQw/cT+a545hNZjq21/ykhw4dypo1a2jbti133HEHr775KmdOnaFRw4ZER7v3zd/w6wbum3sfBoP2aDRu1LDKq3P1mLHO+gCV0a9/L+69azZTJt9E9xFabpW+Awfxn2ee4PjZC1x3yww6dOgAbip09unRha1p2511Ebr06EL6H7+zdu1aXnvkDjZu3UF6ejpDhgyhyFKE2Wxm+JDhpfaxefNmLhlySam6CPt2bHWud96LiuoiAD379WT+y/MhB6677jpNXneERYHRixlNa8HWo1n0sX+OiTDw8k0p3KcZRlpNgGOltw/WtvJUTllLINAmYgPzyobccBBA58admXDRBHo0qvugEpvNRsOGDUlLSyMtLY1lvyzj69++dq53l4u/76C+rPn+W1q2bMm0adP48AMteavBYHD2mPR6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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "for quadrature in [legendre_gauss_weights, lobatto_weights, clenshaw_curtiss_weights]:\n", " cost, wq = quadrature(n_theta, -1, 1)\n", " tq = np.flip(np.arccos(cost))\n", "\n", " out = project(tq, wq, f(tq))\n", " # print(np.abs(out - f(tq)))\n", "\n", " plt.semilogy(tq, out - f(tq), '.-', label=quadrature.__name__)\n", "\n", "plt.legend(loc='lower left')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let us now add interpolation into the mix to evaluate performance with interpolation taken into account. For this particular case, we will assume that the data is given to us on an equidistant grid." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "t = np.linspace(0, np.pi, n_theta)\n", "ref = f(t)\n", "plt.plot(t, ref, label=\"reference\")\n", "\n", "for quadrature in [legendre_gauss_weights, lobatto_weights, clenshaw_curtiss_weights]:\n", " cost, wq = quadrature(n_theta, -1, 1)\n", " tq = np.flip(np.arccos(cost))\n", "\n", " if quadrature == lobatto_weights or quadrature == legendre_gauss_weights:\n", " f_interp = interpolate(t, tq, ref)\n", " mmax = len(tq)\n", " else:\n", " f_interp = ref\n", " mmax = len(tq)\n", "\n", " out = project(tq, wq, f_interp, mmax=mmax)\n", "\n", " plt.plot(tq, out, '.-', label=quadrature.__name__)\n", "\n", "plt.legend(loc='lower left')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "again, let us plot the overall error, this time including the interpolation error:" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "t = np.linspace(0, np.pi, n_theta)\n", "ref = f(t)\n", "\n", "fig, ax = plt.subplots(2, 1)\n", "\n", "for quadrature in [legendre_gauss_weights, lobatto_weights, clenshaw_curtiss_weights]:\n", " cost, wq = quadrature(n_theta, -1, 1)\n", " tq = np.flip(np.arccos(cost))\n", "\n", " if quadrature == lobatto_weights or quadrature == legendre_gauss_weights:\n", " f_interp = interpolate(t, tq, ref)\n", " mmax = len(tq)\n", " else:\n", " f_interp = ref\n", " mmax = len(tq)\n", "\n", " out = project(tq, wq, f_interp, mmax=mmax)\n", "\n", " ax[0].semilogy(tq, out - f(tq), '.-', label=quadrature.__name__)\n", " ax[1].semilogy(tq, f_interp - f(tq), '.-', label=quadrature.__name__)\n", "\n", "ax[0].set_title(\"Projection error after interpolation\")\n", "ax[1].set_title(\"Interpolation error\")\n", "# ax[0].legend(loc='lower left')\n", "# ax[1].legend(loc='lower left')\n", "fig.tight_layout()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "we can see that the interpolation dominates when we interpolate the solution. For this reason, it is reasonable t choose Clenshaw-Curtiss quadrature in scenarios where we expect the interpolation error to dominate." ] } ], "metadata": { "kernelspec": { "display_name": "Python 3.10.6 64-bit", "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.10.6" }, "orig_nbformat": 4, "vscode": { "interpreter": { "hash": "31f2aee4e71d21fbe5cf8b01ff0e069b9275f58929596ceb00d14d90e3e16cd6" } } }, "nbformat": 4, "nbformat_minor": 2 }