diff --git a/skratchpad.ipynb b/skratchpad.ipynb new file mode 100644 index 0000000..de3b367 --- /dev/null +++ b/skratchpad.ipynb @@ -0,0 +1,1529 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is my personal file for checking things i don't understand about python, numpy, etc.\n", + "It probably won't ever get uploaded to github. But now you know, just in case." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "3.7.9 (default, Aug 31 2020, 17:10:11) [MSC v.1916 64 bit (AMD64)]\n", + "C:\\Users\\cas\\Anaconda3\\python.exe\n", + "vasc\n", + "C:\\Users\\cas\\Anaconda3\\envs\\vasc\n" + ] + } + ], + "source": [ + "#having some problems with launching the right envirionment from powershell\n", + "#these are supposed to tell me what environment i'm in. (tbh i don't believe it as i had problem loading a module that wasn't in base.)\n", + "import sys\n", + "print(sys.version)\n", + "print(sys.executable)\n", + "\n", + "import os\n", + "print (os.environ['CONDA_DEFAULT_ENV'])\n", + "print (os.environ['CONDA_PREFIX'])" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import numpy as np\n", + "import pandas as pd\n", + "\n", + "import matplotlib.pyplot as plt\n", + "%matplotlib inline" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[ inf 103. 1.1 inf]\n", + " [ inf 1.23 123. inf]\n", + " [ inf inf 2.35 133. ]\n", + " [ inf inf inf 3.4 ]]\n" + ] + } + ], + "source": [ + "\n", + "deltas = np.array(np.full((4,4),np.inf))\n", + "\n", + "deltas[0,1] = 103\n", + "deltas[0,2] = 1.1\n", + "deltas[1,1] = 1.23\n", + "deltas[1,2] = 123\n", + "deltas[2,2] = 2.35\n", + "deltas[2,3] = 133\n", + "deltas[3,3] = 3.4\n", + "\n", + "print (deltas)" + ] + }, + { + "cell_type": "code", + "execution_count": 81, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[0.39519664 0.25284956 0.06168913 0.0658433 0.00858284 0.59352946\n", + " 0.0498056 0.06397185 0.52489275 0.26225848]\n", + " [0.09576895 0.6865411 0.36111874 0.4842123 0.84361541 0.95245225\n", + " 0.96161651 0.29068045 0.47413521 0.09340176]\n", + " [0.99292075 0.40868471 0.25322526 0.2514248 0.02671625 0.11536716\n", + " 0.9506318 0.11626209 0.93572856 0.70886642]\n", + " [0.04592559 0.10333718 0.42447382 0.71571813 0.29047545 0.71166766\n", + " 0.48255387 0.54451942 0.82020926 0.58295865]\n", + " [0.88091461 0.46808999 0.41334031 0.46628119 0.52131124 0.4407249\n", + " 0.95417921 0.32623227 0.85241685 0.06846958]\n", + " [0.75029292 0.43416928 0.92319537 0.72049046 0.72499315 0.59705542\n", + " 0.13005855 0.72398034 0.78993112 0.69340349]\n", + " [0.06883723 0.56361645 0.06069933 0.49820192 0.86339091 0.28691618\n", + " 0.98310643 0.84208759 0.34558355 0.89102757]\n", + " [0.41681609 0.82051346 0.45000459 0.63825287 0.59810559 0.67869431\n", + " 0.80771814 0.08829602 0.64370539 0.44441653]\n", + " [0.11167034 0.62767684 0.98856899 0.08781331 0.05909569 0.1740256\n", + " 0.04795408 0.11185556 0.17558879 0.55594747]\n", + " [0.62904243 0.54736161 0.43237676 0.99898664 0.8282647 0.8813819\n", + " 0.27075231 0.06056067 0.63659858 0.12437212]]\n" + ] + }, + { + "ename": "NameError", + "evalue": "name 'minimumswaps' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[0mbigrandom\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mrandom\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mrand\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m10\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m10\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2\u001b[0m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mbigrandom\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 3\u001b[1;33m \u001b[0mminimumswaps\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mbigrandom\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[1;31mNameError\u001b[0m: name 'minimumswaps' is not defined" + ] + } + ], + "source": [ + "bigrandom = np.random.rand(10,10)\n", + "print(bigrandom)\n", + "minimumswaps(bigrandom)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0 0\n", + "0 1\n", + "1 1\n" + ] + } + ], + "source": [ + "people = [0, 1]\n", + "\n", + "for p1 in range(len(people)): #first person from frame f\n", + " r1 = people[p1] #what person is this?\n", + " whosleft = range(p1,len(people))\n", + " for p2 in whosleft: #next person from frame f + 1\n", + " r2 = people[p2] #what person is this?\n", + " print(p1, p2)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Automatic pdb calling has been turned ON\n" + ] + } + ], + "source": [ + "#turn on debugging\n", + "%pdb on" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Sanity checking what happens when you have a correlation in a moving window... " + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "df = pd.DataFrame(np.arange(0,1000))\n", + "\n", + "df[\"Cs\"] = np.cos(df)\n", + "df[\"C2\"] = df[\"Cs\"] + .1\n", + "df.loc[500:,\"C2\"] = 0" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'df' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mroll\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mdf\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m\"Cs\"\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mrolling\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mwindow\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m100\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mcenter\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mTrue\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcorr\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mdf\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m\"C2\"\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 2\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 3\u001b[0m \u001b[0mf\u001b[0m\u001b[1;33m,\u001b[0m\u001b[0max\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mplt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msubplots\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m2\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m,\u001b[0m\u001b[0mfigsize\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m14\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m6\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m,\u001b[0m\u001b[0msharex\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mTrue\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 4\u001b[0m \u001b[0mdf\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mloc\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"Cs\"\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;34m\"C2\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mplot\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0max\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0max\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 5\u001b[0m \u001b[0mroll\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mplot\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0max\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0max\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;31mNameError\u001b[0m: name 'df' is not defined" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "> \u001b[1;32m\u001b[0m(1)\u001b[0;36m\u001b[1;34m()\u001b[0m\n", + "\u001b[1;32m----> 1 \u001b[1;33m\u001b[0mroll\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mdf\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m\"Cs\"\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mrolling\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mwindow\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m100\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mcenter\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mTrue\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcorr\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mdf\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m\"C2\"\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[0m\u001b[1;32m 2 \u001b[1;33m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[0m\u001b[1;32m 3 \u001b[1;33m\u001b[0mf\u001b[0m\u001b[1;33m,\u001b[0m\u001b[0max\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mplt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msubplots\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m2\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m,\u001b[0m\u001b[0mfigsize\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m14\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m6\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m,\u001b[0m\u001b[0msharex\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mTrue\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[0m\u001b[1;32m 4 \u001b[1;33m\u001b[0mdf\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mloc\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"Cs\"\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;34m\"C2\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mplot\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0max\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0max\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[0m\u001b[1;32m 5 \u001b[1;33m\u001b[0mroll\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mplot\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0max\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0max\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[0m\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "ipdb> q\n" + ] + } + ], + "source": [ + "roll = df[\"Cs\"].rolling(window=100, center=True).corr(df[\"C2\"])\n", + "\n", + "f,ax=plt.subplots(2,1,figsize=(14,6),sharex=True)\n", + "df.loc[:,(\"Cs\",\"C2\")].plot(ax=ax[0])\n", + "roll.plot(ax=ax[1])" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'np' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0ma\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0marray\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m0.1\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m1.1\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m2.1\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m3.1\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m4.1\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m5.1\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m6.1\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m7.1\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[1;31mNameError\u001b[0m: name 'np' is not defined" + ] + } + ], + "source": [ + "a = np.array([0.1,1.1,2.1,3.1,4.1,5.1,6.1,7.1])" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "xs = [0+3*i for i in range(3)]\n", + "ys = [1+3*i for i in range(3)]\n", + "ps = [2+3*i for i in range(3)]" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'a' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0ma\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mxs\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 2\u001b[0m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0ma\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mys\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;31mNameError\u001b[0m: name 'a' is not defined" + ] + } + ], + "source": [ + "print(a[xs])\n", + "print(a[ys])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!dir" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "a = 6\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import threading,time\n", + "a=5\n", + "threading.Thread(target=lambda:[print(a),time.sleep(20),print(a)]).start()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "wd = os.getcwd() + \"\\\\\"\n", + "# locations of videos and output\n", + "videos_in = wd + \"..\\\\videos_in\\\\\" \n", + "videos_out_openpose = wd + \"..\\\\videos_out_openpose\\\\\"\n", + "\n", + "# location of openposedemo - THIS WILL BE DIFFERENT ON YOUR COMPUTER\n", + "openposepath = \"C:\\\\Users\\\\cas\\\\openpose-1.5.0-binaries-win64-gpu-python-flir-3d_recommended\\\\bin\\\\\"\n", + "\n", + "if sys.platform == \"win32\":\n", + " app = \"OpenPoseDemo.exe\"\n", + "else:\n", + " app = 'OpenPoseDemo.bin'\n", + "\n", + "openposeapp = openposepath + app\n", + "\n", + "print(openposeapp)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "optstring = \"\"\n", + "for key in params:\n", + " optstring += \" --\" + key + \" \" + params[key]\n", + "\n", + "print(optstring)\n", + "\n", + "for vid in allvideos:\n", + " try:\n", + " print(\"Staring openpose processing of \" + vid)\n", + " # Log the time\n", + " time_start = time.time()\n", + " video = \" --video \" + vid\n", + " opbin = openposeapp + video + optstring\n", + " print(opbin)\n", + " exitcode = os.system(opbin)\n", + " # Log the time again\n", + " time_end = time.time()\n", + " if (exitcode == 0):\n", + " # Print stats\n", + " print (\"Done \" + vid)\n", + " print (\"It took %d seconds for conversion.\" % (time_end-time_start))\n", + " else:\n", + " print(\"OpenPose error. Exit code %d\" % exitcode)\n", + " except Exception as e:\n", + " print(\"Error: \", e)\n", + " pass" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Useful Jupyter extensions\n", + "\n", + "`jupyter labextension install @jupyterlab/toc`\n", + "\n", + "`jupyter labextension install @lckr/jupyterlab_variableinspector`\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "ename": "TypeError", + "evalue": "can only concatenate str (not \"int\") to str", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[0;32m 2\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0mvar\u001b[0m \u001b[1;33m+\u001b[0m \u001b[1;36m0\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 3\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 4\u001b[1;33m \u001b[0mbad_function\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"Mike\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[1;32m\u001b[0m in \u001b[0;36mbad_function\u001b[1;34m(var)\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0mbad_function\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mvar\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 2\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mvar\u001b[0m \u001b[1;33m+\u001b[0m \u001b[1;36m0\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 3\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 4\u001b[0m \u001b[0mbad_function\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"Mike\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;31mTypeError\u001b[0m: can only concatenate str (not \"int\") to str" + ] + } + ], + "source": [ + "def bad_function(var):\n", + " return var + 0\n", + " \n", + "bad_function(\"Mike\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "proc = ['lookit.01', 'lookit.02', 'lookit.03', 'lookit.04', 'lookit.05', 'lookit.06', 'lookit.07', 'lookit.08', 'lookit.09', 'lookit.10']" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "proc['lookit.01']" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'camera1': {'name': 'lookit.01', 'frames': 412, 'start': 0, 'end': 412, 'processed': True}, 'camera2': {'name': 'lookit.02', 'frames': 450, 'start': 0, 'end': 412, 'processed': None}}\n" + ] + } + ], + "source": [ + "videos = {\"camera1\" :{\"name\": \"lookit.01\",\n", + " \"frames\": 412,\n", + " \"start\": 0,\n", + " \"end\": 412,\n", + " \"processed\": True},\n", + " \"camera2\":\n", + " {\"name\": \"lookit.02\",\n", + " \"frames\": 450,\n", + " \"start\": 0,\n", + " \"end\": 412,\n", + " \"processed\": None}\n", + " }\n", + "print(videos)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'camera1': {'name': 'lookit.02', 'frames': 450, 'start': 0, 'end': 412, 'processed': None}, 'camera2': {'name': 'lookit.01', 'frames': 412, 'start': 0, 'end': 412, 'processed': True}}\n" + ] + } + ], + "source": [ + "temp = videos[\"camera1\"]\n", + "videos[\"camera1\"] = videos[\"camera2\"]\n", + "videos[\"camera2\"] = temp\n", + "print(videos)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "cars = [\n", + " {\"model\": \"BMW 230\", \"mpg\": 27.5},\n", + " {\"model\": \"Ford Edge\", \"mpg\": 24.1}\n", + " ]\n", + "print(cars)\n", + "len(cars)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "from datetime import datetime\n", + "my_date = datetime.now()\n", + "print(my_date.isoformat())\n", + "\n", + "strdate = my_date.isoformat()\n", + "\n", + "strdate2 = \"2020-01-20T20:20:20\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "mydate2 = datetime.fromisoformat(strdate2)\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "videos.json = {}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "proc = {}\n", + "proc[\"camera1\"] = {}\n", + "proc[\"camera2\"] = {}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "proc[\"camera1\"][\"name\"] = \"vid1\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "proc[\"camera2\"][\"openpose\"] = \"now\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "base, fmt = os.path.splitext(\"basename.01.avi\")\n", + "\n", + "print(base)\n", + "print(fmt)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "import ipywidgets as widgets\n", + "from IPython.display import display\n", + "\n", + "widgets.IntSlider(\n", + " value=5,\n", + " min=1,\n", + " max=10,\n", + " step=1)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "widgets.IntSlider()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{0: 3000, 1: 1.22, 2: inf, 3: 200, 4: 600}\n", + "swap 0 1\n", + "{1: 3000, 2: inf, 3: 200, 4: 600}\n", + "swap 1 3\n", + "{2: inf, 3: 3000, 4: 600}\n", + "swap 2 4\n", + "{3: 3000, 4: inf}\n", + "3\n" + ] + } + ], + "source": [ + "#how do we swap the data so that the smallest variance is at the bottom. it's a little tricky!\n", + "vs = {}\n", + "vs[0] = 3000\n", + "vs[2] = np.inf\n", + "vs[4] = 600\n", + "vs[3] = 200\n", + "vs[1] = 1.22\n", + "\n", + "#vsperson = dict(sorted(vs.items(), key=lambda item: item[0]))\n", + "#vsorted = dict(sorted(vs.items(), key=lambda item: item[1]))\n", + "#print(vsperson)\n", + "#print(vsorted)\n", + "\n", + "#sort by index\n", + "vs = dict(sorted(vs.items(), key=lambda item: item[0]))\n", + "#print(min(vs.keys()))\n", + "#print(min(vs.values()))\n", + "\n", + "while len(vs) > 1:\n", + " print(vs)\n", + " minkey = min(vs.keys())\n", + " minvarkey = min(vs,key=vs.get)\n", + " if minkey == minvarkey:\n", + " #do nothing\n", + " print(minkey)\n", + " else:\n", + " #swap these sets of data around\n", + " print(\"swap\", minkey, minvarkey)\n", + " vs[minvarkey] = vs[minkey]\n", + " vs.pop(minkey)\n", + "\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "ename": "AttributeError", + "evalue": "'dict' object has no attribute 'sort'", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mAttributeError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mvs\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msort\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[1;31mAttributeError\u001b[0m: 'dict' object has no attribute 'sort'" + ] + } + ], + "source": [ + "vs.sort()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## savez_compressed woes" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(10, 1, 20, 20)\n", + "(10, 1, 20, 20)\n" + ] + } + ], + "source": [ + "keypoints_array = np.random.randn(10,1, 20,20)\n", + "print(keypoints_array.shape)\n", + "\n", + "np.savez_compressed('alldata.npz', keypoints_array=keypoints_array)\n", + "\n", + "reloaded = np.load('alldata.npz')\n", + "keypoints_original = reloaded[\"keypoints_array\"] \n", + "\n", + "print(keypoints_array.shape)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(10, 3, 3, 200, 2000)\n", + "(10, 3, 3, 200, 2000)\n" + ] + } + ], + "source": [ + "keypoints_array = np.random.randn(10,3, 3, 200,2000)\n", + "keypoints_array[:,1:3,:,:,:] = 0\n", + "print(keypoints_array.shape)\n", + "\n", + "np.savez_compressed('alldata.npz', keypoints_array=keypoints_array)\n", + "\n", + "reloaded = np.load('alldata.npz')\n", + "keypoints_original = reloaded[\"keypoints_array\"] \n", + "\n", + "print(keypoints_array.shape)\n", + "\n", + "#print(keypoints_array[1,:,1,:])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Multivariate Gaussian Random Walk\n", + "\n", + "From https://docs.pymc.io/notebooks/MvGaussianRandomWalk_demo.html\n" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "ename": "ModuleNotFoundError", + "evalue": "No module named 'pymc3'", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mModuleNotFoundError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[0;32m 3\u001b[0m \u001b[1;32mfrom\u001b[0m \u001b[0mscipy\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mlinalg\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mcholesky\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 4\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 5\u001b[1;33m \u001b[1;32mimport\u001b[0m \u001b[0mpymc3\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0mpm\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 6\u001b[0m \u001b[1;31m#import theano\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 7\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;31mModuleNotFoundError\u001b[0m: No module named 'pymc3'" + ] + } + ], + "source": [ + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "from scipy.linalg import cholesky\n", + "\n", + "import pymc3 as pm\n", + "#import theano\n", + "\n", + "np.random.seed(42)\n", + "%matplotlib inline" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'np' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[0;32m 3\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 4\u001b[0m \u001b[1;31m#create array of zeros\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 5\u001b[1;33m \u001b[0malldata\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mzeros\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mR\u001b[0m\u001b[1;33m,\u001b[0m\u001b[0mN\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 6\u001b[0m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0malldata\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 7\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;31mNameError\u001b[0m: name 'np' is not defined" + ] + } + ], + "source": [ + "R = 3\n", + "N = 5\n", + "\n", + "#create array of zeros\n", + "alldata = np.zeros([R,N])\n", + "print(alldata)\n", + "\n", + "#fill in first entry\n", + "alldata[0,0] = 1\n", + "print(alldata)\n", + "\n", + "#fill in column 1\n", + "alldata[:,0] = [1,1,1]\n", + "print(alldata)\n", + "\n", + "alldata[0,:] = 2\n", + "print(alldata)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "D = 3\n", + "N = 300\n", + "sections = 5\n", + "period = N/sections\n", + "\n", + "Sigma_a = np.random.randn(D, D)\n", + "Sigma_a = Sigma_a.T.dot(Sigma_a)\n", + "L_a = cholesky(Sigma_a, lower=True)\n", + "\n", + "Sigma_b = np.random.randn(D, D)\n", + "Sigma_b = Sigma_b.T.dot(Sigma_b)\n", + "L_b = cholesky(Sigma_b, lower=True)\n", + "\n", + "# Gaussian Random walk:\n", + "alpha = np.cumsum(L_a.dot(np.random.randn(D, sections)), axis=1).T\n", + "beta = np.cumsum(L_b.dot(np.random.randn(D, sections)), axis=1).T\n", + "sigma = 0.1\n", + "\n", + "t = np.arange(N)[:, None]/ N\n", + "alpha = np.repeat(alpha, period, axis=0)\n", + "beta = np.repeat(beta, period, axis=0)\n", + "y = alpha + beta*t + sigma*np.random.randn(N, 1)" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[ 0.08814557 0.05707629 -0.22282662]\n", + " [ 0.08814557 0.05707629 -0.22282662]\n", + " [ 0.08814557 0.05707629 -0.22282662]\n", + " [ 0.08814557 0.05707629 -0.22282662]\n", + " [ 0.08814557 0.05707629 -0.22282662]\n", + " [ 0.08814557 0.05707629 -0.22282662]\n", + " [ 0.08814557 0.05707629 -0.22282662]\n", + " [ 0.08814557 0.05707629 -0.22282662]\n", + " [ 0.08814557 0.05707629 -0.22282662]\n", + " [ 0.08814557 0.05707629 -0.22282662]\n", + " [ 0.08814557 0.05707629 -0.22282662]\n", + " [ 0.08814557 0.05707629 -0.22282662]\n", + " [ 0.08814557 0.05707629 -0.22282662]\n", + " [ 0.08814557 0.05707629 -0.22282662]\n", + " [ 0.08814557 0.05707629 -0.22282662]\n", + " [ 0.08814557 0.05707629 -0.22282662]\n", + " [ 0.08814557 0.05707629 -0.22282662]\n", + " [ 0.08814557 0.05707629 -0.22282662]\n", + " [ 0.08814557 0.05707629 -0.22282662]\n", + " [ 0.08814557 0.05707629 -0.22282662]\n", + " [ 0.08814557 0.05707629 -0.22282662]\n", + " [ 0.08814557 0.05707629 -0.22282662]\n", + " [ 0.08814557 0.05707629 -0.22282662]\n", + " [ 0.08814557 0.05707629 -0.22282662]\n", + " [ 0.08814557 0.05707629 -0.22282662]\n", + " [ 0.08814557 0.05707629 -0.22282662]\n", + " [ 0.08814557 0.05707629 -0.22282662]\n", + " [ 0.08814557 0.05707629 -0.22282662]\n", + " [ 0.08814557 0.05707629 -0.22282662]\n", + " [ 0.08814557 0.05707629 -0.22282662]\n", + " [ 0.08814557 0.05707629 -0.22282662]\n", + " [ 0.08814557 0.05707629 -0.22282662]\n", + " [ 0.08814557 0.05707629 -0.22282662]\n", + " [ 0.08814557 0.05707629 -0.22282662]\n", + " [ 0.08814557 0.05707629 -0.22282662]\n", + " [ 0.08814557 0.05707629 -0.22282662]\n", + " [ 0.08814557 0.05707629 -0.22282662]\n", + " [ 0.08814557 0.05707629 -0.22282662]\n", + " [ 0.08814557 0.05707629 -0.22282662]\n", + " [ 0.08814557 0.05707629 -0.22282662]\n", + " [ 0.08814557 0.05707629 -0.22282662]\n", + " [ 0.08814557 0.05707629 -0.22282662]\n", + " [ 0.08814557 0.05707629 -0.22282662]\n", + " [ 0.08814557 0.05707629 -0.22282662]\n", + " [ 0.08814557 0.05707629 -0.22282662]\n", + " [ 0.08814557 0.05707629 -0.22282662]\n", + " [ 0.08814557 0.05707629 -0.22282662]\n", + " [ 0.08814557 0.05707629 -0.22282662]\n", + " [ 0.08814557 0.05707629 -0.22282662]\n", + " [ 0.08814557 0.05707629 -0.22282662]\n", + " [ 0.08814557 0.05707629 -0.22282662]\n", + " [ 0.08814557 0.05707629 -0.22282662]\n", + " [ 0.08814557 0.05707629 -0.22282662]\n", + " [ 0.08814557 0.05707629 -0.22282662]\n", + " [ 0.08814557 0.05707629 -0.22282662]\n", + " [ 0.08814557 0.05707629 -0.22282662]\n", + " [ 0.08814557 0.05707629 -0.22282662]\n", + " [ 0.08814557 0.05707629 -0.22282662]\n", + " [ 0.08814557 0.05707629 -0.22282662]\n", + " [ 0.08814557 0.05707629 -0.22282662]\n", + " [ 0.36020387 1.17799412 -0.21650568]\n", + " [ 0.36020387 1.17799412 -0.21650568]\n", + " [ 0.36020387 1.17799412 -0.21650568]\n", + " [ 0.36020387 1.17799412 -0.21650568]\n", + " [ 0.36020387 1.17799412 -0.21650568]\n", + " [ 0.36020387 1.17799412 -0.21650568]\n", + " [ 0.36020387 1.17799412 -0.21650568]\n", + " [ 0.36020387 1.17799412 -0.21650568]\n", + " [ 0.36020387 1.17799412 -0.21650568]\n", + " [ 0.36020387 1.17799412 -0.21650568]\n", + " [ 0.36020387 1.17799412 -0.21650568]\n", + " [ 0.36020387 1.17799412 -0.21650568]\n", + " [ 0.36020387 1.17799412 -0.21650568]\n", + " [ 0.36020387 1.17799412 -0.21650568]\n", + " [ 0.36020387 1.17799412 -0.21650568]\n", + " [ 0.36020387 1.17799412 -0.21650568]\n", + " [ 0.36020387 1.17799412 -0.21650568]\n", + " [ 0.36020387 1.17799412 -0.21650568]\n", + " [ 0.36020387 1.17799412 -0.21650568]\n", + " [ 0.36020387 1.17799412 -0.21650568]\n", + " [ 0.36020387 1.17799412 -0.21650568]\n", + " [ 0.36020387 1.17799412 -0.21650568]\n", + " [ 0.36020387 1.17799412 -0.21650568]\n", + " [ 0.36020387 1.17799412 -0.21650568]\n", + " [ 0.36020387 1.17799412 -0.21650568]\n", + " [ 0.36020387 1.17799412 -0.21650568]\n", + " [ 0.36020387 1.17799412 -0.21650568]\n", + " [ 0.36020387 1.17799412 -0.21650568]\n", + " [ 0.36020387 1.17799412 -0.21650568]\n", + " [ 0.36020387 1.17799412 -0.21650568]\n", + " [ 0.36020387 1.17799412 -0.21650568]\n", + " [ 0.36020387 1.17799412 -0.21650568]\n", + " [ 0.36020387 1.17799412 -0.21650568]\n", + " [ 0.36020387 1.17799412 -0.21650568]\n", + " [ 0.36020387 1.17799412 -0.21650568]\n", + " [ 0.36020387 1.17799412 -0.21650568]\n", + " [ 0.36020387 1.17799412 -0.21650568]\n", + " [ 0.36020387 1.17799412 -0.21650568]\n", + " [ 0.36020387 1.17799412 -0.21650568]\n", + " [ 0.36020387 1.17799412 -0.21650568]\n", + " [ 0.36020387 1.17799412 -0.21650568]\n", + " [ 0.36020387 1.17799412 -0.21650568]\n", + " [ 0.36020387 1.17799412 -0.21650568]\n", + " [ 0.36020387 1.17799412 -0.21650568]\n", + " [ 0.36020387 1.17799412 -0.21650568]\n", + " [ 0.36020387 1.17799412 -0.21650568]\n", + " [ 0.36020387 1.17799412 -0.21650568]\n", + " [ 0.36020387 1.17799412 -0.21650568]\n", + " [ 0.36020387 1.17799412 -0.21650568]\n", + " [ 0.36020387 1.17799412 -0.21650568]\n", + " [ 0.36020387 1.17799412 -0.21650568]\n", + " [ 0.36020387 1.17799412 -0.21650568]\n", + " [ 0.36020387 1.17799412 -0.21650568]\n", + " [ 0.36020387 1.17799412 -0.21650568]\n", + " [ 0.36020387 1.17799412 -0.21650568]\n", + " [ 0.36020387 1.17799412 -0.21650568]\n", + " [ 0.36020387 1.17799412 -0.21650568]\n", + " [ 0.36020387 1.17799412 -0.21650568]\n", + " [ 0.36020387 1.17799412 -0.21650568]\n", + " [ 0.36020387 1.17799412 -0.21650568]\n", + " [ 1.49310337 4.36349783 0.32917917]\n", + " [ 1.49310337 4.36349783 0.32917917]\n", + " [ 1.49310337 4.36349783 0.32917917]\n", + " [ 1.49310337 4.36349783 0.32917917]\n", + " [ 1.49310337 4.36349783 0.32917917]\n", + " [ 1.49310337 4.36349783 0.32917917]\n", + " [ 1.49310337 4.36349783 0.32917917]\n", + " [ 1.49310337 4.36349783 0.32917917]\n", + " [ 1.49310337 4.36349783 0.32917917]\n", + " [ 1.49310337 4.36349783 0.32917917]\n", + " [ 1.49310337 4.36349783 0.32917917]\n", + " [ 1.49310337 4.36349783 0.32917917]\n", + " [ 1.49310337 4.36349783 0.32917917]\n", + " [ 1.49310337 4.36349783 0.32917917]\n", + " [ 1.49310337 4.36349783 0.32917917]\n", + " [ 1.49310337 4.36349783 0.32917917]\n", + " [ 1.49310337 4.36349783 0.32917917]\n", + " [ 1.49310337 4.36349783 0.32917917]\n", + " [ 1.49310337 4.36349783 0.32917917]\n", + " [ 1.49310337 4.36349783 0.32917917]\n", + " [ 1.49310337 4.36349783 0.32917917]\n", + " [ 1.49310337 4.36349783 0.32917917]\n", + " [ 1.49310337 4.36349783 0.32917917]\n", + " [ 1.49310337 4.36349783 0.32917917]\n", + " [ 1.49310337 4.36349783 0.32917917]\n", + " [ 1.49310337 4.36349783 0.32917917]\n", + " [ 1.49310337 4.36349783 0.32917917]\n", + " [ 1.49310337 4.36349783 0.32917917]\n", + " [ 1.49310337 4.36349783 0.32917917]\n", + " [ 1.49310337 4.36349783 0.32917917]\n", + " [ 1.49310337 4.36349783 0.32917917]\n", + " [ 1.49310337 4.36349783 0.32917917]\n", + " [ 1.49310337 4.36349783 0.32917917]\n", + " [ 1.49310337 4.36349783 0.32917917]\n", + " [ 1.49310337 4.36349783 0.32917917]\n", + " [ 1.49310337 4.36349783 0.32917917]\n", + " [ 1.49310337 4.36349783 0.32917917]\n", + " [ 1.49310337 4.36349783 0.32917917]\n", + " [ 1.49310337 4.36349783 0.32917917]\n", + " [ 1.49310337 4.36349783 0.32917917]\n", + " [ 1.49310337 4.36349783 0.32917917]\n", + " [ 1.49310337 4.36349783 0.32917917]\n", + " [ 1.49310337 4.36349783 0.32917917]\n", + " [ 1.49310337 4.36349783 0.32917917]\n", + " [ 1.49310337 4.36349783 0.32917917]\n", + " [ 1.49310337 4.36349783 0.32917917]\n", + " [ 1.49310337 4.36349783 0.32917917]\n", + " [ 1.49310337 4.36349783 0.32917917]\n", + " [ 1.49310337 4.36349783 0.32917917]\n", + " [ 1.49310337 4.36349783 0.32917917]\n", + " [ 1.49310337 4.36349783 0.32917917]\n", + " [ 1.49310337 4.36349783 0.32917917]\n", + " [ 1.49310337 4.36349783 0.32917917]\n", + " [ 1.49310337 4.36349783 0.32917917]\n", + " [ 1.49310337 4.36349783 0.32917917]\n", + " [ 1.49310337 4.36349783 0.32917917]\n", + " [ 1.49310337 4.36349783 0.32917917]\n", + " [ 1.49310337 4.36349783 0.32917917]\n", + " [ 1.49310337 4.36349783 0.32917917]\n", + " [ 1.49310337 4.36349783 0.32917917]\n", + " [ 2.23930222 5.75829028 1.68128289]\n", + " [ 2.23930222 5.75829028 1.68128289]\n", + " [ 2.23930222 5.75829028 1.68128289]\n", + " [ 2.23930222 5.75829028 1.68128289]\n", + " [ 2.23930222 5.75829028 1.68128289]\n", + " [ 2.23930222 5.75829028 1.68128289]\n", + " [ 2.23930222 5.75829028 1.68128289]\n", + " [ 2.23930222 5.75829028 1.68128289]\n", + " [ 2.23930222 5.75829028 1.68128289]\n", + " [ 2.23930222 5.75829028 1.68128289]\n", + " [ 2.23930222 5.75829028 1.68128289]\n", + " [ 2.23930222 5.75829028 1.68128289]\n", + " [ 2.23930222 5.75829028 1.68128289]\n", + " [ 2.23930222 5.75829028 1.68128289]\n", + " [ 2.23930222 5.75829028 1.68128289]\n", + " [ 2.23930222 5.75829028 1.68128289]\n", + " [ 2.23930222 5.75829028 1.68128289]\n", + " [ 2.23930222 5.75829028 1.68128289]\n", + " [ 2.23930222 5.75829028 1.68128289]\n", + " [ 2.23930222 5.75829028 1.68128289]\n", + " [ 2.23930222 5.75829028 1.68128289]\n", + " [ 2.23930222 5.75829028 1.68128289]\n", + " [ 2.23930222 5.75829028 1.68128289]\n", + " [ 2.23930222 5.75829028 1.68128289]\n", + " [ 2.23930222 5.75829028 1.68128289]\n", + " [ 2.23930222 5.75829028 1.68128289]\n", + " [ 2.23930222 5.75829028 1.68128289]\n", + " [ 2.23930222 5.75829028 1.68128289]\n", + " [ 2.23930222 5.75829028 1.68128289]\n", + " [ 2.23930222 5.75829028 1.68128289]\n", + " [ 2.23930222 5.75829028 1.68128289]\n", + " [ 2.23930222 5.75829028 1.68128289]\n", + " [ 2.23930222 5.75829028 1.68128289]\n", + " [ 2.23930222 5.75829028 1.68128289]\n", + " [ 2.23930222 5.75829028 1.68128289]\n", + " [ 2.23930222 5.75829028 1.68128289]\n", + " [ 2.23930222 5.75829028 1.68128289]\n", + " [ 2.23930222 5.75829028 1.68128289]\n", + " [ 2.23930222 5.75829028 1.68128289]\n", + " [ 2.23930222 5.75829028 1.68128289]\n", + " [ 2.23930222 5.75829028 1.68128289]\n", + " [ 2.23930222 5.75829028 1.68128289]\n", + " [ 2.23930222 5.75829028 1.68128289]\n", + " [ 2.23930222 5.75829028 1.68128289]\n", + " [ 2.23930222 5.75829028 1.68128289]\n", + " [ 2.23930222 5.75829028 1.68128289]\n", + " [ 2.23930222 5.75829028 1.68128289]\n", + " [ 2.23930222 5.75829028 1.68128289]\n", + " [ 2.23930222 5.75829028 1.68128289]\n", + " [ 2.23930222 5.75829028 1.68128289]\n", + " [ 2.23930222 5.75829028 1.68128289]\n", + " [ 2.23930222 5.75829028 1.68128289]\n", + " [ 2.23930222 5.75829028 1.68128289]\n", + " [ 2.23930222 5.75829028 1.68128289]\n", + " [ 2.23930222 5.75829028 1.68128289]\n", + " [ 2.23930222 5.75829028 1.68128289]\n", + " [ 2.23930222 5.75829028 1.68128289]\n", + " [ 2.23930222 5.75829028 1.68128289]\n", + " [ 2.23930222 5.75829028 1.68128289]\n", + " [ 2.23930222 5.75829028 1.68128289]\n", + " [ 1.39500352 4.28413547 0.526679 ]\n", + " [ 1.39500352 4.28413547 0.526679 ]\n", + " [ 1.39500352 4.28413547 0.526679 ]\n", + " [ 1.39500352 4.28413547 0.526679 ]\n", + " [ 1.39500352 4.28413547 0.526679 ]\n", + " [ 1.39500352 4.28413547 0.526679 ]\n", + " [ 1.39500352 4.28413547 0.526679 ]\n", + " [ 1.39500352 4.28413547 0.526679 ]\n", + " [ 1.39500352 4.28413547 0.526679 ]\n", + " [ 1.39500352 4.28413547 0.526679 ]\n", + " [ 1.39500352 4.28413547 0.526679 ]\n", + " [ 1.39500352 4.28413547 0.526679 ]\n", + " [ 1.39500352 4.28413547 0.526679 ]\n", + " [ 1.39500352 4.28413547 0.526679 ]\n", + " [ 1.39500352 4.28413547 0.526679 ]\n", + " [ 1.39500352 4.28413547 0.526679 ]\n", + " [ 1.39500352 4.28413547 0.526679 ]\n", + " [ 1.39500352 4.28413547 0.526679 ]\n", + " [ 1.39500352 4.28413547 0.526679 ]\n", + " [ 1.39500352 4.28413547 0.526679 ]\n", + " [ 1.39500352 4.28413547 0.526679 ]\n", + " [ 1.39500352 4.28413547 0.526679 ]\n", + " [ 1.39500352 4.28413547 0.526679 ]\n", + " [ 1.39500352 4.28413547 0.526679 ]\n", + " [ 1.39500352 4.28413547 0.526679 ]\n", + " [ 1.39500352 4.28413547 0.526679 ]\n", + " [ 1.39500352 4.28413547 0.526679 ]\n", + " [ 1.39500352 4.28413547 0.526679 ]\n", + " [ 1.39500352 4.28413547 0.526679 ]\n", + " [ 1.39500352 4.28413547 0.526679 ]\n", + " [ 1.39500352 4.28413547 0.526679 ]\n", + " [ 1.39500352 4.28413547 0.526679 ]\n", + " [ 1.39500352 4.28413547 0.526679 ]\n", + " [ 1.39500352 4.28413547 0.526679 ]\n", + " [ 1.39500352 4.28413547 0.526679 ]\n", + " [ 1.39500352 4.28413547 0.526679 ]\n", + " [ 1.39500352 4.28413547 0.526679 ]\n", + " [ 1.39500352 4.28413547 0.526679 ]\n", + " [ 1.39500352 4.28413547 0.526679 ]\n", + " [ 1.39500352 4.28413547 0.526679 ]\n", + " [ 1.39500352 4.28413547 0.526679 ]\n", + " [ 1.39500352 4.28413547 0.526679 ]\n", + " [ 1.39500352 4.28413547 0.526679 ]\n", + " [ 1.39500352 4.28413547 0.526679 ]\n", + " [ 1.39500352 4.28413547 0.526679 ]\n", + " [ 1.39500352 4.28413547 0.526679 ]\n", + " [ 1.39500352 4.28413547 0.526679 ]\n", + " [ 1.39500352 4.28413547 0.526679 ]\n", + " [ 1.39500352 4.28413547 0.526679 ]\n", + " [ 1.39500352 4.28413547 0.526679 ]\n", + " [ 1.39500352 4.28413547 0.526679 ]\n", + " [ 1.39500352 4.28413547 0.526679 ]\n", + " [ 1.39500352 4.28413547 0.526679 ]\n", + " [ 1.39500352 4.28413547 0.526679 ]\n", + " [ 1.39500352 4.28413547 0.526679 ]\n", + " [ 1.39500352 4.28413547 0.526679 ]\n", + " [ 1.39500352 4.28413547 0.526679 ]\n", + " [ 1.39500352 4.28413547 0.526679 ]\n", + " [ 1.39500352 4.28413547 0.526679 ]\n", + " [ 1.39500352 4.28413547 0.526679 ]]\n" + ] + } + ], + "source": [ + "print(alpha)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'plt' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mplt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mfigure\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mfigsize\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m12\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;36m5\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 2\u001b[0m \u001b[0mplt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mplot\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mt\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mbeta\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 3\u001b[0m \u001b[0mplt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mtitle\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'Three Correlated Series'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 4\u001b[0m \u001b[0mplt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mshow\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 5\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;31mNameError\u001b[0m: name 'plt' is not defined" + ] + } + ], + "source": [ + "plt.figure(figsize=(12, 5))\n", + "plt.plot(t, beta)\n", + "plt.title('Three Correlated Series')\n", + "plt.show()\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "ename": "ModuleNotFoundError", + "evalue": "No module named 'seaborn'", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mModuleNotFoundError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m~\\AppData\\Local\\Temp/ipykernel_8892/2017695050.py\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[1;32mfrom\u001b[0m \u001b[0mIPython\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mdisplay\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mdisplay\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mclear_output\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mipywidgets\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0mwidgets\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 3\u001b[1;33m \u001b[1;32mimport\u001b[0m \u001b[0mseaborn\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0msns\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 4\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 5\u001b[0m mydata = {'a': range(3),\n", + "\u001b[1;31mModuleNotFoundError\u001b[0m: No module named 'seaborn'" + ] + } + ], + "source": [ + "from IPython.display import display, clear_output\n", + "import ipywidgets as widgets\n", + "import seaborn as sns\n", + "\n", + "mydata = {'a': range(3),\n", + " 'b': range(4),\n", + " 'c': range(5)}\n", + "default = 'b'\n", + "sns.boxplot(data=mydata[default])\n", + "\n", + "w = widgets.Dropdown(\n", + " options=mydata.keys(),\n", + " value = default,\n", + " description='List',\n", + ")\n", + "display(w)\n", + "\n", + "def on_change(change):\n", + " if change['name'] == 'value' and (change['new'] != change['old']):\n", + " clear_output()\n", + " display(w) \n", + " sns.boxplot(data = mydata[change['new']])\n", + "\n", + "w.observe(on_change)" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "0d90a683c8574be5b7537717b5ec97d2", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Button(description='Button', style=ButtonStyle())" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "2023aaf6c2ef402f883ec7a57696e7de", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "%matplotlib inline\n", + "\n", + "from matplotlib.pyplot import *\n", + "import ipywidgets \n", + "\n", + "button = ipywidgets.Button(description=\"Button\")\n", + "out = ipywidgets.Output()\n", + "\n", + "def on_button_clicked(b):\n", + " with out:\n", + " clear_output(True)\n", + " plot([1,2],[2,1])\n", + " show()\n", + "\n", + "button.on_click(on_button_clicked)\n", + "\n", + "display(button)\n", + "\n", + "with out:\n", + " plot([1,2],[1,2])\n", + " show()\n", + "\n", + "out" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## What's wrong with ipycanvas" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "e52eab93bfa34d908e73b0484588779c", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Canvas(height=300, width=300)" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from ipywidgets import Image\n", + "\n", + "from ipycanvas import Canvas\n", + "\n", + "sprite1 = Image.from_file('keypoints_pose_25.png')\n", + "\n", + "canvas = Canvas(width=300, height=300)\n", + "\n", + "canvas.fill_style = '#a9cafc'\n", + "canvas.fill_rect(0, 0, 300, 300)\n", + "\n", + "canvas.draw_image(sprite1, 50, 50)\n", + "\n", + "canvas" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'np' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[1;32mfrom\u001b[0m \u001b[0mipycanvas\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mCanvas\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 3\u001b[1;33m \u001b[0mx\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mlinspace\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m-\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;36m1\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;36m600\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 4\u001b[0m \u001b[0my\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mlinspace\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m-\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;36m1\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;36m600\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 5\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;31mNameError\u001b[0m: name 'np' is not defined" + ] + } + ], + "source": [ + "from ipycanvas import Canvas\n", + "\n", + "x = np.linspace(-1, 1, 600)\n", + "y = np.linspace(-1, 1, 600)\n", + "\n", + "x_grid, y_grid = np.meshgrid(x, y)\n", + "\n", + "blue_channel = np.array(np.sin(x_grid**2 + y_grid**2) * 255, dtype=np.int32)\n", + "red_channel = np.zeros_like(blue_channel) + 200\n", + "green_channel = np.zeros_like(blue_channel) + 50\n", + "\n", + "image_data = np.stack((red_channel, blue_channel, green_channel), axis=2)\n", + "\n", + "canvas = Canvas(width=image_data.shape[0], height=image_data.shape[1])\n", + "canvas.put_image_data(image_data, 0, 0)\n", + "\n", + "canvas" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "0eff46c315d34d12b3a801f654fd0893", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "IntSlider(value=0)" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from ipywidgets import IntSlider\n", + "\n", + "IntSlider()" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "1b8c585cddc34371afb94855f7d50794", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Canvas(height=300, width=300)" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from ipycanvas import Canvas\n", + "canvas = Canvas(width=300, height=300)\n", + "canvas.fill_style = '#a9cafc'\n", + "canvas.fill_rect(25,25,100,100)\n", + "canvas" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is my personal file for checking things i don't understand about python, numpy, etc.\n", + "It probably won't ever get uploaded to github. But now you know, just in case." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "10\n", + "0.006896551724137932\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYIAAAD4CAYAAADhNOGaAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8rg+JYAAAACXBIWXMAAAsTAAALEwEAmpwYAABFh0lEQVR4nO29eZTkV3Xn+b2xR2RGRuS+Z2UtWSVqk1QqCgkwIGtBwsYytGnEuIE+3XPKtMUZ6LFnDPZpD6fP0O3jGS9Dg8URDW08ZsDIIJCNDEJCMsggFVlQqkW1Z2ZVRkbkHhGZGUvG9uaPX7zIqKjIJSJ+y3u/+H3OqaPMiF9mPN18793l3fsuMcZgYWFhYdG82IwegIWFhYWFsViKwMLCwqLJsRSBhYWFRZNjKQILCwuLJsdSBBYWFhZNjsPoAdRDV1cXGx0dNXoYFhYWFlJx+vTpRcZYd+XrUiqC0dFRjI+PGz0MCwsLC6kgohvVXrdCQxYWFhZNjqUILCwsLJocSxFYWFhYNDmWIrCwsLBocixFYGFhYdHkqKIIiOgrRDRPROfLXusgoh8S0dXif9s3+dlHiOgyEV0jok+pMR4LCwsLi52jlkfw1wAeqXjtUwBeZIyNAXix+P0tEJEdwBcAPArgIIAPEdFBlcZkYWFhYbEDVFEEjLEfA1iuePkxAF8tfv1VAL9Z5UdPALjGGJtgjGUAfKP4c6Yikyvg6fFpfOWVScSSGaOHYzj5AsM/vB7GUz++jtl42ujhGA5jDC9enMOTL1/H1GLC6OEIwc+uL+GvXr6GN8IrRg9FCM6GYvjCS9dw+kblNqsOWhaU9TLGIgDAGIsQUU+VZwYBTJd9HwLwlmq/jIhOAjgJACMjIyoPVTty+QJ+5/8dx0uXFwAAX35lEs/87lvR0+YxeGTGwBjDH377HP5uXPmzP/nydTz9sbdiX0+rwSMzjr/44RV87kfXAACfe/Eq/vZ/PoF7dnUYPCrj+NprN/BHzyhR5j97/gqe/O1jePhQn8GjMo7nL8ziY397GoVi65gnf/sYHj3Sr+pnGH1YTFVeq9ophzH2FGPsOGPseHf3bRXSwvJXL1/HS5cX8J8fO4Rv/Ye3YnFtHZ/5hwtGD8swnh4P4e/Gp/HE/Xvx/H98BwDgD751FoVCczZI+ucrC/jcj67hA/cM4Sf/+/3o9rvxe998Hels3uihGcIb4RX8p++cx/0HuvHqpx/Awf42fOrb5xBNNKcnPRtP4xPfOIMjQ0G8+ukH8L+9+wDuv6OaTd0YWiqCOSLqB4Dif+erPBMCMFz2/RCAsIZj0pXlRAZP/XgCjxzqw0fuG8U9u9rxvzwwhufOzeK1iSWjh6c76Wwef/HCFdw9EsTvP3wA+3v9+KNfO4jTN6L4h7Om+bPvmEKB4U+/fwnDHV589n1HMNzhw2ffdxhTS0l89adTRg/PEP7v5y+j1e3AX37wbvQFPPjT3zqKeCqLz/3oqtFDM4T/58WryBUK+PyHFHk8cf8+eJx21T9HS0XwLICPFr/+KIDvVnnm5wDGiGg3EbkAPF78OVPwtVdvYG09h997eH/ptX//9t0I+pz46yZc6M++HkYknsbvP3wARIoz+K+ODWJPV0tTyuOVa4u4EF7BJx7YD5dDWYq/MtaNe/d04G9+dgP5JvOSrsyt4keX5vE779yLgM8JAHhTfxvee7QfT4+HsLaeM3iE+rK4to6nx6fx+JtHMNzh0/Sz1Eof/TqAnwE4QEQhIvr3AP4EwENEdBXAQ8XvQUQDRPQcADDGcgA+DuAHAC4C+CZjzBRxE8YY/v4XIdy3pxNjvf7S6x6nHR88Pozn35jD3EpzHZT+/ekQ9nS14K17O0uvERH+zb278MubMZyfiRs4Ov35+9MhBLxO/PrRW+O9H7lvFDOxFF6+XM2JNi9/fzoEh43wwTcP3/L6h+8bxdp6Dt/55YxBIzOG754JI1dg+Df37tL8s9TKGvoQY6yfMeZkjA0xxr7MGFtijD3AGBsr/ne5+GyYMfaesp99jjG2nzG2lzH2WTXGIwKnb0RxYymJ37pn6Lb3PnB8GPkCw/fPzxowMmOYXk7i1OQy/tU9QyVvgPP+Y4Ow2wjfOxcxaHT6s5rO4gcXZvEbdw7c5uo/dLAXQZ8T3zvbPPLIFxie+eUM7r+jB12t7lveOzYSxL6e1qaSBwB863QIR4cCONDn3/7hBjH6sNi0PP/GHJx2wrsP357tsK+nFft6WptKETz/xhwA4L1HB257L+hz4b49nfjB+Vkw1hzhkB9fWcR6roD33nm7PJx2Gx64oxcvXJxDNl8wYHT6c2Y6ioXV9aryICK8+1AvTk0tN82hcSiaxBuRlarrRQssRaARP7o0j7fs7kSru3qG7iOH+ppqYr90aR77elox0lk91vnuw32YWEzg2vyaziMzhh9dmkfA68SxkWDV9x853IeVdA6vNklSwUuXFmC3Ed45Vj0j8JFD/cgXGF64OKfzyIyBp5trkSFUDUsRaMD0chLX5te2/CPef0cP8gWGnzXBQl9bz+G1ySX86hby4O/95OqiXsMyjEKB4Z+vzOOd+7vhsFdfgm/f1wWnnfBKE8gDUBTjPSPtpUPiSg4PtqGr1Y1XrjWHPF66NI+RDh/2drfo8nmWItCAfylO1nfu37ze4ehQAC0uO3563fwT++dTy8jm2ZbyGAx6savTh59eN79ivDy3isW1zJby8LrsuHukvSnksZzI4I3ICt55YHN5EBHeurcTP72+ZPrwYS5fwKsTS3jn/u7bztO0wlIEGnBqchldra4ttbnTbsOJ3R1NsdBPTS7DYSMcG6l672CJt+7txGsTS8iZPC5+alK5JuAte7auHn7r3k6cD8cRT2b1GJZh/HyqKI/d28tjYXUd1xfMHT68EF5BMpPfdn6oiaUINOC1yWWc2N2xrTa/b28nJhYSmF81dxrpqcllHB0KwOvauhDm3j2dWF3P4WJkVaeRGcOpyWUMBr0Yat86N/y+PZ1gDDg1pc39MqJwanIZbocNR4YCWz53XzHt+GcT5pcHAJzYRjGqiaUIVGYmlsJMLIUTo9v/EbmF/Pq0efPn09k8zoZiOLG7c9tnuTzOhGIaj8o4GGMlQ2E7jg4FYbcRXp+OaT8wAzk1uYxjI+1wO7Y2FEY6fOhscZleHq9NLmNPVwt6/PrdR2YpApU5czMGADi2a+swCAAcGgiYfqFfCMeRzbNNs2PKGWr3mn6hz8RSWFxb35E8vC47DvT68bqJFWM6m8cbkRUc2xXc9lkiwp3DQVPPD8YYzkxHcfc2YVS1sRSBypybicNppx0VgTTDQj8XUrydo0PBbZ9thoXOq6eP7EAeAEryMOulfBcjK8gXGI4MBnf0/J1DQVxbWMNq2pznJrMraSyuZXB0mzCZ2liKQGXOzcRwR1/btm4ux+wL/exMHN1+N3rb3Ns/DPMv9LOhOBw2wh07rBa9aziAlXQOU0vm7FNwrqQYd7bx3TkcAGMbP2c2zhYNp8ODliKQFsYYzs+s1PRHNPtCPz8Tx5HBwI7T4My+0M/NxLG/17/jGyTvHA4CgGm9xnOhODpbXBgI7CwefmfRkzLrudr5mTjsNsLB/jZdP9dSBCoyvZxCPJXFkRoUgZkXejKTw7X5tZoUo5kXumIoxGuaH2M9fvhcdlPKA1AU4+EaDIX2Fhd2dfpMGz48NxPHWE/rthl2amMpAhU5OxMDgJrie2M9fnicNpyfMV9LvjfCKygw4GgNG197iwvDHV6cD5tv4wtFU4gmszhcw/yw2wiHBtpMeTNrOpvH1fm1mhQjABwZDJhyfjDGcC4U1z0sBFiKQFXOzcThstuwv3fntwXabYSxHj8uz5ovd77W+C/nQG+bKeVROiiucaEf6PPj8tyq6Spq3ygeFNe68d3R50comjJdf4JIPI2lRKbm+aEGliJQkYuRVezraS01GdkpB/r8uGTCje9iZAWdLS701tif+Y4+PyYXE1jPmatd48XICmyEHR8Ucw70tWE1nUM4bq7Cw4sRxQs+NFBbPPxAn/K82YwFLo+DNcpDDSxFoCJX51brujv8jj4/FtfWsbS2rsGojOPK3FpN3hHnQJ8f+QIz3U2kV+bWsKuzpeZWg1xxXJ41V/jw6twafC47BoPemn5uQx7mUgRX5pT5Xs+aaRRNFQERHSCiM2X/VojokxXPvIuI4mXP/LGWY9KKlXQWkXgaY72tNf8sVx6X58wzsRlTNvL9dciDL/QrJpIHAFyZX8VYT+3y4BvD5VmzKUZFHjZbbRerDQa9aHHZTTc/rs6torfNjYC3+g2sWlL9snyVYIxdBnAXABCRHcAMgGeqPPoTxtivazkWrbnKtXlPfRYwoFg4b93bpeq4jCIcT2NtPXdLm86dMtrVApfdZqpw2XoujxtLSbzncP/2D1cQ8DoxEPCYziO4MreGd21x4+hm2GyE/X1+XDKbPOZXDfEGAH1DQw8AuM4Yu6HjZ+rG1aJ1Uk9oqLvVjXaf01SuLrfW6pnYTrsNe7pbTCWPiYUE8gWG/XW2HdxvsnOk5UQGi2vrOFDnxnegV0mwMMsBeqHAPWjzK4LHAXx9k/fuI6LXieifiOhQtQeI6CQRjRPR+MLCgnajrJPLc6vwOmuPdwLK1QpmOzC+MssVQe2hEEAJD5lJEWwoxvrkcaDPj+sLa6ZpXcnlUU8oFVDkEU1msbBqjnO16WgS6Wyh7vnRKLooAiJyAfgNAE9XefsXAHYxxu4E8N8AfKfa72CMPcUYO84YO97dXbs7qTVX59Yw1lt7vJNzoNePqyZKEbwyt4ZuvxtBn6uun9/f50cknsaKSa6auDK3CruNsLurvo5TB3r9yOYZbpikAv1qAx4jgJInwQ9YZYf/f9QTSlUDvTyCRwH8gjF2W8NRxtgKY2yt+PVzAJxEJF2gXDn4qv+PuKe7FYlMHvMmsXCuzq82ZN3s6VJ+dnLBHBvflbk1jHb6dnwHVSV7uhV5XDeRPPxuB/p3eLVEJVweE4tmUQRFD6mOZAI10EsRfAibhIWIqI+K9eVEdKI4JqnadsVTWcyvrtft5gLAnmI3swkTLHSeMdSIYuTd3SYX5ZcHAFxvUB57TCaPa/Nr2NvTWncrxt42N1pcdlOsF0CZH/0BD/we/TOGAB0UARH5ADwE4Ntlr32MiD5W/Pa3AJwnotcBfA7A40yy+MhUcXHW6/YD5rJw5lfXkczkG5LHSKcPNgImTNCWMJcv4OZyErsbaETe5nGiq9VtCnkAikLb08D8ICLs7m7BhEkU48RioqH10iiapo8CAGMsCaCz4rUvln39eQCf13ocWsJvDm3kD9nf5oHHaTOFhTOpgmJ0O+wY7vDhugkWeiiaQq7AGl7oe7pbTDE/Upk8ZlfSjcujqxW/uBlVaVTGMrWUwHuO1J5arBZWZbEKTC4mQKS00qsXm42wu6vVFBafGh4SAOzpMsfGN6mCoQAo4TIzWMDccBpVQTHOxFJIZ+W+iiSWzCCWzGJ3p3EegaUIVGBqMYGBgLfmqwMq2WOShT65lIDLbsNAHam05ezpbsXk4pr0TXu4YhxtcKHv6WrFciKDWDKjxrAMQzVDobsVjEH6Xh7cg25UMTaCpQhUYHIpidGu+r0Bzp6uFkwvJ6W/bG1qMYHhDi/sdabScnZ3tSCdLSCyIvdla1OLCbS6HehqrS+VlsM3TtkzhybV8gi6zJFgoUZouVEsRdAgjDFMLqw1bO0BikdQYMDNpaQKIzOOqcWkKpN6I5NK7nAZNxTqzZDhmEUeU4sJdLW60epu7Ihyd5c55DG5kICtwdByo1iKoEGiySxW0jl1Nr4unjkkr4VTKDBMLSVUUYx7i5lUsqdMTi2qI4/hDh8cNjKBPJLYrYIH3eJ2oK/NI/V6ARRDYbDdW/P19WpiKYIGUSNDhrOrU1kc08vyegSzK2ms5wqqxDt7/G54nDapPaRMroBQVB0PyWm3YbDdi5sSzw9ACQ2poRgBJc1Y5vUCqGcoNIKlCBpkSsWDnqDPhTaPQ+qFrtZBIKDkio90+KSWx3Q0iQJr/KCYI7s81tZzWFhdV+1gdFeHDzckNhQYY5gyuIYAsBRBw0wtKfG94XZ14nsjnXJPbLVSJTmyb3wlxdhAMVk5ZpFHI8Vk5Yx0+DC/uo5URs4Ei6VEBqvrOcsjkJ3JxQSG2n2qxfdGOuR2dacWE3A7bOirsT3lZox0tODmclLay/hKoUOVFvquTh9iySziKTkv41OrhoAzUgynhqJyrhk1PehGsBRBg0wtJVTN/x3paEEomkJe0tz5ycUkRjtb6r6FtZKRDi+SmTyWEnLmzk8tJRDwOtHe0ljqKIdnlshqLKhVU8Hh8pDVixahhgCwFEFDMMZwYzGJ0U710r5GOnzI5AuYlTR3/sZSonTorQbc4pN1od9YUnd+DBc3PlnDQ1NLSfS2ueF1NVZ8yRmRXB43lpKwETDU3ljxZaNYiqAB4qksVtdzqub/lia2hBsfYwyhaKq0WanBSIdiKclqAYeiKQxpMT+klUdStfM0AOhocaHVLW+CRSiaRH/AC6fd2K3YUgQNEIqmAKirzWV2/ZcSGaSyeQyrKA8uWxkXeqHAMBNNqbrx+T1OdLS4pPWQppfVNRSICMMSH6BPR1MY7jDWGwAsRdAQfLMeUnGhDwQ9sNtIyom9oRjVk4fHaUdfm0dKecyvriOTL6ju9g9LmlCQK4Y81ZbHSIe8tRWhaFLV9VIvliJogOlipoKaFo7DbsNg0IsbEk5snrkxpLKFM9LpkzJUVpKHyhvfrg4fbizLV00biaeRLzD15dGpZJbJdjnhei6PuZV1w88HAEsRNMT0cgp+jwMBr7pdhWTNFZ9eVt8jACSWhwaGAqDIIxxLS9fIfjqqvgcNKPLN5ArStXmdKXrQaoYO60WPDmVTRHSOiM4Q0XiV94mIPkdE14joLBEd03pMaqH2wRdH1rL5UDSJdp+z4cvEKhnp8GF2JS3dvfOhomIcbPA67kpGOnzIFxgiMbkyy0IabXyyHqBrccZYL3p5BPczxu5ijB2v8t6jAMaK/04CeFKnMTWMVgc9Ix0+LCcyWE3LVTQUiqY0iXfukrRoKBRNodvvbrhPRSWllFrJwkOhaAo2AvrqbFi/GbtKtQTyyQOAqlll9SJCaOgxAH/DFF4FECQi43q27RAlVVIjj0BSC2c6mtREMcqaOz8dTaqaQcWRdX6ElpPoa/OofsvmQNALG8mXaTcdTcJhI9Wq8BtBD0XAADxPRKeJ6GSV9wcBTJd9Hyq+dgtEdJKIxolofGFhQaOh7pzFtQzSWfUzQoCNUAKPIcoAY0qqpBYewZCE8gC085B62zxw2EhOeWhg/bocNvS2eRCKySePgWDjDZzUQA9F8DbG2DEoIaAniOgdFe9Xk8Jtx/+MsacYY8cZY8e7u7u1GGdNaHUQCACDReUyI9HEXlhbx3pOG8XY1eqGy26TaqHnCwzhWEoTedhthL6AR6r5AfBUSW3i4YNBr4SKUTt51IrmioAxFi7+dx7AMwBOVDwSAjBc9v0QgLDW42oU7oZqoQg6W1zwOG0IS7TQecaQFqEym40wEPQgLNHh6OxKGrkC02R+AMrGJ9P8yOSUlqNa5cwPtnsRjssjD6BYXCdAxhCgsSIgohYi8vOvATwM4HzFY88C+Egxe+heAHHGWETLcamBlif+RISBoFcqi0+rnHnOYLsXMxIdFoeW9ZCHPPMjEk+BMQ3lEfQiEktLc1ljOpvH4poYNQSA9h5BL4BXiOh1AKcAfI8x9n0i+hgRfaz4zHMAJgBcA/AlAL+r8ZhUIRRNorPFBZ9L3VRJjmyuLleMgxpN7IGAbIpRm5oKzmDQi9kVeWoJtEod5QwEvcgVGOZX5fAaNzKGxFAE2uxiRRhjEwDurPL6F8u+ZgCe0HIcWjC9rM3BF2cw6MXFyIpmv19tQtEkulo1VIztXuXKhlzB0N6uO2U6mgSRcmWIFgwGvSgwYE7DcIuaTOvgIQFAOJZCf0CMzXUrSmeMgvztxF9RgjITS5WyWbRgMOgtZibJUUQViqYwqOGkHgx6wZgSYpCBUDSFXr8Hboe6NQScUkKBJF5jKJqC3UboV7mGgMPXYkgieQDaeYy1YimCOmCMIRJPaTapgVstHBlQUiU1VIySZVJpnRFSSjGWSB79AQ8cGl23PCChPFx2G3r8bqOHAsBSBHURS2aRzhbQr6FHINPE1uK65Upkq61Q+7rlSgZkk4fGhkKL24GgzymNPELLKQy2e1Xr5NcoliKoA56mNqClRyDRQtfquuVy+gNeEMmhGLW6brkcj9OOrlaXNCmTely3LFNKrUg1BIClCOqCX/alpUfQF/DAJsnGNxNTDr60yhgClOrRHr9bCsU4u6KkMap92Vwlg0GvFDFxfjOoHvKQYb0AyrrWWh61YCmCOojo4BE47Tb0tXmk2Ph4odeAxtkasiz0SFx7QwEo1hJIII+5lTQY0y6DisNrK5RERHFZz+WxuJYRKrvJUgR1EImn4bAROlu1PeiRpaiMK8Z+jRf6gCSuPx+jloaC8vsVeYi+8XF5aL3xDQa9SGTyiKfEvrV3tmQoGH/ZHMdSBHUQiafR2+bR/LIoWSy+cCyNVrcDbR51G/RUMtjuRTiWFr4TlZ4eQTpbwHIio+nnNAqXh+YegSQJFnp50LVgKYI6CMdSmk9qoFg9Ghe/bF7rVFrOUNCLTL6AxTWxO1FFYkrnOrUb9FQizcYX18kjkKS2Qi8PuhYsRVAHkXhal/jeYLtSNj+3InbZfCSe1tz6BTYWuui3kIbjaV2sPWk2vlgabR4HWizFCKDMQ7I8AnkpFBhm42ldtDnPFRc9Lh6OpTSPhwNyyUOP+SHLxqd40Npveh3FW3tFV4zhWArtPie8Lm2qzuvBUgQ1spzMIJMvoF+HrkJDEix0PTMgZKmt0MtjDHidaHHZhZ4fQNFD0kER8Ft7Ra+t0Gt+1IKlCGpEjxoCTikUIvDGN6vTQSAA+D1OtHkcQm986Wwey4kMBnWQBxFJcR21XmdIgBy39up1xlgLliKokY2qYu0Vgc+llM2LHAopZUDoVBwjegppKWNIJ4tPdAs4lckjlszqNj+UWhOxz9REvCHVUgQ1Eonpe+LfH/CWrG4RKWVA6GTxDQS9pc1WRKz5cSthnedHf8CLxTXlunIRSaznsJLOCZUxBGjfoWyYiF4iootEdIGIPlHlmXcRUZyIzhT//bGWY2qUSDwNl8OGzhaXLp/XH/CIvfHpbAH3BTyCb3z6ZoT0BzxYXMtgPSfmdeWlUKqO8gAgbKZdRMeIQi1o7RHkAPweY+xNAO6F0rz+YJXnfsIYu6v47z9rPKaGUA56PCDS59ZARRGI6/rrnQExEPBgKSFunwbuEfTpZgEXN764mLUVpVCqXh5S8XNENZ7CJcXYRB4BYyzCGPtF8etVABcBDGr5mVoTiafQp0PGEKc/4EE0mRV349M5A6Kv+FmiWnzheBqdLS54nPooRi57UY0F7hHorRiFlUdJMTaXR1CCiEYB3A3gtSpv30dErxPRPxHRoU1+/iQRjRPR+MLCgpZD3ZJwTJ9UOM7GQhd049M5A4Iv9LCgB4J61RBwxLeAU+hqdWvWqa2SPuHXSxpE+inGnaKLIiCiVgDfAvBJxlhlI95fANjFGLsTwH8D8J1qv4Mx9hRj7Dhj7Hh3d7em492MfLHKV0+3TnQLR+8MCC6P2RUx5aGkSuovD2E3vri+hkKr2wG/xyHsOVIknkJ3qxtOjTq11YvmoyEiJxQl8DXG2Lcr32eMrTDG1opfPwfASURdWo+rHhbX1pErMF1qCDj8syICWsBGZEDwTVZUjyASS+tSZc3xuRwIeJ3CGgr8TE1P+K2sIqLXdSy1onXWEAH4MoCLjLE/3+SZvuJzIKITxTEtaTmuetHreuFy+HnErIAxcSMyILwuO4I+p5AW32o6i9X1nO4LXdTMMsYYIgbkzPcFPEKuF0C/61hqRdtboIC3AfgwgHNEdKb42h8CGAEAxtgXAfwWgP9ARDkAKQCPM0EvWOebj57xPb7xiWjh6F1MxulrEzOTauO6Zf03PhHlsZLOIZHJ615F2x/w4EK4MgJtPIwxROJpvHN/j9FDuQ1NFQFj7BUAW+ZZMsY+D+DzWo5DLfTOEeeIWjSkdzEZR9SiMiM8RkCZH+dn4rp+5k6I6HT9dCXlRWUuhzix+Hgqi6QBinEniCMlCYjEUvA4bQj6tG3AUkl/wFNSQiJhVAZEn6ChEL0a0lQialFZxCCPUdSiMqM86J1gKYIaiBTvmdermIzTH/BgVkDXPxwzJgNiIODBsoBFZeFYCjYCev3atjCtRNSiMn45oO6hIUFTao3yoHeCpQhqIBzXN0ecw4vKUhmxNj6jMiB4rrho4bJwLI0evwcOnRVjKZNKMGMhEk/BbiP0+PU/I+CfLxJhg86QdoKlCGpg1qB7xPlnipYJEY4bkwEhau58xChDofiZoinGSCyNXr9b897elYhaVBaJpeCwEbpa9fUYd4KlCHZILl/QvZiMU9r4BMocUlIDjVKMYlp8PHSoN6Vqa8HkoXjQ+suDF5WJtF4AZX70tnl0V4w7wVIEO2R+dR0Fpn8GBFBWVCaQhRNPZZHKGpMBIeK1G4yxYpW1/vLgRWXCeQQGFJNxBgLiZZaJ2JCGYymCHVI66DHgD8mLykSygMM6Xy9cDq+tEEke0WQW67mCYVWj/QGPUNXWPGfeqHi4iJllIrao5FiKYIeUUr8M2vjafU6hJnZE5+uFK+lrE6svAa8h0KNFZTX6Ax6h7l9aSmSQyRWM8wiCYimCQoEpZ4yWRyA3s6UccYM2PsFcXaMzIJSWleLIQ+8GPZX0BbxC3Ueld0OaSvralKIyUWorlhIZZPIF4RrScCxFsEPC8RRaXHb43VrfylGdAcFcXaMzIES7T8bI0CEgXsMefnA9aFSorPh3mF8Ro7ZC1D4EHEsR7JBITMmZ17uYjNMnWFHZrMEZEKIVlUXiaUUxthinGAFxNj4j7uUqR7QU4w2P0QoNSY1yz7xxf8SBoFeoorJIPG1ocw3Risq4YrQZpRiDYhWVReJpOO2kW2/vSkTr3KZ3C9NasRTBDgkblCPOEe06aqMVo2gWn9GpgXyDEUUxRuIp9AWMU4yizY/IShouu80wxbgdliLYAZlcAYtr64ae+JfuTxGgSIanBoqhCIyXB6Ao6D4DDQXRisoi8TT624yTR4vbgTaBispmix60UaHl7bAUwQ6YW0mDMWPjeyIVUfGceWM3PnHkIYJiFK2ojHsERtIvUKZdJGZsKHU7LEWwA4xODVQ+WxwLeKMzmXETW6SismWDc+Y5ohSVFQoMc3FjPWhA8aKFUQQrYnYm4+jRs/gRIrpMRNeI6FNV3ici+lzx/bNEdEzrMdWK0cVTAOBxilNUZnRGCEeUojJRMkJEKSpbTio58/1txstDhPXCi8mM9KC3Q+uexXYAXwDwKICDAD5ERAcrHnsUwFjx30kAT2o5pnow8jqFckRxdY0uJuOIUlQmgscIKHdSiVBUViomM3h+8E5lRheVLSUyyOaZsPcMAdp7BCcAXGOMTTDGMgC+AeCximceA/A3TOFVAEEi6td4XDURiafQ5nGgxaBiMo4oFs5s8Z55o6/TFaWojNd3GO4RtIlRVCZKAxZRaitKHrTBHtJWaK0IBgFMl30fKr5W6zMgopNENE5E4wsLC6oPdCuMvDyrHFGalEfixtwzX4koRWW8mKxTAMUIGN+ikStno0OHpUwqgzOHwiXFaPweshlaK4JqOwWr4xkwxp5ijB1njB3v7u5WZXA7RYQMCEAJhcQEKCrjVdZGI0pRmSj3zA8Icl15OKYUkxlVZc0RpaGT0feU7QStFUEIwHDZ90MAwnU8YyhGNWCpRJTrqJWceeMntSi580YX13H6BMksm42nDK2y5mx4BMYbCi67DR0+MYvJAO0Vwc8BjBHRbiJyAXgcwLMVzzwL4CPF7KF7AcQZYxGNx7Vj0tk8lhIZIVK/RGjKreTMpwzPCAHKO7cZb/GJoBh55bsIG58IirFUVCaAodAbcBuuGLdCU0XAGMsB+DiAHwC4COCbjLELRPQxIvpY8bHnAEwAuAbgSwB+V8sx1cqGW2e8RyBCEVUsmUU6a1wDlnJEcP2NbsBSjtdlF6KoTKQGLCJk2okkj83QPA2GMfYclM2+/LUvln3NADyh9TjqhU8iITwCAXoXi5IzD2wUlRl5GFiqshbAQwJ4Zplx8mCs2IDlsCDyCBqfYBGJp3BspN3QMWyHVVm8DXwSieD6e5x2dLS4Snn8RiCSPADjLT6uhERQjIDxtRW8AYtQ88NAefAqa1HksRmWItgGUYqFOEZbfBsekhjyGAh4DPUIRAodAsbPj1nB1ovRDXt4lbUo62UzLEWwDeFYCu0+J7wuu9FDAWC8hTMbT8NuI3T7jU0N5Bh9n0xkRZxQGWB83wqRQofAhoI26tyEr1XLI5Ac0Q56BgyOeYbjKSGKyTj9AS/iqSySmZwhn290y85K+AZs1AG60S07KxkopdQaKw/LI5AcJSNEjEkNKBvfSjqHxLoxG58oqZKcAYNTao1u2VlJKbPMoHCZ0S07K+kvFdkZJw/A8gikR5SqYo7R11HPCuYh9bXxjc8oi08sxbhRZGesYhQlZ36jCNO4+WFky86dYimCLUhl8ogls0JtfEZWSzLGEBakipbDPQKjqotFqSrm9BmcYmx0y85KvC7l+najEgpmDW7ZuVMsRbAFfHMRaWIPGOjqxlNKMZlIFvDGxmeMYhSlipbjcdrRaWCKsdEtO6thZIpx2OCWnTvFUgRbEBGkD0E5vW0eEBnjEYjSl6Ect8OOrlaXIYpRhJad1TCqiEpExQgohpxxHoFYocPNsBTBFoQFPPF3OWzoanUbstB59ytRMkI4/QGvIRawCC07q2FUirEoLTsrMcoj4J3JRFsv1bAUwRbwxdQbECMDgjNgUIMa0XLEOf0BT6k5jJ6I0rKzkgGDisqEnR9BjyEpxqK07NwJliLYgkg8ha5WN9wOMYrJOEZZOJFYGjYCugXJmecMGNSiMRwXL1QGKCmTRqQYb6RKiiWPAYMua5wVVB7VsBTBFszEUhgU0K3rC3gQiaWg3NenH7wBi8Mu1rTpC3iwup7Dajqr6+fylp2iVFlzjEoxnhU0VGZUQgE/lxAp2WQzxFrRgiFaVTFnIOhBIpPHSlpfi292RayaCk6/QdWjorTsrITPWb0TCkRp2VlJqU+D3opRkJadO8FSBJvAGEMklhLyoGejL4G+E1vp1CaePHhKrd6ZIZGYmBkhRnkEorTsrISf8envEYjRsnMnWIpgE1ZSOSQyeQwKcqtkOaVrFXSc2BupgeLJwyiPYHZFjN7NlfQFjEkxFq24jqOkGOufaSdKy86doJkiIKL/i4guEdFZInqGiIKbPDdFROeI6AwRjWs1nlrhbqSYG5/+ru5KKodUNi/kQue1FXpW04rUsrMSp92GbkM2PjE9JKBYS2BA6FDE9VINLT2CHwI4zBg7CuAKgE9v8ez9jLG7GGPHNRxPTYh2i2I5PX43bKSvRyCyYnTabejxu3Vd6CK17KxGf1DfzDKRWnZWo7+YYKEnonrQ1dBMETDGni/2LAaAVwEMafVZWjBT3GRFDA057Db0tulbSyBqzjynP+DV9c55UXPmOXrXmojWsrMSvedHqWWnoPOjEr3OCP4dgH/a5D0G4HkiOk1EJzf7BUR0kojGiWh8YWFBk0GWI9o985X06Vw0tOERiDmx+wMeXUNlorXsrETvFGPRWnZW0q9zivGyYC07t6MhRUBELxDR+Sr/Hit75o8A5AB8bZNf8zbG2DEAjwJ4gojeUe0hxthTjLHjjLHj3d3djQx7R4RjKSEzIDgDOheVzcaVYrIewXLmOfxaBb02PtFadlYyEPDqmmIsWsvOSjb6EuizZkRrcbsdjkZ+mDH24FbvE9FHAfw6gAfYJiuUMRYu/neeiJ4BcALAjxsZlxqE42khw0Kc/oAHL1ycA2MMRNorq0g8jR6/eMVknIGgB6lsHvFUFkGf9ne/i9ays5L+UsOeFAJep+afJ1rLzkp4kVs4lsL+Xr/mnyd66LASLbOGHgHwBwB+gzGW3OSZFiLy868BPAzgvFZjqoVIXMwaAk5/0Iv1XAHRpD6ubljQmgqO3kVU4ZhYLTsr2ehUpp88RA6l6u0RlEJlAq+ZcrQ07z4PwA/gh8XU0C8CABENENFzxWd6AbxCRK8DOAXge4yx72s4ph1RujVQYLeu3MLRg3AsJbaHVGYB68FMLIXBdnHloXfDHm4oiKoYe0uZdvrJw+WwSVFMBjQYGtoKxti+TV4PA3hP8esJAHdqNYZ6WVxbRzbPhLxniFNu4RweDGj6WYUCQziWxrsP9Wn6OY2wcY2APhbfTCyFe3a16/JZ9dDjVzZlvTyCmWhK2PMSQMm06/HrV0sQiqUwIEFnMo6YAV+DEfVWyXK4R6DH9cuLiXVk8gWhLeDuYphGD3nkix6jyB6S3Ubo9bt1DYWIPD8AxWvUK4VUBnmUYymCKsgQ3+tsdcNhI10snJmoeA16KiltfDpYwPOraeQKTNjiKY5eKcbZfAGzK2IrRkDfFGPRPaRKLEVQBa4IRJ7YdhspRWU6xDz5AazoFk5/0KvLQi/NDwnkoYdHMLeSRoGJvV4A/VKM13N5zK+uC28olGMpgiqEY2l4nXZd0u4aQa/7U2ZiyeLniT2x+3Wqpg1FxTcUACV8GNahqKzkMQouj/7ARoqxlszF1wGIbyiUYymCKvDUUT3y8xtB6VSmj0fgdzskUIyKBaz1xsc9JPE3Pn1SjLkXJvrGt3FdubbGQqhoOIluKJRjKYIqiF5MxuGHX4WCthtfKJoSftMDFIsvkytgKZHR9HNmYkkEvE60ujVLulOFUgqpxuFDGc6QAP36NIQFvqdsMyxFUIVwTMx71SsZDHqRzTMsrq1r+jmyZEDo1aAmHJPDUNBLHjOxNDpbXPC6xOrtXcmgXvKIin0PVTUsRVBBJlfA4tq60KmjnKHi5hzSfKGnpOi7yuXBF6JWzEjiIQ21+wAofz8tUeaH+PLoanXD5bBpvl7CsRS6/W54nGIrxnIsRVDB3EoaTIIMCGBjoYc03PjW1nOIp7IYDPo0+wy10EMegLLQhyTwkNp9Tniddl3kIcN6sdkIg0Gv5vKQRTGWYymCCvgkEbmGgMMXXyha9SonVeButAweQcDrhN/j0FQe8VQWq+s5KeRBRBhq92oqD8aYNB4SgKI8dDAUJJEHx1IEFfBFM9wuvgXc4nago8Wl6cTmYQUZLGBA8Qq0lMdGjYn48wPQfuOLJbNIZfNSnCEBijxmtFaMkoRSy7EUQQWhaApEcngEgPYLXZYccY5+8pBlfmirGGdKilEeeSyuZZDK5DX5/UuJDNZzBSlCZeVYiqCCUDSFvjYP3A45DnqUmKe2oSGHjdDjl2Ohc3loVUsgS848Z6jdi3gqixWNOnPNSOghARtFkmqzEUqVY35wLEVQQSialCYMAnBXV7vq0ZlYCn0Bca8XrmSoXenMFdOoiGommoLLLs/1wqXMIY28Avk8JGVtT2suD3n2EMBSBLcRiqZKi0cGhtp9WM8VsKBRLYEsGSEcrTOHePxXluuFSynGGskjHEvB47Sho0X7rnBqoMf8UD5HnjUDaNuh7DNENFNsSnOGiN6zyXOPENFlIrpGRJ/Sajw7IVe8RVGmP6LWufOyFE9xNjY+7Vx/maw9zeURV+Qh+nUsnO5WN1x2m2bymIml4HOJf09ZJVp7BH/BGLur+O+5yjeJyA7gC1Aa1x8E8CEiOqjxmDYlEk8jX2CSKQLtLByuGGXa+IZ18QjkkUdHi0vTWoKZqFweo81GGNQwoYAbCrIoRo7RoaETAK4xxiYYYxkA3wDwmFGD4ZNDptDQoIauP1eMIx3yyKPN64DfrU0tQTqbx9zKulTy0LqWYDqawrBE8gC0zSybXk5JNT84WiuCjxPRWSL6ChFV6+s3CGC67PtQ8TVD4ItFJo+g1e1Au8+pyUK/uVyUR4c88iDSzuLjv3NYInkA2m18q+kslhMZKWpuytGqloAxhunlZPMpAiJ6gYjOV/n3GIAnAewFcBeACIA/q/YrqrxWNf2FiE4S0TgRjS8sLDQy7E0JRVOwkdgtKquhVa44VwSyTWyt5DEtqTy0UozTy8rvlE4eQa8mtQSxpFJ1LpMhyWnoHl3G2IM7eY6IvgTgH6u8FQIwXPb9EIDwJp/1FICnAOD48eOa5EryGgKXw+iIWW0MtXtxZW5V9d97czkJh40kVIxe/Oz6IhhjqsZqp3nVuWQb31C7r1RL0OZR7xCTy0M2RbBxGV8S+3r8qv1eWQ0nQNusof6yb98H4HyVx34OYIyIdhORC8DjAJ7VakzbodQQyPdH5K6/2rUEN5eVmgpZagg4WtUS3FxKwuO0obtVjhoCjlaZZbJ6SFrVEpQUQadc8gC0PSP4UyI6R0RnAdwP4D8CABENENFzAMAYywH4OIAfALgI4JuMsQsajmlLlBoCuaxfYKOWYHFN3YYsoeWkdNYvoF0m1c1i/Fe2jBAt5dHmcSDgkytVUit5TEt0T1klmrVYYox9eJPXwwDeU/b9cwBuSy3Vm6yENQSc8lzxbr961urN5SQePdK//YOCUX6NwJGhgGq/9+ZyUspFvuERqHtAelNSQ6HH74bTTpp4SF2tLrQI3rmuGnIFwzUkHEspNQQSTmwtLJyVdBbRZFY6tx/YsMj4YaYa8IwQGTe+zhYXPE6bJqEQGecH70swbSnGEpYiKDK1pEyK3V0tBo+kdng6I49RqoGs8V+gWEvgcagqj2gyi0QmL6U8iAjD7T5V5VEoMISicubMA8qB/7SK8gDkVYyApQhK3FhKAAB2SXjQ43M50ON3Y2oxodrvlFkREBF2d7Vgakk9ecicEQIAo10tpTmuBvOr68jkCtJawKOdLZhcTKiWYJHNFxCOpaWdH5YiKDK1mITPZZcuI4Qz2tmCG0vqWTh845N1oe/q1EgRSGgoAMBopw83lpIoFNTZ+GRXjLs6fVhN5xBVKbMsElOq8GU8QwIsRVDixlICuzpbpMsI4ezq9Km68U0vp5SMEMkuz+Ls7vRhJppCJldQ5fdxD0nGZAJA8QjWc0pChBrIbijwELBaa0bWGhOOpQiKTC0lMCqptQcoC31+dR2J9Zwqv+/mclJa6xdQPIICU+/WTSUjxA2fS76MEEDxGAEVN77lJIgg1YVz5ewqykOtcJnsHqOlCADkCwzTy6nS5JCR0dLEVm/jk9XtBxTFCKi38SkHgXJuekCZPBbVmx8DAa90Vfic4Q4vbARMqiSPm8tJOO2EvjY5GvRUIudfUWUi8RQy+YLkHoEydjU2vly+UNz4ZFaMRXmotNCnFhNSGwr9xatT1LKAJ5cSUhsKbocdA0GvavKYWkxguN0nXRU+x1IE2LCiZV7ou1R0/UPRFHIFhj3d8sqjo8UFv9uhijxSmTzC8TT2SJhazLHZCCMdPkyqlFk2uZiQen4AihetVqad7PKwFAFQWhzcqpaRVrcDXa3qpJByeci88RERRrtaSvUhjcCVyW6JFzqgXmZZNJFBLJmVsuamnNEunyrzo1BgmFxMSC0PSxFAOTByO2zo9csZ3+PsVmliTxQVgcwTG1AyqdRw/SdNIo/RTh9uLCcaTiHl80NmCxhQFGM8lUUs2dgdXZGVNNZzBezualVpZPpjKQIoVcW7On3SNCTfjF2d6hQNTS6uoc3jkKYh+Wbs7mpBKJpCNt9YCunEwhqAjQN5WRntakE6W8DcamMppBuKUd6ND9j4ezYaLptckN9QsBQBNmoIZGe004e5lXUkM42lkCrxzlZpayo4uzpbkC9ehdAIE4sJ9LV5pLxMrJxSCmmDB+iTi2tw2EjamgoODwU3Gi6bXFQMBZk9pKZXBPkCw42lpNQZQxyeItjwxF5ISH0+wNmtUiaV7PFfzsbG17g8Rjp8cNrl3j6GO3wganx+TCwm4HPZ0aPizb96I/dfUgVC0STWcwXs65HbzQU2LL7rxVBGPfAMGVNsfFwe8/XLAygqAomtPU5/Me+/kfkBABML5lCMbocdg0Evri+oYyjI7EE3vSK4Vtwk1GxZZxR7u1tBtPH/VA9myZABgM5WNzpaXA1tfDxDxgwekt1G2Nvd2tD8KBQYppbMoQgAYKynMXkA5vAYtWxV+XdEdKb4b4qIzmzy3FSxk9kZIhrXajybcbWkCOT3CLwuO4bbfaX/p3rgm6bsE5uzr6cVV+cseXDGelobmh/heArpbMEUhgIAjPX6cX1hDfk6M6nS2Tyml5PSGwqaKQLG2AcZY3cxxu4C8C0A397i8fuLzx7XajybcW1+DT1+t7SXq1Uy1tOKaw1sfFfm1mAjxbswA3zjq/e64StFWe7vld9jBBR5hKKpuhMKrppMHvt6WpHJFeruTTCxkECBKQpFZjQPDZESOPvXAL6u9WfVw9X5NVN4A5yxXj8mFteQqzNl8srsKkY7W+Bx2lUemTGM9bQinspiYW29rp+/MrcKn8su7eVqlYz1KnP9+nx9cfHLc6sAgP0mCKUCyvwAULeXdKUojwN9cstDjzOCXwEwxxi7usn7DMDzRHSaiE5u9kuI6CQRjRPR+MLCgioDY4zh+vxaaTKYgbGeVmTzDDfqtHCuzK+WNgszwC21er2kK3OrGOv1S19jwuFnYVfnV+v6+Stzq+hr80jXsH4z9pUUQf3ycNpJ+hqThhQBEb1AROer/Hus7LEPYWtv4G2MsWMAHgXwBBG9o9pDjLGnGGPHGWPHu7u7Gxl2idmVNNbWc9gnuVtXDt/E64mLp7N5TC0mcMBM8lDB4jtgIsW4q9MHp50aksd+ya3fcvweJ/oDnoYMhT1drdLewsppqEKGMfbgVu8TkQPA+wHcs8XvCBf/O09EzwA4AeDHjYxrp/DNcp9J4uHARmz/2vwqgL6afvb6whoKDKZa6N1+N9o8jrosvqW1dSyuZUwTDwcAp92G3V0tdRkK+QLD1bk1fPjeTg1GZhz7GjhAvzy3ijuHguoOyAC0VmMPArjEGAtVe5OIWojIz78G8DCA8xqPqcTl2WK800QWX4vbgcGgt3TIWQtmOwgElMvnxnr9dcnDbAfFnLEef12KcXpZqbkxk6EAKPK4Nl975lAyk8P0csoUHrTWiuBxVISFiGiAiJ4rftsL4BUieh3AKQDfY4x9X+MxlbgQjqOvzYNOSfsUb8ab+v14I7JS889dNkm8s5I7+vy4GFmpOXOIb5ayHwRWckefHzeWklhN19avlx8Um2HjK+eOfj9S2XzNFcYlw8kE80NTRcAY+7eMsS9WvBZmjL2n+PUEY+zO4r9DjLHPajmeSi6EV3BooE3Pj9SFQwMBTCys1ZwieHl2Fbu7WqSPd1ZyeDCA1bRivdXCpdlVtHkcUl8dUI3DgwEAwBvh2owF7kGbKcsOAA4PKPI4PxOv6ec2IgqWIpCWVCaP6wtrplQEhwcDKDDgYqQ29//8TLy0KMxEaaGHa1voF2biODwYkPrqgGocGlTm/IUaFcH5mTj2dLdIf/leJWO9rXDZbTUrxvPhOFrdDuySuFMbp2kVweW5VRQYcNCEGx9Xbhdq2PjmVtKYX13HkSHzyWN/XyscNqrJ4svkCrgYWTWlPHr8HnT73TUrxrOhOI4Omk8eTrsNB/r8dcnj8GCbKVKLm1YR8E3SjB5Bf8CDjhYXLszs3MI5G1LkcdSEG5/bYcdYr78mC/jy7Coy+QKODga1G5iBHB5oq2l+zK+kMbuSxhETZMhU4/BgG87P7PwcKZsv4I3ICo6aRB5NrAhWEPA6pb9TvRpEhEMDbTVZOOdCMdgIONhvPkUAKBvf+Zn4jhf62ZkYAHMqRkAJH16dX0Uqk9/R8+dmzGsoAMq5WjyV3XHviitzq8jkCjhiEg+paRXB+Zk4Dva3mS7+yzk0EMCVuVWs53a20M/OxLG/1w+vyxxXS1RyaKANS4kM5lZ2dtXEuVAcQZ85DQVAkUeBAZdmd+YVnA3Fi4aC+TxooPZw6jmTedBNqQhSmTzeCK/g2K6g0UPRjDuHAsjm2Y7CIYwxnAvFTWPdVOPocBAA8Mub0R09f7YoD7MaCjyk8cubsR09f24mjn09raY7KOa8qb8NLrttx/I4OxNHm8eBERMcFANNqgjOhmLIFRju2dVu9FA04827OwAApyaXt302FE1hKZExjXVTjcMDAXiddry2A3mkMnlcmVs1tTwGgl4MtXt3ND8YY3h9OoYjJj0vAQCP0447hwM7mh8A8Pp0DEeHgqYxFJpSEZwuWoV3D5tXEXS1urG3uwWvTSxt+yzfDI6Pdmg9LMNwOWw4tiu4o4X+i5tR5ArM1PIAgBO7O3Bqannbc5PrCwksJTJ486h51wugyOP8TByJ9a3rb+KpLN6IrOC4ieTRlIpgfCqKvd0taG9xGT0UTTmxuxPjU9FtS+dfm1xC0Oc0XcVoJSdGO3FpdgXx5NYVta9NLMFGwHETe4wA8JbdHVhOZLbt4PbapGJMvGWPue4YquTE7k7kCmzb8ND41DIYA96y2zzyaDpFkMkV8OrEEt66t8vooWjOW3Z3YHU9h4vbXDfx2uQy3jzaYYp86K04sbsDjAHjN7b2Cl6dXMbhwQD8HnNctbwZJ4ob2XZe0msTy+jxuzHaaY54+Gbcs6sdNgJOTW7tRb82uQyX3Ya7R4L6DEwHmk4R/PJmFMlMHm8fM78iOFE8J9hqoYeiSdxYSuJek1t7AHD3SBBOO20pj8R6DmduxppCHqOdPnT73XhtYnN5FAoMP72+hLfs6TRNPHwzWt0OHB4M4NVtFOO/XFvEXcNB0zRvAppQEbxybRF2G+G+veZf6ANBL/Z0t+ClS/ObPvPiReW9X72jR69hGYbHacebRzvwoy3k8ZOri8jkC7j/gPnlQUT4lX1d+PHVhU072p2diWNxbR2/eoc6PUBE5237unD6RnTT8GEknsKF8AruN9l6aTpF8PyFOdwz0o42k7v9nIcO9uLViSXEU9Un9gsX57Cnu8U0zdm346GDvbg2v4bJxeo3Tb54cQ5tHoepDgK34qGDvYgls/j5VPW02hcvzsFGwLv2m2vj24yHDvYiX2B46XJ1Y4EbTg++yVzyaCpFcHVuFZfnVvFrR/uNHopuPHywF7kCq+oVxJIZvDaxjAdMZt1sxUMHewEAP7gwe9t7mVwBL16axzsP9MBpb46l8Y793XA5bFXlwRjD98/P4p5d7aZPrODcNRREt99dVR6AMm+GO7ymu4G1OWZ7kX88GwER8OiR2jp3yczdw+0YDHrx9Onp2977zi9nkMkX8Jt3DxowMmMYavfh7pEgnh6fvi1t8keX5rCcyOB9dw8YNDr9aXE78MAdPXj29fBtVehnpmO4Or+G9909ZNDo9MdmI/zakX68eHEey4nMLe+Fokm8cm0R77t7yHTnJU2lCPZ0t+Cj942ix+8xeii6YbMRHn/zMP7l2tIt4RDGGL7x82kcHmzDIRPewLoVHzoxgusLiduKqb5+ahq9bW68Y6w54uGc/+ktI1hOZPD987dawd84NQ2v04733tk8HjSgyCOTL+Dp8VuNp2+OK40WP3CP+RRjo83rP0BEF4ioQETHK977NBFdI6LLRPTuTX6+g4h+SERXi//VNDD72F2D+MxvHNLyI4Tkg28ehsthw+devFp67blzs7g0u4qP3jdq3MAM4r1HB9Duc+IvX7ha8gpO31jGP19ZwIfv3QVHk4SFOG/b24U9XS34/I+uIVs8NJ5aTOBbvwjh/ccGTZ9GW8n+Xj/u3dOBL/1kstTFbTmRwf94ZRIP3NGDYZNcK1FOozP+PJTm9Lc0myeig1DaVB4C8AiAvyKiarlWnwLwImNsDMCLxe8tVKanzYOTv7IHz/xyBi9fnsfi2jr+y3MXcaDXj/cfM591sx1elx3/68MH8LOJJTw9HkJiPYc//u4F9Pjd+Hdv32308HTHZiN8+j1vwtX5NTz58nVkcgX8p++eh8thwyceHDN6eIbw6UffhMW1dfzXf7qEQoHh//zHN5DI5PAHj9xh9NA0gWrt41r1lxC9DOD3GWPjxe8/DQCMsf9a/P4HAD7DGPtZxc9dBvAuxliEiPoBvMwYO7Dd5x0/fpyNj483PO5mIpnJ4f1/9VNcnV+Dz2lHJl/AN07ei7tHmiM7ppJ8geG3//ureHViGW0eB9bWc/jSR47jgTf1Gj00Q2CM4RPfOINnXw8j6HMilsziT95/BI+fGDF6aIbxX567iKd+PFGSxycfHMMnH9xv9LAagohOM8aOV76u1VWCgwBeLfs+VHytkl7GWAQAispg0/QVIjoJ4CQAjIw07+SsF5/Lgb87eR+e/OfriCYy+PB9u0q9a5sRu43wP/7tCXzpJxOYWkrgg8eHTX+FwlYQEf78X9+Jo0MBnJ+J49ePDuDBg82pFDmffvQO7O1uwU+vL+FdB7rxm3eZN6liW4+AiF4AUC3N5o8YY98tPvMybvUIvgDgZ4yxvy1+/2UAzzHGvlXxu2OMsWDZ91HG2LYmquURWFhYWNRO3R4BY+zBOj4vBGC47PshAOEqz80RUX9ZaGjzkk8LCwsLC03QKj3iWQCPE5GbiHYDGANwapPnPlr8+qMAvqvReCwsLCwsNqHR9NH3EVEIwH0Avlc8FAZj7AKAbwJ4A8D3ATzBGMsXf+a/l6Wa/gmAh4joKoCHit9bWFhYWOiIKllDemOdEVhYWFjUzmZnBM1VOWNhYWFhcRuWIrCwsLBocixFYGFhYdHkWIrAwsLCosmR8rCYiBYA3Kjzx7sALKo4HNmx5HErljxuxZLH7cgsk12Msduu15VSETQCEY1XOzVvVix53Iolj1ux5HE7ZpSJFRqysLCwaHIsRWBhYWHR5DSjInjK6AEIhiWPW7HkcSuWPG7HdDJpujMCCwsLC4tbaUaPwMLCwsKiDEsRWFhYWDQ5TaUIiOgRIrpMRNeIqOn7IxPRFBGdI6IzRNR0t/gR0VeIaJ6Izpe91kFEPySiq8X/Nk0vz03k8RkiminOkTNE9B4jx6gnRDRMRC8R0UUiukBEnyi+bro50jSKgIjsAL4A4FEABwF8iIgOGjsqIbifMXaX2fKid8hfA3ik4rVPAXiRMTYG4MXi983CX+N2eQDAXxTnyF2Msed0HpOR5AD8HmPsTQDuBfBEcc8w3RxpGkUA4ASAa4yxCcZYBsA3ADxm8JgsDIQx9mMAyxUvPwbgq8WvvwrgN/Uck5FsIo+mhTEWYYz9ovj1KoCLUHqvm26ONJMiGAQwXfZ9qPhaM8MAPE9Ep4nopNGDEYRexlgEUDYCAD0Gj0cEPk5EZ4uhI+nDIPVARKMA7gbwGkw4R5pJEVCV15o9d/ZtjLFjUMJlTxDRO4wekIVwPAlgL4C7AEQA/JmhozEAImoF8C0An2SMrRg9Hi1oJkUQAjBc9v0QgLBBYxECxli4+N95AM9ACZ81O3NE1A8Axf/OGzweQ2GMzTHG8oyxAoAvocnmCBE5oSiBrzHGvl182XRzpJkUwc8BjBHRbiJyAXgcwLMGj8kwiKiFiPz8awAPAzi/9U81Bc8C+Gjx648C+K6BYzEcvuEVeR+aaI4QEQH4MoCLjLE/L3vLdHOkqSqLi6lvfwnADuArjLHPGjsi4yCiPVC8AABwAPj/mk0eRPR1AO+Ccq3wHID/A8B3AHwTwAiAmwA+wBhrigPUTeTxLihhIQZgCsDv8Pi42SGitwP4CYBzAArFl/8QyjmBqeZIUykCCwsLC4vbaabQkIWFhYVFFSxFYGFhYdHkWIrAwsLCosmxFIGFhYVFk2MpAgsLC4smx1IEFhYWFk2OpQgsLCwsmpz/H5gbhvFNH1jAAAAAAElFTkSuQmCC\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "GuessSMT = 5000 #we expect infants to have a spontaneous ISI of 450 ms\n", + "GuessFreq = 1000/GuessSMT\n", + "guess_freq = GuessFreq / fps\n", + "guess_phase = 5\n", + "guess_amp = 10\n", + "guess_mean = 0\n", + "\n", + "#the function that we want to fit to our data. \n", + "#basically a sine wave where we optimize everything - especially frequency.\n", + "def optimize_func(x_data, amp, freq, phase, mean):\n", + " return amp * np.sin((twopi * freq) * x_data + phase) + mean\n", + "\n", + "data_first_guess = optimize_func(x_data, guess_amp, guess_freq, guess_phase, guess_mean)\n", + "\n", + "print(guess_amp)\n", + "print(guess_freq)\n", + "plt.figure(figsize=(6, 4),)\n", + "plt.plot(x_time, data_first_guess, label = 'First guess')\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "binwidth =2\n", + "targets = [400, 500, 600, 700]\n", + "sum(targets[2:2+binwidth])" + ] + } + ], + "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.12" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +}