Created
October 11, 2021 19:24
-
-
Save ltiao/8d8b314576419b728626198c2aa74346 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "code", | |
"execution_count": 1, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"# %matplotlib notebook" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 2, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"2021-10-11 20:22:23.784383: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libcudart.so.11.0'; dlerror: libcudart.so.11.0: cannot open shared object file: No such file or directory\n", | |
"2021-10-11 20:22:23.784411: I tensorflow/stream_executor/cuda/cudart_stub.cc:29] Ignore above cudart dlerror if you do not have a GPU set up on your machine.\n" | |
] | |
} | |
], | |
"source": [ | |
"import numpy as np\n", | |
"import tensorflow as tf\n", | |
"\n", | |
"import matplotlib.pyplot as plt\n", | |
"import seaborn as sns\n", | |
"\n", | |
"import gpflow\n", | |
"import gpflux\n", | |
"from gpflow.kernels import RBF, Matern52\n", | |
"from gpflux.layers.basis_functions.fourier_features import RandomFourierFeatures, RandomFourierFeaturesCosine, QuadratureFourierFeatures\n", | |
"from gpflux.sampling.kernel_with_feature_decomposition import KernelWithFeatureDecomposition\n", | |
"from gpflux.models.deep_gp import sample_dgp\n", | |
"from gpflow.config import default_float\n", | |
"\n", | |
"from sklearn.utils import check_random_state\n", | |
"from mpl_toolkits.mplot3d import Axes3D\n", | |
"\n", | |
"from typing import Callable" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 3, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"tf.keras.backend.set_floatx(\"float64\")" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### Preamble" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 4, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"ASPECT = 0.5 * (1 + np.sqrt(5))\n", | |
"WIDTH = 8\n", | |
"HEIGHT = WIDTH / ASPECT" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 5, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"rc = {\n", | |
" \"figure.figsize\": (WIDTH, HEIGHT),\n", | |
" \"font.serif\": [\"Times New Roman\"],\n", | |
" \"text.usetex\": True,\n", | |
"}\n", | |
"sns.set(context=\"talk\", style=\"ticks\", palette=\"deep\", font=\"serif\", rc=rc)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### Constants" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 6, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"n_index_points = 512 # nbr of index points\n", | |
"n_inducing = 10\n", | |
"n_components = 5\n", | |
"n_samples = 8\n", | |
"\n", | |
"amplitude = 0.25\n", | |
"length_scale = 0.5\n", | |
"kernel_cls = RBF" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 7, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"['X', 'Y']" | |
] | |
}, | |
"execution_count": 7, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"d = np.load(\"../GPflux/tests/snelson1d.npz\")\n", | |
"list(d.keys())" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 8, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"((200, 1), (200, 1))" | |
] | |
}, | |
"execution_count": 8, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"X, Y = d[\"X\"], d[\"Y\"]\n", | |
"X.shape, Y.shape" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 9, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"n_train, n_features = X.shape" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 10, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"(10, 1)" | |
] | |
}, | |
"execution_count": 10, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"Z = np.linspace(X.min(), X.max(), n_inducing).reshape(-1, n_features).astype(default_float())\n", | |
"Z.shape" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 11, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"findfont: Font family ['serif'] not found. Falling back to DejaVu Sans.\n" | |
] | |
}, | |
{ | |
"data": { | |
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAicAAAFLCAYAAAANjixhAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nOy9fXBb9ZX//5ZkWZaDnci2FBXbsfGkGGozO4nChDopLpBhnRZqYDcxQzdsmgxQa9qgLRjW/aZ52rQOk3THhakcx5t0C7stwimQpiUCgqlLsEOx6UywE7wYE0c2VX1tK1acSLIs6fdHfvciyVfPT1fyec1kJpau7v3cx8+557zPOSKPx+MBQRAEQRCEQBCnegAEQRAEQRDekHFCEARBEISgIOOEIAiCIAhBQcYJQRAEQRCCgowTgiAIgiAERVaqByB0vva1r8HtduOGG25I9VAIgiAIIiOYnZ2FWCzG+fPneb8nz0kI3G43KNuaIAiCIOKHx+OB2+0O+D15TkLAekz6+vpSPBKCIAiCyAzWrFkT9HvynBAEQRAEISjIOCEIgiAIQlCQcUIQBEEQhKAg44QgCIIgCEFBxglBEARBEIKCsnXixNWrV2G1WjE/Px80PYogvBGLxcjJyUFRURFEIlGqh0MQBCEIyHMSI263G2NjY7h06RKsViucTmeqh0SkEU6nE5OTkxgfH6d6OkRG0dnZiZGREd7vRkZG0NnZmeQREekEeU5iZGZmBleuXEFRUREKCwshFpO9R0TG9PQ0/v73v2NychJKpTLVwyGImOns7MSxY8dw/PhxtLS0oKKigvtuZGQEzc3NsFqtAIBNmzalapiEgKGZNEZmZ2eRnZ2NoqIiMkyIqCgoKIBMJoPdbk/1UAgiLmg0GuTn58NqtaK5uZnzoHgbJvn5+dBoNCkeKSFUaDaNEbfbjaysLNILEDEhkUhIq0RkDBUVFWhpafExULq6unwME3+PCkF4Q8YJQRAEEXf8DZSDBw+SYUKEDRknBEEQREIErBUVFXjiiSd8PnviiSfIMCFCQsYJQRDEIocVsHrrQ1hYncixY8ciNlBGRkbQ3t4Oi8UCh8MBAGhvb/fZBmXuEHyQcUJERU9PDx566CF873vfS/VQCIKIkUQIWNnfjo6OwmKxICsrC1Kp1GcbsRg+RGZDxgkRFTU1NXj88cdTPYy4cPDgQezYsSPVwyCIlMHqQ+x2OxiG4RWwarVa9Pf3h7U+b6NGpVKhsrISEokEADgDRafTQafTUeYOwQsZJwIjnQoX5efnp3oIEWMwGBZ8tm7dOnzrW99KwWgIQjj09/dDJBLBbDaDYRgfAatWq4Verw/bw9Hf38/9trW1Fa2trcjPz+eKVM7Pz2NoaAgTExMkkCV4oSJsAoIKFyWewcHBBZ/V1NSkYCQEISw0Gg2USiUcDgfGx8dRXFwMmUyG+vp66PX6iDwc7PNJo9Fwz7GWlhbuGeZyuaBQKFBWVkaGCcELeU4EBBUuSiwdHR0wmUypHgZBCJKKigpotVpYLBa4XC6Mj4/jypUr2L9/PxiGidjDsWnTJp9lvTN3ZDIZFAoFZe4QASHPiYBg476sIdLc3IwnnngC7e3tKasP0NHRgdLSUgCAyWTCY489tmAZo9EI4Hopf6vV6rNMR0cHqqqqYLVaYTKZUFpairq6OlitVrS3t+O2227jDIbHHnsMPT09OHToEEpKSvCtb30LPT09yMvLw2233YYjR47AarVi3759qKmpweDgILZu3Yrq6mr84he/wMzMDEwmE6xWKz7++GPcdtttqKurA3BdwPvxxx/DZDKho6OD297g4CAOHTqEmZkZvPrqqyH3m10eAJ5++mmYTCaYTCZcvnwZTU1NIfebIITKyMgI9Ho91Go1zGYzFAoFGIaBy+WC2WzG7t27Y3r2sJk73rS3t6O8vJwMFGIhHiIoGo3Go9FoAn5/8eJFz8WLF+O6zc8++8yzefNmT11dHfdv8+bNns8++yyu2wnFgw8+6Ll06RL396VLlzwPPvgg9/f777/vWbNmjc9vXn75Zc8Pf/hD7v8vv/yyz+9PnTrl8Xg8nnvuucdn3T/84Q8977//vsfj8XhOnTrFfe/9m4GBAc8999zjs70jR45w/9+6davP9vy38f7773u2bt26YD/ff/99n/0Kd7+9l1mzZo1nYGAg5H4HIhHXEUGEi/czZ/PmzZ7//d//9dTV1Xnuuusuz8033+xZt24d9wx65ZVXAj6L2O9Drf+dd97x+TvZzzYi9YSaWymsI0CEULiop6cHADjvgff/2e/8vweAjRs34s033+S8BR0dHTAYDNzfNTU1nKfF+7fr1q3jPs/Pz8fMzAxKS0t9PA5VVVU+27dardxnALBv3z5s3LjRZ2zhhHGWLl0a0X6zy/svMzMzw/2fb78JQqh4C1i1Wi1OnDgB4Hr4pbi4GNPT02AYBm1tbRHXQ/EPS7e0tODuu+9eUN4+UCIAsTgh40SABHJ/JvPmHRwc9Jm0WZYuXcorKmVhM3hMJhNqamqwb98+vP/++3jooYewYcMGLvQCXJ/s2X+lpaVoaGjg1lNdXc27/scee4wLy5w6dcpn0l+6dCkMBgMMBgN6enq4MFMi9ptvGZZA+00QQmXTpk3Ytm0bl5XDGhJNTU1QKpVQq9Vwu9247777ItbFeRs+3mFp//L24aYpE4sD0pwIDP+b3Ftz0tzcnDTNSSCvA+sJCOf3PT09qKmp4QwIg8GAgwcP4uGHH8bMzExU3oSGhgYcOnSId2wPPfQQp0cBvjQg2GPpj9FoXKADiXW/AQTc7+effz6s3xNEKtBoNLyN+crLy7nP9Xq9jwETji6OL3OHhTVQ+vv7KQOR8IE8JwJCSO7Puro65Ofn+0zUJpMJ+fn5PhO6/0RuMBjQ0NCA0tJSDA4OcqEaAFzIpaamhvve/7fhsHHjRjz55JM+IZzBwUHOW+M/tlOnTgG4bqywn5lMJp+QEOthCXe/gxFovwlCyITr4ZiYmIi4oZ9/5o43FRUVZJgQC5Ds2bNnT6oHEQqr1YrXX38dR44cCetB39HRgeHhYQwODqK3tzem1NsjR44AQMBqqKy7ftmyZVFvg+X06dM4e/bsgptcoVBAo9HgzJkzsFqtUKvVPhNroti4cSN+/etfY2xsDIODg3j//fexf/9+yGQyANcn7Y0bN2JwcBDDw8Pcw+3pp58GAAwPD8PhcGBsbAzDw8Po6enBjh07IJPJsHHjRrz88ssYGxvjvn/ggQfQ09ODjo4ODAwMQCQSQaVSLQihrFy5EmNjYz7Ggkqlgt1uR09PD65cuYLh4WE0NDTg5Zdfxm233YaVK1dCpVJheHiY+3fXXXdhcHAQ7e3t+Oijj5CTkwONRhN0v/mW7+jowLvvvouxsTGoVCo4HI6A+x2IeF5HBBENVVVVkMlk2LJlywJDgn0GqdVqbNq0CQqFAoWFhT76sx07dmD16tXJHjaRpoSaW0Uej8eTzAFFCvtGbDKZ0NPTg1/96ldBl+/o6EB+fj6nXzAajfj444990jwjYc2aNQCAvr4+3u9HR0cBAGVlZVGt35/Ozk5e9ydw3bNC7s/MJN7XEUEkEv+ikACo0isREaHmVsGHdaqqqjhXezj4e1dqamrwyiuvJGp4cYfcnwRBCBn/8HNTUxNl3RBxR/DGSSSwBbi8DRn2pgmWYUIQBEGEJpAurra2dkHHYe/fCKknGJEeZFS2Ditc5CNQKifrWgrElStXkJeXF/PYCIIg0h0+0WxnZydOnjwJqVTKGSj9/f2oqKignmBE1GSU5yRQTQvWe0IQBEFED1sPxVtbwvYEYzsO33///di0adMCLwvDMGnTcZ1IPRnlOQlkhASqcwEEFuOwhPKsEAQRGyQCTy/8z0VFRQVqa2thNBrhdDrR3d2NW265hat9IpVKoVAocPLkSXR3d1PHdSIsMspzEqxqZ7DvYkEsFmN+fh4CT3oiBI7L5YJYnFG3Y1h0dnZGXA6dEBZsWAcAF9Zha59IpVIAwP/93//BZrNRx3UibDLqaVhVVbXAe8Je9ImqC3LDDTdgbm4ODMPA7XYnZBtEZjM9PQ2Hw4GcnJxUDyXpsCEBmrTSF++wjt1uh8PhAAA4HA7Y7XY4nU4olUrs3bvX51x3dXXxVqQlCCADwjps/RO2rsnmzZtx6tQp7u9Tp05h8+bNCdv+0qVLce3aNUxNTcFisUAqlUIikSRse0Rm4XK54HA4kJeXh6KiolQPJ+mw1UfZSSqccuhE6vEOxbHnUKfTYWRkBG63G7m5ubDb7QCAyspK7hyWlpZy5/rgwYMAwq+PQuG/xYXgPSeDg4Nch9eBgQF0dHT4lAbv6enxKXve1NQEq9UKo9EIo9GIS5cuRV2ALRzEYjGKi4uxYsUK5Ofnc25MgggHqVSKoqIiFBcXQyQSpXo4KcG/PHo45dCJ1BEsFOd2u+FwOGC1WjmBrDfRdlyn8N/iQ/AVYlNNqCp2BEHEh66uLu5tGrj+onH33XencEQEH/4hN7YRIMMwGBsbw/z8PKRSKZRKJeRyObKysjhDE0BUlWX56qv4pyqTMZtepH2FWIIgMp+RkRG0t7f7fNbe3k7VRgWIv6drz549GBsbwxdffAGPxwOpVIri4mLk5eVBLpdzIlmj0Rh1ZVn/bZJmJfMh44QgiJRC5dCFR2dn54Ljzn7G6jtYYyEnJwdXr16Fw+GAWCxGZWUldu7c6VP7ZN26deju7o6p4zqF/xYXZJwQBJEyApVDj2TSIqKDzwBhP29ra8P27du571nNh06ng06nw7Fjx9Df348nnngCV65cwfT0NJxOJ5YuXYrW1lafc+h0OvHOO++AYZgFhoS/wdHf3x90zNFqVoj0g4wTgiBSBlsO3WazQavV8k5aDMOgra0txSPNLIIJTFUqFcxmM0wmE2egaDQaSKVSDA0NYWhoCFKpFCqVCq2trfjiiy/gdrshFouxbNkybj3e5zAnJwcajYbXw8Eut23btpDZNhT+WzyQcUIQRMrYtGkTqqurIRaLodfrfSaZiooKaLVaeDweDAwMUCZGHAlWX0av10OtViM7OxsikQjNzc24ePGiz+/tdjt++tOfcobKV77yFdxyyy2QSCTc+tjzxRoeBw8e5AwT/3L14XRcp/Df4oKME4IgQhIoBADE3helsbERSqUy4ESZk5NDhdjiTCiBqVKpRFtbG3deDh48CKfTicrKSpSVlWF0dJQ7T5WVlTAYDDh8+DC3vu3bt6OtrQ3Nzc0AfEvSR5P6S+G/xQcZJwRBBCXRNSYoEyM1hBKY1tbWLtB36HQ6rF+/Hi6XCxKJBMXFxdDpdD7F2PLz8yESieB2u+NW+ZevGzLfPoTSrBDpA9U5CQHVOSEWO8mqMeHfAA4Iv3ooET2B6svwnQ+2yOTExARyc3Mhk8kWnCM2m0ej0fhcH7FW/qUKsZlFqLmVjJMQkHFCEAsNlESVmKdCbMklkEHIFlbzPt+tra0YGhoCcD2Uo9PpuGvAZrNh7969qK2tXbB+nU6HiYkJKBQKbv1kcBJUhI0giJiJtsZEJFoVysQIj3jpfwIJTBmGQWNjo0/qb3l5+YLfl5eXo6WlBTabDWNjY2hsbER3d/eC5ex2OyYnJ2GxWABQ6i8RHmScEAQRFpHWmIhEq0KZGOERL/1PMIGp2+3G3NwczGYzl97d39/PCWIrKyvhdDrR39+PiooK7N27F9nZ2Zibm8OePXt89CU6nQ6jo6OQSCTIzc0FQAYnER5knBAEERaRejY0Gg1sNhsYhuEVRTIMA5vNBpVKRZkYYRIsBTgSoWkwgemxY8dQUlICtVqNiYkJANezbbZt24bW1la0trb61CSpra1FW1sbSktLkZOTwwmadTqdTxiIrRpL55MIB9KchIA0JwQRneaErTRqNpuhVquhVCq53zEMw32u0WgwMDDAux7v7YZTpGsxEC/9T7wFpt7jcjgcGB8fB3DdMGltbaVGfYQPoeZWyZ49e/YkcTxpx5EjRwAAjz/+eIpHQhCpgW9CWb16NTQaDc6cOQOr1YozZ85Ao9FwokcAkMvl6O3thVgsxqVLl+DxeNDX1wer1epjsHz3u9/F5cuX8e///u8LJiqFQgGNRgO1Wk2Gyf8Pe0zYY9/T0wOHwxHxZF9VVeVzvvy3UVVVhc7OTsjlct7lRkZGcPr0aVRVVXG/KSwsRE9PD65cuYKrV6+ivLwcv/zlL7kx+Y9drVZzvycWF6HmVgrrEAQRlGhrTLDfu91uuFwuXLp0CVNTUxgfH0dBQQGUSiWXFTIwMBCwRkU41UMXG8noMROpvsU77KdQKFBUVAS5XM479nDL1ROLFzJOCIIICqs3CNUXBcCCSayiogLf//734XK54Ha78be//Y3L3njwwQd90lU1Gk3M1WZZElnRVggE0//Ea98j0bfwCZrLysrgdDp5jRsyOIlQUFgnBBTWIYgvQwB8bn6FQoHz58+jra0NJ06cwJ133sl9PzIygoMHD4JhGLhcLohEIrhcLng8Hpw5cwYSiQQFBQVoaWkBADQ3N+Ps2bOQyWRRu/vZN36+UBM7ica6jVTibwjs2LEDAwMDsFqtePXVV9HX14fe3t6Y990/BHPmzBkUFhbiueee8/GkAYgq7BctkYSaCOFCYR2CIOJCpJ1s2VTSCxcuwOVyIScnB9nZ2RCLxXA6nbh69Sq++OILaLVaAIgo2yQY8cpoESKhesyIRCKYzeaAGVKR7ns49W2SWVo+0a0UCOFAnpMQkOeEIK4jl8t534RHRkZw4MABiMVi2Gw25OXlobe3F3/729/Q1dUFh8MBmUyGr33ta2hoaMBf//pXLswjEomgUCjw29/+Nm4ZHOG+8adjlsjp06dx9uzZBfvA7jMrQHa73XC73XHZd2+hK8uOHTuwevVqANe9ajKZDFu2bEm4oDnYNehtfG3ZsiUuXhoicYSaWymVOASUSkwQXxIqjdW77LnD4cDFixchkUhw66234qmnnoJerwfDMDCZTLDb7fB4PCgvL0deXl7cjYZM7dUTTgqwd18bFv99DzeVWGjHMVmtFIjEQr11YoSME4LwJdRkxfbHsVgsmJycxE033YSdO3f6iF/r6+uxZ88eXLt2DdnZ2SgvL8fOnTvj3kdnMffqCbbvTU1N6O/vh1KpXDCZd3d3Y8+ePcjJycH999+P7u5uwRkCQjOYiMih3joEQcSVYGmsfOmkIpEIP//5z30mtDvuuAPl5eWcBmV8fBytra1xrRrqPRaLxQKHw8Fb0TYTsnf8CZXN09/fz6tN6e7uRmNjI0wmE6xWK4xGoyAr9yYjlZpILWScEAQREYEmvu7ubjQ3N2N0dBRSqZRLJ7VarRgaGoJUKoVWq4XRaERzczMkEgmqq6u5CWViYoKb7GJNh/V+s7bb7ZBIJEGFoj//+c+h1+uj3p6QCNWnSKVSQalUQq1W+xyT3/zmN2hsbMTc3Byys7OxceNGOJ3OpAhdo9lHahKZ2ZAgNgQkiCWILwmUxsowDAwGA65cuQKr1YqioiI8/PDD2LBhA/r6+uBwOHDlyhWcOXMG77zzDhwOB5YvX45Dhw7hvvvug0gkgslkgtvtxu9+9zv09/dHnQ7LNzkPDQ1BLBbDbDZDLBajt7cXKpUKBw4cwOjoKCwWCy5fvoy1a9emdepxoGq+DMPg888/h81mw7lz56DVanH+/HmIxWJ88cUXuHz5Mt555x3Mz88jOzsbjzzyCB555BGo1eoFQldWj7Jly5a4V+4NJ01YLpcHTKWOZ8oykVgyJpW4o6MDBoMBBoMBHR0dQZc1Go3YsWMHjEYjenp6sGvXLhiNxiSNlCAyk3A62c7OzvoU3wKAlpYWSCQS/O1vf8PFixfhdruhUql83sYHBga4bB+xWAyPxxN1KrB/amttbS1aWlp8vAXj4+PYvXs3rFYrVCoV12k33VOP+dJ6Ozs7cfLkSQCAVCqF1WrFxMQEWlpacMMNN8DpdGJqagoOhwMSiQR1dXV4//330dzcvEAw652uG2nvnVCEkybc1taG7du3CzLURMSXtDBOOjo6kJ+fj4aGBjQ0NKC0tNRH6MVHb28vnnzySRw6dAg1NTWoq6tL0mgJIjMJp5NtcXExHnjgAZ+J4uLFi1iyZAmkUilycnKgUqnw1FNPLWgEp1QqsXfvXjQ2NuLo0aM+6+jq6gq7YRxfRVs2FMEaKPPz85DL5cjPz+c67Ua7vUQSaXiLb9/Zui9OpxMAcP/992PTpk0wGo2YmJjA3NwcRCIRxGIxlEolhoeH4XK5MDo6mlRjLZz6NGz6uRBDTUR8SYtsndtvvx3vvPMO8vPzAQBWqxX33HMPPvzwQ97ljUYjampquOVjgbJ1COJLIkk/3bZtG8RiMWQyGYDrb+0A4HQ6IZVKsWbNGgwODgY0ABKRkREsg0VoGSCsJyEe3Zr9DYuqqir8+te/ht1uh1gs5oxGi8WCgoICTE5OwuVyobCwEGVlZUnL0gknTZhNlY5XN2UiNaR9tg6rGvc2NFjreHBwMIUjI4jFx6ZNmwJOSt79Uvr7+zE/P4/x8XE4HA4AgE6nQ2trK6RSKYaGhvDiiy9idHQ04GQX74yMUCJKoWWAxLPSrb9n4Y9//CPsdjsAQCQS4Qc/+AFKSkpQUFCAS5cuYW5uDhKJJGhl2EQQTkXacK9BIr1JC+MkkAdkZmYm4O9OnToFo9EIg8EQNAS0Zs2aoP+uXLkS8z4QxGJDpVJhenoaDocDJpOJS+Nli6+xfXacTmdAAyCeGRmhMljYcvtCygDxn6hjDTexxpfD4QDDMFwoZ8WKFejp6UF9fT2mp6eRlZWF+fl5FBUVYf369T7rSIaxJjQjkUgNgjdOvF2s3rA3LB+lpaWczqShoQHLli3Drl27EjlMghA8yerUOzIyAr1eD7lczpVR/+KLLzA2NoYnnngCn3/+OUQiEYDrLxj/8R//EVAAGcyYCHe/9Hp90H40VqsVOp0OOp0urO0lk3A8CeHCGl/Xrl2DWCxGdnY2KioqUFBQAKvVipdeeglqtRo5OTlYsWIFqqurF3ink2GsCc1IJFKD4I2TQEaIf6jHm6qqKpSWlnJ/19XVwWAw8C7b19cX9F9eXl58doQgUkiyGqZ5GxXFxcW45ZZbkJWVBZfLBbPZjKtXr8Jut0MkEkGlUiE7OxsikSho2ILPmNi+fTu6u7t598u7Tkpzc3PA8BE78bNhpomJCUFmgMTDk+B9TMvKyvDoo4+iuroaubm5sNlsXOhNJpNh586deOSRR2CxWJJurEVilALJM7iJ5CN442Tp0qURf+efNswuZzKZ4jcwgkgjktWp1zujp7W1FYcPH8aKFSvgcrkwNzcHVn+fl5eHkpIStLW1QalU+owrVJdbu90Ok8mE3bt3Q6VS+ewXWwiura0N27Zt85mMA+la6urqoFAoUFZWJsgMkFg9CXzG3q5duzj9z6VLl3y0QS+//HJKKsOGY5R6b5c6FGc2gjdOqqqqFnhPvBXn/phMJjz55JM+y7PaFG9vCkEsJuKtXwgEXyqrXC4HAHg8HohEImRlZaG4uNinBom3AcC3Du/92LNnD0pKSiCXy6HX66HVapGfnw+GYdDY2Ijx8XGu2Bq7X1qtNuC+abVaPPXUUwG319LSElZGTCKI1JPARyBjz5/a2lrk5+djYmKCq+ibTGMtlFHqv91kGdxEakiLCrEzMzNgGAbV1dUAgNdffx0lJSVYt24dgOsGidFoRHV1NZYuXQq73e7T3OvIkSP46le/irvuuivibcezQmw41Q+FXoGSSF/Y9vVsy/menh44HI6Ak5b/9er9t//16v13VVWVTxt7m80GhUIBt9vNGSh5eXm47777oFAouHF5Vxtl18FHeXk57rzzTm4/zp07h/r6erzxxhuYm5uDzWbDjTfeyNvULhDBtqdQKFJyXwaq9up9DsOpiFpVVQWZTOZT6dX73KhUKvzLv/wLmpqaoNFouIq+S5Ys4bxKLHznKl7wjTPYdv2v5zNnzqCwsBDPPfdcyuvTEKEJNbemhXGybt069Pb2gmEYDA8P49NPP0VTUxP3PZuV09DQAABYsWIFXnnlFXz00Ufo6urCsmXL8PTTT0e17XgZJ6wLku9hkm4lson0RaFQoLCwED09PdxnO3bswOrVq32W879eT58+zf3Nln1nr1e2nLj39es9sUqlUmRlZWHJkiVYsmQJZmdnMTMzg76+Pq5cfKQGgP/EdO7cOUgkEthsNhQXF0Mmk/HuVzpx+vRpnD17dsEk67/varU65LHzN768133o0CHce++9Puvu6+uDzWbjXXe8jTVvo9d/nN5GL992IzW4CeGQEcYJcN2Ft3LlSqxcuZLzmLBUV1dzhglwXWOi0Wig0Wiwbt26mNx68TJO5HI579uO/9vRli1bqC8EkTBGRkbw3HPPcfoC4HrpeH+D2ft6/d3vfgeNRoPPP/+c66EjFotRUFCAyspK7Nq1Cy6Xy+f6ZSc/78Jr+fn5+NGPfoTh4WFMTU1hamoKRUVFuP3226PaF29Dy+FwwGw2o6ioCEuWLAm4X+lEpJ4Eoaw7EuLx0hauwU0Ii4zprZPuJCvmTxCBiES/wF6vNpsNY2Nj2LdvH2pqamA2mzE3Nwez2Yyamhrs27ePq13iff1u2rQJ999/PwD4dLa9++670draisrKSigUCnR3d0ctrGSFog6HA+Pj43C5XLBYLNiyZUtYuox0yPRIZMExIRQzi4duhFKPM5O08ZykinhqTsgFSaSKaPQLCoUCN910E4xGI+bm5tDf34+ioiLMzc2hoKAA3d3dXBfbQ4cOYdWqVT7bvHjxIvr7+3nDEmvXrkVfX1/YYYlA+8MwDMxmMwoLC+F0OqFWq2EymaDVanHu3LmAugwKswqDWHUjgbpkU4di4UOeE4FB1Q+JVBBpJgRLbW0tdu7cCYlEApfLBYZhcM8994BhGLhcLkgkEuzcuRO1tbULthkq6ybaLBjvCcnj8UCtVi9IS/bO4uHbL8r0EA7RFpqLNPWYSC/IcxKCeHpOgPBj/gQRT6LVGIyMjOCXv/wlJBIJZmdn4XQ6ceHCBQDgUoJNJlPA6zcRWTDeYi3W8KEAACAASURBVM7nn38excXF2LJlC1atWuXzFn7zzTdjy5YtvPtFmR7CIhrdSDwFw0TyCTW3pkVX4lQSz67E4XTcpIchIRT8r9fKykr893//N9xuN8RiMbZu3YqhoaGUXL/hdkcOhdA6ESeLeB2/eBHteRDafhDhk/ZdiTMFckES6YT/9frggw/i+PHjyMrKglgsRlZWFo4fP44HH3wwJddvvMScizHMKrTKqrEUmhOCqJdIDGScJIloY/4EkQq8r1etVovDhw9jbm4OOTk5eOqpp5CTk4O5uTm0t7cH1XYIHaFneiQio0hIepuRkRFs374dDMPwvrQxDIPt27cL5nwQyYM0JyGIl+ZEKHUFCCIc2Ov1m9/8JvR6PdxuN3Jzc3Ho0CE0NDSguroaf/3rX5GTk4O3334bW7ZsgUaj4dWsCLXysdAzPRKVUSQkvc3PfvYzfPDBB7DZbNi7dy+X8aVQKKBSqWAwGGCxWDA7O8sViiMyA8rWERDxcEGmQ20GIjPYtGkTJiYmuAnr2LFjXFZObW0tjh49ytVBaW9vX/CmnegQQSz3QjqEWRPp4Yg2QybeNDY2oqSkBGq1Gnq93mcf9Xo9l4nV2NiYlPEQwoE8JyGId7ZOLFBtBiLZhPL43XTTTZwHJdLKx7H0mor1XkiHTI9gHo7R0VGu9Lz/eQnXWyWEyqoKhQJ33nknent7eb04BQUFeOGFF0L2ffJGyN464ksypnx9qhCScUIl8IlUEEkTvnBDBLEaF7HeC+kSZuUr3Gg2m2GxWFBUVLSgMV8kLylCKWsQTUNKeklLfyisk0FQCXxCiEQTIog0ZOEfwvHeJiuajPReSJdMD/+MotzcXKxYsQJOpzOmku/RZsgkgkiypoQk6CUSB3lOQiAkzwlAJfAJYRJpiCASUWagN2V/0WRvby/EYnHG3Qv+Ho6srCzIZDKuC3OsJd/DaWWQ7H0EAntxhCToJaKHPCcZyGKszUAIm2hScsP1uAR7U9br9VAoFJBIJMjNzQWQWfdCIA+H0+kEAEil0ogFrUIraxCNF0cogl4icZDnJARC85wAwokVEwQQW0puOB6XYG/KDMNgcnISN954I2QyGYDMuRdCeThsNhucTiecTieysrIAhCdoFZLeJhYvjhAEvUT0kOckwxBarJhY3ARKya2treXe6v2vS+8033A9LnxvymxHYrVaDaVSmVb3Qjhp0KE8HFKpFKOjo7h27Rr321DeKna7fHobdrvJ1NvE4sURegE9IjbIcxICIXlOhBgrJhY3fCm5nZ2dMBgMkEgknC6CTcn1zqawWq04evRo2B4X7zdlh8OB8fFxFBUVQa1Wp9W9EG62yapVq7Bq1SpeD4fFYoHRaITb7UZZWVlY3iohZrnE0pAyHG8dpRwLF0oljhEhGSfpUJuBWFzwTS5smq/NZoNEIsG3v/1tbN261WdCkUqlGB4ehs1mC9vQ9g5nXrlyBVevXsXc3NyCyqJCvxciSYNev379gomVXc5ms2H58uVhG2ZCLUUQaefqcF/SGIaBwWDg9vX06dOcoeJvjMnlcjJUkgwZJzEiJONESLFigmDxn1y8DQSbzQaz2bwgm2LDhg24cOFC2Ia2/4T07LPP4q9//Svy8vJw/vz5BVk8Qr4X+DQ0Fy5cwLFjx3yMNfaY+L/hR/uSkilZLuHuf2VlJcxmM6xWK373u9+hv78fvb29UKlUOHDgALfP3/zmN3HgwAGqjZJkQs2tIo/H40nmgNKNUG2dCYLgx9ugYPEP/4TT7p7vTbmioiLg57EQ7pjiATv+0dFRTE5OQiKRoLKyEq2trT6GCbuP27Zt47YdapxtbW1obGzk/b67uxt79uxBTk4O91m6GCYskV47rD6poKAA09PTnE5Jq9VCr9enlXEWT5J5vfsTam4lQSxBEAmBL+Xd+63UX5TpLZT1FmUmK/WV1WTwiWkT0SeIPT65ubmQSCRwuVyw2+0LtslXVCxYAbn+/n4MDAwE3A+9Xo+5uTlYLBbu83RLvw63gB57jSiVSqjVajAMg7m5OZjNZtTX1y96wySZ13ukUFgnBEIK6xBEOuGf8m6xWPCXv/wFfX19WLt2bdiCzGSFM5OtyWCPj8vlQm5uLmZnZzEzM4O+vj4sX7486nBLqP1g068VCgWXgpwp6dd8sELqDz74gDvORUVF+OSTTxZ1ActUa5AorBMjFNYhiMjxf8A98cQTaG1txdDQEAD4hC8SEZ6J57jb29vjPrZQx6e4uBgymSzqbQbaD//060Ttn5DwDy9arVZMTk5yx7ipqQl33313ikcZf8IJ2Wg0Gp/rpKqqCn19fXA6nbzap3iGeULNreQ5CQF5TohMIVlplYGyKdauXYu+vj5MTU1hamoqZg9BIkhGewhvrQnbWZg9Pu+99x6mp6dhtVoxPz+P5ubmqIqK8e2H1Wr1MUzSKf06Wvyvxc2bN+Ott97C/Pw8ZmdnkZubiwsXLmTUPgPhp42r1Wps2bIFZ86cwejoKHp7ezE9PQ2VSuXT8ToRqeYZU4Sto6MDBoMBBoMBHR0dcV+eIDKZZMaXg2lEWltbUVlZCQCYmJgQZNnxWNtDhCqw1tbWhtHRUR/NB4tcLodIJILdbsfU1BT27du3YF3hFHDj249r166hoKCAM0xSXbY+0fgbJlqtFidOnIBarUZ2djaKiopgNpvBMIzgi/ZFSiTNEWPRPiWStPCcdHR0ID8/Hw0NDaiurgbDMHjttdewbt26uCwfDPKcEJlAMuPLoTQia9euhcfjwdTUFPe5kMqOx9IeIpw3VpPJhFtuuQUymQxOpxNnzpzh0lsvX76Mq1evIi8vDxKJBHl5eejt7fUpKhZuITW5XO6zH3K5HG63G8888wxXF4ZF6OnX0eCdclxdXY3jx4/DZrOhoKAAe/fuxdDQEMRiMRwOBywWC/r6+jLGgxJJ2niitE+hyAjPyZEjR7Bx40bu75qaGrzyyitxW54gMh3/t+Pm5mZ0dXUlTOsRLJsCAM6fP+/zt1DKjsfaHiLcN9ZnnnkGra2tyM/PB8MwaGxsxNjYGMxmM2688UbccsstaGtrg1Kp9FlXuOtXqVS8+yGXy6HX6wM208sUwwS4fg1u27YNtbW1+OMf/4ihoSFIpVK0tLSgtrYWLS0t+Od//mcUFhbCYrFgdHQ0Y7xGQHjNEf2vm507d3KezaGhIezfvz9lnk3BGycmk4k7OCzswR4cHIx5+TVr1gT9d+XKlbjuT7guWYKIN0Lo5Crk3lCB+gT5G3WRdFoOZgSyy3o8HszNzWFyctJHD8JOoN7hlnDWz1e7I9L9yBQ2bdqEuro6lJWV8XpEuru74XQ6UVlZiUcffTSjjDMgeIgy0PXe2tqKFStWwOVyYXx8HA6HIyWp5mlhnHgbGt7MzMzEvHwy8Y/7exsq/nF/MlSIRBCrniIW4jH5J5J41VOJxAisqKjAT37yExQVFXHZI97ng12XdwG2UOufmJhISl2YdIHd77KyMjidTl6DrrW1FVqtNtVDjTvBmiMGut6B6yFAVn9y7dq1lHg2s5K6tSjwri7pDXuDxbp8qBRhNt0pHmg0Ghw/fhxWqxXbt2+HSCTirVLo7ZIFkHHWPJE6Aj2sysvLE26ghJr82Wue9RAkG/Y+40u/ZMcYbiolawQePHiQ+4zPCGTPh/dbvf/5YL0s4a6fXTYe+5Ep+F9j7HETkhA73gRLi29ubkZLSwsA3+uE/Q3rTdJoNDh//rzPb5J1rATvOQlmhPB5SCJdPpl4v7mIRCKYzWaMjY2hsbERDMPwumSTpYwmMp9Uh1RYDQDfA47PQ5AKwq08GgrW6LBYLJwg1f/ts7u7G9u3b4/qfAR7I47nfmQSkXgN0z38Hq6Xks8w8fYm7d69O2WeTcEbJ0uXLo3ou0iXTzb+5ZQnJye5csrFxcX4+c9/zvt2mQ43BCFchBJSEcKkmeiJx7uOicVigUQigVQq9TnG3d3daGxshMlkgt1u585HbW3tgmX9x5ZqI1MoRHoeQxl03usVcln3cIgmRJmsNhHhIvhUYpVKhRdffBEPP/wwZDIZgOteEIPBgP/3//5fzMuHIhGpxHzllGUyGQYGBpJWAIdYXETbyTbTiCQVN9Bx4Ctmx3527tw5/OhHP4LL5UJ+fj6KiorgcDhgtVqRl5cHm82Gt99+GydPnoTVakV2djYOHTqEVatWobOzEwaDARKJBBKJBDabbUFX5u7ubpw4cYJb/2IopMZHpOfR36DbsWMHBgYGeI9Xqsu6x4NoWj4ku+t9qLlV8MYJcF3IyjAMqqurAQCvv/46SkpKuLolJpMJRqOR+z7U8pGQCOPEu45CVlYWsrKycPnyZYhEIrjdbuTl5eG+++5LuxuCEC7JfvAIlVgnHr5Jkf3s7bffxh/+8Ad88cUXWLJkCdra2lBVVQWDwQCr1QqRSASpVIrPPvsMOTk5KCgowKFDh1BbW+szNpvNBolEgm9/+9vYunWrz9icTifEYjEKCgoWtZEZyXm0WCy8FYsDGXSR1AgRMlVVVQHnCoVCwXt9RPObaMkI42TdunXo7e0FwzAYHh7Gp59+iqamJu57o9EIg8GAhoaGsJaPhHgbJ3zllN988024XC6IRCKIRCJYrVZBlvYm0ptkPniESqwTD9+keOONN+Ltt9/G0NAQrl27BpVKhf/4j//A0qVLceDAAYjFYthsNixbtgxutxtZWVkoKyvDCy+84FMMzXtsNpsNZrN5wdheeOEFFBcXL3ojM5LzGI3XMBltDBJJslpVxAI1/ouReDb+GxkZwbZt2yAWi32ydNhmXHl5eWAYBhKJBGKxOObmXwRB8OPfDA4IP3MjnKaGOp3Op6FefX09XnrpJW4dwZrNxTK2xUa4xyqcJnh8Bl1XV5dPRlQ6NAlkPXl8x8H7eKVafB5qbhW8IDaTaGtr46pAlpaWcuJXpVKJXbt2cQXfJBIJHA5HSgvgEEQmE0u9F746I2zqZWVlJZxOp0/tEbanizfB6kakshZNuhHusYpGiB2ugFZoRNJXR8iQcZJEGhsbUVpaCrlcjldffRUXLlyAVCqFVqvFa6+9BrVajaKiIrjdbrhcLjgcDt4COOme5kYQqSaSzA2+zwCgvr7ep3mfTqfDww8/7PNZfX29T2kANrNmdHQUOp2O9z7u7u7Gvn37Qo6NSJwBkc4ZUcluVZEo0kJzkkriqTlRKBS488470dPTA4vFgvn5echkMnz00Uew2WwQiUSYmJiAy+VCTk4OvvOd70AsFvvEt0+fPh1ztgFBLGbCzdwIJn49efIkfv/732N2dhZisRhyuRzvvfceTpw4gatXr0IsFkMsFuONN97wEbCuXr0aDMPgT3/6E6amptDX14e1a9dy9zGbYmyxWJCbm4sf//jHAbNKFjuRZODEst54ZEQlWwOSDpqZjGj8l0l4t42XSqUYHx/nhHSXLl3C/Pw8srOz0d7ejv/8z/9cYAGrVKqMcNkRRCqIpN4Ln3tco9HA5XLhk08+wdWrV5GVlYUdO3Zwn127dg0SiQQ7duzgeuaYzWZotVpuQqirq/NprmY0GgF8aZjMzc0hOzsbe/fuFVR5fyGRyLo98a73kaq6KekeHiTjJAX09/fj4YcfRnFxMde/4PLly5ifn0dWVhYeeeQRLr3Q/4aYmJjICJcdkf6kY3gxkomHzz1+9uxZXLp0CR6PByKRCCtWrAAAjI6Ocp+VlZXhjjvuwNGjR1FaWgq1Ws11AmaPCfuColAo0N3dja6uLvz4xz/GtWvXkJ2djba2toDPgMXSEycYiSwYFu9KxqnSgKSrZoaFsnVCEM9sHeD6A72trQ1msxlqtRoOhwN///vfIZFIIJfLsXTpUuTm5i64+P0V5aToJ6Il2swF/3WkQ0YAH5Huv/f+WCwWTE5OIisrCytWrIBEIuE+k0gkKCsrg0Qi4fbb+7fV1dUYGBjgjhkA7jtWAO90OrFt2zbs3LkzrLEtZuJxHSeLYH1uEvHcTvb2oiHU3EqakxDEu87J5OQkDAYD5ubmMDs7i/z8fFy7dg1OpxNXr16FzWbD8uXLsW3bNp/4pH8dCrbKbE9PD/fZjh07sHr16riMk8hM4lEhFUjPKpps3H/9+vULxsTG/devX79gv73vNblcDrFYjGeeeQZ1dXU+nz377LP4/ve/71NnxLv2yHe+8x2fY7ZhwwasXLkS7777LsbHx+FyuVBRUYEf//jHvMdssdSiCZdI6/aksvZHMjUgidDMJALSnAiIkZER6PV67mHmdrs5D4pEIoHH44HdbofZbA5rXenssiNSQ7xczOmWERBL3N//XlMoFHj55ZfR2trq8xmbLuz/ts6mqvofM51OhwMHDnCGCes9JeKPEPrlJEsDIrQeOdFCxkkS6e/vx+jo6IKuyRKJhEsxBoCJiQls3749aDw/XdPciNQST6OCr96HEA0TIHqjjO9ek0qlGBoawtDQEKRSaUT3H3vM2HWwy950001cjRS6h+OPEGp/JOuFMh26f4cDGSdJZNOmTXj00UehUqngdrshEomgVCq5BoVf+cpXoFKpkJubC5FIxGvZCqW7LJG+xNOoSJeMgGiMMr57rby8fMG6y8vLI77/7HY75y0pLi5Gc3MzWltb6R5OEKn29CX7hVII3b9jhYyTJKPVavHSSy9h+fLl8Hg8YBgGVqsV4+PjMJvNKC4uRltbGxobG3kvoExx2RGpJV5GRTqFFyM1yvjutf7+/gXVYPkye4Ldf0ajEaOjo5xhIpPJuGNI93DiCHX++/v7E5J9Ri+U0UGC2BAkoiuxxWLBn//8Z0xPTwMAlixZgmvXrgEAioqK0NDQgPXr1/P+1r+7rLfIy7/xl1AaPBHCw7szNsvAwEBEIrlEFcFKJJEIyfk6ObOfbdu2DXV1dQHFr4HeTEdGRnD06FE4HA6UlZXhmWee8TlmGzZswIYNGxZF875UEOj8f/bZZwkrbhlN48HFADX+i5F4pxJ7P9Dn5+fhcrkgk8ngcDggkUiQlZUVtosxndM5idQRjzRDvrfBioqKgJ8LhVSm4KfrMcskAp1/tglros5NOqU9Jwtq/CcwWFexVCqFXC7n9CYymQxyuRxSqTRsl26sIq90LKJFxEa8XMzpGF5MtZA8HY9ZuhHsmdbd3Y1t27bxnn+9Xg+tVpswTUomaECSDYV1QhDvsE5VVRWsViuGh4fhdDp93OE2mw0SiQTf/va3sXXr1pDr8ncLnjlzBoWFhXjuuedC3lDxqndBpBfxcjHzhTxYwglvJBsh1H5It2OWbgR7pvn3LHrhhRcWnP9z585Bq9Xi3Llzgu1Hk0mEmlvJOAlBvI0TNuZss9lgt9vR1NSEu+66i7tJbDYbzGYzVCoVPvzww5CGQSTFfbz1Kf5FtNjtyeVywRbRImInnhNkpEWwUolQ4v7xPGapLComRIIVBvzRj34Ei8WC7OxsHDp0CKtWrQKw8PzffPPN+MY3viHo4paZct7JOImReBsn7EPSbrdDJBLh/PnzXCySvUkYhsG7776LgYGBsDwX4Yj8/N8q/LdnMBhw7tw5nDx5Em63m94WMph0MiriRaZ5LcjzuZBgnmSXy4UlS5bg0KFDXM8i/9+p1WpoNJqYheKJJFnnPRkGEFWIFRhsgZw9e/ZAqVT6xLsrKiqg1Wrhdrshl8vDLgoUTjonnz6F3Z7ZbMbc3BwYhoFYLCbDhMhIMinuL4SiYkIkWLrw0aNHFxgm3r/TaDRha5JSpddLxnkXQjVdgDwnIUlEKnFVVRXKy8t5rfzDhw9H5LkIN50z0FvF4cOHMT8/D5vNxtVcEJobkyAIX2LRm2U60fQdi0STdPr06ZR5rZJx3pPVN4s8JwImkqJQfJY6e7EwDAO73R4y84JvewzDYHp6mjNMAOEW0SII4kvSqX1AMommMGAkmVSp9lol8ryz3hC+aro6nQ6jo6NJu77IOEkRrLHBV6mzvr7eJ50wkJutv78fDMPAbDb7lLv3v3jb2tp8DBR2ew6HAyaTCVKpFEqlknr0ZBCUJr44SJf2Acki2nTxSPrRpLoUPjsm//P+ta99LeDy4dzz3vMM4Gug7N+/H0NDQ7BYLKitrU3K9RVRWKezsxPj4+NYvnw5srOzEzgs4ZCIsI63qEmlUuHw4cOcAMvhcOCNN97AJ598gtzcXFRVVQV0s8nlcrz++uvIy8uDUqn0cbOx7r9Lly5hYGCA+53FYuFcgCaTCXa7HXa7HRs3bsTWrVsF11abiBwSSwqbeIoN41HpN1OINV08EqF4JFmS8cL7uvE/7xMTEzh79iw++ugjrF27Nqp73n+e2bBhA1auXIl3332X65xdXl6Of/u3f4vLtRXXsM7MzAwOHz6MNWvW4N5778Xu3bvx1ltvYXZ2NuaBLiZYtyDDMGhsbATDMFwMjxWnsunEQPCmVXK5HEqlMqDF39jY6NOiXafTwWq1wuFwcM0HZTIZPvzwQ86TQwWh0ptgbuft27dz1xtfB17yqCSWeIoNU11UTmgku8hdMr1W3tdNd3f3Au3H1atX4XQ6MTAwAJ1OF1Woyf846XQ6HDhwgDNMJBIJ5HJ53PctEBF5TlavXo2Ghgb867/+K6qqqvD3v/8dr732Gn72s5/h97//Pebm5nDzzTdnlFclEZ4ThUIBlUoFg8GAubk52Gw2PP744zhx4gTEYjFsNhvkcjkGBgY4K9jbUmcYBkajMazMGvZ3b7/9NoaGhjA1NYW8vDzk5+cDAIqLi/GVr3wFTqdzQZpxOqVWEl8SSDT31FNPwWQywWazYe/evVytB4A8KskiXmJDIRSVExrJThf3915YLBZ8/PHHCzwX7LKxpN+y1w1b9kEsFqOgoABarRb/8z//A4lEwo1jenoafX19WL58ecRCWf/5Ynp6GmKxGOXl5VCr1T7zRKzXVUIEsXl5efj617+Op59+Gq+++iqOHz+OO+64A6Ojo7jnnnvw9ttvRz/iRcLExATUajWys7OhVqvx0ksvwWq1QqlU4pFHHsHs7CyGhoZgNBq531RUVKC+vh7j4+OYnJyExWIJy1KvqKhAXV0d97fL5YLT6URZWRkOHz7s06rdW7dChomwiERHwieaE4lE3PWm1+sp/TQFxEuvQKXw+UlWurj/PXPHHXfAYrFgaGjIx3PhvWws6bfsefV4PJxnvb6+nusHpFQq0d7ejltvvRXA9fklFqGs3W7nvCXFxcVobm72mSeS4ZmLOJV4dnZ2gWdEpVJhcnISP/jBD9DQ0ID29nYsW7YMpaWlcRlkR0cHhoeHMTg4iN7e3qAPT6PRiOeffx4ikQgTExPo6OiAw+HAypUro9p2IjwnwHUrPzc3F+vXr8fg4CD3+Y4dO/CNb3wDfX19cLvduHz5Mmeldnd349lnn8X8/DwkEgkKCwtx4cKFsKzY22+/HdPT05ienuayctj0unQsQrXYiEZH4p9SmZWVhR/+8IcwmUyUfhon/PUj/roA77dl9u/169fHrFfItKJy6QSf1+of/uEf0NfXh6mpKUxNTaGvrw9r166FxWKJW/qtQqHAnXfeiT/96U/Iy8vD4OCgz3WzatUqrF27FgAwOTnJ/S7S0hC//e1v8eabb0IsFnNZnAMDA1zH7HhVU45rhdhdu3bhJz/5Cf7rv/4LY2NjyMnJ4QwQo9GImpoayGQybNy4EW+99VZcamV0dHQgPz8fDQ0NqK6uBsMweO2117Bu3Tre5YeHh/Hiiy/ixIkTGB4exgMPPODjNYiURBknwHVX3S9/+csFYrYNGzagrq4OfX193CTidDrx7LPPYm5uDtnZ2di1axdMJhNGR0fx3nvvhXQljoyM4OWXX4bL5fLZlncdFHLlC5dowgF8YsmLFy9S/5A44W8wete/UKlUOHDgAGcwsm0h2L/Xr1/PGY4WiwVisRg/+tGPFjwzg4UDFmOlXyHA1wpBoVBg7dq1PgYKcH2ij6fhr1AosGLFCnzwwQfcZ97Gh8ViwW9/+9uoBdJsexWHw4GysjI888wzPnWzWAMlHoZvqLlV5PF4POGu7M0338Q//uM/YnBwEAaDAUajEVeuXAEAPP3009i+fTsuXLiAW2+9lVs2Vm6//Xa88847nEbCarXinnvuwYcffsi7PGskscuHgm3bHIgrV64gLy8vYFvnaAmnbT0Aro4JK0rKzs5GW1sbamtrodfr8Ytf/AIAUFlZidbWVu7i917//fffj+7u7qDboklJ+IRzzfCdf75l6+vr8dJLL3Hrbmpqwt13352qXUtL/I+xVquFXq/n0vvVajWUSiX3Od+9PTo6isnJSUgkkqD3MJvGSgiDzs5OTp/nzcjICHQ6HSYmJjhjIJ7PWO9rgsX/mor2Oc/nEaqoqAj4eaywc2+guTUizUl+fj7eeustVFVVYd++ffjLX/6Cv/zlL7hw4QK2b98O4LoVt3v3bp+DFy2s+9nb0GBjXt6hkHQj3Lb1wHX197Vr17j4386dO7kSzHV1daisrAQAH32K9/qlUimMRmPIbS02ZX86Em7xpVDXF8Mw2L9/v8/bFRXeixz/86HX61FfX++TceetC+CbRFQqFXfevPUKpANKPpFougJpWyoqKqDT6Xy8FPHK4AmWneWdiRntc15oOqaIPCfAdU/CwMAAvv71rwddJi8vL+bB9fT04Mknn1zgJamsrMSvfvUr1NTULPiN0WjEzMwMli5dipmZGVy6dAlNTU1RjyGUdRcNrDuYzwoN5PFgW337pw17W+plZWULrOXa2lqcPHky5LbozSx96OrqwsGDB7m//b0ewa4vtnX83NwcSkpKsGvXLvKixYj/26zD4eA8J6y+K9DbLfuZTqfD0NAQAGDFihWQy+VwOp10TpJEuM/kUM/JYJ6NWM5hKK/G6OgoLBbLAu+b/2+rq6vR2NjIO5aRkRG0tbUF/b6/vz9u80SouTViQaxMJgspdGVvyFgZNCtWCgAAIABJREFUHBzEu+++uyAm9eKLL2LdunW8IldW/KrRaFBdXY3z58/jxIkTuOuuu6IaQ6J664QSs0kkEp9QzLPPPosLFy4s0Bx4xzr5NAT33nsvCecyiHCKbnlfX/39/T4CzQMHDkAsFiMvLw979+7F5OQktmzZsmjTT+MBn/B48+bNGB0d5ZZhdQHh6BWmp6fh8XiwfPlyMkySRDxSvMPtcxYNfNcN8OUzvK+vDw6HA//0T/+Ee++91+e3gQpy8onqTSZTQKFrvHVMcdWcxIrRaMQbb7wRcrmmpiaUlpaip6cH3/ve97g3CpZgnhN/TCYTNmzYsGAd4ZIIz0kooon9hXqbJtKfSDQnwMK3wf7+fu5vbx3Etm3bfDqykhctMiLxnFRUVATUK3R1dWH//v24du0aFAoF3cNJwPtc+N9f9fX16OjoQE5OTkjvRzL0GoGuG3b7obwaydaUhCLU3JpU4yRSBgcH8dBDD/EaJ6+++iqvFWc0Gn2yc6xWK26//XacPn06qtTmVBgnkboYE+VKJIRDNA8Wvu/6+/uhUqkW6CDYdcXTbbsY4JvQ9u/fz2XV7dy5EydOnAj54Kd7OPnwPWe9m6mySQilpaU4evRo0PMQr7BQoon0BSeRxFUQm2yqqqo4EQ4LexD5DBOTyYQnn3zSZ/mZmRkAiFvNlWQQSRMqKmG9OIhGrMZX8KuwsJDXMGGXJ8MkfPiydU6cOOFTXPHEiRPQarVB78lQ97B3wTy+MVDLgejga/PgXeiSTUJ47LHHQk7YkTyzU0k6dbKOWHOSbGZmZsAwDKqrqwEAr7/+OkpKSrg6JyaTCUajEdXV1Vi6dCnsdruPK/TIkSP46le/KijNSTiEU8OASlgvHqItupWKBmWLBX8dwPDwMM6ePYuCggLs3bsX58+fh9Vqxc033+yj6/GO6Ye6h0dHR/GnP/2JK+pFTRzjB1+bB6fTif3793OFLouLi2EymcJ6hqZL3Rl/jRQQeaG2eBDXImypYN26dejt7QXDMBgeHsann37qk31jNBphMBjQ0NAA4LrS/ZVXXsFHH32Erq4uLFu2DE8//XTU20+VcRIOoURS8arkRwiDaB9+QnkYZRr+BqP336tWrfIxGAMZkKHu4ffeew9TU1Nwu93o6+uLuhcPwY9/z7KTJ09ifn4+qkKX6YJQOlkLShCbjqRCcxIJsYqkiMyH9AzCJtQ9bDQaqYhigvnNb36DvXv3cqGc3bt345FHHgm70KUQQjbhkE6aEzJOQiB044QggiGkhxERPWRgJo6RkRFs27YNY2NjXCiHrScF+NagefLJJ6HValOW4RIL6ZatI2hBLEEQXxJJBUv2s+3bt4NhmICVYrdv306i6TSgoqICTzzxhM9n8ao8uphhJ2a5XI6SkhLs3r0bSqXSp0p3a2srKisruear0XSRDkYk93WkzwBvhFYBNhSC15ykGiFrTojFQzRdiX/2s5/hgw8+gM1mw969e7Fq1SoA1+PsKpUKBoMBFosFs7OzCwo3EcJCKDqBTMLfY/DCCy/gzjvvXCCS9W/EGk9ReST39fnz5yN+BngjtE7WoeZW8pwQRBrAl/YILHzAevdgaWxsRElJCdRqtU866sjICPR6PdRqNUpKStDY2JiSfSLCg8oFJIZIPAmJ8lzx3dednZ3o7u5ecF9rNBpIpVKMjo6G/QzwJ1BPIHa/haSbIc1JCEhzQgiFaPQjpDlJb4SmE8g0wk0oSKTmx3vddrsdc3NzsFgsXFdr73PO6l8UCgVvL7V0ug5IEBsjZJwQQiKahySJKdOXdKk8mskkw8Dnq0ybnZ2NtrY21NbWLug0DwBOp5P7fTrezySIJYgMwt+9bLFYUF9fH/DNr7Ozk8SUaUy6VB7NVPg8VN6i8niF1th7VCaTobi4GBKJBAqFAnq9foEAt7W1FTqdzuf3mXg/Z6V6AARBhM/IyAja29sBXDdMJicnsX//fhQXF6O2ttZnOfaBxjAMuru7fdbT3t6O8vLyjHugZSLBDI+Kigo6hwkklC6FvcdYXUq0eN/XrIFiNpshk8m4hq7sGABwy7Jk4v1MnpMMIpY0M0L48LVkz87OxtzcHBobGzkDxN8FbDQaSUxJEFGQDM8Vn+BZqVSioKAA4+PjXIYW6/1cLOJo0pyEIF00JxSbzmwCCSC7u7vR2NjI2wXXOzZNYkqCEB7h3NdsYbgbbrgBQObcz6Q5WSREk2pKpA+B3Mu1tbVoa2vjPCjPP/88t1xdXd2CBxkg3KJLBLHY4LuvvVP9s7OzoVQq4Xa7MTExgaGhIUil0kVxP5PnJATp4jkBKG000wmW9vib3/wGzz//PFeYqampCXfffTf1XiIIgeN9j/o/w7VaLSYmJqDRaNDc3IzR0VGoVCqfHj8s6XY/UypxjKSTcQJQ2uhihM45QWQGiyk8T8ZJjKSbcQIAXV1dnMIb+PItmsg89Ho9jEYjF77x9pZJpVLU1dVBq9WmepgEQYTJYvF2kuZkkeGdksbS3t6eUSpu4jpsO3fvODRbg0EqlWJoaAi/+MUvoNfrUz1UghA03pmO/lmP3pmOych6TKcS84mE6pxkEME0J83NzeTmJwiC8IMNpRw/fhy1tbU4efIkjh8/ztUU8a8XxIZPF4uRkCoorBOCdAnrUA+OxQmFdQgiNgKVhg/0f3qOxgcK6ywSIumwSWQOWq0Wra2t3Pk9ePCgT5lrMkwIIjjez0i2X43L5cLQ0BCGhoYwPz8PgAyTZEPGSYZAPTgWL9Q7hyBiw99AYQ0S4LqhQoZJ8iHjJIMgIdXihETQBBE73ka+TCZDUVERlEolZDIZgPgZ/OG2GVns7UjIOCGINIavL0em9togiETibeQ7HA5MTk6CYRiut008DH5WfMt3b7L38rFjx9DU1BTWcplsoJBxkgEsdgt7sZKsdu4Eken4i2Kzsr5MZJVIJJBKpXG5n8JtM3Lfffct+nYkZJykOeFa4mSgZB4kgiaI2OHL1pFIJKisrERlZSVnqMTDQPG/N5ubm9HV1bXgJaO2tjas5TJZ/5IWxonVaoXBYMCOHTvCWr6jowMGgwEGgwEdHR0JHl1qEUrDP/LeJB8SQRNE7Hgb+d7NMltbW7lMOKfTibq6OtjtdjAMw2vwh/uc8zdQvDPsgr1kBFouUxF8EbbBwUGYTCZYrVZcuXIl5PIdHR3Iz89HQ0MDAMBoNOLgwYNoampK9FBTAnsBs4ZIc3Nz0hv+eRcxCtYPAqDCRfEm2PGsqKjI+AcYQcQKew+xJeOVSqVP+fiWlhbOGBGJRHC73Qte9iJ9zrHiW+82I3yC23CXy0QE7zmpqqpCXV0d8vPzw1r+yJEj2LhxI/d3TU0NXnnllUQNTxCk2sIWiveGIAgiGrwzHf2zHtlMR41GA6VSCblcHvNzLtwMu8WciSd44yQSWA+LtyHDTpqDg4O8v1mzZk3Qf+F4a4RAKmtdhBtHXQzWPkEQmUm8nnPhZtgt9ky8jDNOAnlYZmZmkjya5JJqCzvV3huCIIhEE8tzrrOzE93d3bwZdlqtFna7nTM8Ai23mDLxBK85iQQ23ucPezL5CNUzh63/L2SE0vBvMcdHCYJYHET6nOvs7ATDMHjxxRchFouRk5MDpVLJNRZk+2N5z1F/+MMfgopk2ed9f39/xj5fk2qcGI1GvPHGGyGXa2pqQmlpacTrD2SE+Id6MolAjf3Ky8t9RLLJMFACeW/Ky8tDvlF4C9D819nf379ohbR0bAhCWETynGOTBaxWK6ampiAWi1FYWMj1vNLpdLhw4QJcLhekUikeeOAB3HLLLdi0aVPAe581UDL93k+qcVJXV4e6urqErX/p0qVRfZfOhKp1kSwLO5D3ZnR0FDqdDq2trQu2PzIygra2NgwMDFCmDw+UBUUQwiJSL7VGo8Hx48fhcDggkUjgcrkwNTWFn/70p/B4PLh48SIcDgdkMhkqKyvx3e9+10eYG4jFkImXUZqTqqqqBd4T9iKqqqpK4cgShxBqXQSqVFpbWwuLxYKhoSHodDqf+Cj7m/7+fp9YK2X6fAllQRGEcIimIjP7DFYqlbjxxhshkUgwPz+PTz75BMPDw5xhcuutt/K+wC1m0t44MZlMMBgM3N+bN2/GqVOnuL9PnTqFzZs3p2JoSSPVDf8CeW/q6upQWVkJABgaGoLRaATge5MrlUrs2bOHMn14oCwoghAO0VZk9jdQAMDtdmN+fh5ZWVm46aabyDDhQbJnz549qR5EMAYHB3HixAm8/vrrGB4ehkgkAsMwWLlyJYDrOhaDwcAVXVu3bh16e3vBMAyGh4fx6aefxlSA7ciRIwCAxx9/PPadyVCqqqogk8mwZcsWnxtMoVBg7dq16Ovrg9vtxuXLl1FYWIjnnnvO5yZftWoVNBoNzpw5A6vVip6eHjgcjoybfDs7OyGXy6FQKBZ8NzIygtOnTy/w8CkUikVxbAhC6AR6zgFf3qdqtZr3ZVChUKCwsBB//vOfMTMzw2lMJBIJli1bhvvvv5/3uZDJhJpbRR6Px5PMAaUbbLZOqKweIjD++ggAvJNrV1eXjwK+qakJd999d1LHmihY/Qjffnsfn0AhuEw+NgSRSfAJWUdGRqDT6TA4OAiHwwGRSITs7GyIxWKIxWJUVlYuOu9JqLk17cM6hPAJp0Bcquu0JJpY9COZfmwIIlPga8TqbZjY7XYAQHZ2NtRqNSQSCdxuN68ub7FDxgkRNtE29ws1uUZaCTEdmwxGqx9Z7FUiCSKd8H8JYYupjY6Owm63QywW44YbbsBPf/pTlJSUcCJZ1kBhdXlEGmhOUg1pTq7DvhGcOXMGGo3GJz7KTqBnz56FTCbz0U34T647duzAwMAArFYrzpw5A5VKhQMHDvhM0KtXr/bRWXhvM9pxCIFI9SN82QHBjg1BEKnF/x4/ffo0LBYLLBYLACA3Nxft7e247777oNFo0NvbC4lEgpycHMhkMmzYsEFwz61EEWpuJc8JERbRhCXCSb3bvXs3GIYJWwGf7um1kfRAijY7gCCI5OLtzfW+P3NycmC327F06VLcdNNNaG9vR21trc9yjY2NeOmll/DUU09RvSIvSBAbAhLEfkmwAkR8b//hikCrq6vR2NgYdhXUSMchJMIVB7NQhViCEDaBnnNdXV3Yv38/xsfH4XK58Oijj2LXrl0pHq1wCDW3knESAjJOfBHK5BrpOFJNZ2cnVCoV9Hr9AqOKYRh4PB4cPXpUkGMnCCIwfB5i4Hpp+qGhIbhcLkgkkkWZkRMMMk5ihIyThQglrVUo4whFZ2cn2traYDaboVaruaZfFRUV6O7uRmNjI+bm5lBaWkoGCkGkId4GilQqhc1mw6VLlwAAZWVlyMnJgdPpFPQLVLKhVGIirgglrVUo4wgHjUYDt9uNubk5mM1maLVaVFRUYGRkBHq9Hmq1GtnZ2RCJRKQfIYg0hNWPSKVSDA0N4fPPPwcAVFZW4vDhw2htbaUsuwgh44QIG6GktQplHOFSUVGBY8eOoaSkBGq1Gnq93ieNWKlUoq2tDY2NjaQfIYg0paKiAhqNhgvjFBcXQ6fTcU36SMQeGWScEGERTdOrTB5HMLyV++z/WQPlhhtuwPnz57F//34wDAObzYaWlhbU1tZi06ZNgq3TQhBEcEZGRnD+/HkUFRWhuLgYMpnMx5ubrEasmQIZJ0RYCCWtVSjjCIR3hUi9Xr+gWqTZbIbFYsHIyAhMJhPm5+e5sbKG17Fjx8hAIYg0wvulqaysDDt37uR9WUpGI9ZMgQSxISBB7JcIJa1VKOPgGxMAH2EcAMzOzsLhcGDJkiX4/PPPYbfb4fF4IBKJsGTJErS3t6O0tJS6DRNEGsLnzWU1ZXRPB4aydWKEjJPMIVFGjX+dA+BLA8XlcuHixYuw2WzweDyQyf6/9u4upq3zjAP43x9gnCzmIxxmlRzCkKZMcndTtBt2ES3thRupYjcpuam0JSVWfBGQWqShIcJCtLQCqSRSTQkbu0CT4iXK2pvYmZJIaIlTKWU3wemQJlJyGs3CGYTjqAWMzS7YOTu2jzEBGx+H/0+KWuOP88YK+OF5n+d5bbBYLEgkEojH47DZbGhsbITdbmc1P1EJ2u6hnrsVu3Wo4ErhrBu9A7kU291OSZ9aC0Ct3J+dnUU8HkcymQQAmM1mHDhwAC6XCz/5yU9gNpvx+PFjTE9Po6ysjIEJUYk5duwYTpw4ofu9yzqTrWNwQtuSrw/9Qgc4hRx7r3eo3zfffIOlpSUkEgmYTCaUlZXBZrNBFEXYbDZ0dnbiN7/5Derr69VMSrasDhEZ27Fjx7J+77LOZGsYnNC25ONDv5BZDcVWTwXe6uufP38es7OzsFgseO2112A2m2E2///bbWhoCENDQ7DZbKivr0dtbS0ePXpkuDZoIqJiYHBC25KPD/2XDXC2mmVJX+vAwEBei9WUQ/2Wl5fV8zScTif27NmDsrIymM1mNUsyPT2tbuX09PTg4MGDhmiDJiIyAhbE5sCC2M3Z7lk3mz3MT1t8dvjwYbjdbvX1ta/xzjvvQBAE3XRqocbez8zMpJynYTKZ1MzJD37wAwDrnTtPnz5FMpmE2WxWz9sAwMp+Ito1WBBLO0LJGmh5PJ5Nf8BuNquhZFlmZ2dx8eJFdHZ2YmZmJuNsi2AwqLsVVKix98r15+bmAAA/+tGPUFdXh9XVVUQiEXzwwQcYGhpCMplEIpFAXV0dDh06hHg8jsnJScPMaSEiMgJmTnJg5mRz8nVK8GayGtoMBQA0NDSorbiyLGPv3r2wWCwZ15+YmEBfXx8qKio2zM5s5++uzegAwMmTJ2EymdTD/gCoo+oBZLQvF2tOCxHRTuKck21icJLbZrdkXuZ1FNmen76FYrFYUFlZiYWFhZTtEm1gonf6bz4GJXHOARHRy+G2DhVUvs66ednD/JqamtDZ2ZnSigsgpSNG+9pnz57FysoKysvL0dfXl9ex9/mYc1AKs2KIiHaKpa+vr6/YizCyy5cvAwBOnTpV5JUY061bt/Dll19mZA2qq6vR3NyMu3fvQpZlOJ1OuFwu3dfQC3DeeOONlOffvXsXzc3NqK6uVp/z8ccfI5FIwGq14sWLF1hZWYEgCBAEAWtra7h79y7279+Pjz/+GMlkEnv27MHg4CAOHz6ccn1lrU6nc8uZDZfLpa4tXXV1te7f/erVq7Db7bh16xbGxsZS/o4zMzO4desW7HY7uru78eWXX8Jms2V9D4mISkmuz1brTi6GXj3Kh7neADEla5CrhiLXYX5K4KIUjqYXv9rtdjV7Eo1GcfDgQZSVlamFtcD69tCnn3664aCkneyOUbaCrl27Bq/Xm5Il8nq98Pl8iEajSCaTsNvtWx4QR0RUikqi5kSWZQQCAdy7dw+XLl3a8LHBYBA3btzA0aNH4XA4EAwG0dLSohYovizWnOyMzZ57kx6YAEA8HkdZWRmWlpYwOzsLAHA6nbBYLLDZbADy1y6cL+nZIm1AEolEUFNTg/n5eTidTrWYlq3FRPSqKPmak3A4jFAoBFmWEYvFNvWc+/fvo6OjA4ODg9sKTGjnbHb8s5Jl0QYmDocDQ0ND+Oyzz3Do0CEkk0lIkoSnT59ieXkZQH7ahfMpvdbF5/OhtbUVkUgEKysriEajDEyIaNcyfHDicrngdrvhcDg2/Zzbt29jenoa169fZ2DyilGKT91ud8Ypvk1NTfjggw9QV1enBi+HDx9+qcLcnZQeoIyPj6OmpgYWiwX19fWw2WwvNSuGiOhVsetrTpTUUjaxWAz79u3bodWQnvQtHyWLIggC6urqUmpRfD4fHA4H9u/fD7fbDa/Xm7KF0t3dbahMhDK8bmBgAMvLy4hGo6itrVW3o0ZGRtDY2GiY9RIR7QTDZ062IhAIIBgMwu/3pwz0IuPK1kp79epVDA8P48SJExn3Nzc3w+fzqZNgtYW1Q0ND8Hq9APLTLlwoysRa7Xk8CwsLeO+99wyb8SEiKrRXLjgRRVGtM2lra0NVVRV6e3uzPv6rr77a8A+zJpu31VkdG51KXFdXh0gkgm+//TYlQJmZmcHJkycRjUbVThbtvBHldRWbnTeyk5SMjlIEW1tbi/LycjidTnzxxRcZXTwMUIhot9jRbR2lkyaXrq4uiKK4pWukz4Fwu9146623cO7cuS29Hm2OtjV2oympADKCg+bmZly7di1j20XZpnE6nYhEIjCbzeju7obH40F/fz8kSUJ5eTnOnj2bsuWT7Xrp7cKb7RAqBO0a19bW1OLX3//+9/D5fGqRrNLFo22lJiJ61e1ocOJ2uwteoBoMBlOuUVlZCQCQJGnLAQ/ltlGAoW2Z1ZvVoWQ1Tp48ieXlZTUAUUbgC4KAU6dOqbcHBgZgMpnULIPP54Moipu+HrC9YCoftFtQn376KSYnJ9VASRRF9fpzc3ObmhVDRPQqeaW2dSRJQkdHR8rZLIuLiwDAwKTA0us6uru7cefOnU2fWzM5OQmTyYRIJIJoNJpyKrHX68Vf//pXrKysYGFhAQBgs9nQ09MDQRC2dD3ldOP0LZPNBjfblT7yXttKnb4FpW2lJiLaDUo+OJEkCX6/H8B6APL++++ntB1fuXIFbW1txVrerpIeoCgBxvfffw+v15t1+0TZXhEEAdXV1SnzSVpbW9XhZAsLC9izZ4/63PS6DG1Ak6sjZ7vBVD5sdrYLEdFuY/gJscoQtkAgAEmScOrUKYiiqG7d+P1++P1+XL9+HcB6sBIMBgEAz58/R1VVFdrb27d8fU6IfXl37txRu6QWFhZgtVpRX1+f88Teuro69eRgi8UCQRAwPz+fMS01/dTj1tZWjI+Pq6+bPg12o9qSiYkJ9PX1oaKiQv3aTgQmRES7Wa7PVsMHJ8XG4OTlpNdrLC8vIxKJZEw7zTW+vbq6Gs+ePUM8Hsfq6ioaGhpSApz0Then06nOBtEGF0ptiV7AobzGt99+i0QioR7cZ7RR90REr5qSH19PpSM94Ojq6oIgCGq3TTQa1d0+0XakCIKAnp4eOBwO1NfXAwAsFgvm5+dTtoaamprg9XrVce/JZBJdXV0ZdSS5akv0touMNuqeiGi3YXBCeZEemFy4cAFHjhzBhQsXMgKU9NqQubm5lEDliy++ALBe9NrY2AiLxYKamhrMzc2lXE9pMz5w4ADGxsbU62mDEQBZa0u0WRdBEHSDGyIi2nkMTigvtK2x2u0TpfBUKXb97rvv1Oco58YonSvaDIo289LQ0ACr1ZrSOaNcTxAEjI2NZVxPOw1Wr1A3PTDRBlMMUIiIisvS19fXV+xFGNnly5cBAKdOnSrySozN5XLBZrPhvffeyygkra6uRl1dHf7+97+nTNydmppCc3MzqqurYbfb8dFHH6UEOG+88Qaam5tx//59JJNJ3L17V318rus1NzfD6XSqHS/V1dXYv38/QqEQgPUzk/bu3Qun05kSTCnPvXv3LmRZhtPpzBjsR0RE25Prs5WZE8qbbK2xyhZMRUWFmhFJz07kyrx8//33iEajKefiKNfTG42f3oo7MzOD/v5+tUW5uroaVqtVrWPRvoYRR90TEe0mu/5UYiosvVqUpqYmNDY2ZpwUDEC35XdychJmsxlra2sZQ9E2M81VOYdHGXff09Oj1rX4fD71v9rXSB91T0REO4eZEyqoXBkRbW1ItsyLMqCtoqLipae5Ko/RjrvXDm+LRqM4ffp0ygGCRERUXJxzkgPnnGxfPg7YSw9E0gexZRuapp1zkl5w29raivPnz2NlZUXt+GG2hIio8DiEbZsYnBhH+hYOsLlprtrgSG9IXDKZZGBCRLSDOISNSt7Vq1cxMzODpqYmeDweLCwspJy9oy2S1SuOTT9Uz+PxqPfZbDb09vYyMCEiMhAWxJKhKdsy165dg9frRX9/P549e6aevXP+/Hk4nU4A67UpmymOHRkZSfnayMgIGhsbGaAQERkEMydkaMr4eaVwNR6Po7y8HJWVlXjy5AmWlpYQiUSQSCQ2XRyrHfLGgWtERMbD4IQMLf0Mnfn5eXg8Hrx48QJWqxWrq6vYt28fzp07p3bc6NWgbDRenwEKEZGxMDghw5ubm4PT6VRbgYPBIJxOJyoqKtDQ0IDnz5+rh/9lK459mZZmIiIqLtackOEptSPxeBzj4+MA1gtZ29vb8be//Q3l5eX47rvvNixsVV5Dr6VZCVA209JMRESFx1biHNhKbAzKlFeTyQSbzYbl5WX14D7l9traGv74xz+ysJWIyODYSkwlTzt+PhKJwO12qzUo2tuSJOHkyZMFqxtRWpqV/6avUXs/ERFtHbd1yNDSx8/X1NRgZGQENTU1mJ+fz7htMpnUs3rymUFRWpp9Ph9MJhMEQVCvoawxGo0imUzCbrcD0G9lJiKi3Jg5IUNTClkFQcDw8DCsVmtK1878/DxWVlZgtVoxPDwMQRAKUtiqtDSbTCZEIhFEo1F0d3djYmJCDUwikQjMZjPP6CEi2ibWnOTAmpPiSx8/f+LECZjNZrXWRDt+frNn9WyFNkMSiURQXV2NhYUFNWvjdDpTMipERKSPNSdU8tLHz/f29sJmswFY79o5cuSI+timpqaUwCS9BkSvXiTbY9MpXT1ra2uoqanBs2fPsLKygmg0qgYmXq+X7chERNvEmhMqKenj5xcWFvDnP/8ZX331FdxuN9xutxrIaAevRaNRPH78GFNTU7h27VpGdiP9QMBsmZfJyUmsrKzg2bNnqKqqwn/+8x/U1tbCZrOhtbVVPfVY7zXycTozEdFuwMwJlQy98fN1dXUAgKmpKXzyySfo7OzEzMxMymPLysoQDAYxOTmJpaWljGmw2scuLS2pr6l3/enpaSwsLCAej+Pf//43kskknj17hlgshvPnz6tTatNrTpSCWr0ptMr1x8bG2OlDRAQGJ1Qiso2fHxoawqFDh2CxWLC8vIyvv/4aHo8HnZ2damACrA9PKm8GAAAMY0lEQVRwEwQBfX19KePq79y5kxKYmEwm+Hw+3QCis7MT4+PjKC8vx+rqKiwWC1ZXV7F3796Uc368Xm9GdkQpqN0oMGIhLRHRupIoiB0dHQUAPHz4EKIooqurK+fjHQ4HAECWZbS3t2/52iyINQYl86B3do4SOHz99ddIJBIwm82wWCw4ePAgKioqEI/HU56XvoUDAA6HA16vV92WSX98Z2cnpqenkUwmYbFYUFtbq7YyR6NRxONxrK6uoqGhAfX19Zs638fj8WBkZER3rD4R0ass12er4YOTgYGBlGDkzJkzAIBLly7pPl4JTNra2gAAwWAQDx8+zBnQZMPgxDhy1WyMj49jYmICT58+RSKRwA9/+EM4HA7dD/47d+5gYGBAvd3V1YUjR45kDSBmZ2exsLCg1pcIgoDW1laMj49jeXkZT58+RVVVFex2O+x2O06cOKFbP5ItMGJgQkS7SUkHJ7Iso6OjAxcvXlQzIaFQCL/+9a/x4MED9WtaP/vZz3D79u2UzMmbb76JBw8e6F5DeYOyicVi2LdvH4MTg9N+6MdiMUQiEVgsFtTX16OnpyeloydXgJDt/sOHD8PtdmNychJ1dXUpxa9KS/Pvfvc7zM3NbVjYmi0wIiLaLUq+lXhqagqSJKm3RVEEACwuLmY8VpIk9TdehbLPHw6HC79YKgplvH00GkVZWRnsdjssFgsSiQSePn2Kjz76CD6fT31selFtei1IU1MTPB5PyjU8Ho9aS9Lc3Jyy/dPV1QVBEGC32+Hz+TasG0nvNgKAkZGRgo3cJyIqRYZuJXY4HBkZj1AoBIfDoQYpWpIk6WZTAP1gBsi9XZMrs0LFpT13x2q1oqGhAVarFYcOHcLS0hIeP36Mf/7zn/jkk08wPz+Phw8fZtR4NDY2qgFLd3c3vF6vbgDR2NgIABmFuXqv8bI1J4UYuU9EVKoMnzlJNzo6iv7+ft37tGl4LeU3Y3r1TE5OwmQywWq1IpFIYHZ2FmVlZRgaGsJvf/tbWCwWrK2tIZFIIBAIqK2+2kBAGa7mcDgQjUZx9uzZrJmVYDCoW8CqfQ298fnZuo20z9FrMyYi2o12NHMSDAZx48aNnI/r6urSzYz09vaivb0dbrdb93nZgpD0rR56dSi1HdPT0xgfH1e//s0332BkZASvvfYalpeXsX//fsTjcbz++us4ffp0RoaiqakJXq8XZ8+ehd1uz5oVmZiYwDvvvJMy7E37GhcuXNAdpqacEZQtqFFef3JyktkTItr1djQ4USZ4boXf74fL5VK7cPRUVlZu6T4qbUogUFNTg2AwiHg8rhacKmfdAMg5gXVubi4jMAEyAwhBELIGEE1NTbr3KdfV6zbaKKghItqNDN2towiFQpBlWQ1sJElCZWVlXrp1cmErcWnZbicMR8wTERVeyXfrhMNhhMNhuFwuSJIESZJw5coVNfiQJAl+v199/LvvvotAIKDeDgQCePfdd3d83bTz8tEJc+zYMUxOTuo+R+nU6erq2vLhgURElJuhMydK1iO9jkQURdy6dQvA+naP3+/H9evX1ftHR0fVmpXtDGADmDkpFfmavpprEq3SGXTgwAGMjY1lPTww2xA2IiIq8SFsRsDgxPj0OmHSh6ltNkDJ9VrRaBSRSAROp1OtZ9nqtYiIdquS39YhyiVXJ0y29l496c9JPxxQEAQMDw9DEATd+xmYEBFtHzMnOTBzUhryXci61RH3DEyIiHJj5oR2hWPHjm3Y3vuy9R/ZRthrszIb3U9ERFvH4IRIR67OH56RQ0RUOAxOiNLkOhxwYmIi5+GBRES0dQxOiDRynYETjUZx+vTplDN6eEYOEVF+MTgh0sjV+bO2toaVlRUkk8ltdwYREZE+duvkwG6d3SdX58/w8LDu4YHK/RxxT0S0MQ5h2yYGJ0RERPnFVmIiIiIqKQxOiIiIyFAYnBAREZGhMDghIiIiQ2FwQkRERIbC4ISIiIgMxVrsBRjdixcvsLa2prY9ERER0fbEYjGYTKas9zNzkoPZbN7wDdysWCyGWCyWhxW9mvj+bIzvT258jzbG92djfH9yy+d7ZDKZYDZnD0E4hG2HcJjbxvj+bIzvT258jzbG92djfH9y28n3iJkTIiIiMhQGJ0RERGQoDE6IiIjIUBicEBERkaEwOCEiIiJDYXBCREREhsLghIiIiAyFc06IiIjIUJg5ISIiIkNhcEJERESGwuCEiIiIDIWnEu+A0dFROBwOAIAsy2hvby/yioxDlmUEAgHcu3cPly5dKvZyDGl0dBQA8PDhQ4iiiK6uriKvyFiUf0MA8OTJE8RiMXz44Yfq9xylOnPmDL/XNILBIG7cuIGjR4/C4XAgGAyipaUFbre72EszFFmWMTIygoaGBgBAZWVlQd8jZk4KTAlM2tra0NbWBlEUMTAwUOxlGUI4HEYoFIIsyzwNNIuBgQG0t7ejvb0dly5dgiRJOHPmTLGXZSiDg4NoaWlBW1sburq68Pz5c/T09BR7WYbk9/tx//79Yi/DcO7fv4+Ojg713xIDk1SyLONXv/oVPB6P+jk2ODhY0GsyOCmwy5cv4+2331Zvt7S04C9/+UsRV2QcLpcLbrebv+FmIcsyHj16BFmW1a8dP34cN2/eTPnabidJEoLBoHpbFEU8evSoiCsyJlmW+e8mi9u3b2N6ehrXr19nYKJjcHAQbW1t6s/qlpYWXLx4saDXZHBSQJIkQZbllA9fh8MBWZYRDoeLuDIqFVNTU5AkSb0tiiIAYHFxsVhLMpw//elPKVuljx49QktLSxFXZEyBQIAfvLQlfr8fLS0tkCRJ/exyuVwFvSZrTgpIkqSsWQF+uFAuDocDDx48SPlaKBSCw+FQgxRKFQwGsW/fPpw7d67YSzGUUCiEt99+mz93sggEAqisrMTi4iKePHnCui4N5ZejcDgMURThcDhw5swZeDyeggYozJwUULYUqpI9IXpZo6Oj6O/vL/YyDEeWZfj9fkiShJ///OfFXo6hKNs53D7VJ4qiWmfS1taGqqoq9Pb2FntZhqEEJw6HAy6XC6IowuPxoKOjo6DXZXBSQNmCEP6goK3o7e1Fe3s7U/M6lKLz9vZ2yLKMt956q9hLMgxu52xM+cBVuN1u+P3+Iq7ImF5//XX1/0VRTNniKQQGJwVUWVm5pfuI0vn9frhcLrS1tRV7KYYiy3JG95uyNx4KhYq0KuMIh8Osv8lBW0wN/P9ns7bWazfT20JWfrku5DYha04KyOVyqdkT7ZwTJT1GtBmhUChlpoAkSaisrGT2DesFw3/4wx9w/PjxjGJh/gKw/l5ogzSlSH90dBQul2vXBy6SJKGjowMPHjzI+MBlXdc6URQhiiIWFxdTPseU+wrF0tfX11ewVycsLi4iGo2qKbHPP/8cBw4c4L64Rjgcxr/+9S/88pe/LPZSDCccDuMf//gHWlpa1NqBK1eu4MiRI8VemiGIooilpaWUdv3R0VFUVlZy2CHW35/m5mb1T11dHQKBAD777DN++GI9gF1aWkr5frp8+TJ+/OMf4xe/+EURV2YsNpsN9+7dUz+3Pv/8c5SXl+P48eMFuyZPJd4Bo6Oj6g+Chw8fshL8f5QhbIFAAJIk4dSpUxBFkfvj/yPLMt58882MuiVRFHHr1q0ircp4tHNOnj9/jlgsxm4dHcok1Js3b+L999/H0aNHmcFF5r+fqqoqBrY6/H6/+rPo+fPnBf8cY3BCREREhsKCWCIiIjIUBidERERkKAxOiIiIyFAYnBAREZGhMDghIiIiQ2FwQkRERIbC4ISIiIgMhcEJERERGQqDEyIiIjIUBidERERkKAxOiIiIyFCsxV4AEdF2hUIhyLKMUCiEDz/8EFNTU+ptHgJIVHqYOSGikhYOhwEAbrcbbrcbHR0dkGUZLpdLPfGaiEoLgxMiKmmhUAgtLS3q7ampKbjdboiiiP7+foiiWMTVEdFWmNbW1taKvQgionwYGBhALBbjVg5RiWPmhIheGTdv3oTb7S72MohomxicEFFJC4VCANZrTyRJUrd4ZFmG3+8v5tKIaIsYnBBRyfL7/ejt7QWwXmvicDjU+0ZGRtDW1laspRHRNrDmhIhKliRJuHLlCn7605/C5XKp2RNRFOFyuVgMS1SiGJwQERGRoXBbh4iIiAyFwQkREREZCoMTIiIiMhQGJ0RERGQoDE6IiIjIUBicEBERkaEwOCEiIiJDYXBCREREhsLghIiIiAzlvw2ulG9TYCywAAAAAElFTkSuQmCC\n", | |
"text/plain": [ | |
"<Figure size 576x355.988 with 1 Axes>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"fig, ax = plt.subplots()\n", | |
"\n", | |
"ax.scatter(X, Y, marker='x', color='k', alpha=0.8, label=\"observations\")\n", | |
"ax.legend(loc=\"upper left\", ncol=4)\n", | |
"\n", | |
"ax.set_xlabel(r'$x$')\n", | |
"ax.set_ylabel(r'$y$')\n", | |
"\n", | |
"plt.tight_layout()\n", | |
"plt.show()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 12, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"2021-10-11 20:22:27.173113: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libcuda.so.1'; dlerror: libcuda.so.1: cannot open shared object file: No such file or directory\n", | |
"2021-10-11 20:22:27.173137: W tensorflow/stream_executor/cuda/cuda_driver.cc:326] failed call to cuInit: UNKNOWN ERROR (303)\n", | |
"2021-10-11 20:22:27.173155: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:156] kernel driver does not appear to be running on this host (louist-lptp): /proc/driver/nvidia/version does not exist\n", | |
"2021-10-11 20:22:27.173503: I tensorflow/core/platform/cpu_feature_guard.cc:142] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations: AVX2 FMA\n", | |
"To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.\n" | |
] | |
}, | |
{ | |
"data": { | |
"text/html": [ | |
"<gpflow.kernels.stationaries.SquaredExponential object at 0x7faa26261580>\n", | |
"<table>\n", | |
"<thead>\n", | |
"<tr><th>name </th><th>class </th><th>transform </th><th>prior </th><th>trainable </th><th>shape </th><th>dtype </th><th style=\"text-align: right;\"> value</th></tr>\n", | |
"</thead>\n", | |
"<tbody>\n", | |
"<tr><td>SquaredExponential.variance </td><td>Parameter</td><td>Softplus </td><td> </td><td>True </td><td>() </td><td>float64</td><td style=\"text-align: right;\"> 0.25</td></tr>\n", | |
"<tr><td>SquaredExponential.lengthscales</td><td>Parameter</td><td>Softplus </td><td> </td><td>True </td><td>() </td><td>float64</td><td style=\"text-align: right;\"> 0.5 </td></tr>\n", | |
"</tbody>\n", | |
"</table>" | |
], | |
"text/plain": [ | |
"<gpflow.kernels.stationaries.SquaredExponential object at 0x7faa26261580>\n", | |
"╒═════════════════════════════════╤═══════════╤═════════════╤═════════╤═════════════╤═════════╤═════════╤═════════╕\n", | |
"│ name │ class │ transform │ prior │ trainable │ shape │ dtype │ value │\n", | |
"╞═════════════════════════════════╪═══════════╪═════════════╪═════════╪═════════════╪═════════╪═════════╪═════════╡\n", | |
"│ SquaredExponential.variance │ Parameter │ Softplus │ │ True │ () │ float64 │ 0.25 │\n", | |
"├─────────────────────────────────┼───────────┼─────────────┼─────────┼─────────────┼─────────┼─────────┼─────────┤\n", | |
"│ SquaredExponential.lengthscales │ Parameter │ Softplus │ │ True │ () │ float64 │ 0.5 │\n", | |
"╘═════════════════════════════════╧═══════════╧═════════════╧═════════╧═════════════╧═════════╧═════════╧═════════╛" | |
] | |
}, | |
"execution_count": 12, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"kernel = kernel_cls(variance=amplitude, lengthscales=length_scale)\n", | |
"kernel" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 13, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"2021-10-11 20:22:27.205467: W tensorflow/python/util/util.cc:348] Sets are not currently considered sequences, but this may change in the future, so consider avoiding using them.\n" | |
] | |
} | |
], | |
"source": [ | |
"inducing_variable = gpflow.inducing_variables.InducingPoints(Z)\n", | |
"gpflow.utilities.set_trainable(inducing_variable, False)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 14, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"# eigenfunctions = RandomFourierFeaturesCosine(kernel, n_components, dtype=default_float())\n", | |
"# eigenvalues = np.ones((n_components, 1), dtype=default_float())" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 15, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"eigenfunctions = QuadratureFourierFeatures(kernel, n_components, dtype=default_float())\n", | |
"eigenvalues = np.ones((2 * n_components**n_features, 1), dtype=default_float())\n", | |
"# eigenvalues = np.ones((1, 1), dtype=default_float())" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 16, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<gpflux.sampling.kernel_with_feature_decomposition.KernelWithFeatureDecomposition object at 0x7faaa9c83b20>\n", | |
"<table>\n", | |
"<thead>\n", | |
"<tr><th>name </th><th>class </th><th>transform </th><th>prior </th><th>trainable </th><th>shape </th><th>dtype </th><th style=\"text-align: right;\"> value</th></tr>\n", | |
"</thead>\n", | |
"<tbody>\n", | |
"<tr><td>KernelWithFeatureDecomposition._kernel.variance\n", | |
"KernelWithFeatureDecomposition._feature_functions._self_tracked_trackables[0].variance\n", | |
"KernelWithFeatureDecomposition._feature_functions.kernel.variance </td><td>Parameter</td><td>Softplus </td><td> </td><td>True </td><td>() </td><td>float64</td><td style=\"text-align: right;\"> 0.25</td></tr>\n", | |
"<tr><td>KernelWithFeatureDecomposition._kernel.lengthscales\n", | |
"KernelWithFeatureDecomposition._feature_functions._self_tracked_trackables[0].lengthscales\n", | |
"KernelWithFeatureDecomposition._feature_functions.kernel.lengthscales </td><td>Parameter</td><td>Softplus </td><td> </td><td>True </td><td>() </td><td>float64</td><td style=\"text-align: right;\"> 0.5 </td></tr>\n", | |
"</tbody>\n", | |
"</table>" | |
], | |
"text/plain": [ | |
"<gpflux.sampling.kernel_with_feature_decomposition.KernelWithFeatureDecomposition object at 0x7faaa9c83b20>\n", | |
"╒════════════════════════════════════════════════════════════════════════════════════════════╤═══════════╤═════════════╤═════════╤═════════════╤═════════╤═════════╤═════════╕\n", | |
"│ name │ class │ transform │ prior │ trainable │ shape │ dtype │ value │\n", | |
"╞════════════════════════════════════════════════════════════════════════════════════════════╪═══════════╪═════════════╪═════════╪═════════════╪═════════╪═════════╪═════════╡\n", | |
"│ KernelWithFeatureDecomposition._kernel.variance │ Parameter │ Softplus │ │ True │ () │ float64 │ 0.25 │\n", | |
"│ KernelWithFeatureDecomposition._feature_functions._self_tracked_trackables[0].variance │ │ │ │ │ │ │ │\n", | |
"│ KernelWithFeatureDecomposition._feature_functions.kernel.variance │ │ │ │ │ │ │ │\n", | |
"├────────────────────────────────────────────────────────────────────────────────────────────┼───────────┼─────────────┼─────────┼─────────────┼─────────┼─────────┼─────────┤\n", | |
"│ KernelWithFeatureDecomposition._kernel.lengthscales │ Parameter │ Softplus │ │ True │ () │ float64 │ 0.5 │\n", | |
"│ KernelWithFeatureDecomposition._feature_functions._self_tracked_trackables[0].lengthscales │ │ │ │ │ │ │ │\n", | |
"│ KernelWithFeatureDecomposition._feature_functions.kernel.lengthscales │ │ │ │ │ │ │ │\n", | |
"╘════════════════════════════════════════════════════════════════════════════════════════════╧═══════════╧═════════════╧═════════╧═════════════╧═════════╧═════════╧═════════╛" | |
] | |
}, | |
"execution_count": 16, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"kernel_with_features = KernelWithFeatureDecomposition(kernel, eigenfunctions, eigenvalues)\n", | |
"kernel_with_features" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 17, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"/home/louis.tiao/Repositories/GPflux/gpflux/layers/gp_layer.py:198: UserWarning: Could not verify the compatibility of the `kernel`, `inducing_variable` and `mean_function`. We advise using `gpflux.helpers.construct_*` to create compatible kernels and inducing variables. As `num_latent_gps=1` has been specified explicitly, this will be used to create the `q_mu` and `q_sqrt` parameters.\n", | |
" warnings.warn(\n", | |
"/tmp/ipykernel_28580/3626306941.py:9: DeprecationWarning: Call to deprecated class TrackableLayer. (GPflux's `TrackableLayer` was prior to TF2.5 used to collect GPflow variables in subclassed layers. As of TF 2.5, `tf.Module` supports this natively and there is no need for `TrackableLayer` anymore. It will be removed in GPflux version `1.0.0`.)\n", | |
" likelihood_layer = gpflux.layers.LikelihoodLayer(gpflow.likelihoods.Gaussian()) # noqa: E231\n" | |
] | |
} | |
], | |
"source": [ | |
"layer = gpflux.layers.GPLayer(\n", | |
" kernel_with_features,\n", | |
" inducing_variable,\n", | |
" n_train,\n", | |
" whiten=True,\n", | |
" num_latent_gps=1,\n", | |
" mean_function=gpflow.mean_functions.Zero(),\n", | |
")\n", | |
"likelihood_layer = gpflux.layers.LikelihoodLayer(gpflow.likelihoods.Gaussian()) # noqa: E231\n", | |
"dgp = gpflux.models.DeepGP([layer], likelihood_layer)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 18, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"WARNING:tensorflow:From /home/louis.tiao/.virtualenvs/scratch/lib/python3.8/site-packages/tensorflow_probability/python/distributions/distribution.py:346: calling MultivariateNormalDiag.__init__ (from tensorflow_probability.python.distributions.mvn_diag) with scale_identity_multiplier is deprecated and will be removed after 2020-01-01.\n", | |
"Instructions for updating:\n", | |
"`scale_identity_multiplier` is deprecated; please combine it into `scale_diag` directly instead.\n" | |
] | |
} | |
], | |
"source": [ | |
"model = dgp.as_training_model()\n", | |
"model.compile(tf.optimizers.Adam(learning_rate=0.1))" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 19, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"callbacks = [\n", | |
" tf.keras.callbacks.ReduceLROnPlateau(\n", | |
" monitor=\"loss\",\n", | |
" patience=5,\n", | |
" factor=0.95,\n", | |
" verbose=0,\n", | |
" min_lr=1e-6,\n", | |
" )\n", | |
"]" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 20, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"2021-10-11 20:22:27.922517: I tensorflow/compiler/mlir/mlir_graph_optimization_pass.cc:176] None of the MLIR Optimization Passes are enabled (registered 2)\n", | |
"2021-10-11 20:22:27.940179: I tensorflow/core/platform/profile_utils/cpu_utils.cc:114] CPU Frequency: 1999965000 Hz\n" | |
] | |
} | |
], | |
"source": [ | |
"history = model.fit(\n", | |
" {\"inputs\": X, \"targets\": Y},\n", | |
" batch_size=n_train,\n", | |
" epochs=100,\n", | |
" callbacks=callbacks,\n", | |
" verbose=0,\n", | |
")" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 21, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"(512, 1)" | |
] | |
}, | |
"execution_count": 21, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"x_margin = 3\n", | |
"X_grid = np.linspace(X.min() - x_margin, X.max() + x_margin, n_index_points).reshape(-1, n_features)\n", | |
"X_grid.shape" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 22, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"f_mean, f_var = dgp.predict_f(X_grid)\n", | |
"f_scale = np.sqrt(f_var)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 23, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"image/png": "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\n", | |
"text/plain": [ | |
"<Figure size 576x355.988 with 1 Axes>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"# Plot GP mean and uncertainty intervals and data\n", | |
"fig, ax = plt.subplots()\n", | |
"\n", | |
"for _ in range(n_samples):\n", | |
" # `sample_dgp` returns a callable - which we subsequently evaluate\n", | |
" f_sample: Callable[[tf.Tensor], tf.Tensor] = sample_dgp(dgp)\n", | |
" ax.plot(X_grid, f_sample(X_grid).numpy())\n", | |
"\n", | |
"ax.plot(X_grid, f_mean, \"C0\")\n", | |
"ax.plot(X_grid, f_mean + f_scale, \"C0--\")\n", | |
"ax.plot(X_grid, f_mean - f_scale, \"C0--\")\n", | |
"ax.scatter(X, Y, marker='x', color='k', alpha=0.2, label=\"observations\")\n", | |
"\n", | |
"ax.set_xlim(X.min() - x_margin, X.max() + x_margin)\n", | |
"ax.set_ylim(Y.min() - x_margin, Y.max() + x_margin)\n", | |
"\n", | |
"ax.set_xlabel(r'$x$')\n", | |
"ax.set_ylabel(r'$y$')\n", | |
"\n", | |
"plt.show()" | |
] | |
} | |
], | |
"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.8.10" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 4 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment