diff --git a/docs/algorithms/FilterAlgorithm.ipynb b/docs/algorithms/FilterAlgorithm.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..657fb080fab3027514613f820ff0fb0e849a0bfb --- /dev/null +++ b/docs/algorithms/FilterAlgorithm.ipynb @@ -0,0 +1,2628 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "from geomagio.edge import EdgeFactory\n", + "from geomagio.algorithm import Algorithm\n", + "from obspy.core import UTCDateTime, Stream, Stats\n", + "import numpy as np\n", + "import scipy as sp\n", + "import scipy.linalg as spl\n", + "import scipy.signal as sps\n", + "import matplotlib.pyplot as pl\n", + "import datetime as dt\n", + "import json" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "class FilterAlgorithm(Algorithm):\n", + " \"\"\"Filter Algorithm\"\"\"" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "# excerpted from https://github.com/scipy/scipy/issues/7725#issuecomment-322094749\n", + "sample_rate = 10.0\n", + "cutoff = 0.2\n", + "width = 0.3\n", + "stop_db = 50.0\n", + "stop_db = np.abs(stop_db)\n", + "\n", + "# Convert to normalized frequencies\n", + "nyq = 0.5*sample_rate\n", + "cutoff = cutoff / nyq\n", + "width = width / nyq\n", + "\n", + "numtaps, beta = sps.kaiserord(ripple=stop_db, width=width)\n", + "numtaps |= 1\n", + "taps = sps.firwin(numtaps, cutoff, window=('kaiser', beta), scale=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "99" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "numtaps" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "4.533514120981248" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "beta" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([-4.52198796e-05, -1.11619355e-04, -2.01483397e-04, -3.16506684e-04,\n", + " -4.57626335e-04, -6.24859943e-04, -8.17155093e-04, -1.03225668e-03,\n", + " -1.26659826e-03, -1.51522326e-03, -1.77174156e-03, -2.02832596e-03,\n", + " -2.27575221e-03, -2.50348516e-03, -2.69981225e-03, -2.85202413e-03,\n", + " -2.94664077e-03, -2.96967983e-03, -2.90696256e-03, -2.74445127e-03,\n", + " -2.46861053e-03, -2.06678395e-03, -1.52757659e-03, -8.41232992e-04,\n", + " 8.97254861e-19, 1.00153625e-03, 2.16614984e-03, 3.49372106e-03,\n", + " 4.98103797e-03, 6.62166161e-03, 8.40586129e-03, 1.03206248e-02,\n", + " 1.23497468e-02, 1.44739951e-02, 1.66713562e-02, 1.89173528e-02,\n", + " 2.11854322e-02, 2.34474143e-02, 2.56739920e-02, 2.78352727e-02,\n", + " 2.99013480e-02, 3.18428788e-02, 3.36316814e-02, 3.52413005e-02,\n", + " 3.66475558e-02, 3.78290461e-02, 3.87676015e-02, 3.94486690e-02,\n", + " 3.98616244e-02, 4.00000000e-02, 3.98616244e-02, 3.94486690e-02,\n", + " 3.87676015e-02, 3.78290461e-02, 3.66475558e-02, 3.52413005e-02,\n", + " 3.36316814e-02, 3.18428788e-02, 2.99013480e-02, 2.78352727e-02,\n", + " 2.56739920e-02, 2.34474143e-02, 2.11854322e-02, 1.89173528e-02,\n", + " 1.66713562e-02, 1.44739951e-02, 1.23497468e-02, 1.03206248e-02,\n", + " 8.40586129e-03, 6.62166161e-03, 4.98103797e-03, 3.49372106e-03,\n", + " 2.16614984e-03, 1.00153625e-03, 8.97254861e-19, -8.41232992e-04,\n", + " -1.52757659e-03, -2.06678395e-03, -2.46861053e-03, -2.74445127e-03,\n", + " -2.90696256e-03, -2.96967983e-03, -2.94664077e-03, -2.85202413e-03,\n", + " -2.69981225e-03, -2.50348516e-03, -2.27575221e-03, -2.02832596e-03,\n", + " -1.77174156e-03, -1.51522326e-03, -1.26659826e-03, -1.03225668e-03,\n", + " -8.17155093e-04, -6.24859943e-04, -4.57626335e-04, -3.16506684e-04,\n", + " -2.01483397e-04, -1.11619355e-04, -4.52198796e-05])" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "taps" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1.0034504636745052" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sum(taps)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "taps=taps/sum(taps)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([-4.50643866e-05, -1.11235541e-04, -2.00790576e-04, -3.15418344e-04,\n", + " -4.56052742e-04, -6.22711300e-04, -8.14345224e-04, -1.02870717e-03,\n", + " -1.26224294e-03, -1.51001301e-03, -1.76564925e-03, -2.02135136e-03,\n", + " -2.26792681e-03, -2.49487668e-03, -2.69052868e-03, -2.84221717e-03,\n", + " -2.93650846e-03, -2.95946829e-03, -2.89696669e-03, -2.73501420e-03,\n", + " -2.46012197e-03, -2.05967711e-03, -1.52232387e-03, -8.38340329e-04,\n", + " 8.94169561e-19, 9.98092368e-04, 2.15870132e-03, 3.48170755e-03,\n", + " 4.96391018e-03, 6.59889237e-03, 8.37695691e-03, 1.02851364e-02,\n", + " 1.23072809e-02, 1.44242249e-02, 1.66140301e-02, 1.88523036e-02,\n", + " 2.11125840e-02, 2.33667880e-02, 2.55857094e-02, 2.77395583e-02,\n", + " 2.97985293e-02, 3.17333839e-02, 3.35160355e-02, 3.51201198e-02,\n", + " 3.65215396e-02, 3.76989672e-02, 3.86342953e-02, 3.93130209e-02,\n", + " 3.97245562e-02, 3.98624560e-02, 3.97245562e-02, 3.93130209e-02,\n", + " 3.86342953e-02, 3.76989672e-02, 3.65215396e-02, 3.51201198e-02,\n", + " 3.35160355e-02, 3.17333839e-02, 2.97985293e-02, 2.77395583e-02,\n", + " 2.55857094e-02, 2.33667880e-02, 2.11125840e-02, 1.88523036e-02,\n", + " 1.66140301e-02, 1.44242249e-02, 1.23072809e-02, 1.02851364e-02,\n", + " 8.37695691e-03, 6.59889237e-03, 4.96391018e-03, 3.48170755e-03,\n", + " 2.15870132e-03, 9.98092368e-04, 8.94169561e-19, -8.38340329e-04,\n", + " -1.52232387e-03, -2.05967711e-03, -2.46012197e-03, -2.73501420e-03,\n", + " -2.89696669e-03, -2.95946829e-03, -2.93650846e-03, -2.84221717e-03,\n", + " -2.69052868e-03, -2.49487668e-03, -2.26792681e-03, -2.02135136e-03,\n", + " -1.76564925e-03, -1.51001301e-03, -1.26224294e-03, -1.02870717e-03,\n", + " -8.14345224e-04, -6.22711300e-04, -4.56052742e-04, -3.15418344e-04,\n", + " -2.00790576e-04, -1.11235541e-04, -4.50643866e-05])" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "taps" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[<matplotlib.lines.Line2D at 0x1c1fa991d0>]" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 432x288 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "pl.plot(taps)" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [], + "source": [ + "taps2 = sps.firwin2(99, freq=[0, 0.2, 0.5, 1.0], gain=[0, 0.1, -50, -100], nyq=1.0)" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 8.14655296e-04, -4.88496571e-04, 2.47779380e-04, -6.97162361e-04,\n", + " -2.32774642e-04, -1.70497700e-03, 3.62563309e-04, 8.25168359e-05,\n", + " 1.99279698e-03, -2.00925634e-04, 2.72560013e-03, 2.00171435e-04,\n", + " 8.92520500e-04, -5.58570542e-03, -1.19015530e-03, -4.07222950e-03,\n", + " 1.51424738e-03, -4.09568224e-03, 8.82481077e-03, 5.53343473e-03,\n", + " 1.16809072e-02, -6.95661341e-03, 3.41798666e-03, -1.24754116e-02,\n", + " -5.31625820e-03, -2.98922022e-02, 5.68526557e-03, 2.13981829e-03,\n", + " 3.47979706e-02, -8.35061312e-04, 4.62549002e-02, 3.96166432e-03,\n", + " 1.30966319e-02, -9.37730238e-02, -2.38806794e-02, -7.21394330e-02,\n", + " 2.48170724e-02, -7.17521764e-02, 1.75363781e-01, 1.22870189e-01,\n", + " 2.72272349e-01, -1.73284321e-01, 9.48255174e-02, -4.59548774e-01,\n", + " -2.68274135e-01, -1.89051302e+00, 5.33500777e-01, 4.60504162e-01,\n", + " 2.37892232e+01, -4.49762268e+01, 2.37892232e+01, 4.60504162e-01,\n", + " 5.33500777e-01, -1.89051302e+00, -2.68274135e-01, -4.59548774e-01,\n", + " 9.48255174e-02, -1.73284321e-01, 2.72272349e-01, 1.22870189e-01,\n", + " 1.75363781e-01, -7.17521764e-02, 2.48170724e-02, -7.21394330e-02,\n", + " -2.38806794e-02, -9.37730238e-02, 1.30966319e-02, 3.96166432e-03,\n", + " 4.62549002e-02, -8.35061312e-04, 3.47979706e-02, 2.13981829e-03,\n", + " 5.68526557e-03, -2.98922022e-02, -5.31625820e-03, -1.24754116e-02,\n", + " 3.41798666e-03, -6.95661341e-03, 1.16809072e-02, 5.53343473e-03,\n", + " 8.82481077e-03, -4.09568224e-03, 1.51424738e-03, -4.07222950e-03,\n", + " -1.19015530e-03, -5.58570542e-03, 8.92520500e-04, 2.00171435e-04,\n", + " 2.72560013e-03, -2.00925634e-04, 1.99279698e-03, 8.25168359e-05,\n", + " 3.62563309e-04, -1.70497700e-03, -2.32774642e-04, -6.97162361e-04,\n", + " 2.47779380e-04, -4.88496571e-04, 8.14655296e-04])" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "taps2" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[<matplotlib.lines.Line2D at 0x1c228a46d8>]" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 432x288 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "pl.plot(taps2)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "w, h = sps.freqz(taps2)" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/aclaycomb/anaconda3/envs/geomagenv36/lib/python3.6/site-packages/matplotlib/cbook/deprecation.py:107: MatplotlibDeprecationWarning: Adding an axes using the same arguments as a previous axes currently reuses the earlier instance. In a future version, a new instance will always be created and returned. Meanwhile, this warning can be suppressed, and the future behavior ensured, by passing a unique label to each axes instance.\n", + " warnings.warn(message, mplDeprecation, stacklevel=1)\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 432x288 with 2 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "fig = pl.figure()\n", + "pl.title('Digital filter frequency response')\n", + "ax1 = fig.add_subplot(111)\n", + "pl.semilogy(w, np.abs(h), 'b')\n", + "pl.ylabel('Amplitude (dB)', color='b')\n", + "pl.xlabel('Frequency (rad/sample)')\n", + "ax2 = ax1.twinx()\n", + "angles = np.unwrap(np.angle(h))\n", + "pl.plot(w, angles, 'g')\n", + "pl.ylabel('Angle (radians)', color='g')\n", + "pl.grid()\n", + "pl.axis('tight')\n", + "pl.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'linspace' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m<ipython-input-11-aa5ebe4e8c59>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mw\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mlinspace\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m0.0\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpi\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m512\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0mgd_samples\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mnumtaps\u001b[0m\u001b[0;34m/\u001b[0m\u001b[0;36m2\u001b[0m \u001b[0;34m-\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mones_like\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mw\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0mgd_time\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mnumtaps\u001b[0m\u001b[0;34m/\u001b[0m\u001b[0;36m2\u001b[0m \u001b[0;34m-\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0mgd_\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mNameError\u001b[0m: name 'linspace' is not defined" + ] + } + ], + "source": [ + "w = linspace(0.0,np.pi,512)\n", + "gd_samples = (numtaps/2 - 1)*ones_like(w)\n", + "gd_time = (numtaps/2 - 1)\n", + "gd_" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": {}, + "outputs": [], + "source": [ + "a,b = sps.iirdesign(cutoff, cutoff+width, gpass=3.0, gstop=50.0, analog=False, ftype='butter')" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([2.94794932e-09, 2.06356452e-08, 6.19069356e-08, 1.03178226e-07,\n", + " 1.03178226e-07, 6.19069356e-08, 2.06356452e-08, 2.94794932e-09])" + ] + }, + "execution_count": 47, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 1. , -6.43513372, 17.7687487 , -27.28864598,\n", + " 25.17318559, -13.94787923, 4.29785921, -0.56813419])" + ] + }, + "execution_count": 48, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "b" + ] + }, + { + "cell_type": "code", + "execution_count": 85, + "metadata": {}, + "outputs": [], + "source": [ + "ts = np.asarray([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "y = np.asarray([0, 0, 0, 0, 0, 0, 0, 0])" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": {}, + "outputs": [], + "source": [ + "tout, yout = sps.dimpulse((a,b,0.1), t=np.arange(0,99,0.1))" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1. ,\n", + " 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2. , 2.1,\n", + " 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9, 3. , 3.1, 3.2,\n", + " 3.3, 3.4, 3.5, 3.6, 3.7, 3.8, 3.9, 4. , 4.1, 4.2, 4.3,\n", + " 4.4, 4.5, 4.6, 4.7, 4.8, 4.9, 5. , 5.1, 5.2, 5.3, 5.4,\n", + " 5.5, 5.6, 5.7, 5.8, 5.9, 6. , 6.1, 6.2, 6.3, 6.4, 6.5,\n", + " 6.6, 6.7, 6.8, 6.9, 7. , 7.1, 7.2, 7.3, 7.4, 7.5, 7.6,\n", + " 7.7, 7.8, 7.9, 8. , 8.1, 8.2, 8.3, 8.4, 8.5, 8.6, 8.7,\n", + " 8.8, 8.9, 9. , 9.1, 9.2, 9.3, 9.4, 9.5, 9.6, 9.7, 9.8,\n", + " 9.9, 10. , 10.1, 10.2, 10.3, 10.4, 10.5, 10.6, 10.7, 10.8, 10.9,\n", + " 11. , 11.1, 11.2, 11.3, 11.4, 11.5, 11.6, 11.7, 11.8, 11.9, 12. ,\n", + " 12.1, 12.2, 12.3, 12.4, 12.5, 12.6, 12.7, 12.8, 12.9, 13. , 13.1,\n", + " 13.2, 13.3, 13.4, 13.5, 13.6, 13.7, 13.8, 13.9, 14. , 14.1, 14.2,\n", + " 14.3, 14.4, 14.5, 14.6, 14.7, 14.8, 14.9, 15. , 15.1, 15.2, 15.3,\n", + " 15.4, 15.5, 15.6, 15.7, 15.8, 15.9, 16. , 16.1, 16.2, 16.3, 16.4,\n", + " 16.5, 16.6, 16.7, 16.8, 16.9, 17. , 17.1, 17.2, 17.3, 17.4, 17.5,\n", + " 17.6, 17.7, 17.8, 17.9, 18. , 18.1, 18.2, 18.3, 18.4, 18.5, 18.6,\n", + " 18.7, 18.8, 18.9, 19. , 19.1, 19.2, 19.3, 19.4, 19.5, 19.6, 19.7,\n", + " 19.8, 19.9, 20. , 20.1, 20.2, 20.3, 20.4, 20.5, 20.6, 20.7, 20.8,\n", + " 20.9, 21. , 21.1, 21.2, 21.3, 21.4, 21.5, 21.6, 21.7, 21.8, 21.9,\n", + " 22. , 22.1, 22.2, 22.3, 22.4, 22.5, 22.6, 22.7, 22.8, 22.9, 23. ,\n", + " 23.1, 23.2, 23.3, 23.4, 23.5, 23.6, 23.7, 23.8, 23.9, 24. , 24.1,\n", + " 24.2, 24.3, 24.4, 24.5, 24.6, 24.7, 24.8, 24.9, 25. , 25.1, 25.2,\n", + " 25.3, 25.4, 25.5, 25.6, 25.7, 25.8, 25.9, 26. , 26.1, 26.2, 26.3,\n", + " 26.4, 26.5, 26.6, 26.7, 26.8, 26.9, 27. , 27.1, 27.2, 27.3, 27.4,\n", + " 27.5, 27.6, 27.7, 27.8, 27.9, 28. , 28.1, 28.2, 28.3, 28.4, 28.5,\n", + " 28.6, 28.7, 28.8, 28.9, 29. , 29.1, 29.2, 29.3, 29.4, 29.5, 29.6,\n", + " 29.7, 29.8, 29.9, 30. , 30.1, 30.2, 30.3, 30.4, 30.5, 30.6, 30.7,\n", + " 30.8, 30.9, 31. , 31.1, 31.2, 31.3, 31.4, 31.5, 31.6, 31.7, 31.8,\n", + " 31.9, 32. , 32.1, 32.2, 32.3, 32.4, 32.5, 32.6, 32.7, 32.8, 32.9,\n", + " 33. , 33.1, 33.2, 33.3, 33.4, 33.5, 33.6, 33.7, 33.8, 33.9, 34. ,\n", + " 34.1, 34.2, 34.3, 34.4, 34.5, 34.6, 34.7, 34.8, 34.9, 35. , 35.1,\n", + " 35.2, 35.3, 35.4, 35.5, 35.6, 35.7, 35.8, 35.9, 36. , 36.1, 36.2,\n", + " 36.3, 36.4, 36.5, 36.6, 36.7, 36.8, 36.9, 37. , 37.1, 37.2, 37.3,\n", + " 37.4, 37.5, 37.6, 37.7, 37.8, 37.9, 38. , 38.1, 38.2, 38.3, 38.4,\n", + " 38.5, 38.6, 38.7, 38.8, 38.9, 39. , 39.1, 39.2, 39.3, 39.4, 39.5,\n", + " 39.6, 39.7, 39.8, 39.9, 40. , 40.1, 40.2, 40.3, 40.4, 40.5, 40.6,\n", + " 40.7, 40.8, 40.9, 41. , 41.1, 41.2, 41.3, 41.4, 41.5, 41.6, 41.7,\n", + " 41.8, 41.9, 42. , 42.1, 42.2, 42.3, 42.4, 42.5, 42.6, 42.7, 42.8,\n", + " 42.9, 43. , 43.1, 43.2, 43.3, 43.4, 43.5, 43.6, 43.7, 43.8, 43.9,\n", + " 44. , 44.1, 44.2, 44.3, 44.4, 44.5, 44.6, 44.7, 44.8, 44.9, 45. ,\n", + " 45.1, 45.2, 45.3, 45.4, 45.5, 45.6, 45.7, 45.8, 45.9, 46. , 46.1,\n", + " 46.2, 46.3, 46.4, 46.5, 46.6, 46.7, 46.8, 46.9, 47. , 47.1, 47.2,\n", + " 47.3, 47.4, 47.5, 47.6, 47.7, 47.8, 47.9, 48. , 48.1, 48.2, 48.3,\n", + " 48.4, 48.5, 48.6, 48.7, 48.8, 48.9, 49. , 49.1, 49.2, 49.3, 49.4,\n", + " 49.5, 49.6, 49.7, 49.8, 49.9, 50. , 50.1, 50.2, 50.3, 50.4, 50.5,\n", + " 50.6, 50.7, 50.8, 50.9, 51. , 51.1, 51.2, 51.3, 51.4, 51.5, 51.6,\n", + " 51.7, 51.8, 51.9, 52. , 52.1, 52.2, 52.3, 52.4, 52.5, 52.6, 52.7,\n", + " 52.8, 52.9, 53. , 53.1, 53.2, 53.3, 53.4, 53.5, 53.6, 53.7, 53.8,\n", + " 53.9, 54. , 54.1, 54.2, 54.3, 54.4, 54.5, 54.6, 54.7, 54.8, 54.9,\n", + " 55. , 55.1, 55.2, 55.3, 55.4, 55.5, 55.6, 55.7, 55.8, 55.9, 56. ,\n", + " 56.1, 56.2, 56.3, 56.4, 56.5, 56.6, 56.7, 56.8, 56.9, 57. , 57.1,\n", + " 57.2, 57.3, 57.4, 57.5, 57.6, 57.7, 57.8, 57.9, 58. , 58.1, 58.2,\n", + " 58.3, 58.4, 58.5, 58.6, 58.7, 58.8, 58.9, 59. , 59.1, 59.2, 59.3,\n", + " 59.4, 59.5, 59.6, 59.7, 59.8, 59.9, 60. , 60.1, 60.2, 60.3, 60.4,\n", + " 60.5, 60.6, 60.7, 60.8, 60.9, 61. , 61.1, 61.2, 61.3, 61.4, 61.5,\n", + " 61.6, 61.7, 61.8, 61.9, 62. , 62.1, 62.2, 62.3, 62.4, 62.5, 62.6,\n", + " 62.7, 62.8, 62.9, 63. , 63.1, 63.2, 63.3, 63.4, 63.5, 63.6, 63.7,\n", + " 63.8, 63.9, 64. , 64.1, 64.2, 64.3, 64.4, 64.5, 64.6, 64.7, 64.8,\n", + " 64.9, 65. , 65.1, 65.2, 65.3, 65.4, 65.5, 65.6, 65.7, 65.8, 65.9,\n", + " 66. , 66.1, 66.2, 66.3, 66.4, 66.5, 66.6, 66.7, 66.8, 66.9, 67. ,\n", + " 67.1, 67.2, 67.3, 67.4, 67.5, 67.6, 67.7, 67.8, 67.9, 68. , 68.1,\n", + " 68.2, 68.3, 68.4, 68.5, 68.6, 68.7, 68.8, 68.9, 69. , 69.1, 69.2,\n", + " 69.3, 69.4, 69.5, 69.6, 69.7, 69.8, 69.9, 70. , 70.1, 70.2, 70.3,\n", + " 70.4, 70.5, 70.6, 70.7, 70.8, 70.9, 71. , 71.1, 71.2, 71.3, 71.4,\n", + " 71.5, 71.6, 71.7, 71.8, 71.9, 72. , 72.1, 72.2, 72.3, 72.4, 72.5,\n", + " 72.6, 72.7, 72.8, 72.9, 73. , 73.1, 73.2, 73.3, 73.4, 73.5, 73.6,\n", + " 73.7, 73.8, 73.9, 74. , 74.1, 74.2, 74.3, 74.4, 74.5, 74.6, 74.7,\n", + " 74.8, 74.9, 75. , 75.1, 75.2, 75.3, 75.4, 75.5, 75.6, 75.7, 75.8,\n", + " 75.9, 76. , 76.1, 76.2, 76.3, 76.4, 76.5, 76.6, 76.7, 76.8, 76.9,\n", + " 77. , 77.1, 77.2, 77.3, 77.4, 77.5, 77.6, 77.7, 77.8, 77.9, 78. ,\n", + " 78.1, 78.2, 78.3, 78.4, 78.5, 78.6, 78.7, 78.8, 78.9, 79. , 79.1,\n", + " 79.2, 79.3, 79.4, 79.5, 79.6, 79.7, 79.8, 79.9, 80. , 80.1, 80.2,\n", + " 80.3, 80.4, 80.5, 80.6, 80.7, 80.8, 80.9, 81. , 81.1, 81.2, 81.3,\n", + " 81.4, 81.5, 81.6, 81.7, 81.8, 81.9, 82. , 82.1, 82.2, 82.3, 82.4,\n", + " 82.5, 82.6, 82.7, 82.8, 82.9, 83. , 83.1, 83.2, 83.3, 83.4, 83.5,\n", + " 83.6, 83.7, 83.8, 83.9, 84. , 84.1, 84.2, 84.3, 84.4, 84.5, 84.6,\n", + " 84.7, 84.8, 84.9, 85. , 85.1, 85.2, 85.3, 85.4, 85.5, 85.6, 85.7,\n", + " 85.8, 85.9, 86. , 86.1, 86.2, 86.3, 86.4, 86.5, 86.6, 86.7, 86.8,\n", + " 86.9, 87. , 87.1, 87.2, 87.3, 87.4, 87.5, 87.6, 87.7, 87.8, 87.9,\n", + " 88. , 88.1, 88.2, 88.3, 88.4, 88.5, 88.6, 88.7, 88.8, 88.9, 89. ,\n", + " 89.1, 89.2, 89.3, 89.4, 89.5, 89.6, 89.7, 89.8, 89.9, 90. , 90.1,\n", + " 90.2, 90.3, 90.4, 90.5, 90.6, 90.7, 90.8, 90.9, 91. , 91.1, 91.2,\n", + " 91.3, 91.4, 91.5, 91.6, 91.7, 91.8, 91.9, 92. , 92.1, 92.2, 92.3,\n", + " 92.4, 92.5, 92.6, 92.7, 92.8, 92.9, 93. , 93.1, 93.2, 93.3, 93.4,\n", + " 93.5, 93.6, 93.7, 93.8, 93.9, 94. , 94.1, 94.2, 94.3, 94.4, 94.5,\n", + " 94.6, 94.7, 94.8, 94.9, 95. , 95.1, 95.2, 95.3, 95.4, 95.5, 95.6,\n", + " 95.7, 95.8, 95.9, 96. , 96.1, 96.2, 96.3, 96.4, 96.5, 96.6, 96.7,\n", + " 96.8, 96.9, 97. , 97.1, 97.2, 97.3, 97.4, 97.5, 97.6, 97.7, 97.8,\n", + " 97.9, 98. , 98.1, 98.2, 98.3, 98.4, 98.5, 98.6, 98.7, 98.8, 98.9])" + ] + }, + "execution_count": 58, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tout" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(array([[ 2.94794932e-09],\n", + " [ 3.96060933e-08],\n", + " [ 2.64396071e-07],\n", + " [ 1.18129713e-06],\n", + " [ 4.01358323e-06],\n", + " [ 1.11587968e-05],\n", + " [ 2.66326925e-05],\n", + " [ 5.64174864e-05],\n", + " [ 1.08660984e-04],\n", + " [ 1.93701617e-04],\n", + " [ 3.23916056e-04],\n", + " [ 5.13401949e-04],\n", + " [ 7.77519340e-04],\n", + " [ 1.13232135e-03],\n", + " [ 1.59390845e-03],\n", + " [ 2.17774164e-03],\n", + " [ 2.89794922e-03],\n", + " [ 3.76665894e-03],\n", + " [ 4.79338394e-03],\n", + " [ 5.98448654e-03],\n", + " [ 7.34273901e-03],\n", + " [ 8.86699534e-03],\n", + " [ 1.05519834e-02],\n", + " [ 1.23882219e-02],\n", + " [ 1.43620611e-02],\n", + " [ 1.64558455e-02],\n", + " [ 1.86481877e-02],\n", + " [ 2.09143458e-02],\n", + " [ 2.32266888e-02],\n", + " [ 2.55552376e-02],\n", + " [ 2.78682631e-02],\n", + " [ 3.01329264e-02],\n", + " [ 3.23159424e-02],\n", + " [ 3.43842520e-02],\n", + " [ 3.63056839e-02],\n", + " [ 3.80495940e-02],\n", + " [ 3.95874653e-02],\n", + " [ 4.08934583e-02],\n", + " [ 4.19448999e-02],\n", + " [ 4.27227032e-02],\n", + " [ 4.32117095e-02],\n", + " [ 4.34009496e-02],\n", + " [ 4.32838207e-02],\n", + " [ 4.28581775e-02],\n", + " [ 4.21263386e-02],\n", + " [ 4.10950117e-02],\n", + " [ 3.97751397e-02],\n", + " [ 3.81816753e-02],\n", + " [ 3.63332887e-02],\n", + " [ 3.42520177e-02],\n", + " [ 3.19628675e-02],\n", + " [ 2.94933702e-02],\n", + " [ 2.68731118e-02],\n", + " [ 2.41332378e-02],\n", + " [ 2.13059465e-02],\n", + " [ 1.84239784e-02],\n", + " [ 1.55201124e-02],\n", + " [ 1.26266753e-02],\n", + " [ 9.77507452e-03],\n", + " [ 6.99535909e-03],\n", + " [ 4.31581716e-03],\n", + " [ 1.76261390e-03],\n", + " [-6.40524902e-04],\n", + " [-2.87258037e-03],\n", + " [-4.91545668e-03],\n", + " [-6.75414426e-03],\n", + " [-8.37682960e-03],\n", + " [-9.77495188e-03],\n", + " [-1.09432079e-02],\n", + " [-1.18795071e-02],\n", + " [-1.25848796e-02],\n", + " [-1.30633409e-02],\n", + " [-1.33217163e-02],\n", + " [-1.33694309e-02],\n", + " [-1.32182690e-02],\n", + " [-1.28821076e-02],\n", + " [-1.23766312e-02],\n", + " [-1.17190299e-02],\n", + " [-1.09276904e-02],\n", + " [-1.00218806e-02],\n", + " [-9.02143675e-03],\n", + " [-7.94645498e-03],\n", + " [-6.81699371e-03],\n", + " [-5.65278982e-03],\n", + " [-4.47299281e-03],\n", + " [-3.29591998e-03],\n", + " [-2.13883545e-03],\n", + " [-1.01775527e-03],\n", + " [ 5.27197842e-05],\n", + " [ 1.05954238e-03],\n", + " [ 1.99132712e-03],\n", + " [ 2.83842920e-03],\n", + " [ 3.59299339e-03],\n", + " [ 4.24897413e-03],\n", + " [ 4.80212789e-03],\n", + " [ 5.24997915e-03],\n", + " [ 5.59176197e-03],\n", + " [ 5.82833918e-03],\n", + " [ 5.96210153e-03],\n", + " [ 5.99684934e-03],\n", + " [ 5.93765939e-03],\n", + " [ 5.79073967e-03],\n", + " [ 5.56327494e-03],\n", + " [ 5.26326581e-03],\n", + " [ 4.89936414e-03],\n", + " [ 4.48070743e-03],\n", + " [ 4.01675474e-03],\n", + " [ 3.51712656e-03],\n", + " [ 2.99145080e-03],\n", + " [ 2.44921696e-03],\n", + " [ 1.89964019e-03],\n", + " [ 1.35153682e-03],\n", + " [ 8.13212675e-04],\n", + " [ 2.92365040e-04],\n", + " [-2.04000784e-04],\n", + " [-6.69639970e-04],\n", + " [-1.09912141e-03],\n", + " [-1.48786574e-03],\n", + " [-1.83216834e-03],\n", + " [-2.12920787e-03],\n", + " [-2.37704084e-03],\n", + " [-2.57458314e-03],\n", + " [-2.72157956e-03],\n", + " [-2.81856229e-03],\n", + " [-2.86679964e-03],\n", + " [-2.86823646e-03],\n", + " [-2.82542733e-03],\n", + " [-2.74146424e-03],\n", + " [-2.61989987e-03],\n", + " [-2.46466810e-03],\n", + " [-2.28000299e-03],\n", + " [-2.07035760e-03],\n", + " [-1.84032386e-03],\n", + " [-1.59455473e-03],\n", + " [-1.33768959e-03],\n", + " [-1.07428400e-03],\n", + " [-8.08744442e-04],\n", + " [-5.45269013e-04],\n", + " [-2.87794472e-04],\n", + " [-3.99501844e-05],\n", + " [ 1.94980718e-04],\n", + " [ 4.14092759e-04],\n", + " [ 6.14882052e-04],\n", + " [ 7.95262775e-04],\n", + " [ 9.53576344e-04],\n", + " [ 1.08859355e-03],\n", + " [ 1.19950998e-03],\n", + " [ 1.28593520e-03],\n", + " [ 1.34787619e-03],\n", + " [ 1.38571553e-03],\n", + " [ 1.40018510e-03],\n", + " [ 1.39233579e-03],\n", + " [ 1.36350398e-03],\n", + " [ 1.31527553e-03],\n", + " [ 1.24944779e-03],\n", + " [ 1.16799051e-03],\n", + " [ 1.07300624e-03],\n", + " [ 9.66690824e-04],\n", + " [ 8.51294582e-04],\n", + " [ 7.29084826e-04],\n", + " [ 6.02310123e-04],\n", + " [ 4.73166790e-04],\n", + " [ 3.43768025e-04],\n", + " [ 2.16115980e-04],\n", + " [ 9.20770665e-05],\n", + " [-2.66393191e-05],\n", + " [-1.38498498e-04],\n", + " [-2.42154573e-04],\n", + " [-3.36460825e-04],\n", + " [-4.20476491e-04],\n", + " [-4.93470008e-04],\n", + " [-5.54918875e-04],\n", + " [-6.04506311e-04],\n", + " [-6.42114930e-04],\n", + " [-6.67817713e-04],\n", + " [-6.81866533e-04],\n", + " [-6.84678570e-04],\n", + " [-6.76820917e-04],\n", + " [-6.58993729e-04],\n", + " [-6.32012236e-04],\n", + " [-5.96787978e-04],\n", + " [-5.54309568e-04],\n", + " [-5.05623331e-04],\n", + " [-4.51814094e-04],\n", + " [-3.93986441e-04],\n", + " [-3.33246677e-04],\n", + " [-2.70685746e-04],\n", + " [-2.07363313e-04],\n", + " [-1.44293193e-04],\n", + " [-8.24302691e-05],\n", + " [-2.26590366e-05],\n", + " [ 3.42161603e-05],\n", + " [ 8.74791253e-05],\n", + " [ 1.36508020e-04],\n", + " [ 1.80779789e-04],\n", + " [ 2.19872827e-04],\n", + " [ 2.53467942e-04],\n", + " [ 2.81347699e-04],\n", + " [ 3.03394228e-04],\n", + " [ 3.19585634e-04],\n", + " [ 3.29991116e-04],\n", + " [ 3.34764961e-04],\n", + " [ 3.34139556e-04],\n", + " [ 3.28417578e-04],\n", + " [ 3.17963528e-04],\n", + " [ 3.03194783e-04],\n", + " [ 2.84572312e-04],\n", + " [ 2.62591231e-04],\n", + " [ 2.37771353e-04],\n", + " [ 2.10647857e-04],\n", + " [ 1.81762242e-04],\n", + " [ 1.51653671e-04],\n", + " [ 1.20850814e-04],\n", + " [ 8.98643029e-05],\n", + " [ 5.91798730e-05],\n", + " [ 2.92522523e-05],\n", + " [ 4.99865603e-07],\n", + " [-2.66996204e-05],\n", + " [-5.20128826e-05],\n", + " [-7.51536523e-05],\n", + " [-9.58845564e-05],\n", + " [-1.14018107e-04],\n", + " [-1.29416873e-04],\n", + " [-1.41992872e-04],\n", + " [-1.51706237e-04],\n", + " [-1.58563217e-04],\n", + " [-1.62613577e-04],\n", + " [-1.63947474e-04],\n", + " [-1.62691876e-04],\n", + " [-1.59006617e-04],\n", + " [-1.53080161e-04],\n", + " [-1.45125149e-04],\n", + " [-1.35373825e-04],\n", + " [-1.24073408e-04],\n", + " [-1.11481480e-04],\n", + " [-9.78614699e-05],\n", + " [-8.34782912e-05],\n", + " [-6.85941958e-05],\n", + " [-5.34648902e-05],\n", + " [-3.83359659e-05],\n", + " [-2.34396771e-05],\n", + " [-8.99209963e-06],\n", + " [ 4.80930904e-06],\n", + " [ 1.77877303e-05],\n", + " [ 2.97885790e-05],\n", + " [ 4.06806698e-05],\n", + " [ 5.03569613e-05],\n", + " [ 5.87348886e-05],\n", + " [ 6.57563025e-05],\n", + " [ 7.13870369e-05],\n", + " [ 7.56161314e-05],\n", + " [ 7.84547400e-05],\n", + " [ 7.99347593e-05],\n", + " [ 8.01072132e-05],\n", + " [ 7.90404306e-05],\n", + " [ 7.68180578e-05],\n", + " [ 7.35369422e-05],\n", + " [ 6.93049288e-05],\n", + " [ 6.42386081e-05],\n", + " [ 5.84610506e-05],\n", + " [ 5.20995659e-05],\n", + " [ 4.52835182e-05],\n", + " [ 3.81422283e-05],\n", + " [ 3.08029906e-05],\n", + " [ 2.33892288e-05],\n", + " [ 1.60188110e-05],\n", + " [ 8.80254179e-06],\n", + " [ 1.84284433e-06],\n", + " [-4.76735708e-06],\n", + " [-1.09455481e-05],\n", + " [-1.66203260e-05],\n", + " [-2.17318930e-05],\n", + " [-2.62323441e-05],\n", + " [-3.00857571e-05],\n", + " [-3.32680938e-05],\n", + " [-3.57669238e-05],\n", + " [-3.75809851e-05],\n", + " [-3.87195976e-05],\n", + " [-3.92019455e-05],\n", + " [-3.90562469e-05],\n", + " [-3.83188308e-05],\n", + " [-3.70331386e-05],\n", + " [-3.52486713e-05],\n", + " [-3.30199005e-05],\n", + " [-3.04051623e-05],\n", + " [-2.74655518e-05],\n", + " [-2.42638356e-05],\n", + " [-2.08633971e-05],\n", + " [-1.73272301e-05],\n", + " [-1.37169929e-05],\n", + " [-1.00921337e-05],\n", + " [-6.50909854e-06],\n", + " [-3.02062703e-06],\n", + " [ 3.24855777e-07],\n", + " [ 3.48374880e-06],\n", + " [ 6.41768244e-06],\n", + " [ 9.09382368e-06],\n", + " [ 1.14850796e-05],\n", + " [ 1.35702019e-05],\n", + " [ 1.53337956e-05],\n", + " [ 1.67662380e-05],\n", + " [ 1.78635125e-05],\n", + " [ 1.86269668e-05],\n", + " [ 1.90630003e-05],\n", + " [ 1.91826920e-05],\n", + " [ 1.90013761e-05],\n", + " [ 1.85381759e-05],\n", + " [ 1.78155045e-05],\n", + " [ 1.68585417e-05],\n", + " [ 1.56946977e-05],\n", + " [ 1.43530711e-05],\n", + " [ 1.28639102e-05],\n", + " [ 1.12580867e-05],\n", + " [ 9.56658741e-06],\n", + " [ 7.82003250e-06],\n", + " [ 6.04822530e-06],\n", + " [ 4.27973898e-06],\n", + " [ 2.54154472e-06],\n", + " [ 8.58684540e-07],\n", + " [-7.46008419e-07],\n", + " [-2.25214057e-06],\n", + " [-3.64193854e-06],\n", + " [-4.90037983e-06],\n", + " [-6.01527408e-06],\n", + " [-6.97729657e-06],\n", + " [-7.77997575e-06],\n", + " [-8.41963776e-06],\n", + " [-8.89531097e-06],\n", + " [-9.20859417e-06],\n", + " [-9.36349256e-06],\n", + " [-9.36622558e-06],\n", + " [-9.22501125e-06],\n", + " [-8.94983149e-06],\n", + " [-8.55218315e-06],\n", + " [-8.04481926e-06],\n", + " [-7.44148501e-06],\n", + " [-6.75665289e-06],\n", + " [-6.00526103e-06],\n", + " [-5.20245855e-06],\n", + " [-4.36336154e-06],\n", + " [-3.50282276e-06],\n", + " [-2.63521793e-06],\n", + " [-1.77425090e-06],\n", + " [-9.32779697e-07],\n", + " [-1.22665095e-07],\n", + " [ 6.45357404e-07],\n", + " [ 1.36178129e-06],\n", + " [ 2.01840827e-06],\n", + " [ 2.60840314e-06],\n", + " [ 3.12632476e-06],\n", + " [ 3.56813383e-06],\n", + " [ 3.93117892e-06],\n", + " [ 4.21416174e-06],\n", + " [ 4.41708370e-06],\n", + " [ 4.54117528e-06],\n", + " [ 4.58881047e-06],\n", + " [ 4.56340818e-06],\n", + " [ 4.46932311e-06],\n", + " [ 4.31172804e-06],\n", + " [ 4.09649002e-06],\n", + " [ 3.83004261e-06],\n", + " [ 3.51925636e-06],\n", + " [ 3.17130959e-06],\n", + " [ 2.79356147e-06],\n", + " [ 2.39342926e-06],\n", + " [ 1.97827123e-06],\n", + " [ 1.55527692e-06],\n", + " [ 1.13136590e-06],\n", + " [ 7.13096217e-07],\n", + " [ 3.06583307e-07],\n", + " [-8.25698570e-08],\n", + " [-4.49330971e-07],\n", + " [-7.89284681e-07],\n", + " [-1.09866689e-06],\n", + " [-1.37438717e-06],\n", + " [-1.61403969e-06],\n", + " [-1.81590293e-06],\n", + " [-1.97892902e-06],\n", + " [-2.10272322e-06],\n", + " [-2.18751454e-06],\n", + " [-2.23411839e-06],\n", + " [-2.24389217e-06],\n", + " [-2.21868508e-06],\n", + " [-2.16078299e-06],\n", + " [-2.07284963e-06],\n", + " [-1.95786524e-06],\n", + " [-1.81906355e-06],\n", + " [-1.65986847e-06],\n", + " [-1.48383111e-06],\n", + " [-1.29456841e-06],\n", + " [-1.09570401e-06],\n", + " [-8.90812280e-07],\n", + " [-6.83366086e-07],\n", + " [-4.76688999e-07],\n", + " [-2.73912369e-07],\n", + " [-7.79376827e-08],\n", + " [ 1.08595502e-07],\n", + " [ 2.83335867e-07],\n", + " [ 4.44240783e-07],\n", + " [ 5.89590916e-07],\n", + " [ 7.17999074e-07],\n", + " [ 8.28413475e-07],\n", + " [ 9.20115687e-07],\n", + " [ 9.92713565e-07],\n", + " [ 1.04612956e-06],\n", + " [ 1.08058482e-06],\n", + " [ 1.09657960e-06],\n", + " [ 1.09487043e-06],\n", + " [ 1.07644457e-06],\n", + " [ 1.04249234e-06],\n", + " [ 9.94377814e-07],\n", + " [ 9.33608474e-07],\n", + " [ 8.61804241e-07],\n", + " [ 7.80666529e-07],\n", + " [ 6.91947686e-07],\n", + " [ 5.97421333e-07],\n", + " [ 4.98853975e-07],\n", + " [ 3.97978268e-07],\n", + " [ 2.96468252e-07],\n", + " [ 1.95916837e-07],\n", + " [ 9.78157464e-08],\n", + " [ 3.53810784e-09],\n", + " [-8.56761880e-08],\n", + " [-1.68732293e-07],\n", + " [-2.44689337e-07],\n", + " [-3.12766515e-07],\n", + " [-3.72346383e-07],\n", + " [-4.22975475e-07],\n", + " [-4.64362360e-07],\n", + " [-4.96373321e-07],\n", + " [-5.19025849e-07],\n", + " [-5.32480164e-07],\n", + " [-5.37029008e-07],\n", + " [-5.33085958e-07],\n", + " [-5.21172516e-07],\n", + " [-5.01904244e-07],\n", + " [-4.75976208e-07],\n", + " [-4.44147990e-07],\n", + " [-4.07228527e-07],\n", + " [-3.66061006e-07],\n", + " [-3.21508069e-07],\n", + " [-2.74437502e-07],\n", + " [-2.25708642e-07],\n", + " [-1.76159635e-07],\n", + " [-1.26595725e-07],\n", + " [-7.77786725e-08],\n", + " [-3.04174198e-08],\n", + " [ 1.48399237e-08],\n", + " [ 5.74127314e-08],\n", + " [ 9.67931101e-08],\n", + " [ 1.32549750e-07],\n", + " [ 1.64330389e-07],\n", + " [ 1.91862929e-07],\n", + " [ 2.14955266e-07],\n", + " [ 2.33493889e-07],\n", + " [ 2.47441367e-07],\n", + " [ 2.56832786e-07],\n", + " [ 2.61771274e-07],\n", + " [ 2.62422731e-07],\n", + " [ 2.59009866e-07],\n", + " [ 2.51805701e-07],\n", + " [ 2.41126643e-07],\n", + " [ 2.27325274e-07],\n", + " [ 2.10782975e-07],\n", + " [ 1.91902502e-07],\n", + " [ 1.71100650e-07],\n", + " [ 1.48801086e-07],\n", + " [ 1.25427474e-07],\n", + " [ 1.01396970e-07],\n", + " [ 7.71141707e-08],\n", + " [ 5.29655831e-08],\n", + " [ 2.93146738e-08],\n", + " [ 6.49753809e-09],\n", + " [-1.51807738e-08],\n", + " [-3.54492548e-08],\n", + " [-5.40732540e-08],\n", + " [-7.08561057e-08],\n", + " [-8.56400866e-08],\n", + " [-9.83067240e-08],\n", + " [-1.08776483e-07],\n", + " [-1.17007876e-07],\n", + " [-1.22996030e-07],\n", + " [-1.26770781e-07],\n", + " [-1.28394324e-07],\n", + " [-1.27958507e-07],\n", + " [-1.25581810e-07],\n", + " [-1.21406077e-07],\n", + " [-1.15593076e-07],\n", + " [-1.08320929e-07],\n", + " [-9.97804917e-08],\n", + " [-9.01717306e-08],\n", + " [-7.97001605e-08],\n", + " [-6.85733863e-08],\n", + " [-5.69978031e-08],\n", + " [-4.51754926e-08],\n", + " [-3.33013551e-08],\n", + " [-2.15605067e-08],\n", + " [-1.01259685e-08],\n", + " [ 8.43333233e-10],\n", + " [ 1.12042419e-08],\n", + " [ 2.08307125e-08],\n", + " [ 2.96148179e-08],\n", + " [ 3.74674224e-08],\n", + " [ 4.43185300e-08],\n", + " [ 5.01173204e-08],\n", + " [ 5.48318878e-08],\n", + " [ 5.84487046e-08],\n", + " [ 6.09718312e-08],\n", + " [ 6.24218989e-08],\n", + " [ 6.28348935e-08],\n", + " [ 6.22607698e-08],\n", + " [ 6.07619258e-08],\n", + " [ 5.84115697e-08],\n", + " [ 5.52920089e-08],\n", + " [ 5.14928924e-08],\n", + " [ 4.71094361e-08],\n", + " [ 4.22406586e-08],\n", + " [ 3.69876544e-08],\n", + " [ 3.14519296e-08],\n", + " [ 2.57338206e-08],\n", + " [ 1.99310175e-08],\n", + " [ 1.41372078e-08],\n", + " [ 8.44085527e-09],\n", + " [ 2.92412535e-09],\n", + " [-2.33803440e-09],\n", + " [-7.27865322e-09],\n", + " [-1.18393323e-08],\n", + " [-1.59706760e-08],\n", + " [-1.96325618e-08],\n", + " [-2.27942524e-08],\n", + " [-2.54343588e-08],\n", + " [-2.75406605e-08],\n", + " [-2.91097962e-08],\n", + " [-3.01468340e-08],\n", + " [-3.06647360e-08],\n", + " [-3.06837313e-08],\n", + " [-3.02306102e-08],\n", + " [-2.93379573e-08],\n", + " [-2.80433366e-08],\n", + " [-2.63884442e-08],\n", + " [-2.44182441e-08],\n", + " [-2.21801006e-08],\n", + " [-1.97229204e-08],\n", + " [-1.70963184e-08],\n", + " [-1.43498173e-08],\n", + " [-1.15320925e-08],\n", + " [-8.69027055e-09],\n", + " [-5.86928976e-09],\n", + " [-3.11132917e-09],\n", + " [-4.55310624e-10],\n", + " [ 2.06352190e-09],\n", + " [ 4.41394380e-09],\n", + " [ 6.56901103e-09],\n", + " [ 8.50624139e-09],\n", + " [ 1.02077175e-08],\n", + " [ 1.16601143e-08],\n", + " [ 1.28546537e-08],\n", + " [ 1.37869935e-08],\n", + " [ 1.44570525e-08],\n", + " [ 1.48687805e-08],\n", + " [ 1.50298794e-08],\n", + " [ 1.49514807e-08],\n", + " [ 1.46477886e-08],\n", + " [ 1.41356953e-08],\n", + " [ 1.34343756e-08],\n", + " [ 1.25648684e-08],\n", + " [ 1.15496531e-08],\n", + " [ 1.04122255e-08],\n", + " [ 9.17668264e-09],\n", + " [ 7.86731961e-09],\n", + " [ 6.50824618e-09],\n", + " [ 5.12302653e-09],\n", + " [ 3.73434713e-09],\n", + " [ 2.36371609e-09],\n", + " [ 1.03119689e-09],\n", + " [-2.44821202e-10],\n", + " [-1.44781462e-09],\n", + " [-2.56327788e-09],\n", + " [-3.57883673e-09],\n", + " [-4.48432247e-09],\n", + " [-5.27180834e-09],\n", + " [-5.93560947e-09],\n", + " [-6.47224856e-09],\n", + " [-6.88038933e-09],\n", + " [-7.16074089e-09],\n", + " [-7.31593579e-09],\n", + " [-7.35038521e-09],\n", + " [-7.27011464e-09],\n", + " [-7.08258382e-09],\n", + " [-6.79649429e-09],\n", + " [-6.42158841e-09],\n", + " [-5.96844330e-09],\n", + " [-5.44826311e-09],\n", + " [-4.87267300e-09],\n", + " [-4.25351776e-09],\n", + " [-3.60266810e-09],\n", + " [-2.93183692e-09],\n", + " [-2.25240810e-09],\n", + " [-1.57527958e-09],\n", + " [-9.10722392e-10],\n", + " [-2.68257031e-10],\n", + " [ 3.43451984e-10],\n", + " [ 9.16682670e-10],\n", + " [ 1.44472297e-09],\n", + " [ 1.92191898e-09],\n", + " [ 2.34370432e-09],\n", + " [ 2.70661121e-09],\n", + " [ 3.00826404e-09],\n", + " [ 3.24735661e-09],\n", + " [ 3.42361409e-09],\n", + " [ 3.53774130e-09],\n", + " [ 3.59135866e-09],\n", + " [ 3.58692762e-09],\n", + " [ 3.52766726e-09],\n", + " [ 3.41746369e-09],\n", + " [ 3.26077420e-09],\n", + " [ 3.06252783e-09],\n", + " [ 2.82802406e-09],\n", + " [ 2.56283137e-09],\n", + " [ 2.27268714e-09],\n", + " [ 1.96340036e-09],\n", + " [ 1.64075862e-09],\n", + " [ 1.31044034e-09],\n", + " [ 9.77933595e-10],\n", + " [ 6.48462130e-10],\n", + " [ 3.26919535e-10],\n", + " [ 1.78120277e-11],\n", + " [-2.74789697e-10],\n", + " [-5.47289326e-10],\n", + " [-7.96594391e-10],\n", + " [-1.02013640e-09],\n", + " [-1.21588181e-09],\n", + " [-1.38233425e-09],\n", + " [-1.51852829e-09],\n", + " [-1.62401545e-09],\n", + " [-1.69884307e-09],\n", + " [-1.74352661e-09],\n", + " [-1.75901636e-09],\n", + " [-1.74665921e-09],\n", + " [-1.70815651e-09],\n", + " [-1.64551864e-09],\n", + " [-1.56101740e-09],\n", + " [-1.45713693e-09],\n", + " [-1.33652408e-09],\n", + " [-1.20193887e-09],\n", + " [-1.05620606e-09],\n", + " [-9.02168180e-10],\n", + " [-7.42640999e-10],\n", + " [-5.80371699e-10],\n", + " [-4.18000438e-10],\n", + " [-2.58025627e-10],\n", + " [-1.02773262e-10],\n", + " [ 4.56294262e-11],\n", + " [ 1.85275842e-10],\n", + " [ 3.14497319e-10],\n", + " [ 4.31875824e-10],\n", + " [ 5.36252125e-10],\n", + " [ 6.26729536e-10],\n", + " [ 7.02673435e-10],\n", + " [ 7.63706783e-10],\n", + " [ 8.09701926e-10],\n", + " [ 8.40769021e-10],\n", + " [ 8.57241435e-10],\n", + " [ 8.59658509e-10],\n", + " [ 8.48746100e-10],\n", + " [ 8.25395306e-10],\n", + " [ 7.90639824e-10],\n", + " [ 7.45632330e-10],\n", + " [ 6.91620331e-10],\n", + " [ 6.29921860e-10],\n", + " [ 5.61901413e-10],\n", + " [ 4.88946479e-10],\n", + " [ 4.12444987e-10],\n", + " [ 3.33763978e-10],\n", + " [ 2.54229747e-10],\n", + " [ 1.75109692e-10],\n", + " [ 9.75960545e-11],\n", + " [ 2.27916963e-11],\n", + " [-4.83019842e-11],\n", + " [-1.14794917e-10],\n", + " [-1.75915983e-10],\n", + " [-2.31018394e-10],\n", + " [-2.79582877e-10],\n", + " [-3.21218723e-10],\n", + " [-3.55662806e-10],\n", + " [-3.82776697e-10],\n", + " [-4.02542024e-10],\n", + " [-4.15054231e-10],\n", + " [-4.20514940e-10],\n", + " [-4.19223089e-10],\n", + " [-4.11565059e-10],\n", + " [-3.98004000e-10],\n", + " [-3.79068546e-10],\n", + " [-3.55341149e-10],\n", + " [-3.27446216e-10],\n", + " [-2.96038242e-10],\n", + " [-2.61790127e-10],\n", + " [-2.25381854e-10],\n", + " [-1.87489655e-10],\n", + " [-1.48775838e-10],\n", + " [-1.09879374e-10],\n", + " [-7.14073523e-11],\n", + " [-3.39273907e-11],\n", + " [ 2.03893505e-12],\n", + " [ 3.60216010e-11],\n", + " [ 6.76065523e-11],\n", + " [ 9.64390223e-11],\n", + " [ 1.22225761e-10],\n", + " [ 1.44736197e-10],\n", + " [ 1.63802576e-10],\n", + " [ 1.79319127e-10],\n", + " [ 1.91240321e-10],\n", + " [ 1.99578298e-10],\n", + " [ 2.04399554e-10],\n", + " [ 2.05820966e-10],\n", + " [ 2.04005264e-10],\n", + " [ 1.99156045e-10],\n", + " [ 1.91512426e-10],\n", + " [ 1.81343448e-10],\n", + " [ 1.68942317e-10],\n", + " [ 1.54620596e-10],\n", + " [ 1.38702421e-10],\n", + " [ 1.21518840e-10],\n", + " [ 1.03402364e-10],\n", + " [ 8.46817735e-11],\n", + " [ 6.56772770e-11],\n", + " [ 4.66960608e-11],\n", + " [ 2.80282784e-11],\n", + " [ 9.94352108e-12],\n", + " [-7.31220555e-12],\n", + " [-2.35189776e-11],\n", + " [-3.84849140e-11],\n", + " [-5.20475998e-11],\n", + " [-6.40749805e-11],\n", + " [-7.44657415e-11],\n", + " [-8.31491944e-11],\n", + " [-9.00847005e-11],\n", + " [-9.52606630e-11],\n", + " [-9.86931288e-11],\n", + " [-1.00424042e-10],\n", + " [-1.00519192e-10],\n", + " [-9.90659131e-11],\n", + " [-9.61705702e-11],\n", + " [-9.19558946e-11],\n", + " [-8.65582113e-11],\n", + " [-8.01246075e-11],\n", + " [-7.28100908e-11],\n", + " [-6.47747788e-11],\n", + " [-5.61811640e-11],\n", + " [-4.71914900e-11],\n", + " [-3.79652737e-11],\n", + " [-2.86570049e-11],\n", + " [-1.94140468e-11],\n", + " [-1.03747606e-11],\n", + " [-1.66687011e-12],\n", + " [ 6.59392227e-12],\n", + " [ 1.43050589e-11],\n", + " [ 2.13779881e-11],\n", + " [ 2.77387635e-11],\n", + " [ 3.33283863e-11],\n", + " [ 3.81028997e-11],\n", + " [ 4.20332475e-11],\n", + " [ 4.51049111e-11],\n", + " [ 4.73173433e-11],\n", + " [ 4.86832183e-11],\n", + " [ 4.92275195e-11],\n", + " [ 4.89864878e-11],\n", + " [ 4.80064537e-11],\n", + " [ 4.63425790e-11],\n", + " [ 4.40575297e-11],\n", + " [ 4.12201072e-11],\n", + " [ 3.79038588e-11],\n", + " [ 3.41856906e-11],\n", + " [ 3.01445047e-11],\n", + " [ 2.58598795e-11],\n", + " [ 2.14108113e-11],\n", + " [ 1.68745326e-11],\n", + " [ 1.23254227e-11],\n", + " [ 7.83402024e-12],\n", + " [ 3.46614894e-12],\n", + " [-7.17837223e-13],\n", + " [-4.66368361e-12],\n", + " [-8.32373682e-12],\n", + " [-1.16573180e-11],\n", + " [-1.46309687e-11],\n", + " [-1.72185728e-11],\n", + " [-1.94013587e-11],\n", + " [-2.11677890e-11],\n", + " [-2.25133446e-11],\n", + " [-2.34402138e-11],\n", + " [-2.39568939e-11],\n", + " [-2.40777185e-11],\n", + " [-2.38223208e-11],\n", + " [-2.32150444e-11],\n", + " [-2.22843137e-11],\n", + " [-2.10619762e-11],\n", + " [-1.95826276e-11],\n", + " [-1.78829317e-11],\n", + " [-1.60009447e-11],\n", + " [-1.39754560e-11],\n", + " [-1.18453524e-11],\n", + " [-9.64901620e-12],\n", + " [-7.42376276e-12],\n", + " [-5.20532599e-12],\n", + " [-3.02739537e-12],\n", + " [-9.21209726e-13],\n", + " [ 1.08478934e-12],\n", + " [ 2.96524227e-12],\n", + " [ 4.69809361e-12],\n", + " [ 6.26475127e-12],\n", + " [ 7.65018391e-12],\n", + " [ 8.84295852e-12],\n", + " [ 9.83522052e-12],\n", + " [ 1.06226202e-11],\n", + " [ 1.12041892e-11],\n", + " [ 1.15821718e-11],\n", + " [ 1.17618161e-11],\n", + " [ 1.17511305e-11],\n", + " [ 1.15606105e-11],\n", + " [ 1.12029433e-11],\n", + " [ 1.06926933e-11],\n", + " [ 1.00459770e-11],\n", + " [ 9.28013104e-12],\n", + " [ 8.41338023e-12],\n", + " [ 7.46450911e-12],\n", + " [ 6.45254336e-12],\n", + " [ 5.39644458e-12],\n", + " [ 4.31482266e-12],\n", + " [ 3.22566912e-12],\n", + " [ 2.14611451e-12],\n", + " [ 1.09221210e-12],\n", + " [ 7.87499061e-14],\n", + " [-8.80907673e-13],\n", + " [-1.77494775e-12],\n", + " [-2.59320609e-12],\n", + " [-3.32723368e-12],\n", + " [-3.97033334e-12],\n", + " [-4.51756744e-12],\n", + " [-4.96573818e-12],\n", + " [-5.31334228e-12],\n", + " [-5.56050204e-12],\n", + " [-5.70887524e-12],\n", + " [-5.76154635e-12],\n", + " [-5.72290169e-12],\n", + " [-5.59849145e-12],\n", + " [-5.39488131e-12],\n", + " [-5.11949646e-12],\n", + " [-4.78046103e-12],\n", + " [-4.38643532e-12],\n", + " [-3.94645383e-12],\n", + " [-3.46976617e-12],\n", + " [-2.96568341e-12],\n", + " [-2.44343179e-12],\n", + " [-1.91201566e-12],\n", + " [-1.38009128e-12],\n", + " [-8.55852851e-13],\n", + " [-3.46931750e-13],\n", + " [ 1.39690062e-13],\n", + " [ 5.97751982e-13],\n", + " [ 1.02177173e-12],\n", + " [ 1.40708727e-12],\n", + " [ 1.74988385e-12],\n", + " [ 2.04720660e-12],\n", + " [ 2.29695918e-12],\n", + " [ 2.49788941e-12],\n", + " [ 2.64956265e-12],\n", + " [ 2.75232406e-12],\n", + " [ 2.80725105e-12],\n", + " [ 2.81609691e-12],\n", + " [ 2.78122724e-12],\n", + " [ 2.70555041e-12],\n", + " [ 2.59244341e-12],\n", + " [ 2.44567457e-12],\n", + " [ 2.26932450e-12],\n", + " [ 2.06770643e-12],\n", + " [ 1.84528742e-12],\n", + " [ 1.60661139e-12],\n", + " [ 1.35622519e-12],\n", + " [ 1.09860864e-12],\n", + " [ 8.38109399e-13],\n", + " [ 5.78883374e-13],\n", + " [ 3.24841331e-13],\n", + " [ 7.96021586e-14],\n", + " [-1.53546849e-13],\n", + " [-3.71682460e-13],\n", + " [-5.72270623e-13],\n", + " [-7.53184249e-13],\n", + " [-9.12713774e-13],\n", + " [-1.04957074e-12],\n", + " [-1.16288473e-12],\n", + " [-1.25219402e-12],\n", + " [-1.31743049e-12],\n", + " [-1.35889932e-12],\n", + " [-1.37725401e-12],\n", + " [-1.37346747e-12],\n", + " [-1.34879972e-12],\n", + " [-1.30476297e-12],\n", + " [-1.24308474e-12],\n", + " [-1.16566958e-12],\n", + " [-1.07456029e-12],\n", + " [-9.71899028e-13],\n", + " [-8.59889017e-13],\n", + " [-7.40757417e-13],\n", + " [-6.16719826e-13],\n", + " [-4.89946897e-13],\n", + " [-3.62533448e-13],\n", + " [-2.36470418e-13],\n", + " [-1.13619940e-13],\n", + " [ 4.30625813e-15],\n", + " [ 1.15764967e-13],\n", + " [ 2.19396044e-13],\n", + " [ 3.14033353e-13],\n", + " [ 3.98712143e-13],\n", + " [ 4.72672923e-13],\n", + " [ 5.35361983e-13],\n", + " [ 5.86428723e-13],\n", + " [ 6.25720013e-13],\n", + " [ 6.53271822e-13],\n", + " [ 6.69298401e-13],\n", + " [ 6.74179318e-13],\n", + " [ 6.68444656e-13],\n", + " [ 6.52758703e-13],\n", + " [ 6.27902469e-13],\n", + " [ 5.94755360e-13],\n", + " [ 5.54276333e-13],\n", + " [ 5.07484858e-13],\n", + " [ 4.55441980e-13],\n", + " [ 3.99231770e-13],\n", + " [ 3.39943434e-13],\n", + " [ 2.78654313e-13],\n", + " [ 2.16413982e-13],\n", + " [ 1.54229647e-13],\n", + " [ 9.30529803e-14],\n", + " [ 3.37685240e-14],\n", + " [-2.28162462e-14],\n", + " [-7.59791352e-14],\n", + " [-1.25089686e-13],\n", + " [-1.69613881e-13],\n", + " [-2.09117104e-13],\n", + " [-2.43265416e-13],\n", + " [-2.71825222e-13],\n", + " [-2.94661405e-13],\n", + " [-3.11734058e-13],\n", + " [-3.23093926e-13],\n", + " [-3.28876708e-13],\n", + " [-3.29296363e-13],\n", + " [-3.24637573e-13],\n", + " [-3.15247537e-13],\n", + " [-3.01527245e-13],\n", + " [-2.83922404e-13],\n", + " [-2.62914163e-13],\n", + " [-2.39009806e-13],\n", + " [-2.12733546e-13],\n", + " [-1.84617554e-13],\n", + " [-1.55193359e-13],\n", + " [-1.24983721e-13],\n", + " [-9.44950827e-14],\n", + " [-6.42106796e-14],\n", + " [-3.45843793e-14],\n", + " [-6.03530863e-15],\n", + " [ 2.10566956e-14],\n", + " [ 4.63547854e-14],\n", + " [ 6.95679398e-14],\n", + " [ 9.04529453e-14],\n", + " [ 1.08815534e-13],\n", + " [ 1.24510712e-13],\n", + " [ 1.37442305e-13],\n", + " [ 1.47561791e-13],\n", + " [ 1.54866456e-13],\n", + " [ 1.59396949e-13],\n", + " [ 1.61234303e-13],\n", + " [ 1.60496501e-13],\n", + " [ 1.57334658e-13],\n", + " [ 1.51928900e-13],\n", + " [ 1.44484028e-13],\n", + " [ 1.35225032e-13],\n", + " [ 1.24392540e-13],\n", + " [ 1.12238277e-13],\n", + " [ 9.90205960e-14],\n", + " [ 8.50001526e-14],\n", + " [ 7.04357778e-14],\n", + " [ 5.55806038e-14],\n", + " [ 4.06784863e-14],\n", + " [ 2.59607649e-14],\n", + " [ 1.16433900e-14],\n", + " [-2.07555641e-15],\n", + " [-1.50179329e-14],\n", + " [-2.70271905e-14],\n", + " [-3.79696042e-14],\n", + " [-4.77350873e-14]]),)" + ] + }, + "execution_count": 51, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "yout" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[<matplotlib.lines.Line2D at 0x1c2def0828>]" + ] + }, + "execution_count": 52, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYYAAAD8CAYAAABzTgP2AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJzt3XuUnHd93/H3d657011r2dbFkrBskA3IrrChAUowGDtQy0nsImiLTmKOT09xA2041JAGjAmncUhx0+Dk4GInxqfFBocEhYi4BrvlEjBeYzu+Cm/ki9a6a1fS7s7szM7Mt3/MM9LMaGZ3dmd2R/vM53WOzs7zzDM7v9nH3s/+ft/f73nM3RERESmJtLsBIiJyZlEwiIhIBQWDiIhUUDCIiEgFBYOIiFRQMIiISAUFg4iIVFAwiIhIBQWDiIhUiLW7AbOxcuVKX79+fbubISKyoDz++ONH3L1/uuMWZDCsX7+egYGBdjdDRGRBMbNXGjlOQ0kiIlJBwSAiIhUUDCIiUkHBICIiFRQMIiJSQcEgIiIVFAwiIlJBwTCFbK7AXz0+xFgm1+6miIjMGwXDFL71+F5+91tP8V93Pd/upoiIzBsFwxR+/tIwAM/sO9HmloiIzB8FwxR2HxgFYPDgKO7e5taIiMwPBcMUXjuWBmA8m+d4erLNrRERmR8KhjrGMjlGJ3K8ee1SAIZG0m1ukYjI/FAw1HHwxAQAF5+7GIDh8Ww7myMiMm8UDHWMBEHwuv6+4nZKwSAinUHBUMdIqlhT2NjfW9xWj0FEOkRLgsHMrjKz3WY2aGY313g+aWb3B88/ambrq55fZ2ZjZvbJVrSnFUo9hPUrgmBIqfgsIp2h6WAwsyhwB3A1sBn4kJltrjrsBmDE3c8Hbgduq3r+duB7zballUo9hJWLkizqinFMQ0ki0iFa0WO4DBh09z3ungXuA7ZVHbMNuCd4/ABwhZkZgJldC+wBnm1BW1pmJDVJPGr0JqIs702oxyAiHaMVwbAa2Fu2PRTsq3mMu+eA48AKM+sF/jPw+Ra0o6WOpbIs7UlgZiztSaj4LCIdoxXBYDX2VS8TrnfM54Hb3X1s2jcxu9HMBsxs4PDhw7No5syMpLIs70kAsKwnrmAQkY7RimAYAtaWba8B9tU7xsxiwBJgGLgc+CMzexn4BPAZM7up1pu4+53uvtXdt/b397eg2VM7lppkSU8cgMVdcUYndIVVEekMsRZ8j8eATWa2AXgN2A58uOqYncAO4KfAdcDDXrz40DtKB5jZLcCYu3+lBW1q2uhEjnOXdgHQm4wxrktvi0iHaDoY3D0X/JX/IBAF7nb3Z83sVmDA3XcCdwH3mtkgxZ7C9mbfd66NZXL0JYs/nr5kVPdkEJGO0YoeA+6+C9hVte+zZY8ngOun+R63tKItrTKeydHXVfzx9CZjTEwWyOULxKJaEygi4abfcnWMZnL0JYs1hlLPYTybb2eTRETmhYKhhkwuTzZXYFFXaSgpCAYNJ4lIB1Aw1DCeKfYMSoHQq2AQkQ6iYKhhLJia2pus7DGoAC0inUDBUEMpAKp7DAoGEekECoYaSgGgGoOIdCIFQw1jmeIF8/pOG0rSrCQRCT8FQw2jVTWG3mQUUI9BRDqDgqGGVLb2rKT0pHoMIhJ+CoYa0kEwdMeLPYVkLFKxX0QkzBQMNZR6Bl2J4o/HzOiKR5hQj0FEOoCCoYZ0Nk80YiTKrovUHY9qKElEOoKCoYb0ZJ7ueJTg7qNAEAwaShKRDqBgqCE9macrqC+UdCXUYxCRzqBgqGEim6c7Ufmj6Y5HVWMQkY6gYKghlc3TE6+8VYVqDCLSKRQMNaQn83QlKoeSuhOqMYhIZ1Aw1FAsPlf+aLriUdKThTa1SERk/igYakhn8ycXt5WoxiAinULBUEN6Mk9PokaNQUNJItIBFAw1pLM1pqvGIyo+i0hHUDDUkJ48fbqq1jGISKdQMNSQztYeSsrmCuQL3qZWiYjMDwVDFXevufK5VIxWAVpEwk7BUCWTK05JPW1WUkLBICKdQcFQJXXyXgynr2MA3axHRMKvJcFgZleZ2W4zGzSzm2s8nzSz+4PnHzWz9cH+y8zsyeDfU2b2661oTzNKv/hr1RhAPQYRCb+mg8HMosAdwNXAZuBDZra56rAbgBF3Px+4Hbgt2P8MsNXdtwBXAV81sxhtVFqrcNolMUo9hqxWP4tIuLWix3AZMOjue9w9C9wHbKs6ZhtwT/D4AeAKMzN3T7l7LtjfBbR9yk/1bT1LSjUGDSWJSNi1IhhWA3vLtoeCfTWPCYLgOLACwMwuN7NngaeBf1cWFG1xaiipeoGbgkFEOkMrgsFq7Kv+y7/uMe7+qLtfBLwF+LSZddV8E7MbzWzAzAYOHz7cVIOncvJ+z3Wmq+qyGCISdq0IhiFgbdn2GmBfvWOCGsISYLj8AHd/HhgHLq71Ju5+p7tvdfet/f39LWh2belsscNSPZTUFcxSSk+2tUMjIjLnWhEMjwGbzGyDmSWA7cDOqmN2AjuCx9cBD7u7B6+JAZjZecCFwMstaNOslXoM3XWGkrI5FZ9FJNyangHk7jkzuwl4EIgCd7v7s2Z2KzDg7juBu4B7zWyQYk9he/DytwM3m9kkUAD+vbsfabZNzSjNOqquMSRjxQyd0D0ZRCTkWjI11N13Abuq9n227PEEcH2N190L3NuKNrRKvRpDMtjO5FRjEJFw08rnKvVqDKUeQ0Y9BhEJOQVDlfRknljESMQqfzSxiBGxU9dSEhEJKwVDlXS2cFpvAcDMSMaiGkoSkdBTMFRJT+ZOuxxGSVc8oh6DiISegqFKOpuv2WMAij0G1RhEJOQUDFXSk/nTpqqWJOMRDSWJSOgpGKqksqffva0kGdNQkoiEn4KhysTkNENJCgYRCTkFQ5Uph5JiEd2oR0RCT8FQJZ3N152VlNSsJBHpAAqGKtPOSlLxWURCTsFQJT1ljSGi6aoiEnoKhirT1Rg0lCQiYadgKFMoOBOThbrTVbviGkoSkfBTMJSZyNW+SU+Jegwi0gkUDGVK93Ouv/JZl8QQkfBTMJRJZWvfpKek2GPI4+7z2SwRkXmlYChTWrw21aykgkOuoGAQkfBSMJRJTxsMxf1a/SwiYaZgKDN9jSG4vacK0CISYgqGMqmgJ1D3khgxBYOIhJ+CocxEtrGhpIyGkkQkxBQMZUo1hqlWPoN6DCISbgqGMqlpegylaawKBhEJMwVDmYlGawwaShKREFMwlElPV2PQrCQR6QAtCQYzu8rMdpvZoJndXOP5pJndHzz/qJmtD/a/18weN7Ong6/vbkV7Zis1mScWMeLR2j+Wk8VnBYOIhFjTwWBmUeAO4GpgM/AhM9tcddgNwIi7nw/cDtwW7D8C/Et3fyOwA7i32fY0I53N172AHpQXnzWUJCLh1Yoew2XAoLvvcfcscB+wreqYbcA9weMHgCvMzNz9CXffF+x/Fugys2QL2jQr6Wz9ezFA+cpn9RhEJLxaEQyrgb1l20PBvprHuHsOOA6sqDrmN4En3D3TgjbNSmqKu7dBeY1BPQYRCa9YC76H1dhXfZW5KY8xs4soDi9dWfdNzG4EbgRYt27dzFvZgOJQUv0fyalZSeoxiEh4taLHMASsLdteA+yrd4yZxYAlwHCwvQb4a+Aj7v5P9d7E3e90963uvrW/v78FzT5dejJHd7z+j0TFZxHpBK0IhseATWa2wcwSwHZgZ9UxOykWlwGuAx52dzezpcDfAZ9295+0oC1NKdYYGugxaChJREKs6WAIagY3AQ8CzwPfdPdnzexWM7smOOwuYIWZDQL/CShNab0JOB/4fTN7Mvh3VrNtmq3UNLOSIhEjEdXtPUUk3FpRY8DddwG7qvZ9tuzxBHB9jdf9AfAHrWhDK6SnKT5DcBc31RhEJMS08rnMdNNVoTgzSUNJIhJmCoYy0y1wg2IBWkNJIhJmCoYyDQ8lKRhEJMQUDIFsrkCu4NMOJSViEV1dVURCTcEQKF1ZtWu6HkM8yoR6DCISYgqGwKm7t009USupHoOIhJyCIZDK5oD6t/UsUY1BRMJOwRAo9RimHUrSrCQRCTkFQ6BUY9A6BhHpdAqGQKp0W89pgqErFtXKZxEJNQVDoDSUNO06BvUYRCTkFAyBhoeSVHwWkZBTMAQaHUpKaihJREJOwRA4uY4hPv06hmy+QKFQfZM6EZFwUDAE0sE6hq7E1D+S0nTWbF69BhEJJwVDID2ZJxrciGcquu+ziISdgiGQyubpiUcxsymPSwb3hJ7QzCQRCSkFQyCdzdM1TeEZisVnUI9BRMJLwRBIT05/9zYoG0pSj0FEQkrBEEhlp79JD5wqPmstg4iElYIhMDE5/W094VSPYUKX3haRkFIwBMYzuRkOJanHICLhpGAIjGfy9CWnXtwGxTu4gWoMIhJeCobAWCZHbwPB0BXXOgYRCTcFQ2Ask2NRIz2GmIrPIhJuCgbA3RvuMaj4LCJh15JgMLOrzGy3mQ2a2c01nk+a2f3B84+a2fpg/woze8TMxszsK61oy2xkcgXyBaevq/FgUI9BRMKq6WAwsyhwB3A1sBn4kJltrjrsBmDE3c8HbgduC/ZPAL8PfLLZdjRjdKJ4AT0Vn0VEWtNjuAwYdPc97p4F7gO2VR2zDbgnePwAcIWZmbuPu/uPKQZE24xnGg+GLl1ET0RCrhXBsBrYW7Y9FOyreYy754DjwIoWvHdLjAXB0EiNIRaNEI2YLqInIqHVimCodTnS6rvYNHLM1G9idqOZDZjZwOHDh2fy0mmVgqGRWUkQ3N5TPQYRCalWBMMQsLZsew2wr94xZhYDlgDDM3kTd7/T3be6+9b+/v4mmnu68Rn0GED3fRaRcGtFMDwGbDKzDWaWALYDO6uO2QnsCB5fBzzs7mfMvTFLPYZGZiVB8UJ6Kj6LSFg19ptwCu6eM7ObgAeBKHC3uz9rZrcCA+6+E7gLuNfMBin2FLaXXm9mLwOLgYSZXQtc6e7PNduumRibQfEZ1GMQkXBrOhgA3H0XsKtq32fLHk8A19d57fpWtKEZYzOYrgrF1c9a4CYiYaWVzxRrDGY0dHVVKN7eUz0GEQkrBQMwmsnRl4hNe7/nEs1KEpEwUzBQ7DE0OiMJVHwWkXBTMFC8F0NvsrFhJCj2GCbUYxCRkFIwAMfTkyzpjjd8fDKmHoOIhJeCATiWzrK0J9Hw8ZquKiJhpmBgFj2GeFTBICKhpWAAjqVmOpQUITODdQwTk3kGD41yBi32FhGpq+ODIV9wRidyLO2ZSY8hwkSDPQZ356P3DPCeL/+Qu3/y8ixbKSIyfzo+GE6kJwFmXHzO5goN9QCe23+CHw8eAeBrP9pDoaBeg4ic2To+GI4FwTCjHsMMbu/50386CsBnfu317D8+wRN7R2bRShGR+aNgSGUBWNrd+KykrpO395w+GH7x6ghrlnXzwbeswwx+Mnh0dg0VEZknCoagx7B4hsVnoKEC9JOvHuOSdctY0h3ngrMW8fgr6jGIyJmt44PhyGgGgP6+ZMOvaXQoKZXNse/4BBeu6gPg0vOW8YtXRzQ7SUTOaB0fDIfHisGwctEMFridHEqausfw8pEUABtWFoPh4tWLGZ3IMTSSnk1TRUTmRccHw5HRLH3JGD2JGVxEL+gxTHe9pJeOjAOwfmUPAK8/ezEALxwYnU1TRUTmRccHw+GxDP2LGh9Gghn0GI4GwbCiF4ALz14EwO4DJ2baTBGReaNgGJ2YUX0ByovPU/cYXjuWZnlv4uQlvfuSMdYu7+Z59RhE5AymYBidRY+hweLzoRMTrFrcVbHv9Wcv5oX96jGIyJmro4PB3TlwfGLGwdDV4FDSgRMTnL248ntfuGoRLx9N6bLdInLG6uhgGB7PMp7Nc96Knhm9rtEew4HjmdN6DBecvYh8wdlzeHxmjRURmScdHQyvDBenk65bPsNgCHoME1MscJvMFzg6XiMYgjUNvzyoOoOInJk6OhhePVoMhrnoMRwazeAOZy+pDIYNK3uJRowXD47NsLUiIvOjo4PhlSAY1iybWTCUagzpbP0ew8ETEwCcXdVjSMairF/RM6Mew9BIiuf2ndCKaRGZF42v6gqhp187zsb+3pO/6BvVyAK3g8eLwVA9lATF9QzP7WtsZtIdjwzypQd3A/C2jSv46kf+GYu7Gr+uk4jITHVsj8HdeXLvCFvWLp3xa2PRCIlohPQUNYZSj2HV4tNnPG06axGvDKemrFEAPPLCIb704G4+8KZz+C/vfwOPvTzMR+8ZYDKv24qKyNxpSTCY2VVmttvMBs3s5hrPJ83s/uD5R81sfdlznw727zaz97WiPY3Yc2ScI2NZLlm3bFav74pHpvzFfnQ8S8RgWc/p12C6YNUi3GHwUP06Q6Hg/OH3XmBjfy//7V+9mY++YyN/fP2b+flLw/zpD16cVZtFRBrR9FCSmUWBO4D3AkPAY2a2092fKzvsBmDE3c83s+3AbcAHzWwzsB24CDgX+L6ZXeDucz7J/4HHh4gYXLl51axe35OITVljGB7PsqwnQSRipz1XPjPp4tVLar7+oecPsvvgKH+yfQvJWHGo69pLVvPjwSN85ZFB3r6pn8s2LJ+yjWOZHA89d4DBQ2PEIhEuWLWIyzYsn/G6DRHpLK2oMVwGDLr7HgAzuw/YBpQHwzbgluDxA8BXzMyC/fe5ewZ4ycwGg+/30xa06zR//8x+Do1mODya4S9+8hJXbj67Zg2gEd2J6JRDSSOpLMt6a1+xdf3KXuJR45dTzEz61sAQqxYnef8bz6nYf8s1F/HYy8P8zjeeYNfH38HyGu+Ryxf46g/38GePDDKezRMxKL+j6BtXL+FdF/bzrgvPYsvapUSD8HJ3hsez7B1J8+pwir3Bv/RknqgZiViE7kSUnkSUnkQs+HrqcTRi5AvOZN7JF5xcoUAuH3wtOLm84+5EIoaZYUDEjIiBGSf31VK37B7SeryH9YNJ037z0jXEonNbBWhFMKwG9pZtDwGX1zvG3XNmdhxYEez/WdVrV9d6EzO7EbgRYN26dbNq6Jcf+uXJX8Zv3bicL1x78ay+DxRnJqWm6TEsrzGMBBCPRti4so8X68xMOpbK8v9+eYgdb1t/2n8AfckYd3z4Un7jz/6BT9z/JHft2Eq87JjdB0b55Lee4unXjvO+i1Zx4ztfx5a1S8kXnOf2n+Ang0d45IVD3PHIIH/68CCLumL09yWZLBQ4PJo5raC+si9JXzJK3p1srkAqmyeVzZPXvatF2mLbltXEZjZfZsZaEQy1/sir/q1R75hGXlvc6X4ncCfA1q1bZ/Vb6eu/fTmxqNGXjM14JlK17mlqDCPjkycvt13LplV9PDV0rOZz33vmAJN559pLamYkF69ewi3XXMRn/vppbvz6AJ+/5mJiUePen73C//zhHpZ0x7njw5fy/jed6m1EI8aWtUvZsnYpH/vV8zmemuRHg4f52Z6jHE/niBictSjJOUu6OW9FD2uX97BmWXfNy5G7O9l8gVQmT2oyTyqTI5XNkys48agRjRjxaKT4NRIhGjXikeJ+M8PdKXjx+zhQKN+e4sxane6E1XtigQvnp5JmldZRzaVWBMMQsLZsew2wr84xQ2YWA5YAww2+tmWqF5s1Y7qhpOFUlkt76894unDVIr77j/sZy+ToS1aehu88+Rob+3u56NzFdV//4cvXkS8U+MLfPc87v/TIyf2/cclqfu/9b2DFNFeMXdIT5wNvOpcPvOncKY+rxcxIxqIkY1FmV7oXkTNZK4LhMWCTmW0AXqNYTP5w1TE7gR0UawfXAQ+7u5vZTuB/m9mXKRafNwE/b0Gb5lx3PMrI+GTN59ydkaD4XM+bgmmyT+09xq+cv/Lk/v3H0zz60jCfuOKCaf8S/rdvW8+vvv4s/s+zB4kYvOOCfl7X3zeLTyMickrTwRDUDG4CHgSiwN3u/qyZ3QoMuPtO4C7g3qC4PEwxPAiO+ybFQnUO+Nh8zEhqha54tO5Q0mgmR67gNQvDJVvWLsUMHn9lpCIYvvvUftzhmi2N/SW/ZlkPv/32DTNrvIjIFFqy8tnddwG7qvZ9tuzxBHB9ndd+EfhiK9oxn3qmGEoaHssCtdcwlCzpjnPBWYsYeGWkYv/fPPkab16zhA0re1vXWBGRGejYlc/N6o5PEQypYjAs76sfDACXnreMJ14ZObmS+bl9J3h23wl+vU7RWURkPigYZqkrUX+66sh4EAxT9BgA/sUF/Yxmcjy6ZxiAbw7sJRGL1J2NJCIyHxQMs9Qdj5LNFWrO5x8uBcMUNQYoBkNPIsq3fzHE0bEM3xrYy9UXn83SaQJFRGQudfTVVZvRXXaznt6q6aYjwVBSvZXPJ79HIsr2t6zjL//hJV46Ok56Ms9/ePf5c9NgEZEGqccwS92J4J4MNeoMw+OTJKIRehPTL6K76d3ns7G/j6f2HuPz11zE+WctanlbRURmQj2GWZrqZj0j41mW9cYbWpG7vDfBg594J2OZHEu6dZ8FEWk/9RhmqSdR/77Pw6mpF7dVi0ZMoSAiZwwFwyyVagy1ZiYNj2enLTyLiJypFAyzVAqGWjWG4lCSgkFEFiYFwyx1TVV8TtW/5LaIyJlOwTBLJ6erVg0l5fIFjqcnNZQkIguWgmGW6tUYjqcncZ9+cZuIyJlKwTBLfV3Fmb7j2VzF/kYXt4mInKkUDLNUurnO6ERlMAwH92hQjUFEFioFwywlYxHiUWMsUx0MpR6D1iWIyMKkYJgls+K9o8cmag8lqcYgIguVgqEJfV2x+j0GDSWJyAKlYGhCXzJeo8aQpScRPXktJRGRhUbB0IRFyRhjmcmKfcPjM7tOkojImUbB0IRaQ0lHx7OsnOaWniIiZzIFQxNqFZ+HxzMqPIvIgqZgaELN4vNYluW9yTa1SESkeQqGJixKxiqKz+7O0fEsKzSUJCILmIKhCX3JGJlcgWyuABSvm5TJFTSUJCILmoKhCSevlxQMJx0dK65hWKFgEJEFTMHQhNL1kkp1hqPjGQANJYnIgtZUMJjZcjN7yMxeDL4uq3PcjuCYF81sR9n+L5rZXjMba6Yd7bKoq/JCeqVVzyo+i8hC1myP4WbgB+6+CfhBsF3BzJYDnwMuBy4DPlcWIH8b7FuQ+pLFC+Wd6jFoKElEFr5mg2EbcE/w+B7g2hrHvA94yN2H3X0EeAi4CsDdf+bu+5tsQ9uUegwn0sXVz6Ueg4aSRGQhazYYVpV+sQdfz6pxzGpgb9n2ULBvRszsRjMbMLOBw4cPz6qxrVaafVQKhCOjGbrjUXoSsXY2S0SkKdP+BjOz7wNn13jq9xp8D6uxzxt87akXuN8J3AmwdevWGb9+LpR6BqUhpAMnJli1WPUFEVnYpg0Gd39PvefM7KCZnePu+83sHOBQjcOGgHeVba8B/u8M23lG6knE6I5HOTpWnI106ESGVYu72twqEZHmNDuUtBMozTLaAXynxjEPAlea2bKg6HxlsC8UlvcmTg4lHTgxwdlLFAwisrA1Gwx/CLzXzF4E3htsY2ZbzexrAO4+DHwBeCz4d2uwDzP7IzMbAnrMbMjMbmmyPfNuZV+CI+NZ3D0YSlIwiMjC1lSV1N2PAlfU2D8AfLRs+27g7hrHfQr4VDNtaLflvQkOj2U4lpokmysoGERkwdPK5yat6EtyZDTLa8fSAJyroSQRWeAUDE1au6yHg6MTPLf/BAAb+/va3CIRkeYoGJq0ob8Xd3jkhUOYwXkretrdJBGRpigYmrRxZS8A33/+IGuWddMVj7a5RSIizVEwNGlDEAyTeefCVYva3BoRkeYpGJrUm4ydDId3bOpvc2tERJqni/q0wO0f3MLfPrWPD75lbbubIiLSNAVDC2xZu5Qta5e2uxkiIi2hoSQREamgYBARkQoKBhERqaBgEBGRCgoGERGpoGAQEZEKCgYREamgYBARkQrm7u1uw4yZ2WHglVm+fCVwpIXNWQg68TODPncn6cTPDDP/3Oe5+7TX7lmQwdAMMxtw963tbsd86sTPDPrc7W7HfOrEzwxz97k1lCQiIhUUDCIiUqETg+HOdjegDTrxM4M+dyfpxM8Mc/S5O67GICIiU+vEHoOIiEyhY4LBzK4ys91mNmhmN7e7PXPFzNaa2SNm9ryZPWtmHw/2Lzezh8zsxeDrsna3tdXMLGpmT5jZd4PtDWb2aPCZ7zezRLvb2GpmttTMHjCzF4Jz/rawn2sz+4/Bf9vPmNk3zKwrjOfazO42s0Nm9kzZvprn1or+R/D77R/N7NJm3rsjgsHMosAdwNXAZuBDZra5va2aMzngd939DcBbgY8Fn/Vm4Afuvgn4QbAdNh8Hni/bvg24PfjMI8ANbWnV3PoT4O/d/fXAmyl+/tCeazNbDfwOsNXdLwaiwHbCea7/Eriqal+9c3s1sCn4dyPw5828cUcEA3AZMOjue9w9C9wHbGtzm+aEu+93918Ej0cp/qJYTfHz3hMcdg9wbXtaODfMbA3wfuBrwbYB7wYeCA4J42deDLwTuAvA3bPufoyQn2uKd57sNrMY0APsJ4Tn2t1/CAxX7a53brcBX/einwFLzeyc2b53pwTDamBv2fZQsC/UzGw9cAnwKLDK3fdDMTyAs9rXsjnx34FPAYVgewVwzN1zwXYYz/lG4DDwF8EQ2tfMrJcQn2t3fw34Y+BVioFwHHic8J/rknrntqW/4zolGKzGvlBPxzKzPuCvgE+4+4l2t2cumdkHgEPu/nj57hqHhu2cx4BLgT9390uAcUI0bFRLMKa+DdgAnAv0UhxGqRa2cz2dlv733inBMASsLdteA+xrU1vmnJnFKYbC/3L3bwe7D5a6lsHXQ+1q3xz4FeAaM3uZ4jDhuyn2IJYGww0QznM+BAy5+6PB9gMUgyLM5/o9wEvuftjdJ4FvA/+c8J/rknrntqW/4zolGB4DNgUzFxIUi1U729ymORGMrd8FPO/uXy57aiewI3i8A/jOfLdtrrj7p919jbuvp3huH3b3fw08AlwXHBaqzwzg7geAvWZ2YbDrCuA5QnyuKQ4hvdXMeoL/1kufOdTnuky9c7sT+EgwO+mtwPHSkNNsdMwCNzP7NYp/RUaBu939i21u0pz9WC0+AAAAtUlEQVQws7cDPwKe5tR4+2co1hm+Cayj+D/X9e5eXdha8MzsXcAn3f0DZraRYg9iOfAE8G/cPdPO9rWamW2hWHBPAHuA36L4B19oz7WZfR74IMUZeE8AH6U4nh6qc21m3wDeRfEKqgeBzwF/Q41zG4TkVyjOYkoBv+XuA7N+704JBhERaUynDCWJiEiDFAwiIlJBwSAiIhUUDCIiUkHBICIiFRQMIiJSQcEgIiIVFAwiIlLh/wPBMKVTM1vIuAAAAABJRU5ErkJggg==\n", + "text/plain": [ + "<Figure size 432x288 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "pl.plot(tout, yout[0])" + ] + }, + { + "cell_type": "code", + "execution_count": 101, + "metadata": {}, + "outputs": [], + "source": [ + "tbout, bout = sps.dlsim((a,b,0.1),t=np.append(tout,np.arange(99,199,0.1)) ,u=np.append((np.flip(yout[0],0)),(yout[0][-1]*np.ones_like(np.arange(99,199,0.1)))))" + ] + }, + { + "cell_type": "code", + "execution_count": 102, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([0.00000000e+00, 1.00050302e-01, 2.00100604e-01, ...,\n", + " 1.98699899e+02, 1.98799950e+02, 1.98900000e+02])" + ] + }, + "execution_count": 102, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tbout" + ] + }, + { + "cell_type": "code", + "execution_count": 103, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[-1.40720618e-22],\n", + " [-2.00251656e-21],\n", + " [-1.42042184e-20],\n", + " ...,\n", + " [-4.73992765e-14],\n", + " [-4.91453138e-14],\n", + " [-5.07749201e-14]])" + ] + }, + "execution_count": 103, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "bout" + ] + }, + { + "cell_type": "code", + "execution_count": 121, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[<matplotlib.lines.Line2D at 0x1c2ea4a550>]" + ] + }, + "execution_count": 121, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYQAAAD8CAYAAAB3u9PLAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJzt3Xl8FdX9//HXJwlJCDshgCxh30EQAii4oxbrglZUEBVFxbXaYqu41lrbn1tr1WpdcQEVEEVxxQVXFCSRQNgNYQsoJOwEsp/fHxn6jTExF7LMvTfv5+NxH7l35szwOdxMPnPmzJxjzjlEREQi/A5ARESCgxKCiIgASggiIuJRQhAREUAJQUREPEoIIiICKCGIiIhHCUFERAAlBBER8UT5HcChaNGihevYsaPfYYiIhJSUlJRs51xCZeVCKiF07NiR5ORkv8MQEQkpZrYhkHK6ZCQiIoASgoiIeJQQREQEUEIQERGPEoKIiABKCCIi4lFCEBERIMDnEMxsJPAoEAk855y7v8z6GOBlYBCwHbjQObe+1PpEYAVwj3Pu4UD2KSKHprjY8eOeXDKy9rEuO4d9eYUcnCHXOYdz4IDiUu9xjnqRESTGx9GpRQM6tmhA49h6PtZC/FRpQjCzSOAJ4FQgE1hkZnOccytKFbsC2Omc62pmY4AHgAtLrX8E+OAQ9yki5cjJK2Rddg5rs/aRkfV/P9dl53CgoKjK+2/RMJqO8SXJoZP3KvkcR1x0SD3LKocokG93CJDunMsAMLPpwChKzvgPGgXc472fBfzHzMw558zsHCADyDnEfYoIsDe3gC/XZPPpyq0syNjOlt25/1tnBu2a1adLQkOO7hxP54QGdEloSOeEBjSpX+9/ZQzDDCLMsIPLzADILShiw/b9rMvOYf32HNZn55CRncOXa7KYlZL5s1h6tm7EST1bcnLPlhzVvilRkbrqHE4CSQhtgU2lPmcCQysq45wrNLPdQLyZHQBupaQl8KdD3CcAZjYRmAiQmJgYQLgioW/Tjv18snIrn67cxsJ12ykocjSLq8ex3RK4qFVD749+QzrExxFbL7JK/1ZsvUh6tG5Ej9aNfrEuJ6+Q9dtLWh8ZWTnMT8/mmS8z+O/na2lSvx4ndE9gRK+WnNA9gaZx0VWKQ/wXSEKwcpa5AMv8FXjEObfv4NnIIeyzZKFzzwDPACQlJZVbRiTUFRU7Ujft5JOV2/h05VbWbN0HQJeEBkw4thOn9GrFwMRmREaUd+jUnAYxUfRp04Q+bZoAcOOIbuw+UMBXP2Qxb9U2vlidxZwlW4gwGJjY7H+th56tG1HmmJcQEEhCyATal/rcDthSQZlMM4sCmgA7KDnrH21mDwJNgWIzywVSAtinSNj7YeteXvhmPXOX/cT2nHwiI4whHZtz5xntOaVXKzq2aOB3iL/QpH49zjyyDWce2YbiYseSzF18tmob81Zv46G5q3lo7mraNavPxUd3YOzgRJrEqZM6VJhzv37S7f2BXwOMADYDi4CLnHPLS5W5HujnnLvG61T+nXPugjL7uQfY55x7OJB9licpKclptFMJdc45vk7P5rmv1vHFmixi60VwWu/WnNK7FSd0T/jftf9QtHVPLp+v3sbsxZtZkLGD+vUiOW9QWy4f3okuCQ39Dq/OMrMU51xSZeUqbSF4fQI3AHMpuUV0inNuuZndCyQ75+YAzwNTzSydkpbBmMPZZ6W1EglheYVFzEndwvNfr2PVT3tJaBTDn07rzkVDO9C8QXhcf2/VOJYLBydy4eBEVmzZwwvz1zFzUSbTFmzkpB4JTDi2E8d2baHLSUGq0hZCMFELQULRjpx8XlmwgZe+3UD2vjx6tm7Elcd15qz+RxATVbUO4VCQtTePVxduZOqCkvp3b9WQy4d34tyj2la5Q1wCE2gLQQlBpIakb9vHlPnreCMlk7zCYk7skcBVx3VmWJf4OnmGnFdYxLtLfuT5r9ex4sc9NIurx0VDE7l8eCdaNIzxO7ywpoQg4pOte3K5/4NVzF68meioCM4b2JYJwzvRrdUvb+usi5xzfLduB1Pmr+OjFVtpGB3F70d05bJhnYiO0nMNNUEJQaSW5RUWMeXr9Tw+7wcKixwTju3Elcfp7PfXrM3axz/eW8mnq7bRqUUD7jyjFyf3bFknW1A1SQlBpBbNW7WVe99Zwfrt+zmlVyvuOrMXHeKD75bRYPX56m387d0VrM3K4fjuCdx9Zi+6tlSLqrooIYjUgoysffzt3RV8tjqLzgkN+MtZfTihe4LfYYWkgqJipn67gUc+WcP+/CIuPaYDfxjRXc8xVAMlBJEatDe3gP/MS2fK/HXEREXyh1O6cekxHXUNvBps35fHvz5ew2vfbaRJ/XrcfFoPxg5JrPWntMOJEoJIDSgudsxevJn7P1xF1t48zh/Ujj+P7EHLRrF+hxZ2VmzZw1/fWc7CdTvo2boRfzmrD8d0ifc7rJCkhCBSzTbt2M+kmaksWr+T/u2b8tez+zCgfVO/wwprzjk+XPYT9723ks27DnDZsI5MPr2nnl84RNX2pLKIwNupm7lz9jIAHjzvSEYPakeELmHUODPj9H5HcFLPljzw4SpemL+eb9du59GxA+jZurHf4YUdXfAU+RV7cwuYNCOVm6an0r11I96/6TguGNxeyaCWxdaL5C9n9eHFywezPSefs/8znylfr6O4OHSucIQCJQSRCizeuJMzHvuat1I3c9OIbsyYeDTtm8f5HVaddmKPlsz9w3Ec360F9767gsteXMS2PbmVbygBUUIQKaOo2PHEZ+mMfupbioodM64+hj+e2l2zgwWJ+IYxPHtpEved05fv1m1n5KNf8fGKrX6HFRb0Gy5SypZdB7jo2QU8NHc1p/dtzfs3Hcfgjs39DkvKMDMuProD7/7+WFo3juWql5O5Y3YaB/KrPqd0XaZOZRHPB2k/MvnNNAqKinn4/P6cN7CthlAIcl1bNmL29cP410drePrLDBZkbOfRMUfRt20Tv0MLSWohSJ13IL+I295cyrWvfE+H+Djeu/E4Rg9qp2QQImKiIrntt7145cqh7Msr5Nwn5/PSN+sJpVvqg4USgtRpW/fkcsHT3zJ90SauPbELs64ZRqcgnLZSKje8aws+vOl4TuiewF/mLOeut5dRUFTsd1ghRZeMpM5atnk3V76UzJ7cAp69JIlTerfyOySpomYNonnmkiQenLuap75Yy7rsHJ68aJDGQwqQWghSJ320/CfOf+pbIgxmXTNMySCMREQYk0/vyUOjj+S7dTs498n5rMvO8TuskKCEIHWKc46nv1jL1dNS6N6qIW9dP5zebfTEazg6P6k9r151NLsOFHDOE/P5Jj3b75CCnhKC1Bn5hcXc+sZS/t8Hq/htvyOYcfUxtGysQenC2eCOzXn7+uG0ahzDpVO+45WFG/wOKagpIUidsGt/PpdOWcjM5ExuPLkrj485SgOk1RHtm8fxxrXDOK5bC+6YvYy/vrOcQnU2l0sJQcJeRtY+zn3yG77fsIt/XziASaf10FhEdUyj2Ho8N34wE4Z34oX567ny5ZKbCeTnlBAkrH2zNptzn/yGPQcKePWqoZxzVFu/QxKfREYYd5/Vm3+c24+vf8jmvCe/YeP2/X6HFVSUECRszVy0iUuf/46WjWJ46/rhJGkICgEuGprIy1cMYdvePM55cj7LNu/2O6SgoYQgYem5rzK45Y2lHNMlnjeuG6ZRSuVnhnVpwVvXD6d+vUjGPruAlA07/Q4pKASUEMxspJmtNrN0M5tczvoYM5vhrV9oZh295UPMLNV7LTGzc0tts97M0rx1mgZNqs3jn/7Afe+t5Ix+RzDlssE0jtVDSfJLnVo0YOY1x9CiYQyXPL+Qb9bqttRKE4KZRQJPAKcDvYGxZta7TLErgJ3Oua7AI8AD3vJlQJJzbgAwEnjazEo/HX2Sc25AIFO7iVTGOceDH67inx+v4XcD2/LomAHU05DV8ivaNq3PjKuPpn2zOC5/YRGfrdrmd0i+CuRoGQKkO+cynHP5wHRgVJkyo4CXvPezgBFmZs65/c65Qm95LKDRpqRGOOe4990VPPn5Wi4amsjDo/tr/gIJSMtGsUyfeDTdWzVi4tRk3k/70e+QfBPIEdMW2FTqc6a3rNwyXgLYDcQDmNlQM1sOpAHXlEoQDvjIzFLMbOLhV0HquuJix+2zl/HC/PVMGN6Jv5/TV7eVyiFp1iCaV64aypHtmnLDq9/zRkqm3yH5IpCEUN6RVfZMv8IyzrmFzrk+wGDgNjM7+GjocOfcQEouRV1vZseX+4+bTTSzZDNLzsrKCiBcqUsKi4r50+tLeO27jVx/UhfuOrOXhq2Ww9I4th5TrxjCMV3iufn1JUxbUPeeag4kIWQC7Ut9bgdsqaiM10fQBNhRuoBzbiWQA/T1Pm/xfm4DZlNyaeoXnHPPOOeSnHNJCQkJAYQrdUV+YTE3Tl/Mm4s386fTuvPn3/RUMpAqiYuO4vnxgzm5Z0vufGsZz32V4XdItSqQhLAI6GZmncwsGhgDzClTZg4w3ns/GpjnnHPeNlEAZtYB6AGsN7MGZtbIW94AOI2SDmiRgOQWFHHttBTeT/uJO8/oxQ0nd/M7JAkTsfUieeriQZzR7wjue28lj37yQ52ZbKfS+RCcc4VmdgMwF4gEpjjnlpvZvUCyc24O8Dww1czSKWkZjPE2PxaYbGYFQDFwnXMu28w6A7O9s7ko4FXn3IfVXTkJT/vzC5n4cgpfp2dz3zl9ufjoDn6HJGEmOiqCx8YeRf3oSB75ZA37CwqZPDL8W6AWSpkvKSnJJSfrkYW6bF9eIRNeWETyhh08OLo/owe18zskCWPFxY6/zFnO1AUbmDC8U8j2UZlZSiC392vGNAkZuQVFXPHiIr7fuJPHxh7FmUe28TskCXMREca9o/oQFWlMmb+ORrFR/PHU7n6HVWOUECQkFBQVc90r3/Pd+h38+8IBSgZSa8yMu87ozb7cQh799AcaxUZx5XGd/Q6rRighSNArKnZMmrmEeau28fdz+zJqgEYsldoVEWHcf96R7M8v4r73VtIwJooxQxL9DqvaKSFIUHPOcdfby3hnyRYmn96TcUPVgSz+iIwwHrlwADn5hdw2O40GMVGc1T+8Wqp6tl+C2gMfrubVhRu59sQuXHNCF7/DkTouOiqC/44bxOAOzfnjjFTmrdrqd0jVSglBgtaTn6fz1BdrGTc0kVt+08PvcEQAqB8dyfOXJdHriMZcO+17vl273e+Qqo0SggSlaQs28OCHqxk1oA1/G9U3JG/1k/DVKLYeL00YQmLzOK58aRGpm3b5HVK1UEKQoPN26mbuensZI3q25OHz+2ugOglKzRtEM+3KoTRvGM34Kd+x+qe9fodUZUoIElQ+WbGVSTOXMLRTc54YN1DzGUhQa9U4lleuOJrYehFc/PxC1mfn+B1Slehok6Dx7drtXPfq9/Rt05jnxg8mtl6k3yGJVCoxPo5pVwylsKiYcc8t5MfdB/wO6bApIUhQWLJpF1e+tIgOzeN48fIhNIzRHdESOrq1asTLE4ay50AB455byM6cfL9DOixKCOK79dk5XPbCdzRvWHJNtlmDaL9DEjlk/do14bnxSWTuOMDVU1PIKyzyO6RDpoQgvtqZk8+EFxcB8PKEobRqHFvJFiLBa2jneB6+oD/frd/BLbOWhtyw2WqXi2/yCou4eloKmTsP8MpVQ+nUooHfIYlU2dn927Bpx34emruaxOZx3Hxa6DxDo4QgvnDOMfmNNL5bt4NHxwxgcMfmfockUm2uO7ELG7fv5/F56bRvHscFSe0r3ygIKCGILx799Adme1NfarA6CTdmxn3n9mXzrgPc/mYabZvWZ3jXFn6HVSn1IUite/P7TP79yQ+MHtSO60/q6nc4IjWiXmQET148kM4JDbhmWgo/bA3+B9eUEKRWLcjYzq1vLOWYzvH849x+GpJCwlrj2HpMuazkmZrLXljEtr25fof0q5QQpNaszdrH1VNTSGwex1MXDyI6Sr9+Ev7aNYtjyvjB7MjJ58qXktmfX+h3SBXSESm1Yvu+PC5/YRFREcaLlw+hSVw9v0MSqTX92jXhsbFHkbZ5NzdNT6WoODhvR1VCkBqXW1DExKkpbN2Ty7Pjk2jfPM7vkERq3am9W3H3mb35eMVW/v7eSr/DKZfuMpIaVVzs+NPrS0jZsJMnxw1kYGIzv0MS8c3lwzuxYft+psxfR4f4OMYP6+h3SD+jhCA16p8fr+bdpT8y+fSe/LbfEX6HI+K7u87sTebOA/z1neW0b16fk3u28juk/9ElI6kxb6Rk8sRnaxk7pD1XH9/Z73BEgkJkhPHY2AH0btOYm15LJX3bPr9D+h8lBKkRSzbt4rbZaRzTOZ57NeOZyM/ERUfx9CVJREdFMHFqMntyC/wOCVBCkBqQtTePq6emkNAwRpPciFSgbdP6PDluIBu37+cP01MpDoI7jwI6Us1spJmtNrN0M5tczvoYM5vhrV9oZh295UPMLNV7LTGzcwPdp4Sm/MJirnslhV0H8nn6kkE011DWIhUa2jmev5zVm3mrtvHIJ2v8DqfyhGBmkcATwOlAb2CsmfUuU+wKYKdzrivwCPCAt3wZkOScGwCMBJ42s6gA9ykh6G/vrmDR+p08cN6R9G3bxO9wRILexUd34MKk9jw+L50P0n70NZZAWghDgHTnXIZzLh+YDowqU2YU8JL3fhYwwszMObffOXfwsbxY4GCbKJB9SoiZsWgjUxdsYOLxnTVgnUiAzIx7z+nDUYlNufn1Jaz6aY9vsQSSENoCm0p9zvSWlVvGSwC7gXgAMxtqZsuBNOAab30g+8TbfqKZJZtZclZWVgDhih++37iTu95aznHdWnDLb0Jn/HeRYBATFclTFw+iYUwUE19OYdd+f6bgDCQhlHd7SNnejwrLOOcWOuf6AIOB28wsNsB94m3/jHMuyTmXlJCQEEC4Utu27cnlmqkptGoSw+NjjyJKncgih6xV41ieumQQP+3O5fevLaawqLjWYwjkyM0ESs/u0A7YUlEZM4sCmgA7Shdwzq0EcoC+Ae5TQkBeYRHXTEthb24hz1ySRNM4dSKLHK6Bic24d1Qfvvohmwfnrq71fz+QhLAI6GZmncwsGhgDzClTZg4w3ns/GpjnnHPeNlEAZtYB6AGsD3CfEgLumbOC7zfu4uHz+9PriMZ+hyMS8sYMSeSSozvwzJcZvJ26uVb/7UqHrnDOFZrZDcBcIBKY4pxbbmb3AsnOuTnA88BUM0unpGUwxtv8WGCymRUAxcB1zrlsgPL2Wc11kxr2ysINvPbdRq49sQtnHKlhKUSqy91n9Wb11r3cMmspXRIa1tode+ac/w9DBCopKcklJyf7HYYAyet3MPbZBQzr0oIplw0mMkJPIotUp+x9eZz1+NdEmPH2DcNp0TDmsPdlZinOuaTKyqn3Tw7ZT7tzuWba97RpWp/HxhylZCBSA1o0jOGZS5LI3pfH9a98T0EtdDIrIcghyS8s5pppKezPL+TZS5M00Y1IDerXrgn3n9ePHTn57Myp+VtRNfy1HJJ/vL+S1E27eHLcQLq3auR3OCJh79yj2nFGvza1MuWsWggSsPfTfuTFb9Zz+fCOmttApBbV1vzjSggSkHXZOdwyaykD2jflttN7+R2OiNQAJQSpVG5BEddOSyEq0nhi3MBaO1sRkdqlPgSp1D1zlrPqp728cNlg2jat73c4IlJDdKonv+qNlEymL9rEdSd24aSeLf0OR0RqkBKCVGj1T3u54600hnZqzqRTu/sdjojUMCUEKVdOXiHXvZJCw5h6GsFUpI7QUS6/4Jzj9tlprMvO4bGxA2jZONbvkESkFighyC+8snAjb6duYdKp3RnWpYXf4YhILVFCkJ9Jy9zNve+s4ITuCVx3Yle/wxGRWqSEIP+z+0AB172aQnzDaB65cAARGrROpE7RcwgClPQb/Pn1Jfy4K5cZVx9D8waa+UykrlELQQCYMn89H63YyuTTezKoQzO/wxERHyghCMs27+b+D1ZySq+WXHFsJ7/DERGfKCHUcTl5hfz+tcXEN4jhodH9MVO/gUhdpT6EOu7ut5ezfnsOr155NM3UbyBSp6mFUIe9tXgzb3yfye9P6soxXeL9DkdEfKaEUEdt2J7DnW8tI6lDM24c0c3vcEQkCCgh1EH5hcXc+NpiIgz+PWaAxikSEUB9CHXSPz9azZLM3fx33EDaNYvzOxwRCRI6NaxjvlyTxdNfZnDR0ERO17zIIlKKEkIdkrU3j0kzl9C9VUPuPrO33+GISJAJKCGY2UgzW21m6WY2uZz1MWY2w1u/0Mw6estPNbMUM0vzfp5capvPvX2mei9Nx1WDiosdN7++hL25BTw+diCx9SL9DklEgkylfQhmFgk8AZwKZAKLzGyOc25FqWJXADudc13NbAzwAHAhkA2c5ZzbYmZ9gblA21LbjXPOJVdTXeRXPPd1Bl+uyeK+c/rSo3Ujv8MRkSAUSAthCJDunMtwzuUD04FRZcqMAl7y3s8CRpiZOecWO+e2eMuXA7FmFlMdgUvglmzaxYMfrmZkn9aMG5rodzgiEqQCSQhtgU2lPmfy87P8n5VxzhUCu4GyTzqdByx2zuWVWvaCd7noLtOYCTVib24BN05fTMtGMdx/Xj8NTSEiFQokIZT3F8QdShkz60PJZaSrS60f55zrBxznvS4p9x83m2hmyWaWnJWVFUC4Utrdby9n0479PDr2KJrGaWgKEalYIAkhE2hf6nM7YEtFZcwsCmgC7PA+twNmA5c659Ye3MA5t9n7uRd4lZJLU7/gnHvGOZfknEtKSEgIpE7ieTt1M7MXb+bGEd0Y3LG53+GISJALJCEsArqZWScziwbGAHPKlJkDjPfejwbmOeecmTUF3gNuc87NP1jYzKLMrIX3vh5wJrCsalWR0jJ37ufOt5YxqEMzbjhJU2GKSOUqTQhen8ANlNwhtBKY6Zxbbmb3mtnZXrHngXgzSwcmAQdvTb0B6ArcVeb20hhgrpktBVKBzcCz1Vmxuqyo2DFp5hKcg0cu0NAUIhIYc65sd0DwSkpKcsnJuku1Mk9+ns6DH67m4fP7M3pQO7/DERGfmVmKcy6psnI6dQwzaZm7+ddHazij3xGcN7DszWAiIhVTQggjB/KLuGnGYlo0jOHv5/bVLaYickg02mkY+fv7K8jIyuHVK4fqFlMROWRqIYSJT1duZdqCjVx1XCeGdW3hdzgiEoKUEMJA1t48bpm1lF5HNOZPv+nhdzgiEqJ0ySjEOee4ZdYS9uUV8tqYAcREaRRTETk8aiGEuGkLNvDZ6ixuO70n3VtpFFMROXxKCCEsfdte7ntvJSd0T2D8sI5+hyMiIU4JIUTlFxZz0/RUGsRE8dD5R+oWUxGpMvUhhKh/fbyG5Vv28OylSbRsFOt3OCISBtRCCEELMrbz9JdrGTskkVN7t/I7HBEJE0oIIWZvbgE3z1xCx/gG3HVmL7/DEZEwoktGIeav76zgx90HmHXtMOKi9fWJSPVRCyGEfLjsJ2alZHLDSV0ZmNjM73BEJMwoIYSIbXtzuX12Gv3aNuH3I7r5HY6IhCElhBDgnOO2N9LIySvkkQv7U08T3ohIDdBflhAwY9EmPl21jVtH9qRrSz2NLCI1QwkhyG3YnsO9765geNd4LtPTyCJSg5QQglhRsePmmUuIjDAeGt2fiAg9jSwiNUf3LQaxp79cS/KGnfz7wgG0aVrf73BEJMyphRCklm/ZzSMfl8yNPGpAG7/DEZE6QAkhCOUWFDFpxhKaxUVz3zmaG1lEaocuGQWhf360mtVb9/LC5YNp1kBzI4tI7VALIcgsyNjOc1+vY9zQRE7q0dLvcESkDlFCCCIHB67r0DyOO87QwHUiUrt0ySiIaOA6EfFTQC0EMxtpZqvNLN3MJpezPsbMZnjrF5pZR2/5qWaWYmZp3s+TS20zyFuebmaPWR3vOf1oecnAddedqIHrRMQflSYEM4sEngBOB3oDY82sd5liVwA7nXNdgUeAB7zl2cBZzrl+wHhgaqlt/gtMBLp5r5FVqEdI274vj9tnp9GnTWNu1MB1IuKTQFoIQ4B051yGcy4fmA6MKlNmFPCS934WMMLMzDm32Dm3xVu+HIj1WhNHAI2dc9865xzwMnBOlWsTgpxz3D47jT0HCvnXBQOIjlK3joj4I5C/Pm2BTaU+Z3rLyi3jnCsEdgPxZcqcByx2zuV55TMr2WedMHvxZuYu38rNp3WnR2sNXCci/gmk57K8a/vuUMqYWR9KLiOddgj7PLjtREouLZGYmFhZrCFly64D/GXOcgZ3bMaVx3X2OxwRqeMCaSFkAu1LfW4HbKmojJlFAU2AHd7ndsBs4FLn3NpS5dtVsk8AnHPPOOeSnHNJCQkJAYQbGoqLHbfMWkpRsePh8/sTqYHrRMRngSSERUA3M+tkZtHAGGBOmTJzKOk0BhgNzHPOOTNrCrwH3Oacm3+wsHPuR2CvmR3t3V10KfB2FesSUqYt3MDX6dnc/ttedIhv4Hc4IiKVJwSvT+AGYC6wEpjpnFtuZvea2dleseeBeDNLByYBB29NvQHoCtxlZqne6+Djt9cCzwHpwFrgg+qqVLBbl53DP95fyfHdExg3NLwug4lI6LKSm3xCQ1JSkktOTvY7jCopLCrmgqe/JX3bPj764wm0bhLrd0giEubMLMU5l1RZOT0OW8ue/jKD7zfu4tExA5QMRCSo6Kb3WrRiyx7+/UnJHAdn99ccByISXJQQakleYRGTZqbSpH40f9McByIShHTJqJY8+skPrPppL8+PT6K55jgQkSCkFkItSNmwg6e+WMsFSe0Y0auV3+GIiJRLCaGG7c8v5OaZSziiSX3uOrPsmIAiIsFDl4xq2P0frGL99v28dtXRNIqt53c4IiIVUguhBn31QxYvf7uBCcM7cUyXsmP9iYgEFyWEGrL7QAF/fn0pXRIacMvIHn6HIyJSKSWEGvLXOcvJ2pfHvy4YQGy9SL/DERGplBJCDfhw2U+8uXgz15/Yhf7tm/odjohIQJQQqln2vjzumJ1G37aNueFkTYcpIqFDdxlVI+cct7/w/yAbAAAKTElEQVSZxt68Ql7TdJgiEmL0F6savfn9Zj5asZU/ndad7q00HaaIhBYlhGqyedcB7pmznCEdm3PFsZoOU0RCjxJCNSiZDnMJRU7TYYpI6FJCqAZTF2xgfvp27jijF4nxcX6HIyJyWJQQqigjax//74OVnNA9gYuGaDpMEQldSghVUFhUzM2vLyE6MoIHzjtScxyISEjTbadV8PSXGSzWdJgiEibUQjhMmg5TRMKNEsJh0HSYIhKOdMnoMDzysabDFJHwoxbCIVq0fgdPf7mWMYPbazpMEQkrSgiHYF9eIZNmptKuWX3u1HSYIhJmdMnoEPz9vRVk7jzAjInH0DBG/3UiEl4CaiGY2UgzW21m6WY2uZz1MWY2w1u/0Mw6esvjzewzM9tnZv8ps83n3j5TvVfL6qhQTfl05VZe+24TE4/vzJBOzf0OR0Sk2lV6mmtmkcATwKlAJrDIzOY451aUKnYFsNM519XMxgAPABcCucBdQF/vVdY451xyFetQ43bk5HPrG2n0bN2ISad29zscEZEaEUgLYQiQ7pzLcM7lA9OBUWXKjAJe8t7PAkaYmTnncpxzX1OSGEKSc447Zqex+0A+/7pgADFRmg5TRMJTIAmhLbCp1OdMb1m5ZZxzhcBuID6Afb/gXS66yyq4md/MJppZspklZ2VlBbDL6vVW6mY+WPYTk07tQe82jWv93xcRqS2BJITy/lC7wyhT1jjnXD/gOO91SXmFnHPPOOeSnHNJCQkJlQZbnbbsOsDdby8nqUMzJh6vOQ5EJLwFkhAygfalPrcDtlRUxsyigCbAjl/bqXNus/dzL/AqJZemgkZxsePPs5ZQVOz45wWa40BEwl8gCWER0M3MOplZNDAGmFOmzBxgvPd+NDDPOVdhC8HMosyshfe+HnAmsOxQg69JL327nvnp27nrzN50iG/gdzgiIjWu0ruMnHOFZnYDMBeIBKY455ab2b1AsnNuDvA8MNXM0ilpGYw5uL2ZrQcaA9Fmdg5wGrABmOslg0jgE+DZaq1ZFaRv28f9H6zi5J4tGTO4feUbiIiEgYCernLOvQ+8X2bZ3aXe5wLnV7Btxwp2OyiwEGtXQVExk2amEhcdyf3n9dPAdSJSZ+hx2zKe+CydpZm7+e+4gbRspDkORKTu0FhGpSzZtIvH56Vz7lFtOb3fEX6HIyJSq5QQPPvzC/njjFRaNYrhnrP7+B2OiEit0yUjz9/fW8m67Tm8cuVQmtSv53c4IiK1Ti0ESgaue2XhRq46rjPDurTwOxwREV/U+YSQvS+PW99YSs/Wjbj5NA1cJyJ1V52+ZOScY/IbS9mTW8grVx6tgetEpE6r0y2E6Ys28cnKbdw6sic9WjfyOxwREV/V2YSwLjuHe99ZwbFdW3D5sI5+hyMi4rs6mRAKior5w4xUoqMiePj8/kRo4DoRkbrZh/Cfeeks2bSLJy4aSOsmehpZRATqYAvh+407+c9n6fzuqLaccaSeRhYROahOJYScvJKnkVs3juWeUXoaWUSktDp1yehv765g4479zJh4DI1j9TSyiEhpdaaF8NHyn5i+aBPXnNCFIZ2a+x2OiEjQqRMJYdveXCa/mUafNo354yl6GllEpDxhnxCcc9w6ayk5eYX8+8IBREeFfZVFRA5L2PchFBU7urduxEk9W9KtlZ5GFhGpSNgnhKjICG47vZffYYiIBD1dPxEREUAJQUREPEoIIiICKCGIiIhHCUFERAAlBBER8SghiIgIoIQgIiIec875HUPAzCwL2BBA0RZAdg2HU5vCrT4QfnUKt/pA+NUp3OoDgdepg3MuobJCIZUQAmVmyc65JL/jqC7hVh8IvzqFW30g/OoUbvWB6q+TLhmJiAighCAiIp5wTQjP+B1ANQu3+kD41Snc6gPhV6dwqw9Uc53Csg9BREQOXbi2EERE5BCFVEIws5vMbJmZLTezP3jLZphZqvdab2apFWw70sxWm1m6mU2u3cgrVsU6rTezNK9ccu1GXr4K6jPAzBYcjNPMhlSw7Xgz+8F7ja/dyCtWxToVlfou59Ru5OWroD79zexb7/fpHTNrXMG2QXccVbE+QXEMmdkUM9tmZstKLWtuZh97x8PHZtbMW25m9pj3HSw1s4EV7HOQV7d0r7xVGohzLiReQF9gGRBHycQ+nwDdypT5J3B3OdtGAmuBzkA0sAToHcp18tatB1r4XY/K6gN8BJzulfkt8Hk52zYHMryfzbz3zUK5Tt66fX7XIcD6LAJO8MpMAP5WzrZBdxxVpT7euqA4hoDjgYHAslLLHgQme+8nAw+U+n37ADDgaGBhBfv8DjjGK/fBwd/XX3uFUguhF7DAObffOVcIfAGce3Cll/0uAF4rZ9shQLpzLsM5lw9MB0bVQsyVqUqdglFF9XHAwTO0JsCWcrb9DfCxc26Hc24n8DEwshZirkxV6hSMKqpPD+BLr8zHwHnlbBuMx1FV6hM0nHNfAjvKLB4FvOS9fwk4p9Tyl12JBUBTMzui9Ibe58bOuW9dSXZ4udT2FQqlhLAMON7M4s0sjpIs2b7U+uOArc65H8rZti2wqdTnTG+Z36pSJyj5o/SRmaWY2cQajjUQFdXnD8BDZrYJeBi4rZxtQ+07CqROALHeJaUFZlbpAVkLKqrPMuBsr8z5/Pz38KBg/I6qUh8IvmOotFbOuR8BvJ8tveWBfA9tveW/VuYXQmZOZefcSjN7gJJsv4+S5mphqSJjqfhMurxrZ77fXlXFOgEMd85tMbOWwMdmtso70/DFr9TnWuCPzrk3zOwC4HnglDKbh9p3FEidABK976gzMM/M0pxza2sr/rJ+pT4TgMfM7G5gDpBfzuZB9x1VsT4QZMdQgAL5Hg7ruwqlFgLOueedcwOdc8dT0rz6AcDMooDfATMq2DSTn58htCNImvhVqBPOuS3ez23AbEqa9L6qoD7jgTe9Iq9Tfpyh9h0FUqfS31EG8DlwVI0HXIny6uOcW+WcO805N4iSk5DyklZQfkdVqE9QHkOlbD14Kcj7uc1bHsj3kOkt/7Uyv+R3Z8qhvICW3s9EYBVepyMl15q/+JXtoijppOzE/3WG9fG7PlWsUwOgUan33wAjg7E+wErgRG/5CCClnO2aA+u88s289839rk8V69QMiPHet6AkkQTDzQzl1efgsghKrjdPKGe7oDyOqlCfoDqGgI78vFP5IX7eqfyg9/4Mft6p/F0F+1vkrT/YqfzbSmPw+8s8xP+wr4AV3i/iiFLLXwSuKVO2DfB+qc+/BdZQcqZwh991qWqdKLnTY4n3Wh4sdSqvPsCxQIq3bCEwyFueBDxXatsJQLr3utzvulS1TsAwIM0rkwZc4XddfqU+N3nHxxrgfv7vodWgP44Otz7BdAxR0or5ESig5Oz+CiAe+JSSE4lP8U6QvD/wT3jfQRqQVGo/qaXeJ1HSl7IW+M/B/4Nfe+lJZRERAUKsD0FERGqOEoKIiABKCCIi4lFCEBERQAlBREQ8SggiIgIoIYiIiEcJQUREAPj/t6I7WHRbWxsAAAAASUVORK5CYII=\n", + "text/plain": [ + "<Figure size 432x288 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "pl.plot(tbout[970:1000],bout[970:1000])" + ] + }, + { + "cell_type": "code", + "execution_count": 105, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.04028381793551497" + ] + }, + "execution_count": 105, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.max(bout)" + ] + }, + { + "cell_type": "code", + "execution_count": 106, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(array([989]), array([0]))" + ] + }, + "execution_count": 106, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.where(bout==np.max(bout))" + ] + }, + { + "cell_type": "code", + "execution_count": 117, + "metadata": {}, + "outputs": [], + "source": [ + "filt2 = bout[989-99:989+98]" + ] + }, + { + "cell_type": "code", + "execution_count": 118, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[-3.00869288e-04],\n", + " [-4.45641762e-04],\n", + " [-5.91481095e-04],\n", + " [-7.36066637e-04],\n", + " [-8.76963144e-04],\n", + " [-1.01165372e-03],\n", + " [-1.13757602e-03],\n", + " [-1.25216124e-03],\n", + " [-1.35287558e-03],\n", + " [-1.43726345e-03],\n", + " [-1.50299200e-03],\n", + " [-1.54789623e-03],\n", + " [-1.57002404e-03],\n", + " [-1.56768041e-03],\n", + " [-1.53947007e-03],\n", + " [-1.48433779e-03],\n", + " [-1.40160548e-03],\n", + " [-1.29100549e-03],\n", + " [-1.15270908e-03],\n", + " [-9.87349619e-04],\n", + " [-7.96039594e-04],\n", + " [-5.80380941e-04],\n", + " [-3.42468088e-04],\n", + " [-8.48832612e-05],\n", + " [ 1.89316336e-04],\n", + " [ 4.76619718e-04],\n", + " [ 7.73091844e-04],\n", + " [ 1.07441189e-03],\n", + " [ 1.37591994e-03],\n", + " [ 1.67267189e-03],\n", + " [ 1.95950204e-03],\n", + " [ 2.23109302e-03],\n", + " [ 2.48205215e-03],\n", + " [ 2.70699358e-03],\n", + " [ 2.90062512e-03],\n", + " [ 3.05783874e-03],\n", + " [ 3.17380345e-03],\n", + " [ 3.24405935e-03],\n", + " [ 3.26461135e-03],\n", + " [ 3.23202113e-03],\n", + " [ 3.14349584e-03],\n", + " [ 2.99697185e-03],\n", + " [ 2.79119224e-03],\n", + " [ 2.52577617e-03],\n", + " [ 2.20127898e-03],\n", + " [ 1.81924122e-03],\n", + " [ 1.38222565e-03],\n", + " [ 8.93840700e-04],\n", + " [ 3.58749524e-04],\n", + " [-2.17336328e-04],\n", + " [-8.27679267e-04],\n", + " [-1.46455455e-03],\n", + " [-2.11930588e-03],\n", + " [-2.78241781e-03],\n", + " [-3.44360450e-03],\n", + " [-4.09191446e-03],\n", + " [-4.71585031e-03],\n", + " [-5.30350257e-03],\n", + " [-5.84269600e-03],\n", + " [-6.32114693e-03],\n", + " [-6.72662967e-03],\n", + " [-7.04714991e-03],\n", + " [-7.27112275e-03],\n", + " [-7.38755293e-03],\n", + " [-7.38621460e-03],\n", + " [-7.25782788e-03],\n", + " [-6.99422940e-03],\n", + " [-6.58853406e-03],\n", + " [-6.03528506e-03],\n", + " [-5.33058967e-03],\n", + " [-4.47223792e-03],\n", + " [-3.45980190e-03],\n", + " [-2.29471338e-03],\n", + " [-9.80317771e-04],\n", + " [ 4.78097188e-04],\n", + " [ 2.07329940e-03],\n", + " [ 3.79613790e-03],\n", + " [ 5.63559653e-03],\n", + " [ 7.57887562e-03],\n", + " [ 9.61150166e-03],\n", + " [ 1.17174638e-02],\n", + " [ 1.38793763e-02],\n", + " [ 1.60786641e-02],\n", + " [ 1.82957713e-02],\n", + " [ 2.05103878e-02],\n", + " [ 2.27016922e-02],\n", + " [ 2.48486072e-02],\n", + " [ 2.69300647e-02],\n", + " [ 2.89252752e-02],\n", + " [ 3.08139982e-02],\n", + " [ 3.25768105e-02],\n", + " [ 3.41953654e-02],\n", + " [ 3.56526419e-02],\n", + " [ 3.69331772e-02],\n", + " [ 3.80232803e-02],\n", + " [ 3.89112220e-02],\n", + " [ 3.95873992e-02],\n", + " [ 4.00444701e-02],\n", + " [ 4.02774572e-02],\n", + " [ 4.02838179e-02],\n", + " [ 4.00634810e-02],\n", + " [ 3.96188470e-02],\n", + " [ 3.89547544e-02],\n", + " [ 3.80784111e-02],\n", + " [ 3.69992928e-02],\n", + " [ 3.57290094e-02],\n", + " [ 3.42811430e-02],\n", + " [ 3.26710588e-02],\n", + " [ 3.09156929e-02],\n", + " [ 2.90333205e-02],\n", + " [ 2.70433083e-02],\n", + " [ 2.49658553e-02],\n", + " [ 2.28217249e-02],\n", + " [ 2.06319754e-02],\n", + " [ 1.84176893e-02],\n", + " [ 1.61997090e-02],\n", + " [ 1.39983804e-02],\n", + " [ 1.18333094e-02],\n", + " [ 9.72313380e-03],\n", + " [ 7.68531478e-03],\n", + " [ 5.73594917e-03],\n", + " [ 3.88960596e-03],\n", + " [ 2.15918824e-03],\n", + " [ 5.55821981e-04],\n", + " [-9.11227333e-04],\n", + " [-2.23461004e-03],\n", + " [-3.40891947e-03],\n", + " [-4.43069159e-03],\n", + " [-5.29837794e-03],\n", + " [-6.01229319e-03],\n", + " [-6.57453903e-03],\n", + " [-6.98890620e-03],\n", + " [-7.26075700e-03],\n", + " [-7.39689067e-03],\n", + " [-7.40539422e-03],\n", + " [-7.29548149e-03],\n", + " [-7.07732315e-03],\n", + " [-6.76187061e-03],\n", + " [-6.36067646e-03],\n", + " [-5.88571435e-03],\n", + " [-5.34920081e-03],\n", + " [-4.76342161e-03],\n", + " [-4.14056493e-03],\n", + " [-3.49256348e-03],\n", + " [-2.83094744e-03],\n", + " [-2.16670989e-03],\n", + " [-1.51018612e-03],\n", + " [-8.70947940e-04],\n", + " [-2.57713811e-04],\n", + " [ 3.21724618e-04],\n", + " [ 8.60559262e-04],\n", + " [ 1.35300561e-03],\n", + " [ 1.79432625e-03],\n", + " [ 2.18083825e-03],\n", + " [ 2.50990526e-03],\n", + " [ 2.77991499e-03],\n", + " [ 2.99024325e-03],\n", + " [ 3.14120569e-03],\n", + " [ 3.23399861e-03],\n", + " [ 3.27063018e-03],\n", + " [ 3.25384360e-03],\n", + " [ 3.18703380e-03],\n", + " [ 3.07415910e-03],\n", + " [ 2.91964954e-03],\n", + " [ 2.72831328e-03],\n", + " [ 2.50524258e-03],\n", + " [ 2.25572088e-03],\n", + " [ 1.98513207e-03],\n", + " [ 1.69887345e-03],\n", + " [ 1.40227322e-03],\n", + " [ 1.10051365e-03],\n", + " [ 7.98560761e-04],\n", + " [ 5.01101043e-04],\n", + " [ 2.12486046e-04],\n", + " [-6.33149855e-05],\n", + " [-3.22754042e-04],\n", + " [-5.62734752e-04],\n", + " [-7.80634259e-04],\n", + " [-9.74316712e-04],\n", + " [-1.14213862e-03],\n", + " [-1.28294643e-03],\n", + " [-1.39606680e-03],\n", + " [-1.48129013e-03],\n", + " [-1.53884790e-03],\n", + " [-1.56938458e-03],\n", + " [-1.57392482e-03],\n", + " [-1.55383658e-03],\n", + " [-1.51079117e-03],\n", + " [-1.44672077e-03],\n", + " [-1.36377435e-03],\n", + " [-1.26427272e-03],\n", + " [-1.15066342e-03],\n", + " [-1.02547614e-03],\n", + " [-8.91279368e-04],\n", + " [-7.50638810e-04],\n", + " [-6.06078155e-04],\n", + " [-4.60042627e-04]])" + ] + }, + "execution_count": 118, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "filt2" + ] + }, + { + "cell_type": "code", + "execution_count": 119, + "metadata": {}, + "outputs": [], + "source": [ + "w, h = sps.freqz(filt2)" + ] + }, + { + "cell_type": "code", + "execution_count": 120, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/aclaycomb/anaconda3/envs/geomagenv36/lib/python3.6/site-packages/matplotlib/cbook/deprecation.py:107: MatplotlibDeprecationWarning: Adding an axes using the same arguments as a previous axes currently reuses the earlier instance. In a future version, a new instance will always be created and returned. Meanwhile, this warning can be suppressed, and the future behavior ensured, by passing a unique label to each axes instance.\n", + " warnings.warn(message, mplDeprecation, stacklevel=1)\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 432x288 with 2 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "fig = pl.figure()\n", + "pl.title('Digital filter frequency response')\n", + "ax1 = fig.add_subplot(111)\n", + "pl.semilogy(w, np.abs(h), 'b')\n", + "pl.ylabel('Amplitude (dB)', color='b')\n", + "pl.xlabel('Frequency (rad/sample)')\n", + "ax2 = ax1.twinx()\n", + "angles = np.unwrap(np.angle(h))\n", + "pl.plot(w, angles, 'g')\n", + "pl.ylabel('Angle (radians)', color='g')\n", + "pl.grid()\n", + "pl.axis('tight')\n", + "pl.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 86, + "metadata": {}, + "outputs": [], + "source": [ + "ts_imp = sps.filtfilt(a=a,b=b,x=ts)" + ] + }, + { + "cell_type": "code", + "execution_count": 87, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[<matplotlib.lines.Line2D at 0x1c20dcb1d0>]" + ] + }, + "execution_count": 87, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 432x288 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "pl.plot(ts_imp)" + ] + }, + { + "cell_type": "code", + "execution_count": 89, + "metadata": {}, + "outputs": [ + { + "ename": "AttributeError", + "evalue": "module 'numpy' has no attribute 'epsilon'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m<ipython-input-89-56c419ae92da>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mepsilon\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;31mAttributeError\u001b[0m: module 'numpy' has no attribute 'epsilon'" + ] + } + ], + "source": [ + "np" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/aclaycomb/anaconda3/envs/geomagenv36/lib/python3.6/site-packages/scipy/signal/filter_design.py:536: UserWarning: The group delay is singular at frequencies [3.074, 3.080, 3.086, 3.093, 3.099, 3.105, 3.111, 3.117, 3.123, 3.129, 3.135], setting to 0\n", + " format(\", \".join(\"{0:.3f}\".format(ws) for ws in w[singular]))\n" + ] + } + ], + "source": [ + "w, gd = sps.group_delay((a,b))" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "<matplotlib.legend.Legend at 0x1c2019c630>" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 432x288 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "pl.plot(w*sample_rate/2/np.pi, gd/sample_rate, w*sample_rate/2/np.pi, 0.01*np.ones_like(w))\n", + "pl.xlabel('Frequency (Hz)')\n", + "pl.ylabel('Group Delay (s)')\n", + "pl.legend(('Butterworth Design', 'Intermagnet Requirement'))" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [], + "source": [ + "a,b = sps.iirdesign(cutoff, cutoff+width, gpass=3.0, gstop=50.0, analog=False, ftype='cheby1')" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/aclaycomb/anaconda3/envs/geomagenv36/lib/python3.6/site-packages/scipy/signal/filter_design.py:536: UserWarning: The group delay is singular at frequencies [3.129, 3.135], setting to 0\n", + " format(\", \".join(\"{0:.3f}\".format(ws) for ws in w[singular]))\n" + ] + } + ], + "source": [ + "w, gd = sps.group_delay((a,b))" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([5.92719812e-08, 2.96359906e-07, 5.92719812e-07, 5.92719812e-07,\n", + " 2.96359906e-07, 5.92719812e-08])" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 1. , -4.9082771 , 9.65633587, -9.51809429, 4.70039227,\n", + " -0.93035486])" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "b" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "<matplotlib.legend.Legend at 0x1c200cd0f0>" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYIAAAEKCAYAAAAfGVI8AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJzt3Xl4lPW5//H3PVnZEYi4oA0goGwBWZSliqhAK0WsKKXSalGxtm78ftLqsT16eo7Xj3O0LqjFUkVttWLVUvW0KiKLVVEWRWUrqKWKouyQsIVk7t8f82RIQhKGJDMDeT6v68rFzDPP83zvGSD3fHdzd0REJLwi6Q5ARETSS4lARCTklAhEREJOiUBEJOSUCEREQk6JQEQk5JQIRERCTolARCTklAhEREIuM90BJKJNmzaen5+f7jBERI4qS5cu3ezueYc676hIBPn5+SxZsiTdYYiIHFXM7F+JnKemIRGRkFMiEBEJOSUCEZGQOyr6CESOJPv372f9+vXs3bs33aGIAJCbm0u7du3Iysqq1fVKBCKHaf369TRr1oz8/HzMLN3hSMi5O1u2bGH9+vW0b9++VvdQ05DIYdq7dy+tW7dWEpAjgpnRunXrOtVQlQhEakFJQI4kdf33qERQzpqvC1m8bmu6wxARSSklgnKG3fsGlzy8MN1hiBzSV199xfe+9z06duxI165d+fa3v82aNWuYP38+I0eOPKx7DRkypM4TNtetW0f37t3rdI/K7rzzTnr16kWvXr3IyMiIP546dWq9llMmGo0yfPhwWrZsyejRo6s9b/z48bRv356CggI6d+7M5ZdfzpdfflmrMh966CGeeuqp2oZcb9RZLHKUcXcuuugiLr/8cmbOnAnAsmXL+Prrr9McWf267bbbuO222wBo2rQpy5YtS2p5ZsbPfvYzCgsLefzxx2s8995772X06NFEo1Huuecehg4dykcffXTYo3Z++tOf1iHi+qMagchRZt68eWRlZfHjH/84fqxXr15885vfBKCoqIgxY8Zw6qmnctlll+HuACxdupSzzz6bPn36MHz4cDZs2BC//sknn2TgwIF0796dRYsWEY1G6dSpE5s2bQJi35ZPOeUUNm/ezNdff81FF11EQUEBBQUFvP322wCUlpZy9dVX061bN4YNG8aePXsA+OSTTxgxYgR9+vThm9/8JqtXr2bHjh3k5+cTjUYB2L17NyeddBL79+8/5Pvfvn07HTp0oKSkJP68ffv2lJaWMnjwYG666SYGDBhAjx494jWdoqIirrjiCvr370/v3r156aWXDrqvmXHuuefStGnThP8uIpEIN998M61atWL27NkAvPzyywwYMIDTTz+dsWPHsmvXLgAmT55M165d6dmzJz//+c8B+MUvfsF9990HwDvvvEPPnj0ZOHAgkydPplevXgA88sgjjBkzhuHDh9OpUyduvfXWhONLlGoEInXwHy+tYOWXO+v1nl1PaM7t3+lW7evLly+nT58+1b7+/vvvs2LFCk444QQGDRrEW2+9xRlnnMH111/PCy+8QF5eHs888wy33XYbM2bMAGDXrl28/fbbvPHGG0yYMIHly5czfvx4nnrqKW666SbmzJlDQUEBbdq0YezYsZx99tnMmjWL0tJSioqK2LZtG2vXruXpp5/md7/7HZdeeinPP/8848ePZ+LEiTz88MN06tSJd999l5/85CfMnTuXgoICFixYwDnnnMNLL73E8OHDE/pG3bJlSwYNGsQrr7zCyJEj+eMf/8ill15KRkYGAPv27WPhwoXMnTuXq666imXLlvGrX/2KESNG8Pjjj7Nt2zbOOOMMzj//fHJzcw/zb6dqp59+OqtXr6Zfv35MmTKF119/ncaNG3PnnXdy//33c+WVV/K3v/2NFStWYGZs3779oHv86Ec/4oknnqB///7cfPPNFV774IMPeO+998jMzKRz585cf/31nHDCCfUSOygRiDQ4/fv3p127dkCsprBu3TpatmzJ8uXLOf/884HYt/fjjz8+fs24ceMAOOuss9i5cyfbt29nwoQJXHjhhdx0003MmDGDH/3oRwDMnTuX3//+9wBkZGTQokULtm3bRvv27ePfYvv06cO6desoKiri7bff5pJLLomXtW/fPgDGjh3LM888wznnnMPMmTP5yU9+kvB7vOqqq5g6dSojR47kscce4w9/+MNB72Xo0KFs3LiRoqIiZs+ezcsvv8yUKVOA2BDgzz77jM6dOx/GJ1u9slrX22+/zcqVKxk4cCAAxcXFDB48mFatWhGJRLj66qu54IILDurH2bx5M8XFxfTv3x+A73//+8yZMyf++nnnnUezZs0AOPXUU/nss8+UCESOFDV9c0+Wbt268dxzz1X7ek5O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\n", + "text/plain": [ + "<Figure size 432x288 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "pl.plot(w*sample_rate/2/np.pi, gd/sample_rate, w*sample_rate/2/np.pi, 0.01*np.ones_like(w))\n", + "pl.xlabel('Frequency (Hz)')\n", + "pl.ylabel('Group Delay (s)')\n", + "pl.legend(('Chebychev Type 1 Design', 'Intermagnet Requirement'))" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "<matplotlib.legend.Legend at 0x1c26bdec50>" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 432x288 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "a,b = sps.iirdesign(cutoff, cutoff+width, gpass=3.0, gstop=50.0, analog=False, ftype='cheby2')\n", + "w, gd = sps.group_delay((a,b))\n", + "pl.plot(w*sample_rate/2/np.pi, gd/sample_rate, w*sample_rate/2/np.pi, 0.01*np.ones_like(w))\n", + "pl.xlabel('Frequency (Hz)')\n", + "pl.ylabel('Group Delay (s)')\n", + "pl.legend(('Chebychev Type 2 Design', 'Intermagnet Requirement'))" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[<matplotlib.lines.Line2D at 0x1c26d319e8>]" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 432x288 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "a,b = sps.iirdesign(cutoff, cutoff+width, gpass=3.0, gstop=50.0, analog=False, ftype='ellip')\n", + "w, gd = sps.group_delay((a,b))\n", + "pl.plot(w,gd)" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "ename": "ValueError", + "evalue": "bessel does not have order selection. Use iirfilter function.", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mIndexError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m~/anaconda3/envs/geomagenv36/lib/python3.6/site-packages/scipy/signal/filter_design.py\u001b[0m in \u001b[0;36miirdesign\u001b[0;34m(wp, ws, gpass, gstop, analog, ftype, output)\u001b[0m\n\u001b[1;32m 1704\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1705\u001b[0;31m \u001b[0mordfunc\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfilter_dict\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mftype\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1706\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mKeyError\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mIndexError\u001b[0m: list index out of range", + "\nDuring handling of the above exception, another exception occurred:\n", + "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m<ipython-input-19-2193337a950a>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0ma\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mb\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0msps\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0miirdesign\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcutoff\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcutoff\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0mwidth\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mgpass\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m3.0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mgstop\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m50.0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0manalog\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mftype\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'bessel'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0mw\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mgd\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0msps\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgroup_delay\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ma\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mb\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0mpl\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mplot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mw\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mgd\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/anaconda3/envs/geomagenv36/lib/python3.6/site-packages/scipy/signal/filter_design.py\u001b[0m in \u001b[0;36miirdesign\u001b[0;34m(wp, ws, gpass, gstop, analog, ftype, output)\u001b[0m\n\u001b[1;32m 1708\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mIndexError\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1709\u001b[0m raise ValueError((\"%s does not have order selection. Use \"\n\u001b[0;32m-> 1710\u001b[0;31m \"iirfilter function.\") % ftype)\n\u001b[0m\u001b[1;32m 1711\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1712\u001b[0m \u001b[0mwp\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0matleast_1d\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mwp\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mValueError\u001b[0m: bessel does not have order selection. Use iirfilter function." + ] + } + ], + "source": [ + "a,b = sps.iirdesign(cutoff, cutoff+width, gpass=3.0, gstop=50.0, analog=False, ftype='bessel')\n", + "w, gd = sps.group_delay((a,b))\n", + "pl.plot(w,gd)" + ] + }, + { + "cell_type": "code", + "execution_count": 160, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.011920928955078125" + ] + }, + "execution_count": 160, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "200000/(2.0**24)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(512,)" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "w.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [], + "source": [ + "a = EdgeFactory(cwbhost=\"166.154.45.158\", host=\"166.154.45.158\")" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [], + "source": [ + "temp = a.get_timeseries(channels=['UK2'], starttime=UTCDateTime(\"2018-09-11T21:45:00Z\"), endtime=UTCDateTime(\"2018-09-11T21:50:00Z\"), observatory=\"GXX\", type=\"variation\", interval=\"minute\")" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1 Trace(s) in Stream:\n", + "NT.GXX.R0.UK2 | 2018-09-11T21:44:54.240000Z - 2018-09-11T21:49:53.640000Z | 59.9 s, 6 samples" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "temp" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 800x250 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "temp.plot()" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [], + "source": [ + "b = temp[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 0. , 59.88, 119.76, 179.64, 239.52, 299.4 ])" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "b.times()" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.016666666666666666" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "1/60" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [], + "source": [ + "c = EdgeFactory()" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "read_wave_server_v returned flag FR - requested data right (later) than tank contents\n" + ] + } + ], + "source": [ + "brt = c.get_timeseries(channels=['UK1'], starttime=UTCDateTime(\"2018-09-11T21:45:00Z\"), endtime=UTCDateTime(\"2018-09-11T21:50:00Z\"), observatory=\"BRT\", type=\"variation\", interval=\"minute\")" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 0. , 59.88, 119.76, 179.64, 239.52, 299.4 ])" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "brt[0].times()" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": {}, + "outputs": [], + "source": [ + "dht = c.get_timeseries(channels=['MVH'], starttime=UTCDateTime(\"2018-09-10T21:45:00Z\"), endtime=UTCDateTime(\"2018-09-10T21:50:00Z\"), observatory=\"DHT\", type=\"variation\", interval=\"minute\")" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 0., 60., 120., 180., 240., 300.])" + ] + }, + "execution_count": 41, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dht[0].times()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python (geomagenv36)", + "language": "python", + "name": "geomagenv36" + }, + "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.6.6" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/docs/algorithms/Filter_notes.ipynb b/docs/algorithms/Filter_notes.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..ec28c705e4168615f3881c13fc469100278c05e7 --- /dev/null +++ b/docs/algorithms/Filter_notes.ipynb @@ -0,0 +1,13270 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "#%matplotlib inline\n", + "%matplotlib notebook\n", + "\n", + "import matplotlib as mp\n", + "\n", + "import numpy as np\n", + "\n", + "import scipy as sp\n", + "\n", + "import scipy.linalg as spl\n", + "\n", + "import scipy.signal as sps\n", + "\n", + "import glob\n", + "\n", + "import json\n", + "\n", + "import urllib3\n", + "\n", + "from datetime import datetime \n", + "\n", + "import dateutil.parser as dp\n", + "\n", + "import matplotlib.pyplot as pl\n", + "\n", + "import re\n", + "\n", + "import obspy\n", + "\n", + "from obspy.core import UTCDateTime\n", + "\n", + "import geomagio\n", + "\n", + "from geomagio.edge import EdgeFactory\n", + "\n", + "#from geomagio.Algorithm import DeltaFAlgorithm" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "a = EdgeFactory()" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "brt = a.get_timeseries(channels=('H','E','Z'), observatory='BRT', type='variation', interval='second', starttime=UTCDateTime('2018-09-18T23:59:15Z'), endtime=UTCDateTime('2018-09-19T00:15:45Z'))" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "h = brt[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "e = brt[1]" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "z = brt[2]" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "t = h.times()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### the equation is $x= 2$" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "application/javascript": [ + "/* Put everything inside the global mpl namespace */\n", + "window.mpl = {};\n", + "\n", + "\n", + "mpl.get_websocket_type = function() {\n", + " if (typeof(WebSocket) !== 'undefined') {\n", + " return WebSocket;\n", + " } else if (typeof(MozWebSocket) !== 'undefined') {\n", + " return MozWebSocket;\n", + " } else {\n", + " alert('Your browser does not have WebSocket support.' +\n", + " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", + " 'Firefox 4 and 5 are also supported but you ' +\n", + " 'have to enable WebSockets in about:config.');\n", + " };\n", + "}\n", + "\n", + "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", + " this.id = figure_id;\n", + "\n", + " this.ws = websocket;\n", + "\n", + " this.supports_binary = (this.ws.binaryType != undefined);\n", + "\n", + " if (!this.supports_binary) {\n", + " var warnings = document.getElementById(\"mpl-warnings\");\n", + " if (warnings) {\n", + " warnings.style.display = 'block';\n", + " warnings.textContent = (\n", + " \"This browser does not support binary websocket messages. \" +\n", + " \"Performance may be slow.\");\n", + " }\n", + " }\n", + "\n", + " this.imageObj = new Image();\n", + "\n", + " this.context = undefined;\n", + " this.message = undefined;\n", + " this.canvas = undefined;\n", + " this.rubberband_canvas = undefined;\n", + " this.rubberband_context = undefined;\n", + " this.format_dropdown = undefined;\n", + "\n", + " this.image_mode = 'full';\n", + "\n", + " this.root = $('<div/>');\n", + " this._root_extra_style(this.root)\n", + " this.root.attr('style', 'display: inline-block');\n", + "\n", + " $(parent_element).append(this.root);\n", + "\n", + " this._init_header(this);\n", + " this._init_canvas(this);\n", + " this._init_toolbar(this);\n", + "\n", + " var fig = this;\n", + "\n", + " this.waiting = false;\n", + "\n", + " this.ws.onopen = function () {\n", + " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", + " fig.send_message(\"send_image_mode\", {});\n", + " if (mpl.ratio != 1) {\n", + " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", + " }\n", + " fig.send_message(\"refresh\", {});\n", + " }\n", + "\n", + " this.imageObj.onload = function() {\n", + " if (fig.image_mode == 'full') {\n", + " // Full images could contain transparency (where diff images\n", + " // almost always do), so we need to clear the canvas so that\n", + " // there is no ghosting.\n", + " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", + " }\n", + " fig.context.drawImage(fig.imageObj, 0, 0);\n", + " };\n", + "\n", + " this.imageObj.onunload = function() {\n", + " fig.ws.close();\n", + " }\n", + "\n", + " this.ws.onmessage = this._make_on_message_function(this);\n", + "\n", + " this.ondownload = ondownload;\n", + "}\n", + "\n", + "mpl.figure.prototype._init_header = function() {\n", + " var titlebar = $(\n", + " '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n", + " 'ui-helper-clearfix\"/>');\n", + " var titletext = $(\n", + " '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n", + " 'text-align: center; padding: 3px;\"/>');\n", + " titlebar.append(titletext)\n", + " this.root.append(titlebar);\n", + " this.header = titletext[0];\n", + "}\n", + "\n", + "\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._init_canvas = function() {\n", + " var fig = this;\n", + "\n", + " var canvas_div = $('<div/>');\n", + "\n", + " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", + "\n", + " function canvas_keyboard_event(event) {\n", + " return fig.key_event(event, event['data']);\n", + " }\n", + "\n", + " canvas_div.keydown('key_press', canvas_keyboard_event);\n", + " canvas_div.keyup('key_release', canvas_keyboard_event);\n", + " this.canvas_div = canvas_div\n", + " this._canvas_extra_style(canvas_div)\n", + " this.root.append(canvas_div);\n", + "\n", + " var canvas = $('<canvas/>');\n", + " canvas.addClass('mpl-canvas');\n", + " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", + "\n", + " this.canvas = canvas[0];\n", + " this.context = canvas[0].getContext(\"2d\");\n", + "\n", + " var backingStore = this.context.backingStorePixelRatio ||\n", + "\tthis.context.webkitBackingStorePixelRatio ||\n", + "\tthis.context.mozBackingStorePixelRatio ||\n", + "\tthis.context.msBackingStorePixelRatio ||\n", + "\tthis.context.oBackingStorePixelRatio ||\n", + "\tthis.context.backingStorePixelRatio || 1;\n", + "\n", + " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", + "\n", + " var rubberband = $('<canvas/>');\n", + " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", + "\n", + " var pass_mouse_events = true;\n", + "\n", + " canvas_div.resizable({\n", + " start: function(event, ui) {\n", + " pass_mouse_events = false;\n", + " },\n", + " resize: function(event, ui) {\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " stop: function(event, ui) {\n", + " pass_mouse_events = true;\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " });\n", + "\n", + " function mouse_event_fn(event) {\n", + " if (pass_mouse_events)\n", + " return fig.mouse_event(event, event['data']);\n", + " }\n", + "\n", + " rubberband.mousedown('button_press', mouse_event_fn);\n", + " rubberband.mouseup('button_release', mouse_event_fn);\n", + " // Throttle sequential mouse events to 1 every 20ms.\n", + " rubberband.mousemove('motion_notify', mouse_event_fn);\n", + "\n", + " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", + " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", + "\n", + " canvas_div.on(\"wheel\", function (event) {\n", + " event = event.originalEvent;\n", + " event['data'] = 'scroll'\n", + " if (event.deltaY < 0) {\n", + " event.step = 1;\n", + " } else {\n", + " event.step = -1;\n", + " }\n", + " mouse_event_fn(event);\n", + " });\n", + "\n", + " canvas_div.append(canvas);\n", + " canvas_div.append(rubberband);\n", + "\n", + " this.rubberband = rubberband;\n", + " this.rubberband_canvas = rubberband[0];\n", + " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", + " this.rubberband_context.strokeStyle = \"#000000\";\n", + "\n", + " this._resize_canvas = function(width, height) {\n", + " // Keep the size of the canvas, canvas container, and rubber band\n", + " // canvas in synch.\n", + " canvas_div.css('width', width)\n", + " canvas_div.css('height', height)\n", + "\n", + " canvas.attr('width', width * mpl.ratio);\n", + " canvas.attr('height', height * mpl.ratio);\n", + " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", + "\n", + " rubberband.attr('width', width);\n", + " rubberband.attr('height', height);\n", + " }\n", + "\n", + " // Set the figure to an initial 600x600px, this will subsequently be updated\n", + " // upon first draw.\n", + " this._resize_canvas(600, 600);\n", + "\n", + " // Disable right mouse context menu.\n", + " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", + " return false;\n", + " });\n", + "\n", + " function set_focus () {\n", + " canvas.focus();\n", + " canvas_div.focus();\n", + " }\n", + "\n", + " window.setTimeout(set_focus, 100);\n", + "}\n", + "\n", + "mpl.figure.prototype._init_toolbar = function() {\n", + " var fig = this;\n", + "\n", + " var nav_element = $('<div/>')\n", + " nav_element.attr('style', 'width: 100%');\n", + " this.root.append(nav_element);\n", + "\n", + " // Define a callback function for later on.\n", + " function toolbar_event(event) {\n", + " return fig.toolbar_button_onclick(event['data']);\n", + " }\n", + " function toolbar_mouse_event(event) {\n", + " return fig.toolbar_button_onmouseover(event['data']);\n", + " }\n", + "\n", + " for(var toolbar_ind in mpl.toolbar_items) {\n", + " var name = mpl.toolbar_items[toolbar_ind][0];\n", + " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", + " var image = mpl.toolbar_items[toolbar_ind][2];\n", + " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", + "\n", + " if (!name) {\n", + " // put a spacer in here.\n", + " continue;\n", + " }\n", + " var button = $('<button/>');\n", + " button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n", + " 'ui-button-icon-only');\n", + " button.attr('role', 'button');\n", + " button.attr('aria-disabled', 'false');\n", + " button.click(method_name, toolbar_event);\n", + " button.mouseover(tooltip, toolbar_mouse_event);\n", + "\n", + " var icon_img = $('<span/>');\n", + " icon_img.addClass('ui-button-icon-primary ui-icon');\n", + " icon_img.addClass(image);\n", + " icon_img.addClass('ui-corner-all');\n", + "\n", + " var tooltip_span = $('<span/>');\n", + " tooltip_span.addClass('ui-button-text');\n", + " tooltip_span.html(tooltip);\n", + "\n", + " button.append(icon_img);\n", + " button.append(tooltip_span);\n", + "\n", + " nav_element.append(button);\n", + " }\n", + "\n", + " var fmt_picker_span = $('<span/>');\n", + "\n", + " var fmt_picker = $('<select/>');\n", + " fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n", + " fmt_picker_span.append(fmt_picker);\n", + " nav_element.append(fmt_picker_span);\n", + " this.format_dropdown = fmt_picker[0];\n", + "\n", + " for (var ind in mpl.extensions) {\n", + " var fmt = mpl.extensions[ind];\n", + " var option = $(\n", + " '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n", + " fmt_picker.append(option)\n", + " }\n", + "\n", + " // Add hover states to the ui-buttons\n", + " $( \".ui-button\" ).hover(\n", + " function() { $(this).addClass(\"ui-state-hover\");},\n", + " function() { $(this).removeClass(\"ui-state-hover\");}\n", + " );\n", + "\n", + " var status_bar = $('<span class=\"mpl-message\"/>');\n", + " nav_element.append(status_bar);\n", + " this.message = status_bar[0];\n", + "}\n", + "\n", + "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n", + " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", + " // which will in turn request a refresh of the image.\n", + " this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n", + "}\n", + "\n", + "mpl.figure.prototype.send_message = function(type, properties) {\n", + " properties['type'] = type;\n", + " properties['figure_id'] = this.id;\n", + " this.ws.send(JSON.stringify(properties));\n", + "}\n", + "\n", + "mpl.figure.prototype.send_draw_message = function() {\n", + " if (!this.waiting) {\n", + " this.waiting = true;\n", + " this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n", + " }\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype.handle_save = function(fig, msg) {\n", + " var format_dropdown = fig.format_dropdown;\n", + " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", + " fig.ondownload(fig, format);\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype.handle_resize = function(fig, msg) {\n", + " var size = msg['size'];\n", + " if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n", + " fig._resize_canvas(size[0], size[1]);\n", + " fig.send_message(\"refresh\", {});\n", + " };\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n", + " var x0 = msg['x0'] / mpl.ratio;\n", + " var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n", + " var x1 = msg['x1'] / mpl.ratio;\n", + " var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n", + " x0 = Math.floor(x0) + 0.5;\n", + " y0 = Math.floor(y0) + 0.5;\n", + " x1 = Math.floor(x1) + 0.5;\n", + " y1 = Math.floor(y1) + 0.5;\n", + " var min_x = Math.min(x0, x1);\n", + " var min_y = Math.min(y0, y1);\n", + " var width = Math.abs(x1 - x0);\n", + " var height = Math.abs(y1 - y0);\n", + "\n", + " fig.rubberband_context.clearRect(\n", + " 0, 0, fig.canvas.width, fig.canvas.height);\n", + "\n", + " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n", + " // Updates the figure title.\n", + " fig.header.textContent = msg['label'];\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n", + " var cursor = msg['cursor'];\n", + " switch(cursor)\n", + " {\n", + " case 0:\n", + " cursor = 'pointer';\n", + " break;\n", + " case 1:\n", + " cursor = 'default';\n", + " break;\n", + " case 2:\n", + " cursor = 'crosshair';\n", + " break;\n", + " case 3:\n", + " cursor = 'move';\n", + " break;\n", + " }\n", + " fig.rubberband_canvas.style.cursor = cursor;\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_message = function(fig, msg) {\n", + " fig.message.textContent = msg['message'];\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_draw = function(fig, msg) {\n", + " // Request the server to send over a new figure.\n", + " fig.send_draw_message();\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n", + " fig.image_mode = msg['mode'];\n", + "}\n", + "\n", + "mpl.figure.prototype.updated_canvas_event = function() {\n", + " // Called whenever the canvas gets updated.\n", + " this.send_message(\"ack\", {});\n", + "}\n", + "\n", + "// A function to construct a web socket function for onmessage handling.\n", + "// Called in the figure constructor.\n", + "mpl.figure.prototype._make_on_message_function = function(fig) {\n", + " return function socket_on_message(evt) {\n", + " if (evt.data instanceof Blob) {\n", + " /* FIXME: We get \"Resource interpreted as Image but\n", + " * transferred with MIME type text/plain:\" errors on\n", + " * Chrome. But how to set the MIME type? It doesn't seem\n", + " * to be part of the websocket stream */\n", + " evt.data.type = \"image/png\";\n", + "\n", + " /* Free the memory for the previous frames */\n", + " if (fig.imageObj.src) {\n", + " (window.URL || window.webkitURL).revokeObjectURL(\n", + " fig.imageObj.src);\n", + " }\n", + "\n", + " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", + " evt.data);\n", + " fig.updated_canvas_event();\n", + " fig.waiting = false;\n", + " return;\n", + " }\n", + " else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n", + " fig.imageObj.src = evt.data;\n", + " fig.updated_canvas_event();\n", + " fig.waiting = false;\n", + " return;\n", + " }\n", + "\n", + " var msg = JSON.parse(evt.data);\n", + " var msg_type = msg['type'];\n", + "\n", + " // Call the \"handle_{type}\" callback, which takes\n", + " // the figure and JSON message as its only arguments.\n", + " try {\n", + " var callback = fig[\"handle_\" + msg_type];\n", + " } catch (e) {\n", + " console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n", + " return;\n", + " }\n", + "\n", + " if (callback) {\n", + " try {\n", + " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", + " callback(fig, msg);\n", + " } catch (e) {\n", + " console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n", + " }\n", + " }\n", + " };\n", + "}\n", + "\n", + "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", + "mpl.findpos = function(e) {\n", + " //this section is from http://www.quirksmode.org/js/events_properties.html\n", + " var targ;\n", + " if (!e)\n", + " e = window.event;\n", + " if (e.target)\n", + " targ = e.target;\n", + " else if (e.srcElement)\n", + " targ = e.srcElement;\n", + " if (targ.nodeType == 3) // defeat Safari bug\n", + " targ = targ.parentNode;\n", + "\n", + " // jQuery normalizes the pageX and pageY\n", + " // pageX,Y are the mouse positions relative to the document\n", + " // offset() returns the position of the element relative to the document\n", + " var x = e.pageX - $(targ).offset().left;\n", + " var y = e.pageY - $(targ).offset().top;\n", + "\n", + " return {\"x\": x, \"y\": y};\n", + "};\n", + "\n", + "/*\n", + " * return a copy of an object with only non-object keys\n", + " * we need this to avoid circular references\n", + " * http://stackoverflow.com/a/24161582/3208463\n", + " */\n", + "function simpleKeys (original) {\n", + " return Object.keys(original).reduce(function (obj, key) {\n", + " if (typeof original[key] !== 'object')\n", + " obj[key] = original[key]\n", + " return obj;\n", + " }, {});\n", + "}\n", + "\n", + "mpl.figure.prototype.mouse_event = function(event, name) {\n", + " var canvas_pos = mpl.findpos(event)\n", + "\n", + " if (name === 'button_press')\n", + " {\n", + " this.canvas.focus();\n", + " this.canvas_div.focus();\n", + " }\n", + "\n", + " var x = canvas_pos.x * mpl.ratio;\n", + " var y = canvas_pos.y * mpl.ratio;\n", + "\n", + " this.send_message(name, {x: x, y: y, button: event.button,\n", + " step: event.step,\n", + " guiEvent: simpleKeys(event)});\n", + "\n", + " /* This prevents the web browser from automatically changing to\n", + " * the text insertion cursor when the button is pressed. We want\n", + " * to control all of the cursor setting manually through the\n", + " * 'cursor' event from matplotlib */\n", + " event.preventDefault();\n", + " return false;\n", + "}\n", + "\n", + "mpl.figure.prototype._key_event_extra = function(event, name) {\n", + " // Handle any extra behaviour associated with a key event\n", + "}\n", + "\n", + "mpl.figure.prototype.key_event = function(event, name) {\n", + "\n", + " // Prevent repeat events\n", + " if (name == 'key_press')\n", + " {\n", + " if (event.which === this._key)\n", + " return;\n", + " else\n", + " this._key = event.which;\n", + " }\n", + " if (name == 'key_release')\n", + " this._key = null;\n", + "\n", + " var value = '';\n", + " if (event.ctrlKey && event.which != 17)\n", + " value += \"ctrl+\";\n", + " if (event.altKey && event.which != 18)\n", + " value += \"alt+\";\n", + " if (event.shiftKey && event.which != 16)\n", + " value += \"shift+\";\n", + "\n", + " value += 'k';\n", + " value += event.which.toString();\n", + "\n", + " this._key_event_extra(event, name);\n", + "\n", + " this.send_message(name, {key: value,\n", + " guiEvent: simpleKeys(event)});\n", + " return false;\n", + "}\n", + "\n", + "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n", + " if (name == 'download') {\n", + " this.handle_save(this, null);\n", + " } else {\n", + " this.send_message(\"toolbar_button\", {name: name});\n", + " }\n", + "};\n", + "\n", + "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n", + " this.message.textContent = tooltip;\n", + "};\n", + "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", + "\n", + "mpl.extensions = [\"eps\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\"];\n", + "\n", + "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n", + " // Create a \"websocket\"-like object which calls the given IPython comm\n", + " // object with the appropriate methods. Currently this is a non binary\n", + " // socket, so there is still some room for performance tuning.\n", + " var ws = {};\n", + "\n", + " ws.close = function() {\n", + " comm.close()\n", + " };\n", + " ws.send = function(m) {\n", + " //console.log('sending', m);\n", + " comm.send(m);\n", + " };\n", + " // Register the callback with on_msg.\n", + " comm.on_msg(function(msg) {\n", + " //console.log('receiving', msg['content']['data'], msg);\n", + " // Pass the mpl event to the overridden (by mpl) onmessage function.\n", + " ws.onmessage(msg['content']['data'])\n", + " });\n", + " return ws;\n", + "}\n", + "\n", + "mpl.mpl_figure_comm = function(comm, msg) {\n", + " // This is the function which gets called when the mpl process\n", + " // starts-up an IPython Comm through the \"matplotlib\" channel.\n", + "\n", + " var id = msg.content.data.id;\n", + " // Get hold of the div created by the display call when the Comm\n", + " // socket was opened in Python.\n", + " var element = $(\"#\" + id);\n", + " var ws_proxy = comm_websocket_adapter(comm)\n", + "\n", + " function ondownload(figure, format) {\n", + " window.open(figure.imageObj.src);\n", + " }\n", + "\n", + " var fig = new mpl.figure(id, ws_proxy,\n", + " ondownload,\n", + " element.get(0));\n", + "\n", + " // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n", + " // web socket which is closed, not our websocket->open comm proxy.\n", + " ws_proxy.onopen();\n", + "\n", + " fig.parent_element = element.get(0);\n", + " fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n", + " if (!fig.cell_info) {\n", + " console.error(\"Failed to find cell for figure\", id, fig);\n", + " return;\n", + " }\n", + "\n", + " var output_index = fig.cell_info[2]\n", + " var cell = fig.cell_info[0];\n", + "\n", + "};\n", + "\n", + "mpl.figure.prototype.handle_close = function(fig, msg) {\n", + " var width = fig.canvas.width/mpl.ratio\n", + " fig.root.unbind('remove')\n", + "\n", + " // Update the output cell to use the data from the current canvas.\n", + " fig.push_to_output();\n", + " var dataURL = fig.canvas.toDataURL();\n", + " // Re-enable the keyboard manager in IPython - without this line, in FF,\n", + " // the notebook keyboard shortcuts fail.\n", + " IPython.keyboard_manager.enable()\n", + " $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n", + " fig.close_ws(fig, msg);\n", + "}\n", + "\n", + "mpl.figure.prototype.close_ws = function(fig, msg){\n", + " fig.send_message('closing', msg);\n", + " // fig.ws.close()\n", + "}\n", + "\n", + "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n", + " // Turn the data on the canvas into data in the output cell.\n", + " var width = this.canvas.width/mpl.ratio\n", + " var dataURL = this.canvas.toDataURL();\n", + " this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n", + "}\n", + "\n", + "mpl.figure.prototype.updated_canvas_event = function() {\n", + " // Tell IPython that the notebook contents must change.\n", + " IPython.notebook.set_dirty(true);\n", + " this.send_message(\"ack\", {});\n", + " var fig = this;\n", + " // Wait a second, then push the new image to the DOM so\n", + " // that it is saved nicely (might be nice to debounce this).\n", + " setTimeout(function () { fig.push_to_output() }, 1000);\n", + "}\n", + "\n", + "mpl.figure.prototype._init_toolbar = function() {\n", + " var fig = this;\n", + "\n", + " var nav_element = $('<div/>')\n", + " nav_element.attr('style', 'width: 100%');\n", + " this.root.append(nav_element);\n", + "\n", + " // Define a callback function for later on.\n", + " function toolbar_event(event) {\n", + " return fig.toolbar_button_onclick(event['data']);\n", + " }\n", + " function toolbar_mouse_event(event) {\n", + " return fig.toolbar_button_onmouseover(event['data']);\n", + " }\n", + "\n", + " for(var toolbar_ind in mpl.toolbar_items){\n", + " var name = mpl.toolbar_items[toolbar_ind][0];\n", + " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", + " var image = mpl.toolbar_items[toolbar_ind][2];\n", + " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", + "\n", + " if (!name) { continue; };\n", + "\n", + " var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n", + " button.click(method_name, toolbar_event);\n", + " button.mouseover(tooltip, toolbar_mouse_event);\n", + " nav_element.append(button);\n", + " }\n", + "\n", + " // Add the status bar.\n", + " var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n", + " nav_element.append(status_bar);\n", + " this.message = status_bar[0];\n", + "\n", + " // Add the close button to the window.\n", + " var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n", + " var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n", + " button.click(function (evt) { fig.handle_close(fig, {}); } );\n", + " button.mouseover('Stop Interaction', toolbar_mouse_event);\n", + " buttongrp.append(button);\n", + " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", + " titlebar.prepend(buttongrp);\n", + "}\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(el){\n", + " var fig = this\n", + " el.on(\"remove\", function(){\n", + "\tfig.close_ws(fig, {});\n", + " });\n", + "}\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(el){\n", + " // this is important to make the div 'focusable\n", + " el.attr('tabindex', 0)\n", + " // reach out to IPython and tell the keyboard manager to turn it's self\n", + " // off when our div gets focus\n", + "\n", + " // location in version 3\n", + " if (IPython.notebook.keyboard_manager) {\n", + " IPython.notebook.keyboard_manager.register_events(el);\n", + " }\n", + " else {\n", + " // location in version 2\n", + " IPython.keyboard_manager.register_events(el);\n", + " }\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._key_event_extra = function(event, name) {\n", + " var manager = IPython.notebook.keyboard_manager;\n", + " if (!manager)\n", + " manager = IPython.keyboard_manager;\n", + "\n", + " // Check for shift+enter\n", + " if (event.shiftKey && event.which == 13) {\n", + " this.canvas_div.blur();\n", + " event.shiftKey = false;\n", + " // Send a \"J\" for go to next cell\n", + " event.which = 74;\n", + " event.keyCode = 74;\n", + " manager.command_mode();\n", + " manager.handle_keydown(event);\n", + " }\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_save = function(fig, msg) {\n", + " fig.ondownload(fig, null);\n", + "}\n", + "\n", + "\n", + "mpl.find_output_cell = function(html_output) {\n", + " // Return the cell and output element which can be found *uniquely* in the notebook.\n", + " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", + " // IPython event is triggered only after the cells have been serialised, which for\n", + " // our purposes (turning an active figure into a static one), is too late.\n", + " var cells = IPython.notebook.get_cells();\n", + " var ncells = cells.length;\n", + " for (var i=0; i<ncells; i++) {\n", + " var cell = cells[i];\n", + " if (cell.cell_type === 'code'){\n", + " for (var j=0; j<cell.output_area.outputs.length; j++) {\n", + " var data = cell.output_area.outputs[j];\n", + " if (data.data) {\n", + " // IPython >= 3 moved mimebundle to data attribute of output\n", + " data = data.data;\n", + " }\n", + " if (data['text/html'] == html_output) {\n", + " return [cell, data, j];\n", + " }\n", + " }\n", + " }\n", + " }\n", + "}\n", + "\n", + "// Register the function which deals with the matplotlib target/channel.\n", + "// The kernel may be null if the page has been refreshed.\n", + "if (IPython.notebook.kernel != null) {\n", + " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", + "}\n" + ], + "text/plain": [ + "<IPython.core.display.Javascript object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAgAElEQVR4XuydCXiNx9vGb1ltSexB7PsWEkIkIULsSyla1VqKWrpSrZaidlr7UrVWqV2VqqotiAhBJLGG2BIRsSYREWT/rhnfyV9I5OS8J8lZ7rkuVytnnnlnfu9zMreZeZ4pkJaWlgYWEiABEiABEiABEiABoyFQgALQaN41B0oCJEACJEACJEACkgAFIB2BBEiABEiABEiABIyMAAWgkb1wDpcESIAESIAESIAEKADpAyRAAiRAAiRAAiRgZAQoAI3shXO4JEACJEACJEACJEABSB8gARIgARIgARIgASMjQAFoZC+cwyUBEiABEiABEiABCkD6AAmQAAmQAAmQAAkYGQEKQCN74RwuCZAACZAACZAACVAA0gdIgARIgARIgARIwMgIUAAa2QvncEmABEiABEiABEiAApA+QAIkQAIkQAIkQAJGRoAC0MheOIdLAiRAAiRAAiRAAhSA9AESIAESIAESIAESMDICFIBG9sI5XBIgARIgARIgARKgAKQPkAAJkAAJkAAJkICREaAANLIXzuGSAAmQAAmQAAmQAAUgfYAESIAESIAESIAEjIwABaCRvXAOlwRIgARIgARIgAQoAOkDJEACJEACJEACJGBkBCgAjeyFc7gkQAIkQAIkQAIkQAFIHyABEiABEiABEiABIyNAAWhkL5zDJQESIAESIAESIAEKQPoACZAACZAACZAACRgZAQpAI3vhHC4JkAAJkAAJkAAJUADSB0iABEiABEiABEjAyAhQABrZC+dwSYAESIAESIAESIACkD5AAiRAAiRAAiRAAkZGgALQyF44h0sCJEACJEACJEACFID0ARIgARIgARIgARIwMgIUgEb2wjlcEiABEiABEiABEqAApA+QAAmQAAmQAAmQgJERoAA0shfO4ZIACZAACZAACZAABSB9gARIgARIgARIgASMjAAFoJG9cA6XBEiABEiABEiABCgA6QMkQAIkQAIkQAIkYGQEKACN7IVzuCRAAiRAAiRAAiRAAUgfIAESIAESIAESIAEjI0ABaGQvnMMlARIgARIgARIgAQpA+gAJkAAJkAAJkAAJGBkBCkAje+EcLgmQAAmQAAmQAAlQANIHSIAESIAESIAESMDICFAAGtkL53BJgARIgARIgARIgAKQ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\" width=\"640\">" + ], + "text/plain": [ + "<IPython.core.display.HTML object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "[<matplotlib.lines.Line2D at 0x1c251c5198>]" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pl.plot(t,h.data)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "application/javascript": [ + "/* Put everything inside the global mpl namespace */\n", + "window.mpl = {};\n", + "\n", + "\n", + "mpl.get_websocket_type = function() {\n", + " if (typeof(WebSocket) !== 'undefined') {\n", + " return WebSocket;\n", + " } else if (typeof(MozWebSocket) !== 'undefined') {\n", + " return MozWebSocket;\n", + " } else {\n", + " alert('Your browser does not have WebSocket support.' +\n", + " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", + " 'Firefox 4 and 5 are also supported but you ' +\n", + " 'have to enable WebSockets in about:config.');\n", + " };\n", + "}\n", + "\n", + "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", + " this.id = figure_id;\n", + "\n", + " this.ws = websocket;\n", + "\n", + " this.supports_binary = (this.ws.binaryType != undefined);\n", + "\n", + " if (!this.supports_binary) {\n", + " var warnings = document.getElementById(\"mpl-warnings\");\n", + " if (warnings) {\n", + " warnings.style.display = 'block';\n", + " warnings.textContent = (\n", + " \"This browser does not support binary websocket messages. \" +\n", + " \"Performance may be slow.\");\n", + " }\n", + " }\n", + "\n", + " this.imageObj = new Image();\n", + "\n", + " this.context = undefined;\n", + " this.message = undefined;\n", + " this.canvas = undefined;\n", + " this.rubberband_canvas = undefined;\n", + " this.rubberband_context = undefined;\n", + " this.format_dropdown = undefined;\n", + "\n", + " this.image_mode = 'full';\n", + "\n", + " this.root = $('<div/>');\n", + " this._root_extra_style(this.root)\n", + " this.root.attr('style', 'display: inline-block');\n", + "\n", + " $(parent_element).append(this.root);\n", + "\n", + " this._init_header(this);\n", + " this._init_canvas(this);\n", + " this._init_toolbar(this);\n", + "\n", + " var fig = this;\n", + "\n", + " this.waiting = false;\n", + "\n", + " this.ws.onopen = function () {\n", + " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", + " fig.send_message(\"send_image_mode\", {});\n", + " if (mpl.ratio != 1) {\n", + " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", + " }\n", + " fig.send_message(\"refresh\", {});\n", + " }\n", + "\n", + " this.imageObj.onload = function() {\n", + " if (fig.image_mode == 'full') {\n", + " // Full images could contain transparency (where diff images\n", + " // almost always do), so we need to clear the canvas so that\n", + " // there is no ghosting.\n", + " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", + " }\n", + " fig.context.drawImage(fig.imageObj, 0, 0);\n", + " };\n", + "\n", + " this.imageObj.onunload = function() {\n", + " fig.ws.close();\n", + " }\n", + "\n", + " this.ws.onmessage = this._make_on_message_function(this);\n", + "\n", + " this.ondownload = ondownload;\n", + "}\n", + "\n", + "mpl.figure.prototype._init_header = function() {\n", + " var titlebar = $(\n", + " '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n", + " 'ui-helper-clearfix\"/>');\n", + " var titletext = $(\n", + " '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n", + " 'text-align: center; padding: 3px;\"/>');\n", + " titlebar.append(titletext)\n", + " this.root.append(titlebar);\n", + " this.header = titletext[0];\n", + "}\n", + "\n", + "\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._init_canvas = function() {\n", + " var fig = this;\n", + "\n", + " var canvas_div = $('<div/>');\n", + "\n", + " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", + "\n", + " function canvas_keyboard_event(event) {\n", + " return fig.key_event(event, event['data']);\n", + " }\n", + "\n", + " canvas_div.keydown('key_press', canvas_keyboard_event);\n", + " canvas_div.keyup('key_release', canvas_keyboard_event);\n", + " this.canvas_div = canvas_div\n", + " this._canvas_extra_style(canvas_div)\n", + " this.root.append(canvas_div);\n", + "\n", + " var canvas = $('<canvas/>');\n", + " canvas.addClass('mpl-canvas');\n", + " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", + "\n", + " this.canvas = canvas[0];\n", + " this.context = canvas[0].getContext(\"2d\");\n", + "\n", + " var backingStore = this.context.backingStorePixelRatio ||\n", + "\tthis.context.webkitBackingStorePixelRatio ||\n", + "\tthis.context.mozBackingStorePixelRatio ||\n", + "\tthis.context.msBackingStorePixelRatio ||\n", + "\tthis.context.oBackingStorePixelRatio ||\n", + "\tthis.context.backingStorePixelRatio || 1;\n", + "\n", + " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", + "\n", + " var rubberband = $('<canvas/>');\n", + " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", + "\n", + " var pass_mouse_events = true;\n", + "\n", + " canvas_div.resizable({\n", + " start: function(event, ui) {\n", + " pass_mouse_events = false;\n", + " },\n", + " resize: function(event, ui) {\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " stop: function(event, ui) {\n", + " pass_mouse_events = true;\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " });\n", + "\n", + " function mouse_event_fn(event) {\n", + " if (pass_mouse_events)\n", + " return fig.mouse_event(event, event['data']);\n", + " }\n", + "\n", + " rubberband.mousedown('button_press', mouse_event_fn);\n", + " rubberband.mouseup('button_release', mouse_event_fn);\n", + " // Throttle sequential mouse events to 1 every 20ms.\n", + " rubberband.mousemove('motion_notify', mouse_event_fn);\n", + "\n", + " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", + " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", + "\n", + " canvas_div.on(\"wheel\", function (event) {\n", + " event = event.originalEvent;\n", + " event['data'] = 'scroll'\n", + " if (event.deltaY < 0) {\n", + " event.step = 1;\n", + " } else {\n", + " event.step = -1;\n", + " }\n", + " mouse_event_fn(event);\n", + " });\n", + "\n", + " canvas_div.append(canvas);\n", + " canvas_div.append(rubberband);\n", + "\n", + " this.rubberband = rubberband;\n", + " this.rubberband_canvas = rubberband[0];\n", + " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", + " this.rubberband_context.strokeStyle = \"#000000\";\n", + "\n", + " this._resize_canvas = function(width, height) {\n", + " // Keep the size of the canvas, canvas container, and rubber band\n", + " // canvas in synch.\n", + " canvas_div.css('width', width)\n", + " canvas_div.css('height', height)\n", + "\n", + " canvas.attr('width', width * mpl.ratio);\n", + " canvas.attr('height', height * mpl.ratio);\n", + " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", + "\n", + " rubberband.attr('width', width);\n", + " rubberband.attr('height', height);\n", + " }\n", + "\n", + " // Set the figure to an initial 600x600px, this will subsequently be updated\n", + " // upon first draw.\n", + " this._resize_canvas(600, 600);\n", + "\n", + " // Disable right mouse context menu.\n", + " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", + " return false;\n", + " });\n", + "\n", + " function set_focus () {\n", + " canvas.focus();\n", + " canvas_div.focus();\n", + " }\n", + "\n", + " window.setTimeout(set_focus, 100);\n", + "}\n", + "\n", + "mpl.figure.prototype._init_toolbar = function() {\n", + " var fig = this;\n", + "\n", + " var nav_element = $('<div/>')\n", + " nav_element.attr('style', 'width: 100%');\n", + " this.root.append(nav_element);\n", + "\n", + " // Define a callback function for later on.\n", + " function toolbar_event(event) {\n", + " return fig.toolbar_button_onclick(event['data']);\n", + " }\n", + " function toolbar_mouse_event(event) {\n", + " return fig.toolbar_button_onmouseover(event['data']);\n", + " }\n", + "\n", + " for(var toolbar_ind in mpl.toolbar_items) {\n", + " var name = mpl.toolbar_items[toolbar_ind][0];\n", + " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", + " var image = mpl.toolbar_items[toolbar_ind][2];\n", + " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", + "\n", + " if (!name) {\n", + " // put a spacer in here.\n", + " continue;\n", + " }\n", + " var button = $('<button/>');\n", + " button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n", + " 'ui-button-icon-only');\n", + " button.attr('role', 'button');\n", + " button.attr('aria-disabled', 'false');\n", + " button.click(method_name, toolbar_event);\n", + " button.mouseover(tooltip, toolbar_mouse_event);\n", + "\n", + " var icon_img = $('<span/>');\n", + " icon_img.addClass('ui-button-icon-primary ui-icon');\n", + " icon_img.addClass(image);\n", + " icon_img.addClass('ui-corner-all');\n", + "\n", + " var tooltip_span = $('<span/>');\n", + " tooltip_span.addClass('ui-button-text');\n", + " tooltip_span.html(tooltip);\n", + "\n", + " button.append(icon_img);\n", + " button.append(tooltip_span);\n", + "\n", + " nav_element.append(button);\n", + " }\n", + "\n", + " var fmt_picker_span = $('<span/>');\n", + "\n", + " var fmt_picker = $('<select/>');\n", + " fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n", + " fmt_picker_span.append(fmt_picker);\n", + " nav_element.append(fmt_picker_span);\n", + " this.format_dropdown = fmt_picker[0];\n", + "\n", + " for (var ind in mpl.extensions) {\n", + " var fmt = mpl.extensions[ind];\n", + " var option = $(\n", + " '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n", + " fmt_picker.append(option)\n", + " }\n", + "\n", + " // Add hover states to the ui-buttons\n", + " $( \".ui-button\" ).hover(\n", + " function() { $(this).addClass(\"ui-state-hover\");},\n", + " function() { $(this).removeClass(\"ui-state-hover\");}\n", + " );\n", + "\n", + " var status_bar = $('<span class=\"mpl-message\"/>');\n", + " nav_element.append(status_bar);\n", + " this.message = status_bar[0];\n", + "}\n", + "\n", + "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n", + " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", + " // which will in turn request a refresh of the image.\n", + " this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n", + "}\n", + "\n", + "mpl.figure.prototype.send_message = function(type, properties) {\n", + " properties['type'] = type;\n", + " properties['figure_id'] = this.id;\n", + " this.ws.send(JSON.stringify(properties));\n", + "}\n", + "\n", + "mpl.figure.prototype.send_draw_message = function() {\n", + " if (!this.waiting) {\n", + " this.waiting = true;\n", + " this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n", + " }\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype.handle_save = function(fig, msg) {\n", + " var format_dropdown = fig.format_dropdown;\n", + " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", + " fig.ondownload(fig, format);\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype.handle_resize = function(fig, msg) {\n", + " var size = msg['size'];\n", + " if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n", + " fig._resize_canvas(size[0], size[1]);\n", + " fig.send_message(\"refresh\", {});\n", + " };\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n", + " var x0 = msg['x0'] / mpl.ratio;\n", + " var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n", + " var x1 = msg['x1'] / mpl.ratio;\n", + " var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n", + " x0 = Math.floor(x0) + 0.5;\n", + " y0 = Math.floor(y0) + 0.5;\n", + " x1 = Math.floor(x1) + 0.5;\n", + " y1 = Math.floor(y1) + 0.5;\n", + " var min_x = Math.min(x0, x1);\n", + " var min_y = Math.min(y0, y1);\n", + " var width = Math.abs(x1 - x0);\n", + " var height = Math.abs(y1 - y0);\n", + "\n", + " fig.rubberband_context.clearRect(\n", + " 0, 0, fig.canvas.width, fig.canvas.height);\n", + "\n", + " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n", + " // Updates the figure title.\n", + " fig.header.textContent = msg['label'];\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n", + " var cursor = msg['cursor'];\n", + " switch(cursor)\n", + " {\n", + " case 0:\n", + " cursor = 'pointer';\n", + " break;\n", + " case 1:\n", + " cursor = 'default';\n", + " break;\n", + " case 2:\n", + " cursor = 'crosshair';\n", + " break;\n", + " case 3:\n", + " cursor = 'move';\n", + " break;\n", + " }\n", + " fig.rubberband_canvas.style.cursor = cursor;\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_message = function(fig, msg) {\n", + " fig.message.textContent = msg['message'];\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_draw = function(fig, msg) {\n", + " // Request the server to send over a new figure.\n", + " fig.send_draw_message();\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n", + " fig.image_mode = msg['mode'];\n", + "}\n", + "\n", + "mpl.figure.prototype.updated_canvas_event = function() {\n", + " // Called whenever the canvas gets updated.\n", + " this.send_message(\"ack\", {});\n", + "}\n", + "\n", + "// A function to construct a web socket function for onmessage handling.\n", + "// Called in the figure constructor.\n", + "mpl.figure.prototype._make_on_message_function = function(fig) {\n", + " return function socket_on_message(evt) {\n", + " if (evt.data instanceof Blob) {\n", + " /* FIXME: We get \"Resource interpreted as Image but\n", + " * transferred with MIME type text/plain:\" errors on\n", + " * Chrome. But how to set the MIME type? It doesn't seem\n", + " * to be part of the websocket stream */\n", + " evt.data.type = \"image/png\";\n", + "\n", + " /* Free the memory for the previous frames */\n", + " if (fig.imageObj.src) {\n", + " (window.URL || window.webkitURL).revokeObjectURL(\n", + " fig.imageObj.src);\n", + " }\n", + "\n", + " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", + " evt.data);\n", + " fig.updated_canvas_event();\n", + " fig.waiting = false;\n", + " return;\n", + " }\n", + " else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n", + " fig.imageObj.src = evt.data;\n", + " fig.updated_canvas_event();\n", + " fig.waiting = false;\n", + " return;\n", + " }\n", + "\n", + " var msg = JSON.parse(evt.data);\n", + " var msg_type = msg['type'];\n", + "\n", + " // Call the \"handle_{type}\" callback, which takes\n", + " // the figure and JSON message as its only arguments.\n", + " try {\n", + " var callback = fig[\"handle_\" + msg_type];\n", + " } catch (e) {\n", + " console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n", + " return;\n", + " }\n", + "\n", + " if (callback) {\n", + " try {\n", + " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", + " callback(fig, msg);\n", + " } catch (e) {\n", + " console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n", + " }\n", + " }\n", + " };\n", + "}\n", + "\n", + "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", + "mpl.findpos = function(e) {\n", + " //this section is from http://www.quirksmode.org/js/events_properties.html\n", + " var targ;\n", + " if (!e)\n", + " e = window.event;\n", + " if (e.target)\n", + " targ = e.target;\n", + " else if (e.srcElement)\n", + " targ = e.srcElement;\n", + " if (targ.nodeType == 3) // defeat Safari bug\n", + " targ = targ.parentNode;\n", + "\n", + " // jQuery normalizes the pageX and pageY\n", + " // pageX,Y are the mouse positions relative to the document\n", + " // offset() returns the position of the element relative to the document\n", + " var x = e.pageX - $(targ).offset().left;\n", + " var y = e.pageY - $(targ).offset().top;\n", + "\n", + " return {\"x\": x, \"y\": y};\n", + "};\n", + "\n", + "/*\n", + " * return a copy of an object with only non-object keys\n", + " * we need this to avoid circular references\n", + " * http://stackoverflow.com/a/24161582/3208463\n", + " */\n", + "function simpleKeys (original) {\n", + " return Object.keys(original).reduce(function (obj, key) {\n", + " if (typeof original[key] !== 'object')\n", + " obj[key] = original[key]\n", + " return obj;\n", + " }, {});\n", + "}\n", + "\n", + "mpl.figure.prototype.mouse_event = function(event, name) {\n", + " var canvas_pos = mpl.findpos(event)\n", + "\n", + " if (name === 'button_press')\n", + " {\n", + " this.canvas.focus();\n", + " this.canvas_div.focus();\n", + " }\n", + "\n", + " var x = canvas_pos.x * mpl.ratio;\n", + " var y = canvas_pos.y * mpl.ratio;\n", + "\n", + " this.send_message(name, {x: x, y: y, button: event.button,\n", + " step: event.step,\n", + " guiEvent: simpleKeys(event)});\n", + "\n", + " /* This prevents the web browser from automatically changing to\n", + " * the text insertion cursor when the button is pressed. We want\n", + " * to control all of the cursor setting manually through the\n", + " * 'cursor' event from matplotlib */\n", + " event.preventDefault();\n", + " return false;\n", + "}\n", + "\n", + "mpl.figure.prototype._key_event_extra = function(event, name) {\n", + " // Handle any extra behaviour associated with a key event\n", + "}\n", + "\n", + "mpl.figure.prototype.key_event = function(event, name) {\n", + "\n", + " // Prevent repeat events\n", + " if (name == 'key_press')\n", + " {\n", + " if (event.which === this._key)\n", + " return;\n", + " else\n", + " this._key = event.which;\n", + " }\n", + " if (name == 'key_release')\n", + " this._key = null;\n", + "\n", + " var value = '';\n", + " if (event.ctrlKey && event.which != 17)\n", + " value += \"ctrl+\";\n", + " if (event.altKey && event.which != 18)\n", + " value += \"alt+\";\n", + " if (event.shiftKey && event.which != 16)\n", + " value += \"shift+\";\n", + "\n", + " value += 'k';\n", + " value += event.which.toString();\n", + "\n", + " this._key_event_extra(event, name);\n", + "\n", + " this.send_message(name, {key: value,\n", + " guiEvent: simpleKeys(event)});\n", + " return false;\n", + "}\n", + "\n", + "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n", + " if (name == 'download') {\n", + " this.handle_save(this, null);\n", + " } else {\n", + " this.send_message(\"toolbar_button\", {name: name});\n", + " }\n", + "};\n", + "\n", + "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n", + " this.message.textContent = tooltip;\n", + "};\n", + "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", + "\n", + "mpl.extensions = [\"eps\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\"];\n", + "\n", + "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n", + " // Create a \"websocket\"-like object which calls the given IPython comm\n", + " // object with the appropriate methods. Currently this is a non binary\n", + " // socket, so there is still some room for performance tuning.\n", + " var ws = {};\n", + "\n", + " ws.close = function() {\n", + " comm.close()\n", + " };\n", + " ws.send = function(m) {\n", + " //console.log('sending', m);\n", + " comm.send(m);\n", + " };\n", + " // Register the callback with on_msg.\n", + " comm.on_msg(function(msg) {\n", + " //console.log('receiving', msg['content']['data'], msg);\n", + " // Pass the mpl event to the overridden (by mpl) onmessage function.\n", + " ws.onmessage(msg['content']['data'])\n", + " });\n", + " return ws;\n", + "}\n", + "\n", + "mpl.mpl_figure_comm = function(comm, msg) {\n", + " // This is the function which gets called when the mpl process\n", + " // starts-up an IPython Comm through the \"matplotlib\" channel.\n", + "\n", + " var id = msg.content.data.id;\n", + " // Get hold of the div created by the display call when the Comm\n", + " // socket was opened in Python.\n", + " var element = $(\"#\" + id);\n", + " var ws_proxy = comm_websocket_adapter(comm)\n", + "\n", + " function ondownload(figure, format) {\n", + " window.open(figure.imageObj.src);\n", + " }\n", + "\n", + " var fig = new mpl.figure(id, ws_proxy,\n", + " ondownload,\n", + " element.get(0));\n", + "\n", + " // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n", + " // web socket which is closed, not our websocket->open comm proxy.\n", + " ws_proxy.onopen();\n", + "\n", + " fig.parent_element = element.get(0);\n", + " fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n", + " if (!fig.cell_info) {\n", + " console.error(\"Failed to find cell for figure\", id, fig);\n", + " return;\n", + " }\n", + "\n", + " var output_index = fig.cell_info[2]\n", + " var cell = fig.cell_info[0];\n", + "\n", + "};\n", + "\n", + "mpl.figure.prototype.handle_close = function(fig, msg) {\n", + " var width = fig.canvas.width/mpl.ratio\n", + " fig.root.unbind('remove')\n", + "\n", + " // Update the output cell to use the data from the current canvas.\n", + " fig.push_to_output();\n", + " var dataURL = fig.canvas.toDataURL();\n", + " // Re-enable the keyboard manager in IPython - without this line, in FF,\n", + " // the notebook keyboard shortcuts fail.\n", + " IPython.keyboard_manager.enable()\n", + " $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n", + " fig.close_ws(fig, msg);\n", + "}\n", + "\n", + "mpl.figure.prototype.close_ws = function(fig, msg){\n", + " fig.send_message('closing', msg);\n", + " // fig.ws.close()\n", + "}\n", + "\n", + "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n", + " // Turn the data on the canvas into data in the output cell.\n", + " var width = this.canvas.width/mpl.ratio\n", + " var dataURL = this.canvas.toDataURL();\n", + " this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n", + "}\n", + "\n", + "mpl.figure.prototype.updated_canvas_event = function() {\n", + " // Tell IPython that the notebook contents must change.\n", + " IPython.notebook.set_dirty(true);\n", + " this.send_message(\"ack\", {});\n", + " var fig = this;\n", + " // Wait a second, then push the new image to the DOM so\n", + " // that it is saved nicely (might be nice to debounce this).\n", + " setTimeout(function () { fig.push_to_output() }, 1000);\n", + "}\n", + "\n", + "mpl.figure.prototype._init_toolbar = function() {\n", + " var fig = this;\n", + "\n", + " var nav_element = $('<div/>')\n", + " nav_element.attr('style', 'width: 100%');\n", + " this.root.append(nav_element);\n", + "\n", + " // Define a callback function for later on.\n", + " function toolbar_event(event) {\n", + " return fig.toolbar_button_onclick(event['data']);\n", + " }\n", + " function toolbar_mouse_event(event) {\n", + " return fig.toolbar_button_onmouseover(event['data']);\n", + " }\n", + "\n", + " for(var toolbar_ind in mpl.toolbar_items){\n", + " var name = mpl.toolbar_items[toolbar_ind][0];\n", + " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", + " var image = mpl.toolbar_items[toolbar_ind][2];\n", + " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", + "\n", + " if (!name) { continue; };\n", + "\n", + " var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n", + " button.click(method_name, toolbar_event);\n", + " button.mouseover(tooltip, toolbar_mouse_event);\n", + " nav_element.append(button);\n", + " }\n", + "\n", + " // Add the status bar.\n", + " var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n", + " nav_element.append(status_bar);\n", + " this.message = status_bar[0];\n", + "\n", + " // Add the close button to the window.\n", + " var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n", + " var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n", + " button.click(function (evt) { fig.handle_close(fig, {}); } );\n", + " button.mouseover('Stop Interaction', toolbar_mouse_event);\n", + " buttongrp.append(button);\n", + " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", + " titlebar.prepend(buttongrp);\n", + "}\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(el){\n", + " var fig = this\n", + " el.on(\"remove\", function(){\n", + "\tfig.close_ws(fig, {});\n", + " });\n", + "}\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(el){\n", + " // this is important to make the div 'focusable\n", + " el.attr('tabindex', 0)\n", + " // reach out to IPython and tell the keyboard manager to turn it's self\n", + " // off when our div gets focus\n", + "\n", + " // location in version 3\n", + " if (IPython.notebook.keyboard_manager) {\n", + " IPython.notebook.keyboard_manager.register_events(el);\n", + " }\n", + " else {\n", + " // location in version 2\n", + " IPython.keyboard_manager.register_events(el);\n", + " }\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._key_event_extra = function(event, name) {\n", + " var manager = IPython.notebook.keyboard_manager;\n", + " if (!manager)\n", + " manager = IPython.keyboard_manager;\n", + "\n", + " // Check for shift+enter\n", + " if (event.shiftKey && event.which == 13) {\n", + " this.canvas_div.blur();\n", + " event.shiftKey = false;\n", + " // Send a \"J\" for go to next cell\n", + " event.which = 74;\n", + " event.keyCode = 74;\n", + " manager.command_mode();\n", + " manager.handle_keydown(event);\n", + " }\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_save = function(fig, msg) {\n", + " fig.ondownload(fig, null);\n", + "}\n", + "\n", + "\n", + "mpl.find_output_cell = function(html_output) {\n", + " // Return the cell and output element which can be found *uniquely* in the notebook.\n", + " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", + " // IPython event is triggered only after the cells have been serialised, which for\n", + " // our purposes (turning an active figure into a static one), is too late.\n", + " var cells = IPython.notebook.get_cells();\n", + " var ncells = cells.length;\n", + " for (var i=0; i<ncells; i++) {\n", + " var cell = cells[i];\n", + " if (cell.cell_type === 'code'){\n", + " for (var j=0; j<cell.output_area.outputs.length; j++) {\n", + " var data = cell.output_area.outputs[j];\n", + " if (data.data) {\n", + " // IPython >= 3 moved mimebundle to data attribute of output\n", + " data = data.data;\n", + " }\n", + " if (data['text/html'] == html_output) {\n", + " return [cell, data, j];\n", + " }\n", + " }\n", + " }\n", + " }\n", + "}\n", + "\n", + "// Register the function which deals with the matplotlib target/channel.\n", + "// The kernel may be null if the page has been refreshed.\n", + "if (IPython.notebook.kernel != null) {\n", + " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", + "}\n" + ], + "text/plain": [ + "<IPython.core.display.Javascript object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAgAElEQVR4XuydB1QVxxvFL2BFRewKgl2xYMGCioII1hQTU9SoiTUmGqMmxhIbauwlmsQaE0ssscSSotiwgwpWULGAYm8oCCqIwP/M5v+IBfXhvLL73t1zOCfh7Tc789v7+K67M9/YpKenp4MHCZAACZAACZAACZCA1RCwoQG0mnvNgZIACZAACZAACZCAQoAGkEIgARIgARIgARIgASsjQANoZTecwyUBEiABEiABEiABGkBqgARIgARIgARIgASsjAANoJXdcA6XBEiABEiABEiABGgAqQESIAESIAESIAESsDICNIBWdsM5XBIgARIgARIgARKgAaQGSIAESIAESIAESMDKCNAAWtkN53BJgARIgARIgARIgAaQGiABEiABEiABEiABKyNAA2hlN5zDJQESIAESIAESIAEaQGqABEiABEiABEiABKyMAA2gld1wDpcESIAESIAESIAEaACpARIgARIgARIgARKwMgI0gFZ2wzlcEiABEiABEiABEqABpAZIgARIgARIgARIwMoI0ABa2Q3ncEmABEiABEiABEiABpAaIAESIAESIAESIAErI0ADaGU3nMMlARIgARIgARIgARpAaoAESIAESIAESIAErIwADaCV3XAOlwRIgARIgARIgARoAKkBEiABEiABEiABErAyAjSAVnbDOVwSIAESIAESIAESoAGkBkiABEiABEiABEjAygjQAFrZDedwSYAESIAESIAESIAGkBogARIgARIgARIgASsjQANoZTecwyUBEiABEiABEiABGkBqgARIgARIgARIgASsjAANoJXdcA6XBEiABEiABEiABGgAqQESIAESIAESIAESsDICNIBWdsM5XBIgARIgARIgARKgAaQGSIAESIAESIAESMDKCNAAWtkN53BJgARIgARIgARIgAaQGiABEiABEiABEiABKyNAA2hlN5zDJQESIAESIAESIAEaQGqABEiABEiABEiABKyMAA2gld1wDpcESIAESIAESIAEaACpARIgARIgARIgARKwMgI0gFZ2wzlcEiABEiABEiABEqABpAZIgARIgARIgARIwMoI0ABa2Q3ncEmABEiABEiABEiABpAaIAESIAESIAESIAErI0ADaGU3nMMlARIgARIgARIgARpAaoAESIAESIAESIAErIwADaCV3XAOlwRIgARIgARIgARoAKkBEiABEiABEiABErAyAjSAVnbDOVwSIAESIAESIAESoAGkBkiABEiABEiABEjAygjQAFrZDedwSYAESIAESIAESIAGkBogARIgARIgARIgASsjQANoZTecwyUBEiABEiABEiABGkBqgARIgARIgARIgASsjAANoJXdcA6XBEiABEiABEiABGgAqQESIAESIAESIAESsDICNIBWdsM5XBIgARIgARIgARKgAaQGSIAESIAESIAESMDKCNAAStzwtLQ0XL16Ffny5YONjY1ESwwlARIgARIgARIwFYH09HQkJCTAyckJtra2prqsqq5DAyhxOy5fvgwXFxeJFhhKAiRAAiRAAiRgLgKXLl1CyZIlzXV5s16XBlACf3x8PBwdHSEE5ODgINESQ0mABEiABEiABExF4N69e8oDnLi4OOTPn99Ul1XVdWgAJW6HEJAQjjCCNIASIBlKAiRAAiRAAiYkwPwN0ABKCI4CkoDHUBIgARIgARIwEwHmbxpAKelRQFL4GEwCJEACJEACZiHA/E0DKCU8CkgKH4NJgARIgARIwCwEmL9pAKWERwFJ4WMwCZAACZAACZiFAPM3DaCU8CggKXwMJgESIAESIAGzEGD+pgGUEh4FJIWPwSRAAiRAAiRgFgLM3zSAUsKjgKTwMZgESIAESIAEzEKA+ZsGUEp4FJAUPgaTAAmQAAmQgFkIMH/TAEoJjwKSwsdgEiABEiABEjALAeZvGkAp4VFAUvgYTAIkQAIkQAJmIcD8TQMoJTwKSAofg0mABEiABEjALASYv2kApYRHAUnhYzAJkAAJkAAJmIUA8zcNoJTwKCApfAwmARIgARIgAdxLSsHxS/Go4uSAAvbZsSrsEiKu3EM1Zwe8XcMZuXPYGZwS87cGDeCFCxcwduxYBAUF4fr163ByckKnTp0wbNgw5MiR4zmRnDt3DrVq1YKdnR3i4uKe+vyPP/7AiBEjEBUVhXLlymHcuHF499139RYaBaQ3Kp5IAiRAAiRAAs8ROH/7Pj6YG4LbiclwyJUNb1R3woqDFzPO83B1xMpeDZDdztag9Ji/NWgAAwMDsXLlSnTo0AHly5dHREQEevbsic6dO2Pq1KlPCSQlJQUNGzZEkSJFEBwc/JQBDAkJQePGjRUzKUzfunXr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\" width=\"640\">" + ], + "text/plain": [ + "<IPython.core.display.HTML object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "[<matplotlib.lines.Line2D at 0x1c27afd438>]" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pl.plot(t,e.data)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "application/javascript": [ + "/* Put everything inside the global mpl namespace */\n", + "window.mpl = {};\n", + "\n", + "\n", + "mpl.get_websocket_type = function() {\n", + " if (typeof(WebSocket) !== 'undefined') {\n", + " return WebSocket;\n", + " } else if (typeof(MozWebSocket) !== 'undefined') {\n", + " return MozWebSocket;\n", + " } else {\n", + " alert('Your browser does not have WebSocket support.' +\n", + " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", + " 'Firefox 4 and 5 are also supported but you ' +\n", + " 'have to enable WebSockets in about:config.');\n", + " };\n", + "}\n", + "\n", + "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", + " this.id = figure_id;\n", + "\n", + " this.ws = websocket;\n", + "\n", + " this.supports_binary = (this.ws.binaryType != undefined);\n", + "\n", + " if (!this.supports_binary) {\n", + " var warnings = document.getElementById(\"mpl-warnings\");\n", + " if (warnings) {\n", + " warnings.style.display = 'block';\n", + " warnings.textContent = (\n", + " \"This browser does not support binary websocket messages. \" +\n", + " \"Performance may be slow.\");\n", + " }\n", + " }\n", + "\n", + " this.imageObj = new Image();\n", + "\n", + " this.context = undefined;\n", + " this.message = undefined;\n", + " this.canvas = undefined;\n", + " this.rubberband_canvas = undefined;\n", + " this.rubberband_context = undefined;\n", + " this.format_dropdown = undefined;\n", + "\n", + " this.image_mode = 'full';\n", + "\n", + " this.root = $('<div/>');\n", + " this._root_extra_style(this.root)\n", + " this.root.attr('style', 'display: inline-block');\n", + "\n", + " $(parent_element).append(this.root);\n", + "\n", + " this._init_header(this);\n", + " this._init_canvas(this);\n", + " this._init_toolbar(this);\n", + "\n", + " var fig = this;\n", + "\n", + " this.waiting = false;\n", + "\n", + " this.ws.onopen = function () {\n", + " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", + " fig.send_message(\"send_image_mode\", {});\n", + " if (mpl.ratio != 1) {\n", + " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", + " }\n", + " fig.send_message(\"refresh\", {});\n", + " }\n", + "\n", + " this.imageObj.onload = function() {\n", + " if (fig.image_mode == 'full') {\n", + " // Full images could contain transparency (where diff images\n", + " // almost always do), so we need to clear the canvas so that\n", + " // there is no ghosting.\n", + " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", + " }\n", + " fig.context.drawImage(fig.imageObj, 0, 0);\n", + " };\n", + "\n", + " this.imageObj.onunload = function() {\n", + " fig.ws.close();\n", + " }\n", + "\n", + " this.ws.onmessage = this._make_on_message_function(this);\n", + "\n", + " this.ondownload = ondownload;\n", + "}\n", + "\n", + "mpl.figure.prototype._init_header = function() {\n", + " var titlebar = $(\n", + " '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n", + " 'ui-helper-clearfix\"/>');\n", + " var titletext = $(\n", + " '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n", + " 'text-align: center; padding: 3px;\"/>');\n", + " titlebar.append(titletext)\n", + " this.root.append(titlebar);\n", + " this.header = titletext[0];\n", + "}\n", + "\n", + "\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._init_canvas = function() {\n", + " var fig = this;\n", + "\n", + " var canvas_div = $('<div/>');\n", + "\n", + " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", + "\n", + " function canvas_keyboard_event(event) {\n", + " return fig.key_event(event, event['data']);\n", + " }\n", + "\n", + " canvas_div.keydown('key_press', canvas_keyboard_event);\n", + " canvas_div.keyup('key_release', canvas_keyboard_event);\n", + " this.canvas_div = canvas_div\n", + " this._canvas_extra_style(canvas_div)\n", + " this.root.append(canvas_div);\n", + "\n", + " var canvas = $('<canvas/>');\n", + " canvas.addClass('mpl-canvas');\n", + " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", + "\n", + " this.canvas = canvas[0];\n", + " this.context = canvas[0].getContext(\"2d\");\n", + "\n", + " var backingStore = this.context.backingStorePixelRatio ||\n", + "\tthis.context.webkitBackingStorePixelRatio ||\n", + "\tthis.context.mozBackingStorePixelRatio ||\n", + "\tthis.context.msBackingStorePixelRatio ||\n", + "\tthis.context.oBackingStorePixelRatio ||\n", + "\tthis.context.backingStorePixelRatio || 1;\n", + "\n", + " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", + "\n", + " var rubberband = $('<canvas/>');\n", + " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", + "\n", + " var pass_mouse_events = true;\n", + "\n", + " canvas_div.resizable({\n", + " start: function(event, ui) {\n", + " pass_mouse_events = false;\n", + " },\n", + " resize: function(event, ui) {\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " stop: function(event, ui) {\n", + " pass_mouse_events = true;\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " });\n", + "\n", + " function mouse_event_fn(event) {\n", + " if (pass_mouse_events)\n", + " return fig.mouse_event(event, event['data']);\n", + " }\n", + "\n", + " rubberband.mousedown('button_press', mouse_event_fn);\n", + " rubberband.mouseup('button_release', mouse_event_fn);\n", + " // Throttle sequential mouse events to 1 every 20ms.\n", + " rubberband.mousemove('motion_notify', mouse_event_fn);\n", + "\n", + " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", + " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", + "\n", + " canvas_div.on(\"wheel\", function (event) {\n", + " event = event.originalEvent;\n", + " event['data'] = 'scroll'\n", + " if (event.deltaY < 0) {\n", + " event.step = 1;\n", + " } else {\n", + " event.step = -1;\n", + " }\n", + " mouse_event_fn(event);\n", + " });\n", + "\n", + " canvas_div.append(canvas);\n", + " canvas_div.append(rubberband);\n", + "\n", + " this.rubberband = rubberband;\n", + " this.rubberband_canvas = rubberband[0];\n", + " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", + " this.rubberband_context.strokeStyle = \"#000000\";\n", + "\n", + " this._resize_canvas = function(width, height) {\n", + " // Keep the size of the canvas, canvas container, and rubber band\n", + " // canvas in synch.\n", + " canvas_div.css('width', width)\n", + " canvas_div.css('height', height)\n", + "\n", + " canvas.attr('width', width * mpl.ratio);\n", + " canvas.attr('height', height * mpl.ratio);\n", + " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", + "\n", + " rubberband.attr('width', width);\n", + " rubberband.attr('height', height);\n", + " }\n", + "\n", + " // Set the figure to an initial 600x600px, this will subsequently be updated\n", + " // upon first draw.\n", + " this._resize_canvas(600, 600);\n", + "\n", + " // Disable right mouse context menu.\n", + " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", + " return false;\n", + " });\n", + "\n", + " function set_focus () {\n", + " canvas.focus();\n", + " canvas_div.focus();\n", + " }\n", + "\n", + " window.setTimeout(set_focus, 100);\n", + "}\n", + "\n", + "mpl.figure.prototype._init_toolbar = function() {\n", + " var fig = this;\n", + "\n", + " var nav_element = $('<div/>')\n", + " nav_element.attr('style', 'width: 100%');\n", + " this.root.append(nav_element);\n", + "\n", + " // Define a callback function for later on.\n", + " function toolbar_event(event) {\n", + " return fig.toolbar_button_onclick(event['data']);\n", + " }\n", + " function toolbar_mouse_event(event) {\n", + " return fig.toolbar_button_onmouseover(event['data']);\n", + " }\n", + "\n", + " for(var toolbar_ind in mpl.toolbar_items) {\n", + " var name = mpl.toolbar_items[toolbar_ind][0];\n", + " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", + " var image = mpl.toolbar_items[toolbar_ind][2];\n", + " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", + "\n", + " if (!name) {\n", + " // put a spacer in here.\n", + " continue;\n", + " }\n", + " var button = $('<button/>');\n", + " button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n", + " 'ui-button-icon-only');\n", + " button.attr('role', 'button');\n", + " button.attr('aria-disabled', 'false');\n", + " button.click(method_name, toolbar_event);\n", + " button.mouseover(tooltip, toolbar_mouse_event);\n", + "\n", + " var icon_img = $('<span/>');\n", + " icon_img.addClass('ui-button-icon-primary ui-icon');\n", + " icon_img.addClass(image);\n", + " icon_img.addClass('ui-corner-all');\n", + "\n", + " var tooltip_span = $('<span/>');\n", + " tooltip_span.addClass('ui-button-text');\n", + " tooltip_span.html(tooltip);\n", + "\n", + " button.append(icon_img);\n", + " button.append(tooltip_span);\n", + "\n", + " nav_element.append(button);\n", + " }\n", + "\n", + " var fmt_picker_span = $('<span/>');\n", + "\n", + " var fmt_picker = $('<select/>');\n", + " fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n", + " fmt_picker_span.append(fmt_picker);\n", + " nav_element.append(fmt_picker_span);\n", + " this.format_dropdown = fmt_picker[0];\n", + "\n", + " for (var ind in mpl.extensions) {\n", + " var fmt = mpl.extensions[ind];\n", + " var option = $(\n", + " '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n", + " fmt_picker.append(option)\n", + " }\n", + "\n", + " // Add hover states to the ui-buttons\n", + " $( \".ui-button\" ).hover(\n", + " function() { $(this).addClass(\"ui-state-hover\");},\n", + " function() { $(this).removeClass(\"ui-state-hover\");}\n", + " );\n", + "\n", + " var status_bar = $('<span class=\"mpl-message\"/>');\n", + " nav_element.append(status_bar);\n", + " this.message = status_bar[0];\n", + "}\n", + "\n", + "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n", + " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", + " // which will in turn request a refresh of the image.\n", + " this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n", + "}\n", + "\n", + "mpl.figure.prototype.send_message = function(type, properties) {\n", + " properties['type'] = type;\n", + " properties['figure_id'] = this.id;\n", + " this.ws.send(JSON.stringify(properties));\n", + "}\n", + "\n", + "mpl.figure.prototype.send_draw_message = function() {\n", + " if (!this.waiting) {\n", + " this.waiting = true;\n", + " this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n", + " }\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype.handle_save = function(fig, msg) {\n", + " var format_dropdown = fig.format_dropdown;\n", + " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", + " fig.ondownload(fig, format);\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype.handle_resize = function(fig, msg) {\n", + " var size = msg['size'];\n", + " if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n", + " fig._resize_canvas(size[0], size[1]);\n", + " fig.send_message(\"refresh\", {});\n", + " };\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n", + " var x0 = msg['x0'] / mpl.ratio;\n", + " var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n", + " var x1 = msg['x1'] / mpl.ratio;\n", + " var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n", + " x0 = Math.floor(x0) + 0.5;\n", + " y0 = Math.floor(y0) + 0.5;\n", + " x1 = Math.floor(x1) + 0.5;\n", + " y1 = Math.floor(y1) + 0.5;\n", + " var min_x = Math.min(x0, x1);\n", + " var min_y = Math.min(y0, y1);\n", + " var width = Math.abs(x1 - x0);\n", + " var height = Math.abs(y1 - y0);\n", + "\n", + " fig.rubberband_context.clearRect(\n", + " 0, 0, fig.canvas.width, fig.canvas.height);\n", + "\n", + " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n", + " // Updates the figure title.\n", + " fig.header.textContent = msg['label'];\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n", + " var cursor = msg['cursor'];\n", + " switch(cursor)\n", + " {\n", + " case 0:\n", + " cursor = 'pointer';\n", + " break;\n", + " case 1:\n", + " cursor = 'default';\n", + " break;\n", + " case 2:\n", + " cursor = 'crosshair';\n", + " break;\n", + " case 3:\n", + " cursor = 'move';\n", + " break;\n", + " }\n", + " fig.rubberband_canvas.style.cursor = cursor;\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_message = function(fig, msg) {\n", + " fig.message.textContent = msg['message'];\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_draw = function(fig, msg) {\n", + " // Request the server to send over a new figure.\n", + " fig.send_draw_message();\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n", + " fig.image_mode = msg['mode'];\n", + "}\n", + "\n", + "mpl.figure.prototype.updated_canvas_event = function() {\n", + " // Called whenever the canvas gets updated.\n", + " this.send_message(\"ack\", {});\n", + "}\n", + "\n", + "// A function to construct a web socket function for onmessage handling.\n", + "// Called in the figure constructor.\n", + "mpl.figure.prototype._make_on_message_function = function(fig) {\n", + " return function socket_on_message(evt) {\n", + " if (evt.data instanceof Blob) {\n", + " /* FIXME: We get \"Resource interpreted as Image but\n", + " * transferred with MIME type text/plain:\" errors on\n", + " * Chrome. But how to set the MIME type? It doesn't seem\n", + " * to be part of the websocket stream */\n", + " evt.data.type = \"image/png\";\n", + "\n", + " /* Free the memory for the previous frames */\n", + " if (fig.imageObj.src) {\n", + " (window.URL || window.webkitURL).revokeObjectURL(\n", + " fig.imageObj.src);\n", + " }\n", + "\n", + " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", + " evt.data);\n", + " fig.updated_canvas_event();\n", + " fig.waiting = false;\n", + " return;\n", + " }\n", + " else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n", + " fig.imageObj.src = evt.data;\n", + " fig.updated_canvas_event();\n", + " fig.waiting = false;\n", + " return;\n", + " }\n", + "\n", + " var msg = JSON.parse(evt.data);\n", + " var msg_type = msg['type'];\n", + "\n", + " // Call the \"handle_{type}\" callback, which takes\n", + " // the figure and JSON message as its only arguments.\n", + " try {\n", + " var callback = fig[\"handle_\" + msg_type];\n", + " } catch (e) {\n", + " console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n", + " return;\n", + " }\n", + "\n", + " if (callback) {\n", + " try {\n", + " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", + " callback(fig, msg);\n", + " } catch (e) {\n", + " console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n", + " }\n", + " }\n", + " };\n", + "}\n", + "\n", + "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", + "mpl.findpos = function(e) {\n", + " //this section is from http://www.quirksmode.org/js/events_properties.html\n", + " var targ;\n", + " if (!e)\n", + " e = window.event;\n", + " if (e.target)\n", + " targ = e.target;\n", + " else if (e.srcElement)\n", + " targ = e.srcElement;\n", + " if (targ.nodeType == 3) // defeat Safari bug\n", + " targ = targ.parentNode;\n", + "\n", + " // jQuery normalizes the pageX and pageY\n", + " // pageX,Y are the mouse positions relative to the document\n", + " // offset() returns the position of the element relative to the document\n", + " var x = e.pageX - $(targ).offset().left;\n", + " var y = e.pageY - $(targ).offset().top;\n", + "\n", + " return {\"x\": x, \"y\": y};\n", + "};\n", + "\n", + "/*\n", + " * return a copy of an object with only non-object keys\n", + " * we need this to avoid circular references\n", + " * http://stackoverflow.com/a/24161582/3208463\n", + " */\n", + "function simpleKeys (original) {\n", + " return Object.keys(original).reduce(function (obj, key) {\n", + " if (typeof original[key] !== 'object')\n", + " obj[key] = original[key]\n", + " return obj;\n", + " }, {});\n", + "}\n", + "\n", + "mpl.figure.prototype.mouse_event = function(event, name) {\n", + " var canvas_pos = mpl.findpos(event)\n", + "\n", + " if (name === 'button_press')\n", + " {\n", + " this.canvas.focus();\n", + " this.canvas_div.focus();\n", + " }\n", + "\n", + " var x = canvas_pos.x * mpl.ratio;\n", + " var y = canvas_pos.y * mpl.ratio;\n", + "\n", + " this.send_message(name, {x: x, y: y, button: event.button,\n", + " step: event.step,\n", + " guiEvent: simpleKeys(event)});\n", + "\n", + " /* This prevents the web browser from automatically changing to\n", + " * the text insertion cursor when the button is pressed. We want\n", + " * to control all of the cursor setting manually through the\n", + " * 'cursor' event from matplotlib */\n", + " event.preventDefault();\n", + " return false;\n", + "}\n", + "\n", + "mpl.figure.prototype._key_event_extra = function(event, name) {\n", + " // Handle any extra behaviour associated with a key event\n", + "}\n", + "\n", + "mpl.figure.prototype.key_event = function(event, name) {\n", + "\n", + " // Prevent repeat events\n", + " if (name == 'key_press')\n", + " {\n", + " if (event.which === this._key)\n", + " return;\n", + " else\n", + " this._key = event.which;\n", + " }\n", + " if (name == 'key_release')\n", + " this._key = null;\n", + "\n", + " var value = '';\n", + " if (event.ctrlKey && event.which != 17)\n", + " value += \"ctrl+\";\n", + " if (event.altKey && event.which != 18)\n", + " value += \"alt+\";\n", + " if (event.shiftKey && event.which != 16)\n", + " value += \"shift+\";\n", + "\n", + " value += 'k';\n", + " value += event.which.toString();\n", + "\n", + " this._key_event_extra(event, name);\n", + "\n", + " this.send_message(name, {key: value,\n", + " guiEvent: simpleKeys(event)});\n", + " return false;\n", + "}\n", + "\n", + "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n", + " if (name == 'download') {\n", + " this.handle_save(this, null);\n", + " } else {\n", + " this.send_message(\"toolbar_button\", {name: name});\n", + " }\n", + "};\n", + "\n", + "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n", + " this.message.textContent = tooltip;\n", + "};\n", + "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", + "\n", + "mpl.extensions = [\"eps\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\"];\n", + "\n", + "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n", + " // Create a \"websocket\"-like object which calls the given IPython comm\n", + " // object with the appropriate methods. Currently this is a non binary\n", + " // socket, so there is still some room for performance tuning.\n", + " var ws = {};\n", + "\n", + " ws.close = function() {\n", + " comm.close()\n", + " };\n", + " ws.send = function(m) {\n", + " //console.log('sending', m);\n", + " comm.send(m);\n", + " };\n", + " // Register the callback with on_msg.\n", + " comm.on_msg(function(msg) {\n", + " //console.log('receiving', msg['content']['data'], msg);\n", + " // Pass the mpl event to the overridden (by mpl) onmessage function.\n", + " ws.onmessage(msg['content']['data'])\n", + " });\n", + " return ws;\n", + "}\n", + "\n", + "mpl.mpl_figure_comm = function(comm, msg) {\n", + " // This is the function which gets called when the mpl process\n", + " // starts-up an IPython Comm through the \"matplotlib\" channel.\n", + "\n", + " var id = msg.content.data.id;\n", + " // Get hold of the div created by the display call when the Comm\n", + " // socket was opened in Python.\n", + " var element = $(\"#\" + id);\n", + " var ws_proxy = comm_websocket_adapter(comm)\n", + "\n", + " function ondownload(figure, format) {\n", + " window.open(figure.imageObj.src);\n", + " }\n", + "\n", + " var fig = new mpl.figure(id, ws_proxy,\n", + " ondownload,\n", + " element.get(0));\n", + "\n", + " // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n", + " // web socket which is closed, not our websocket->open comm proxy.\n", + " ws_proxy.onopen();\n", + "\n", + " fig.parent_element = element.get(0);\n", + " fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n", + " if (!fig.cell_info) {\n", + " console.error(\"Failed to find cell for figure\", id, fig);\n", + " return;\n", + " }\n", + "\n", + " var output_index = fig.cell_info[2]\n", + " var cell = fig.cell_info[0];\n", + "\n", + "};\n", + "\n", + "mpl.figure.prototype.handle_close = function(fig, msg) {\n", + " var width = fig.canvas.width/mpl.ratio\n", + " fig.root.unbind('remove')\n", + "\n", + " // Update the output cell to use the data from the current canvas.\n", + " fig.push_to_output();\n", + " var dataURL = fig.canvas.toDataURL();\n", + " // Re-enable the keyboard manager in IPython - without this line, in FF,\n", + " // the notebook keyboard shortcuts fail.\n", + " IPython.keyboard_manager.enable()\n", + " $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n", + " fig.close_ws(fig, msg);\n", + "}\n", + "\n", + "mpl.figure.prototype.close_ws = function(fig, msg){\n", + " fig.send_message('closing', msg);\n", + " // fig.ws.close()\n", + "}\n", + "\n", + "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n", + " // Turn the data on the canvas into data in the output cell.\n", + " var width = this.canvas.width/mpl.ratio\n", + " var dataURL = this.canvas.toDataURL();\n", + " this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n", + "}\n", + "\n", + "mpl.figure.prototype.updated_canvas_event = function() {\n", + " // Tell IPython that the notebook contents must change.\n", + " IPython.notebook.set_dirty(true);\n", + " this.send_message(\"ack\", {});\n", + " var fig = this;\n", + " // Wait a second, then push the new image to the DOM so\n", + " // that it is saved nicely (might be nice to debounce this).\n", + " setTimeout(function () { fig.push_to_output() }, 1000);\n", + "}\n", + "\n", + "mpl.figure.prototype._init_toolbar = function() {\n", + " var fig = this;\n", + "\n", + " var nav_element = $('<div/>')\n", + " nav_element.attr('style', 'width: 100%');\n", + " this.root.append(nav_element);\n", + "\n", + " // Define a callback function for later on.\n", + " function toolbar_event(event) {\n", + " return fig.toolbar_button_onclick(event['data']);\n", + " }\n", + " function toolbar_mouse_event(event) {\n", + " return fig.toolbar_button_onmouseover(event['data']);\n", + " }\n", + "\n", + " for(var toolbar_ind in mpl.toolbar_items){\n", + " var name = mpl.toolbar_items[toolbar_ind][0];\n", + " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", + " var image = mpl.toolbar_items[toolbar_ind][2];\n", + " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", + "\n", + " if (!name) { continue; };\n", + "\n", + " var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n", + " button.click(method_name, toolbar_event);\n", + " button.mouseover(tooltip, toolbar_mouse_event);\n", + " nav_element.append(button);\n", + " }\n", + "\n", + " // Add the status bar.\n", + " var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n", + " nav_element.append(status_bar);\n", + " this.message = status_bar[0];\n", + "\n", + " // Add the close button to the window.\n", + " var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n", + " var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n", + " button.click(function (evt) { fig.handle_close(fig, {}); } );\n", + " button.mouseover('Stop Interaction', toolbar_mouse_event);\n", + " buttongrp.append(button);\n", + " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", + " titlebar.prepend(buttongrp);\n", + "}\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(el){\n", + " var fig = this\n", + " el.on(\"remove\", function(){\n", + "\tfig.close_ws(fig, {});\n", + " });\n", + "}\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(el){\n", + " // this is important to make the div 'focusable\n", + " el.attr('tabindex', 0)\n", + " // reach out to IPython and tell the keyboard manager to turn it's self\n", + " // off when our div gets focus\n", + "\n", + " // location in version 3\n", + " if (IPython.notebook.keyboard_manager) {\n", + " IPython.notebook.keyboard_manager.register_events(el);\n", + " }\n", + " else {\n", + " // location in version 2\n", + " IPython.keyboard_manager.register_events(el);\n", + " }\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._key_event_extra = function(event, name) {\n", + " var manager = IPython.notebook.keyboard_manager;\n", + " if (!manager)\n", + " manager = IPython.keyboard_manager;\n", + "\n", + " // Check for shift+enter\n", + " if (event.shiftKey && event.which == 13) {\n", + " this.canvas_div.blur();\n", + " event.shiftKey = false;\n", + " // Send a \"J\" for go to next cell\n", + " event.which = 74;\n", + " event.keyCode = 74;\n", + " manager.command_mode();\n", + " manager.handle_keydown(event);\n", + " }\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_save = function(fig, msg) {\n", + " fig.ondownload(fig, null);\n", + "}\n", + "\n", + "\n", + "mpl.find_output_cell = function(html_output) {\n", + " // Return the cell and output element which can be found *uniquely* in the notebook.\n", + " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", + " // IPython event is triggered only after the cells have been serialised, which for\n", + " // our purposes (turning an active figure into a static one), is too late.\n", + " var cells = IPython.notebook.get_cells();\n", + " var ncells = cells.length;\n", + " for (var i=0; i<ncells; i++) {\n", + " var cell = cells[i];\n", + " if (cell.cell_type === 'code'){\n", + " for (var j=0; j<cell.output_area.outputs.length; j++) {\n", + " var data = cell.output_area.outputs[j];\n", + " if (data.data) {\n", + " // IPython >= 3 moved mimebundle to data attribute of output\n", + " data = data.data;\n", + " }\n", + " if (data['text/html'] == html_output) {\n", + " return [cell, data, j];\n", + " }\n", + " }\n", + " }\n", + " }\n", + "}\n", + "\n", + "// Register the function which deals with the matplotlib target/channel.\n", + "// The kernel may be null if the page has been refreshed.\n", + "if (IPython.notebook.kernel != null) {\n", + " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", + "}\n" + ], + "text/plain": [ + "<IPython.core.display.Javascript object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "<img src=\"data:image/png;base64,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\" width=\"640\">" + ], + "text/plain": [ + "<IPython.core.display.HTML object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "[<matplotlib.lines.Line2D at 0x1c27db2940>]" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pl.plot(t,z.data)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "one_minute_gauss_filter=sps.get_window(Nx=91,window=('gaussian', 15.8734))" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "application/javascript": [ + "/* Put everything inside the global mpl namespace */\n", + "window.mpl = {};\n", + "\n", + "\n", + "mpl.get_websocket_type = function() {\n", + " if (typeof(WebSocket) !== 'undefined') {\n", + " return WebSocket;\n", + " } else if (typeof(MozWebSocket) !== 'undefined') {\n", + " return MozWebSocket;\n", + " } else {\n", + " alert('Your browser does not have WebSocket support.' +\n", + " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", + " 'Firefox 4 and 5 are also supported but you ' +\n", + " 'have to enable WebSockets in about:config.');\n", + " };\n", + "}\n", + "\n", + "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", + " this.id = figure_id;\n", + "\n", + " this.ws = websocket;\n", + "\n", + " this.supports_binary = (this.ws.binaryType != undefined);\n", + "\n", + " if (!this.supports_binary) {\n", + " var warnings = document.getElementById(\"mpl-warnings\");\n", + " if (warnings) {\n", + " warnings.style.display = 'block';\n", + " warnings.textContent = (\n", + " \"This browser does not support binary websocket messages. \" +\n", + " \"Performance may be slow.\");\n", + " }\n", + " }\n", + "\n", + " this.imageObj = new Image();\n", + "\n", + " this.context = undefined;\n", + " this.message = undefined;\n", + " this.canvas = undefined;\n", + " this.rubberband_canvas = undefined;\n", + " this.rubberband_context = undefined;\n", + " this.format_dropdown = undefined;\n", + "\n", + " this.image_mode = 'full';\n", + "\n", + " this.root = $('<div/>');\n", + " this._root_extra_style(this.root)\n", + " this.root.attr('style', 'display: inline-block');\n", + "\n", + " $(parent_element).append(this.root);\n", + "\n", + " this._init_header(this);\n", + " this._init_canvas(this);\n", + " this._init_toolbar(this);\n", + "\n", + " var fig = this;\n", + "\n", + " this.waiting = false;\n", + "\n", + " this.ws.onopen = function () {\n", + " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", + " fig.send_message(\"send_image_mode\", {});\n", + " if (mpl.ratio != 1) {\n", + " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", + " }\n", + " fig.send_message(\"refresh\", {});\n", + " }\n", + "\n", + " this.imageObj.onload = function() {\n", + " if (fig.image_mode == 'full') {\n", + " // Full images could contain transparency (where diff images\n", + " // almost always do), so we need to clear the canvas so that\n", + " // there is no ghosting.\n", + " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", + " }\n", + " fig.context.drawImage(fig.imageObj, 0, 0);\n", + " };\n", + "\n", + " this.imageObj.onunload = function() {\n", + " fig.ws.close();\n", + " }\n", + "\n", + " this.ws.onmessage = this._make_on_message_function(this);\n", + "\n", + " this.ondownload = ondownload;\n", + "}\n", + "\n", + "mpl.figure.prototype._init_header = function() {\n", + " var titlebar = $(\n", + " '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n", + " 'ui-helper-clearfix\"/>');\n", + " var titletext = $(\n", + " '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n", + " 'text-align: center; padding: 3px;\"/>');\n", + " titlebar.append(titletext)\n", + " this.root.append(titlebar);\n", + " this.header = titletext[0];\n", + "}\n", + "\n", + "\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._init_canvas = function() {\n", + " var fig = this;\n", + "\n", + " var canvas_div = $('<div/>');\n", + "\n", + " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", + "\n", + " function canvas_keyboard_event(event) {\n", + " return fig.key_event(event, event['data']);\n", + " }\n", + "\n", + " canvas_div.keydown('key_press', canvas_keyboard_event);\n", + " canvas_div.keyup('key_release', canvas_keyboard_event);\n", + " this.canvas_div = canvas_div\n", + " this._canvas_extra_style(canvas_div)\n", + " this.root.append(canvas_div);\n", + "\n", + " var canvas = $('<canvas/>');\n", + " canvas.addClass('mpl-canvas');\n", + " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", + "\n", + " this.canvas = canvas[0];\n", + " this.context = canvas[0].getContext(\"2d\");\n", + "\n", + " var backingStore = this.context.backingStorePixelRatio ||\n", + "\tthis.context.webkitBackingStorePixelRatio ||\n", + "\tthis.context.mozBackingStorePixelRatio ||\n", + "\tthis.context.msBackingStorePixelRatio ||\n", + "\tthis.context.oBackingStorePixelRatio ||\n", + "\tthis.context.backingStorePixelRatio || 1;\n", + "\n", + " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", + "\n", + " var rubberband = $('<canvas/>');\n", + " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", + "\n", + " var pass_mouse_events = true;\n", + "\n", + " canvas_div.resizable({\n", + " start: function(event, ui) {\n", + " pass_mouse_events = false;\n", + " },\n", + " resize: function(event, ui) {\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " stop: function(event, ui) {\n", + " pass_mouse_events = true;\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " });\n", + "\n", + " function mouse_event_fn(event) {\n", + " if (pass_mouse_events)\n", + " return fig.mouse_event(event, event['data']);\n", + " }\n", + "\n", + " rubberband.mousedown('button_press', mouse_event_fn);\n", + " rubberband.mouseup('button_release', mouse_event_fn);\n", + " // Throttle sequential mouse events to 1 every 20ms.\n", + " rubberband.mousemove('motion_notify', mouse_event_fn);\n", + "\n", + " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", + " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", + "\n", + " canvas_div.on(\"wheel\", function (event) {\n", + " event = event.originalEvent;\n", + " event['data'] = 'scroll'\n", + " if (event.deltaY < 0) {\n", + " event.step = 1;\n", + " } else {\n", + " event.step = -1;\n", + " }\n", + " mouse_event_fn(event);\n", + " });\n", + "\n", + " canvas_div.append(canvas);\n", + " canvas_div.append(rubberband);\n", + "\n", + " this.rubberband = rubberband;\n", + " this.rubberband_canvas = rubberband[0];\n", + " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", + " this.rubberband_context.strokeStyle = \"#000000\";\n", + "\n", + " this._resize_canvas = function(width, height) {\n", + " // Keep the size of the canvas, canvas container, and rubber band\n", + " // canvas in synch.\n", + " canvas_div.css('width', width)\n", + " canvas_div.css('height', height)\n", + "\n", + " canvas.attr('width', width * mpl.ratio);\n", + " canvas.attr('height', height * mpl.ratio);\n", + " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", + "\n", + " rubberband.attr('width', width);\n", + " rubberband.attr('height', height);\n", + " }\n", + "\n", + " // Set the figure to an initial 600x600px, this will subsequently be updated\n", + " // upon first draw.\n", + " this._resize_canvas(600, 600);\n", + "\n", + " // Disable right mouse context menu.\n", + " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", + " return false;\n", + " });\n", + "\n", + " function set_focus () {\n", + " canvas.focus();\n", + " canvas_div.focus();\n", + " }\n", + "\n", + " window.setTimeout(set_focus, 100);\n", + "}\n", + "\n", + "mpl.figure.prototype._init_toolbar = function() {\n", + " var fig = this;\n", + "\n", + " var nav_element = $('<div/>')\n", + " nav_element.attr('style', 'width: 100%');\n", + " this.root.append(nav_element);\n", + "\n", + " // Define a callback function for later on.\n", + " function toolbar_event(event) {\n", + " return fig.toolbar_button_onclick(event['data']);\n", + " }\n", + " function toolbar_mouse_event(event) {\n", + " return fig.toolbar_button_onmouseover(event['data']);\n", + " }\n", + "\n", + " for(var toolbar_ind in mpl.toolbar_items) {\n", + " var name = mpl.toolbar_items[toolbar_ind][0];\n", + " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", + " var image = mpl.toolbar_items[toolbar_ind][2];\n", + " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", + "\n", + " if (!name) {\n", + " // put a spacer in here.\n", + " continue;\n", + " }\n", + " var button = $('<button/>');\n", + " button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n", + " 'ui-button-icon-only');\n", + " button.attr('role', 'button');\n", + " button.attr('aria-disabled', 'false');\n", + " button.click(method_name, toolbar_event);\n", + " button.mouseover(tooltip, toolbar_mouse_event);\n", + "\n", + " var icon_img = $('<span/>');\n", + " icon_img.addClass('ui-button-icon-primary ui-icon');\n", + " icon_img.addClass(image);\n", + " icon_img.addClass('ui-corner-all');\n", + "\n", + " var tooltip_span = $('<span/>');\n", + " tooltip_span.addClass('ui-button-text');\n", + " tooltip_span.html(tooltip);\n", + "\n", + " button.append(icon_img);\n", + " button.append(tooltip_span);\n", + "\n", + " nav_element.append(button);\n", + " }\n", + "\n", + " var fmt_picker_span = $('<span/>');\n", + "\n", + " var fmt_picker = $('<select/>');\n", + " fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n", + " fmt_picker_span.append(fmt_picker);\n", + " nav_element.append(fmt_picker_span);\n", + " this.format_dropdown = fmt_picker[0];\n", + "\n", + " for (var ind in mpl.extensions) {\n", + " var fmt = mpl.extensions[ind];\n", + " var option = $(\n", + " '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n", + " fmt_picker.append(option)\n", + " }\n", + "\n", + " // Add hover states to the ui-buttons\n", + " $( \".ui-button\" ).hover(\n", + " function() { $(this).addClass(\"ui-state-hover\");},\n", + " function() { $(this).removeClass(\"ui-state-hover\");}\n", + " );\n", + "\n", + " var status_bar = $('<span class=\"mpl-message\"/>');\n", + " nav_element.append(status_bar);\n", + " this.message = status_bar[0];\n", + "}\n", + "\n", + "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n", + " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", + " // which will in turn request a refresh of the image.\n", + " this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n", + "}\n", + "\n", + "mpl.figure.prototype.send_message = function(type, properties) {\n", + " properties['type'] = type;\n", + " properties['figure_id'] = this.id;\n", + " this.ws.send(JSON.stringify(properties));\n", + "}\n", + "\n", + "mpl.figure.prototype.send_draw_message = function() {\n", + " if (!this.waiting) {\n", + " this.waiting = true;\n", + " this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n", + " }\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype.handle_save = function(fig, msg) {\n", + " var format_dropdown = fig.format_dropdown;\n", + " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", + " fig.ondownload(fig, format);\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype.handle_resize = function(fig, msg) {\n", + " var size = msg['size'];\n", + " if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n", + " fig._resize_canvas(size[0], size[1]);\n", + " fig.send_message(\"refresh\", {});\n", + " };\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n", + " var x0 = msg['x0'] / mpl.ratio;\n", + " var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n", + " var x1 = msg['x1'] / mpl.ratio;\n", + " var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n", + " x0 = Math.floor(x0) + 0.5;\n", + " y0 = Math.floor(y0) + 0.5;\n", + " x1 = Math.floor(x1) + 0.5;\n", + " y1 = Math.floor(y1) + 0.5;\n", + " var min_x = Math.min(x0, x1);\n", + " var min_y = Math.min(y0, y1);\n", + " var width = Math.abs(x1 - x0);\n", + " var height = Math.abs(y1 - y0);\n", + "\n", + " fig.rubberband_context.clearRect(\n", + " 0, 0, fig.canvas.width, fig.canvas.height);\n", + "\n", + " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n", + " // Updates the figure title.\n", + " fig.header.textContent = msg['label'];\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n", + " var cursor = msg['cursor'];\n", + " switch(cursor)\n", + " {\n", + " case 0:\n", + " cursor = 'pointer';\n", + " break;\n", + " case 1:\n", + " cursor = 'default';\n", + " break;\n", + " case 2:\n", + " cursor = 'crosshair';\n", + " break;\n", + " case 3:\n", + " cursor = 'move';\n", + " break;\n", + " }\n", + " fig.rubberband_canvas.style.cursor = cursor;\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_message = function(fig, msg) {\n", + " fig.message.textContent = msg['message'];\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_draw = function(fig, msg) {\n", + " // Request the server to send over a new figure.\n", + " fig.send_draw_message();\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n", + " fig.image_mode = msg['mode'];\n", + "}\n", + "\n", + "mpl.figure.prototype.updated_canvas_event = function() {\n", + " // Called whenever the canvas gets updated.\n", + " this.send_message(\"ack\", {});\n", + "}\n", + "\n", + "// A function to construct a web socket function for onmessage handling.\n", + "// Called in the figure constructor.\n", + "mpl.figure.prototype._make_on_message_function = function(fig) {\n", + " return function socket_on_message(evt) {\n", + " if (evt.data instanceof Blob) {\n", + " /* FIXME: We get \"Resource interpreted as Image but\n", + " * transferred with MIME type text/plain:\" errors on\n", + " * Chrome. But how to set the MIME type? It doesn't seem\n", + " * to be part of the websocket stream */\n", + " evt.data.type = \"image/png\";\n", + "\n", + " /* Free the memory for the previous frames */\n", + " if (fig.imageObj.src) {\n", + " (window.URL || window.webkitURL).revokeObjectURL(\n", + " fig.imageObj.src);\n", + " }\n", + "\n", + " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", + " evt.data);\n", + " fig.updated_canvas_event();\n", + " fig.waiting = false;\n", + " return;\n", + " }\n", + " else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n", + " fig.imageObj.src = evt.data;\n", + " fig.updated_canvas_event();\n", + " fig.waiting = false;\n", + " return;\n", + " }\n", + "\n", + " var msg = JSON.parse(evt.data);\n", + " var msg_type = msg['type'];\n", + "\n", + " // Call the \"handle_{type}\" callback, which takes\n", + " // the figure and JSON message as its only arguments.\n", + " try {\n", + " var callback = fig[\"handle_\" + msg_type];\n", + " } catch (e) {\n", + " console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n", + " return;\n", + " }\n", + "\n", + " if (callback) {\n", + " try {\n", + " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", + " callback(fig, msg);\n", + " } catch (e) {\n", + " console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n", + " }\n", + " }\n", + " };\n", + "}\n", + "\n", + "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", + "mpl.findpos = function(e) {\n", + " //this section is from http://www.quirksmode.org/js/events_properties.html\n", + " var targ;\n", + " if (!e)\n", + " e = window.event;\n", + " if (e.target)\n", + " targ = e.target;\n", + " else if (e.srcElement)\n", + " targ = e.srcElement;\n", + " if (targ.nodeType == 3) // defeat Safari bug\n", + " targ = targ.parentNode;\n", + "\n", + " // jQuery normalizes the pageX and pageY\n", + " // pageX,Y are the mouse positions relative to the document\n", + " // offset() returns the position of the element relative to the document\n", + " var x = e.pageX - $(targ).offset().left;\n", + " var y = e.pageY - $(targ).offset().top;\n", + "\n", + " return {\"x\": x, \"y\": y};\n", + "};\n", + "\n", + "/*\n", + " * return a copy of an object with only non-object keys\n", + " * we need this to avoid circular references\n", + " * http://stackoverflow.com/a/24161582/3208463\n", + " */\n", + "function simpleKeys (original) {\n", + " return Object.keys(original).reduce(function (obj, key) {\n", + " if (typeof original[key] !== 'object')\n", + " obj[key] = original[key]\n", + " return obj;\n", + " }, {});\n", + "}\n", + "\n", + "mpl.figure.prototype.mouse_event = function(event, name) {\n", + " var canvas_pos = mpl.findpos(event)\n", + "\n", + " if (name === 'button_press')\n", + " {\n", + " this.canvas.focus();\n", + " this.canvas_div.focus();\n", + " }\n", + "\n", + " var x = canvas_pos.x * mpl.ratio;\n", + " var y = canvas_pos.y * mpl.ratio;\n", + "\n", + " this.send_message(name, {x: x, y: y, button: event.button,\n", + " step: event.step,\n", + " guiEvent: simpleKeys(event)});\n", + "\n", + " /* This prevents the web browser from automatically changing to\n", + " * the text insertion cursor when the button is pressed. We want\n", + " * to control all of the cursor setting manually through the\n", + " * 'cursor' event from matplotlib */\n", + " event.preventDefault();\n", + " return false;\n", + "}\n", + "\n", + "mpl.figure.prototype._key_event_extra = function(event, name) {\n", + " // Handle any extra behaviour associated with a key event\n", + "}\n", + "\n", + "mpl.figure.prototype.key_event = function(event, name) {\n", + "\n", + " // Prevent repeat events\n", + " if (name == 'key_press')\n", + " {\n", + " if (event.which === this._key)\n", + " return;\n", + " else\n", + " this._key = event.which;\n", + " }\n", + " if (name == 'key_release')\n", + " this._key = null;\n", + "\n", + " var value = '';\n", + " if (event.ctrlKey && event.which != 17)\n", + " value += \"ctrl+\";\n", + " if (event.altKey && event.which != 18)\n", + " value += \"alt+\";\n", + " if (event.shiftKey && event.which != 16)\n", + " value += \"shift+\";\n", + "\n", + " value += 'k';\n", + " value += event.which.toString();\n", + "\n", + " this._key_event_extra(event, name);\n", + "\n", + " this.send_message(name, {key: value,\n", + " guiEvent: simpleKeys(event)});\n", + " return false;\n", + "}\n", + "\n", + "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n", + " if (name == 'download') {\n", + " this.handle_save(this, null);\n", + " } else {\n", + " this.send_message(\"toolbar_button\", {name: name});\n", + " }\n", + "};\n", + "\n", + "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n", + " this.message.textContent = tooltip;\n", + "};\n", + "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", + "\n", + "mpl.extensions = [\"eps\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\"];\n", + "\n", + "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n", + " // Create a \"websocket\"-like object which calls the given IPython comm\n", + " // object with the appropriate methods. Currently this is a non binary\n", + " // socket, so there is still some room for performance tuning.\n", + " var ws = {};\n", + "\n", + " ws.close = function() {\n", + " comm.close()\n", + " };\n", + " ws.send = function(m) {\n", + " //console.log('sending', m);\n", + " comm.send(m);\n", + " };\n", + " // Register the callback with on_msg.\n", + " comm.on_msg(function(msg) {\n", + " //console.log('receiving', msg['content']['data'], msg);\n", + " // Pass the mpl event to the overridden (by mpl) onmessage function.\n", + " ws.onmessage(msg['content']['data'])\n", + " });\n", + " return ws;\n", + "}\n", + "\n", + "mpl.mpl_figure_comm = function(comm, msg) {\n", + " // This is the function which gets called when the mpl process\n", + " // starts-up an IPython Comm through the \"matplotlib\" channel.\n", + "\n", + " var id = msg.content.data.id;\n", + " // Get hold of the div created by the display call when the Comm\n", + " // socket was opened in Python.\n", + " var element = $(\"#\" + id);\n", + " var ws_proxy = comm_websocket_adapter(comm)\n", + "\n", + " function ondownload(figure, format) {\n", + " window.open(figure.imageObj.src);\n", + " }\n", + "\n", + " var fig = new mpl.figure(id, ws_proxy,\n", + " ondownload,\n", + " element.get(0));\n", + "\n", + " // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n", + " // web socket which is closed, not our websocket->open comm proxy.\n", + " ws_proxy.onopen();\n", + "\n", + " fig.parent_element = element.get(0);\n", + " fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n", + " if (!fig.cell_info) {\n", + " console.error(\"Failed to find cell for figure\", id, fig);\n", + " return;\n", + " }\n", + "\n", + " var output_index = fig.cell_info[2]\n", + " var cell = fig.cell_info[0];\n", + "\n", + "};\n", + "\n", + "mpl.figure.prototype.handle_close = function(fig, msg) {\n", + " var width = fig.canvas.width/mpl.ratio\n", + " fig.root.unbind('remove')\n", + "\n", + " // Update the output cell to use the data from the current canvas.\n", + " fig.push_to_output();\n", + " var dataURL = fig.canvas.toDataURL();\n", + " // Re-enable the keyboard manager in IPython - without this line, in FF,\n", + " // the notebook keyboard shortcuts fail.\n", + " IPython.keyboard_manager.enable()\n", + " $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n", + " fig.close_ws(fig, msg);\n", + "}\n", + "\n", + "mpl.figure.prototype.close_ws = function(fig, msg){\n", + " fig.send_message('closing', msg);\n", + " // fig.ws.close()\n", + "}\n", + "\n", + "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n", + " // Turn the data on the canvas into data in the output cell.\n", + " var width = this.canvas.width/mpl.ratio\n", + " var dataURL = this.canvas.toDataURL();\n", + " this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n", + "}\n", + "\n", + "mpl.figure.prototype.updated_canvas_event = function() {\n", + " // Tell IPython that the notebook contents must change.\n", + " IPython.notebook.set_dirty(true);\n", + " this.send_message(\"ack\", {});\n", + " var fig = this;\n", + " // Wait a second, then push the new image to the DOM so\n", + " // that it is saved nicely (might be nice to debounce this).\n", + " setTimeout(function () { fig.push_to_output() }, 1000);\n", + "}\n", + "\n", + "mpl.figure.prototype._init_toolbar = function() {\n", + " var fig = this;\n", + "\n", + " var nav_element = $('<div/>')\n", + " nav_element.attr('style', 'width: 100%');\n", + " this.root.append(nav_element);\n", + "\n", + " // Define a callback function for later on.\n", + " function toolbar_event(event) {\n", + " return fig.toolbar_button_onclick(event['data']);\n", + " }\n", + " function toolbar_mouse_event(event) {\n", + " return fig.toolbar_button_onmouseover(event['data']);\n", + " }\n", + "\n", + " for(var toolbar_ind in mpl.toolbar_items){\n", + " var name = mpl.toolbar_items[toolbar_ind][0];\n", + " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", + " var image = mpl.toolbar_items[toolbar_ind][2];\n", + " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", + "\n", + " if (!name) { continue; };\n", + "\n", + " var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n", + " button.click(method_name, toolbar_event);\n", + " button.mouseover(tooltip, toolbar_mouse_event);\n", + " nav_element.append(button);\n", + " }\n", + "\n", + " // Add the status bar.\n", + " var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n", + " nav_element.append(status_bar);\n", + " this.message = status_bar[0];\n", + "\n", + " // Add the close button to the window.\n", + " var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n", + " var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n", + " button.click(function (evt) { fig.handle_close(fig, {}); } );\n", + " button.mouseover('Stop Interaction', toolbar_mouse_event);\n", + " buttongrp.append(button);\n", + " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", + " titlebar.prepend(buttongrp);\n", + "}\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(el){\n", + " var fig = this\n", + " el.on(\"remove\", function(){\n", + "\tfig.close_ws(fig, {});\n", + " });\n", + "}\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(el){\n", + " // this is important to make the div 'focusable\n", + " el.attr('tabindex', 0)\n", + " // reach out to IPython and tell the keyboard manager to turn it's self\n", + " // off when our div gets focus\n", + "\n", + " // location in version 3\n", + " if (IPython.notebook.keyboard_manager) {\n", + " IPython.notebook.keyboard_manager.register_events(el);\n", + " }\n", + " else {\n", + " // location in version 2\n", + " IPython.keyboard_manager.register_events(el);\n", + " }\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._key_event_extra = function(event, name) {\n", + " var manager = IPython.notebook.keyboard_manager;\n", + " if (!manager)\n", + " manager = IPython.keyboard_manager;\n", + "\n", + " // Check for shift+enter\n", + " if (event.shiftKey && event.which == 13) {\n", + " this.canvas_div.blur();\n", + " event.shiftKey = false;\n", + " // Send a \"J\" for go to next cell\n", + " event.which = 74;\n", + " event.keyCode = 74;\n", + " manager.command_mode();\n", + " manager.handle_keydown(event);\n", + " }\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_save = function(fig, msg) {\n", + " fig.ondownload(fig, null);\n", + "}\n", + "\n", + "\n", + "mpl.find_output_cell = function(html_output) {\n", + " // Return the cell and output element which can be found *uniquely* in the notebook.\n", + " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", + " // IPython event is triggered only after the cells have been serialised, which for\n", + " // our purposes (turning an active figure into a static one), is too late.\n", + " var cells = IPython.notebook.get_cells();\n", + " var ncells = cells.length;\n", + " for (var i=0; i<ncells; i++) {\n", + " var cell = cells[i];\n", + " if (cell.cell_type === 'code'){\n", + " for (var j=0; j<cell.output_area.outputs.length; j++) {\n", + " var data = cell.output_area.outputs[j];\n", + " if (data.data) {\n", + " // IPython >= 3 moved mimebundle to data attribute of output\n", + " data = data.data;\n", + " }\n", + " if (data['text/html'] == html_output) {\n", + " return [cell, data, j];\n", + " }\n", + " }\n", + " }\n", + " }\n", + "}\n", + "\n", + "// Register the function which deals with the matplotlib target/channel.\n", + "// The kernel may be null if the page has been refreshed.\n", + "if (IPython.notebook.kernel != null) {\n", + " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", + "}\n" + ], + "text/plain": [ + "<IPython.core.display.Javascript object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAgAElEQVR4XuydCXgO19vG7ywSgiTWIIidEFvsiUQIamstbW0trSpKW3spLR9VS6mltS9tqdpq+ytFi0jIZo8iYgsJYqkgIiSR5bvOtEnt3uS8yTvzzj3X5fp/X995znnO79zjuc3MOWORnp6eDh4kQAIkQAIkQAIkQAK6IWBBA6ibueZASYAESIAESIAESEAhQANIIZAACZAACZAACZCAzgjQAOpswjlcEiABEiABEiABEqABpAZIgARIgARIgARIQGcEaAB1NuEcLgmQAAmQAAmQAAnQAFIDJEACJEACJEACJKAzAjSAOptwDpcESIAESIAESIAEaACpARIgARIgARIgARLQGQEaQJ1NOIdLAiRAAiRAAiRAAjSA1AAJkAAJkAAJkAAJ6IwADaDOJpzDJQESIAESIAESIAEaQGqABEiABEiABEiABHRGgAZQZxPO4ZIACZAACZAACZAADSA1QAIkQAIkQAIkQAI6I0ADqLMJ53BJgARIgARIgARIgAaQGiABEiABEiABEiABnRGgAdTZhHO4JEACJEACJEACJEADSA2QAAmQAAmQAAmQgM4I0ADqbMI5XBIgARIgARIgARKgAaQGSIAESIAESIAESEBnBGgAdTbhHC4JkAAJkAAJkAAJ0ABSAyRAAiRAAiRAAiSgMwI0gDqbcA6XBEiABEiABEiABGgAqQESIAESIAESIAES0BkBGkCdTTiHSwIkQAIkQAIkQAI0gNQACZAACZAACZAACeiMAA2gziacwyUBEiABEiABEiABGkBqgARIgARIgARIgAR0RoAGUGcTzuGSAAmQAAmQAAmQAA0gNUACJEACJEACJEACOiNAA6izCedwSYAESIAESIAESIAGkBogARIgARIgARIgAZ0RoAHU2YRzuCRAAiRAAiRAAiRAA0gNkAAJkAAJkAAJkIDOCNAA6mzCOVwSIAESIAESIAESoAGkBkiABEiABEiABEhAZwRoAHU24RwuCZAACZAACZAACdAAUgMkQAIkQAIkQAIkoDMCNIA6m3AOlwRIgARIgARIgARoAKkBEiABEiABEiABEtAZARpAnU04h0sCJEACJEACJEACNIDUAAmQAAmQAAmQAAnojAANoM4mnMMlARIgARIgARIgARpAaoAESIAE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QgIkQAIkQAIkQAIaCFAAaoDELCRAAiRAAiRAAiRgJgIUgGayJu+FBEiABEiABEiABDQQoADUAIlZSIAESIAESIAESMBMBCgAzWRN3gsJkAAJkAAJkAAJaCBAAagBErOQAAmQAAmQAAmQgJkIUACayZq8FxIgARIgARIgARLQQIACUAMkZiEBEiABEiABEiABMxGgADSTNXkvJEACJEACJEACJKCBAAWgBkjMQgIkQAIkQAIkQAJmIkABaCZr8l5IgARIgARIgARIQAMBCkANkJiFBEiABEiABEiABMxEgALQTNbkvZAACZAACZAACZCABgIUgBogMQsJkAAJkAAJkAAJmIkABaCZrMl7IQESIAESIAESIAENBCgANUBiFhIgARIgARIgARIwEwEKQDNZk/dCAiRAAiRAAiRAAhoIUABqgMQsJEACJEACJEACJGAmAhSAZrIm74UESIAESIAESIAENBCgANQAiVlIgARIgARIgARIwEwEKADNZE3eCwmQAAmQAAmQAAloIEABqAESs5AACZAACZAACZCAmQhQAJrJmrwXEiABEiABEiABEtBAgAJQAyRmIQESIAESIAESIAEzEaAANJM1eS8kQAIkQAIkQAIkoIEABaAGSMxCAiRAAiRAAiRAAmYiQAFoJmvyXkiABEiABEiABEhAAwEKQA2QmIUESIAESIAESIAEzETg/wHLQEvHqUryEAAAAABJRU5ErkJggg==\" width=\"640\">" + ], + "text/plain": [ + "<IPython.core.display.HTML object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "[<matplotlib.lines.Line2D at 0x1c2806f5c0>]" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "one_minute_gauss_filter=one_minute_gauss_filter/sum(one_minute_gauss_filter)\n", + "pl.plot(one_minute_gauss_filter)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "t_filt = np.linspace(0,len(h.data)-91,901)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.,\n", + " 11., 12., 13., 14., 15., 16., 17., 18., 19., 20., 21.,\n", + " 22., 23., 24., 25., 26., 27., 28., 29., 30., 31., 32.,\n", + " 33., 34., 35., 36., 37., 38., 39., 40., 41., 42., 43.,\n", + " 44., 45., 46., 47., 48., 49., 50., 51., 52., 53., 54.,\n", + " 55., 56., 57., 58., 59., 60., 61., 62., 63., 64., 65.,\n", + " 66., 67., 68., 69., 70., 71., 72., 73., 74., 75., 76.,\n", + " 77., 78., 79., 80., 81., 82., 83., 84., 85., 86., 87.,\n", + " 88., 89., 90., 91., 92., 93., 94., 95., 96., 97., 98.,\n", + " 99., 100., 101., 102., 103., 104., 105., 106., 107., 108., 109.,\n", + " 110., 111., 112., 113., 114., 115., 116., 117., 118., 119., 120.,\n", + " 121., 122., 123., 124., 125., 126., 127., 128., 129., 130., 131.,\n", + " 132., 133., 134., 135., 136., 137., 138., 139., 140., 141., 142.,\n", + " 143., 144., 145., 146., 147., 148., 149., 150., 151., 152., 153.,\n", + " 154., 155., 156., 157., 158., 159., 160., 161., 162., 163., 164.,\n", + " 165., 166., 167., 168., 169., 170., 171., 172., 173., 174., 175.,\n", + " 176., 177., 178., 179., 180., 181., 182., 183., 184., 185., 186.,\n", + " 187., 188., 189., 190., 191., 192., 193., 194., 195., 196., 197.,\n", + " 198., 199., 200., 201., 202., 203., 204., 205., 206., 207., 208.,\n", + " 209., 210., 211., 212., 213., 214., 215., 216., 217., 218., 219.,\n", + " 220., 221., 222., 223., 224., 225., 226., 227., 228., 229., 230.,\n", + " 231., 232., 233., 234., 235., 236., 237., 238., 239., 240., 241.,\n", + " 242., 243., 244., 245., 246., 247., 248., 249., 250., 251., 252.,\n", + " 253., 254., 255., 256., 257., 258., 259., 260., 261., 262., 263.,\n", + " 264., 265., 266., 267., 268., 269., 270., 271., 272., 273., 274.,\n", + " 275., 276., 277., 278., 279., 280., 281., 282., 283., 284., 285.,\n", + " 286., 287., 288., 289., 290., 291., 292., 293., 294., 295., 296.,\n", + " 297., 298., 299., 300., 301., 302., 303., 304., 305., 306., 307.,\n", + " 308., 309., 310., 311., 312., 313., 314., 315., 316., 317., 318.,\n", + " 319., 320., 321., 322., 323., 324., 325., 326., 327., 328., 329.,\n", + " 330., 331., 332., 333., 334., 335., 336., 337., 338., 339., 340.,\n", + " 341., 342., 343., 344., 345., 346., 347., 348., 349., 350., 351.,\n", + " 352., 353., 354., 355., 356., 357., 358., 359., 360., 361., 362.,\n", + " 363., 364., 365., 366., 367., 368., 369., 370., 371., 372., 373.,\n", + " 374., 375., 376., 377., 378., 379., 380., 381., 382., 383., 384.,\n", + " 385., 386., 387., 388., 389., 390., 391., 392., 393., 394., 395.,\n", + " 396., 397., 398., 399., 400., 401., 402., 403., 404., 405., 406.,\n", + " 407., 408., 409., 410., 411., 412., 413., 414., 415., 416., 417.,\n", + " 418., 419., 420., 421., 422., 423., 424., 425., 426., 427., 428.,\n", + " 429., 430., 431., 432., 433., 434., 435., 436., 437., 438., 439.,\n", + " 440., 441., 442., 443., 444., 445., 446., 447., 448., 449., 450.,\n", + " 451., 452., 453., 454., 455., 456., 457., 458., 459., 460., 461.,\n", + " 462., 463., 464., 465., 466., 467., 468., 469., 470., 471., 472.,\n", + " 473., 474., 475., 476., 477., 478., 479., 480., 481., 482., 483.,\n", + " 484., 485., 486., 487., 488., 489., 490., 491., 492., 493., 494.,\n", + " 495., 496., 497., 498., 499., 500., 501., 502., 503., 504., 505.,\n", + " 506., 507., 508., 509., 510., 511., 512., 513., 514., 515., 516.,\n", + " 517., 518., 519., 520., 521., 522., 523., 524., 525., 526., 527.,\n", + " 528., 529., 530., 531., 532., 533., 534., 535., 536., 537., 538.,\n", + " 539., 540., 541., 542., 543., 544., 545., 546., 547., 548., 549.,\n", + " 550., 551., 552., 553., 554., 555., 556., 557., 558., 559., 560.,\n", + " 561., 562., 563., 564., 565., 566., 567., 568., 569., 570., 571.,\n", + " 572., 573., 574., 575., 576., 577., 578., 579., 580., 581., 582.,\n", + " 583., 584., 585., 586., 587., 588., 589., 590., 591., 592., 593.,\n", + " 594., 595., 596., 597., 598., 599., 600., 601., 602., 603., 604.,\n", + " 605., 606., 607., 608., 609., 610., 611., 612., 613., 614., 615.,\n", + " 616., 617., 618., 619., 620., 621., 622., 623., 624., 625., 626.,\n", + " 627., 628., 629., 630., 631., 632., 633., 634., 635., 636., 637.,\n", + " 638., 639., 640., 641., 642., 643., 644., 645., 646., 647., 648.,\n", + " 649., 650., 651., 652., 653., 654., 655., 656., 657., 658., 659.,\n", + " 660., 661., 662., 663., 664., 665., 666., 667., 668., 669., 670.,\n", + " 671., 672., 673., 674., 675., 676., 677., 678., 679., 680., 681.,\n", + " 682., 683., 684., 685., 686., 687., 688., 689., 690., 691., 692.,\n", + " 693., 694., 695., 696., 697., 698., 699., 700., 701., 702., 703.,\n", + " 704., 705., 706., 707., 708., 709., 710., 711., 712., 713., 714.,\n", + " 715., 716., 717., 718., 719., 720., 721., 722., 723., 724., 725.,\n", + " 726., 727., 728., 729., 730., 731., 732., 733., 734., 735., 736.,\n", + " 737., 738., 739., 740., 741., 742., 743., 744., 745., 746., 747.,\n", + " 748., 749., 750., 751., 752., 753., 754., 755., 756., 757., 758.,\n", + " 759., 760., 761., 762., 763., 764., 765., 766., 767., 768., 769.,\n", + " 770., 771., 772., 773., 774., 775., 776., 777., 778., 779., 780.,\n", + " 781., 782., 783., 784., 785., 786., 787., 788., 789., 790., 791.,\n", + " 792., 793., 794., 795., 796., 797., 798., 799., 800., 801., 802.,\n", + " 803., 804., 805., 806., 807., 808., 809., 810., 811., 812., 813.,\n", + " 814., 815., 816., 817., 818., 819., 820., 821., 822., 823., 824.,\n", + " 825., 826., 827., 828., 829., 830., 831., 832., 833., 834., 835.,\n", + " 836., 837., 838., 839., 840., 841., 842., 843., 844., 845., 846.,\n", + " 847., 848., 849., 850., 851., 852., 853., 854., 855., 856., 857.,\n", + " 858., 859., 860., 861., 862., 863., 864., 865., 866., 867., 868.,\n", + " 869., 870., 871., 872., 873., 874., 875., 876., 877., 878., 879.,\n", + " 880., 881., 882., 883., 884., 885., 886., 887., 888., 889., 890.,\n", + " 891., 892., 893., 894., 895., 896., 897., 898., 899., 900.])" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "t_filt" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "901" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "t_filt.size" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "991" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "t.size" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "hf = np.ones_like(t_filt)\n", + "ef = np.ones_like(t_filt)\n", + "zf = np.ones_like(t_filt)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "ename": "TypeError", + "evalue": "'numpy.float64' object is not iterable", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m<ipython-input-18-1f8b0065d365>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mt\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mt_filt\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0mt\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mt\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0mhf\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mone_minute_gauss_filter\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mh\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdata\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0;36m60\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0;36m60\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0;36m91\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mTypeError\u001b[0m: 'numpy.float64' object is not iterable" + ] + } + ], + "source": [ + "for i, t in t_filt:\n", + " t = np.int(t)\n", + " hf[i] = np.dot(one_minute_gauss_filter, h.data[np.int(i*60):np.int(i*60+91)])" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.,\n", + " 11., 12., 13., 14., 15., 16., 17., 18., 19., 20., 21.,\n", + " 22., 23., 24., 25., 26., 27., 28., 29., 30., 31., 32.,\n", + " 33., 34., 35., 36., 37., 38., 39., 40., 41., 42., 43.,\n", + " 44., 45., 46., 47., 48., 49., 50., 51., 52., 53., 54.,\n", + " 55., 56., 57., 58., 59., 60., 61., 62., 63., 64., 65.,\n", + " 66., 67., 68., 69., 70., 71., 72., 73., 74., 75., 76.,\n", + " 77., 78., 79., 80., 81., 82., 83., 84., 85., 86., 87.,\n", + " 88., 89., 90., 91., 92., 93., 94., 95., 96., 97., 98.,\n", + " 99., 100., 101., 102., 103., 104., 105., 106., 107., 108., 109.,\n", + " 110., 111., 112., 113., 114., 115., 116., 117., 118., 119., 120.,\n", + " 121., 122., 123., 124., 125., 126., 127., 128., 129., 130., 131.,\n", + " 132., 133., 134., 135., 136., 137., 138., 139., 140., 141., 142.,\n", + " 143., 144., 145., 146., 147., 148., 149., 150., 151., 152., 153.,\n", + " 154., 155., 156., 157., 158., 159., 160., 161., 162., 163., 164.,\n", + " 165., 166., 167., 168., 169., 170., 171., 172., 173., 174., 175.,\n", + " 176., 177., 178., 179., 180., 181., 182., 183., 184., 185., 186.,\n", + " 187., 188., 189., 190., 191., 192., 193., 194., 195., 196., 197.,\n", + " 198., 199., 200., 201., 202., 203., 204., 205., 206., 207., 208.,\n", + " 209., 210., 211., 212., 213., 214., 215., 216., 217., 218., 219.,\n", + " 220., 221., 222., 223., 224., 225., 226., 227., 228., 229., 230.,\n", + " 231., 232., 233., 234., 235., 236., 237., 238., 239., 240., 241.,\n", + " 242., 243., 244., 245., 246., 247., 248., 249., 250., 251., 252.,\n", + " 253., 254., 255., 256., 257., 258., 259., 260., 261., 262., 263.,\n", + " 264., 265., 266., 267., 268., 269., 270., 271., 272., 273., 274.,\n", + " 275., 276., 277., 278., 279., 280., 281., 282., 283., 284., 285.,\n", + " 286., 287., 288., 289., 290., 291., 292., 293., 294., 295., 296.,\n", + " 297., 298., 299., 300., 301., 302., 303., 304., 305., 306., 307.,\n", + " 308., 309., 310., 311., 312., 313., 314., 315., 316., 317., 318.,\n", + " 319., 320., 321., 322., 323., 324., 325., 326., 327., 328., 329.,\n", + " 330., 331., 332., 333., 334., 335., 336., 337., 338., 339., 340.,\n", + " 341., 342., 343., 344., 345., 346., 347., 348., 349., 350., 351.,\n", + " 352., 353., 354., 355., 356., 357., 358., 359., 360., 361., 362.,\n", + " 363., 364., 365., 366., 367., 368., 369., 370., 371., 372., 373.,\n", + " 374., 375., 376., 377., 378., 379., 380., 381., 382., 383., 384.,\n", + " 385., 386., 387., 388., 389., 390., 391., 392., 393., 394., 395.,\n", + " 396., 397., 398., 399., 400., 401., 402., 403., 404., 405., 406.,\n", + " 407., 408., 409., 410., 411., 412., 413., 414., 415., 416., 417.,\n", + " 418., 419., 420., 421., 422., 423., 424., 425., 426., 427., 428.,\n", + " 429., 430., 431., 432., 433., 434., 435., 436., 437., 438., 439.,\n", + " 440., 441., 442., 443., 444., 445., 446., 447., 448., 449., 450.,\n", + " 451., 452., 453., 454., 455., 456., 457., 458., 459., 460., 461.,\n", + " 462., 463., 464., 465., 466., 467., 468., 469., 470., 471., 472.,\n", + " 473., 474., 475., 476., 477., 478., 479., 480., 481., 482., 483.,\n", + " 484., 485., 486., 487., 488., 489., 490., 491., 492., 493., 494.,\n", + " 495., 496., 497., 498., 499., 500., 501., 502., 503., 504., 505.,\n", + " 506., 507., 508., 509., 510., 511., 512., 513., 514., 515., 516.,\n", + " 517., 518., 519., 520., 521., 522., 523., 524., 525., 526., 527.,\n", + " 528., 529., 530., 531., 532., 533., 534., 535., 536., 537., 538.,\n", + " 539., 540., 541., 542., 543., 544., 545., 546., 547., 548., 549.,\n", + " 550., 551., 552., 553., 554., 555., 556., 557., 558., 559., 560.,\n", + " 561., 562., 563., 564., 565., 566., 567., 568., 569., 570., 571.,\n", + " 572., 573., 574., 575., 576., 577., 578., 579., 580., 581., 582.,\n", + " 583., 584., 585., 586., 587., 588., 589., 590., 591., 592., 593.,\n", + " 594., 595., 596., 597., 598., 599., 600., 601., 602., 603., 604.,\n", + " 605., 606., 607., 608., 609., 610., 611., 612., 613., 614., 615.,\n", + " 616., 617., 618., 619., 620., 621., 622., 623., 624., 625., 626.,\n", + " 627., 628., 629., 630., 631., 632., 633., 634., 635., 636., 637.,\n", + " 638., 639., 640., 641., 642., 643., 644., 645., 646., 647., 648.,\n", + " 649., 650., 651., 652., 653., 654., 655., 656., 657., 658., 659.,\n", + " 660., 661., 662., 663., 664., 665., 666., 667., 668., 669., 670.,\n", + " 671., 672., 673., 674., 675., 676., 677., 678., 679., 680., 681.,\n", + " 682., 683., 684., 685., 686., 687., 688., 689., 690., 691., 692.,\n", + " 693., 694., 695., 696., 697., 698., 699., 700., 701., 702., 703.,\n", + " 704., 705., 706., 707., 708., 709., 710., 711., 712., 713., 714.,\n", + " 715., 716., 717., 718., 719., 720., 721., 722., 723., 724., 725.,\n", + " 726., 727., 728., 729., 730., 731., 732., 733., 734., 735., 736.,\n", + " 737., 738., 739., 740., 741., 742., 743., 744., 745., 746., 747.,\n", + " 748., 749., 750., 751., 752., 753., 754., 755., 756., 757., 758.,\n", + " 759., 760., 761., 762., 763., 764., 765., 766., 767., 768., 769.,\n", + " 770., 771., 772., 773., 774., 775., 776., 777., 778., 779., 780.,\n", + " 781., 782., 783., 784., 785., 786., 787., 788., 789., 790., 791.,\n", + " 792., 793., 794., 795., 796., 797., 798., 799., 800., 801., 802.,\n", + " 803., 804., 805., 806., 807., 808., 809., 810., 811., 812., 813.,\n", + " 814., 815., 816., 817., 818., 819., 820., 821., 822., 823., 824.,\n", + " 825., 826., 827., 828., 829., 830., 831., 832., 833., 834., 835.,\n", + " 836., 837., 838., 839., 840., 841., 842., 843., 844., 845., 846.,\n", + " 847., 848., 849., 850., 851., 852., 853., 854., 855., 856., 857.,\n", + " 858., 859., 860., 861., 862., 863., 864., 865., 866., 867., 868.,\n", + " 869., 870., 871., 872., 873., 874., 875., 876., 877., 878., 879.,\n", + " 880., 881., 882., 883., 884., 885., 886., 887., 888., 889., 890.,\n", + " 891., 892., 893., 894., 895., 896., 897., 898., 899., 900.])" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "i_filt_s = t_filt\n", + "i_filt_e = t_filt + 90\n", + "i_filt_s" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 90., 91., 92., 93., 94., 95., 96., 97., 98., 99., 100.,\n", + " 101., 102., 103., 104., 105., 106., 107., 108., 109., 110., 111.,\n", + " 112., 113., 114., 115., 116., 117., 118., 119., 120., 121., 122.,\n", + " 123., 124., 125., 126., 127., 128., 129., 130., 131., 132., 133.,\n", + " 134., 135., 136., 137., 138., 139., 140., 141., 142., 143., 144.,\n", + " 145., 146., 147., 148., 149., 150., 151., 152., 153., 154., 155.,\n", + " 156., 157., 158., 159., 160., 161., 162., 163., 164., 165., 166.,\n", + " 167., 168., 169., 170., 171., 172., 173., 174., 175., 176., 177.,\n", + " 178., 179., 180., 181., 182., 183., 184., 185., 186., 187., 188.,\n", + " 189., 190., 191., 192., 193., 194., 195., 196., 197., 198., 199.,\n", + " 200., 201., 202., 203., 204., 205., 206., 207., 208., 209., 210.,\n", + " 211., 212., 213., 214., 215., 216., 217., 218., 219., 220., 221.,\n", + " 222., 223., 224., 225., 226., 227., 228., 229., 230., 231., 232.,\n", + " 233., 234., 235., 236., 237., 238., 239., 240., 241., 242., 243.,\n", + " 244., 245., 246., 247., 248., 249., 250., 251., 252., 253., 254.,\n", + " 255., 256., 257., 258., 259., 260., 261., 262., 263., 264., 265.,\n", + " 266., 267., 268., 269., 270., 271., 272., 273., 274., 275., 276.,\n", + " 277., 278., 279., 280., 281., 282., 283., 284., 285., 286., 287.,\n", + " 288., 289., 290., 291., 292., 293., 294., 295., 296., 297., 298.,\n", + " 299., 300., 301., 302., 303., 304., 305., 306., 307., 308., 309.,\n", + " 310., 311., 312., 313., 314., 315., 316., 317., 318., 319., 320.,\n", + " 321., 322., 323., 324., 325., 326., 327., 328., 329., 330., 331.,\n", + " 332., 333., 334., 335., 336., 337., 338., 339., 340., 341., 342.,\n", + " 343., 344., 345., 346., 347., 348., 349., 350., 351., 352., 353.,\n", + " 354., 355., 356., 357., 358., 359., 360., 361., 362., 363., 364.,\n", + " 365., 366., 367., 368., 369., 370., 371., 372., 373., 374., 375.,\n", + " 376., 377., 378., 379., 380., 381., 382., 383., 384., 385., 386.,\n", + " 387., 388., 389., 390., 391., 392., 393., 394., 395., 396., 397.,\n", + " 398., 399., 400., 401., 402., 403., 404., 405., 406., 407., 408.,\n", + " 409., 410., 411., 412., 413., 414., 415., 416., 417., 418., 419.,\n", + " 420., 421., 422., 423., 424., 425., 426., 427., 428., 429., 430.,\n", + " 431., 432., 433., 434., 435., 436., 437., 438., 439., 440., 441.,\n", + " 442., 443., 444., 445., 446., 447., 448., 449., 450., 451., 452.,\n", + " 453., 454., 455., 456., 457., 458., 459., 460., 461., 462., 463.,\n", + " 464., 465., 466., 467., 468., 469., 470., 471., 472., 473., 474.,\n", + " 475., 476., 477., 478., 479., 480., 481., 482., 483., 484., 485.,\n", + " 486., 487., 488., 489., 490., 491., 492., 493., 494., 495., 496.,\n", + " 497., 498., 499., 500., 501., 502., 503., 504., 505., 506., 507.,\n", + " 508., 509., 510., 511., 512., 513., 514., 515., 516., 517., 518.,\n", + " 519., 520., 521., 522., 523., 524., 525., 526., 527., 528., 529.,\n", + " 530., 531., 532., 533., 534., 535., 536., 537., 538., 539., 540.,\n", + " 541., 542., 543., 544., 545., 546., 547., 548., 549., 550., 551.,\n", + " 552., 553., 554., 555., 556., 557., 558., 559., 560., 561., 562.,\n", + " 563., 564., 565., 566., 567., 568., 569., 570., 571., 572., 573.,\n", + " 574., 575., 576., 577., 578., 579., 580., 581., 582., 583., 584.,\n", + " 585., 586., 587., 588., 589., 590., 591., 592., 593., 594., 595.,\n", + " 596., 597., 598., 599., 600., 601., 602., 603., 604., 605., 606.,\n", + " 607., 608., 609., 610., 611., 612., 613., 614., 615., 616., 617.,\n", + " 618., 619., 620., 621., 622., 623., 624., 625., 626., 627., 628.,\n", + " 629., 630., 631., 632., 633., 634., 635., 636., 637., 638., 639.,\n", + " 640., 641., 642., 643., 644., 645., 646., 647., 648., 649., 650.,\n", + " 651., 652., 653., 654., 655., 656., 657., 658., 659., 660., 661.,\n", + " 662., 663., 664., 665., 666., 667., 668., 669., 670., 671., 672.,\n", + " 673., 674., 675., 676., 677., 678., 679., 680., 681., 682., 683.,\n", + " 684., 685., 686., 687., 688., 689., 690., 691., 692., 693., 694.,\n", + " 695., 696., 697., 698., 699., 700., 701., 702., 703., 704., 705.,\n", + " 706., 707., 708., 709., 710., 711., 712., 713., 714., 715., 716.,\n", + " 717., 718., 719., 720., 721., 722., 723., 724., 725., 726., 727.,\n", + " 728., 729., 730., 731., 732., 733., 734., 735., 736., 737., 738.,\n", + " 739., 740., 741., 742., 743., 744., 745., 746., 747., 748., 749.,\n", + " 750., 751., 752., 753., 754., 755., 756., 757., 758., 759., 760.,\n", + " 761., 762., 763., 764., 765., 766., 767., 768., 769., 770., 771.,\n", + " 772., 773., 774., 775., 776., 777., 778., 779., 780., 781., 782.,\n", + " 783., 784., 785., 786., 787., 788., 789., 790., 791., 792., 793.,\n", + " 794., 795., 796., 797., 798., 799., 800., 801., 802., 803., 804.,\n", + " 805., 806., 807., 808., 809., 810., 811., 812., 813., 814., 815.,\n", + " 816., 817., 818., 819., 820., 821., 822., 823., 824., 825., 826.,\n", + " 827., 828., 829., 830., 831., 832., 833., 834., 835., 836., 837.,\n", + " 838., 839., 840., 841., 842., 843., 844., 845., 846., 847., 848.,\n", + " 849., 850., 851., 852., 853., 854., 855., 856., 857., 858., 859.,\n", + " 860., 861., 862., 863., 864., 865., 866., 867., 868., 869., 870.,\n", + " 871., 872., 873., 874., 875., 876., 877., 878., 879., 880., 881.,\n", + " 882., 883., 884., 885., 886., 887., 888., 889., 890., 891., 892.,\n", + " 893., 894., 895., 896., 897., 898., 899., 900., 901., 902., 903.,\n", + " 904., 905., 906., 907., 908., 909., 910., 911., 912., 913., 914.,\n", + " 915., 916., 917., 918., 919., 920., 921., 922., 923., 924., 925.,\n", + " 926., 927., 928., 929., 930., 931., 932., 933., 934., 935., 936.,\n", + " 937., 938., 939., 940., 941., 942., 943., 944., 945., 946., 947.,\n", + " 948., 949., 950., 951., 952., 953., 954., 955., 956., 957., 958.,\n", + " 959., 960., 961., 962., 963., 964., 965., 966., 967., 968., 969.,\n", + " 970., 971., 972., 973., 974., 975., 976., 977., 978., 979., 980.,\n", + " 981., 982., 983., 984., 985., 986., 987., 988., 989., 990.])" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "i_filt_e" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "ename": "TypeError", + "evalue": "'int' object is not iterable", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m<ipython-input-21-6664f3db0770>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mhf\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mTypeError\u001b[0m: 'int' object is not iterable" + ] + } + ], + "source": [ + "for i in len(hf):\n", + " print(i)" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [], + "source": [ + "from numpy.lib import stride_tricks as npls" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(901, 91)" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "window = 91\n", + "shape = h.data.shape[:-1] + (h.data.shape[-1] - window + 1, window)\n", + "strides = h.data.strides + (h.data.strides[-1],)\n", + "as_s = npls.as_strided(h.data, shape=shape, strides=strides, writeable=False)\n", + "as_s.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(901, 91)" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "shape" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(8, 8)" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "strides" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[9145.616, 9145.659, 9145.698, ..., 9147.489, 9147.453, 9147.415],\n", + " [9146.457, 9146.659, 9146.864, ..., 9152.84 , 9152.933, 9153.046],\n", + " [9149.807, 9149.887, 9149.958, ..., 9151.775, 9151.762, 9151.772],\n", + " ...,\n", + " [9156.414, 9156.362, 9156.33 , ..., 9157.791, 9157.746, 9157.662],\n", + " [9157.573, 9157.555, 9157.543, ..., 9157.463, 9157.493, 9157.475],\n", + " [9156.089, 9156.107, 9156.129, ..., 9158.807, 9158.818, 9158.832]])" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "as_s[::60]" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [], + "source": [ + "hf2 = np.dot(one_minute_gauss_filter, as_s[::].T)" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([9146.3294147 , 9146.34727413, 9146.36700672, 9146.38871274,\n", + " 9146.41245012, 9146.43826252, 9146.46617488, 9146.4961749 ,\n", + " 9146.52823637, 9146.5623157 , 9146.59832795, 9146.63614451,\n", + " 9146.6756066 , 9146.71654228, 9146.7587768 , 9146.8021385 ,\n", + " 9146.84643758, 9146.89145024, 9146.93693953, 9146.98268004,\n", + " 9147.0284517 , 9147.0740595 , 9147.11933223, 9147.16408598,\n", + " 9147.20814227, 9147.25135698, 9147.29362312, 9147.33486287,\n", + " 9147.37501995, 9147.41406655, 9147.45200071, 9147.48884501,\n", + " 9147.52464808, 9147.55946916, 9147.59339714, 9147.62656116,\n", + " 9147.65912327, 9147.69125836, 9147.72313398, 9147.75492814,\n", + " 9147.78682483, 9147.81901966, 9147.85172944, 9147.88516094,\n", + " 9147.91950993, 9147.95495996, 9147.9916889 , 9148.02987329,\n", + " 9148.06966334, 9148.11119517, 9148.15460282, 9148.20000821,\n", + " 9148.24750588, 9148.29716011, 9148.34902764, 9148.40314728,\n", + " 9148.45955299, 9148.5182719 , 9148.57929871, 9148.64261179,\n", + " 9148.70819126, 9148.77600591, 9148.84600612, 9148.91813911,\n", + " 9148.99235183, 9149.06857916, 9149.14674233, 9149.22676679,\n", + " 9149.30857443, 9149.39208481, 9149.47721967, 9149.56389017,\n", + " 9149.65200735, 9149.74148146, 9149.83223975, 9149.92419547,\n", + " 9150.0172389 , 9150.11127348, 9150.20620308, 9150.30192348,\n", + " 9150.3983424 , 9150.4953694 , 9150.59288013, 9150.69076012,\n", + " 9150.78891849, 9150.88723482, 9150.98556927, 9151.08378862,\n", + " 9151.18175878, 9151.27933976, 9151.37638912, 9151.47276453,\n", + " 9151.56830513, 9151.66282852, 9151.75616281, 9151.8481503 ,\n", + " 9151.93862663, 9152.02742555, 9152.11437783, 9152.19929249,\n", + " 9152.28196404, 9152.36221976, 9152.43991102, 9152.51487312,\n", + " 9152.58694163, 9152.65594849, 9152.72173336, 9152.78415666,\n", + " 9152.84308025, 9152.8983711 , 9152.94991059, 9152.99759991,\n", + " 9153.04135303, 9153.08109105, 9153.11676563, 9153.14833557,\n", + " 9153.17575841, 9153.19902477, 9153.21815123, 9153.23318014,\n", + " 9153.2441662 , 9153.25115738, 9153.25421474, 9153.25342434,\n", + " 9153.24890119, 9153.24077559, 9153.22918075, 9153.21424296,\n", + " 9153.19610037, 9153.17490982, 9153.15083191, 9153.12405065,\n", + " 9153.09476085, 9153.06313909, 9153.02936378, 9152.9935991 ,\n", + " 9152.95600412, 9152.91675664, 9152.87603556, 9152.83400635,\n", + " 9152.79080552, 9152.74655996, 9152.70139306, 9152.65542151,\n", + " 9152.60875812, 9152.56150152, 9152.51373655, 9152.46551673,\n", + " 9152.41689245, 9152.36792742, 9152.31866951, 9152.26913367,\n", + " 9152.21932366, 9152.16925782, 9152.11895131, 9152.06839911,\n", + " 9152.01758657, 9151.96650215, 9151.91514015, 9151.86351146,\n", + " 9151.81161229, 9151.75941927, 9151.70691397, 9151.65408259,\n", + " 9151.60093076, 9151.54747373, 9151.49372966, 9151.43972681,\n", + " 9151.38548955, 9151.33102645, 9151.27637207, 9151.2215872 ,\n", + " 9151.16671864, 9151.11182499, 9151.05696787, 9151.00219884,\n", + " 9150.94759059, 9150.89322982, 9150.83920433, 9150.78559928,\n", + " 9150.7324949 , 9150.67997936, 9150.6281303 , 9150.57703561,\n", + " 9150.52682015, 9150.47759126, 9150.42942702, 9150.38241424,\n", + " 9150.33665364, 9150.29225809, 9150.24933742, 9150.2079954 ,\n", + " 9150.16831906, 9150.13039555, 9150.09434076, 9150.06027026,\n", + " 9150.02827807, 9149.99843183, 9149.97081415, 9149.94552571,\n", + " 9149.92266997, 9149.90236159, 9149.88468784, 9149.86969104,\n", + " 9149.8574225 , 9149.84794278, 9149.84133032, 9149.83767784,\n", + " 9149.8370098 , 9149.83932201, 9149.84462817, 9149.85293327,\n", + " 9149.86424572, 9149.8785707 , 9149.89588695, 9149.91615142,\n", + " 9149.93930324, 9149.96526449, 9149.99396031, 9150.02531306,\n", + " 9150.05922306, 9150.09557494, 9150.13424385, 9150.1750742 ,\n", + " 9150.21789968, 9150.26257864, 9150.30897712, 9150.35693858,\n", + " 9150.40628657, 9150.45684196, 9150.50842777, 9150.56088487,\n", + " 9150.61406225, 9150.66779349, 9150.72191258, 9150.77627579,\n", + " 9150.83074797, 9150.88520113, 9150.93952152, 9150.9936031 ,\n", + " 9151.04734904, 9151.10067087, 9151.15349923, 9151.20578561,\n", + " 9151.25748365, 9151.30854869, 9151.3589626 , 9151.4087044 ,\n", + " 9151.45775133, 9151.50610374, 9151.55376348, 9151.60075791,\n", + " 9151.64712976, 9151.69290229, 9151.73808936, 9151.78271216,\n", + " 9151.8268044 , 9151.87040878, 9151.91356762, 9151.95631438,\n", + " 9151.99867358, 9152.04065486, 9152.08226113, 9152.12351158,\n", + " 9152.16441967, 9152.20498882, 9152.24522446, 9152.28512085,\n", + " 9152.32466642, 9152.36383623, 9152.40260179, 9152.44094866,\n", + " 9152.47885861, 9152.51630764, 9152.5532559 , 9152.58964854,\n", + " 9152.62544077, 9152.66060602, 9152.69511503, 9152.72891416,\n", + " 9152.76193184, 9152.79411061, 9152.82542771, 9152.85585557,\n", + " 9152.88533359, 9152.91379354, 9152.94119019, 9152.9674916 ,\n", + " 9152.99267367, 9153.01670699, 9153.03955046, 9153.06116291,\n", + " 9153.08150308, 9153.10054882, 9153.11830818, 9153.13478102,\n", + " 9153.14996027, 9153.16383384, 9153.17637466, 9153.18760295,\n", + " 9153.19756752, 9153.20628772, 9153.21378199, 9153.22008959,\n", + " 9153.22524988, 9153.2293041 , 9153.23229074, 9153.23426186,\n", + " 9153.23529289, 9153.23544721, 9153.23478221, 9153.23336046,\n", + " 9153.23124921, 9153.22851088, 9153.22521649, 9153.22144744,\n", + " 9153.21726252, 9153.21270226, 9153.20781335, 9153.20265548,\n", + " 9153.1972888 , 9153.19176907, 9153.18612963, 9153.18039362,\n", + " 9153.17460315, 9153.16878677, 9153.16294632, 9153.15708628,\n", + " 9153.1512156 , 9153.14535173, 9153.13949287, 9153.13361146,\n", + " 9153.12769202, 9153.12172608, 9153.11569917, 9153.10959401,\n", + " 9153.10339616, 9153.097084 , 9153.09063212, 9153.08400965,\n", + " 9153.0771906 , 9153.07015207, 9153.06286425, 9153.0553093 ,\n", + " 9153.04747553, 9153.03935548, 9153.03092278, 9153.02214213,\n", + " 9153.01300074, 9153.00349429, 9152.99361946, 9152.98337453,\n", + " 9152.97275604, 9152.96175392, 9152.95036248, 9152.93858654,\n", + " 9152.92643572, 9152.91391813, 9152.90102572, 9152.88774249,\n", + " 9152.87407819, 9152.86004573, 9152.84564559, 9152.83088429,\n", + " 9152.81576882, 9152.80030687, 9152.78450844, 9152.76838075,\n", + " 9152.75192941, 9152.73516676, 9152.71811657, 9152.70081349,\n", + " 9152.68328998, 9152.66555331, 9152.64761811, 9152.6295248 ,\n", + " 9152.6113035 , 9152.59297131, 9152.57456145, 9152.55611322,\n", + " 9152.5376664 , 9152.51926591, 9152.50094579, 9152.4827452 ,\n", + " 9152.46470354, 9152.44685356, 9152.42924386, 9152.41193884,\n", + " 9152.39499829, 9152.37846951, 9152.36240063, 9152.34685312,\n", + " 9152.33189563, 9152.31759037, 9152.30399073, 9152.29116102,\n", + " 9152.27917396, 9152.26810501, 9152.25802193, 9152.24898759,\n", + " 9152.24107097, 9152.23433787, 9152.2288684 , 9152.22472878,\n", + " 9152.22195769, 9152.2206102 , 9152.2207459 , 9152.22240618,\n", + " 9152.22564129, 9152.23049364, 9152.2369798 , 9152.24511344,\n", + " 9152.25489565, 9152.26632687, 9152.27940101, 9152.29408548,\n", + " 9152.31035438, 9152.32817952, 9152.3475092 , 9152.36827961,\n", + " 9152.39041223, 9152.41383513, 9152.43848362, 9152.46429633,\n", + " 9152.49119538, 9152.51907204, 9152.54783437, 9152.5774084 ,\n", + " 9152.60772433, 9152.63871197, 9152.67029159, 9152.70237927,\n", + " 9152.73491059, 9152.76783491, 9152.80110388, 9152.8346908 ,\n", + " 9152.86857143, 9152.90273106, 9152.93717337, 9152.97189296,\n", + " 9153.00689034, 9153.04218709, 9153.07783196, 9153.11388383,\n", + " 9153.15039968, 9153.18742787, 9153.22501683, 9153.26322626,\n", + " 9153.30212812, 9153.34180717, 9153.38233952, 9153.4237813 ,\n", + " 9153.46618585, 9153.50959997, 9153.55405683, 9153.5995865 ,\n", + " 9153.64622277, 9153.69398275, 9153.74285957, 9153.7928318 ,\n", + " 9153.84387027, 9153.89593078, 9153.94894576, 9154.00283737,\n", + " 9154.05751843, 9154.11288258, 9154.16881572, 9154.22519802,\n", + " 9154.28189146, 9154.33874413, 9154.39559884, 9154.45229025,\n", + " 9154.5086511 , 9154.56452217, 9154.61973869, 9154.67413937,\n", + " 9154.72757199, 9154.77986648, 9154.83084589, 9154.8803607 ,\n", + " 9154.92828897, 9154.97451658, 9155.01891791, 9155.06137406,\n", + " 9155.10179773, 9155.1401078 , 9155.17622663, 9155.21009773,\n", + " 9155.24168172, 9155.27093493, 9155.29782046, 9155.32233187,\n", + " 9155.34447779, 9155.3642573 , 9155.38167746, 9155.3967807 ,\n", + " 9155.40960259, 9155.42016509, 9155.42851765, 9155.43470381,\n", + " 9155.43876368, 9155.44076254, 9155.44076946, 9155.43885641,\n", + " 9155.43509394, 9155.42955367, 9155.42231175, 9155.41344728,\n", + " 9155.40304801, 9155.39119329, 9155.37796796, 9155.36346067,\n", + " 9155.34775509, 9155.33096004, 9155.3131756 , 9155.29450329,\n", + " 9155.27506805, 9155.25498416, 9155.23436233, 9155.2133202 ,\n", + " 9155.19200146, 9155.17055293, 9155.14910305, 9155.12779085,\n", + " 9155.1067659 , 9155.08616922, 9155.06613627, 9155.04681598,\n", + " 9155.02836435, 9155.0109254 , 9154.99465811, 9154.97971051,\n", + " 9154.96619542, 9154.95422052, 9154.94390727, 9154.93538258,\n", + " 9154.92875783, 9154.92412398, 9154.92155182, 9154.92109536,\n", + " 9154.92281761, 9154.92677952, 9154.93300345, 9154.94149922,\n", + " 9154.95227533, 9154.96531699, 9154.98060043, 9154.99809076,\n", + " 9155.0177325 , 9155.03946141, 9155.0632018 , 9155.08885734,\n", + " 9155.11633226, 9155.14552836, 9155.17633073, 9155.20863268,\n", + " 9155.24232394, 9155.27727274, 9155.31335124, 9155.35044521,\n", + " 9155.38844298, 9155.42722947, 9155.46668566, 9155.50669759,\n", + " 9155.54716588, 9155.58799908, 9155.62911234, 9155.67042555,\n", + " 9155.71187354, 9155.75339531, 9155.79493593, 9155.83647059,\n", + " 9155.87797022, 9155.91941171, 9155.96078829, 9156.00208437,\n", + " 9156.04330315, 9156.08447055, 9156.12559878, 9156.16668882,\n", + " 9156.20776667, 9156.24886356, 9156.29000184, 9156.33121012,\n", + " 9156.37250709, 9156.41391045, 9156.45543474, 9156.49709961,\n", + " 9156.53893285, 9156.58093726, 9156.62309499, 9156.66539641,\n", + " 9156.70783205, 9156.75036639, 9156.79296339, 9156.83560226,\n", + " 9156.87823703, 9156.92079751, 9156.96319712, 9157.00536311,\n", + " 9157.04724769, 9157.08877384, 9157.1298426 , 9157.17036103,\n", + " 9157.21022081, 9157.24931153, 9157.28753289, 9157.32478503,\n", + " 9157.36094747, 9157.39588991, 9157.42949656, 9157.46165178,\n", + " 9157.49225063, 9157.52118918, 9157.54835066, 9157.5736293 ,\n", + " 9157.59692742, 9157.61815795, 9157.63724188, 9157.65409038,\n", + " 9157.66863124, 9157.68079268, 9157.69051165, 9157.69777037,\n", + " 9157.70255069, 9157.7048154 , 9157.70454574, 9157.70175641,\n", + " 9157.69647076, 9157.68872519, 9157.67857076, 9157.66603809,\n", + " 9157.65117995, 9157.63409197, 9157.61486432, 9157.59359084,\n", + " 9157.57038447, 9157.54536789, 9157.51865136, 9157.49035127,\n", + " 9157.46061822, 9157.42960419, 9157.39745182, 9157.36431015,\n", + " 9157.33033277, 9157.29567289, 9157.2604864 , 9157.22492357,\n", + " 9157.18913088, 9157.15325564, 9157.11742628, 9157.0817518 ,\n", + " 9157.04635385, 9157.01135441, 9156.97686527, 9156.94297976,\n", + " 9156.90976504, 9156.87727405, 9156.84556567, 9156.81469978,\n", + " 9156.78471925, 9156.75566174, 9156.72753694, 9156.70032818,\n", + " 9156.67402318, 9156.64861023, 9156.6240785 , 9156.60041402,\n", + " 9156.57756708, 9156.55547687, 9156.53410771, 9156.51341541,\n", + " 9156.49333836, 9156.47381273, 9156.45476666, 9156.43615052,\n", + " 9156.41792467, 9156.40002204, 9156.38237063, 9156.36491542,\n", + " 9156.34761552, 9156.3304486 , 9156.31338684, 9156.29638872,\n", + " 9156.27942873, 9156.26249633, 9156.24558667, 9156.2287156 ,\n", + " 9156.21191829, 9156.19522879, 9156.17866731, 9156.16226557,\n", + " 9156.14608922, 9156.13022442, 9156.11476199, 9156.09977847,\n", + " 9156.08533668, 9156.07152002, 9156.05842657, 9156.04616176,\n", + " 9156.03483764, 9156.02454684, 9156.01536094, 9156.00734589,\n", + " 9156.00059746, 9155.99520726, 9155.99121699, 9155.98866571,\n", + " 9155.98759499, 9155.98803146, 9155.9900193 , 9155.9935882 ,\n", + " 9155.99873598, 9156.00545236, 9156.01369843, 9156.02343274,\n", + " 9156.03462417, 9156.04722983, 9156.06119199, 9156.07645986,\n", + " 9156.09298106, 9156.11070312, 9156.12957786, 9156.14952709,\n", + " 9156.17049253, 9156.19243666, 9156.21530317, 9156.23904184,\n", + " 9156.26360516, 9156.28895664, 9156.31507828, 9156.34195011,\n", + " 9156.36955173, 9156.3978666 , 9156.42687908, 9156.45658616,\n", + " 9156.48699079, 9156.51806847, 9156.54980537, 9156.58221248,\n", + " 9156.61528791, 9156.64901897, 9156.68340271, 9156.71843021,\n", + " 9156.75407963, 9156.79031618, 9156.8270968 , 9156.8643849 ,\n", + " 9156.90214494, 9156.94031653, 9156.97881689, 9157.01756593,\n", + " 9157.05646693, 9157.09541779, 9157.13432494, 9157.17308781,\n", + " 9157.21159945, 9157.24972611, 9157.2873198 , 9157.32426389,\n", + " 9157.360453 , 9157.39575422, 9157.43004306, 9157.46321934,\n", + " 9157.49517422, 9157.52580466, 9157.5550095 , 9157.58269459,\n", + " 9157.60879052, 9157.63323657, 9157.65597552, 9157.67696175,\n", + " 9157.69617753, 9157.71360974, 9157.72924745, 9157.74310835,\n", + " 9157.7552051 , 9157.76555627, 9157.77421289, 9157.78121643,\n", + " 9157.78661802, 9157.7905016 , 9157.79294513, 9157.79400825,\n", + " 9157.79375923, 9157.79228362, 9157.78968093, 9157.78606565,\n", + " 9157.78154837, 9157.77622157, 9157.77016911, 9157.76347018,\n", + " 9157.75620827, 9157.7484731 , 9157.74034054, 9157.73185025,\n", + " 9157.72303828, 9157.71396422, 9157.70466818, 9157.69514663,\n", + " 9157.68539553, 9157.67539766, 9157.66510675, 9157.65449945,\n", + " 9157.64355256, 9157.63221796, 9157.62044594, 9157.60817509,\n", + " 9157.59533518, 9157.58185583, 9157.56764971, 9157.55263294,\n", + " 9157.53672348, 9157.51985468, 9157.5019831 , 9157.48303713,\n", + " 9157.4629457 , 9157.44168372, 9157.41923591, 9157.39558704,\n", + " 9157.37074458, 9157.34472033, 9157.31752803, 9157.28920345,\n", + " 9157.25980622, 9157.22942504, 9157.19815237, 9157.16608282,\n", + " 9157.13335309, 9157.10010647, 9157.06646798, 9157.03258175,\n", + " 9156.99862461, 9156.96476211, 9156.93114659, 9156.89795898,\n", + " 9156.86538679, 9156.83361153, 9156.80282348, 9156.77319282,\n", + " 9156.74486717, 9156.71800158, 9156.69276683, 9156.66932791,\n", + " 9156.64781796, 9156.62835085, 9156.6110453 , 9156.59600253,\n", + " 9156.58331318, 9156.57306646, 9156.56531908, 9156.56011062,\n", + " 9156.55748031, 9156.55745105, 9156.56002435, 9156.56518237,\n", + " 9156.57289414, 9156.58313287, 9156.59586476, 9156.61103515,\n", + " 9156.62856364, 9156.64836052, 9156.67034745, 9156.69443253,\n", + " 9156.72052647, 9156.74854944, 9156.7784076 , 9156.81000603,\n", + " 9156.84325196, 9156.87804442, 9156.91429704, 9156.95194393,\n", + " 9156.99090445, 9157.03109319, 9157.07245566, 9157.11494547,\n", + " 9157.158502 , 9157.20306866, 9157.24859221, 9157.29501682,\n", + " 9157.34230991, 9157.39045449, 9157.43942921, 9157.48919742,\n", + " 9157.53971217, 9157.59092756, 9157.64280656, 9157.69531364,\n", + " 9157.74838729, 9157.8019522 , 9157.85594508, 9157.9102792 ,\n", + " 9157.96485336, 9158.01957042, 9158.07430401, 9158.12891716,\n", + " 9158.18328275, 9158.23725756, 9158.29069137, 9158.34343053,\n", + " 9158.39531688])" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "hf2" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "application/javascript": [ + "/* Put everything inside the global mpl namespace */\n", + "window.mpl = {};\n", + "\n", + "\n", + "mpl.get_websocket_type = function() {\n", + " if (typeof(WebSocket) !== 'undefined') {\n", + " return WebSocket;\n", + " } else if (typeof(MozWebSocket) !== 'undefined') {\n", + " return MozWebSocket;\n", + " } else {\n", + " alert('Your browser does not have WebSocket support.' +\n", + " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", + " 'Firefox 4 and 5 are also supported but you ' +\n", + " 'have to enable WebSockets in about:config.');\n", + " };\n", + "}\n", + "\n", + "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", + " this.id = figure_id;\n", + "\n", + " this.ws = websocket;\n", + "\n", + " this.supports_binary = (this.ws.binaryType != undefined);\n", + "\n", + " if (!this.supports_binary) {\n", + " var warnings = document.getElementById(\"mpl-warnings\");\n", + " if (warnings) {\n", + " warnings.style.display = 'block';\n", + " warnings.textContent = (\n", + " \"This browser does not support binary websocket messages. \" +\n", + " \"Performance may be slow.\");\n", + " }\n", + " }\n", + "\n", + " this.imageObj = new Image();\n", + "\n", + " this.context = undefined;\n", + " this.message = undefined;\n", + " this.canvas = undefined;\n", + " this.rubberband_canvas = undefined;\n", + " this.rubberband_context = undefined;\n", + " this.format_dropdown = undefined;\n", + "\n", + " this.image_mode = 'full';\n", + "\n", + " this.root = $('<div/>');\n", + " this._root_extra_style(this.root)\n", + " this.root.attr('style', 'display: inline-block');\n", + "\n", + " $(parent_element).append(this.root);\n", + "\n", + " this._init_header(this);\n", + " this._init_canvas(this);\n", + " this._init_toolbar(this);\n", + "\n", + " var fig = this;\n", + "\n", + " this.waiting = false;\n", + "\n", + " this.ws.onopen = function () {\n", + " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", + " fig.send_message(\"send_image_mode\", {});\n", + " if (mpl.ratio != 1) {\n", + " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", + " }\n", + " fig.send_message(\"refresh\", {});\n", + " }\n", + "\n", + " this.imageObj.onload = function() {\n", + " if (fig.image_mode == 'full') {\n", + " // Full images could contain transparency (where diff images\n", + " // almost always do), so we need to clear the canvas so that\n", + " // there is no ghosting.\n", + " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", + " }\n", + " fig.context.drawImage(fig.imageObj, 0, 0);\n", + " };\n", + "\n", + " this.imageObj.onunload = function() {\n", + " fig.ws.close();\n", + " }\n", + "\n", + " this.ws.onmessage = this._make_on_message_function(this);\n", + "\n", + " this.ondownload = ondownload;\n", + "}\n", + "\n", + "mpl.figure.prototype._init_header = function() {\n", + " var titlebar = $(\n", + " '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n", + " 'ui-helper-clearfix\"/>');\n", + " var titletext = $(\n", + " '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n", + " 'text-align: center; padding: 3px;\"/>');\n", + " titlebar.append(titletext)\n", + " this.root.append(titlebar);\n", + " this.header = titletext[0];\n", + "}\n", + "\n", + "\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._init_canvas = function() {\n", + " var fig = this;\n", + "\n", + " var canvas_div = $('<div/>');\n", + "\n", + " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", + "\n", + " function canvas_keyboard_event(event) {\n", + " return fig.key_event(event, event['data']);\n", + " }\n", + "\n", + " canvas_div.keydown('key_press', canvas_keyboard_event);\n", + " canvas_div.keyup('key_release', canvas_keyboard_event);\n", + " this.canvas_div = canvas_div\n", + " this._canvas_extra_style(canvas_div)\n", + " this.root.append(canvas_div);\n", + "\n", + " var canvas = $('<canvas/>');\n", + " canvas.addClass('mpl-canvas');\n", + " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", + "\n", + " this.canvas = canvas[0];\n", + " this.context = canvas[0].getContext(\"2d\");\n", + "\n", + " var backingStore = this.context.backingStorePixelRatio ||\n", + "\tthis.context.webkitBackingStorePixelRatio ||\n", + "\tthis.context.mozBackingStorePixelRatio ||\n", + "\tthis.context.msBackingStorePixelRatio ||\n", + "\tthis.context.oBackingStorePixelRatio ||\n", + "\tthis.context.backingStorePixelRatio || 1;\n", + "\n", + " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", + "\n", + " var rubberband = $('<canvas/>');\n", + " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", + "\n", + " var pass_mouse_events = true;\n", + "\n", + " canvas_div.resizable({\n", + " start: function(event, ui) {\n", + " pass_mouse_events = false;\n", + " },\n", + " resize: function(event, ui) {\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " stop: function(event, ui) {\n", + " pass_mouse_events = true;\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " });\n", + "\n", + " function mouse_event_fn(event) {\n", + " if (pass_mouse_events)\n", + " return fig.mouse_event(event, event['data']);\n", + " }\n", + "\n", + " rubberband.mousedown('button_press', mouse_event_fn);\n", + " rubberband.mouseup('button_release', mouse_event_fn);\n", + " // Throttle sequential mouse events to 1 every 20ms.\n", + " rubberband.mousemove('motion_notify', mouse_event_fn);\n", + "\n", + " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", + " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", + "\n", + " canvas_div.on(\"wheel\", function (event) {\n", + " event = event.originalEvent;\n", + " event['data'] = 'scroll'\n", + " if (event.deltaY < 0) {\n", + " event.step = 1;\n", + " } else {\n", + " event.step = -1;\n", + " }\n", + " mouse_event_fn(event);\n", + " });\n", + "\n", + " canvas_div.append(canvas);\n", + " canvas_div.append(rubberband);\n", + "\n", + " this.rubberband = rubberband;\n", + " this.rubberband_canvas = rubberband[0];\n", + " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", + " this.rubberband_context.strokeStyle = \"#000000\";\n", + "\n", + " this._resize_canvas = function(width, height) {\n", + " // Keep the size of the canvas, canvas container, and rubber band\n", + " // canvas in synch.\n", + " canvas_div.css('width', width)\n", + " canvas_div.css('height', height)\n", + "\n", + " canvas.attr('width', width * mpl.ratio);\n", + " canvas.attr('height', height * mpl.ratio);\n", + " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", + "\n", + " rubberband.attr('width', width);\n", + " rubberband.attr('height', height);\n", + " }\n", + "\n", + " // Set the figure to an initial 600x600px, this will subsequently be updated\n", + " // upon first draw.\n", + " this._resize_canvas(600, 600);\n", + "\n", + " // Disable right mouse context menu.\n", + " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", + " return false;\n", + " });\n", + "\n", + " function set_focus () {\n", + " canvas.focus();\n", + " canvas_div.focus();\n", + " }\n", + "\n", + " window.setTimeout(set_focus, 100);\n", + "}\n", + "\n", + "mpl.figure.prototype._init_toolbar = function() {\n", + " var fig = this;\n", + "\n", + " var nav_element = $('<div/>')\n", + " nav_element.attr('style', 'width: 100%');\n", + " this.root.append(nav_element);\n", + "\n", + " // Define a callback function for later on.\n", + " function toolbar_event(event) {\n", + " return fig.toolbar_button_onclick(event['data']);\n", + " }\n", + " function toolbar_mouse_event(event) {\n", + " return fig.toolbar_button_onmouseover(event['data']);\n", + " }\n", + "\n", + " for(var toolbar_ind in mpl.toolbar_items) {\n", + " var name = mpl.toolbar_items[toolbar_ind][0];\n", + " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", + " var image = mpl.toolbar_items[toolbar_ind][2];\n", + " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", + "\n", + " if (!name) {\n", + " // put a spacer in here.\n", + " continue;\n", + " }\n", + " var button = $('<button/>');\n", + " button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n", + " 'ui-button-icon-only');\n", + " button.attr('role', 'button');\n", + " button.attr('aria-disabled', 'false');\n", + " button.click(method_name, toolbar_event);\n", + " button.mouseover(tooltip, toolbar_mouse_event);\n", + "\n", + " var icon_img = $('<span/>');\n", + " icon_img.addClass('ui-button-icon-primary ui-icon');\n", + " icon_img.addClass(image);\n", + " icon_img.addClass('ui-corner-all');\n", + "\n", + " var tooltip_span = $('<span/>');\n", + " tooltip_span.addClass('ui-button-text');\n", + " tooltip_span.html(tooltip);\n", + "\n", + " button.append(icon_img);\n", + " button.append(tooltip_span);\n", + "\n", + " nav_element.append(button);\n", + " }\n", + "\n", + " var fmt_picker_span = $('<span/>');\n", + "\n", + " var fmt_picker = $('<select/>');\n", + " fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n", + " fmt_picker_span.append(fmt_picker);\n", + " nav_element.append(fmt_picker_span);\n", + " this.format_dropdown = fmt_picker[0];\n", + "\n", + " for (var ind in mpl.extensions) {\n", + " var fmt = mpl.extensions[ind];\n", + " var option = $(\n", + " '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n", + " fmt_picker.append(option)\n", + " }\n", + "\n", + " // Add hover states to the ui-buttons\n", + " $( \".ui-button\" ).hover(\n", + " function() { $(this).addClass(\"ui-state-hover\");},\n", + " function() { $(this).removeClass(\"ui-state-hover\");}\n", + " );\n", + "\n", + " var status_bar = $('<span class=\"mpl-message\"/>');\n", + " nav_element.append(status_bar);\n", + " this.message = status_bar[0];\n", + "}\n", + "\n", + "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n", + " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", + " // which will in turn request a refresh of the image.\n", + " this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n", + "}\n", + "\n", + "mpl.figure.prototype.send_message = function(type, properties) {\n", + " properties['type'] = type;\n", + " properties['figure_id'] = this.id;\n", + " this.ws.send(JSON.stringify(properties));\n", + "}\n", + "\n", + "mpl.figure.prototype.send_draw_message = function() {\n", + " if (!this.waiting) {\n", + " this.waiting = true;\n", + " this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n", + " }\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype.handle_save = function(fig, msg) {\n", + " var format_dropdown = fig.format_dropdown;\n", + " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", + " fig.ondownload(fig, format);\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype.handle_resize = function(fig, msg) {\n", + " var size = msg['size'];\n", + " if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n", + " fig._resize_canvas(size[0], size[1]);\n", + " fig.send_message(\"refresh\", {});\n", + " };\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n", + " var x0 = msg['x0'] / mpl.ratio;\n", + " var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n", + " var x1 = msg['x1'] / mpl.ratio;\n", + " var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n", + " x0 = Math.floor(x0) + 0.5;\n", + " y0 = Math.floor(y0) + 0.5;\n", + " x1 = Math.floor(x1) + 0.5;\n", + " y1 = Math.floor(y1) + 0.5;\n", + " var min_x = Math.min(x0, x1);\n", + " var min_y = Math.min(y0, y1);\n", + " var width = Math.abs(x1 - x0);\n", + " var height = Math.abs(y1 - y0);\n", + "\n", + " fig.rubberband_context.clearRect(\n", + " 0, 0, fig.canvas.width, fig.canvas.height);\n", + "\n", + " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n", + " // Updates the figure title.\n", + " fig.header.textContent = msg['label'];\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n", + " var cursor = msg['cursor'];\n", + " switch(cursor)\n", + " {\n", + " case 0:\n", + " cursor = 'pointer';\n", + " break;\n", + " case 1:\n", + " cursor = 'default';\n", + " break;\n", + " case 2:\n", + " cursor = 'crosshair';\n", + " break;\n", + " case 3:\n", + " cursor = 'move';\n", + " break;\n", + " }\n", + " fig.rubberband_canvas.style.cursor = cursor;\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_message = function(fig, msg) {\n", + " fig.message.textContent = msg['message'];\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_draw = function(fig, msg) {\n", + " // Request the server to send over a new figure.\n", + " fig.send_draw_message();\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n", + " fig.image_mode = msg['mode'];\n", + "}\n", + "\n", + "mpl.figure.prototype.updated_canvas_event = function() {\n", + " // Called whenever the canvas gets updated.\n", + " this.send_message(\"ack\", {});\n", + "}\n", + "\n", + "// A function to construct a web socket function for onmessage handling.\n", + "// Called in the figure constructor.\n", + "mpl.figure.prototype._make_on_message_function = function(fig) {\n", + " return function socket_on_message(evt) {\n", + " if (evt.data instanceof Blob) {\n", + " /* FIXME: We get \"Resource interpreted as Image but\n", + " * transferred with MIME type text/plain:\" errors on\n", + " * Chrome. But how to set the MIME type? It doesn't seem\n", + " * to be part of the websocket stream */\n", + " evt.data.type = \"image/png\";\n", + "\n", + " /* Free the memory for the previous frames */\n", + " if (fig.imageObj.src) {\n", + " (window.URL || window.webkitURL).revokeObjectURL(\n", + " fig.imageObj.src);\n", + " }\n", + "\n", + " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", + " evt.data);\n", + " fig.updated_canvas_event();\n", + " fig.waiting = false;\n", + " return;\n", + " }\n", + " else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n", + " fig.imageObj.src = evt.data;\n", + " fig.updated_canvas_event();\n", + " fig.waiting = false;\n", + " return;\n", + " }\n", + "\n", + " var msg = JSON.parse(evt.data);\n", + " var msg_type = msg['type'];\n", + "\n", + " // Call the \"handle_{type}\" callback, which takes\n", + " // the figure and JSON message as its only arguments.\n", + " try {\n", + " var callback = fig[\"handle_\" + msg_type];\n", + " } catch (e) {\n", + " console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n", + " return;\n", + " }\n", + "\n", + " if (callback) {\n", + " try {\n", + " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", + " callback(fig, msg);\n", + " } catch (e) {\n", + " console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n", + " }\n", + " }\n", + " };\n", + "}\n", + "\n", + "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", + "mpl.findpos = function(e) {\n", + " //this section is from http://www.quirksmode.org/js/events_properties.html\n", + " var targ;\n", + " if (!e)\n", + " e = window.event;\n", + " if (e.target)\n", + " targ = e.target;\n", + " else if (e.srcElement)\n", + " targ = e.srcElement;\n", + " if (targ.nodeType == 3) // defeat Safari bug\n", + " targ = targ.parentNode;\n", + "\n", + " // jQuery normalizes the pageX and pageY\n", + " // pageX,Y are the mouse positions relative to the document\n", + " // offset() returns the position of the element relative to the document\n", + " var x = e.pageX - $(targ).offset().left;\n", + " var y = e.pageY - $(targ).offset().top;\n", + "\n", + " return {\"x\": x, \"y\": y};\n", + "};\n", + "\n", + "/*\n", + " * return a copy of an object with only non-object keys\n", + " * we need this to avoid circular references\n", + " * http://stackoverflow.com/a/24161582/3208463\n", + " */\n", + "function simpleKeys (original) {\n", + " return Object.keys(original).reduce(function (obj, key) {\n", + " if (typeof original[key] !== 'object')\n", + " obj[key] = original[key]\n", + " return obj;\n", + " }, {});\n", + "}\n", + "\n", + "mpl.figure.prototype.mouse_event = function(event, name) {\n", + " var canvas_pos = mpl.findpos(event)\n", + "\n", + " if (name === 'button_press')\n", + " {\n", + " this.canvas.focus();\n", + " this.canvas_div.focus();\n", + " }\n", + "\n", + " var x = canvas_pos.x * mpl.ratio;\n", + " var y = canvas_pos.y * mpl.ratio;\n", + "\n", + " this.send_message(name, {x: x, y: y, button: event.button,\n", + " step: event.step,\n", + " guiEvent: simpleKeys(event)});\n", + "\n", + " /* This prevents the web browser from automatically changing to\n", + " * the text insertion cursor when the button is pressed. We want\n", + " * to control all of the cursor setting manually through the\n", + " * 'cursor' event from matplotlib */\n", + " event.preventDefault();\n", + " return false;\n", + "}\n", + "\n", + "mpl.figure.prototype._key_event_extra = function(event, name) {\n", + " // Handle any extra behaviour associated with a key event\n", + "}\n", + "\n", + "mpl.figure.prototype.key_event = function(event, name) {\n", + "\n", + " // Prevent repeat events\n", + " if (name == 'key_press')\n", + " {\n", + " if (event.which === this._key)\n", + " return;\n", + " else\n", + " this._key = event.which;\n", + " }\n", + " if (name == 'key_release')\n", + " this._key = null;\n", + "\n", + " var value = '';\n", + " if (event.ctrlKey && event.which != 17)\n", + " value += \"ctrl+\";\n", + " if (event.altKey && event.which != 18)\n", + " value += \"alt+\";\n", + " if (event.shiftKey && event.which != 16)\n", + " value += \"shift+\";\n", + "\n", + " value += 'k';\n", + " value += event.which.toString();\n", + "\n", + " this._key_event_extra(event, name);\n", + "\n", + " this.send_message(name, {key: value,\n", + " guiEvent: simpleKeys(event)});\n", + " return false;\n", + "}\n", + "\n", + "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n", + " if (name == 'download') {\n", + " this.handle_save(this, null);\n", + " } else {\n", + " this.send_message(\"toolbar_button\", {name: name});\n", + " }\n", + "};\n", + "\n", + "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n", + " this.message.textContent = tooltip;\n", + "};\n", + "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", + "\n", + "mpl.extensions = [\"eps\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\"];\n", + "\n", + "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n", + " // Create a \"websocket\"-like object which calls the given IPython comm\n", + " // object with the appropriate methods. Currently this is a non binary\n", + " // socket, so there is still some room for performance tuning.\n", + " var ws = {};\n", + "\n", + " ws.close = function() {\n", + " comm.close()\n", + " };\n", + " ws.send = function(m) {\n", + " //console.log('sending', m);\n", + " comm.send(m);\n", + " };\n", + " // Register the callback with on_msg.\n", + " comm.on_msg(function(msg) {\n", + " //console.log('receiving', msg['content']['data'], msg);\n", + " // Pass the mpl event to the overridden (by mpl) onmessage function.\n", + " ws.onmessage(msg['content']['data'])\n", + " });\n", + " return ws;\n", + "}\n", + "\n", + "mpl.mpl_figure_comm = function(comm, msg) {\n", + " // This is the function which gets called when the mpl process\n", + " // starts-up an IPython Comm through the \"matplotlib\" channel.\n", + "\n", + " var id = msg.content.data.id;\n", + " // Get hold of the div created by the display call when the Comm\n", + " // socket was opened in Python.\n", + " var element = $(\"#\" + id);\n", + " var ws_proxy = comm_websocket_adapter(comm)\n", + "\n", + " function ondownload(figure, format) {\n", + " window.open(figure.imageObj.src);\n", + " }\n", + "\n", + " var fig = new mpl.figure(id, ws_proxy,\n", + " ondownload,\n", + " element.get(0));\n", + "\n", + " // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n", + " // web socket which is closed, not our websocket->open comm proxy.\n", + " ws_proxy.onopen();\n", + "\n", + " fig.parent_element = element.get(0);\n", + " fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n", + " if (!fig.cell_info) {\n", + " console.error(\"Failed to find cell for figure\", id, fig);\n", + " return;\n", + " }\n", + "\n", + " var output_index = fig.cell_info[2]\n", + " var cell = fig.cell_info[0];\n", + "\n", + "};\n", + "\n", + "mpl.figure.prototype.handle_close = function(fig, msg) {\n", + " var width = fig.canvas.width/mpl.ratio\n", + " fig.root.unbind('remove')\n", + "\n", + " // Update the output cell to use the data from the current canvas.\n", + " fig.push_to_output();\n", + " var dataURL = fig.canvas.toDataURL();\n", + " // Re-enable the keyboard manager in IPython - without this line, in FF,\n", + " // the notebook keyboard shortcuts fail.\n", + " IPython.keyboard_manager.enable()\n", + " $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n", + " fig.close_ws(fig, msg);\n", + "}\n", + "\n", + "mpl.figure.prototype.close_ws = function(fig, msg){\n", + " fig.send_message('closing', msg);\n", + " // fig.ws.close()\n", + "}\n", + "\n", + "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n", + " // Turn the data on the canvas into data in the output cell.\n", + " var width = this.canvas.width/mpl.ratio\n", + " var dataURL = this.canvas.toDataURL();\n", + " this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n", + "}\n", + "\n", + "mpl.figure.prototype.updated_canvas_event = function() {\n", + " // Tell IPython that the notebook contents must change.\n", + " IPython.notebook.set_dirty(true);\n", + " this.send_message(\"ack\", {});\n", + " var fig = this;\n", + " // Wait a second, then push the new image to the DOM so\n", + " // that it is saved nicely (might be nice to debounce this).\n", + " setTimeout(function () { fig.push_to_output() }, 1000);\n", + "}\n", + "\n", + "mpl.figure.prototype._init_toolbar = function() {\n", + " var fig = this;\n", + "\n", + " var nav_element = $('<div/>')\n", + " nav_element.attr('style', 'width: 100%');\n", + " this.root.append(nav_element);\n", + "\n", + " // Define a callback function for later on.\n", + " function toolbar_event(event) {\n", + " return fig.toolbar_button_onclick(event['data']);\n", + " }\n", + " function toolbar_mouse_event(event) {\n", + " return fig.toolbar_button_onmouseover(event['data']);\n", + " }\n", + "\n", + " for(var toolbar_ind in mpl.toolbar_items){\n", + " var name = mpl.toolbar_items[toolbar_ind][0];\n", + " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", + " var image = mpl.toolbar_items[toolbar_ind][2];\n", + " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", + "\n", + " if (!name) { continue; };\n", + "\n", + " var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n", + " button.click(method_name, toolbar_event);\n", + " button.mouseover(tooltip, toolbar_mouse_event);\n", + " nav_element.append(button);\n", + " }\n", + "\n", + " // Add the status bar.\n", + " var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n", + " nav_element.append(status_bar);\n", + " this.message = status_bar[0];\n", + "\n", + " // Add the close button to the window.\n", + " var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n", + " var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n", + " button.click(function (evt) { fig.handle_close(fig, {}); } );\n", + " button.mouseover('Stop Interaction', toolbar_mouse_event);\n", + " buttongrp.append(button);\n", + " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", + " titlebar.prepend(buttongrp);\n", + "}\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(el){\n", + " var fig = this\n", + " el.on(\"remove\", function(){\n", + "\tfig.close_ws(fig, {});\n", + " });\n", + "}\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(el){\n", + " // this is important to make the div 'focusable\n", + " el.attr('tabindex', 0)\n", + " // reach out to IPython and tell the keyboard manager to turn it's self\n", + " // off when our div gets focus\n", + "\n", + " // location in version 3\n", + " if (IPython.notebook.keyboard_manager) {\n", + " IPython.notebook.keyboard_manager.register_events(el);\n", + " }\n", + " else {\n", + " // location in version 2\n", + " IPython.keyboard_manager.register_events(el);\n", + " }\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._key_event_extra = function(event, name) {\n", + " var manager = IPython.notebook.keyboard_manager;\n", + " if (!manager)\n", + " manager = IPython.keyboard_manager;\n", + "\n", + " // Check for shift+enter\n", + " if (event.shiftKey && event.which == 13) {\n", + " this.canvas_div.blur();\n", + " event.shiftKey = false;\n", + " // Send a \"J\" for go to next cell\n", + " event.which = 74;\n", + " event.keyCode = 74;\n", + " manager.command_mode();\n", + " manager.handle_keydown(event);\n", + " }\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_save = function(fig, msg) {\n", + " fig.ondownload(fig, null);\n", + "}\n", + "\n", + "\n", + "mpl.find_output_cell = function(html_output) {\n", + " // Return the cell and output element which can be found *uniquely* in the notebook.\n", + " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", + " // IPython event is triggered only after the cells have been serialised, which for\n", + " // our purposes (turning an active figure into a static one), is too late.\n", + " var cells = IPython.notebook.get_cells();\n", + " var ncells = cells.length;\n", + " for (var i=0; i<ncells; i++) {\n", + " var cell = cells[i];\n", + " if (cell.cell_type === 'code'){\n", + " for (var j=0; j<cell.output_area.outputs.length; j++) {\n", + " var data = cell.output_area.outputs[j];\n", + " if (data.data) {\n", + " // IPython >= 3 moved mimebundle to data attribute of output\n", + " data = data.data;\n", + " }\n", + " if (data['text/html'] == html_output) {\n", + " return [cell, data, j];\n", + " }\n", + " }\n", + " }\n", + " }\n", + "}\n", + "\n", + "// Register the function which deals with the matplotlib target/channel.\n", + "// The kernel may be null if the page has been refreshed.\n", + "if (IPython.notebook.kernel != null) {\n", + " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", + "}\n" + ], + "text/plain": [ + "<IPython.core.display.Javascript object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAgAElEQVR4XuydB3hUxfrG300IoVyKgLRIlyJKCT2gGMC/VJHiJVIVMGAFAVGCIEUgAiIgIjcgiJRQlFAUAUGadKRjLnAJwQQQUDoIIZD9P3NwQ8runtmd3eTs7rvP5bmafN+cmd95l3n95swck9lsNoMfEiABEiABEiABEiABnyFgogH0mXvNgZIACZAACZAACZCARoAGkEIgARIgARIgARIgAR8jQAPoYzecwyUBEiABEiABEiABGkBqgARIgARIgARIgAR8jAANoI/dcA6XBEiABEiABEiABGgAqQESIAESIAESIAES8DECNIA+dsM5XBIgARIgARIgARKgAaQGSIAESIAESIAESMDHCNAA+tgN53BJgARIgARIgARIgAaQGiABEiABEiABEiABHyNAA+hjN5zDJQESIAESIAESIAEaQGqABEiABEiABEiABHyMAA2gj91wDpcESIAESIAESIAEaACpARIgARIgARIgARLwMQI0gD52wzlcEiABEiABEiABEqABpAZIgARIgARIgARIwMcI0AD62A3ncEmABEiABEiABEiABpAaIAESIAESIAESIAEfI0AD6GM3nMMlARIgARIgARIgARpAaoAESIAESIAESIAEfIwADaCP3XAOlwRIgARIgARIgARoAKkBEiABEiABEiABEvAxAjSAPnbDOVwSIAESIAESIAESoAGkBkiABEiABEiABEjAxwjQAPrYDedwSYAESIAESIAESIAGkBogARIgARIgARIgAR8jQAPoYzecwyUBEiABEiABEiABGkBqgARIgARIgARIgAR8jAANoI/dcA6XBEiABEiABEiABGgAqQESIAESIAESIAES8DECNIA+dsM5XBIgARIgARIgARKgAaQGSIAESIAESIAESMDHCNAA+tgN53BJgARIgARIgARIgAaQGiABEiABEiABEiABHyNAA+hjN5zDJQESIAESIAESIAEaQGqABEiABEiABEiABHyMAA2gj91wDpcESIAESIAESIAEaACpARIgARIgARIgARLwMQI0gD52wzlcEiABEiABEiABEqABpAZIgARIgARIgARIwMcI0AD62A3ncEmABEiABEiABEiABpAaIAESIAESIAESIAEfI0AD6GM3nMMlARIgARIgARIgARpAaoAESIAESIAESIAEfIwADaCP3XAOlwRIgARIgARIgARoAKkBEiABEiABEiABEvAxAjSAPnbDOVwSIAESIAESIAESoAGkBkiABEiABEiABEjAxwjQAPrYDedwSYAESIAESIAESIAGkBogARIgARIgARIgAR8jQAPoYzecwyUBEiABEiABEiABGkBqgARIgARIgARIgAR8jAANoI/dcA6XBEiABEiABEiABGgAqQESIAESIAESIAES8DECNIA+dsM5XBIgARIgARIgARKgAaQGSIAESIAESIAESMDHCNAAKtzwlJQUnDt3Dvny5YPJZFJoiakkQAIkQAIkQAJZRcBsNuPGjRsoWbIk/Pz8suqyhroODaDC7Thz5gxKlSql0AJTSYAESIAESIAEsotAYmIiHnvssey6fLZelwZQAf+1a9dQsGBBCAHlz59foSWmkgAJkAAJkAAJZBWB69evawWcq1evokCBAll1WUNdhwZQ4XYIAQnhCCNIA6gAkqkkQAIkQAIkkIUEOH8DhjSAYl1++PDhWL58OS5evIjg4GBMnToVdevW1eQRExODqKgo7Nu3D5cuXcKBAwdQs2bNTNLZuXMnPvzwQ+zevRsBAQFazJo1a5A7d24t9sqVK+jXrx9WrVql/Xvbtm0xbdo0raon86GAZCgxhgRIgARIgASMRYDzt0ENYFhYGI4ePYoZM2ZoD2guWLAAkydPRmxsLIKCgjB//nzEx8drvwsPD7dqAIX5a9GiBSIiIvDCCy8gZ86cOHTokPbPgYGBmhJbtmwJ8RzfzJkztX/v06cPypYti++//15KqRSQFCYGkQAJkAAJkIChCHD+NqABvH37trarduXKlWjdunWqYET1rk2bNhgzZkzqz06fPo1y5cpZNYANGjTA//3f/+Hjjz+2Krr//ve/qFq1Knbt2oX69etrMeKfQ0JCcOzYMVSuXFlXrBSQLiIGkAAJkAAJkIDhCHD+NqABFMu/4nm6DRs2oFmzZqmiEcZMVO42b96sawDFsnGxYsXw+eefY9GiRYiLi0OVKlUwduxYPP3001r+nDlzMHDgQO0B0LQfsfwrqo09e/bUFSwFpIuIASRAAiRAAiRgOAKcvw1oAIVKGjZsqC3ZRkdHa0ZOmLgePXqgYsWKOH78uK4BtFTyChUqhE8//VR79m/evHn48ssvtaVl0c64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\" width=\"640\">" + ], + "text/plain": [ + "<IPython.core.display.HTML object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "[<matplotlib.lines.Line2D at 0x1c28363d30>,\n", + " <matplotlib.lines.Line2D at 0x1c28363fd0>]" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pl.plot(t-45,h.data,'.',t_filt,hf2,'*')" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [], + "source": [ + "t_filt_dec = np.linspace(0,len(h.data)-91,16)" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [], + "source": [ + "hf3 = np.dot(one_minute_gauss_filter, as_s[::60].T)" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "data": { + "application/javascript": [ + "/* Put everything inside the global mpl namespace */\n", + "window.mpl = {};\n", + "\n", + "\n", + "mpl.get_websocket_type = function() {\n", + " if (typeof(WebSocket) !== 'undefined') {\n", + " return WebSocket;\n", + " } else if (typeof(MozWebSocket) !== 'undefined') {\n", + " return MozWebSocket;\n", + " } else {\n", + " alert('Your browser does not have WebSocket support.' +\n", + " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", + " 'Firefox 4 and 5 are also supported but you ' +\n", + " 'have to enable WebSockets in about:config.');\n", + " };\n", + "}\n", + "\n", + "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", + " this.id = figure_id;\n", + "\n", + " this.ws = websocket;\n", + "\n", + " this.supports_binary = (this.ws.binaryType != undefined);\n", + "\n", + " if (!this.supports_binary) {\n", + " var warnings = document.getElementById(\"mpl-warnings\");\n", + " if (warnings) {\n", + " warnings.style.display = 'block';\n", + " warnings.textContent = (\n", + " \"This browser does not support binary websocket messages. \" +\n", + " \"Performance may be slow.\");\n", + " }\n", + " }\n", + "\n", + " this.imageObj = new Image();\n", + "\n", + " this.context = undefined;\n", + " this.message = undefined;\n", + " this.canvas = undefined;\n", + " this.rubberband_canvas = undefined;\n", + " this.rubberband_context = undefined;\n", + " this.format_dropdown = undefined;\n", + "\n", + " this.image_mode = 'full';\n", + "\n", + " this.root = $('<div/>');\n", + " this._root_extra_style(this.root)\n", + " this.root.attr('style', 'display: inline-block');\n", + "\n", + " $(parent_element).append(this.root);\n", + "\n", + " this._init_header(this);\n", + " this._init_canvas(this);\n", + " this._init_toolbar(this);\n", + "\n", + " var fig = this;\n", + "\n", + " this.waiting = false;\n", + "\n", + " this.ws.onopen = function () {\n", + " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", + " fig.send_message(\"send_image_mode\", {});\n", + " if (mpl.ratio != 1) {\n", + " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", + " }\n", + " fig.send_message(\"refresh\", {});\n", + " }\n", + "\n", + " this.imageObj.onload = function() {\n", + " if (fig.image_mode == 'full') {\n", + " // Full images could contain transparency (where diff images\n", + " // almost always do), so we need to clear the canvas so that\n", + " // there is no ghosting.\n", + " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", + " }\n", + " fig.context.drawImage(fig.imageObj, 0, 0);\n", + " };\n", + "\n", + " this.imageObj.onunload = function() {\n", + " fig.ws.close();\n", + " }\n", + "\n", + " this.ws.onmessage = this._make_on_message_function(this);\n", + "\n", + " this.ondownload = ondownload;\n", + "}\n", + "\n", + "mpl.figure.prototype._init_header = function() {\n", + " var titlebar = $(\n", + " '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n", + " 'ui-helper-clearfix\"/>');\n", + " var titletext = $(\n", + " '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n", + " 'text-align: center; padding: 3px;\"/>');\n", + " titlebar.append(titletext)\n", + " this.root.append(titlebar);\n", + " this.header = titletext[0];\n", + "}\n", + "\n", + "\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._init_canvas = function() {\n", + " var fig = this;\n", + "\n", + " var canvas_div = $('<div/>');\n", + "\n", + " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", + "\n", + " function canvas_keyboard_event(event) {\n", + " return fig.key_event(event, event['data']);\n", + " }\n", + "\n", + " canvas_div.keydown('key_press', canvas_keyboard_event);\n", + " canvas_div.keyup('key_release', canvas_keyboard_event);\n", + " this.canvas_div = canvas_div\n", + " this._canvas_extra_style(canvas_div)\n", + " this.root.append(canvas_div);\n", + "\n", + " var canvas = $('<canvas/>');\n", + " canvas.addClass('mpl-canvas');\n", + " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", + "\n", + " this.canvas = canvas[0];\n", + " this.context = canvas[0].getContext(\"2d\");\n", + "\n", + " var backingStore = this.context.backingStorePixelRatio ||\n", + "\tthis.context.webkitBackingStorePixelRatio ||\n", + "\tthis.context.mozBackingStorePixelRatio ||\n", + "\tthis.context.msBackingStorePixelRatio ||\n", + "\tthis.context.oBackingStorePixelRatio ||\n", + "\tthis.context.backingStorePixelRatio || 1;\n", + "\n", + " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", + "\n", + " var rubberband = $('<canvas/>');\n", + " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", + "\n", + " var pass_mouse_events = true;\n", + "\n", + " canvas_div.resizable({\n", + " start: function(event, ui) {\n", + " pass_mouse_events = false;\n", + " },\n", + " resize: function(event, ui) {\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " stop: function(event, ui) {\n", + " pass_mouse_events = true;\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " });\n", + "\n", + " function mouse_event_fn(event) {\n", + " if (pass_mouse_events)\n", + " return fig.mouse_event(event, event['data']);\n", + " }\n", + "\n", + " rubberband.mousedown('button_press', mouse_event_fn);\n", + " rubberband.mouseup('button_release', mouse_event_fn);\n", + " // Throttle sequential mouse events to 1 every 20ms.\n", + " rubberband.mousemove('motion_notify', mouse_event_fn);\n", + "\n", + " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", + " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", + "\n", + " canvas_div.on(\"wheel\", function (event) {\n", + " event = event.originalEvent;\n", + " event['data'] = 'scroll'\n", + " if (event.deltaY < 0) {\n", + " event.step = 1;\n", + " } else {\n", + " event.step = -1;\n", + " }\n", + " mouse_event_fn(event);\n", + " });\n", + "\n", + " canvas_div.append(canvas);\n", + " canvas_div.append(rubberband);\n", + "\n", + " this.rubberband = rubberband;\n", + " this.rubberband_canvas = rubberband[0];\n", + " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", + " this.rubberband_context.strokeStyle = \"#000000\";\n", + "\n", + " this._resize_canvas = function(width, height) {\n", + " // Keep the size of the canvas, canvas container, and rubber band\n", + " // canvas in synch.\n", + " canvas_div.css('width', width)\n", + " canvas_div.css('height', height)\n", + "\n", + " canvas.attr('width', width * mpl.ratio);\n", + " canvas.attr('height', height * mpl.ratio);\n", + " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", + "\n", + " rubberband.attr('width', width);\n", + " rubberband.attr('height', height);\n", + " }\n", + "\n", + " // Set the figure to an initial 600x600px, this will subsequently be updated\n", + " // upon first draw.\n", + " this._resize_canvas(600, 600);\n", + "\n", + " // Disable right mouse context menu.\n", + " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", + " return false;\n", + " });\n", + "\n", + " function set_focus () {\n", + " canvas.focus();\n", + " canvas_div.focus();\n", + " }\n", + "\n", + " window.setTimeout(set_focus, 100);\n", + "}\n", + "\n", + "mpl.figure.prototype._init_toolbar = function() {\n", + " var fig = this;\n", + "\n", + " var nav_element = $('<div/>')\n", + " nav_element.attr('style', 'width: 100%');\n", + " this.root.append(nav_element);\n", + "\n", + " // Define a callback function for later on.\n", + " function toolbar_event(event) {\n", + " return fig.toolbar_button_onclick(event['data']);\n", + " }\n", + " function toolbar_mouse_event(event) {\n", + " return fig.toolbar_button_onmouseover(event['data']);\n", + " }\n", + "\n", + " for(var toolbar_ind in mpl.toolbar_items) {\n", + " var name = mpl.toolbar_items[toolbar_ind][0];\n", + " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", + " var image = mpl.toolbar_items[toolbar_ind][2];\n", + " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", + "\n", + " if (!name) {\n", + " // put a spacer in here.\n", + " continue;\n", + " }\n", + " var button = $('<button/>');\n", + " button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n", + " 'ui-button-icon-only');\n", + " button.attr('role', 'button');\n", + " button.attr('aria-disabled', 'false');\n", + " button.click(method_name, toolbar_event);\n", + " button.mouseover(tooltip, toolbar_mouse_event);\n", + "\n", + " var icon_img = $('<span/>');\n", + " icon_img.addClass('ui-button-icon-primary ui-icon');\n", + " icon_img.addClass(image);\n", + " icon_img.addClass('ui-corner-all');\n", + "\n", + " var tooltip_span = $('<span/>');\n", + " tooltip_span.addClass('ui-button-text');\n", + " tooltip_span.html(tooltip);\n", + "\n", + " button.append(icon_img);\n", + " button.append(tooltip_span);\n", + "\n", + " nav_element.append(button);\n", + " }\n", + "\n", + " var fmt_picker_span = $('<span/>');\n", + "\n", + " var fmt_picker = $('<select/>');\n", + " fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n", + " fmt_picker_span.append(fmt_picker);\n", + " nav_element.append(fmt_picker_span);\n", + " this.format_dropdown = fmt_picker[0];\n", + "\n", + " for (var ind in mpl.extensions) {\n", + " var fmt = mpl.extensions[ind];\n", + " var option = $(\n", + " '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n", + " fmt_picker.append(option)\n", + " }\n", + "\n", + " // Add hover states to the ui-buttons\n", + " $( \".ui-button\" ).hover(\n", + " function() { $(this).addClass(\"ui-state-hover\");},\n", + " function() { $(this).removeClass(\"ui-state-hover\");}\n", + " );\n", + "\n", + " var status_bar = $('<span class=\"mpl-message\"/>');\n", + " nav_element.append(status_bar);\n", + " this.message = status_bar[0];\n", + "}\n", + "\n", + "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n", + " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", + " // which will in turn request a refresh of the image.\n", + " this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n", + "}\n", + "\n", + "mpl.figure.prototype.send_message = function(type, properties) {\n", + " properties['type'] = type;\n", + " properties['figure_id'] = this.id;\n", + " this.ws.send(JSON.stringify(properties));\n", + "}\n", + "\n", + "mpl.figure.prototype.send_draw_message = function() {\n", + " if (!this.waiting) {\n", + " this.waiting = true;\n", + " this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n", + " }\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype.handle_save = function(fig, msg) {\n", + " var format_dropdown = fig.format_dropdown;\n", + " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", + " fig.ondownload(fig, format);\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype.handle_resize = function(fig, msg) {\n", + " var size = msg['size'];\n", + " if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n", + " fig._resize_canvas(size[0], size[1]);\n", + " fig.send_message(\"refresh\", {});\n", + " };\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n", + " var x0 = msg['x0'] / mpl.ratio;\n", + " var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n", + " var x1 = msg['x1'] / mpl.ratio;\n", + " var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n", + " x0 = Math.floor(x0) + 0.5;\n", + " y0 = Math.floor(y0) + 0.5;\n", + " x1 = Math.floor(x1) + 0.5;\n", + " y1 = Math.floor(y1) + 0.5;\n", + " var min_x = Math.min(x0, x1);\n", + " var min_y = Math.min(y0, y1);\n", + " var width = Math.abs(x1 - x0);\n", + " var height = Math.abs(y1 - y0);\n", + "\n", + " fig.rubberband_context.clearRect(\n", + " 0, 0, fig.canvas.width, fig.canvas.height);\n", + "\n", + " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n", + " // Updates the figure title.\n", + " fig.header.textContent = msg['label'];\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n", + " var cursor = msg['cursor'];\n", + " switch(cursor)\n", + " {\n", + " case 0:\n", + " cursor = 'pointer';\n", + " break;\n", + " case 1:\n", + " cursor = 'default';\n", + " break;\n", + " case 2:\n", + " cursor = 'crosshair';\n", + " break;\n", + " case 3:\n", + " cursor = 'move';\n", + " break;\n", + " }\n", + " fig.rubberband_canvas.style.cursor = cursor;\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_message = function(fig, msg) {\n", + " fig.message.textContent = msg['message'];\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_draw = function(fig, msg) {\n", + " // Request the server to send over a new figure.\n", + " fig.send_draw_message();\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n", + " fig.image_mode = msg['mode'];\n", + "}\n", + "\n", + "mpl.figure.prototype.updated_canvas_event = function() {\n", + " // Called whenever the canvas gets updated.\n", + " this.send_message(\"ack\", {});\n", + "}\n", + "\n", + "// A function to construct a web socket function for onmessage handling.\n", + "// Called in the figure constructor.\n", + "mpl.figure.prototype._make_on_message_function = function(fig) {\n", + " return function socket_on_message(evt) {\n", + " if (evt.data instanceof Blob) {\n", + " /* FIXME: We get \"Resource interpreted as Image but\n", + " * transferred with MIME type text/plain:\" errors on\n", + " * Chrome. But how to set the MIME type? It doesn't seem\n", + " * to be part of the websocket stream */\n", + " evt.data.type = \"image/png\";\n", + "\n", + " /* Free the memory for the previous frames */\n", + " if (fig.imageObj.src) {\n", + " (window.URL || window.webkitURL).revokeObjectURL(\n", + " fig.imageObj.src);\n", + " }\n", + "\n", + " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", + " evt.data);\n", + " fig.updated_canvas_event();\n", + " fig.waiting = false;\n", + " return;\n", + " }\n", + " else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n", + " fig.imageObj.src = evt.data;\n", + " fig.updated_canvas_event();\n", + " fig.waiting = false;\n", + " return;\n", + " }\n", + "\n", + " var msg = JSON.parse(evt.data);\n", + " var msg_type = msg['type'];\n", + "\n", + " // Call the \"handle_{type}\" callback, which takes\n", + " // the figure and JSON message as its only arguments.\n", + " try {\n", + " var callback = fig[\"handle_\" + msg_type];\n", + " } catch (e) {\n", + " console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n", + " return;\n", + " }\n", + "\n", + " if (callback) {\n", + " try {\n", + " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", + " callback(fig, msg);\n", + " } catch (e) {\n", + " console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n", + " }\n", + " }\n", + " };\n", + "}\n", + "\n", + "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", + "mpl.findpos = function(e) {\n", + " //this section is from http://www.quirksmode.org/js/events_properties.html\n", + " var targ;\n", + " if (!e)\n", + " e = window.event;\n", + " if (e.target)\n", + " targ = e.target;\n", + " else if (e.srcElement)\n", + " targ = e.srcElement;\n", + " if (targ.nodeType == 3) // defeat Safari bug\n", + " targ = targ.parentNode;\n", + "\n", + " // jQuery normalizes the pageX and pageY\n", + " // pageX,Y are the mouse positions relative to the document\n", + " // offset() returns the position of the element relative to the document\n", + " var x = e.pageX - $(targ).offset().left;\n", + " var y = e.pageY - $(targ).offset().top;\n", + "\n", + " return {\"x\": x, \"y\": y};\n", + "};\n", + "\n", + "/*\n", + " * return a copy of an object with only non-object keys\n", + " * we need this to avoid circular references\n", + " * http://stackoverflow.com/a/24161582/3208463\n", + " */\n", + "function simpleKeys (original) {\n", + " return Object.keys(original).reduce(function (obj, key) {\n", + " if (typeof original[key] !== 'object')\n", + " obj[key] = original[key]\n", + " return obj;\n", + " }, {});\n", + "}\n", + "\n", + "mpl.figure.prototype.mouse_event = function(event, name) {\n", + " var canvas_pos = mpl.findpos(event)\n", + "\n", + " if (name === 'button_press')\n", + " {\n", + " this.canvas.focus();\n", + " this.canvas_div.focus();\n", + " }\n", + "\n", + " var x = canvas_pos.x * mpl.ratio;\n", + " var y = canvas_pos.y * mpl.ratio;\n", + "\n", + " this.send_message(name, {x: x, y: y, button: event.button,\n", + " step: event.step,\n", + " guiEvent: simpleKeys(event)});\n", + "\n", + " /* This prevents the web browser from automatically changing to\n", + " * the text insertion cursor when the button is pressed. We want\n", + " * to control all of the cursor setting manually through the\n", + " * 'cursor' event from matplotlib */\n", + " event.preventDefault();\n", + " return false;\n", + "}\n", + "\n", + "mpl.figure.prototype._key_event_extra = function(event, name) {\n", + " // Handle any extra behaviour associated with a key event\n", + "}\n", + "\n", + "mpl.figure.prototype.key_event = function(event, name) {\n", + "\n", + " // Prevent repeat events\n", + " if (name == 'key_press')\n", + " {\n", + " if (event.which === this._key)\n", + " return;\n", + " else\n", + " this._key = event.which;\n", + " }\n", + " if (name == 'key_release')\n", + " this._key = null;\n", + "\n", + " var value = '';\n", + " if (event.ctrlKey && event.which != 17)\n", + " value += \"ctrl+\";\n", + " if (event.altKey && event.which != 18)\n", + " value += \"alt+\";\n", + " if (event.shiftKey && event.which != 16)\n", + " value += \"shift+\";\n", + "\n", + " value += 'k';\n", + " value += event.which.toString();\n", + "\n", + " this._key_event_extra(event, name);\n", + "\n", + " this.send_message(name, {key: value,\n", + " guiEvent: simpleKeys(event)});\n", + " return false;\n", + "}\n", + "\n", + "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n", + " if (name == 'download') {\n", + " this.handle_save(this, null);\n", + " } else {\n", + " this.send_message(\"toolbar_button\", {name: name});\n", + " }\n", + "};\n", + "\n", + "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n", + " this.message.textContent = tooltip;\n", + "};\n", + "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", + "\n", + "mpl.extensions = [\"eps\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\"];\n", + "\n", + "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n", + " // Create a \"websocket\"-like object which calls the given IPython comm\n", + " // object with the appropriate methods. Currently this is a non binary\n", + " // socket, so there is still some room for performance tuning.\n", + " var ws = {};\n", + "\n", + " ws.close = function() {\n", + " comm.close()\n", + " };\n", + " ws.send = function(m) {\n", + " //console.log('sending', m);\n", + " comm.send(m);\n", + " };\n", + " // Register the callback with on_msg.\n", + " comm.on_msg(function(msg) {\n", + " //console.log('receiving', msg['content']['data'], msg);\n", + " // Pass the mpl event to the overridden (by mpl) onmessage function.\n", + " ws.onmessage(msg['content']['data'])\n", + " });\n", + " return ws;\n", + "}\n", + "\n", + "mpl.mpl_figure_comm = function(comm, msg) {\n", + " // This is the function which gets called when the mpl process\n", + " // starts-up an IPython Comm through the \"matplotlib\" channel.\n", + "\n", + " var id = msg.content.data.id;\n", + " // Get hold of the div created by the display call when the Comm\n", + " // socket was opened in Python.\n", + " var element = $(\"#\" + id);\n", + " var ws_proxy = comm_websocket_adapter(comm)\n", + "\n", + " function ondownload(figure, format) {\n", + " window.open(figure.imageObj.src);\n", + " }\n", + "\n", + " var fig = new mpl.figure(id, ws_proxy,\n", + " ondownload,\n", + " element.get(0));\n", + "\n", + " // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n", + " // web socket which is closed, not our websocket->open comm proxy.\n", + " ws_proxy.onopen();\n", + "\n", + " fig.parent_element = element.get(0);\n", + " fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n", + " if (!fig.cell_info) {\n", + " console.error(\"Failed to find cell for figure\", id, fig);\n", + " return;\n", + " }\n", + "\n", + " var output_index = fig.cell_info[2]\n", + " var cell = fig.cell_info[0];\n", + "\n", + "};\n", + "\n", + "mpl.figure.prototype.handle_close = function(fig, msg) {\n", + " var width = fig.canvas.width/mpl.ratio\n", + " fig.root.unbind('remove')\n", + "\n", + " // Update the output cell to use the data from the current canvas.\n", + " fig.push_to_output();\n", + " var dataURL = fig.canvas.toDataURL();\n", + " // Re-enable the keyboard manager in IPython - without this line, in FF,\n", + " // the notebook keyboard shortcuts fail.\n", + " IPython.keyboard_manager.enable()\n", + " $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n", + " fig.close_ws(fig, msg);\n", + "}\n", + "\n", + "mpl.figure.prototype.close_ws = function(fig, msg){\n", + " fig.send_message('closing', msg);\n", + " // fig.ws.close()\n", + "}\n", + "\n", + "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n", + " // Turn the data on the canvas into data in the output cell.\n", + " var width = this.canvas.width/mpl.ratio\n", + " var dataURL = this.canvas.toDataURL();\n", + " this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n", + "}\n", + "\n", + "mpl.figure.prototype.updated_canvas_event = function() {\n", + " // Tell IPython that the notebook contents must change.\n", + " IPython.notebook.set_dirty(true);\n", + " this.send_message(\"ack\", {});\n", + " var fig = this;\n", + " // Wait a second, then push the new image to the DOM so\n", + " // that it is saved nicely (might be nice to debounce this).\n", + " setTimeout(function () { fig.push_to_output() }, 1000);\n", + "}\n", + "\n", + "mpl.figure.prototype._init_toolbar = function() {\n", + " var fig = this;\n", + "\n", + " var nav_element = $('<div/>')\n", + " nav_element.attr('style', 'width: 100%');\n", + " this.root.append(nav_element);\n", + "\n", + " // Define a callback function for later on.\n", + " function toolbar_event(event) {\n", + " return fig.toolbar_button_onclick(event['data']);\n", + " }\n", + " function toolbar_mouse_event(event) {\n", + " return fig.toolbar_button_onmouseover(event['data']);\n", + " }\n", + "\n", + " for(var toolbar_ind in mpl.toolbar_items){\n", + " var name = mpl.toolbar_items[toolbar_ind][0];\n", + " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", + " var image = mpl.toolbar_items[toolbar_ind][2];\n", + " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", + "\n", + " if (!name) { continue; };\n", + "\n", + " var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n", + " button.click(method_name, toolbar_event);\n", + " button.mouseover(tooltip, toolbar_mouse_event);\n", + " nav_element.append(button);\n", + " }\n", + "\n", + " // Add the status bar.\n", + " var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n", + " nav_element.append(status_bar);\n", + " this.message = status_bar[0];\n", + "\n", + " // Add the close button to the window.\n", + " var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n", + " var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n", + " button.click(function (evt) { fig.handle_close(fig, {}); } );\n", + " button.mouseover('Stop Interaction', toolbar_mouse_event);\n", + " buttongrp.append(button);\n", + " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", + " titlebar.prepend(buttongrp);\n", + "}\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(el){\n", + " var fig = this\n", + " el.on(\"remove\", function(){\n", + "\tfig.close_ws(fig, {});\n", + " });\n", + "}\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(el){\n", + " // this is important to make the div 'focusable\n", + " el.attr('tabindex', 0)\n", + " // reach out to IPython and tell the keyboard manager to turn it's self\n", + " // off when our div gets focus\n", + "\n", + " // location in version 3\n", + " if (IPython.notebook.keyboard_manager) {\n", + " IPython.notebook.keyboard_manager.register_events(el);\n", + " }\n", + " else {\n", + " // location in version 2\n", + " IPython.keyboard_manager.register_events(el);\n", + " }\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._key_event_extra = function(event, name) {\n", + " var manager = IPython.notebook.keyboard_manager;\n", + " if (!manager)\n", + " manager = IPython.keyboard_manager;\n", + "\n", + " // Check for shift+enter\n", + " if (event.shiftKey && event.which == 13) {\n", + " this.canvas_div.blur();\n", + " event.shiftKey = false;\n", + " // Send a \"J\" for go to next cell\n", + " event.which = 74;\n", + " event.keyCode = 74;\n", + " manager.command_mode();\n", + " manager.handle_keydown(event);\n", + " }\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_save = function(fig, msg) {\n", + " fig.ondownload(fig, null);\n", + "}\n", + "\n", + "\n", + "mpl.find_output_cell = function(html_output) {\n", + " // Return the cell and output element which can be found *uniquely* in the notebook.\n", + " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", + " // IPython event is triggered only after the cells have been serialised, which for\n", + " // our purposes (turning an active figure into a static one), is too late.\n", + " var cells = IPython.notebook.get_cells();\n", + " var ncells = cells.length;\n", + " for (var i=0; i<ncells; i++) {\n", + " var cell = cells[i];\n", + " if (cell.cell_type === 'code'){\n", + " for (var j=0; j<cell.output_area.outputs.length; j++) {\n", + " var data = cell.output_area.outputs[j];\n", + " if (data.data) {\n", + " // IPython >= 3 moved mimebundle to data attribute of output\n", + " data = data.data;\n", + " }\n", + " if (data['text/html'] == html_output) {\n", + " return [cell, data, j];\n", + " }\n", + " }\n", + " }\n", + " }\n", + "}\n", + "\n", + "// Register the function which deals with the matplotlib target/channel.\n", + "// The kernel may be null if the page has been refreshed.\n", + "if (IPython.notebook.kernel != null) {\n", + " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", + "}\n" + ], + "text/plain": [ + "<IPython.core.display.Javascript object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAgAElEQVR4XuydB3hUxdfG301HhAChhASQolQpARECSvWjixQFqQr+idjAhlJEOhFQaQIGBJGSUCSAigIiAtIEAWkRlAASSkBCEZAUkv2eubAhyZY7u3d3s+W9z5NHzZ6ZO/Obs5nXM3NmdHq9Xg8+JEACJEACJEACJEACXkNARwHoNWPNjpIACZAACZAACZCAQoACkI5AAiRAAiRAAiRAAl5GgALQywac3SUBEiABEiABEiABCkD6AAmQAAmQAAmQAAl4GQEKQC8bcHaXBEiABEiABEiABCgA6QMkQAIkQAIkQAIk4GUEKAC9bMDZXRIgARIgARIgARKgAKQPkAAJkAAJkAAJkICXEaAA9LIBZ3dJgARIgARIgARIgAKQPkACJEACJEACJEACXkaAAtDLBpzdJQESIAESIAESIAEKQPoACZAACZAACZAACXgZAQpALxtwdpcESIAESIAESIAEKADpAyRAAiRAAiRAAiTgZQQoAL1swNldEiABEiABEiABEqAApA+QAAmQAAmQAAmQgJcRoAD0sgFnd0mABEiABEiABEiAApA+QAIkQAIkQAIkQAJeRoAC0MsGnN0lARIgARIgARIgAQpA+gAJkAAJkAAJkAAJeBkBCkAvG3B2lwRIgARIgARIgAQoAOkDJEACJEACJEACJOBlBCgAvWzA2V0SIAESIAESIAESoACkD5AACZAACZAACZCAlxGgAPSyAWd3SYAESIAESIAESIACkD5AAiRAAiRAAiRAAl5GgALQywac3SUBEiABEiABEiABCkD6AAmQAAmQAAmQAAl4GQEKQC8bcHaXBEiABEiABEiABCgA6QMkQAIkQAIkQAIk4GUEKAC9bMDZXRIgARIgARIgARKgAKQPkAAJkAAJkAAJkICXEaAA9LIBZ3dJgARIgARIgARIgAKQPkACJEACJEACJEACXkaAAtDLBpzdJQESIAESIAESIAEKQPoACZAACZAACZAACXgZAQpALxtwdpcESIAESIAESIAEKADpAyRAAiRAAiRAAiTgZQQoAL1swNldEiABEiABEiABEqAApA+QAAmQAAmQAAmQgJcRoAD0sgFnd0mABEiABEiABEiAApA+QAIkQAIkQAIkQAJeRoAC0MsGnN0lARIgARIgARIgAQpA+gAJkAAJkAAJkAAJeBkBCkAvG3B2lwRIgARIgARIgAQoAOkDJEACJEACJEACJOBlBCgAvWzA2V0SIAESIAESIAESoACkD5AACZAACZAACZCAlxGgAPSyAWd3SYAESIAESIAESIACkD5AAiRAAiRAAiRAAl5GgALQywac3SUBEiABEiABEiABCkD6AAmQAAmQAAmQAAl4GQEKQC8bcHaXBEiABEiABEiABCgA6QMkQAIkQAIkQAIk4GUEKAC9bMDZXRIgARIgARIgARKgAKQPkAAJkAAJkAAJkICXEaAA1DDgWVlZOH/+PAoVKgSdTqehJhYlARIgARIgARJwFgG9Xo8bN24gLCwMPj4+znqtS72HAlDDcJw9exZly5bVUAOLkgAJkAAJkAAJ5BeBpKQklClTJr9en6/vpQDUgP/69esoUqQIhAMVLlxYQ00sSgIkQAIkQAIk4CwC//77rxLAuXbtGoKDg531Wpd6DwWghuEQDiQcRwhBCkANIFmUBEiABEiABJxIgPM34JICUKzLjxw5EqtXr8alS5cQERGB6dOno379+op7xMfHIyYmBvv27UNKSgoOHDiAOnXqGLnOrl27MGLECPz666/w9/dXbH744QcUKFBAsb169SoGDRqEb775Rvnvjh07YubMmUpUT+ahA8lQog0JkAAJkAAJuBYBzt8uKgC7d++OI0eOYM6cOcoGzSVLlmDq1KlISEhAeHg4Fi9ejFOnTimfDRgwwKQAFOKvTZs2GDZsGJ5++mkEBATg4MGDyr8HBgYqnti2bVuIfXxz585V/jsqKgrly5fHt99+K+WpdCApTDQiARIgARIgAZciwPnbBQXg7du3lazatWvXon379tkOI6J3HTp0wPjx47N/d/r0aVSoUMGkAGzYsCH+7//+D+PGjTPpdH/88QeqV6+O3bt3o0GDBoqN+PfIyEgcO3YMVapUUXVWOpAqIhqQAAmQAAmQgMsR4PztggJQLP+K/XSbNm1Cy5Yts51GCDMRuduyZYuqABTLxqVKlcKMGTMQFxeHxMREVK1aFRMmTMATTzyhlF+wYAHefvttZQNozkcs/4poY79+/VQdlg6kiogGJEACJEACJOByBDh/u6AAFF7SqFEjZck2NjZWEXJCxPXt2xePPPIIjh8/rioADZG8YsWK4eOPP1b2/i1atAizZ89WlpZFPRMn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Di1pZ51QOaeIi9D9e/TuiTb3jjMlAGNbajpbBERABEQgjgTS/fkdCaqMrKwstnBVi4JAOi+gGyZ8be8tWZ+DykOd69slTWoc+FsE7t979nS3F/e3tUnXNpMLOIr1pVNEQAREQAQSQyCdn9+REktJAbh9+3a7++677c0337TffvvNTj75ZPv3v/9tTZo0cfOaMmWKjR071r7++mvbvHmzffPNN9awYcOAc0bftm/f3j744APX34UXXph93JdffmkDBw50/VCgmP5HjBgRtC//C6TrAhr5wQobPWNlQJ7zsOZlbXSlX8K1o3ZPtCIZZnMGygIYjpU+FwEREAERSB6BdH1+54VgSgrASy65xP773//aU089ZVWrVrWXX37ZHnvsMVu2bJlVq1bNXnrpJfv555/dZ9dee21IAch5H3/8sb3//vs5BCAis2bNmnbBBRc4Efjnn3/avffea7NmzbJff/3VihUrFpZjOi6gddt2WfNh04POvWH1w2zqxvZh2ZD8MXpfR7vs1Bo2pGN4sRi2Qx0gAiIgAiIgAnEikI7P77yiSTkBuGvXLjv00EPtrbfesvPOOy97Plj4OnToYA8++GD233755Rc7+uijgwrAxYsXu3Ow9B1xxBE5BOBXX33lLH6rVq2y6tWruz6XLFliJ510kv34449Wu3b4siXpuIDmrtxk3cbND7qOqtlGm1Py5rDrrNnuUbbeKtgTXU+2Dg2qhj1eB4iACIiACIhAsgik4/M7r+xSTgBimStTpox98skn1qZNm+z5NG/e3EqUKGEzZsyISAD+8ccf1rhxYxs2bJiz8uHi9XUBc51atWpZ7969bdCgQbZv3z6744473HUXLVpkBx10UFiW6biASPy4YPTcoHP/pWS3sFzG7m1rw/Z1d8e91buFNaheLuw5OkAEREAEREAEkkUgHZ/feWWXcgKQCbRo0cKKFy9uEydOtMqVK9ukSZOse/fuduyxx9p3330XkQDs2bOnE3XPPPOMO95fAPK3pUuXOnGIO5l23HHH2Ycffmg1avyV6OBHMzMz0/jPaywgrIfbtm1zojUd2tBpy+zpWQd4+Le8Wv84Xwkg6bAqNAcREAERSC8CEoApWgh65cqVdvXVV9vnn39uRYsWtUaNGjlxtnDhQhcH6LVgLuC3337b+vXr51zDhxxySEABiKv5jDPOsDp16tiNN97o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YsKnk0VABERABEQgXwjo+S0BGNPC0wKKCZ9OFgEREAEREIF8IaDntwRgTAtv27ZtLsV89erVVqZMmZj60skiIAIiIAIiIALJIYAArF69uqueULZs2eRcNMWuojIwMdyQX3/91S0gNREQAREQAREQgYJHAAPOkUceWfAGHocRSwDGAHH//v22du1aO/TQQ1O++K73tiNrZQw3PMJTxTpCUHE4TKzjADHCLsQ6QlBxOEys4wAxTBfUT92+fbtVrVrVihQpkvgLpuAVJABT8KYkYkiKd0gE1cB9irVYJ49A8q6kdS3WySOgKyWDgARgMiinwDX04528myDWYp08Asm7kta1WCePgK6UDAISgMmgnALX0I938m6CWIt18ggk70pa12KdPAK6UjIISAAmg3IKXCMzM9OGDRtmd9xxh5UoUSIFRpS+QxDr5N1bsRbr5BFI3pW0rpPHujBfSQKwMN99zV0EREAEREAERKBQEpAALJS3XZMWAREQAREQAREozAQkAAvz3dfcRUAEREAEREAECiUBCcBCeds1aREQAREQAREQgcJMQAKwMN99zV0EREAEREAERKBQEpAALCS3/cknn7SRI0faunXr7MQTT7THH3/cTjvttEIy+9inSQb1lClTbMWKFXbwwQdbixYt7KGHHrLjjz8+u3My92677TabNGmS7dq1y9q0aWNw991maNWqVda7d2+bPn2666dbt2728MMPW/HiR6fr1gAADTJJREFUxWMfZJr2APtBgwbZzTff7NYtTazjd7PXrFljAwYMsPfff9+t2+OOO87Gjx9vp5xyirsIOybcd9999vTTT9uWLVvs1FNPtdGjR7vfEa/x9z59+tjbb7/t/vTPf/7TRo0a5fZKVztA4M8//7TBgwfbhAkTbP369XbEEUfYVVddZXfddVf2ThRirdWSTAISgMmknU/XevXVV+2KK65wYqRly5Y2duxYe+aZZ2zZsmVWo0aNfBpVwbps27Zt7dJLL7UmTZq4H/I777zTlixZ4hiWLl3aTeb666+3d955x55//nmrUKGC9evXz37//Xf7+uuvrWjRorZv3z5r2LChHX744fbII4/Y5s2b7corr7ROnTq5h6VabgJffvmldenSxcqUKWOtW7fOFoBiHZ/VgnA7+eSTHVuYVqpUyVauXGlHHXWU1a5d212EF50hQ4a4dY04fPDB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5ZccLuDnn3/ebrnlFiey+vXrZ6tXr7b27du7c9944w279957bdu2bc4C9/jjj1vRokVdn1gS77rrLpswYYJt3brV6tWrZw899JAhOoO1Pn362Lp16+z111/PPmTx4sXu+l999ZWzSB577LE2duxYw1JI+9///mdHHXWUrVy50mrVqpVwbrqACIiACPgSkADUehABEShQBBBtWNsQZvfff78b++GHH26zZs3KJQCvu+46J9wQcNu3b7dOnTrZKaec4mIEEYA//fSTde7c2V588UW75JJLXF+XXXaZE5PDhw+3qlWr2ptvvukE4ZIlS5yIC9QaNmxoXbt2tQEDBmR/zPhOPvlku/POO524XLRokR133HHWoEGD7GNwV48YMcKuvPLKAnUPNFgREIGCT0ACsODfQ81ABAodgUAuYP8kECyAPXr0sB9//NFq167tGPXq1cteeukl56o95JBD3N/atm3rLHFjxoxx1jhE3q+//urEn9fOOussa9q0qQ0dOjQgawQlLl3f+L8yZcq4v4USd8QBXnDBBU6MqomACIhAMglIACaTtq4lAiIQFwKRCsDevXvbzp07s6+J0ML9u3Tp0uy/IdCwDk6ZMsW5cLt06WKlS5fOMc7MzExnPXz11VcDjr9EiRLO1XzxxRdnfz548GAbMmSInX766YaA5DNPiHoHtWzZ0v7xj384C6WaCIiACCSTgARgMmnrWiIgAnEhEKkAJAaPOD6vIcqmTp3q3LFeI6aQY/g7Ag8XMALRiwn0jsNiWKVKlYDjr1atmrPi4XL2bd9//71NmzbN3n//fZs5c6a98sor1rFjx+xD6tata9dcc43ddtttceGiTkRABEQgUgISgJGS0nEiIAIpQ+Ccc86x448/3rlYvRbIBZxXAYhgo9/PP//cTjvttIjn26FDBzvmmGNcMkmwRowg1si3337bHbJ7927DTYw4bNOmTcTX0oEiIAIiEA8CEoDxoKg+REAEkkoASxtWvNdee83F8pUvX96JNt9C0F4WcF4sgEyCrOA5c+bYI4884pI4Nm3aZBR5rl+/vssiDtQQomQXk/FL27Vrl91+++120UUX2dFHH+1iCnE1k3DiuXsRrOeff76LRyxVqlRS+eliIiACIiABqDUgAiJQ4AhgqUNQUWoFsRWqDExeBeDevXvtwQcfdJnBa9assQoVKljz5s3tvvvucyIwUGP3EdzA33zzjbMgUkqG8SEkEXgVK1Z0MYQjR47MrhPYs2dPVx6G5BM1ERABEUg2AQnAZBPX9URABNKSQP/+/V1dQWr9hWsbN260OnXqOIshFkI1ERABEUg2AQnAZBPX9URABNKSAOJv9OjRrhagfwKJ/4QXLFjgrJZe7cG0BKJJiYAIpDQBCcCUvj0anAiIgAiIgAiIgAjEn4AEYPyZqkcREAEREAEREAERSGkCEoApfXs0OBEQAREQAREQARGIPwEJwPgzVY8iIAIiIAIiIAIikNIEJABT+vZocCIgAiIgAiIgAiIQfwISgPFnqh5FQAREQAREQAREIKUJSACm9O3R4ERABERABERABEQg/gQkAOPPVD2KgAiIgAiIgAiIQEoTkABM6dujwYmACIiACIiACIhA/AlIAMafqXoUAREQAREQAREQgZQm8P8LymAQRnHq8AAAAABJRU5ErkJggg==\" width=\"640\">" + ], + "text/plain": [ + "<IPython.core.display.HTML object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "pl.plot(t-45,h.data,'.',t_filt,hf2,'*',t_filt_dec,hf3,'^')\n", + "pl.xlabel('time (s)')\n", + "pl.ylabel('field (nT)')\n", + "pl.legend(['One Second Signal', 'One Minute Filter Applied', \n", + " 'One Minute Downsampled Filtered Data'])\n", + "pl.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "data": { + "application/javascript": [ + "/* Put everything inside the global mpl namespace */\n", + "window.mpl = {};\n", + "\n", + "\n", + "mpl.get_websocket_type = function() {\n", + " if (typeof(WebSocket) !== 'undefined') {\n", + " return WebSocket;\n", + " } else if (typeof(MozWebSocket) !== 'undefined') {\n", + " return MozWebSocket;\n", + " } else {\n", + " alert('Your browser does not have WebSocket support.' +\n", + " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", + " 'Firefox 4 and 5 are also supported but you ' +\n", + " 'have to enable WebSockets in about:config.');\n", + " };\n", + "}\n", + "\n", + "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", + " this.id = figure_id;\n", + "\n", + " this.ws = websocket;\n", + "\n", + " this.supports_binary = (this.ws.binaryType != undefined);\n", + "\n", + " if (!this.supports_binary) {\n", + " var warnings = document.getElementById(\"mpl-warnings\");\n", + " if (warnings) {\n", + " warnings.style.display = 'block';\n", + " warnings.textContent = (\n", + " \"This browser does not support binary websocket messages. \" +\n", + " \"Performance may be slow.\");\n", + " }\n", + " }\n", + "\n", + " this.imageObj = new Image();\n", + "\n", + " this.context = undefined;\n", + " this.message = undefined;\n", + " this.canvas = undefined;\n", + " this.rubberband_canvas = undefined;\n", + " this.rubberband_context = undefined;\n", + " this.format_dropdown = undefined;\n", + "\n", + " this.image_mode = 'full';\n", + "\n", + " this.root = $('<div/>');\n", + " this._root_extra_style(this.root)\n", + " this.root.attr('style', 'display: inline-block');\n", + "\n", + " $(parent_element).append(this.root);\n", + "\n", + " this._init_header(this);\n", + " this._init_canvas(this);\n", + " this._init_toolbar(this);\n", + "\n", + " var fig = this;\n", + "\n", + " this.waiting = false;\n", + "\n", + " this.ws.onopen = function () {\n", + " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", + " fig.send_message(\"send_image_mode\", {});\n", + " if (mpl.ratio != 1) {\n", + " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", + " }\n", + " fig.send_message(\"refresh\", {});\n", + " }\n", + "\n", + " this.imageObj.onload = function() {\n", + " if (fig.image_mode == 'full') {\n", + " // Full images could contain transparency (where diff images\n", + " // almost always do), so we need to clear the canvas so that\n", + " // there is no ghosting.\n", + " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", + " }\n", + " fig.context.drawImage(fig.imageObj, 0, 0);\n", + " };\n", + "\n", + " this.imageObj.onunload = function() {\n", + " fig.ws.close();\n", + " }\n", + "\n", + " this.ws.onmessage = this._make_on_message_function(this);\n", + "\n", + " this.ondownload = ondownload;\n", + "}\n", + "\n", + "mpl.figure.prototype._init_header = function() {\n", + " var titlebar = $(\n", + " '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n", + " 'ui-helper-clearfix\"/>');\n", + " var titletext = $(\n", + " '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n", + " 'text-align: center; padding: 3px;\"/>');\n", + " titlebar.append(titletext)\n", + " this.root.append(titlebar);\n", + " this.header = titletext[0];\n", + "}\n", + "\n", + "\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._init_canvas = function() {\n", + " var fig = this;\n", + "\n", + " var canvas_div = $('<div/>');\n", + "\n", + " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", + "\n", + " function canvas_keyboard_event(event) {\n", + " return fig.key_event(event, event['data']);\n", + " }\n", + "\n", + " canvas_div.keydown('key_press', canvas_keyboard_event);\n", + " canvas_div.keyup('key_release', canvas_keyboard_event);\n", + " this.canvas_div = canvas_div\n", + " this._canvas_extra_style(canvas_div)\n", + " this.root.append(canvas_div);\n", + "\n", + " var canvas = $('<canvas/>');\n", + " canvas.addClass('mpl-canvas');\n", + " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", + "\n", + " this.canvas = canvas[0];\n", + " this.context = canvas[0].getContext(\"2d\");\n", + "\n", + " var backingStore = this.context.backingStorePixelRatio ||\n", + "\tthis.context.webkitBackingStorePixelRatio ||\n", + "\tthis.context.mozBackingStorePixelRatio ||\n", + "\tthis.context.msBackingStorePixelRatio ||\n", + "\tthis.context.oBackingStorePixelRatio ||\n", + "\tthis.context.backingStorePixelRatio || 1;\n", + "\n", + " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", + "\n", + " var rubberband = $('<canvas/>');\n", + " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", + "\n", + " var pass_mouse_events = true;\n", + "\n", + " canvas_div.resizable({\n", + " start: function(event, ui) {\n", + " pass_mouse_events = false;\n", + " },\n", + " resize: function(event, ui) {\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " stop: function(event, ui) {\n", + " pass_mouse_events = true;\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " });\n", + "\n", + " function mouse_event_fn(event) {\n", + " if (pass_mouse_events)\n", + " return fig.mouse_event(event, event['data']);\n", + " }\n", + "\n", + " rubberband.mousedown('button_press', mouse_event_fn);\n", + " rubberband.mouseup('button_release', mouse_event_fn);\n", + " // Throttle sequential mouse events to 1 every 20ms.\n", + " rubberband.mousemove('motion_notify', mouse_event_fn);\n", + "\n", + " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", + " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", + "\n", + " canvas_div.on(\"wheel\", function (event) {\n", + " event = event.originalEvent;\n", + " event['data'] = 'scroll'\n", + " if (event.deltaY < 0) {\n", + " event.step = 1;\n", + " } else {\n", + " event.step = -1;\n", + " }\n", + " mouse_event_fn(event);\n", + " });\n", + "\n", + " canvas_div.append(canvas);\n", + " canvas_div.append(rubberband);\n", + "\n", + " this.rubberband = rubberband;\n", + " this.rubberband_canvas = rubberband[0];\n", + " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", + " this.rubberband_context.strokeStyle = \"#000000\";\n", + "\n", + " this._resize_canvas = function(width, height) {\n", + " // Keep the size of the canvas, canvas container, and rubber band\n", + " // canvas in synch.\n", + " canvas_div.css('width', width)\n", + " canvas_div.css('height', height)\n", + "\n", + " canvas.attr('width', width * mpl.ratio);\n", + " canvas.attr('height', height * mpl.ratio);\n", + " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", + "\n", + " rubberband.attr('width', width);\n", + " rubberband.attr('height', height);\n", + " }\n", + "\n", + " // Set the figure to an initial 600x600px, this will subsequently be updated\n", + " // upon first draw.\n", + " this._resize_canvas(600, 600);\n", + "\n", + " // Disable right mouse context menu.\n", + " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", + " return false;\n", + " });\n", + "\n", + " function set_focus () {\n", + " canvas.focus();\n", + " canvas_div.focus();\n", + " }\n", + "\n", + " window.setTimeout(set_focus, 100);\n", + "}\n", + "\n", + "mpl.figure.prototype._init_toolbar = function() {\n", + " var fig = this;\n", + "\n", + " var nav_element = $('<div/>')\n", + " nav_element.attr('style', 'width: 100%');\n", + " this.root.append(nav_element);\n", + "\n", + " // Define a callback function for later on.\n", + " function toolbar_event(event) {\n", + " return fig.toolbar_button_onclick(event['data']);\n", + " }\n", + " function toolbar_mouse_event(event) {\n", + " return fig.toolbar_button_onmouseover(event['data']);\n", + " }\n", + "\n", + " for(var toolbar_ind in mpl.toolbar_items) {\n", + " var name = mpl.toolbar_items[toolbar_ind][0];\n", + " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", + " var image = mpl.toolbar_items[toolbar_ind][2];\n", + " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", + "\n", + " if (!name) {\n", + " // put a spacer in here.\n", + " continue;\n", + " }\n", + " var button = $('<button/>');\n", + " button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n", + " 'ui-button-icon-only');\n", + " button.attr('role', 'button');\n", + " button.attr('aria-disabled', 'false');\n", + " button.click(method_name, toolbar_event);\n", + " button.mouseover(tooltip, toolbar_mouse_event);\n", + "\n", + " var icon_img = $('<span/>');\n", + " icon_img.addClass('ui-button-icon-primary ui-icon');\n", + " icon_img.addClass(image);\n", + " icon_img.addClass('ui-corner-all');\n", + "\n", + " var tooltip_span = $('<span/>');\n", + " tooltip_span.addClass('ui-button-text');\n", + " tooltip_span.html(tooltip);\n", + "\n", + " button.append(icon_img);\n", + " button.append(tooltip_span);\n", + "\n", + " nav_element.append(button);\n", + " }\n", + "\n", + " var fmt_picker_span = $('<span/>');\n", + "\n", + " var fmt_picker = $('<select/>');\n", + " fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n", + " fmt_picker_span.append(fmt_picker);\n", + " nav_element.append(fmt_picker_span);\n", + " this.format_dropdown = fmt_picker[0];\n", + "\n", + " for (var ind in mpl.extensions) {\n", + " var fmt = mpl.extensions[ind];\n", + " var option = $(\n", + " '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n", + " fmt_picker.append(option)\n", + " }\n", + "\n", + " // Add hover states to the ui-buttons\n", + " $( \".ui-button\" ).hover(\n", + " function() { $(this).addClass(\"ui-state-hover\");},\n", + " function() { $(this).removeClass(\"ui-state-hover\");}\n", + " );\n", + "\n", + " var status_bar = $('<span class=\"mpl-message\"/>');\n", + " nav_element.append(status_bar);\n", + " this.message = status_bar[0];\n", + "}\n", + "\n", + "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n", + " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", + " // which will in turn request a refresh of the image.\n", + " this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n", + "}\n", + "\n", + "mpl.figure.prototype.send_message = function(type, properties) {\n", + " properties['type'] = type;\n", + " properties['figure_id'] = this.id;\n", + " this.ws.send(JSON.stringify(properties));\n", + "}\n", + "\n", + "mpl.figure.prototype.send_draw_message = function() {\n", + " if (!this.waiting) {\n", + " this.waiting = true;\n", + " this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n", + " }\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype.handle_save = function(fig, msg) {\n", + " var format_dropdown = fig.format_dropdown;\n", + " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", + " fig.ondownload(fig, format);\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype.handle_resize = function(fig, msg) {\n", + " var size = msg['size'];\n", + " if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n", + " fig._resize_canvas(size[0], size[1]);\n", + " fig.send_message(\"refresh\", {});\n", + " };\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n", + " var x0 = msg['x0'] / mpl.ratio;\n", + " var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n", + " var x1 = msg['x1'] / mpl.ratio;\n", + " var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n", + " x0 = Math.floor(x0) + 0.5;\n", + " y0 = Math.floor(y0) + 0.5;\n", + " x1 = Math.floor(x1) + 0.5;\n", + " y1 = Math.floor(y1) + 0.5;\n", + " var min_x = Math.min(x0, x1);\n", + " var min_y = Math.min(y0, y1);\n", + " var width = Math.abs(x1 - x0);\n", + " var height = Math.abs(y1 - y0);\n", + "\n", + " fig.rubberband_context.clearRect(\n", + " 0, 0, fig.canvas.width, fig.canvas.height);\n", + "\n", + " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n", + " // Updates the figure title.\n", + " fig.header.textContent = msg['label'];\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n", + " var cursor = msg['cursor'];\n", + " switch(cursor)\n", + " {\n", + " case 0:\n", + " cursor = 'pointer';\n", + " break;\n", + " case 1:\n", + " cursor = 'default';\n", + " break;\n", + " case 2:\n", + " cursor = 'crosshair';\n", + " break;\n", + " case 3:\n", + " cursor = 'move';\n", + " break;\n", + " }\n", + " fig.rubberband_canvas.style.cursor = cursor;\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_message = function(fig, msg) {\n", + " fig.message.textContent = msg['message'];\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_draw = function(fig, msg) {\n", + " // Request the server to send over a new figure.\n", + " fig.send_draw_message();\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n", + " fig.image_mode = msg['mode'];\n", + "}\n", + "\n", + "mpl.figure.prototype.updated_canvas_event = function() {\n", + " // Called whenever the canvas gets updated.\n", + " this.send_message(\"ack\", {});\n", + "}\n", + "\n", + "// A function to construct a web socket function for onmessage handling.\n", + "// Called in the figure constructor.\n", + "mpl.figure.prototype._make_on_message_function = function(fig) {\n", + " return function socket_on_message(evt) {\n", + " if (evt.data instanceof Blob) {\n", + " /* FIXME: We get \"Resource interpreted as Image but\n", + " * transferred with MIME type text/plain:\" errors on\n", + " * Chrome. But how to set the MIME type? It doesn't seem\n", + " * to be part of the websocket stream */\n", + " evt.data.type = \"image/png\";\n", + "\n", + " /* Free the memory for the previous frames */\n", + " if (fig.imageObj.src) {\n", + " (window.URL || window.webkitURL).revokeObjectURL(\n", + " fig.imageObj.src);\n", + " }\n", + "\n", + " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", + " evt.data);\n", + " fig.updated_canvas_event();\n", + " fig.waiting = false;\n", + " return;\n", + " }\n", + " else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n", + " fig.imageObj.src = evt.data;\n", + " fig.updated_canvas_event();\n", + " fig.waiting = false;\n", + " return;\n", + " }\n", + "\n", + " var msg = JSON.parse(evt.data);\n", + " var msg_type = msg['type'];\n", + "\n", + " // Call the \"handle_{type}\" callback, which takes\n", + " // the figure and JSON message as its only arguments.\n", + " try {\n", + " var callback = fig[\"handle_\" + msg_type];\n", + " } catch (e) {\n", + " console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n", + " return;\n", + " }\n", + "\n", + " if (callback) {\n", + " try {\n", + " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", + " callback(fig, msg);\n", + " } catch (e) {\n", + " console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n", + " }\n", + " }\n", + " };\n", + "}\n", + "\n", + "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", + "mpl.findpos = function(e) {\n", + " //this section is from http://www.quirksmode.org/js/events_properties.html\n", + " var targ;\n", + " if (!e)\n", + " e = window.event;\n", + " if (e.target)\n", + " targ = e.target;\n", + " else if (e.srcElement)\n", + " targ = e.srcElement;\n", + " if (targ.nodeType == 3) // defeat Safari bug\n", + " targ = targ.parentNode;\n", + "\n", + " // jQuery normalizes the pageX and pageY\n", + " // pageX,Y are the mouse positions relative to the document\n", + " // offset() returns the position of the element relative to the document\n", + " var x = e.pageX - $(targ).offset().left;\n", + " var y = e.pageY - $(targ).offset().top;\n", + "\n", + " return {\"x\": x, \"y\": y};\n", + "};\n", + "\n", + "/*\n", + " * return a copy of an object with only non-object keys\n", + " * we need this to avoid circular references\n", + " * http://stackoverflow.com/a/24161582/3208463\n", + " */\n", + "function simpleKeys (original) {\n", + " return Object.keys(original).reduce(function (obj, key) {\n", + " if (typeof original[key] !== 'object')\n", + " obj[key] = original[key]\n", + " return obj;\n", + " }, {});\n", + "}\n", + "\n", + "mpl.figure.prototype.mouse_event = function(event, name) {\n", + " var canvas_pos = mpl.findpos(event)\n", + "\n", + " if (name === 'button_press')\n", + " {\n", + " this.canvas.focus();\n", + " this.canvas_div.focus();\n", + " }\n", + "\n", + " var x = canvas_pos.x * mpl.ratio;\n", + " var y = canvas_pos.y * mpl.ratio;\n", + "\n", + " this.send_message(name, {x: x, y: y, button: event.button,\n", + " step: event.step,\n", + " guiEvent: simpleKeys(event)});\n", + "\n", + " /* This prevents the web browser from automatically changing to\n", + " * the text insertion cursor when the button is pressed. We want\n", + " * to control all of the cursor setting manually through the\n", + " * 'cursor' event from matplotlib */\n", + " event.preventDefault();\n", + " return false;\n", + "}\n", + "\n", + "mpl.figure.prototype._key_event_extra = function(event, name) {\n", + " // Handle any extra behaviour associated with a key event\n", + "}\n", + "\n", + "mpl.figure.prototype.key_event = function(event, name) {\n", + "\n", + " // Prevent repeat events\n", + " if (name == 'key_press')\n", + " {\n", + " if (event.which === this._key)\n", + " return;\n", + " else\n", + " this._key = event.which;\n", + " }\n", + " if (name == 'key_release')\n", + " this._key = null;\n", + "\n", + " var value = '';\n", + " if (event.ctrlKey && event.which != 17)\n", + " value += \"ctrl+\";\n", + " if (event.altKey && event.which != 18)\n", + " value += \"alt+\";\n", + " if (event.shiftKey && event.which != 16)\n", + " value += \"shift+\";\n", + "\n", + " value += 'k';\n", + " value += event.which.toString();\n", + "\n", + " this._key_event_extra(event, name);\n", + "\n", + " this.send_message(name, {key: value,\n", + " guiEvent: simpleKeys(event)});\n", + " return false;\n", + "}\n", + "\n", + "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n", + " if (name == 'download') {\n", + " this.handle_save(this, null);\n", + " } else {\n", + " this.send_message(\"toolbar_button\", {name: name});\n", + " }\n", + "};\n", + "\n", + "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n", + " this.message.textContent = tooltip;\n", + "};\n", + "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", + "\n", + "mpl.extensions = [\"eps\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\"];\n", + "\n", + "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n", + " // Create a \"websocket\"-like object which calls the given IPython comm\n", + " // object with the appropriate methods. Currently this is a non binary\n", + " // socket, so there is still some room for performance tuning.\n", + " var ws = {};\n", + "\n", + " ws.close = function() {\n", + " comm.close()\n", + " };\n", + " ws.send = function(m) {\n", + " //console.log('sending', m);\n", + " comm.send(m);\n", + " };\n", + " // Register the callback with on_msg.\n", + " comm.on_msg(function(msg) {\n", + " //console.log('receiving', msg['content']['data'], msg);\n", + " // Pass the mpl event to the overridden (by mpl) onmessage function.\n", + " ws.onmessage(msg['content']['data'])\n", + " });\n", + " return ws;\n", + "}\n", + "\n", + "mpl.mpl_figure_comm = function(comm, msg) {\n", + " // This is the function which gets called when the mpl process\n", + " // starts-up an IPython Comm through the \"matplotlib\" channel.\n", + "\n", + " var id = msg.content.data.id;\n", + " // Get hold of the div created by the display call when the Comm\n", + " // socket was opened in Python.\n", + " var element = $(\"#\" + id);\n", + " var ws_proxy = comm_websocket_adapter(comm)\n", + "\n", + " function ondownload(figure, format) {\n", + " window.open(figure.imageObj.src);\n", + " }\n", + "\n", + " var fig = new mpl.figure(id, ws_proxy,\n", + " ondownload,\n", + " element.get(0));\n", + "\n", + " // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n", + " // web socket which is closed, not our websocket->open comm proxy.\n", + " ws_proxy.onopen();\n", + "\n", + " fig.parent_element = element.get(0);\n", + " fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n", + " if (!fig.cell_info) {\n", + " console.error(\"Failed to find cell for figure\", id, fig);\n", + " return;\n", + " }\n", + "\n", + " var output_index = fig.cell_info[2]\n", + " var cell = fig.cell_info[0];\n", + "\n", + "};\n", + "\n", + "mpl.figure.prototype.handle_close = function(fig, msg) {\n", + " var width = fig.canvas.width/mpl.ratio\n", + " fig.root.unbind('remove')\n", + "\n", + " // Update the output cell to use the data from the current canvas.\n", + " fig.push_to_output();\n", + " var dataURL = fig.canvas.toDataURL();\n", + " // Re-enable the keyboard manager in IPython - without this line, in FF,\n", + " // the notebook keyboard shortcuts fail.\n", + " IPython.keyboard_manager.enable()\n", + " $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n", + " fig.close_ws(fig, msg);\n", + "}\n", + "\n", + "mpl.figure.prototype.close_ws = function(fig, msg){\n", + " fig.send_message('closing', msg);\n", + " // fig.ws.close()\n", + "}\n", + "\n", + "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n", + " // Turn the data on the canvas into data in the output cell.\n", + " var width = this.canvas.width/mpl.ratio\n", + " var dataURL = this.canvas.toDataURL();\n", + " this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n", + "}\n", + "\n", + "mpl.figure.prototype.updated_canvas_event = function() {\n", + " // Tell IPython that the notebook contents must change.\n", + " IPython.notebook.set_dirty(true);\n", + " this.send_message(\"ack\", {});\n", + " var fig = this;\n", + " // Wait a second, then push the new image to the DOM so\n", + " // that it is saved nicely (might be nice to debounce this).\n", + " setTimeout(function () { fig.push_to_output() }, 1000);\n", + "}\n", + "\n", + "mpl.figure.prototype._init_toolbar = function() {\n", + " var fig = this;\n", + "\n", + " var nav_element = $('<div/>')\n", + " nav_element.attr('style', 'width: 100%');\n", + " this.root.append(nav_element);\n", + "\n", + " // Define a callback function for later on.\n", + " function toolbar_event(event) {\n", + " return fig.toolbar_button_onclick(event['data']);\n", + " }\n", + " function toolbar_mouse_event(event) {\n", + " return fig.toolbar_button_onmouseover(event['data']);\n", + " }\n", + "\n", + " for(var toolbar_ind in mpl.toolbar_items){\n", + " var name = mpl.toolbar_items[toolbar_ind][0];\n", + " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", + " var image = mpl.toolbar_items[toolbar_ind][2];\n", + " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", + "\n", + " if (!name) { continue; };\n", + "\n", + " var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n", + " button.click(method_name, toolbar_event);\n", + " button.mouseover(tooltip, toolbar_mouse_event);\n", + " nav_element.append(button);\n", + " }\n", + "\n", + " // Add the status bar.\n", + " var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n", + " nav_element.append(status_bar);\n", + " this.message = status_bar[0];\n", + "\n", + " // Add the close button to the window.\n", + " var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n", + " var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n", + " button.click(function (evt) { fig.handle_close(fig, {}); } );\n", + " button.mouseover('Stop Interaction', toolbar_mouse_event);\n", + " buttongrp.append(button);\n", + " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", + " titlebar.prepend(buttongrp);\n", + "}\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(el){\n", + " var fig = this\n", + " el.on(\"remove\", function(){\n", + "\tfig.close_ws(fig, {});\n", + " });\n", + "}\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(el){\n", + " // this is important to make the div 'focusable\n", + " el.attr('tabindex', 0)\n", + " // reach out to IPython and tell the keyboard manager to turn it's self\n", + " // off when our div gets focus\n", + "\n", + " // location in version 3\n", + " if (IPython.notebook.keyboard_manager) {\n", + " IPython.notebook.keyboard_manager.register_events(el);\n", + " }\n", + " else {\n", + " // location in version 2\n", + " IPython.keyboard_manager.register_events(el);\n", + " }\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._key_event_extra = function(event, name) {\n", + " var manager = IPython.notebook.keyboard_manager;\n", + " if (!manager)\n", + " manager = IPython.keyboard_manager;\n", + "\n", + " // Check for shift+enter\n", + " if (event.shiftKey && event.which == 13) {\n", + " this.canvas_div.blur();\n", + " event.shiftKey = false;\n", + " // Send a \"J\" for go to next cell\n", + " event.which = 74;\n", + " event.keyCode = 74;\n", + " manager.command_mode();\n", + " manager.handle_keydown(event);\n", + " }\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_save = function(fig, msg) {\n", + " fig.ondownload(fig, null);\n", + "}\n", + "\n", + "\n", + "mpl.find_output_cell = function(html_output) {\n", + " // Return the cell and output element which can be found *uniquely* in the notebook.\n", + " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", + " // IPython event is triggered only after the cells have been serialised, which for\n", + " // our purposes (turning an active figure into a static one), is too late.\n", + " var cells = IPython.notebook.get_cells();\n", + " var ncells = cells.length;\n", + " for (var i=0; i<ncells; i++) {\n", + " var cell = cells[i];\n", + " if (cell.cell_type === 'code'){\n", + " for (var j=0; j<cell.output_area.outputs.length; j++) {\n", + " var data = cell.output_area.outputs[j];\n", + " if (data.data) {\n", + " // IPython >= 3 moved mimebundle to data attribute of output\n", + " data = data.data;\n", + " }\n", + " if (data['text/html'] == html_output) {\n", + " return [cell, data, j];\n", + " }\n", + " }\n", + " }\n", + " }\n", + "}\n", + "\n", + "// Register the function which deals with the matplotlib target/channel.\n", + "// The kernel may be null if the page has been refreshed.\n", + "if (IPython.notebook.kernel != null) {\n", + " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", + "}\n" + ], + "text/plain": [ + "<IPython.core.display.Javascript object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAgAElEQVR4Xuy9CZRV1Zn3/b9VgkZEBY1BCKD4GiNDTCBLBMSQRszwggLmExPbgWgSjZ8yZNA4gqB0awI4RBxIhPg2kdagrcQkDmkccOqPRF+g1HTEGSuJgrRDAljUt/apulW3zj3Ds4cz3fu/a2XRbe29z96/5zn7+Z89llpbW1vBHwmQAAmQAAmQAAmQQN0QKFEA1o2t2VASIAESIAESIAES8AhQANIRSIAESIAESIAESKDOCFAA1pnB2VwSIAESIAESIAESoACkD5AACZAACZAACZBAnRGgAKwzg7O5JEACJEACJEACJEABSB8gARIgARIgARIggTojQAFYZwZnc0mABEiABEiABEiAApA+QAIkQAIkQAIkQAJ1RoACsM4MzuaSAAmQAAmQAAmQAAUgfYAESIAESIAESIAE6owABWCdGZzNJQESIAESIAESIAEKQPoACZAACZAACZAACdQZAQrAOjM4m0sCJEACJEACJEACFID0ARIgARIgARIgARKoMwIUgHVmcDaXBEiABEiABEiABCgA6QMkQAIkQAIkQAIkUGcEKADrzOBsLgmQAAmQAAmQAAlQANIHSIAESIAESIAESKDOCFAA1pnB2VwSIAESIAESIAESoACkD5AACZAACZAACZBAnRGgAKwzg7O5JEACJEACJEACJEABSB8gARIgARIgARIggTojQAFYZwZnc0mABEiABEiABEiAApA+QAIkQAIkQAIkQAJ1RoACsM4MzuaSAAmQAAmQAAmQAAUgfYAESIAESIAESIAE6owABWCdGZzNJQESIAESIAESIAEKQPoACZAACZAACZAACdQZAQrAOjM4m0sCJEACJEACJEACFID0ARIgARIgARIgARKoMwIUgHVmcDaXBEiABEiABEiABCgA6QMkQAIkQAIkQAIkUGcEKADrzOBsLgmQAAmQAAmQAAlQANIHSIAESIAESIAESKDOCFAA1pnB2VwSIAESIAESIAESoACkD5AACZAACZAACZBAnRGgAKwzg7O5JEACJEACJEACJEABSB8gARIgARIgARIggTojQAFYZwZnc0mABEiABEiABEiAApA+QAIkQAIkQAIkQAJ1RoACsM4MzuaSAAmQAAmQAAmQAAUgfYAESIAESIAESIAE6owABWCdGZzNJQESIAESIAESIAEKQPoACZAACZAACZAACdQZAQrAOjM4m0sCJEACJEACJEACFID0ARIgARIgARIgARKoMwIUgHVmcDaXBEiABEiABEiABCgA6QMkQAIkQAIkQAIkUGcEKADrzOBsLgmQAAmQAAmQAAlQANIHSIAESIAESIAESKDOCFAA1pnB2VwSIAESIAESIAESoACkD5AACZAACZAACZBAnRGgAKwzg7O5JEACJEACJEACJEABSB8gARIgARIgARIggTojQAFYZwZnc0mABEiABEiABEiAApA+QAIkQAIkQAIkQAJ1RoAC0MLgu3btwubNm9GzZ0+USiWLkpiVBEiABEiABEggLQKtra1477330LdvXzQ0NKT12Fw9hwLQwhxvvPEG+vfvb1ECs5IACZAACZAACWRF4PXXX8cnP/nJrB6f6XMpAC3wb9u2Dfvuuy+UA+29994WJTErCZAACZAACZBAWgT+53/+xxvAeffdd7HPPvuk9dhcPYcC0MIcyoGU4yghSAFoAZJZSYAESIAESCBFAozfAAWghcPRgSzgMSsJkAAJkAAJZESA8ZsC0Mr16EBW+JiZBEiABEiABDIhwPhNAWjleHQgK3zMTAIkQAIkQAKZEGD8pgC0cjw6kBU+ZiYBEiABEiCBTAgwflMAWjkeHcgKHzOTAAmQAAmQQCYEGL8pAK0cjw5khY+ZSYAESIAESCATAozfFIBWjkcHssLHzCRAAiRAAiSQCQHGbwpAK8ejA1nhY2YSIAESIAESyIQA4zcFoJXj0YGs8DEzCZAACZAACWRCgPGbAtDK8ehAVviYmQRIgARIgAQyIcD4TQFo5XipOdC2N4EtLwG9DwH26WdVZ2YmARIgARIggXonkFr8zjFoXgVnYZxUHOgPvwDumwG07gJKDcCka4Hhp1nUmllJgARIgARIoL4JpBK/c46YAtDCQIk7kBr5Wzy0TfyVf6VGYOZ6jgRa2I1ZSYAESIAE6ptA4vG7AHgpAC2MlLgDvfwosHxSdQ1PXw0cPNai5sxKAiRAAiRAAvVLIPH4XQC0FIAWRkrcgd5YByz9p+oanvV74JMjLGrOrCRAAiRAAiRQvwQSj98FQEsBaGGkxB0obARw9PnAcfMsas6sJEACJEACJFC/BBKP3wVASwFoYaTEHUitAVw0BEBr11qqzSAzN3AdoIXtmJUESIAESKB+CSQevwuAlgLQwkipONADlwBPXF9dS64DtLAcs5IACZAACdQzgVTid84BF0IAPvroo7jmmmuwbt06vPXWW7j77rsxefLkSLSPPPIIZs+ejY0bN6Jv37744Q9/iLPPPrtLnhtvvNErV5U5ZMgQLF68GGPHyjdXpOJA3Amc81eI1SMBEiABEigagVTid86hFEIA/uY3v8HatWsxfPhwnHjiibEC8OWXX8bQoUPxrW99C9/5zne8vN/97nfxy1/+0suvfitXrsSpp54KJQLHjBmDm2++GUuXLkVTUxMGDBggMlsqDqQE4NNLgCd/2n4WYCMwaTHPAhRZiIlIgARIgARIoJpAKvE75+ALIQArGZZKpVgBeMEFF+Dee+/F888/35FVjf4999xzePLJJ73/NnLkSE9QLlmypCPN4Ycf7o0sLliwQGS2xB2o8hBolIDR5wEjz+baP5F1mIgESIAESIAEggkkHr8LAL4mBeAxxxyDz33uc7j22ms7TKCmjU866SR8+OGHaG1txZ577ok777wTU6ZM6UgzY8YMPPvss1DTx5Jfog7EqV+JCZiGBEiABEiABLQJJBq/tWuTTYaaFICf+tSncMYZZ+Ciiy7qoPrEE094U72bN2/2BGC/fv28qeHRo0d3pLnqqquwfPlyvPjii4HW2L59O9T/yj/lQP3798e2bduw9957u7Vg2BEwX1sGDO0UrW4fytJIgARIgARIoPYJUAACNSsAp0+fjh/96EcdXqzE3tFHH+1t+Ni1a5cnAJUoHDVqVEeaK6+8ErfffjteeOGFQO+fM2cO5s6dW/W3RARg0AigejLvA679noktJAESIAESSJQABWCNCsCkpoBTHQFUrq/WAN47A0DFXcCeCOR9wIn2DCycBEiABEigpglQANaoAFSbQO677z5vR2/5d84553jr+yo3gYwYMcLbBVz+DR48GCeccEJ+NoGoim1YBdw1vfpF5DmANd05sXEkQAIkQALJEaAALIgAfP/99/HnP//Z8wS1uWPhwoX44he/iN69e3tHtqip3jfffBO/+MUvvDTlY2DUETDqKBgl+tQu4KBjYG666SZvGviWW27Brbfe6p0bOHDgQJHXpeJA3AwisgUTkQAJkAAJkICUQCrxW1qZjNIVYg3gmjVrPMHn/51++ulYtmyZt+HjlVdegUpX/qmdvLNm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\" width=\"640\">" + ], + "text/plain": [ + "<IPython.core.display.HTML object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "[<matplotlib.lines.Line2D at 0x1c2890d278>,\n", + " <matplotlib.lines.Line2D at 0x1c2890d3c8>]" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pl.plot(t_filt, hf2 - h.data[45:-45], '.C1', \n", + " t_filt_dec, hf3 - h.data[45:-45:60], '*C2')" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "data": { + "application/javascript": [ + "/* Put everything inside the global mpl namespace */\n", + "window.mpl = {};\n", + "\n", + "\n", + "mpl.get_websocket_type = function() {\n", + " if (typeof(WebSocket) !== 'undefined') {\n", + " return WebSocket;\n", + " } else if (typeof(MozWebSocket) !== 'undefined') {\n", + " return MozWebSocket;\n", + " } else {\n", + " alert('Your browser does not have WebSocket support.' +\n", + " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", + " 'Firefox 4 and 5 are also supported but you ' +\n", + " 'have to enable WebSockets in about:config.');\n", + " };\n", + "}\n", + "\n", + "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", + " this.id = figure_id;\n", + "\n", + " this.ws = websocket;\n", + "\n", + " this.supports_binary = (this.ws.binaryType != undefined);\n", + "\n", + " if (!this.supports_binary) {\n", + " var warnings = document.getElementById(\"mpl-warnings\");\n", + " if (warnings) {\n", + " warnings.style.display = 'block';\n", + " warnings.textContent = (\n", + " \"This browser does not support binary websocket messages. \" +\n", + " \"Performance may be slow.\");\n", + " }\n", + " }\n", + "\n", + " this.imageObj = new Image();\n", + "\n", + " this.context = undefined;\n", + " this.message = undefined;\n", + " this.canvas = undefined;\n", + " this.rubberband_canvas = undefined;\n", + " this.rubberband_context = undefined;\n", + " this.format_dropdown = undefined;\n", + "\n", + " this.image_mode = 'full';\n", + "\n", + " this.root = $('<div/>');\n", + " this._root_extra_style(this.root)\n", + " this.root.attr('style', 'display: inline-block');\n", + "\n", + " $(parent_element).append(this.root);\n", + "\n", + " this._init_header(this);\n", + " this._init_canvas(this);\n", + " this._init_toolbar(this);\n", + "\n", + " var fig = this;\n", + "\n", + " this.waiting = false;\n", + "\n", + " this.ws.onopen = function () {\n", + " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", + " fig.send_message(\"send_image_mode\", {});\n", + " if (mpl.ratio != 1) {\n", + " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", + " }\n", + " fig.send_message(\"refresh\", {});\n", + " }\n", + "\n", + " this.imageObj.onload = function() {\n", + " if (fig.image_mode == 'full') {\n", + " // Full images could contain transparency (where diff images\n", + " // almost always do), so we need to clear the canvas so that\n", + " // there is no ghosting.\n", + " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", + " }\n", + " fig.context.drawImage(fig.imageObj, 0, 0);\n", + " };\n", + "\n", + " this.imageObj.onunload = function() {\n", + " fig.ws.close();\n", + " }\n", + "\n", + " this.ws.onmessage = this._make_on_message_function(this);\n", + "\n", + " this.ondownload = ondownload;\n", + "}\n", + "\n", + "mpl.figure.prototype._init_header = function() {\n", + " var titlebar = $(\n", + " '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n", + " 'ui-helper-clearfix\"/>');\n", + " var titletext = $(\n", + " '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n", + " 'text-align: center; padding: 3px;\"/>');\n", + " titlebar.append(titletext)\n", + " this.root.append(titlebar);\n", + " this.header = titletext[0];\n", + "}\n", + "\n", + "\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._init_canvas = function() {\n", + " var fig = this;\n", + "\n", + " var canvas_div = $('<div/>');\n", + "\n", + " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", + "\n", + " function canvas_keyboard_event(event) {\n", + " return fig.key_event(event, event['data']);\n", + " }\n", + "\n", + " canvas_div.keydown('key_press', canvas_keyboard_event);\n", + " canvas_div.keyup('key_release', canvas_keyboard_event);\n", + " this.canvas_div = canvas_div\n", + " this._canvas_extra_style(canvas_div)\n", + " this.root.append(canvas_div);\n", + "\n", + " var canvas = $('<canvas/>');\n", + " canvas.addClass('mpl-canvas');\n", + " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", + "\n", + " this.canvas = canvas[0];\n", + " this.context = canvas[0].getContext(\"2d\");\n", + "\n", + " var backingStore = this.context.backingStorePixelRatio ||\n", + "\tthis.context.webkitBackingStorePixelRatio ||\n", + "\tthis.context.mozBackingStorePixelRatio ||\n", + "\tthis.context.msBackingStorePixelRatio ||\n", + "\tthis.context.oBackingStorePixelRatio ||\n", + "\tthis.context.backingStorePixelRatio || 1;\n", + "\n", + " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", + "\n", + " var rubberband = $('<canvas/>');\n", + " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", + "\n", + " var pass_mouse_events = true;\n", + "\n", + " canvas_div.resizable({\n", + " start: function(event, ui) {\n", + " pass_mouse_events = false;\n", + " },\n", + " resize: function(event, ui) {\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " stop: function(event, ui) {\n", + " pass_mouse_events = true;\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " });\n", + "\n", + " function mouse_event_fn(event) {\n", + " if (pass_mouse_events)\n", + " return fig.mouse_event(event, event['data']);\n", + " }\n", + "\n", + " rubberband.mousedown('button_press', mouse_event_fn);\n", + " rubberband.mouseup('button_release', mouse_event_fn);\n", + " // Throttle sequential mouse events to 1 every 20ms.\n", + " rubberband.mousemove('motion_notify', mouse_event_fn);\n", + "\n", + " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", + " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", + "\n", + " canvas_div.on(\"wheel\", function (event) {\n", + " event = event.originalEvent;\n", + " event['data'] = 'scroll'\n", + " if (event.deltaY < 0) {\n", + " event.step = 1;\n", + " } else {\n", + " event.step = -1;\n", + " }\n", + " mouse_event_fn(event);\n", + " });\n", + "\n", + " canvas_div.append(canvas);\n", + " canvas_div.append(rubberband);\n", + "\n", + " this.rubberband = rubberband;\n", + " this.rubberband_canvas = rubberband[0];\n", + " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", + " this.rubberband_context.strokeStyle = \"#000000\";\n", + "\n", + " this._resize_canvas = function(width, height) {\n", + " // Keep the size of the canvas, canvas container, and rubber band\n", + " // canvas in synch.\n", + " canvas_div.css('width', width)\n", + " canvas_div.css('height', height)\n", + "\n", + " canvas.attr('width', width * mpl.ratio);\n", + " canvas.attr('height', height * mpl.ratio);\n", + " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", + "\n", + " rubberband.attr('width', width);\n", + " rubberband.attr('height', height);\n", + " }\n", + "\n", + " // Set the figure to an initial 600x600px, this will subsequently be updated\n", + " // upon first draw.\n", + " this._resize_canvas(600, 600);\n", + "\n", + " // Disable right mouse context menu.\n", + " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", + " return false;\n", + " });\n", + "\n", + " function set_focus () {\n", + " canvas.focus();\n", + " canvas_div.focus();\n", + " }\n", + "\n", + " window.setTimeout(set_focus, 100);\n", + "}\n", + "\n", + "mpl.figure.prototype._init_toolbar = function() {\n", + " var fig = this;\n", + "\n", + " var nav_element = $('<div/>')\n", + " nav_element.attr('style', 'width: 100%');\n", + " this.root.append(nav_element);\n", + "\n", + " // Define a callback function for later on.\n", + " function toolbar_event(event) {\n", + " return fig.toolbar_button_onclick(event['data']);\n", + " }\n", + " function toolbar_mouse_event(event) {\n", + " return fig.toolbar_button_onmouseover(event['data']);\n", + " }\n", + "\n", + " for(var toolbar_ind in mpl.toolbar_items) {\n", + " var name = mpl.toolbar_items[toolbar_ind][0];\n", + " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", + " var image = mpl.toolbar_items[toolbar_ind][2];\n", + " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", + "\n", + " if (!name) {\n", + " // put a spacer in here.\n", + " continue;\n", + " }\n", + " var button = $('<button/>');\n", + " button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n", + " 'ui-button-icon-only');\n", + " button.attr('role', 'button');\n", + " button.attr('aria-disabled', 'false');\n", + " button.click(method_name, toolbar_event);\n", + " button.mouseover(tooltip, toolbar_mouse_event);\n", + "\n", + " var icon_img = $('<span/>');\n", + " icon_img.addClass('ui-button-icon-primary ui-icon');\n", + " icon_img.addClass(image);\n", + " icon_img.addClass('ui-corner-all');\n", + "\n", + " var tooltip_span = $('<span/>');\n", + " tooltip_span.addClass('ui-button-text');\n", + " tooltip_span.html(tooltip);\n", + "\n", + " button.append(icon_img);\n", + " button.append(tooltip_span);\n", + "\n", + " nav_element.append(button);\n", + " }\n", + "\n", + " var fmt_picker_span = $('<span/>');\n", + "\n", + " var fmt_picker = $('<select/>');\n", + " fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n", + " fmt_picker_span.append(fmt_picker);\n", + " nav_element.append(fmt_picker_span);\n", + " this.format_dropdown = fmt_picker[0];\n", + "\n", + " for (var ind in mpl.extensions) {\n", + " var fmt = mpl.extensions[ind];\n", + " var option = $(\n", + " '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n", + " fmt_picker.append(option)\n", + " }\n", + "\n", + " // Add hover states to the ui-buttons\n", + " $( \".ui-button\" ).hover(\n", + " function() { $(this).addClass(\"ui-state-hover\");},\n", + " function() { $(this).removeClass(\"ui-state-hover\");}\n", + " );\n", + "\n", + " var status_bar = $('<span class=\"mpl-message\"/>');\n", + " nav_element.append(status_bar);\n", + " this.message = status_bar[0];\n", + "}\n", + "\n", + "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n", + " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", + " // which will in turn request a refresh of the image.\n", + " this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n", + "}\n", + "\n", + "mpl.figure.prototype.send_message = function(type, properties) {\n", + " properties['type'] = type;\n", + " properties['figure_id'] = this.id;\n", + " this.ws.send(JSON.stringify(properties));\n", + "}\n", + "\n", + "mpl.figure.prototype.send_draw_message = function() {\n", + " if (!this.waiting) {\n", + " this.waiting = true;\n", + " this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n", + " }\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype.handle_save = function(fig, msg) {\n", + " var format_dropdown = fig.format_dropdown;\n", + " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", + " fig.ondownload(fig, format);\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype.handle_resize = function(fig, msg) {\n", + " var size = msg['size'];\n", + " if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n", + " fig._resize_canvas(size[0], size[1]);\n", + " fig.send_message(\"refresh\", {});\n", + " };\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n", + " var x0 = msg['x0'] / mpl.ratio;\n", + " var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n", + " var x1 = msg['x1'] / mpl.ratio;\n", + " var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n", + " x0 = Math.floor(x0) + 0.5;\n", + " y0 = Math.floor(y0) + 0.5;\n", + " x1 = Math.floor(x1) + 0.5;\n", + " y1 = Math.floor(y1) + 0.5;\n", + " var min_x = Math.min(x0, x1);\n", + " var min_y = Math.min(y0, y1);\n", + " var width = Math.abs(x1 - x0);\n", + " var height = Math.abs(y1 - y0);\n", + "\n", + " fig.rubberband_context.clearRect(\n", + " 0, 0, fig.canvas.width, fig.canvas.height);\n", + "\n", + " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n", + " // Updates the figure title.\n", + " fig.header.textContent = msg['label'];\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n", + " var cursor = msg['cursor'];\n", + " switch(cursor)\n", + " {\n", + " case 0:\n", + " cursor = 'pointer';\n", + " break;\n", + " case 1:\n", + " cursor = 'default';\n", + " break;\n", + " case 2:\n", + " cursor = 'crosshair';\n", + " break;\n", + " case 3:\n", + " cursor = 'move';\n", + " break;\n", + " }\n", + " fig.rubberband_canvas.style.cursor = cursor;\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_message = function(fig, msg) {\n", + " fig.message.textContent = msg['message'];\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_draw = function(fig, msg) {\n", + " // Request the server to send over a new figure.\n", + " fig.send_draw_message();\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n", + " fig.image_mode = msg['mode'];\n", + "}\n", + "\n", + "mpl.figure.prototype.updated_canvas_event = function() {\n", + " // Called whenever the canvas gets updated.\n", + " this.send_message(\"ack\", {});\n", + "}\n", + "\n", + "// A function to construct a web socket function for onmessage handling.\n", + "// Called in the figure constructor.\n", + "mpl.figure.prototype._make_on_message_function = function(fig) {\n", + " return function socket_on_message(evt) {\n", + " if (evt.data instanceof Blob) {\n", + " /* FIXME: We get \"Resource interpreted as Image but\n", + " * transferred with MIME type text/plain:\" errors on\n", + " * Chrome. But how to set the MIME type? It doesn't seem\n", + " * to be part of the websocket stream */\n", + " evt.data.type = \"image/png\";\n", + "\n", + " /* Free the memory for the previous frames */\n", + " if (fig.imageObj.src) {\n", + " (window.URL || window.webkitURL).revokeObjectURL(\n", + " fig.imageObj.src);\n", + " }\n", + "\n", + " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", + " evt.data);\n", + " fig.updated_canvas_event();\n", + " fig.waiting = false;\n", + " return;\n", + " }\n", + " else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n", + " fig.imageObj.src = evt.data;\n", + " fig.updated_canvas_event();\n", + " fig.waiting = false;\n", + " return;\n", + " }\n", + "\n", + " var msg = JSON.parse(evt.data);\n", + " var msg_type = msg['type'];\n", + "\n", + " // Call the \"handle_{type}\" callback, which takes\n", + " // the figure and JSON message as its only arguments.\n", + " try {\n", + " var callback = fig[\"handle_\" + msg_type];\n", + " } catch (e) {\n", + " console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n", + " return;\n", + " }\n", + "\n", + " if (callback) {\n", + " try {\n", + " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", + " callback(fig, msg);\n", + " } catch (e) {\n", + " console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n", + " }\n", + " }\n", + " };\n", + "}\n", + "\n", + "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", + "mpl.findpos = function(e) {\n", + " //this section is from http://www.quirksmode.org/js/events_properties.html\n", + " var targ;\n", + " if (!e)\n", + " e = window.event;\n", + " if (e.target)\n", + " targ = e.target;\n", + " else if (e.srcElement)\n", + " targ = e.srcElement;\n", + " if (targ.nodeType == 3) // defeat Safari bug\n", + " targ = targ.parentNode;\n", + "\n", + " // jQuery normalizes the pageX and pageY\n", + " // pageX,Y are the mouse positions relative to the document\n", + " // offset() returns the position of the element relative to the document\n", + " var x = e.pageX - $(targ).offset().left;\n", + " var y = e.pageY - $(targ).offset().top;\n", + "\n", + " return {\"x\": x, \"y\": y};\n", + "};\n", + "\n", + "/*\n", + " * return a copy of an object with only non-object keys\n", + " * we need this to avoid circular references\n", + " * http://stackoverflow.com/a/24161582/3208463\n", + " */\n", + "function simpleKeys (original) {\n", + " return Object.keys(original).reduce(function (obj, key) {\n", + " if (typeof original[key] !== 'object')\n", + " obj[key] = original[key]\n", + " return obj;\n", + " }, {});\n", + "}\n", + "\n", + "mpl.figure.prototype.mouse_event = function(event, name) {\n", + " var canvas_pos = mpl.findpos(event)\n", + "\n", + " if (name === 'button_press')\n", + " {\n", + " this.canvas.focus();\n", + " this.canvas_div.focus();\n", + " }\n", + "\n", + " var x = canvas_pos.x * mpl.ratio;\n", + " var y = canvas_pos.y * mpl.ratio;\n", + "\n", + " this.send_message(name, {x: x, y: y, button: event.button,\n", + " step: event.step,\n", + " guiEvent: simpleKeys(event)});\n", + "\n", + " /* This prevents the web browser from automatically changing to\n", + " * the text insertion cursor when the button is pressed. We want\n", + " * to control all of the cursor setting manually through the\n", + " * 'cursor' event from matplotlib */\n", + " event.preventDefault();\n", + " return false;\n", + "}\n", + "\n", + "mpl.figure.prototype._key_event_extra = function(event, name) {\n", + " // Handle any extra behaviour associated with a key event\n", + "}\n", + "\n", + "mpl.figure.prototype.key_event = function(event, name) {\n", + "\n", + " // Prevent repeat events\n", + " if (name == 'key_press')\n", + " {\n", + " if (event.which === this._key)\n", + " return;\n", + " else\n", + " this._key = event.which;\n", + " }\n", + " if (name == 'key_release')\n", + " this._key = null;\n", + "\n", + " var value = '';\n", + " if (event.ctrlKey && event.which != 17)\n", + " value += \"ctrl+\";\n", + " if (event.altKey && event.which != 18)\n", + " value += \"alt+\";\n", + " if (event.shiftKey && event.which != 16)\n", + " value += \"shift+\";\n", + "\n", + " value += 'k';\n", + " value += event.which.toString();\n", + "\n", + " this._key_event_extra(event, name);\n", + "\n", + " this.send_message(name, {key: value,\n", + " guiEvent: simpleKeys(event)});\n", + " return false;\n", + "}\n", + "\n", + "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n", + " if (name == 'download') {\n", + " this.handle_save(this, null);\n", + " } else {\n", + " this.send_message(\"toolbar_button\", {name: name});\n", + " }\n", + "};\n", + "\n", + "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n", + " this.message.textContent = tooltip;\n", + "};\n", + "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", + "\n", + "mpl.extensions = [\"eps\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\"];\n", + "\n", + "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n", + " // Create a \"websocket\"-like object which calls the given IPython comm\n", + " // object with the appropriate methods. Currently this is a non binary\n", + " // socket, so there is still some room for performance tuning.\n", + " var ws = {};\n", + "\n", + " ws.close = function() {\n", + " comm.close()\n", + " };\n", + " ws.send = function(m) {\n", + " //console.log('sending', m);\n", + " comm.send(m);\n", + " };\n", + " // Register the callback with on_msg.\n", + " comm.on_msg(function(msg) {\n", + " //console.log('receiving', msg['content']['data'], msg);\n", + " // Pass the mpl event to the overridden (by mpl) onmessage function.\n", + " ws.onmessage(msg['content']['data'])\n", + " });\n", + " return ws;\n", + "}\n", + "\n", + "mpl.mpl_figure_comm = function(comm, msg) {\n", + " // This is the function which gets called when the mpl process\n", + " // starts-up an IPython Comm through the \"matplotlib\" channel.\n", + "\n", + " var id = msg.content.data.id;\n", + " // Get hold of the div created by the display call when the Comm\n", + " // socket was opened in Python.\n", + " var element = $(\"#\" + id);\n", + " var ws_proxy = comm_websocket_adapter(comm)\n", + "\n", + " function ondownload(figure, format) {\n", + " window.open(figure.imageObj.src);\n", + " }\n", + "\n", + " var fig = new mpl.figure(id, ws_proxy,\n", + " ondownload,\n", + " element.get(0));\n", + "\n", + " // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n", + " // web socket which is closed, not our websocket->open comm proxy.\n", + " ws_proxy.onopen();\n", + "\n", + " fig.parent_element = element.get(0);\n", + " fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n", + " if (!fig.cell_info) {\n", + " console.error(\"Failed to find cell for figure\", id, fig);\n", + " return;\n", + " }\n", + "\n", + " var output_index = fig.cell_info[2]\n", + " var cell = fig.cell_info[0];\n", + "\n", + "};\n", + "\n", + "mpl.figure.prototype.handle_close = function(fig, msg) {\n", + " var width = fig.canvas.width/mpl.ratio\n", + " fig.root.unbind('remove')\n", + "\n", + " // Update the output cell to use the data from the current canvas.\n", + " fig.push_to_output();\n", + " var dataURL = fig.canvas.toDataURL();\n", + " // Re-enable the keyboard manager in IPython - without this line, in FF,\n", + " // the notebook keyboard shortcuts fail.\n", + " IPython.keyboard_manager.enable()\n", + " $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n", + " fig.close_ws(fig, msg);\n", + "}\n", + "\n", + "mpl.figure.prototype.close_ws = function(fig, msg){\n", + " fig.send_message('closing', msg);\n", + " // fig.ws.close()\n", + "}\n", + "\n", + "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n", + " // Turn the data on the canvas into data in the output cell.\n", + " var width = this.canvas.width/mpl.ratio\n", + " var dataURL = this.canvas.toDataURL();\n", + " this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n", + "}\n", + "\n", + "mpl.figure.prototype.updated_canvas_event = function() {\n", + " // Tell IPython that the notebook contents must change.\n", + " IPython.notebook.set_dirty(true);\n", + " this.send_message(\"ack\", {});\n", + " var fig = this;\n", + " // Wait a second, then push the new image to the DOM so\n", + " // that it is saved nicely (might be nice to debounce this).\n", + " setTimeout(function () { fig.push_to_output() }, 1000);\n", + "}\n", + "\n", + "mpl.figure.prototype._init_toolbar = function() {\n", + " var fig = this;\n", + "\n", + " var nav_element = $('<div/>')\n", + " nav_element.attr('style', 'width: 100%');\n", + " this.root.append(nav_element);\n", + "\n", + " // Define a callback function for later on.\n", + " function toolbar_event(event) {\n", + " return fig.toolbar_button_onclick(event['data']);\n", + " }\n", + " function toolbar_mouse_event(event) {\n", + " return fig.toolbar_button_onmouseover(event['data']);\n", + " }\n", + "\n", + " for(var toolbar_ind in mpl.toolbar_items){\n", + " var name = mpl.toolbar_items[toolbar_ind][0];\n", + " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", + " var image = mpl.toolbar_items[toolbar_ind][2];\n", + " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", + "\n", + " if (!name) { continue; };\n", + "\n", + " var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n", + " button.click(method_name, toolbar_event);\n", + " button.mouseover(tooltip, toolbar_mouse_event);\n", + " nav_element.append(button);\n", + " }\n", + "\n", + " // Add the status bar.\n", + " var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n", + " nav_element.append(status_bar);\n", + " this.message = status_bar[0];\n", + "\n", + " // Add the close button to the window.\n", + " var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n", + " var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n", + " button.click(function (evt) { fig.handle_close(fig, {}); } );\n", + " button.mouseover('Stop Interaction', toolbar_mouse_event);\n", + " buttongrp.append(button);\n", + " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", + " titlebar.prepend(buttongrp);\n", + "}\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(el){\n", + " var fig = this\n", + " el.on(\"remove\", function(){\n", + "\tfig.close_ws(fig, {});\n", + " });\n", + "}\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(el){\n", + " // this is important to make the div 'focusable\n", + " el.attr('tabindex', 0)\n", + " // reach out to IPython and tell the keyboard manager to turn it's self\n", + " // off when our div gets focus\n", + "\n", + " // location in version 3\n", + " if (IPython.notebook.keyboard_manager) {\n", + " IPython.notebook.keyboard_manager.register_events(el);\n", + " }\n", + " else {\n", + " // location in version 2\n", + " IPython.keyboard_manager.register_events(el);\n", + " }\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._key_event_extra = function(event, name) {\n", + " var manager = IPython.notebook.keyboard_manager;\n", + " if (!manager)\n", + " manager = IPython.keyboard_manager;\n", + "\n", + " // Check for shift+enter\n", + " if (event.shiftKey && event.which == 13) {\n", + " this.canvas_div.blur();\n", + " event.shiftKey = false;\n", + " // Send a \"J\" for go to next cell\n", + " event.which = 74;\n", + " event.keyCode = 74;\n", + " manager.command_mode();\n", + " manager.handle_keydown(event);\n", + " }\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_save = function(fig, msg) {\n", + " fig.ondownload(fig, null);\n", + "}\n", + "\n", + "\n", + "mpl.find_output_cell = function(html_output) {\n", + " // Return the cell and output element which can be found *uniquely* in the notebook.\n", + " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", + " // IPython event is triggered only after the cells have been serialised, which for\n", + " // our purposes (turning an active figure into a static one), is too late.\n", + " var cells = IPython.notebook.get_cells();\n", + " var ncells = cells.length;\n", + " for (var i=0; i<ncells; i++) {\n", + " var cell = cells[i];\n", + " if (cell.cell_type === 'code'){\n", + " for (var j=0; j<cell.output_area.outputs.length; j++) {\n", + " var data = cell.output_area.outputs[j];\n", + " if (data.data) {\n", + " // IPython >= 3 moved mimebundle to data attribute of output\n", + " data = data.data;\n", + " }\n", + " if (data['text/html'] == html_output) {\n", + " return [cell, data, j];\n", + " }\n", + " }\n", + " }\n", + " }\n", + "}\n", + "\n", + "// Register the function which deals with the matplotlib target/channel.\n", + "// The kernel may be null if the page has been refreshed.\n", + "if (IPython.notebook.kernel != null) {\n", + " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", + "}\n" + ], + "text/plain": [ + "<IPython.core.display.Javascript object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAgAElEQVR4Xuy9CbQVxbn2/xwIaFAUMFEEAZUoEfAa4S5ACAbHaC4gYFZQ/EQJjldl0qsogyAIDomgoDgQgesnypVBgYtzPkRGvz+KH4LTBaMoYq6CXNQIejj/9dY5vendu4eqru49nP30Wi6QXVX91q/e7nr6ramiqqqqCrxIgARIgARIgARIgATKhkAFBWDZtDUrSgIkQAIkQAIkQAKKAAUgHYEESIAESIAESIAEyowABWCZNTirSwIkQAIkQAIkQAIUgPQBEiABEiABEiABEigzAhSAZdbgrC4JkAAJkAAJkAAJUADSB0iABEiABEiABEigzAhQAJZZg7O6JEACJEACJEACJEABSB8gARIgARIgARIggTIjQAFYZg3O6pIACZAACZAACZAABSB9gARIgARIgARIgATKjAAFYJk1OKtLAiRAAiRAAiRAAhSA9AESIAESIAESIAESKDMCFIBl1uCsLgmQAAmQAAmQAAlQANIHSIAESIAESIAESKDMCFAAllmDs7okQAIkQAIkQAIkQAFIHyABEiABEiABEiCBMiNAAVhmDc7qkgAJkAAJkAAJkAAFIH2ABEiABEiABEiABMqMAAVgmTU4q0sCJEACJEACJEACFID0ARIgARIgARIgARIoMwIUgGXW4KwuCZAACZAACZAACVAA0gdIgARIgARIgARIoMwIUACWWYOzuiRAAiRAAiRAAiRAAUgfIAESIAESIAESIIEyI0ABWGYNzuqSAAmQAAmQAAmQAAUgfYAESIAESIAESIAEyowABWCZNTirSwIkQAIkQAIkQAIUgPQBEiABEiABEiABEigzAhSAZdbgrC4JkAAJkAAJkAAJUADSB0iABEiABEiABEigzAhQAJZZg7O6JEACJEACJEACJEABSB8gARIgARIgARIggTIjQAFYZg3O6pIACZAACZAACZAABSB9gARIgARIgARIgATKjAAFYJk1OKtLAiRAAiRAAiRAAhSA9AESIAESIAESIAESKDMCFIBl1uCsLgmQAAmQAAmQAAlQANIHSIAESIAESIAESKDMCFAAllmDs7okQAIkQAIkQAIkQAFIHyABEiABEiABEiCBMiNAAVhmDc7qkgAJkAAJkAAJkAAFIH2ABEiABEiABEiABMqMAAVgmTU4q0sCJEACJEACJEACFID0ARIgARIgARIgARIoMwIUgGXW4KwuCZAACZAACZAACVAA0gdIgARIgARIgARIoMwIUACWWYOzuiRAAiRAAiRAAiRAAUgfIAESIAESIAESIIEyI0ABWGYNzuqSAAmQAAmQAAmQAAUgfYAESIAESIAESIAEyowABWCZNTirSwIkQAIkQAIkQAIUgPQBEiABEiABEiABEigzAqEC8KGHHsK9996Lzz//HO3atcPUqVPRvXv3QEQLFizAmDFjsGXLFrRu3Rp33nkn+vbtm0lfVVWF8ePH49FHH8WuXbvQuXNnPPjgg6ps55J/HzJkCBYvXqz+qXfv3pg2bRoaNWqk/v/777/HNddcg/Xr1+Pdd99Fz5498eyzz2bZtHDhQsyYMQMbNmzA3r17Vfnjxo3Db3/720w6+X+xxX0dddRR2LFjR5m5AKtLAiRAAiRAAiRQbgQCBeC8efNw6aWXQkRgt27d8Mgjj2DmzJnYvHkzWrZsmcNpzZo1ShxOmDBBib5FixZh7NixWLlypRJ6ct19991KFM6ePRsnnngiJk6ciBUrVuD9999Hw4YNVZrzzz8fn376qRKJcl111VU49thjsWTJEvX/3377LW666SZ06NABIjgPPvjgHAE4bNgwNGvWDGeccYYSjrNmzcKf/vQnrFu3DqeeeqoqRwTg/Pnz8corr2TqUrduXfz85z8vNx9gfUmABEiABEiABMqMQKAAFNEmIksiac510kknoU+fPpg8eXIOpv79++N//ud/8Pzzz2d+O++889C4cWM89dRTkOifiDIRZ7fccotKI9E5ibqJMLz66qtVRK9t27ZYu3ZtRjTK30877TS89957aNOmTdZ9L7/8cnz99dc5AtCvDSUKKDaKKHUEoEQOJUrIiwRIgARIgARIgATKiYCvANy3bx8aNGiAZ555JmsId+jQoUowvfbaazmMJCo4fPhw9Z9zTZkyRQ0bf/zxx9i6dasaFn7zzTczUThJd8EFF6go3Zw5c/D4449jxIgRStS5L/ldyho0aFAsAbh//34VRbz55ptx/fXXZwSgDG8ffvjhOOigg5TgnDRpEo4//vhyan/WlQRIgARIgARIoAwJ+ArA7du3o3nz5li1ahW6du2awSICSYSaDNl6r/r166uh3QEDBmR+mjt3rhJtEulbvXq1Gkr+7LPP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\" width=\"640\">" + ], + "text/plain": [ + "<IPython.core.display.HTML object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "[<matplotlib.lines.Line2D at 0x1c289707b8>,\n", + " <matplotlib.lines.Line2D at 0x1c28970940>]" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pl.plot(t_filt, (hf2 - h.data[45:-45])/h.data[45:-45], '.C1', \n", + " t_filt_dec, (hf3 - h.data[45:-45:60])/h.data[45:-45:60], '*C2')" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([9145.616, 9145.659, 9145.698, 9145.744, 9145.789, 9145.829,\n", + " 9145.863, 9145.881, 9145.88 , 9145.848, 9145.812, 9145.814,\n", + " 9145.823, 9145.821, 9145.808, 9145.777, 9145.76 , 9145.785,\n", + " 9145.835, 9145.89 , 9145.942, 9146. , 9146.074, 9146.166,\n", + " 9146.27 , 9146.382, 9146.484, 9146.561, 9146.628, 9146.685,\n", + " 9146.709, 9146.706, 9146.721, 9146.756, 9146.77 , 9146.736,\n", + " 9146.663, 9146.589, 9146.525, 9146.464, 9146.384, 9146.274,\n", + " 9146.137, 9145.999, 9145.899, 9145.801, 9145.674, 9145.576,\n", + " 9145.527, 9145.479, 9145.436, 9145.424, 9145.444, 9145.496,\n", + " 9145.575, 9145.682, 9145.805, 9145.934, 9146.087, 9146.268,\n", + " 9146.457, 9146.659, 9146.864, 9147.02 , 9147.159, 9147.332,\n", + " 9147.512, 9147.68 , 9147.803, 9147.869, 9147.934, 9148.013,\n", + " 9148.097, 9148.151, 9148.164, 9148.146, 9148.101, 9148.072,\n", + " 9148.058, 9148.024, 9147.969, 9147.932, 9147.893, 9147.798,\n", + " 9147.695, 9147.625, 9147.575, 9147.532, 9147.489, 9147.453,\n", + " 9147.415, 9147.397, 9147.427, 9147.473, 9147.504, 9147.54 ,\n", + " 9147.595, 9147.647, 9147.719, 9147.828, 9147.931, 9148.013,\n", + " 9148.092, 9148.157, 9148.228, 9148.342, 9148.474, 9148.591,\n", + " 9148.693, 9148.788, 9148.863, 9148.951, 9149.082, 9149.199,\n", + " 9149.278, 9149.347, 9149.433, 9149.529, 9149.615, 9149.709,\n", + " 9149.807, 9149.887, 9149.958, 9150.025, 9150.098, 9150.181,\n", + " 9150.282, 9150.4 , 9150.517, 9150.636, 9150.743, 9150.835,\n", + " 9150.946, 9151.058, 9151.175, 9151.309, 9151.431, 9151.539,\n", + " 9151.651, 9151.776, 9151.899, 9152.032, 9152.17 , 9152.283,\n", + " 9152.392, 9152.49 , 9152.602, 9152.734, 9152.84 , 9152.933,\n", + " 9153.046, 9153.16 , 9153.262, 9153.358, 9153.428, 9153.494,\n", + " 9153.577, 9153.667, 9153.747, 9153.796, 9153.823, 9153.857,\n", + " 9153.906, 9153.956, 9154.014, 9154.044, 9154.014, 9153.966,\n", + " 9153.937, 9153.905, 9153.87 , 9153.841, 9153.782, 9153.707,\n", + " 9153.636, 9153.557, 9153.47 , 9153.386, 9153.302, 9153.212,\n", + " 9153.129, 9153.057, 9152.984, 9152.895, 9152.797, 9152.708,\n", + " 9152.639, 9152.6 , 9152.568, 9152.518, 9152.435, 9152.357,\n", + " 9152.321, 9152.298, 9152.271, 9152.238, 9152.227, 9152.237,\n", + " 9152.223, 9152.18 , 9152.126, 9152.069, 9152.033, 9152.018,\n", + " 9152.005, 9151.96 , 9151.876, 9151.812, 9151.775, 9151.762,\n", + " 9151.772, 9151.748, 9151.672, 9151.58 , 9151.508, 9151.463,\n", + " 9151.422, 9151.351, 9151.256, 9151.148, 9151.027, 9150.924,\n", + " 9150.852, 9150.792, 9150.731, 9150.647, 9150.549, 9150.466,\n", + " 9150.412, 9150.385, 9150.345, 9150.282, 9150.223, 9150.172,\n", + " 9150.122, 9150.086, 9150.053, 9150.001, 9149.952, 9149.92 ,\n", + " 9149.903, 9149.875, 9149.816, 9149.767, 9149.739, 9149.685,\n", + " 9149.617, 9149.565, 9149.533, 9149.54 , 9149.535, 9149.487,\n", + " 9149.431, 9149.376, 9149.342, 9149.341, 9149.337, 9149.321,\n", + " 9149.312, 9149.292, 9149.285, 9149.33 , 9149.384, 9149.431,\n", + " 9149.48 , 9149.515, 9149.562, 9149.639, 9149.743, 9149.853,\n", + " 9149.946, 9150.044, 9150.121, 9150.187, 9150.305, 9150.434,\n", + " 9150.523, 9150.6 , 9150.698, 9150.817, 9150.928, 9151.011,\n", + " 9151.067, 9151.126, 9151.221, 9151.333, 9151.416, 9151.444,\n", + " 9151.457, 9151.466, 9151.484, 9151.556, 9151.632, 9151.646,\n", + " 9151.635, 9151.62 , 9151.63 , 9151.706, 9151.762, 9151.764,\n", + " 9151.773, 9151.79 , 9151.803, 9151.824, 9151.856, 9151.906,\n", + " 9151.963, 9151.998, 9152.023, 9152.068, 9152.12 , 9152.17 ,\n", + " 9152.243, 9152.298, 9152.316, 9152.358, 9152.433, 9152.508,\n", + " 9152.57 , 9152.626, 9152.676, 9152.723, 9152.773, 9152.807,\n", + " 9152.819, 9152.838, 9152.873, 9152.908, 9152.936, 9152.97 ,\n", + " 9153.014, 9153.056, 9153.091, 9153.126, 9153.174, 9153.219,\n", + " 9153.257, 9153.274, 9153.273, 9153.287, 9153.312, 9153.344,\n", + " 9153.382, 9153.406, 9153.399, 9153.39 , 9153.408, 9153.437,\n", + " 9153.47 , 9153.506, 9153.517, 9153.501, 9153.482, 9153.466,\n", + " 9153.439, 9153.401, 9153.358, 9153.32 , 9153.297, 9153.265,\n", + " 9153.212, 9153.165, 9153.144, 9153.124, 9153.091, 9153.07 ,\n", + " 9153.051, 9153.04 , 9153.06 , 9153.084, 9153.074, 9153.043,\n", + " 9153.053, 9153.091, 9153.107, 9153.108, 9153.121, 9153.132,\n", + " 9153.137, 9153.154, 9153.158, 9153.151, 9153.155, 9153.155,\n", + " 9153.156, 9153.164, 9153.169, 9153.169, 9153.147, 9153.122,\n", + " 9153.12 , 9153.115, 9153.093, 9153.078, 9153.067, 9153.054,\n", + " 9153.028, 9153.001, 9152.993, 9152.982, 9152.974, 9152.964,\n", + " 9152.953, 9152.949, 9152.938, 9152.934, 9152.941, 9152.928,\n", + " 9152.89 , 9152.857, 9152.845, 9152.852, 9152.842, 9152.812,\n", + " 9152.801, 9152.787, 9152.75 , 9152.715, 9152.688, 9152.69 ,\n", + " 9152.696, 9152.663, 9152.62 , 9152.587, 9152.562, 9152.552,\n", + " 9152.551, 9152.543, 9152.514, 9152.462, 9152.426, 9152.404,\n", + " 9152.374, 9152.358, 9152.349, 9152.341, 9152.316, 9152.275,\n", + " 9152.248, 9152.24 , 9152.245, 9152.24 , 9152.221, 9152.193,\n", + " 9152.167, 9152.15 , 9152.148, 9152.157, 9152.146, 9152.105,\n", + " 9152.07 , 9152.037, 9152. , 9151.983, 9151.961, 9151.925,\n", + " 9151.9 , 9151.869, 9151.833, 9151.821, 9151.829, 9151.848,\n", + " 9151.884, 9151.927, 9151.974, 9152.036, 9152.095, 9152.143,\n", + " 9152.2 , 9152.271, 9152.364, 9152.462, 9152.54 , 9152.623,\n", + " 9152.693, 9152.737, 9152.79 , 9152.869, 9152.953, 9152.998,\n", + " 9153.022, 9153.068, 9153.12 , 9153.149, 9153.155, 9153.157,\n", + " 9153.165, 9153.174, 9153.177, 9153.179, 9153.176, 9153.17 ,\n", + " 9153.191, 9153.213, 9153.193, 9153.17 , 9153.176, 9153.184,\n", + " 9153.203, 9153.23 , 9153.252, 9153.292, 9153.336, 9153.374,\n", + " 9153.414, 9153.452, 9153.504, 9153.569, 9153.636, 9153.701,\n", + " 9153.764, 9153.832, 9153.901, 9154.013, 9154.149, 9154.243,\n", + " 9154.341, 9154.471, 9154.619, 9154.764, 9154.877, 9154.971,\n", + " 9155.069, 9155.163, 9155.255, 9155.361, 9155.456, 9155.525,\n", + " 9155.589, 9155.63 , 9155.643, 9155.648, 9155.665, 9155.694,\n", + " 9155.719, 9155.719, 9155.693, 9155.665, 9155.653, 9155.658,\n", + " 9155.659, 9155.652, 9155.639, 9155.617, 9155.594, 9155.564,\n", + " 9155.553, 9155.568, 9155.569, 9155.558, 9155.571, 9155.597,\n", + " 9155.607, 9155.615, 9155.622, 9155.614, 9155.611, 9155.61 ,\n", + " 9155.59 , 9155.56 , 9155.529, 9155.497, 9155.455, 9155.409,\n", + " 9155.371, 9155.332, 9155.298, 9155.251, 9155.178, 9155.107,\n", + " 9155.046, 9155.008, 9154.977, 9154.928, 9154.883, 9154.832,\n", + " 9154.774, 9154.735, 9154.717, 9154.678, 9154.616, 9154.572,\n", + " 9154.555, 9154.543, 9154.512, 9154.491, 9154.483, 9154.468,\n", + " 9154.469, 9154.468, 9154.447, 9154.444, 9154.475, 9154.523,\n", + " 9154.57 , 9154.62 , 9154.674, 9154.744, 9154.837, 9154.917,\n", + " 9154.988, 9155.053, 9155.101, 9155.175, 9155.274, 9155.369,\n", + " 9155.45 , 9155.526, 9155.6 , 9155.663, 9155.744, 9155.818,\n", + " 9155.854, 9155.891, 9155.938, 9155.973, 9155.995, 9156.013,\n", + " 9156.034, 9156.054, 9156.096, 9156.14 , 9156.14 , 9156.119,\n", + " 9156.121, 9156.157, 9156.194, 9156.213, 9156.218, 9156.214,\n", + " 9156.245, 9156.311, 9156.353, 9156.38 , 9156.419, 9156.456,\n", + " 9156.497, 9156.565, 9156.642, 9156.702, 9156.751, 9156.797,\n", + " 9156.85 , 9156.899, 9156.937, 9156.995, 9157.061, 9157.111,\n", + " 9157.155, 9157.206, 9157.273, 9157.347, 9157.409, 9157.453,\n", + " 9157.503, 9157.567, 9157.631, 9157.69 , 9157.742, 9157.769,\n", + " 9157.79 , 9157.852, 9157.927, 9157.991, 9158.042, 9158.065,\n", + " 9158.08 , 9158.121, 9158.163, 9158.172, 9158.165, 9158.152,\n", + " 9158.145, 9158.159, 9158.153, 9158.115, 9158.073, 9158.047,\n", + " 9158.045, 9158.04 , 9157.988, 9157.915, 9157.869, 9157.817,\n", + " 9157.759, 9157.729, 9157.691, 9157.614, 9157.496, 9157.392,\n", + " 9157.339, 9157.289, 9157.214, 9157.136, 9157.068, 9157.01 ,\n", + " 9156.966, 9156.935, 9156.886, 9156.808, 9156.731, 9156.677,\n", + " 9156.642, 9156.6 , 9156.552, 9156.519, 9156.488, 9156.469,\n", + " 9156.47 , 9156.457, 9156.445, 9156.432, 9156.399, 9156.388,\n", + " 9156.394, 9156.385, 9156.381, 9156.397, 9156.409, 9156.424,\n", + " 9156.451, 9156.453, 9156.45 , 9156.461, 9156.46 , 9156.456,\n", + " 9156.457, 9156.468, 9156.461, 9156.421, 9156.392, 9156.372,\n", + " 9156.34 , 9156.313, 9156.288, 9156.259, 9156.257, 9156.259,\n", + " 9156.245, 9156.237, 9156.216, 9156.163, 9156.116, 9156.078,\n", + " 9156.043, 9156.012, 9155.957, 9155.864, 9155.772, 9155.707,\n", + " 9155.643, 9155.61 , 9155.603, 9155.562, 9155.506, 9155.461,\n", + " 9155.439, 9155.466, 9155.502, 9155.516, 9155.551, 9155.612,\n", + " 9155.675, 9155.748, 9155.824, 9155.915, 9156.029, 9156.123,\n", + " 9156.195, 9156.275, 9156.355, 9156.427, 9156.488, 9156.529,\n", + " 9156.539, 9156.534, 9156.532, 9156.525, 9156.512, 9156.475,\n", + " 9156.414, 9156.362, 9156.33 , 9156.322, 9156.349, 9156.374,\n", + " 9156.359, 9156.348, 9156.365, 9156.397, 9156.452, 9156.516,\n", + " 9156.567, 9156.6 , 9156.671, 9156.782, 9156.857, 9156.904,\n", + " 9156.96 , 9157.019, 9157.112, 9157.238, 9157.346, 9157.429,\n", + " 9157.484, 9157.522, 9157.559, 9157.602, 9157.642, 9157.684,\n", + " 9157.737, 9157.809, 9157.879, 9157.902, 9157.936, 9157.995,\n", + " 9158.036, 9158.07 , 9158.095, 9158.102, 9158.111, 9158.14 ,\n", + " 9158.169, 9158.178, 9158.175, 9158.176, 9158.181, 9158.151,\n", + " 9158.092, 9158.046, 9158.006, 9157.941, 9157.872, 9157.829,\n", + " 9157.795, 9157.751, 9157.698, 9157.648, 9157.614, 9157.593,\n", + " 9157.573, 9157.555, 9157.543, 9157.534, 9157.515, 9157.505,\n", + " 9157.521, 9157.52 , 9157.498, 9157.493, 9157.505, 9157.508,\n", + " 9157.518, 9157.557, 9157.599, 9157.637, 9157.669, 9157.697,\n", + " 9157.72 , 9157.737, 9157.757, 9157.772, 9157.808, 9157.843,\n", + " 9157.849, 9157.856, 9157.841, 9157.807, 9157.791, 9157.746,\n", + " 9157.662, 9157.595, 9157.538, 9157.443, 9157.322, 9157.211,\n", + " 9157.102, 9156.998, 9156.928, 9156.87 , 9156.799, 9156.722,\n", + " 9156.65 , 9156.595, 9156.543, 9156.482, 9156.425, 9156.385,\n", + " 9156.355, 9156.299, 9156.24 , 9156.198, 9156.131, 9156.074,\n", + " 9156.046, 9156.013, 9156.001, 9156.01 , 9156.034, 9156.07 ,\n", + " 9156.089, 9156.107, 9156.129, 9156.162, 9156.21 , 9156.246,\n", + " 9156.264, 9156.307, 9156.378, 9156.446, 9156.524, 9156.605,\n", + " 9156.673, 9156.726, 9156.769, 9156.839, 9156.92 , 9156.983,\n", + " 9157.059, 9157.14 , 9157.195, 9157.237, 9157.292, 9157.336,\n", + " 9157.352, 9157.378, 9157.406, 9157.424, 9157.463, 9157.493,\n", + " 9157.475, 9157.436, 9157.43 , 9157.463, 9157.484, 9157.472,\n", + " 9157.485, 9157.524, 9157.561, 9157.625, 9157.707, 9157.799,\n", + " 9157.91 , 9158.047, 9158.206, 9158.35 , 9158.476, 9158.619,\n", + " 9158.786, 9158.949, 9159.072, 9159.163, 9159.255, 9159.347,\n", + " 9159.431, 9159.51 , 9159.58 , 9159.62 , 9159.638, 9159.641,\n", + " 9159.616, 9159.595, 9159.579, 9159.537, 9159.488, 9159.45 ,\n", + " 9159.408, 9159.352, 9159.283, 9159.21 , 9159.156, 9159.128,\n", + " 9159.119, 9159.105, 9159.078, 9159.038, 9159.007, 9159.01 ,\n", + " 9159.012, 9158.995, 9158.979, 9158.956, 9158.933, 9158.908,\n", + " 9158.871, 9158.835, 9158.812, 9158.804, 9158.807, 9158.818,\n", + " 9158.832])" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "h.data" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "9156.74486717354" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.dot(h.data[-151:-60], one_minute_gauss_filter)" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "655928" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "as_s.nbytes" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "7928" + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "h.data.nbytes" + ] + }, + { + "cell_type": "code", + "execution_count": 265, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "82.73562058526741" + ] + }, + "execution_count": 265, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "655928/7928" + ] + }, + { + "cell_type": "code", + "execution_count": 266, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "62969088" + ] + }, + "execution_count": 266, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "24*4*655928" + ] + }, + { + "cell_type": "code", + "execution_count": 267, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1952041728" + ] + }, + "execution_count": 267, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "24*4*31*655928" + ] + }, + { + "cell_type": "code", + "execution_count": 268, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1296000" + ] + }, + "execution_count": 268, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "86400*15" + ] + }, + { + "cell_type": "code", + "execution_count": 269, + "metadata": {}, + "outputs": [], + "source": [ + "h_end_nan = h.data[-91:]" + ] + }, + { + "cell_type": "code", + "execution_count": 270, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([9156.089, 9156.107, 9156.129, 9156.162, 9156.21 , 9156.246,\n", + " 9156.264, 9156.307, 9156.378, 9156.446, 9156.524, 9156.605,\n", + " 9156.673, 9156.726, 9156.769, 9156.839, 9156.92 , 9156.983,\n", + " 9157.059, 9157.14 , 9157.195, 9157.237, 9157.292, 9157.336,\n", + " 9157.352, 9157.378, 9157.406, 9157.424, 9157.463, 9157.493,\n", + " 9157.475, 9157.436, 9157.43 , 9157.463, 9157.484, 9157.472,\n", + " 9157.485, 9157.524, 9157.561, 9157.625, 9157.707, 9157.799,\n", + " 9157.91 , 9158.047, 9158.206, 9158.35 , 9158.476, 9158.619,\n", + " 9158.786, 9158.949, 9159.072, 9159.163, 9159.255, 9159.347,\n", + " 9159.431, 9159.51 , 9159.58 , 9159.62 , 9159.638, 9159.641,\n", + " 9159.616, 9159.595, 9159.579, 9159.537, 9159.488, 9159.45 ,\n", + " 9159.408, 9159.352, 9159.283, 9159.21 , 9159.156, 9159.128,\n", + " 9159.119, 9159.105, 9159.078, 9159.038, 9159.007, 9159.01 ,\n", + " 9159.012, 9158.995, 9158.979, 9158.956, 9158.933, 9158.908,\n", + " 9158.871, 9158.835, 9158.812, 9158.804, 9158.807, 9158.818,\n", + " 9158.832])" + ] + }, + "execution_count": 270, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "h_end_nan" + ] + }, + { + "cell_type": "code", + "execution_count": 271, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([9156.089, 9156.107, 9156.129, 9156.162, 9156.21 , nan,\n", + " 9156.264, 9156.307, 9156.378, 9156.446, 9156.524, 9156.605,\n", + " 9156.673, 9156.726, 9156.769, 9156.839, 9156.92 , 9156.983,\n", + " 9157.059, 9157.14 , 9157.195, 9157.237, 9157.292, 9157.336,\n", + " 9157.352, 9157.378, 9157.406, 9157.424, 9157.463, 9157.493,\n", + " 9157.475, 9157.436, 9157.43 , 9157.463, 9157.484, 9157.472,\n", + " 9157.485, 9157.524, 9157.561, 9157.625, 9157.707, 9157.799,\n", + " 9157.91 , 9158.047, 9158.206, 9158.35 , 9158.476, 9158.619,\n", + " 9158.786, 9158.949, 9159.072, 9159.163, 9159.255, 9159.347,\n", + " 9159.431, 9159.51 , 9159.58 , 9159.62 , 9159.638, 9159.641,\n", + " 9159.616, 9159.595, 9159.579, 9159.537, 9159.488, 9159.45 ,\n", + " 9159.408, 9159.352, 9159.283, 9159.21 , 9159.156, 9159.128,\n", + " 9159.119, 9159.105, 9159.078, 9159.038, 9159.007, 9159.01 ,\n", + " 9159.012, 9158.995, 9158.979, 9158.956, 9158.933, 9158.908,\n", + " 9158.871, 9158.835, 9158.812, 9158.804, 9158.807, 9158.818,\n", + " 9158.832])" + ] + }, + "execution_count": 271, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "h_end_nan[5] = np.nan\n", + "h_end_nan" + ] + }, + { + "cell_type": "code", + "execution_count": 272, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "nan" + ] + }, + "execution_count": 272, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.dot(h_end_nan, one_minute_gauss_filter)" + ] + }, + { + "cell_type": "code", + "execution_count": 273, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "81.9" + ] + }, + "execution_count": 273, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "91*0.9" + ] + }, + { + "cell_type": "code", + "execution_count": 275, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "-1" + ] + }, + "execution_count": 275, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.sign(-100)" + ] + }, + { + "cell_type": "code", + "execution_count": 276, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "1" + ] + }, + "execution_count": 276, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.sign(100)" + ] + }, + { + "cell_type": "code", + "execution_count": 277, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 277, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.sign(0)" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [], + "source": [ + "b = EdgeFactory(cwbhost='166.154.45.158', host='166.154.45.158')" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [], + "source": [ + "gxx_golden = b.get_timeseries(observatory='GXX', \n", + " channels=['LFF'], \n", + " type='variation', \n", + " interval='second', \n", + " starttime=UTCDateTime('2018-09-13T00:00:00Z'), \n", + " endtime=UTCDateTime('2018-09-13T00:15:00Z'))" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "2018-09-19T00:00:00.000000Z" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "UTCDateTime('2018-09-18T23:59:15Z')+45" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'second'" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "gxx_golden[0].stats.data_interval" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [], + "source": [ + "fg = gxx_golden[0].data" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(901,)" + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "fg.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [], + "source": [ + "gxx_golden_v = b.get_timeseries(observatory='GXX', \n", + " channels=['BEU'], \n", + " type='variation',\n", + " interval='second',\n", + " starttime=UTCDateTime('2018-09-13T00:00:00Z')-9.9,\n", + " endtime=UTCDateTime('2018-09-13T00:15:00Z')+9.9)" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": {}, + "outputs": [], + "source": [ + "hg = gxx_golden_v[0].data" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(9199,)" + ] + }, + "execution_count": 41, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "hg.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [], + "source": [ + "tg = gxx_golden_v[0].times()" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [ + { + "data": { + "application/javascript": [ + "/* Put everything inside the global mpl namespace */\n", + "window.mpl = {};\n", + "\n", + "\n", + "mpl.get_websocket_type = function() {\n", + " if (typeof(WebSocket) !== 'undefined') {\n", + " return WebSocket;\n", + " } else if (typeof(MozWebSocket) !== 'undefined') {\n", + " return MozWebSocket;\n", + " } else {\n", + " alert('Your browser does not have WebSocket support.' +\n", + " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", + " 'Firefox 4 and 5 are also supported but you ' +\n", + " 'have to enable WebSockets in about:config.');\n", + " };\n", + "}\n", + "\n", + "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", + " this.id = figure_id;\n", + "\n", + " this.ws = websocket;\n", + "\n", + " this.supports_binary = (this.ws.binaryType != undefined);\n", + "\n", + " if (!this.supports_binary) {\n", + " var warnings = document.getElementById(\"mpl-warnings\");\n", + " if (warnings) {\n", + " warnings.style.display = 'block';\n", + " warnings.textContent = (\n", + " \"This browser does not support binary websocket messages. \" +\n", + " \"Performance may be slow.\");\n", + " }\n", + " }\n", + "\n", + " this.imageObj = new Image();\n", + "\n", + " this.context = undefined;\n", + " this.message = undefined;\n", + " this.canvas = undefined;\n", + " this.rubberband_canvas = undefined;\n", + " this.rubberband_context = undefined;\n", + " this.format_dropdown = undefined;\n", + "\n", + " this.image_mode = 'full';\n", + "\n", + " this.root = $('<div/>');\n", + " this._root_extra_style(this.root)\n", + " this.root.attr('style', 'display: inline-block');\n", + "\n", + " $(parent_element).append(this.root);\n", + "\n", + " this._init_header(this);\n", + " this._init_canvas(this);\n", + " this._init_toolbar(this);\n", + "\n", + " var fig = this;\n", + "\n", + " this.waiting = false;\n", + "\n", + " this.ws.onopen = function () {\n", + " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", + " fig.send_message(\"send_image_mode\", {});\n", + " if (mpl.ratio != 1) {\n", + " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", + " }\n", + " fig.send_message(\"refresh\", {});\n", + " }\n", + "\n", + " this.imageObj.onload = function() {\n", + " if (fig.image_mode == 'full') {\n", + " // Full images could contain transparency (where diff images\n", + " // almost always do), so we need to clear the canvas so that\n", + " // there is no ghosting.\n", + " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", + " }\n", + " fig.context.drawImage(fig.imageObj, 0, 0);\n", + " };\n", + "\n", + " this.imageObj.onunload = function() {\n", + " fig.ws.close();\n", + " }\n", + "\n", + " this.ws.onmessage = this._make_on_message_function(this);\n", + "\n", + " this.ondownload = ondownload;\n", + "}\n", + "\n", + "mpl.figure.prototype._init_header = function() {\n", + " var titlebar = $(\n", + " '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n", + " 'ui-helper-clearfix\"/>');\n", + " var titletext = $(\n", + " '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n", + " 'text-align: center; padding: 3px;\"/>');\n", + " titlebar.append(titletext)\n", + " this.root.append(titlebar);\n", + " this.header = titletext[0];\n", + "}\n", + "\n", + "\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._init_canvas = function() {\n", + " var fig = this;\n", + "\n", + " var canvas_div = $('<div/>');\n", + "\n", + " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", + "\n", + " function canvas_keyboard_event(event) {\n", + " return fig.key_event(event, event['data']);\n", + " }\n", + "\n", + " canvas_div.keydown('key_press', canvas_keyboard_event);\n", + " canvas_div.keyup('key_release', canvas_keyboard_event);\n", + " this.canvas_div = canvas_div\n", + " this._canvas_extra_style(canvas_div)\n", + " this.root.append(canvas_div);\n", + "\n", + " var canvas = $('<canvas/>');\n", + " canvas.addClass('mpl-canvas');\n", + " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", + "\n", + " this.canvas = canvas[0];\n", + " this.context = canvas[0].getContext(\"2d\");\n", + "\n", + " var backingStore = this.context.backingStorePixelRatio ||\n", + "\tthis.context.webkitBackingStorePixelRatio ||\n", + "\tthis.context.mozBackingStorePixelRatio ||\n", + "\tthis.context.msBackingStorePixelRatio ||\n", + "\tthis.context.oBackingStorePixelRatio ||\n", + "\tthis.context.backingStorePixelRatio || 1;\n", + "\n", + " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", + "\n", + " var rubberband = $('<canvas/>');\n", + " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", + "\n", + " var pass_mouse_events = true;\n", + "\n", + " canvas_div.resizable({\n", + " start: function(event, ui) {\n", + " pass_mouse_events = false;\n", + " },\n", + " resize: function(event, ui) {\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " stop: function(event, ui) {\n", + " pass_mouse_events = true;\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " });\n", + "\n", + " function mouse_event_fn(event) {\n", + " if (pass_mouse_events)\n", + " return fig.mouse_event(event, event['data']);\n", + " }\n", + "\n", + " rubberband.mousedown('button_press', mouse_event_fn);\n", + " rubberband.mouseup('button_release', mouse_event_fn);\n", + " // Throttle sequential mouse events to 1 every 20ms.\n", + " rubberband.mousemove('motion_notify', mouse_event_fn);\n", + "\n", + " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", + " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", + "\n", + " canvas_div.on(\"wheel\", function (event) {\n", + " event = event.originalEvent;\n", + " event['data'] = 'scroll'\n", + " if (event.deltaY < 0) {\n", + " event.step = 1;\n", + " } else {\n", + " event.step = -1;\n", + " }\n", + " mouse_event_fn(event);\n", + " });\n", + "\n", + " canvas_div.append(canvas);\n", + " canvas_div.append(rubberband);\n", + "\n", + " this.rubberband = rubberband;\n", + " this.rubberband_canvas = rubberband[0];\n", + " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", + " this.rubberband_context.strokeStyle = \"#000000\";\n", + "\n", + " this._resize_canvas = function(width, height) {\n", + " // Keep the size of the canvas, canvas container, and rubber band\n", + " // canvas in synch.\n", + " canvas_div.css('width', width)\n", + " canvas_div.css('height', height)\n", + "\n", + " canvas.attr('width', width * mpl.ratio);\n", + " canvas.attr('height', height * mpl.ratio);\n", + " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", + "\n", + " rubberband.attr('width', width);\n", + " rubberband.attr('height', height);\n", + " }\n", + "\n", + " // Set the figure to an initial 600x600px, this will subsequently be updated\n", + " // upon first draw.\n", + " this._resize_canvas(600, 600);\n", + "\n", + " // Disable right mouse context menu.\n", + " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", + " return false;\n", + " });\n", + "\n", + " function set_focus () {\n", + " canvas.focus();\n", + " canvas_div.focus();\n", + " }\n", + "\n", + " window.setTimeout(set_focus, 100);\n", + "}\n", + "\n", + "mpl.figure.prototype._init_toolbar = function() {\n", + " var fig = this;\n", + "\n", + " var nav_element = $('<div/>')\n", + " nav_element.attr('style', 'width: 100%');\n", + " this.root.append(nav_element);\n", + "\n", + " // Define a callback function for later on.\n", + " function toolbar_event(event) {\n", + " return fig.toolbar_button_onclick(event['data']);\n", + " }\n", + " function toolbar_mouse_event(event) {\n", + " return fig.toolbar_button_onmouseover(event['data']);\n", + " }\n", + "\n", + " for(var toolbar_ind in mpl.toolbar_items) {\n", + " var name = mpl.toolbar_items[toolbar_ind][0];\n", + " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", + " var image = mpl.toolbar_items[toolbar_ind][2];\n", + " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", + "\n", + " if (!name) {\n", + " // put a spacer in here.\n", + " continue;\n", + " }\n", + " var button = $('<button/>');\n", + " button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n", + " 'ui-button-icon-only');\n", + " button.attr('role', 'button');\n", + " button.attr('aria-disabled', 'false');\n", + " button.click(method_name, toolbar_event);\n", + " button.mouseover(tooltip, toolbar_mouse_event);\n", + "\n", + " var icon_img = $('<span/>');\n", + " icon_img.addClass('ui-button-icon-primary ui-icon');\n", + " icon_img.addClass(image);\n", + " icon_img.addClass('ui-corner-all');\n", + "\n", + " var tooltip_span = $('<span/>');\n", + " tooltip_span.addClass('ui-button-text');\n", + " tooltip_span.html(tooltip);\n", + "\n", + " button.append(icon_img);\n", + " button.append(tooltip_span);\n", + "\n", + " nav_element.append(button);\n", + " }\n", + "\n", + " var fmt_picker_span = $('<span/>');\n", + "\n", + " var fmt_picker = $('<select/>');\n", + " fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n", + " fmt_picker_span.append(fmt_picker);\n", + " nav_element.append(fmt_picker_span);\n", + " this.format_dropdown = fmt_picker[0];\n", + "\n", + " for (var ind in mpl.extensions) {\n", + " var fmt = mpl.extensions[ind];\n", + " var option = $(\n", + " '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n", + " fmt_picker.append(option)\n", + " }\n", + "\n", + " // Add hover states to the ui-buttons\n", + " $( \".ui-button\" ).hover(\n", + " function() { $(this).addClass(\"ui-state-hover\");},\n", + " function() { $(this).removeClass(\"ui-state-hover\");}\n", + " );\n", + "\n", + " var status_bar = $('<span class=\"mpl-message\"/>');\n", + " nav_element.append(status_bar);\n", + " this.message = status_bar[0];\n", + "}\n", + "\n", + "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n", + " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", + " // which will in turn request a refresh of the image.\n", + " this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n", + "}\n", + "\n", + "mpl.figure.prototype.send_message = function(type, properties) {\n", + " properties['type'] = type;\n", + " properties['figure_id'] = this.id;\n", + " this.ws.send(JSON.stringify(properties));\n", + "}\n", + "\n", + "mpl.figure.prototype.send_draw_message = function() {\n", + " if (!this.waiting) {\n", + " this.waiting = true;\n", + " this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n", + " }\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype.handle_save = function(fig, msg) {\n", + " var format_dropdown = fig.format_dropdown;\n", + " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", + " fig.ondownload(fig, format);\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype.handle_resize = function(fig, msg) {\n", + " var size = msg['size'];\n", + " if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n", + " fig._resize_canvas(size[0], size[1]);\n", + " fig.send_message(\"refresh\", {});\n", + " };\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n", + " var x0 = msg['x0'] / mpl.ratio;\n", + " var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n", + " var x1 = msg['x1'] / mpl.ratio;\n", + " var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n", + " x0 = Math.floor(x0) + 0.5;\n", + " y0 = Math.floor(y0) + 0.5;\n", + " x1 = Math.floor(x1) + 0.5;\n", + " y1 = Math.floor(y1) + 0.5;\n", + " var min_x = Math.min(x0, x1);\n", + " var min_y = Math.min(y0, y1);\n", + " var width = Math.abs(x1 - x0);\n", + " var height = Math.abs(y1 - y0);\n", + "\n", + " fig.rubberband_context.clearRect(\n", + " 0, 0, fig.canvas.width, fig.canvas.height);\n", + "\n", + " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n", + " // Updates the figure title.\n", + " fig.header.textContent = msg['label'];\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n", + " var cursor = msg['cursor'];\n", + " switch(cursor)\n", + " {\n", + " case 0:\n", + " cursor = 'pointer';\n", + " break;\n", + " case 1:\n", + " cursor = 'default';\n", + " break;\n", + " case 2:\n", + " cursor = 'crosshair';\n", + " break;\n", + " case 3:\n", + " cursor = 'move';\n", + " break;\n", + " }\n", + " fig.rubberband_canvas.style.cursor = cursor;\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_message = function(fig, msg) {\n", + " fig.message.textContent = msg['message'];\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_draw = function(fig, msg) {\n", + " // Request the server to send over a new figure.\n", + " fig.send_draw_message();\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n", + " fig.image_mode = msg['mode'];\n", + "}\n", + "\n", + "mpl.figure.prototype.updated_canvas_event = function() {\n", + " // Called whenever the canvas gets updated.\n", + " this.send_message(\"ack\", {});\n", + "}\n", + "\n", + "// A function to construct a web socket function for onmessage handling.\n", + "// Called in the figure constructor.\n", + "mpl.figure.prototype._make_on_message_function = function(fig) {\n", + " return function socket_on_message(evt) {\n", + " if (evt.data instanceof Blob) {\n", + " /* FIXME: We get \"Resource interpreted as Image but\n", + " * transferred with MIME type text/plain:\" errors on\n", + " * Chrome. But how to set the MIME type? It doesn't seem\n", + " * to be part of the websocket stream */\n", + " evt.data.type = \"image/png\";\n", + "\n", + " /* Free the memory for the previous frames */\n", + " if (fig.imageObj.src) {\n", + " (window.URL || window.webkitURL).revokeObjectURL(\n", + " fig.imageObj.src);\n", + " }\n", + "\n", + " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", + " evt.data);\n", + " fig.updated_canvas_event();\n", + " fig.waiting = false;\n", + " return;\n", + " }\n", + " else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n", + " fig.imageObj.src = evt.data;\n", + " fig.updated_canvas_event();\n", + " fig.waiting = false;\n", + " return;\n", + " }\n", + "\n", + " var msg = JSON.parse(evt.data);\n", + " var msg_type = msg['type'];\n", + "\n", + " // Call the \"handle_{type}\" callback, which takes\n", + " // the figure and JSON message as its only arguments.\n", + " try {\n", + " var callback = fig[\"handle_\" + msg_type];\n", + " } catch (e) {\n", + " console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n", + " return;\n", + " }\n", + "\n", + " if (callback) {\n", + " try {\n", + " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", + " callback(fig, msg);\n", + " } catch (e) {\n", + " console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n", + " }\n", + " }\n", + " };\n", + "}\n", + "\n", + "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", + "mpl.findpos = function(e) {\n", + " //this section is from http://www.quirksmode.org/js/events_properties.html\n", + " var targ;\n", + " if (!e)\n", + " e = window.event;\n", + " if (e.target)\n", + " targ = e.target;\n", + " else if (e.srcElement)\n", + " targ = e.srcElement;\n", + " if (targ.nodeType == 3) // defeat Safari bug\n", + " targ = targ.parentNode;\n", + "\n", + " // jQuery normalizes the pageX and pageY\n", + " // pageX,Y are the mouse positions relative to the document\n", + " // offset() returns the position of the element relative to the document\n", + " var x = e.pageX - $(targ).offset().left;\n", + " var y = e.pageY - $(targ).offset().top;\n", + "\n", + " return {\"x\": x, \"y\": y};\n", + "};\n", + "\n", + "/*\n", + " * return a copy of an object with only non-object keys\n", + " * we need this to avoid circular references\n", + " * http://stackoverflow.com/a/24161582/3208463\n", + " */\n", + "function simpleKeys (original) {\n", + " return Object.keys(original).reduce(function (obj, key) {\n", + " if (typeof original[key] !== 'object')\n", + " obj[key] = original[key]\n", + " return obj;\n", + " }, {});\n", + "}\n", + "\n", + "mpl.figure.prototype.mouse_event = function(event, name) {\n", + " var canvas_pos = mpl.findpos(event)\n", + "\n", + " if (name === 'button_press')\n", + " {\n", + " this.canvas.focus();\n", + " this.canvas_div.focus();\n", + " }\n", + "\n", + " var x = canvas_pos.x * mpl.ratio;\n", + " var y = canvas_pos.y * mpl.ratio;\n", + "\n", + " this.send_message(name, {x: x, y: y, button: event.button,\n", + " step: event.step,\n", + " guiEvent: simpleKeys(event)});\n", + "\n", + " /* This prevents the web browser from automatically changing to\n", + " * the text insertion cursor when the button is pressed. We want\n", + " * to control all of the cursor setting manually through the\n", + " * 'cursor' event from matplotlib */\n", + " event.preventDefault();\n", + " return false;\n", + "}\n", + "\n", + "mpl.figure.prototype._key_event_extra = function(event, name) {\n", + " // Handle any extra behaviour associated with a key event\n", + "}\n", + "\n", + "mpl.figure.prototype.key_event = function(event, name) {\n", + "\n", + " // Prevent repeat events\n", + " if (name == 'key_press')\n", + " {\n", + " if (event.which === this._key)\n", + " return;\n", + " else\n", + " this._key = event.which;\n", + " }\n", + " if (name == 'key_release')\n", + " this._key = null;\n", + "\n", + " var value = '';\n", + " if (event.ctrlKey && event.which != 17)\n", + " value += \"ctrl+\";\n", + " if (event.altKey && event.which != 18)\n", + " value += \"alt+\";\n", + " if (event.shiftKey && event.which != 16)\n", + " value += \"shift+\";\n", + "\n", + " value += 'k';\n", + " value += event.which.toString();\n", + "\n", + " this._key_event_extra(event, name);\n", + "\n", + " this.send_message(name, {key: value,\n", + " guiEvent: simpleKeys(event)});\n", + " return false;\n", + "}\n", + "\n", + "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n", + " if (name == 'download') {\n", + " this.handle_save(this, null);\n", + " } else {\n", + " this.send_message(\"toolbar_button\", {name: name});\n", + " }\n", + "};\n", + "\n", + "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n", + " this.message.textContent = tooltip;\n", + "};\n", + "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", + "\n", + "mpl.extensions = [\"eps\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\"];\n", + "\n", + "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n", + " // Create a \"websocket\"-like object which calls the given IPython comm\n", + " // object with the appropriate methods. Currently this is a non binary\n", + " // socket, so there is still some room for performance tuning.\n", + " var ws = {};\n", + "\n", + " ws.close = function() {\n", + " comm.close()\n", + " };\n", + " ws.send = function(m) {\n", + " //console.log('sending', m);\n", + " comm.send(m);\n", + " };\n", + " // Register the callback with on_msg.\n", + " comm.on_msg(function(msg) {\n", + " //console.log('receiving', msg['content']['data'], msg);\n", + " // Pass the mpl event to the overridden (by mpl) onmessage function.\n", + " ws.onmessage(msg['content']['data'])\n", + " });\n", + " return ws;\n", + "}\n", + "\n", + "mpl.mpl_figure_comm = function(comm, msg) {\n", + " // This is the function which gets called when the mpl process\n", + " // starts-up an IPython Comm through the \"matplotlib\" channel.\n", + "\n", + " var id = msg.content.data.id;\n", + " // Get hold of the div created by the display call when the Comm\n", + " // socket was opened in Python.\n", + " var element = $(\"#\" + id);\n", + " var ws_proxy = comm_websocket_adapter(comm)\n", + "\n", + " function ondownload(figure, format) {\n", + " window.open(figure.imageObj.src);\n", + " }\n", + "\n", + " var fig = new mpl.figure(id, ws_proxy,\n", + " ondownload,\n", + " element.get(0));\n", + "\n", + " // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n", + " // web socket which is closed, not our websocket->open comm proxy.\n", + " ws_proxy.onopen();\n", + "\n", + " fig.parent_element = element.get(0);\n", + " fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n", + " if (!fig.cell_info) {\n", + " console.error(\"Failed to find cell for figure\", id, fig);\n", + " return;\n", + " }\n", + "\n", + " var output_index = fig.cell_info[2]\n", + " var cell = fig.cell_info[0];\n", + "\n", + "};\n", + "\n", + "mpl.figure.prototype.handle_close = function(fig, msg) {\n", + " var width = fig.canvas.width/mpl.ratio\n", + " fig.root.unbind('remove')\n", + "\n", + " // Update the output cell to use the data from the current canvas.\n", + " fig.push_to_output();\n", + " var dataURL = fig.canvas.toDataURL();\n", + " // Re-enable the keyboard manager in IPython - without this line, in FF,\n", + " // the notebook keyboard shortcuts fail.\n", + " IPython.keyboard_manager.enable()\n", + " $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n", + " fig.close_ws(fig, msg);\n", + "}\n", + "\n", + "mpl.figure.prototype.close_ws = function(fig, msg){\n", + " fig.send_message('closing', msg);\n", + " // fig.ws.close()\n", + "}\n", + "\n", + "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n", + " // Turn the data on the canvas into data in the output cell.\n", + " var width = this.canvas.width/mpl.ratio\n", + " var dataURL = this.canvas.toDataURL();\n", + " this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n", + "}\n", + "\n", + "mpl.figure.prototype.updated_canvas_event = function() {\n", + " // Tell IPython that the notebook contents must change.\n", + " IPython.notebook.set_dirty(true);\n", + " this.send_message(\"ack\", {});\n", + " var fig = this;\n", + " // Wait a second, then push the new image to the DOM so\n", + " // that it is saved nicely (might be nice to debounce this).\n", + " setTimeout(function () { fig.push_to_output() }, 1000);\n", + "}\n", + "\n", + "mpl.figure.prototype._init_toolbar = function() {\n", + " var fig = this;\n", + "\n", + " var nav_element = $('<div/>')\n", + " nav_element.attr('style', 'width: 100%');\n", + " this.root.append(nav_element);\n", + "\n", + " // Define a callback function for later on.\n", + " function toolbar_event(event) {\n", + " return fig.toolbar_button_onclick(event['data']);\n", + " }\n", + " function toolbar_mouse_event(event) {\n", + " return fig.toolbar_button_onmouseover(event['data']);\n", + " }\n", + "\n", + " for(var toolbar_ind in mpl.toolbar_items){\n", + " var name = mpl.toolbar_items[toolbar_ind][0];\n", + " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", + " var image = mpl.toolbar_items[toolbar_ind][2];\n", + " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", + "\n", + " if (!name) { continue; };\n", + "\n", + " var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n", + " button.click(method_name, toolbar_event);\n", + " button.mouseover(tooltip, toolbar_mouse_event);\n", + " nav_element.append(button);\n", + " }\n", + "\n", + " // Add the status bar.\n", + " var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n", + " nav_element.append(status_bar);\n", + " this.message = status_bar[0];\n", + "\n", + " // Add the close button to the window.\n", + " var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n", + " var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n", + " button.click(function (evt) { fig.handle_close(fig, {}); } );\n", + " button.mouseover('Stop Interaction', toolbar_mouse_event);\n", + " buttongrp.append(button);\n", + " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", + " titlebar.prepend(buttongrp);\n", + "}\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(el){\n", + " var fig = this\n", + " el.on(\"remove\", function(){\n", + "\tfig.close_ws(fig, {});\n", + " });\n", + "}\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(el){\n", + " // this is important to make the div 'focusable\n", + " el.attr('tabindex', 0)\n", + " // reach out to IPython and tell the keyboard manager to turn it's self\n", + " // off when our div gets focus\n", + "\n", + " // location in version 3\n", + " if (IPython.notebook.keyboard_manager) {\n", + " IPython.notebook.keyboard_manager.register_events(el);\n", + " }\n", + " else {\n", + " // location in version 2\n", + " IPython.keyboard_manager.register_events(el);\n", + " }\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._key_event_extra = function(event, name) {\n", + " var manager = IPython.notebook.keyboard_manager;\n", + " if (!manager)\n", + " manager = IPython.keyboard_manager;\n", + "\n", + " // Check for shift+enter\n", + " if (event.shiftKey && event.which == 13) {\n", + " this.canvas_div.blur();\n", + " event.shiftKey = false;\n", + " // Send a \"J\" for go to next cell\n", + " event.which = 74;\n", + " event.keyCode = 74;\n", + " manager.command_mode();\n", + " manager.handle_keydown(event);\n", + " }\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_save = function(fig, msg) {\n", + " fig.ondownload(fig, null);\n", + "}\n", + "\n", + "\n", + "mpl.find_output_cell = function(html_output) {\n", + " // Return the cell and output element which can be found *uniquely* in the notebook.\n", + " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", + " // IPython event is triggered only after the cells have been serialised, which for\n", + " // our purposes (turning an active figure into a static one), is too late.\n", + " var cells = IPython.notebook.get_cells();\n", + " var ncells = cells.length;\n", + " for (var i=0; i<ncells; i++) {\n", + " var cell = cells[i];\n", + " if (cell.cell_type === 'code'){\n", + " for (var j=0; j<cell.output_area.outputs.length; j++) {\n", + " var data = cell.output_area.outputs[j];\n", + " if (data.data) {\n", + " // IPython >= 3 moved mimebundle to data attribute of output\n", + " data = data.data;\n", + " }\n", + " if (data['text/html'] == html_output) {\n", + " return [cell, data, j];\n", + " }\n", + " }\n", + " }\n", + " }\n", + "}\n", + "\n", + "// Register the function which deals with the matplotlib target/channel.\n", + "// The kernel may be null if the page has been refreshed.\n", + "if (IPython.notebook.kernel != null) {\n", + " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", + "}\n" + ], + "text/plain": [ + "<IPython.core.display.Javascript object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "<img src=\"data:image/png;base64,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\" width=\"640\">" + ], + "text/plain": [ + "<IPython.core.display.HTML object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "[<matplotlib.lines.Line2D at 0x1c2bbe7dd8>]" + ] + }, + "execution_count": 43, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pl.plot(tg,hg)" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'second'" + ] + }, + "execution_count": 44, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "gxx_golden_v[0].stats.data_interval" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": {}, + "outputs": [], + "source": [ + "# excerpted from https://github.com/scipy/scipy/issues/7725#issuecomment-322094749\n", + "sample_rate = 10.0\n", + "cutoff = 0.2\n", + "width = 0.3\n", + "stop_db = 50.0\n", + "stop_db = np.abs(stop_db)\n", + "\n", + "# Convert to normalized frequencies\n", + "nyq = 0.5*sample_rate\n", + "cutoff = cutoff / nyq\n", + "width = width / nyq\n", + "\n", + "numtaps, beta = sps.kaiserord(ripple=stop_db, width=width)\n", + "numtaps |= 1\n", + "taps = sps.firwin(numtaps, cutoff, window=('kaiser', beta), scale=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([-4.52198796e-05, -1.11619355e-04, -2.01483397e-04, -3.16506684e-04,\n", + " -4.57626335e-04, -6.24859943e-04, -8.17155093e-04, -1.03225668e-03,\n", + " -1.26659826e-03, -1.51522326e-03, -1.77174156e-03, -2.02832596e-03,\n", + " -2.27575221e-03, -2.50348516e-03, -2.69981225e-03, -2.85202413e-03,\n", + " -2.94664077e-03, -2.96967983e-03, -2.90696256e-03, -2.74445127e-03,\n", + " -2.46861053e-03, -2.06678395e-03, -1.52757659e-03, -8.41232992e-04,\n", + " 8.97254861e-19, 1.00153625e-03, 2.16614984e-03, 3.49372106e-03,\n", + " 4.98103797e-03, 6.62166161e-03, 8.40586129e-03, 1.03206248e-02,\n", + " 1.23497468e-02, 1.44739951e-02, 1.66713562e-02, 1.89173528e-02,\n", + " 2.11854322e-02, 2.34474143e-02, 2.56739920e-02, 2.78352727e-02,\n", + " 2.99013480e-02, 3.18428788e-02, 3.36316814e-02, 3.52413005e-02,\n", + " 3.66475558e-02, 3.78290461e-02, 3.87676015e-02, 3.94486690e-02,\n", + " 3.98616244e-02, 4.00000000e-02, 3.98616244e-02, 3.94486690e-02,\n", + " 3.87676015e-02, 3.78290461e-02, 3.66475558e-02, 3.52413005e-02,\n", + " 3.36316814e-02, 3.18428788e-02, 2.99013480e-02, 2.78352727e-02,\n", + " 2.56739920e-02, 2.34474143e-02, 2.11854322e-02, 1.89173528e-02,\n", + " 1.66713562e-02, 1.44739951e-02, 1.23497468e-02, 1.03206248e-02,\n", + " 8.40586129e-03, 6.62166161e-03, 4.98103797e-03, 3.49372106e-03,\n", + " 2.16614984e-03, 1.00153625e-03, 8.97254861e-19, -8.41232992e-04,\n", + " -1.52757659e-03, -2.06678395e-03, -2.46861053e-03, -2.74445127e-03,\n", + " -2.90696256e-03, -2.96967983e-03, -2.94664077e-03, -2.85202413e-03,\n", + " -2.69981225e-03, -2.50348516e-03, -2.27575221e-03, -2.02832596e-03,\n", + " -1.77174156e-03, -1.51522326e-03, -1.26659826e-03, -1.03225668e-03,\n", + " -8.17155093e-04, -6.24859943e-04, -4.57626335e-04, -3.16506684e-04,\n", + " -2.01483397e-04, -1.11619355e-04, -4.52198796e-05])" + ] + }, + "execution_count": 46, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "taps" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(99,)" + ] + }, + "execution_count": 47, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "taps.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": {}, + "outputs": [ + { + "data": { + "application/javascript": [ + "/* Put everything inside the global mpl namespace */\n", + "window.mpl = {};\n", + "\n", + "\n", + "mpl.get_websocket_type = function() {\n", + " if (typeof(WebSocket) !== 'undefined') {\n", + " return WebSocket;\n", + " } else if (typeof(MozWebSocket) !== 'undefined') {\n", + " return MozWebSocket;\n", + " } else {\n", + " alert('Your browser does not have WebSocket support.' +\n", + " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", + " 'Firefox 4 and 5 are also supported but you ' +\n", + " 'have to enable WebSockets in about:config.');\n", + " };\n", + "}\n", + "\n", + "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", + " this.id = figure_id;\n", + "\n", + " this.ws = websocket;\n", + "\n", + " this.supports_binary = (this.ws.binaryType != undefined);\n", + "\n", + " if (!this.supports_binary) {\n", + " var warnings = document.getElementById(\"mpl-warnings\");\n", + " if (warnings) {\n", + " warnings.style.display = 'block';\n", + " warnings.textContent = (\n", + " \"This browser does not support binary websocket messages. \" +\n", + " \"Performance may be slow.\");\n", + " }\n", + " }\n", + "\n", + " this.imageObj = new Image();\n", + "\n", + " this.context = undefined;\n", + " this.message = undefined;\n", + " this.canvas = undefined;\n", + " this.rubberband_canvas = undefined;\n", + " this.rubberband_context = undefined;\n", + " this.format_dropdown = undefined;\n", + "\n", + " this.image_mode = 'full';\n", + "\n", + " this.root = $('<div/>');\n", + " this._root_extra_style(this.root)\n", + " this.root.attr('style', 'display: inline-block');\n", + "\n", + " $(parent_element).append(this.root);\n", + "\n", + " this._init_header(this);\n", + " this._init_canvas(this);\n", + " this._init_toolbar(this);\n", + "\n", + " var fig = this;\n", + "\n", + " this.waiting = false;\n", + "\n", + " this.ws.onopen = function () {\n", + " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", + " fig.send_message(\"send_image_mode\", {});\n", + " if (mpl.ratio != 1) {\n", + " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", + " }\n", + " fig.send_message(\"refresh\", {});\n", + " }\n", + "\n", + " this.imageObj.onload = function() {\n", + " if (fig.image_mode == 'full') {\n", + " // Full images could contain transparency (where diff images\n", + " // almost always do), so we need to clear the canvas so that\n", + " // there is no ghosting.\n", + " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", + " }\n", + " fig.context.drawImage(fig.imageObj, 0, 0);\n", + " };\n", + "\n", + " this.imageObj.onunload = function() {\n", + " fig.ws.close();\n", + " }\n", + "\n", + " this.ws.onmessage = this._make_on_message_function(this);\n", + "\n", + " this.ondownload = ondownload;\n", + "}\n", + "\n", + "mpl.figure.prototype._init_header = function() {\n", + " var titlebar = $(\n", + " '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n", + " 'ui-helper-clearfix\"/>');\n", + " var titletext = $(\n", + " '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n", + " 'text-align: center; padding: 3px;\"/>');\n", + " titlebar.append(titletext)\n", + " this.root.append(titlebar);\n", + " this.header = titletext[0];\n", + "}\n", + "\n", + "\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._init_canvas = function() {\n", + " var fig = this;\n", + "\n", + " var canvas_div = $('<div/>');\n", + "\n", + " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", + "\n", + " function canvas_keyboard_event(event) {\n", + " return fig.key_event(event, event['data']);\n", + " }\n", + "\n", + " canvas_div.keydown('key_press', canvas_keyboard_event);\n", + " canvas_div.keyup('key_release', canvas_keyboard_event);\n", + " this.canvas_div = canvas_div\n", + " this._canvas_extra_style(canvas_div)\n", + " this.root.append(canvas_div);\n", + "\n", + " var canvas = $('<canvas/>');\n", + " canvas.addClass('mpl-canvas');\n", + " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", + "\n", + " this.canvas = canvas[0];\n", + " this.context = canvas[0].getContext(\"2d\");\n", + "\n", + " var backingStore = this.context.backingStorePixelRatio ||\n", + "\tthis.context.webkitBackingStorePixelRatio ||\n", + "\tthis.context.mozBackingStorePixelRatio ||\n", + "\tthis.context.msBackingStorePixelRatio ||\n", + "\tthis.context.oBackingStorePixelRatio ||\n", + "\tthis.context.backingStorePixelRatio || 1;\n", + "\n", + " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", + "\n", + " var rubberband = $('<canvas/>');\n", + " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", + "\n", + " var pass_mouse_events = true;\n", + "\n", + " canvas_div.resizable({\n", + " start: function(event, ui) {\n", + " pass_mouse_events = false;\n", + " },\n", + " resize: function(event, ui) {\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " stop: function(event, ui) {\n", + " pass_mouse_events = true;\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " });\n", + "\n", + " function mouse_event_fn(event) {\n", + " if (pass_mouse_events)\n", + " return fig.mouse_event(event, event['data']);\n", + " }\n", + "\n", + " rubberband.mousedown('button_press', mouse_event_fn);\n", + " rubberband.mouseup('button_release', mouse_event_fn);\n", + " // Throttle sequential mouse events to 1 every 20ms.\n", + " rubberband.mousemove('motion_notify', mouse_event_fn);\n", + "\n", + " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", + " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", + "\n", + " canvas_div.on(\"wheel\", function (event) {\n", + " event = event.originalEvent;\n", + " event['data'] = 'scroll'\n", + " if (event.deltaY < 0) {\n", + " event.step = 1;\n", + " } else {\n", + " event.step = -1;\n", + " }\n", + " mouse_event_fn(event);\n", + " });\n", + "\n", + " canvas_div.append(canvas);\n", + " canvas_div.append(rubberband);\n", + "\n", + " this.rubberband = rubberband;\n", + " this.rubberband_canvas = rubberband[0];\n", + " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", + " this.rubberband_context.strokeStyle = \"#000000\";\n", + "\n", + " this._resize_canvas = function(width, height) {\n", + " // Keep the size of the canvas, canvas container, and rubber band\n", + " // canvas in synch.\n", + " canvas_div.css('width', width)\n", + " canvas_div.css('height', height)\n", + "\n", + " canvas.attr('width', width * mpl.ratio);\n", + " canvas.attr('height', height * mpl.ratio);\n", + " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", + "\n", + " rubberband.attr('width', width);\n", + " rubberband.attr('height', height);\n", + " }\n", + "\n", + " // Set the figure to an initial 600x600px, this will subsequently be updated\n", + " // upon first draw.\n", + " this._resize_canvas(600, 600);\n", + "\n", + " // Disable right mouse context menu.\n", + " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", + " return false;\n", + " });\n", + "\n", + " function set_focus () {\n", + " canvas.focus();\n", + " canvas_div.focus();\n", + " }\n", + "\n", + " window.setTimeout(set_focus, 100);\n", + "}\n", + "\n", + "mpl.figure.prototype._init_toolbar = function() {\n", + " var fig = this;\n", + "\n", + " var nav_element = $('<div/>')\n", + " nav_element.attr('style', 'width: 100%');\n", + " this.root.append(nav_element);\n", + "\n", + " // Define a callback function for later on.\n", + " function toolbar_event(event) {\n", + " return fig.toolbar_button_onclick(event['data']);\n", + " }\n", + " function toolbar_mouse_event(event) {\n", + " return fig.toolbar_button_onmouseover(event['data']);\n", + " }\n", + "\n", + " for(var toolbar_ind in mpl.toolbar_items) {\n", + " var name = mpl.toolbar_items[toolbar_ind][0];\n", + " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", + " var image = mpl.toolbar_items[toolbar_ind][2];\n", + " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", + "\n", + " if (!name) {\n", + " // put a spacer in here.\n", + " continue;\n", + " }\n", + " var button = $('<button/>');\n", + " button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n", + " 'ui-button-icon-only');\n", + " button.attr('role', 'button');\n", + " button.attr('aria-disabled', 'false');\n", + " button.click(method_name, toolbar_event);\n", + " button.mouseover(tooltip, toolbar_mouse_event);\n", + "\n", + " var icon_img = $('<span/>');\n", + " icon_img.addClass('ui-button-icon-primary ui-icon');\n", + " icon_img.addClass(image);\n", + " icon_img.addClass('ui-corner-all');\n", + "\n", + " var tooltip_span = $('<span/>');\n", + " tooltip_span.addClass('ui-button-text');\n", + " tooltip_span.html(tooltip);\n", + "\n", + " button.append(icon_img);\n", + " button.append(tooltip_span);\n", + "\n", + " nav_element.append(button);\n", + " }\n", + "\n", + " var fmt_picker_span = $('<span/>');\n", + "\n", + " var fmt_picker = $('<select/>');\n", + " fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n", + " fmt_picker_span.append(fmt_picker);\n", + " nav_element.append(fmt_picker_span);\n", + " this.format_dropdown = fmt_picker[0];\n", + "\n", + " for (var ind in mpl.extensions) {\n", + " var fmt = mpl.extensions[ind];\n", + " var option = $(\n", + " '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n", + " fmt_picker.append(option)\n", + " }\n", + "\n", + " // Add hover states to the ui-buttons\n", + " $( \".ui-button\" ).hover(\n", + " function() { $(this).addClass(\"ui-state-hover\");},\n", + " function() { $(this).removeClass(\"ui-state-hover\");}\n", + " );\n", + "\n", + " var status_bar = $('<span class=\"mpl-message\"/>');\n", + " nav_element.append(status_bar);\n", + " this.message = status_bar[0];\n", + "}\n", + "\n", + "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n", + " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", + " // which will in turn request a refresh of the image.\n", + " this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n", + "}\n", + "\n", + "mpl.figure.prototype.send_message = function(type, properties) {\n", + " properties['type'] = type;\n", + " properties['figure_id'] = this.id;\n", + " this.ws.send(JSON.stringify(properties));\n", + "}\n", + "\n", + "mpl.figure.prototype.send_draw_message = function() {\n", + " if (!this.waiting) {\n", + " this.waiting = true;\n", + " this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n", + " }\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype.handle_save = function(fig, msg) {\n", + " var format_dropdown = fig.format_dropdown;\n", + " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", + " fig.ondownload(fig, format);\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype.handle_resize = function(fig, msg) {\n", + " var size = msg['size'];\n", + " if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n", + " fig._resize_canvas(size[0], size[1]);\n", + " fig.send_message(\"refresh\", {});\n", + " };\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n", + " var x0 = msg['x0'] / mpl.ratio;\n", + " var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n", + " var x1 = msg['x1'] / mpl.ratio;\n", + " var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n", + " x0 = Math.floor(x0) + 0.5;\n", + " y0 = Math.floor(y0) + 0.5;\n", + " x1 = Math.floor(x1) + 0.5;\n", + " y1 = Math.floor(y1) + 0.5;\n", + " var min_x = Math.min(x0, x1);\n", + " var min_y = Math.min(y0, y1);\n", + " var width = Math.abs(x1 - x0);\n", + " var height = Math.abs(y1 - y0);\n", + "\n", + " fig.rubberband_context.clearRect(\n", + " 0, 0, fig.canvas.width, fig.canvas.height);\n", + "\n", + " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n", + " // Updates the figure title.\n", + " fig.header.textContent = msg['label'];\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n", + " var cursor = msg['cursor'];\n", + " switch(cursor)\n", + " {\n", + " case 0:\n", + " cursor = 'pointer';\n", + " break;\n", + " case 1:\n", + " cursor = 'default';\n", + " break;\n", + " case 2:\n", + " cursor = 'crosshair';\n", + " break;\n", + " case 3:\n", + " cursor = 'move';\n", + " break;\n", + " }\n", + " fig.rubberband_canvas.style.cursor = cursor;\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_message = function(fig, msg) {\n", + " fig.message.textContent = msg['message'];\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_draw = function(fig, msg) {\n", + " // Request the server to send over a new figure.\n", + " fig.send_draw_message();\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n", + " fig.image_mode = msg['mode'];\n", + "}\n", + "\n", + "mpl.figure.prototype.updated_canvas_event = function() {\n", + " // Called whenever the canvas gets updated.\n", + " this.send_message(\"ack\", {});\n", + "}\n", + "\n", + "// A function to construct a web socket function for onmessage handling.\n", + "// Called in the figure constructor.\n", + "mpl.figure.prototype._make_on_message_function = function(fig) {\n", + " return function socket_on_message(evt) {\n", + " if (evt.data instanceof Blob) {\n", + " /* FIXME: We get \"Resource interpreted as Image but\n", + " * transferred with MIME type text/plain:\" errors on\n", + " * Chrome. But how to set the MIME type? It doesn't seem\n", + " * to be part of the websocket stream */\n", + " evt.data.type = \"image/png\";\n", + "\n", + " /* Free the memory for the previous frames */\n", + " if (fig.imageObj.src) {\n", + " (window.URL || window.webkitURL).revokeObjectURL(\n", + " fig.imageObj.src);\n", + " }\n", + "\n", + " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", + " evt.data);\n", + " fig.updated_canvas_event();\n", + " fig.waiting = false;\n", + " return;\n", + " }\n", + " else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n", + " fig.imageObj.src = evt.data;\n", + " fig.updated_canvas_event();\n", + " fig.waiting = false;\n", + " return;\n", + " }\n", + "\n", + " var msg = JSON.parse(evt.data);\n", + " var msg_type = msg['type'];\n", + "\n", + " // Call the \"handle_{type}\" callback, which takes\n", + " // the figure and JSON message as its only arguments.\n", + " try {\n", + " var callback = fig[\"handle_\" + msg_type];\n", + " } catch (e) {\n", + " console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n", + " return;\n", + " }\n", + "\n", + " if (callback) {\n", + " try {\n", + " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", + " callback(fig, msg);\n", + " } catch (e) {\n", + " console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n", + " }\n", + " }\n", + " };\n", + "}\n", + "\n", + "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", + "mpl.findpos = function(e) {\n", + " //this section is from http://www.quirksmode.org/js/events_properties.html\n", + " var targ;\n", + " if (!e)\n", + " e = window.event;\n", + " if (e.target)\n", + " targ = e.target;\n", + " else if (e.srcElement)\n", + " targ = e.srcElement;\n", + " if (targ.nodeType == 3) // defeat Safari bug\n", + " targ = targ.parentNode;\n", + "\n", + " // jQuery normalizes the pageX and pageY\n", + " // pageX,Y are the mouse positions relative to the document\n", + " // offset() returns the position of the element relative to the document\n", + " var x = e.pageX - $(targ).offset().left;\n", + " var y = e.pageY - $(targ).offset().top;\n", + "\n", + " return {\"x\": x, \"y\": y};\n", + "};\n", + "\n", + "/*\n", + " * return a copy of an object with only non-object keys\n", + " * we need this to avoid circular references\n", + " * http://stackoverflow.com/a/24161582/3208463\n", + " */\n", + "function simpleKeys (original) {\n", + " return Object.keys(original).reduce(function (obj, key) {\n", + " if (typeof original[key] !== 'object')\n", + " obj[key] = original[key]\n", + " return obj;\n", + " }, {});\n", + "}\n", + "\n", + "mpl.figure.prototype.mouse_event = function(event, name) {\n", + " var canvas_pos = mpl.findpos(event)\n", + "\n", + " if (name === 'button_press')\n", + " {\n", + " this.canvas.focus();\n", + " this.canvas_div.focus();\n", + " }\n", + "\n", + " var x = canvas_pos.x * mpl.ratio;\n", + " var y = canvas_pos.y * mpl.ratio;\n", + "\n", + " this.send_message(name, {x: x, y: y, button: event.button,\n", + " step: event.step,\n", + " guiEvent: simpleKeys(event)});\n", + "\n", + " /* This prevents the web browser from automatically changing to\n", + " * the text insertion cursor when the button is pressed. We want\n", + " * to control all of the cursor setting manually through the\n", + " * 'cursor' event from matplotlib */\n", + " event.preventDefault();\n", + " return false;\n", + "}\n", + "\n", + "mpl.figure.prototype._key_event_extra = function(event, name) {\n", + " // Handle any extra behaviour associated with a key event\n", + "}\n", + "\n", + "mpl.figure.prototype.key_event = function(event, name) {\n", + "\n", + " // Prevent repeat events\n", + " if (name == 'key_press')\n", + " {\n", + " if (event.which === this._key)\n", + " return;\n", + " else\n", + " this._key = event.which;\n", + " }\n", + " if (name == 'key_release')\n", + " this._key = null;\n", + "\n", + " var value = '';\n", + " if (event.ctrlKey && event.which != 17)\n", + " value += \"ctrl+\";\n", + " if (event.altKey && event.which != 18)\n", + " value += \"alt+\";\n", + " if (event.shiftKey && event.which != 16)\n", + " value += \"shift+\";\n", + "\n", + " value += 'k';\n", + " value += event.which.toString();\n", + "\n", + " this._key_event_extra(event, name);\n", + "\n", + " this.send_message(name, {key: value,\n", + " guiEvent: simpleKeys(event)});\n", + " return false;\n", + "}\n", + "\n", + "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n", + " if (name == 'download') {\n", + " this.handle_save(this, null);\n", + " } else {\n", + " this.send_message(\"toolbar_button\", {name: name});\n", + " }\n", + "};\n", + "\n", + "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n", + " this.message.textContent = tooltip;\n", + "};\n", + "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", + "\n", + "mpl.extensions = [\"eps\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\"];\n", + "\n", + "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n", + " // Create a \"websocket\"-like object which calls the given IPython comm\n", + " // object with the appropriate methods. Currently this is a non binary\n", + " // socket, so there is still some room for performance tuning.\n", + " var ws = {};\n", + "\n", + " ws.close = function() {\n", + " comm.close()\n", + " };\n", + " ws.send = function(m) {\n", + " //console.log('sending', m);\n", + " comm.send(m);\n", + " };\n", + " // Register the callback with on_msg.\n", + " comm.on_msg(function(msg) {\n", + " //console.log('receiving', msg['content']['data'], msg);\n", + " // Pass the mpl event to the overridden (by mpl) onmessage function.\n", + " ws.onmessage(msg['content']['data'])\n", + " });\n", + " return ws;\n", + "}\n", + "\n", + "mpl.mpl_figure_comm = function(comm, msg) {\n", + " // This is the function which gets called when the mpl process\n", + " // starts-up an IPython Comm through the \"matplotlib\" channel.\n", + "\n", + " var id = msg.content.data.id;\n", + " // Get hold of the div created by the display call when the Comm\n", + " // socket was opened in Python.\n", + " var element = $(\"#\" + id);\n", + " var ws_proxy = comm_websocket_adapter(comm)\n", + "\n", + " function ondownload(figure, format) {\n", + " window.open(figure.imageObj.src);\n", + " }\n", + "\n", + " var fig = new mpl.figure(id, ws_proxy,\n", + " ondownload,\n", + " element.get(0));\n", + "\n", + " // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n", + " // web socket which is closed, not our websocket->open comm proxy.\n", + " ws_proxy.onopen();\n", + "\n", + " fig.parent_element = element.get(0);\n", + " fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n", + " if (!fig.cell_info) {\n", + " console.error(\"Failed to find cell for figure\", id, fig);\n", + " return;\n", + " }\n", + "\n", + " var output_index = fig.cell_info[2]\n", + " var cell = fig.cell_info[0];\n", + "\n", + "};\n", + "\n", + "mpl.figure.prototype.handle_close = function(fig, msg) {\n", + " var width = fig.canvas.width/mpl.ratio\n", + " fig.root.unbind('remove')\n", + "\n", + " // Update the output cell to use the data from the current canvas.\n", + " fig.push_to_output();\n", + " var dataURL = fig.canvas.toDataURL();\n", + " // Re-enable the keyboard manager in IPython - without this line, in FF,\n", + " // the notebook keyboard shortcuts fail.\n", + " IPython.keyboard_manager.enable()\n", + " $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n", + " fig.close_ws(fig, msg);\n", + "}\n", + "\n", + "mpl.figure.prototype.close_ws = function(fig, msg){\n", + " fig.send_message('closing', msg);\n", + " // fig.ws.close()\n", + "}\n", + "\n", + "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n", + " // Turn the data on the canvas into data in the output cell.\n", + " var width = this.canvas.width/mpl.ratio\n", + " var dataURL = this.canvas.toDataURL();\n", + " this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n", + "}\n", + "\n", + "mpl.figure.prototype.updated_canvas_event = function() {\n", + " // Tell IPython that the notebook contents must change.\n", + " IPython.notebook.set_dirty(true);\n", + " this.send_message(\"ack\", {});\n", + " var fig = this;\n", + " // Wait a second, then push the new image to the DOM so\n", + " // that it is saved nicely (might be nice to debounce this).\n", + " setTimeout(function () { fig.push_to_output() }, 1000);\n", + "}\n", + "\n", + "mpl.figure.prototype._init_toolbar = function() {\n", + " var fig = this;\n", + "\n", + " var nav_element = $('<div/>')\n", + " nav_element.attr('style', 'width: 100%');\n", + " this.root.append(nav_element);\n", + "\n", + " // Define a callback function for later on.\n", + " function toolbar_event(event) {\n", + " return fig.toolbar_button_onclick(event['data']);\n", + " }\n", + " function toolbar_mouse_event(event) {\n", + " return fig.toolbar_button_onmouseover(event['data']);\n", + " }\n", + "\n", + " for(var toolbar_ind in mpl.toolbar_items){\n", + " var name = mpl.toolbar_items[toolbar_ind][0];\n", + " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", + " var image = mpl.toolbar_items[toolbar_ind][2];\n", + " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", + "\n", + " if (!name) { continue; };\n", + "\n", + " var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n", + " button.click(method_name, toolbar_event);\n", + " button.mouseover(tooltip, toolbar_mouse_event);\n", + " nav_element.append(button);\n", + " }\n", + "\n", + " // Add the status bar.\n", + " var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n", + " nav_element.append(status_bar);\n", + " this.message = status_bar[0];\n", + "\n", + " // Add the close button to the window.\n", + " var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n", + " var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n", + " button.click(function (evt) { fig.handle_close(fig, {}); } );\n", + " button.mouseover('Stop Interaction', toolbar_mouse_event);\n", + " buttongrp.append(button);\n", + " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", + " titlebar.prepend(buttongrp);\n", + "}\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(el){\n", + " var fig = this\n", + " el.on(\"remove\", function(){\n", + "\tfig.close_ws(fig, {});\n", + " });\n", + "}\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(el){\n", + " // this is important to make the div 'focusable\n", + " el.attr('tabindex', 0)\n", + " // reach out to IPython and tell the keyboard manager to turn it's self\n", + " // off when our div gets focus\n", + "\n", + " // location in version 3\n", + " if (IPython.notebook.keyboard_manager) {\n", + " IPython.notebook.keyboard_manager.register_events(el);\n", + " }\n", + " else {\n", + " // location in version 2\n", + " IPython.keyboard_manager.register_events(el);\n", + " }\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._key_event_extra = function(event, name) {\n", + " var manager = IPython.notebook.keyboard_manager;\n", + " if (!manager)\n", + " manager = IPython.keyboard_manager;\n", + "\n", + " // Check for shift+enter\n", + " if (event.shiftKey && event.which == 13) {\n", + " this.canvas_div.blur();\n", + " event.shiftKey = false;\n", + " // Send a \"J\" for go to next cell\n", + " event.which = 74;\n", + " event.keyCode = 74;\n", + " manager.command_mode();\n", + " manager.handle_keydown(event);\n", + " }\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_save = function(fig, msg) {\n", + " fig.ondownload(fig, null);\n", + "}\n", + "\n", + "\n", + "mpl.find_output_cell = function(html_output) {\n", + " // Return the cell and output element which can be found *uniquely* in the notebook.\n", + " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", + " // IPython event is triggered only after the cells have been serialised, which for\n", + " // our purposes (turning an active figure into a static one), is too late.\n", + " var cells = IPython.notebook.get_cells();\n", + " var ncells = cells.length;\n", + " for (var i=0; i<ncells; i++) {\n", + " var cell = cells[i];\n", + " if (cell.cell_type === 'code'){\n", + " for (var j=0; j<cell.output_area.outputs.length; j++) {\n", + " var data = cell.output_area.outputs[j];\n", + " if (data.data) {\n", + " // IPython >= 3 moved mimebundle to data attribute of output\n", + " data = data.data;\n", + " }\n", + " if (data['text/html'] == html_output) {\n", + " return [cell, data, j];\n", + " }\n", + " }\n", + " }\n", + " }\n", + "}\n", + "\n", + "// Register the function which deals with the matplotlib target/channel.\n", + "// The kernel may be null if the page has been refreshed.\n", + "if (IPython.notebook.kernel != null) {\n", + " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", + "}\n" + ], + "text/plain": [ + "<IPython.core.display.Javascript object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAgAElEQVR4XuydB1hWZRvH/0wRFdwDFAfuiaCiIDgA06xcudNSK81yNi213KY5y22lmXtlmaYiioIoAuIGB25wK+Jgv991XoPPUgPeh/d9z/if6/L6rs/33Oe579/zP97/zniOhU6n04EbCZAACZAACZAACZCAZghY0ABqZq5ZKAmQAAmQAAmQAAnoCdAAUggkQAIkQAIkQAIkoDECNIAam3CWSwIkQAIkQAIkQAI0gNQACZAACZAACZAACWiMAA2gxiac5ZIACZAACZAACZAADSA1QAIkQAIkQAIkQAIaI0ADqLEJZ7kkQAIkQAIkQAIkQANIDZAACZAACZAACZCAxgjQAGpswlkuCZAACZAACZAACdAAUgMkQAIkQAIkQAIkoDECNIAam3CWSwIkQAIkQAIkQAI0gNQACZAACZAACZAACWiMAA2gxiac5ZIACZAACZAACZAADSA1QAIkQAIkQAIkQAIaI0ADqLEJZ7kkQAIkQAIkQAIkQANIDZAACZAACZAACZCAxgjQAGpswlkuCZAACZAACZAACdAAUgMkQAIkQAIkQAIkoDECNIAam3CWSwIkQAIkQAIkQAI0gNQACZAACZAACZAACWiMAA2gxiac5ZIACZAACZAACZAADSA1QAIkQAIkQAIkQAIaI0ADqLEJZ7kkQAIkQAIkQAIkQANIDZAACZAACZAACZCAxgjQAGpswlkuCZAACZAACZAACdAAUgMkQAIkQAIkQAIkoDECNIAam3CWSwIkQAIkQAIkQAI0gNQACZAACZAACZAACWiMAA2gxiac5ZIACZAACZAACZAADSA1QAIkQAIkQAIkQAIaI0ADqLEJZ7kkQAIkQAIkQAIkQANIDZAACZAACZAACZCAxgjQAGpswlkuCZAACZAACZAACdAAUgMkQAIkQAIkQAIkoDECNIAam3CWSwIkQAIkQAIkQAI0gNQACZAACZAACZAACWiMAA2gxiac5ZIACZAACZAACZAADSA1QAIkQAIkQAIkQAIaI0ADqLEJZ7kkQAIkQAIkQAIkQANIDZAACZAACZAACZCAxgjQAGpswlkuCZAACZAACZAACdAAUgMkQAIkQAIkQAIkoDECNIAam3CWSwIkQAIkQAIkQAI0gNQACZAACZAACZAACWiM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\" width=\"640\">" + ], + "text/plain": [ + "<IPython.core.display.HTML object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "[<matplotlib.lines.Line2D at 0x1c2bc28a58>]" + ] + }, + "execution_count": 48, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pl.plot(taps)" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": {}, + "outputs": [], + "source": [ + "one_second_filter = taps/np.sum(taps)" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(9101, 99)" + ] + }, + "execution_count": 50, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "window = 99\n", + "shape = hg.shape[:-1] + (hg.shape[-1] - window + 1, window)\n", + "strides = hg.strides + (hg.strides[-1],)\n", + "as_s = npls.as_strided(hg, shape=shape, strides=strides, writeable=False)\n", + "as_s.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": {}, + "outputs": [], + "source": [ + "t_filt_g = np.linspace(0,(len(hg)-99)/10,9101)" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([0.000e+00, 1.000e-01, 2.000e-01, ..., 9.098e+02, 9.099e+02,\n", + " 9.100e+02])" + ] + }, + "execution_count": 52, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "t_filt_g" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": {}, + "outputs": [], + "source": [ + "hg2 = np.dot(one_second_filter, as_s.T)" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": {}, + "outputs": [ + { + "data": { + "application/javascript": [ + "/* Put everything inside the global mpl namespace */\n", + "window.mpl = {};\n", + "\n", + "\n", + "mpl.get_websocket_type = function() {\n", + " if (typeof(WebSocket) !== 'undefined') {\n", + " return WebSocket;\n", + " } else if (typeof(MozWebSocket) !== 'undefined') {\n", + " return MozWebSocket;\n", + " } else {\n", + " alert('Your browser does not have WebSocket support.' +\n", + " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", + " 'Firefox 4 and 5 are also supported but you ' +\n", + " 'have to enable WebSockets in about:config.');\n", + " };\n", + "}\n", + "\n", + "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", + " this.id = figure_id;\n", + "\n", + " this.ws = websocket;\n", + "\n", + " this.supports_binary = (this.ws.binaryType != undefined);\n", + "\n", + " if (!this.supports_binary) {\n", + " var warnings = document.getElementById(\"mpl-warnings\");\n", + " if (warnings) {\n", + " warnings.style.display = 'block';\n", + " warnings.textContent = (\n", + " \"This browser does not support binary websocket messages. \" +\n", + " \"Performance may be slow.\");\n", + " }\n", + " }\n", + "\n", + " this.imageObj = new Image();\n", + "\n", + " this.context = undefined;\n", + " this.message = undefined;\n", + " this.canvas = undefined;\n", + " this.rubberband_canvas = undefined;\n", + " this.rubberband_context = undefined;\n", + " this.format_dropdown = undefined;\n", + "\n", + " this.image_mode = 'full';\n", + "\n", + " this.root = $('<div/>');\n", + " this._root_extra_style(this.root)\n", + " this.root.attr('style', 'display: inline-block');\n", + "\n", + " $(parent_element).append(this.root);\n", + "\n", + " this._init_header(this);\n", + " this._init_canvas(this);\n", + " this._init_toolbar(this);\n", + "\n", + " var fig = this;\n", + "\n", + " this.waiting = false;\n", + "\n", + " this.ws.onopen = function () {\n", + " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", + " fig.send_message(\"send_image_mode\", {});\n", + " if (mpl.ratio != 1) {\n", + " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", + " }\n", + " fig.send_message(\"refresh\", {});\n", + " }\n", + "\n", + " this.imageObj.onload = function() {\n", + " if (fig.image_mode == 'full') {\n", + " // Full images could contain transparency (where diff images\n", + " // almost always do), so we need to clear the canvas so that\n", + " // there is no ghosting.\n", + " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", + " }\n", + " fig.context.drawImage(fig.imageObj, 0, 0);\n", + " };\n", + "\n", + " this.imageObj.onunload = function() {\n", + " fig.ws.close();\n", + " }\n", + "\n", + " this.ws.onmessage = this._make_on_message_function(this);\n", + "\n", + " this.ondownload = ondownload;\n", + "}\n", + "\n", + "mpl.figure.prototype._init_header = function() {\n", + " var titlebar = $(\n", + " '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n", + " 'ui-helper-clearfix\"/>');\n", + " var titletext = $(\n", + " '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n", + " 'text-align: center; padding: 3px;\"/>');\n", + " titlebar.append(titletext)\n", + " this.root.append(titlebar);\n", + " this.header = titletext[0];\n", + "}\n", + "\n", + "\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._init_canvas = function() {\n", + " var fig = this;\n", + "\n", + " var canvas_div = $('<div/>');\n", + "\n", + " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", + "\n", + " function canvas_keyboard_event(event) {\n", + " return fig.key_event(event, event['data']);\n", + " }\n", + "\n", + " canvas_div.keydown('key_press', canvas_keyboard_event);\n", + " canvas_div.keyup('key_release', canvas_keyboard_event);\n", + " this.canvas_div = canvas_div\n", + " this._canvas_extra_style(canvas_div)\n", + " this.root.append(canvas_div);\n", + "\n", + " var canvas = $('<canvas/>');\n", + " canvas.addClass('mpl-canvas');\n", + " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", + "\n", + " this.canvas = canvas[0];\n", + " this.context = canvas[0].getContext(\"2d\");\n", + "\n", + " var backingStore = this.context.backingStorePixelRatio ||\n", + "\tthis.context.webkitBackingStorePixelRatio ||\n", + "\tthis.context.mozBackingStorePixelRatio ||\n", + "\tthis.context.msBackingStorePixelRatio ||\n", + "\tthis.context.oBackingStorePixelRatio ||\n", + "\tthis.context.backingStorePixelRatio || 1;\n", + "\n", + " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", + "\n", + " var rubberband = $('<canvas/>');\n", + " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", + "\n", + " var pass_mouse_events = true;\n", + "\n", + " canvas_div.resizable({\n", + " start: function(event, ui) {\n", + " pass_mouse_events = false;\n", + " },\n", + " resize: function(event, ui) {\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " stop: function(event, ui) {\n", + " pass_mouse_events = true;\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " });\n", + "\n", + " function mouse_event_fn(event) {\n", + " if (pass_mouse_events)\n", + " return fig.mouse_event(event, event['data']);\n", + " }\n", + "\n", + " rubberband.mousedown('button_press', mouse_event_fn);\n", + " rubberband.mouseup('button_release', mouse_event_fn);\n", + " // Throttle sequential mouse events to 1 every 20ms.\n", + " rubberband.mousemove('motion_notify', mouse_event_fn);\n", + "\n", + " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", + " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", + "\n", + " canvas_div.on(\"wheel\", function (event) {\n", + " event = event.originalEvent;\n", + " event['data'] = 'scroll'\n", + " if (event.deltaY < 0) {\n", + " event.step = 1;\n", + " } else {\n", + " event.step = -1;\n", + " }\n", + " mouse_event_fn(event);\n", + " });\n", + "\n", + " canvas_div.append(canvas);\n", + " canvas_div.append(rubberband);\n", + "\n", + " this.rubberband = rubberband;\n", + " this.rubberband_canvas = rubberband[0];\n", + " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", + " this.rubberband_context.strokeStyle = \"#000000\";\n", + "\n", + " this._resize_canvas = function(width, height) {\n", + " // Keep the size of the canvas, canvas container, and rubber band\n", + " // canvas in synch.\n", + " canvas_div.css('width', width)\n", + " canvas_div.css('height', height)\n", + "\n", + " canvas.attr('width', width * mpl.ratio);\n", + " canvas.attr('height', height * mpl.ratio);\n", + " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", + "\n", + " rubberband.attr('width', width);\n", + " rubberband.attr('height', height);\n", + " }\n", + "\n", + " // Set the figure to an initial 600x600px, this will subsequently be updated\n", + " // upon first draw.\n", + " this._resize_canvas(600, 600);\n", + "\n", + " // Disable right mouse context menu.\n", + " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", + " return false;\n", + " });\n", + "\n", + " function set_focus () {\n", + " canvas.focus();\n", + " canvas_div.focus();\n", + " }\n", + "\n", + " window.setTimeout(set_focus, 100);\n", + "}\n", + "\n", + "mpl.figure.prototype._init_toolbar = function() {\n", + " var fig = this;\n", + "\n", + " var nav_element = $('<div/>')\n", + " nav_element.attr('style', 'width: 100%');\n", + " this.root.append(nav_element);\n", + "\n", + " // Define a callback function for later on.\n", + " function toolbar_event(event) {\n", + " return fig.toolbar_button_onclick(event['data']);\n", + " }\n", + " function toolbar_mouse_event(event) {\n", + " return fig.toolbar_button_onmouseover(event['data']);\n", + " }\n", + "\n", + " for(var toolbar_ind in mpl.toolbar_items) {\n", + " var name = mpl.toolbar_items[toolbar_ind][0];\n", + " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", + " var image = mpl.toolbar_items[toolbar_ind][2];\n", + " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", + "\n", + " if (!name) {\n", + " // put a spacer in here.\n", + " continue;\n", + " }\n", + " var button = $('<button/>');\n", + " button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n", + " 'ui-button-icon-only');\n", + " button.attr('role', 'button');\n", + " button.attr('aria-disabled', 'false');\n", + " button.click(method_name, toolbar_event);\n", + " button.mouseover(tooltip, toolbar_mouse_event);\n", + "\n", + " var icon_img = $('<span/>');\n", + " icon_img.addClass('ui-button-icon-primary ui-icon');\n", + " icon_img.addClass(image);\n", + " icon_img.addClass('ui-corner-all');\n", + "\n", + " var tooltip_span = $('<span/>');\n", + " tooltip_span.addClass('ui-button-text');\n", + " tooltip_span.html(tooltip);\n", + "\n", + " button.append(icon_img);\n", + " button.append(tooltip_span);\n", + "\n", + " nav_element.append(button);\n", + " }\n", + "\n", + " var fmt_picker_span = $('<span/>');\n", + "\n", + " var fmt_picker = $('<select/>');\n", + " fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n", + " fmt_picker_span.append(fmt_picker);\n", + " nav_element.append(fmt_picker_span);\n", + " this.format_dropdown = fmt_picker[0];\n", + "\n", + " for (var ind in mpl.extensions) {\n", + " var fmt = mpl.extensions[ind];\n", + " var option = $(\n", + " '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n", + " fmt_picker.append(option)\n", + " }\n", + "\n", + " // Add hover states to the ui-buttons\n", + " $( \".ui-button\" ).hover(\n", + " function() { $(this).addClass(\"ui-state-hover\");},\n", + " function() { $(this).removeClass(\"ui-state-hover\");}\n", + " );\n", + "\n", + " var status_bar = $('<span class=\"mpl-message\"/>');\n", + " nav_element.append(status_bar);\n", + " this.message = status_bar[0];\n", + "}\n", + "\n", + "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n", + " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", + " // which will in turn request a refresh of the image.\n", + " this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n", + "}\n", + "\n", + "mpl.figure.prototype.send_message = function(type, properties) {\n", + " properties['type'] = type;\n", + " properties['figure_id'] = this.id;\n", + " this.ws.send(JSON.stringify(properties));\n", + "}\n", + "\n", + "mpl.figure.prototype.send_draw_message = function() {\n", + " if (!this.waiting) {\n", + " this.waiting = true;\n", + " this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n", + " }\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype.handle_save = function(fig, msg) {\n", + " var format_dropdown = fig.format_dropdown;\n", + " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", + " fig.ondownload(fig, format);\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype.handle_resize = function(fig, msg) {\n", + " var size = msg['size'];\n", + " if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n", + " fig._resize_canvas(size[0], size[1]);\n", + " fig.send_message(\"refresh\", {});\n", + " };\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n", + " var x0 = msg['x0'] / mpl.ratio;\n", + " var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n", + " var x1 = msg['x1'] / mpl.ratio;\n", + " var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n", + " x0 = Math.floor(x0) + 0.5;\n", + " y0 = Math.floor(y0) + 0.5;\n", + " x1 = Math.floor(x1) + 0.5;\n", + " y1 = Math.floor(y1) + 0.5;\n", + " var min_x = Math.min(x0, x1);\n", + " var min_y = Math.min(y0, y1);\n", + " var width = Math.abs(x1 - x0);\n", + " var height = Math.abs(y1 - y0);\n", + "\n", + " fig.rubberband_context.clearRect(\n", + " 0, 0, fig.canvas.width, fig.canvas.height);\n", + "\n", + " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n", + " // Updates the figure title.\n", + " fig.header.textContent = msg['label'];\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n", + " var cursor = msg['cursor'];\n", + " switch(cursor)\n", + " {\n", + " case 0:\n", + " cursor = 'pointer';\n", + " break;\n", + " case 1:\n", + " cursor = 'default';\n", + " break;\n", + " case 2:\n", + " cursor = 'crosshair';\n", + " break;\n", + " case 3:\n", + " cursor = 'move';\n", + " break;\n", + " }\n", + " fig.rubberband_canvas.style.cursor = cursor;\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_message = function(fig, msg) {\n", + " fig.message.textContent = msg['message'];\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_draw = function(fig, msg) {\n", + " // Request the server to send over a new figure.\n", + " fig.send_draw_message();\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n", + " fig.image_mode = msg['mode'];\n", + "}\n", + "\n", + "mpl.figure.prototype.updated_canvas_event = function() {\n", + " // Called whenever the canvas gets updated.\n", + " this.send_message(\"ack\", {});\n", + "}\n", + "\n", + "// A function to construct a web socket function for onmessage handling.\n", + "// Called in the figure constructor.\n", + "mpl.figure.prototype._make_on_message_function = function(fig) {\n", + " return function socket_on_message(evt) {\n", + " if (evt.data instanceof Blob) {\n", + " /* FIXME: We get \"Resource interpreted as Image but\n", + " * transferred with MIME type text/plain:\" errors on\n", + " * Chrome. But how to set the MIME type? It doesn't seem\n", + " * to be part of the websocket stream */\n", + " evt.data.type = \"image/png\";\n", + "\n", + " /* Free the memory for the previous frames */\n", + " if (fig.imageObj.src) {\n", + " (window.URL || window.webkitURL).revokeObjectURL(\n", + " fig.imageObj.src);\n", + " }\n", + "\n", + " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", + " evt.data);\n", + " fig.updated_canvas_event();\n", + " fig.waiting = false;\n", + " return;\n", + " }\n", + " else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n", + " fig.imageObj.src = evt.data;\n", + " fig.updated_canvas_event();\n", + " fig.waiting = false;\n", + " return;\n", + " }\n", + "\n", + " var msg = JSON.parse(evt.data);\n", + " var msg_type = msg['type'];\n", + "\n", + " // Call the \"handle_{type}\" callback, which takes\n", + " // the figure and JSON message as its only arguments.\n", + " try {\n", + " var callback = fig[\"handle_\" + msg_type];\n", + " } catch (e) {\n", + " console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n", + " return;\n", + " }\n", + "\n", + " if (callback) {\n", + " try {\n", + " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", + " callback(fig, msg);\n", + " } catch (e) {\n", + " console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n", + " }\n", + " }\n", + " };\n", + "}\n", + "\n", + "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", + "mpl.findpos = function(e) {\n", + " //this section is from http://www.quirksmode.org/js/events_properties.html\n", + " var targ;\n", + " if (!e)\n", + " e = window.event;\n", + " if (e.target)\n", + " targ = e.target;\n", + " else if (e.srcElement)\n", + " targ = e.srcElement;\n", + " if (targ.nodeType == 3) // defeat Safari bug\n", + " targ = targ.parentNode;\n", + "\n", + " // jQuery normalizes the pageX and pageY\n", + " // pageX,Y are the mouse positions relative to the document\n", + " // offset() returns the position of the element relative to the document\n", + " var x = e.pageX - $(targ).offset().left;\n", + " var y = e.pageY - $(targ).offset().top;\n", + "\n", + " return {\"x\": x, \"y\": y};\n", + "};\n", + "\n", + "/*\n", + " * return a copy of an object with only non-object keys\n", + " * we need this to avoid circular references\n", + " * http://stackoverflow.com/a/24161582/3208463\n", + " */\n", + "function simpleKeys (original) {\n", + " return Object.keys(original).reduce(function (obj, key) {\n", + " if (typeof original[key] !== 'object')\n", + " obj[key] = original[key]\n", + " return obj;\n", + " }, {});\n", + "}\n", + "\n", + "mpl.figure.prototype.mouse_event = function(event, name) {\n", + " var canvas_pos = mpl.findpos(event)\n", + "\n", + " if (name === 'button_press')\n", + " {\n", + " this.canvas.focus();\n", + " this.canvas_div.focus();\n", + " }\n", + "\n", + " var x = canvas_pos.x * mpl.ratio;\n", + " var y = canvas_pos.y * mpl.ratio;\n", + "\n", + " this.send_message(name, {x: x, y: y, button: event.button,\n", + " step: event.step,\n", + " guiEvent: simpleKeys(event)});\n", + "\n", + " /* This prevents the web browser from automatically changing to\n", + " * the text insertion cursor when the button is pressed. We want\n", + " * to control all of the cursor setting manually through the\n", + " * 'cursor' event from matplotlib */\n", + " event.preventDefault();\n", + " return false;\n", + "}\n", + "\n", + "mpl.figure.prototype._key_event_extra = function(event, name) {\n", + " // Handle any extra behaviour associated with a key event\n", + "}\n", + "\n", + "mpl.figure.prototype.key_event = function(event, name) {\n", + "\n", + " // Prevent repeat events\n", + " if (name == 'key_press')\n", + " {\n", + " if (event.which === this._key)\n", + " return;\n", + " else\n", + " this._key = event.which;\n", + " }\n", + " if (name == 'key_release')\n", + " this._key = null;\n", + "\n", + " var value = '';\n", + " if (event.ctrlKey && event.which != 17)\n", + " value += \"ctrl+\";\n", + " if (event.altKey && event.which != 18)\n", + " value += \"alt+\";\n", + " if (event.shiftKey && event.which != 16)\n", + " value += \"shift+\";\n", + "\n", + " value += 'k';\n", + " value += event.which.toString();\n", + "\n", + " this._key_event_extra(event, name);\n", + "\n", + " this.send_message(name, {key: value,\n", + " guiEvent: simpleKeys(event)});\n", + " return false;\n", + "}\n", + "\n", + "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n", + " if (name == 'download') {\n", + " this.handle_save(this, null);\n", + " } else {\n", + " this.send_message(\"toolbar_button\", {name: name});\n", + " }\n", + "};\n", + "\n", + "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n", + " this.message.textContent = tooltip;\n", + "};\n", + "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", + "\n", + "mpl.extensions = [\"eps\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\"];\n", + "\n", + "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n", + " // Create a \"websocket\"-like object which calls the given IPython comm\n", + " // object with the appropriate methods. Currently this is a non binary\n", + " // socket, so there is still some room for performance tuning.\n", + " var ws = {};\n", + "\n", + " ws.close = function() {\n", + " comm.close()\n", + " };\n", + " ws.send = function(m) {\n", + " //console.log('sending', m);\n", + " comm.send(m);\n", + " };\n", + " // Register the callback with on_msg.\n", + " comm.on_msg(function(msg) {\n", + " //console.log('receiving', msg['content']['data'], msg);\n", + " // Pass the mpl event to the overridden (by mpl) onmessage function.\n", + " ws.onmessage(msg['content']['data'])\n", + " });\n", + " return ws;\n", + "}\n", + "\n", + "mpl.mpl_figure_comm = function(comm, msg) {\n", + " // This is the function which gets called when the mpl process\n", + " // starts-up an IPython Comm through the \"matplotlib\" channel.\n", + "\n", + " var id = msg.content.data.id;\n", + " // Get hold of the div created by the display call when the Comm\n", + " // socket was opened in Python.\n", + " var element = $(\"#\" + id);\n", + " var ws_proxy = comm_websocket_adapter(comm)\n", + "\n", + " function ondownload(figure, format) {\n", + " window.open(figure.imageObj.src);\n", + " }\n", + "\n", + " var fig = new mpl.figure(id, ws_proxy,\n", + " ondownload,\n", + " element.get(0));\n", + "\n", + " // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n", + " // web socket which is closed, not our websocket->open comm proxy.\n", + " ws_proxy.onopen();\n", + "\n", + " fig.parent_element = element.get(0);\n", + " fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n", + " if (!fig.cell_info) {\n", + " console.error(\"Failed to find cell for figure\", id, fig);\n", + " return;\n", + " }\n", + "\n", + " var output_index = fig.cell_info[2]\n", + " var cell = fig.cell_info[0];\n", + "\n", + "};\n", + "\n", + "mpl.figure.prototype.handle_close = function(fig, msg) {\n", + " var width = fig.canvas.width/mpl.ratio\n", + " fig.root.unbind('remove')\n", + "\n", + " // Update the output cell to use the data from the current canvas.\n", + " fig.push_to_output();\n", + " var dataURL = fig.canvas.toDataURL();\n", + " // Re-enable the keyboard manager in IPython - without this line, in FF,\n", + " // the notebook keyboard shortcuts fail.\n", + " IPython.keyboard_manager.enable()\n", + " $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n", + " fig.close_ws(fig, msg);\n", + "}\n", + "\n", + "mpl.figure.prototype.close_ws = function(fig, msg){\n", + " fig.send_message('closing', msg);\n", + " // fig.ws.close()\n", + "}\n", + "\n", + "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n", + " // Turn the data on the canvas into data in the output cell.\n", + " var width = this.canvas.width/mpl.ratio\n", + " var dataURL = this.canvas.toDataURL();\n", + " this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n", + "}\n", + "\n", + "mpl.figure.prototype.updated_canvas_event = function() {\n", + " // Tell IPython that the notebook contents must change.\n", + " IPython.notebook.set_dirty(true);\n", + " this.send_message(\"ack\", {});\n", + " var fig = this;\n", + " // Wait a second, then push the new image to the DOM so\n", + " // that it is saved nicely (might be nice to debounce this).\n", + " setTimeout(function () { fig.push_to_output() }, 1000);\n", + "}\n", + "\n", + "mpl.figure.prototype._init_toolbar = function() {\n", + " var fig = this;\n", + "\n", + " var nav_element = $('<div/>')\n", + " nav_element.attr('style', 'width: 100%');\n", + " this.root.append(nav_element);\n", + "\n", + " // Define a callback function for later on.\n", + " function toolbar_event(event) {\n", + " return fig.toolbar_button_onclick(event['data']);\n", + " }\n", + " function toolbar_mouse_event(event) {\n", + " return fig.toolbar_button_onmouseover(event['data']);\n", + " }\n", + "\n", + " for(var toolbar_ind in mpl.toolbar_items){\n", + " var name = mpl.toolbar_items[toolbar_ind][0];\n", + " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", + " var image = mpl.toolbar_items[toolbar_ind][2];\n", + " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", + "\n", + " if (!name) { continue; };\n", + "\n", + " var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n", + " button.click(method_name, toolbar_event);\n", + " button.mouseover(tooltip, toolbar_mouse_event);\n", + " nav_element.append(button);\n", + " }\n", + "\n", + " // Add the status bar.\n", + " var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n", + " nav_element.append(status_bar);\n", + " this.message = status_bar[0];\n", + "\n", + " // Add the close button to the window.\n", + " var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n", + " var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n", + " button.click(function (evt) { fig.handle_close(fig, {}); } );\n", + " button.mouseover('Stop Interaction', toolbar_mouse_event);\n", + " buttongrp.append(button);\n", + " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", + " titlebar.prepend(buttongrp);\n", + "}\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(el){\n", + " var fig = this\n", + " el.on(\"remove\", function(){\n", + "\tfig.close_ws(fig, {});\n", + " });\n", + "}\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(el){\n", + " // this is important to make the div 'focusable\n", + " el.attr('tabindex', 0)\n", + " // reach out to IPython and tell the keyboard manager to turn it's self\n", + " // off when our div gets focus\n", + "\n", + " // location in version 3\n", + " if (IPython.notebook.keyboard_manager) {\n", + " IPython.notebook.keyboard_manager.register_events(el);\n", + " }\n", + " else {\n", + " // location in version 2\n", + " IPython.keyboard_manager.register_events(el);\n", + " }\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._key_event_extra = function(event, name) {\n", + " var manager = IPython.notebook.keyboard_manager;\n", + " if (!manager)\n", + " manager = IPython.keyboard_manager;\n", + "\n", + " // Check for shift+enter\n", + " if (event.shiftKey && event.which == 13) {\n", + " this.canvas_div.blur();\n", + " event.shiftKey = false;\n", + " // Send a \"J\" for go to next cell\n", + " event.which = 74;\n", + " event.keyCode = 74;\n", + " manager.command_mode();\n", + " manager.handle_keydown(event);\n", + " }\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_save = function(fig, msg) {\n", + " fig.ondownload(fig, null);\n", + "}\n", + "\n", + "\n", + "mpl.find_output_cell = function(html_output) {\n", + " // Return the cell and output element which can be found *uniquely* in the notebook.\n", + " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", + " // IPython event is triggered only after the cells have been serialised, which for\n", + " // our purposes (turning an active figure into a static one), is too late.\n", + " var cells = IPython.notebook.get_cells();\n", + " var ncells = cells.length;\n", + " for (var i=0; i<ncells; i++) {\n", + " var cell = cells[i];\n", + " if (cell.cell_type === 'code'){\n", + " for (var j=0; j<cell.output_area.outputs.length; j++) {\n", + " var data = cell.output_area.outputs[j];\n", + " if (data.data) {\n", + " // IPython >= 3 moved mimebundle to data attribute of output\n", + " data = data.data;\n", + " }\n", + " if (data['text/html'] == html_output) {\n", + " return [cell, data, j];\n", + " }\n", + " }\n", + " }\n", + " }\n", + "}\n", + "\n", + "// Register the function which deals with the matplotlib target/channel.\n", + "// The kernel may be null if the page has been refreshed.\n", + "if (IPython.notebook.kernel != null) {\n", + " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", + "}\n" + ], + "text/plain": [ + "<IPython.core.display.Javascript object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "<img src=\"data:image/png;base64,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\" width=\"640\">" + ], + "text/plain": [ + "<IPython.core.display.HTML object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "pl.plot(tg-4.9,hg,'.',t_filt_g,hg2,'.')\n", + "pl.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(9199,)" + ] + }, + "execution_count": 58, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "hg.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "g = EdgeFactory(host='mage1.cr.usgs.gov')" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "gxx_gol2 = g.get_timeseries(observatory='GXX',\n", + " channels=['BEU'], \n", + " type='variation',\n", + " interval='second',\n", + " starttime=UTCDateTime('2018-09-18T00:00:00Z'),\n", + " endtime=UTCDateTime('2018-09-18T00:15:00Z'))" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "application/javascript": [ + "/* Put everything inside the global mpl namespace */\n", + "window.mpl = {};\n", + "\n", + "\n", + "mpl.get_websocket_type = function() {\n", + " if (typeof(WebSocket) !== 'undefined') {\n", + " return WebSocket;\n", + " } else if (typeof(MozWebSocket) !== 'undefined') {\n", + " return MozWebSocket;\n", + " } else {\n", + " alert('Your browser does not have WebSocket support.' +\n", + " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", + " 'Firefox 4 and 5 are also supported but you ' +\n", + " 'have to enable WebSockets in about:config.');\n", + " };\n", + "}\n", + "\n", + "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", + " this.id = figure_id;\n", + "\n", + " this.ws = websocket;\n", + "\n", + " this.supports_binary = (this.ws.binaryType != undefined);\n", + "\n", + " if (!this.supports_binary) {\n", + " var warnings = document.getElementById(\"mpl-warnings\");\n", + " if (warnings) {\n", + " warnings.style.display = 'block';\n", + " warnings.textContent = (\n", + " \"This browser does not support binary websocket messages. \" +\n", + " \"Performance may be slow.\");\n", + " }\n", + " }\n", + "\n", + " this.imageObj = new Image();\n", + "\n", + " this.context = undefined;\n", + " this.message = undefined;\n", + " this.canvas = undefined;\n", + " this.rubberband_canvas = undefined;\n", + " this.rubberband_context = undefined;\n", + " this.format_dropdown = undefined;\n", + "\n", + " this.image_mode = 'full';\n", + "\n", + " this.root = $('<div/>');\n", + " this._root_extra_style(this.root)\n", + " this.root.attr('style', 'display: inline-block');\n", + "\n", + " $(parent_element).append(this.root);\n", + "\n", + " this._init_header(this);\n", + " this._init_canvas(this);\n", + " this._init_toolbar(this);\n", + "\n", + " var fig = this;\n", + "\n", + " this.waiting = false;\n", + "\n", + " this.ws.onopen = function () {\n", + " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", + " fig.send_message(\"send_image_mode\", {});\n", + " if (mpl.ratio != 1) {\n", + " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", + " }\n", + " fig.send_message(\"refresh\", {});\n", + " }\n", + "\n", + " this.imageObj.onload = function() {\n", + " if (fig.image_mode == 'full') {\n", + " // Full images could contain transparency (where diff images\n", + " // almost always do), so we need to clear the canvas so that\n", + " // there is no ghosting.\n", + " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", + " }\n", + " fig.context.drawImage(fig.imageObj, 0, 0);\n", + " };\n", + "\n", + " this.imageObj.onunload = function() {\n", + " fig.ws.close();\n", + " }\n", + "\n", + " this.ws.onmessage = this._make_on_message_function(this);\n", + "\n", + " this.ondownload = ondownload;\n", + "}\n", + "\n", + "mpl.figure.prototype._init_header = function() {\n", + " var titlebar = $(\n", + " '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n", + " 'ui-helper-clearfix\"/>');\n", + " var titletext = $(\n", + " '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n", + " 'text-align: center; padding: 3px;\"/>');\n", + " titlebar.append(titletext)\n", + " this.root.append(titlebar);\n", + " this.header = titletext[0];\n", + "}\n", + "\n", + "\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._init_canvas = function() {\n", + " var fig = this;\n", + "\n", + " var canvas_div = $('<div/>');\n", + "\n", + " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", + "\n", + " function canvas_keyboard_event(event) {\n", + " return fig.key_event(event, event['data']);\n", + " }\n", + "\n", + " canvas_div.keydown('key_press', canvas_keyboard_event);\n", + " canvas_div.keyup('key_release', canvas_keyboard_event);\n", + " this.canvas_div = canvas_div\n", + " this._canvas_extra_style(canvas_div)\n", + " this.root.append(canvas_div);\n", + "\n", + " var canvas = $('<canvas/>');\n", + " canvas.addClass('mpl-canvas');\n", + " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", + "\n", + " this.canvas = canvas[0];\n", + " this.context = canvas[0].getContext(\"2d\");\n", + "\n", + " var backingStore = this.context.backingStorePixelRatio ||\n", + "\tthis.context.webkitBackingStorePixelRatio ||\n", + "\tthis.context.mozBackingStorePixelRatio ||\n", + "\tthis.context.msBackingStorePixelRatio ||\n", + "\tthis.context.oBackingStorePixelRatio ||\n", + "\tthis.context.backingStorePixelRatio || 1;\n", + "\n", + " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", + "\n", + " var rubberband = $('<canvas/>');\n", + " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", + "\n", + " var pass_mouse_events = true;\n", + "\n", + " canvas_div.resizable({\n", + " start: function(event, ui) {\n", + " pass_mouse_events = false;\n", + " },\n", + " resize: function(event, ui) {\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " stop: function(event, ui) {\n", + " pass_mouse_events = true;\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " });\n", + "\n", + " function mouse_event_fn(event) {\n", + " if (pass_mouse_events)\n", + " return fig.mouse_event(event, event['data']);\n", + " }\n", + "\n", + " rubberband.mousedown('button_press', mouse_event_fn);\n", + " rubberband.mouseup('button_release', mouse_event_fn);\n", + " // Throttle sequential mouse events to 1 every 20ms.\n", + " rubberband.mousemove('motion_notify', mouse_event_fn);\n", + "\n", + " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", + " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", + "\n", + " canvas_div.on(\"wheel\", function (event) {\n", + " event = event.originalEvent;\n", + " event['data'] = 'scroll'\n", + " if (event.deltaY < 0) {\n", + " event.step = 1;\n", + " } else {\n", + " event.step = -1;\n", + " }\n", + " mouse_event_fn(event);\n", + " });\n", + "\n", + " canvas_div.append(canvas);\n", + " canvas_div.append(rubberband);\n", + "\n", + " this.rubberband = rubberband;\n", + " this.rubberband_canvas = rubberband[0];\n", + " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", + " this.rubberband_context.strokeStyle = \"#000000\";\n", + "\n", + " this._resize_canvas = function(width, height) {\n", + " // Keep the size of the canvas, canvas container, and rubber band\n", + " // canvas in synch.\n", + " canvas_div.css('width', width)\n", + " canvas_div.css('height', height)\n", + "\n", + " canvas.attr('width', width * mpl.ratio);\n", + " canvas.attr('height', height * mpl.ratio);\n", + " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", + "\n", + " rubberband.attr('width', width);\n", + " rubberband.attr('height', height);\n", + " }\n", + "\n", + " // Set the figure to an initial 600x600px, this will subsequently be updated\n", + " // upon first draw.\n", + " this._resize_canvas(600, 600);\n", + "\n", + " // Disable right mouse context menu.\n", + " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", + " return false;\n", + " });\n", + "\n", + " function set_focus () {\n", + " canvas.focus();\n", + " canvas_div.focus();\n", + " }\n", + "\n", + " window.setTimeout(set_focus, 100);\n", + "}\n", + "\n", + "mpl.figure.prototype._init_toolbar = function() {\n", + " var fig = this;\n", + "\n", + " var nav_element = $('<div/>')\n", + " nav_element.attr('style', 'width: 100%');\n", + " this.root.append(nav_element);\n", + "\n", + " // Define a callback function for later on.\n", + " function toolbar_event(event) {\n", + " return fig.toolbar_button_onclick(event['data']);\n", + " }\n", + " function toolbar_mouse_event(event) {\n", + " return fig.toolbar_button_onmouseover(event['data']);\n", + " }\n", + "\n", + " for(var toolbar_ind in mpl.toolbar_items) {\n", + " var name = mpl.toolbar_items[toolbar_ind][0];\n", + " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", + " var image = mpl.toolbar_items[toolbar_ind][2];\n", + " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", + "\n", + " if (!name) {\n", + " // put a spacer in here.\n", + " continue;\n", + " }\n", + " var button = $('<button/>');\n", + " button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n", + " 'ui-button-icon-only');\n", + " button.attr('role', 'button');\n", + " button.attr('aria-disabled', 'false');\n", + " button.click(method_name, toolbar_event);\n", + " button.mouseover(tooltip, toolbar_mouse_event);\n", + "\n", + " var icon_img = $('<span/>');\n", + " icon_img.addClass('ui-button-icon-primary ui-icon');\n", + " icon_img.addClass(image);\n", + " icon_img.addClass('ui-corner-all');\n", + "\n", + " var tooltip_span = $('<span/>');\n", + " tooltip_span.addClass('ui-button-text');\n", + " tooltip_span.html(tooltip);\n", + "\n", + " button.append(icon_img);\n", + " button.append(tooltip_span);\n", + "\n", + " nav_element.append(button);\n", + " }\n", + "\n", + " var fmt_picker_span = $('<span/>');\n", + "\n", + " var fmt_picker = $('<select/>');\n", + " fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n", + " fmt_picker_span.append(fmt_picker);\n", + " nav_element.append(fmt_picker_span);\n", + " this.format_dropdown = fmt_picker[0];\n", + "\n", + " for (var ind in mpl.extensions) {\n", + " var fmt = mpl.extensions[ind];\n", + " var option = $(\n", + " '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n", + " fmt_picker.append(option)\n", + " }\n", + "\n", + " // Add hover states to the ui-buttons\n", + " $( \".ui-button\" ).hover(\n", + " function() { $(this).addClass(\"ui-state-hover\");},\n", + " function() { $(this).removeClass(\"ui-state-hover\");}\n", + " );\n", + "\n", + " var status_bar = $('<span class=\"mpl-message\"/>');\n", + " nav_element.append(status_bar);\n", + " this.message = status_bar[0];\n", + "}\n", + "\n", + "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n", + " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", + " // which will in turn request a refresh of the image.\n", + " this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n", + "}\n", + "\n", + "mpl.figure.prototype.send_message = function(type, properties) {\n", + " properties['type'] = type;\n", + " properties['figure_id'] = this.id;\n", + " this.ws.send(JSON.stringify(properties));\n", + "}\n", + "\n", + "mpl.figure.prototype.send_draw_message = function() {\n", + " if (!this.waiting) {\n", + " this.waiting = true;\n", + " this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n", + " }\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype.handle_save = function(fig, msg) {\n", + " var format_dropdown = fig.format_dropdown;\n", + " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", + " fig.ondownload(fig, format);\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype.handle_resize = function(fig, msg) {\n", + " var size = msg['size'];\n", + " if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n", + " fig._resize_canvas(size[0], size[1]);\n", + " fig.send_message(\"refresh\", {});\n", + " };\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n", + " var x0 = msg['x0'] / mpl.ratio;\n", + " var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n", + " var x1 = msg['x1'] / mpl.ratio;\n", + " var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n", + " x0 = Math.floor(x0) + 0.5;\n", + " y0 = Math.floor(y0) + 0.5;\n", + " x1 = Math.floor(x1) + 0.5;\n", + " y1 = Math.floor(y1) + 0.5;\n", + " var min_x = Math.min(x0, x1);\n", + " var min_y = Math.min(y0, y1);\n", + " var width = Math.abs(x1 - x0);\n", + " var height = Math.abs(y1 - y0);\n", + "\n", + " fig.rubberband_context.clearRect(\n", + " 0, 0, fig.canvas.width, fig.canvas.height);\n", + "\n", + " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n", + " // Updates the figure title.\n", + " fig.header.textContent = msg['label'];\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n", + " var cursor = msg['cursor'];\n", + " switch(cursor)\n", + " {\n", + " case 0:\n", + " cursor = 'pointer';\n", + " break;\n", + " case 1:\n", + " cursor = 'default';\n", + " break;\n", + " case 2:\n", + " cursor = 'crosshair';\n", + " break;\n", + " case 3:\n", + " cursor = 'move';\n", + " break;\n", + " }\n", + " fig.rubberband_canvas.style.cursor = cursor;\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_message = function(fig, msg) {\n", + " fig.message.textContent = msg['message'];\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_draw = function(fig, msg) {\n", + " // Request the server to send over a new figure.\n", + " fig.send_draw_message();\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n", + " fig.image_mode = msg['mode'];\n", + "}\n", + "\n", + "mpl.figure.prototype.updated_canvas_event = function() {\n", + " // Called whenever the canvas gets updated.\n", + " this.send_message(\"ack\", {});\n", + "}\n", + "\n", + "// A function to construct a web socket function for onmessage handling.\n", + "// Called in the figure constructor.\n", + "mpl.figure.prototype._make_on_message_function = function(fig) {\n", + " return function socket_on_message(evt) {\n", + " if (evt.data instanceof Blob) {\n", + " /* FIXME: We get \"Resource interpreted as Image but\n", + " * transferred with MIME type text/plain:\" errors on\n", + " * Chrome. But how to set the MIME type? It doesn't seem\n", + " * to be part of the websocket stream */\n", + " evt.data.type = \"image/png\";\n", + "\n", + " /* Free the memory for the previous frames */\n", + " if (fig.imageObj.src) {\n", + " (window.URL || window.webkitURL).revokeObjectURL(\n", + " fig.imageObj.src);\n", + " }\n", + "\n", + " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", + " evt.data);\n", + " fig.updated_canvas_event();\n", + " fig.waiting = false;\n", + " return;\n", + " }\n", + " else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n", + " fig.imageObj.src = evt.data;\n", + " fig.updated_canvas_event();\n", + " fig.waiting = false;\n", + " return;\n", + " }\n", + "\n", + " var msg = JSON.parse(evt.data);\n", + " var msg_type = msg['type'];\n", + "\n", + " // Call the \"handle_{type}\" callback, which takes\n", + " // the figure and JSON message as its only arguments.\n", + " try {\n", + " var callback = fig[\"handle_\" + msg_type];\n", + " } catch (e) {\n", + " console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n", + " return;\n", + " }\n", + "\n", + " if (callback) {\n", + " try {\n", + " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", + " callback(fig, msg);\n", + " } catch (e) {\n", + " console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n", + " }\n", + " }\n", + " };\n", + "}\n", + "\n", + "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", + "mpl.findpos = function(e) {\n", + " //this section is from http://www.quirksmode.org/js/events_properties.html\n", + " var targ;\n", + " if (!e)\n", + " e = window.event;\n", + " if (e.target)\n", + " targ = e.target;\n", + " else if (e.srcElement)\n", + " targ = e.srcElement;\n", + " if (targ.nodeType == 3) // defeat Safari bug\n", + " targ = targ.parentNode;\n", + "\n", + " // jQuery normalizes the pageX and pageY\n", + " // pageX,Y are the mouse positions relative to the document\n", + " // offset() returns the position of the element relative to the document\n", + " var x = e.pageX - $(targ).offset().left;\n", + " var y = e.pageY - $(targ).offset().top;\n", + "\n", + " return {\"x\": x, \"y\": y};\n", + "};\n", + "\n", + "/*\n", + " * return a copy of an object with only non-object keys\n", + " * we need this to avoid circular references\n", + " * http://stackoverflow.com/a/24161582/3208463\n", + " */\n", + "function simpleKeys (original) {\n", + " return Object.keys(original).reduce(function (obj, key) {\n", + " if (typeof original[key] !== 'object')\n", + " obj[key] = original[key]\n", + " return obj;\n", + " }, {});\n", + "}\n", + "\n", + "mpl.figure.prototype.mouse_event = function(event, name) {\n", + " var canvas_pos = mpl.findpos(event)\n", + "\n", + " if (name === 'button_press')\n", + " {\n", + " this.canvas.focus();\n", + " this.canvas_div.focus();\n", + " }\n", + "\n", + " var x = canvas_pos.x * mpl.ratio;\n", + " var y = canvas_pos.y * mpl.ratio;\n", + "\n", + " this.send_message(name, {x: x, y: y, button: event.button,\n", + " step: event.step,\n", + " guiEvent: simpleKeys(event)});\n", + "\n", + " /* This prevents the web browser from automatically changing to\n", + " * the text insertion cursor when the button is pressed. We want\n", + " * to control all of the cursor setting manually through the\n", + " * 'cursor' event from matplotlib */\n", + " event.preventDefault();\n", + " return false;\n", + "}\n", + "\n", + "mpl.figure.prototype._key_event_extra = function(event, name) {\n", + " // Handle any extra behaviour associated with a key event\n", + "}\n", + "\n", + "mpl.figure.prototype.key_event = function(event, name) {\n", + "\n", + " // Prevent repeat events\n", + " if (name == 'key_press')\n", + " {\n", + " if (event.which === this._key)\n", + " return;\n", + " else\n", + " this._key = event.which;\n", + " }\n", + " if (name == 'key_release')\n", + " this._key = null;\n", + "\n", + " var value = '';\n", + " if (event.ctrlKey && event.which != 17)\n", + " value += \"ctrl+\";\n", + " if (event.altKey && event.which != 18)\n", + " value += \"alt+\";\n", + " if (event.shiftKey && event.which != 16)\n", + " value += \"shift+\";\n", + "\n", + " value += 'k';\n", + " value += event.which.toString();\n", + "\n", + " this._key_event_extra(event, name);\n", + "\n", + " this.send_message(name, {key: value,\n", + " guiEvent: simpleKeys(event)});\n", + " return false;\n", + "}\n", + "\n", + "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n", + " if (name == 'download') {\n", + " this.handle_save(this, null);\n", + " } else {\n", + " this.send_message(\"toolbar_button\", {name: name});\n", + " }\n", + "};\n", + "\n", + "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n", + " this.message.textContent = tooltip;\n", + "};\n", + "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", + "\n", + "mpl.extensions = [\"eps\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\"];\n", + "\n", + "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n", + " // Create a \"websocket\"-like object which calls the given IPython comm\n", + " // object with the appropriate methods. Currently this is a non binary\n", + " // socket, so there is still some room for performance tuning.\n", + " var ws = {};\n", + "\n", + " ws.close = function() {\n", + " comm.close()\n", + " };\n", + " ws.send = function(m) {\n", + " //console.log('sending', m);\n", + " comm.send(m);\n", + " };\n", + " // Register the callback with on_msg.\n", + " comm.on_msg(function(msg) {\n", + " //console.log('receiving', msg['content']['data'], msg);\n", + " // Pass the mpl event to the overridden (by mpl) onmessage function.\n", + " ws.onmessage(msg['content']['data'])\n", + " });\n", + " return ws;\n", + "}\n", + "\n", + "mpl.mpl_figure_comm = function(comm, msg) {\n", + " // This is the function which gets called when the mpl process\n", + " // starts-up an IPython Comm through the \"matplotlib\" channel.\n", + "\n", + " var id = msg.content.data.id;\n", + " // Get hold of the div created by the display call when the Comm\n", + " // socket was opened in Python.\n", + " var element = $(\"#\" + id);\n", + " var ws_proxy = comm_websocket_adapter(comm)\n", + "\n", + " function ondownload(figure, format) {\n", + " window.open(figure.imageObj.src);\n", + " }\n", + "\n", + " var fig = new mpl.figure(id, ws_proxy,\n", + " ondownload,\n", + " element.get(0));\n", + "\n", + " // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n", + " // web socket which is closed, not our websocket->open comm proxy.\n", + " ws_proxy.onopen();\n", + "\n", + " fig.parent_element = element.get(0);\n", + " fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n", + " if (!fig.cell_info) {\n", + " console.error(\"Failed to find cell for figure\", id, fig);\n", + " return;\n", + " }\n", + "\n", + " var output_index = fig.cell_info[2]\n", + " var cell = fig.cell_info[0];\n", + "\n", + "};\n", + "\n", + "mpl.figure.prototype.handle_close = function(fig, msg) {\n", + " var width = fig.canvas.width/mpl.ratio\n", + " fig.root.unbind('remove')\n", + "\n", + " // Update the output cell to use the data from the current canvas.\n", + " fig.push_to_output();\n", + " var dataURL = fig.canvas.toDataURL();\n", + " // Re-enable the keyboard manager in IPython - without this line, in FF,\n", + " // the notebook keyboard shortcuts fail.\n", + " IPython.keyboard_manager.enable()\n", + " $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n", + " fig.close_ws(fig, msg);\n", + "}\n", + "\n", + "mpl.figure.prototype.close_ws = function(fig, msg){\n", + " fig.send_message('closing', msg);\n", + " // fig.ws.close()\n", + "}\n", + "\n", + "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n", + " // Turn the data on the canvas into data in the output cell.\n", + " var width = this.canvas.width/mpl.ratio\n", + " var dataURL = this.canvas.toDataURL();\n", + " this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n", + "}\n", + "\n", + "mpl.figure.prototype.updated_canvas_event = function() {\n", + " // Tell IPython that the notebook contents must change.\n", + " IPython.notebook.set_dirty(true);\n", + " this.send_message(\"ack\", {});\n", + " var fig = this;\n", + " // Wait a second, then push the new image to the DOM so\n", + " // that it is saved nicely (might be nice to debounce this).\n", + " setTimeout(function () { fig.push_to_output() }, 1000);\n", + "}\n", + "\n", + "mpl.figure.prototype._init_toolbar = function() {\n", + " var fig = this;\n", + "\n", + " var nav_element = $('<div/>')\n", + " nav_element.attr('style', 'width: 100%');\n", + " this.root.append(nav_element);\n", + "\n", + " // Define a callback function for later on.\n", + " function toolbar_event(event) {\n", + " return fig.toolbar_button_onclick(event['data']);\n", + " }\n", + " function toolbar_mouse_event(event) {\n", + " return fig.toolbar_button_onmouseover(event['data']);\n", + " }\n", + "\n", + " for(var toolbar_ind in mpl.toolbar_items){\n", + " var name = mpl.toolbar_items[toolbar_ind][0];\n", + " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", + " var image = mpl.toolbar_items[toolbar_ind][2];\n", + " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", + "\n", + " if (!name) { continue; };\n", + "\n", + " var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n", + " button.click(method_name, toolbar_event);\n", + " button.mouseover(tooltip, toolbar_mouse_event);\n", + " nav_element.append(button);\n", + " }\n", + "\n", + " // Add the status bar.\n", + " var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n", + " nav_element.append(status_bar);\n", + " this.message = status_bar[0];\n", + "\n", + " // Add the close button to the window.\n", + " var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n", + " var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n", + " button.click(function (evt) { fig.handle_close(fig, {}); } );\n", + " button.mouseover('Stop Interaction', toolbar_mouse_event);\n", + " buttongrp.append(button);\n", + " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", + " titlebar.prepend(buttongrp);\n", + "}\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(el){\n", + " var fig = this\n", + " el.on(\"remove\", function(){\n", + "\tfig.close_ws(fig, {});\n", + " });\n", + "}\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(el){\n", + " // this is important to make the div 'focusable\n", + " el.attr('tabindex', 0)\n", + " // reach out to IPython and tell the keyboard manager to turn it's self\n", + " // off when our div gets focus\n", + "\n", + " // location in version 3\n", + " if (IPython.notebook.keyboard_manager) {\n", + " IPython.notebook.keyboard_manager.register_events(el);\n", + " }\n", + " else {\n", + " // location in version 2\n", + " IPython.keyboard_manager.register_events(el);\n", + " }\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._key_event_extra = function(event, name) {\n", + " var manager = IPython.notebook.keyboard_manager;\n", + " if (!manager)\n", + " manager = IPython.keyboard_manager;\n", + "\n", + " // Check for shift+enter\n", + " if (event.shiftKey && event.which == 13) {\n", + " this.canvas_div.blur();\n", + " event.shiftKey = false;\n", + " // Send a \"J\" for go to next cell\n", + " event.which = 74;\n", + " event.keyCode = 74;\n", + " manager.command_mode();\n", + " manager.handle_keydown(event);\n", + " }\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_save = function(fig, msg) {\n", + " fig.ondownload(fig, null);\n", + "}\n", + "\n", + "\n", + "mpl.find_output_cell = function(html_output) {\n", + " // Return the cell and output element which can be found *uniquely* in the notebook.\n", + " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", + " // IPython event is triggered only after the cells have been serialised, which for\n", + " // our purposes (turning an active figure into a static one), is too late.\n", + " var cells = IPython.notebook.get_cells();\n", + " var ncells = cells.length;\n", + " for (var i=0; i<ncells; i++) {\n", + " var cell = cells[i];\n", + " if (cell.cell_type === 'code'){\n", + " for (var j=0; j<cell.output_area.outputs.length; j++) {\n", + " var data = cell.output_area.outputs[j];\n", + " if (data.data) {\n", + " // IPython >= 3 moved mimebundle to data attribute of output\n", + " data = data.data;\n", + " }\n", + " if (data['text/html'] == html_output) {\n", + " return [cell, data, j];\n", + " }\n", + " }\n", + " }\n", + " }\n", + "}\n", + "\n", + "// Register the function which deals with the matplotlib target/channel.\n", + "// The kernel may be null if the page has been refreshed.\n", + "if (IPython.notebook.kernel != null) {\n", + " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", + "}\n" + ], + "text/plain": [ + "<IPython.core.display.Javascript object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAyAAAAD6CAYAAABZPSO8AAAgAElEQVR4XuydBbgVVfv2l42BYiBiYHdiYaPYCnZho2BgKwYGFgIGYitiYHe+dmC3YCdiIrbia2D7Xb/1/dd55wx79p7Zs2PWzP1c17mOcibW3Gti3U/czxT//vvvv0YmBISAEBACQkAICAEhIASEgBBoAAJTiIA0AGWdQggIASEgBISAEBACQkAICAGLgAiIbgQhIASEgBAQAkJACAgBISAEGoaACEjDoNaJhIAQEAJCQAgIASEgBISAEBAB0T0gBISAEBACQkAICAEhIASEQMMQEAFpGNQ6kRAQAkJACAgBISAEhIAQEAIiILoHhIAQEAJCQAgIASEgBISAEGgYAiIgDYNaJxICQkAICAEhIASEgBAQAkJABET3gBAQAkJACAgBISAEhIAQEAINQ0AEpGFQ60RCQAgIASEgBISAEBACQkAIiIDoHhACQkAICAEhIASEgBAQAkKgYQiIgDQMap1ICAgBISAEhIAQEAJCQAgIAREQ3QNCQAgIASEgBISAEBACQkAINAwBEZCGQa0TCQEhIASEgBAQAkJACAgBISAContACAgBISAEhIAQEAJCQAgIgYYhIALSMKh1IiEgBISAEBACQkAICAEhIAREQHQPCAEhEInA77//bvbbbz/z8MMPm59++sl07tzZnH/++WbZZZdt2WfIkCFm6NCh5u+//za9e/c2p59+upliiinMX3/9ZXbccUfz/PPPmwkTJpgvvvjCzDXXXC37ffTRR2bfffc1L774oplxxhnNgQceaPr37x85lvvvv98cdNBB9jgbbLCBGTlypJl11lnt9q+++qrp27eveeONN8wiiyxirrjiCjvWUvbVV1+Zvffe27zwwgv2mn777bdWm40ZM8aO5c033zRzzDGHOeGEE0yvXr3Mpptuap566im7LftMPfXU9gcbPny42WWXXUwUFmzz0ksvWXzGjh1rVlllFXP11Veb+eefv+QYJ02aZPr06WPuuusue41g2rNnz5Ztufbjjz/e/Pe//zXbbrutPf+0005b8ljjxo0zu+++u3nllVfMEkssYa688kqz/PLL223/+ecfc/jhh1ssp5tuOnPMMceYww47rOZPBMc/55xzDGNp3769Oeqoo+x95awcNhdddJG59NJL7XwMHDjQjtHZv//+a++Zq666ys7J2muvbbcN3mfBi/nmm2/MnnvuaR577DEz33zzGY69/vrr201+/fVXe+133HGHvX+PPPJI069fv0gsTjzxRHPLLbeYd99911x//fVmp512atmW54b78e677zaMkXvnkksuMXfeeae95zGejz///NNMP/309v8ZO/d4OSwq3RfBwb799tvmkEMOsc9Xx44d7TiDtsACC5ivv/7aTDnllPafd911VzvGUlbpPin3bNb8ZtIBhYAQyAUCIiC5mEZdhBCoDwK//PKLOfvss+0CnEXMueeeay688EK7kMTuu+8+s//++9sFHQspFnMs2vbaay+7wGLbLl26mNVXX30yAtK9e3cz77zzWkIzfvx4s+aaa5prrrmmZUEYvCIWSosvvrhd6K2zzjp2EcfCiUU8i7jFFlvMLkQhFrfeeqs5+uijzfvvv19yUc4i9LbbbjPzzDOP2X777ScjIMsss4xd7HM8iE3Xrl3N6NGj7TmcbbLJJnbByWLWWTksWJBCjE4++WSz8847Gxavzz33nHnyySdLThwLdBbcN954o/292Wab2YUkY4BkMaaHHnrILLroomarrbayi9dTTjml5LFWXXVVs/nmm1tMLrvsMjufYAN5YgHOvz3wwAPmhx9+MOuuu6657rrrTLdu3Wp6Q0GQID0rr7yyee+99+zxWbwzl5WwYdHOWCGVXEuQgDDX3G8QwznnnNPss88+llRxH5WyHXbYwcwyyyz2PgY/7lPuZUjecccdZxf/HPPHH3+0Y7zgggvMxhtvXPJY1157renQoYMlqIceemgrAnLWWWeZm2++2eI6zTTTWJLIc3Dqqae2HIu5ZcH/+OOPt/xbJSzK3RfhQUJ0n376aesYYDylCAhjWG211SrOdbn7pNyzWfHA2kAICIHCIiACUtip14ULgeQI/PHHH6ZNmzaGRfzss89uF+orrLCCXdxiLBJZmI0aNarVwfEohyMgRFHOO+88s95669ltWRyykCbKETYWsCxE8bRiLBohChMnTrSLaSIiRDacQVZYPG644YaRF/nxxx/biEA4AtK2bVvz+uuvmwUXXNDuy6KXRWaPHj1ajlWKgJTD4sEHH7SL1HfeecceA2JHJID/LxUFgexxvSxaMSIYEJgBAwZYYsR1X3zxxfZvYE1k5cMPP5zsWlnsM37my0VIOB8LdBb/EEPG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Um5czDUEgcL7gw8+2KZNsdgmRZDFclTxM5E3sKAugroX1KkgzRipVtT+kIYHTkj1unu8FB6c36lvub9zDMghi3JEAjgP9yQ1UpCRIJkpRUDccxF1n5S7LyAVpJlRU0UROvezU3Jz40O+mTFBahGTIFrBs0cROvLMEFoM5S/uSRexqXSflHs2a30v6XhCQAjkAwERkHzMo65CCAgBISAEhIAQEAJCQAh4gYAIiBfTpEEKASEgBISAEBACQkAICIF8ICACko951FUIASEgBISAEBACQkAICAEvEBAB8WKaNEghIASEgBAQAkJACAgBIZAPBERA8jGPugohIASEgBAQAkJACAgBIeAFAiIgXkyTBikEhIAQEAJCQAgIASEgBPKBgAhIPuZRVyEEhIAQEAJCQAgIASEgBLxAQATEi2nSIIWAEBACQkAICAEhIASEQD4QEAHJxzzqKoSAEBACQkAICAEhIASEgBcIiIB4MU0apBAQAkJACAgBISAEhIAQyAcCIiD5mEddhRAQAkJACAgBISAEhIAQ8AIBERAvpkmDFAJCQAgIASEgBISAEBAC+UBABCQf86irEAJCQAgIASEgBISAEBACXiAgAuLFNGmQQkAICAEhIASEgBAQAkIgHwiIgORjHnUVQkAICAEhIASEgBAQAkLACwREQLyYJg1SCAgBISAEhIAQEAJCQAjkAwERkHzMo65CCAgBISAEhIAQEAJCQAh4gYAIiBfTpEEKASEgBISAEBACQkAICIF8ICACko951FUIASEgBISAEBACQkAICAEvEBAB8WKaNEghIASEgBAQAkJACAgBIZAPBERA8jGPugohIASEgBAQAkJACAgBIeAFAiIgXkyTBikEhIAQEAJCQAgIASEgBPKBgAhIPuZRVyEEhIAQEAJCQAgIASEgBLxAQATEi2nSIIWAEBACQkAICAEhIASEQD4QEAHJxzzqKoSAEBACQkAICAEhIASEgBcIiIB4MU0apBAQAkJACAgBISAEhIAQyAcCIiD5mEddhRAQAkJACAgBISAEhIAQ8AIBERAvpkmDFAJCQAgIASEgBISAEBAC+UBABCQf86irEAJCQAgIASEgBISAEBACXiAgAuLFNGmQQkAICAEhIASEgBAQAkIgHwiIgORjHnUVQkAICAEhIASEgBAQAkLACwREQLyYJg1SCAgBISAEhIAQEAJCQAjkAwERkHzMo65CCAgBISAEhIAQEAJCQAh4gYAIiBfTpEEKASEgBISAEBACQkAICIF8ICACkmIe//nnHzNhwgTTtm1bM8UUU6Q4knYVAkJACAgBISAEhIAQEALpEfj333/NTz/9ZOaee24z5ZRTpj9gHY4gApIC1PHjx5v55psvxRG0qxAQAkJACAgBISAEhIAQqD0Cn332mZl33nlrf+AaHFEEJAWIP/74o2nXrp1hgmeeeeYUR9KuQkAICAEhIASEgBAQAkIgPQL//e9/rYN84sSJZpZZZkl/wDocQQQkBahMMBMLEREBSQGkdhUCQkAICAEhIASEgBCoCQI+rE9FQFJMddIJfuONN8yoUaPMV199ZagfkdUfAXIf55hjDrPuuuuazp07q1an/pDrDEJACAgBISAEhEATEUi6Pm3GUEVAUqCeZIIvv/xyc/HFF5vZZ5/dLLTQQmaqqaZKcWbtGhcBiN7HH39svv76a7P77rubgw46SCQkLnjaTggIASEgBISAEPAOgSTr02ZdnAhICuTjTjAL4O22287svffeZt99982sIkEKKDK9KyTk2muvNeedd54ZOXKkWWaZZTI9Xg1OCAgBISAEhIAQEALVIhB3fVrt8WuxnwhIChTDE/zHH3+YzTff3AwZMsSstNJKLUe++uqrzYgRI8yjjz5qpp122hRn1K6VEPj111+tKMCiiy7aiuhBQjbeeGOz9dZbm759+1Y6jP6eAoELLrjAvP/++5bwyZqDwM4772x69uxpevTo0ZwBFPysyLNvtdVW5q677jIdO3YsOBrNufxbb73VOpzuueee5gxAZzVHH320mX/++fXNbcK9IALSBNAbecrwBH/xxRdWc3nLLbc0d955Z8tQhg4dap5//nlzyy23NHJ4hTzXhx9+aL7//nuz3HLLTUb2evXqZRZccEEzYMCAQmLTqIt2PXHQIZc1BwHmYMYZZzQ///xzcwZQ8LMOHz7c7LfffubKK680e+65Z8HRaM7lk+aM40nvoebgz1n1LWge9iIgzcO+IWcOTzDF5XPNNZfp3r27+c9//tMyhrPOOsu89NJL5qabbmrIuIp8knHjxpkffvjBLLvssma66aZrBQUpcMjSnXTSSUWGqO7Xro9O3SGueALmoE2bNmbSpEkVt9UGtUeAiPc+++xjLrvsMpt6K2s8Arz/yUoQAWk89u6M+hY0D3sRkOZhb1/+kIBffvnFhgAHDx5siUHY+ED36dPHhspnnXVWc/rpp9vUhTgWRUD48D/yyCP2mHjkV1tttZIEZIEFFrAvx7Fjx7Z46/GakapFNAX766+/zJ9//mmmn356+/9rr722uf/++ycbHnUmxx57rHn44YfN77//buaZZx5bd3LkkUdaiWBqT3gZ45HD8Awxrj322MMccMABZpNNNjGrr766OfHEE+3fwW2ppZYyF110kU0rCxpjmmaaaayHFUNlimNwLmcUfXPsJ554wnTq1MlccsklVomqlK211lpm9OjRtjCf4/L/l156aUvqQvDvbn9CuyeccILZddddzQorrGD69etn/wTeKI2ddtppBtWxzz//3Mw222ymffv2diEgAhLnzk63jfvoPPPMM4aUODzAPA9LLLFEugNr79gIuDl4+umnzYsvvmiuu+46+zurHXFjX5gnG15xxRX2fcO3hHcjaYlEXwcNGuTJFfg/zKmnntr8/fffhvcQ31neQ0SmunXr5v/FeXIFwW/BJ598Yo4//njz8ssv27WWrL4IiIDUF9+yR3/33XftCx8vCNGHDTfc0Hz00UeT3fhHHXWUefPNN82NN95of2+22Wb2Q73YYotVHH14gr/88suS+b5nnnlmJAHhGNSMQJgwCAhRFOelZ1ws3h9//PHI8XBeFuHUNxx33HG26yVd2nnZkgO+6qqr2mY0Sy65pLnhhhssESA/n0XJc889ZxclLNypWyFVbPHFFzeHH364+fTTTw15tGFzBOSbb76x5AO8OOa9995r1ltvPbv5NttsY+acc04zbNgwc99999nr4xylGuJAMA499FBLmH777TdLlvhgUDuDBf8eHkuYgLzzzjv2g3PyySebO+64o2XzlVdeWQSk4h1dmw3cRyd4tO23397cfPPNtTmBjlIRgVJzQGqiPvwVoavJBkQ+cGyFTd74msAb6yClngF21BzEgq8mG5WagwceeMDWY8rqi4AISH3xjX10GDeL2DFjxlivftAoEKReo0uXLvafkWpdZJFFYtUJlCMgb731lqEQ9LXXXjPlCAheMiR6iYLg/a+GgOD9x9MJeShnkA+IDUQBUkKkAOLijCjRQw89ZEgZg7BByKhpCVuYgPD3FVdc0ey2227msMMOs40ZIR8Ug/MbW2ONNcyBBx5oMQlbmGDc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8opZYoklzJVXXmmWX355u+0///xjDj/8cIslal/HHHOMOeyww2LfZNpQCHzzzTdmzz33NI899piZb775zEUXXWTWX3/9su+GUqiVez44/g033GCmmWYauyvPzVtvvRUJfrnno9zzoNkUAj4jUItnsdJ3u9K3KYyfnkWf7yiNvVoEGvEsZvm7WDMC8ssvv5izzz7bLsI7duxozj33XHPhhRcaPuT33Xef2X///e3iY/rpp7cLj379+pm99trLEhC269Kli1l99dUnIyDdu3c38847ryUz48ePN2uuuaa55pprWhYvwYn/+uuvzeKLL26uv/56s84661jiMuWUU9pF/J9//mkWW2wxS14gFrfeeqs5+uijzfvvv19yUc6Ncdttt5l55pnHbL/99pMRkGWWWcYu9jkexKZr165m9OjR9hzONtlkE7PTTjvZhZezclhA4iBGJ598stl5553NiSeeaJ577jnz5JNPlry/jzrqKEuAbrzxRvt7s802s0SNMUCyGNNDDz1kFl10UbPVVluZtdde25xyyiklj7XqqquazTff3GJy2WWX2bkEG8gTi0X+7YEHHjA//PCDWXfddc11111nunXrVu1zp/0KhsAOO+xgZpllFvte4J7k2efdwP0d9W4IQ1Tp+eA5gzxDkCtZpeej3PNQ6dj6uxDIMgK1eBYrfbfLfZvC2OhZzPLdorHVE4FGPItZ/i7WjICEJ+mPP/4wbdq0MSzkiRSssMIKdnGLEXm49tprzahRo1rtRkQkHAEhgnLeeeeZ9dZbz27LhLGQJsoRNjz8d955pyEKgrHAgShMnDjRLqaJiBDZcAZZueCCC8yGG24YeY99/PHHdlETjoC0bdvWvP7662bBBRe0+7JgIQrSo0ePlmOVIiCQligsHnzwQXPooYead955xx4DUte+fXv7/6WiIBA9rhfy9v/aO2OXOpYoDi+kCxYhQuxCIFUULFLb2ymElEL+gBSpbAyEQCRFCGgXSbBIqRYWameRQJI+TUggCCp2WgiSNo9vYC77Nndn9b313p34nUq89+7OfLNnd35zzpnFiGAgYJ49exaEEf1+8+ZN+AzWRFb29vb+6OuPHz9C+xmrGCHhfAg9hBzCkHYRqcI4PmKQcdQk0ETg7OysGB0dLfAlrlmM64rrEV89z72B3zT5x0VutCn/aPKHpv76uQS6SqAtXyz3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\" width=\"800\">" + ], + "text/plain": [ + "<IPython.core.display.HTML object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "gxx_gol2.plot()" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [], + "source": [ + "gb = np.ones_like(one_minute_gauss_filter)" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "91" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(gb)" + ] + }, + { + "cell_type": "code", + "execution_count": 87, + "metadata": {}, + "outputs": [], + "source": [ + "for i in np.linspace(-45, 45, 91):\n", + " gb[np.int(i) + 45] = i/(15.8734**2)*np.exp(-1/2*(i/15.8734)**2)" + ] + }, + { + "cell_type": "code", + "execution_count": 85, + "metadata": {}, + "outputs": [], + "source": [ + "gb = gb/np.sum(gb)" + ] + }, + { + "cell_type": "code", + "execution_count": 88, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([-0.00321141, -0.0037466 , -0.00435142, -0.00503114, -0.00579071,\n", + " -0.0066346 , -0.00756664, -0.00858978, -0.00970591, -0.01091565,\n", + " -0.01221811, -0.01361069, -0.01508887, -0.01664603, -0.0182733 ,\n", + " -0.01995939, -0.02169058, -0.02345064, -0.02522088, -0.02698025,\n", + " -0.02870551, -0.03037145, -0.03195122, -0.03341673, -0.03473911,\n", + " -0.0358892 , -0.03683818, -0.03755816, -0.03802282, -0.03820808,\n", + " -0.03809279, -0.0376593 , -0.03689407, -0.0357882 , -0.03433785,\n", + " -0.03254457, -0.03041554, -0.02796365, -0.02520746, -0.02217103,\n", + " -0.0188836 , -0.0153791 , -0.01169567, -0.00787486, -0.00396094,\n", + " 0. , 0.00396094, 0.00787486, 0.01169567, 0.0153791 ,\n", + " 0.0188836 , 0.02217103, 0.02520746, 0.02796365, 0.03041554,\n", + " 0.03254457, 0.03433785, 0.0357882 , 0.03689407, 0.0376593 ,\n", + " 0.03809279, 0.03820808, 0.03802282, 0.03755816, 0.03683818,\n", + " 0.0358892 , 0.03473911, 0.03341673, 0.03195122, 0.03037145,\n", + " 0.02870551, 0.02698025, 0.02522088, 0.02345064, 0.02169058,\n", + " 0.01995939, 0.0182733 , 0.01664603, 0.01508887, 0.01361069,\n", + " 0.01221811, 0.01091565, 0.00970591, 0.00858978, 0.00756664,\n", + " 0.0066346 , 0.00579071, 0.00503114, 0.00435142, 0.0037466 ,\n", + " 0.00321141])" + ] + }, + "execution_count": 88, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "gb" + ] + }, + { + "cell_type": "code", + "execution_count": 89, + "metadata": {}, + "outputs": [ + { + "data": { + "application/javascript": [ + "/* Put everything inside the global mpl namespace */\n", + "window.mpl = {};\n", + "\n", + "\n", + "mpl.get_websocket_type = function() {\n", + " if (typeof(WebSocket) !== 'undefined') {\n", + " return WebSocket;\n", + " } else if (typeof(MozWebSocket) !== 'undefined') {\n", + " return MozWebSocket;\n", + " } else {\n", + " alert('Your browser does not have WebSocket support.' +\n", + " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", + " 'Firefox 4 and 5 are also supported but you ' +\n", + " 'have to enable WebSockets in about:config.');\n", + " };\n", + "}\n", + "\n", + "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", + " this.id = figure_id;\n", + "\n", + " this.ws = websocket;\n", + "\n", + " this.supports_binary = (this.ws.binaryType != undefined);\n", + "\n", + " if (!this.supports_binary) {\n", + " var warnings = document.getElementById(\"mpl-warnings\");\n", + " if (warnings) {\n", + " warnings.style.display = 'block';\n", + " warnings.textContent = (\n", + " \"This browser does not support binary websocket messages. \" +\n", + " \"Performance may be slow.\");\n", + " }\n", + " }\n", + "\n", + " this.imageObj = new Image();\n", + "\n", + " this.context = undefined;\n", + " this.message = undefined;\n", + " this.canvas = undefined;\n", + " this.rubberband_canvas = undefined;\n", + " this.rubberband_context = undefined;\n", + " this.format_dropdown = undefined;\n", + "\n", + " this.image_mode = 'full';\n", + "\n", + " this.root = $('<div/>');\n", + " this._root_extra_style(this.root)\n", + " this.root.attr('style', 'display: inline-block');\n", + "\n", + " $(parent_element).append(this.root);\n", + "\n", + " this._init_header(this);\n", + " this._init_canvas(this);\n", + " this._init_toolbar(this);\n", + "\n", + " var fig = this;\n", + "\n", + " this.waiting = false;\n", + "\n", + " this.ws.onopen = function () {\n", + " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", + " fig.send_message(\"send_image_mode\", {});\n", + " if (mpl.ratio != 1) {\n", + " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", + " }\n", + " fig.send_message(\"refresh\", {});\n", + " }\n", + "\n", + " this.imageObj.onload = function() {\n", + " if (fig.image_mode == 'full') {\n", + " // Full images could contain transparency (where diff images\n", + " // almost always do), so we need to clear the canvas so that\n", + " // there is no ghosting.\n", + " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", + " }\n", + " fig.context.drawImage(fig.imageObj, 0, 0);\n", + " };\n", + "\n", + " this.imageObj.onunload = function() {\n", + " fig.ws.close();\n", + " }\n", + "\n", + " this.ws.onmessage = this._make_on_message_function(this);\n", + "\n", + " this.ondownload = ondownload;\n", + "}\n", + "\n", + "mpl.figure.prototype._init_header = function() {\n", + " var titlebar = $(\n", + " '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n", + " 'ui-helper-clearfix\"/>');\n", + " var titletext = $(\n", + " '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n", + " 'text-align: center; padding: 3px;\"/>');\n", + " titlebar.append(titletext)\n", + " this.root.append(titlebar);\n", + " this.header = titletext[0];\n", + "}\n", + "\n", + "\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._init_canvas = function() {\n", + " var fig = this;\n", + "\n", + " var canvas_div = $('<div/>');\n", + "\n", + " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", + "\n", + " function canvas_keyboard_event(event) {\n", + " return fig.key_event(event, event['data']);\n", + " }\n", + "\n", + " canvas_div.keydown('key_press', canvas_keyboard_event);\n", + " canvas_div.keyup('key_release', canvas_keyboard_event);\n", + " this.canvas_div = canvas_div\n", + " this._canvas_extra_style(canvas_div)\n", + " this.root.append(canvas_div);\n", + "\n", + " var canvas = $('<canvas/>');\n", + " canvas.addClass('mpl-canvas');\n", + " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", + "\n", + " this.canvas = canvas[0];\n", + " this.context = canvas[0].getContext(\"2d\");\n", + "\n", + " var backingStore = this.context.backingStorePixelRatio ||\n", + "\tthis.context.webkitBackingStorePixelRatio ||\n", + "\tthis.context.mozBackingStorePixelRatio ||\n", + "\tthis.context.msBackingStorePixelRatio ||\n", + "\tthis.context.oBackingStorePixelRatio ||\n", + "\tthis.context.backingStorePixelRatio || 1;\n", + "\n", + " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", + "\n", + " var rubberband = $('<canvas/>');\n", + " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", + "\n", + " var pass_mouse_events = true;\n", + "\n", + " canvas_div.resizable({\n", + " start: function(event, ui) {\n", + " pass_mouse_events = false;\n", + " },\n", + " resize: function(event, ui) {\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " stop: function(event, ui) {\n", + " pass_mouse_events = true;\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " });\n", + "\n", + " function mouse_event_fn(event) {\n", + " if (pass_mouse_events)\n", + " return fig.mouse_event(event, event['data']);\n", + " }\n", + "\n", + " rubberband.mousedown('button_press', mouse_event_fn);\n", + " rubberband.mouseup('button_release', mouse_event_fn);\n", + " // Throttle sequential mouse events to 1 every 20ms.\n", + " rubberband.mousemove('motion_notify', mouse_event_fn);\n", + "\n", + " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", + " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", + "\n", + " canvas_div.on(\"wheel\", function (event) {\n", + " event = event.originalEvent;\n", + " event['data'] = 'scroll'\n", + " if (event.deltaY < 0) {\n", + " event.step = 1;\n", + " } else {\n", + " event.step = -1;\n", + " }\n", + " mouse_event_fn(event);\n", + " });\n", + "\n", + " canvas_div.append(canvas);\n", + " canvas_div.append(rubberband);\n", + "\n", + " this.rubberband = rubberband;\n", + " this.rubberband_canvas = rubberband[0];\n", + " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", + " this.rubberband_context.strokeStyle = \"#000000\";\n", + "\n", + " this._resize_canvas = function(width, height) {\n", + " // Keep the size of the canvas, canvas container, and rubber band\n", + " // canvas in synch.\n", + " canvas_div.css('width', width)\n", + " canvas_div.css('height', height)\n", + "\n", + " canvas.attr('width', width * mpl.ratio);\n", + " canvas.attr('height', height * mpl.ratio);\n", + " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", + "\n", + " rubberband.attr('width', width);\n", + " rubberband.attr('height', height);\n", + " }\n", + "\n", + " // Set the figure to an initial 600x600px, this will subsequently be updated\n", + " // upon first draw.\n", + " this._resize_canvas(600, 600);\n", + "\n", + " // Disable right mouse context menu.\n", + " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", + " return false;\n", + " });\n", + "\n", + " function set_focus () {\n", + " canvas.focus();\n", + " canvas_div.focus();\n", + " }\n", + "\n", + " window.setTimeout(set_focus, 100);\n", + "}\n", + "\n", + "mpl.figure.prototype._init_toolbar = function() {\n", + " var fig = this;\n", + "\n", + " var nav_element = $('<div/>')\n", + " nav_element.attr('style', 'width: 100%');\n", + " this.root.append(nav_element);\n", + "\n", + " // Define a callback function for later on.\n", + " function toolbar_event(event) {\n", + " return fig.toolbar_button_onclick(event['data']);\n", + " }\n", + " function toolbar_mouse_event(event) {\n", + " return fig.toolbar_button_onmouseover(event['data']);\n", + " }\n", + "\n", + " for(var toolbar_ind in mpl.toolbar_items) {\n", + " var name = mpl.toolbar_items[toolbar_ind][0];\n", + " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", + " var image = mpl.toolbar_items[toolbar_ind][2];\n", + " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", + "\n", + " if (!name) {\n", + " // put a spacer in here.\n", + " continue;\n", + " }\n", + " var button = $('<button/>');\n", + " button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n", + " 'ui-button-icon-only');\n", + " button.attr('role', 'button');\n", + " button.attr('aria-disabled', 'false');\n", + " button.click(method_name, toolbar_event);\n", + " button.mouseover(tooltip, toolbar_mouse_event);\n", + "\n", + " var icon_img = $('<span/>');\n", + " icon_img.addClass('ui-button-icon-primary ui-icon');\n", + " icon_img.addClass(image);\n", + " icon_img.addClass('ui-corner-all');\n", + "\n", + " var tooltip_span = $('<span/>');\n", + " tooltip_span.addClass('ui-button-text');\n", + " tooltip_span.html(tooltip);\n", + "\n", + " button.append(icon_img);\n", + " button.append(tooltip_span);\n", + "\n", + " nav_element.append(button);\n", + " }\n", + "\n", + " var fmt_picker_span = $('<span/>');\n", + "\n", + " var fmt_picker = $('<select/>');\n", + " fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n", + " fmt_picker_span.append(fmt_picker);\n", + " nav_element.append(fmt_picker_span);\n", + " this.format_dropdown = fmt_picker[0];\n", + "\n", + " for (var ind in mpl.extensions) {\n", + " var fmt = mpl.extensions[ind];\n", + " var option = $(\n", + " '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n", + " fmt_picker.append(option)\n", + " }\n", + "\n", + " // Add hover states to the ui-buttons\n", + " $( \".ui-button\" ).hover(\n", + " function() { $(this).addClass(\"ui-state-hover\");},\n", + " function() { $(this).removeClass(\"ui-state-hover\");}\n", + " );\n", + "\n", + " var status_bar = $('<span class=\"mpl-message\"/>');\n", + " nav_element.append(status_bar);\n", + " this.message = status_bar[0];\n", + "}\n", + "\n", + "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n", + " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", + " // which will in turn request a refresh of the image.\n", + " this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n", + "}\n", + "\n", + "mpl.figure.prototype.send_message = function(type, properties) {\n", + " properties['type'] = type;\n", + " properties['figure_id'] = this.id;\n", + " this.ws.send(JSON.stringify(properties));\n", + "}\n", + "\n", + "mpl.figure.prototype.send_draw_message = function() {\n", + " if (!this.waiting) {\n", + " this.waiting = true;\n", + " this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n", + " }\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype.handle_save = function(fig, msg) {\n", + " var format_dropdown = fig.format_dropdown;\n", + " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", + " fig.ondownload(fig, format);\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype.handle_resize = function(fig, msg) {\n", + " var size = msg['size'];\n", + " if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n", + " fig._resize_canvas(size[0], size[1]);\n", + " fig.send_message(\"refresh\", {});\n", + " };\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n", + " var x0 = msg['x0'] / mpl.ratio;\n", + " var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n", + " var x1 = msg['x1'] / mpl.ratio;\n", + " var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n", + " x0 = Math.floor(x0) + 0.5;\n", + " y0 = Math.floor(y0) + 0.5;\n", + " x1 = Math.floor(x1) + 0.5;\n", + " y1 = Math.floor(y1) + 0.5;\n", + " var min_x = Math.min(x0, x1);\n", + " var min_y = Math.min(y0, y1);\n", + " var width = Math.abs(x1 - x0);\n", + " var height = Math.abs(y1 - y0);\n", + "\n", + " fig.rubberband_context.clearRect(\n", + " 0, 0, fig.canvas.width, fig.canvas.height);\n", + "\n", + " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n", + " // Updates the figure title.\n", + " fig.header.textContent = msg['label'];\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n", + " var cursor = msg['cursor'];\n", + " switch(cursor)\n", + " {\n", + " case 0:\n", + " cursor = 'pointer';\n", + " break;\n", + " case 1:\n", + " cursor = 'default';\n", + " break;\n", + " case 2:\n", + " cursor = 'crosshair';\n", + " break;\n", + " case 3:\n", + " cursor = 'move';\n", + " break;\n", + " }\n", + " fig.rubberband_canvas.style.cursor = cursor;\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_message = function(fig, msg) {\n", + " fig.message.textContent = msg['message'];\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_draw = function(fig, msg) {\n", + " // Request the server to send over a new figure.\n", + " fig.send_draw_message();\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n", + " fig.image_mode = msg['mode'];\n", + "}\n", + "\n", + "mpl.figure.prototype.updated_canvas_event = function() {\n", + " // Called whenever the canvas gets updated.\n", + " this.send_message(\"ack\", {});\n", + "}\n", + "\n", + "// A function to construct a web socket function for onmessage handling.\n", + "// Called in the figure constructor.\n", + "mpl.figure.prototype._make_on_message_function = function(fig) {\n", + " return function socket_on_message(evt) {\n", + " if (evt.data instanceof Blob) {\n", + " /* FIXME: We get \"Resource interpreted as Image but\n", + " * transferred with MIME type text/plain:\" errors on\n", + " * Chrome. But how to set the MIME type? It doesn't seem\n", + " * to be part of the websocket stream */\n", + " evt.data.type = \"image/png\";\n", + "\n", + " /* Free the memory for the previous frames */\n", + " if (fig.imageObj.src) {\n", + " (window.URL || window.webkitURL).revokeObjectURL(\n", + " fig.imageObj.src);\n", + " }\n", + "\n", + " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", + " evt.data);\n", + " fig.updated_canvas_event();\n", + " fig.waiting = false;\n", + " return;\n", + " }\n", + " else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n", + " fig.imageObj.src = evt.data;\n", + " fig.updated_canvas_event();\n", + " fig.waiting = false;\n", + " return;\n", + " }\n", + "\n", + " var msg = JSON.parse(evt.data);\n", + " var msg_type = msg['type'];\n", + "\n", + " // Call the \"handle_{type}\" callback, which takes\n", + " // the figure and JSON message as its only arguments.\n", + " try {\n", + " var callback = fig[\"handle_\" + msg_type];\n", + " } catch (e) {\n", + " console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n", + " return;\n", + " }\n", + "\n", + " if (callback) {\n", + " try {\n", + " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", + " callback(fig, msg);\n", + " } catch (e) {\n", + " console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n", + " }\n", + " }\n", + " };\n", + "}\n", + "\n", + "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", + "mpl.findpos = function(e) {\n", + " //this section is from http://www.quirksmode.org/js/events_properties.html\n", + " var targ;\n", + " if (!e)\n", + " e = window.event;\n", + " if (e.target)\n", + " targ = e.target;\n", + " else if (e.srcElement)\n", + " targ = e.srcElement;\n", + " if (targ.nodeType == 3) // defeat Safari bug\n", + " targ = targ.parentNode;\n", + "\n", + " // jQuery normalizes the pageX and pageY\n", + " // pageX,Y are the mouse positions relative to the document\n", + " // offset() returns the position of the element relative to the document\n", + " var x = e.pageX - $(targ).offset().left;\n", + " var y = e.pageY - $(targ).offset().top;\n", + "\n", + " return {\"x\": x, \"y\": y};\n", + "};\n", + "\n", + "/*\n", + " * return a copy of an object with only non-object keys\n", + " * we need this to avoid circular references\n", + " * http://stackoverflow.com/a/24161582/3208463\n", + " */\n", + "function simpleKeys (original) {\n", + " return Object.keys(original).reduce(function (obj, key) {\n", + " if (typeof original[key] !== 'object')\n", + " obj[key] = original[key]\n", + " return obj;\n", + " }, {});\n", + "}\n", + "\n", + "mpl.figure.prototype.mouse_event = function(event, name) {\n", + " var canvas_pos = mpl.findpos(event)\n", + "\n", + " if (name === 'button_press')\n", + " {\n", + " this.canvas.focus();\n", + " this.canvas_div.focus();\n", + " }\n", + "\n", + " var x = canvas_pos.x * mpl.ratio;\n", + " var y = canvas_pos.y * mpl.ratio;\n", + "\n", + " this.send_message(name, {x: x, y: y, button: event.button,\n", + " step: event.step,\n", + " guiEvent: simpleKeys(event)});\n", + "\n", + " /* This prevents the web browser from automatically changing to\n", + " * the text insertion cursor when the button is pressed. We want\n", + " * to control all of the cursor setting manually through the\n", + " * 'cursor' event from matplotlib */\n", + " event.preventDefault();\n", + " return false;\n", + "}\n", + "\n", + "mpl.figure.prototype._key_event_extra = function(event, name) {\n", + " // Handle any extra behaviour associated with a key event\n", + "}\n", + "\n", + "mpl.figure.prototype.key_event = function(event, name) {\n", + "\n", + " // Prevent repeat events\n", + " if (name == 'key_press')\n", + " {\n", + " if (event.which === this._key)\n", + " return;\n", + " else\n", + " this._key = event.which;\n", + " }\n", + " if (name == 'key_release')\n", + " this._key = null;\n", + "\n", + " var value = '';\n", + " if (event.ctrlKey && event.which != 17)\n", + " value += \"ctrl+\";\n", + " if (event.altKey && event.which != 18)\n", + " value += \"alt+\";\n", + " if (event.shiftKey && event.which != 16)\n", + " value += \"shift+\";\n", + "\n", + " value += 'k';\n", + " value += event.which.toString();\n", + "\n", + " this._key_event_extra(event, name);\n", + "\n", + " this.send_message(name, {key: value,\n", + " guiEvent: simpleKeys(event)});\n", + " return false;\n", + "}\n", + "\n", + "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n", + " if (name == 'download') {\n", + " this.handle_save(this, null);\n", + " } else {\n", + " this.send_message(\"toolbar_button\", {name: name});\n", + " }\n", + "};\n", + "\n", + "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n", + " this.message.textContent = tooltip;\n", + "};\n", + "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", + "\n", + "mpl.extensions = [\"eps\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\"];\n", + "\n", + "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n", + " // Create a \"websocket\"-like object which calls the given IPython comm\n", + " // object with the appropriate methods. Currently this is a non binary\n", + " // socket, so there is still some room for performance tuning.\n", + " var ws = {};\n", + "\n", + " ws.close = function() {\n", + " comm.close()\n", + " };\n", + " ws.send = function(m) {\n", + " //console.log('sending', m);\n", + " comm.send(m);\n", + " };\n", + " // Register the callback with on_msg.\n", + " comm.on_msg(function(msg) {\n", + " //console.log('receiving', msg['content']['data'], msg);\n", + " // Pass the mpl event to the overridden (by mpl) onmessage function.\n", + " ws.onmessage(msg['content']['data'])\n", + " });\n", + " return ws;\n", + "}\n", + "\n", + "mpl.mpl_figure_comm = function(comm, msg) {\n", + " // This is the function which gets called when the mpl process\n", + " // starts-up an IPython Comm through the \"matplotlib\" channel.\n", + "\n", + " var id = msg.content.data.id;\n", + " // Get hold of the div created by the display call when the Comm\n", + " // socket was opened in Python.\n", + " var element = $(\"#\" + id);\n", + " var ws_proxy = comm_websocket_adapter(comm)\n", + "\n", + " function ondownload(figure, format) {\n", + " window.open(figure.imageObj.src);\n", + " }\n", + "\n", + " var fig = new mpl.figure(id, ws_proxy,\n", + " ondownload,\n", + " element.get(0));\n", + "\n", + " // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n", + " // web socket which is closed, not our websocket->open comm proxy.\n", + " ws_proxy.onopen();\n", + "\n", + " fig.parent_element = element.get(0);\n", + " fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n", + " if (!fig.cell_info) {\n", + " console.error(\"Failed to find cell for figure\", id, fig);\n", + " return;\n", + " }\n", + "\n", + " var output_index = fig.cell_info[2]\n", + " var cell = fig.cell_info[0];\n", + "\n", + "};\n", + "\n", + "mpl.figure.prototype.handle_close = function(fig, msg) {\n", + " var width = fig.canvas.width/mpl.ratio\n", + " fig.root.unbind('remove')\n", + "\n", + " // Update the output cell to use the data from the current canvas.\n", + " fig.push_to_output();\n", + " var dataURL = fig.canvas.toDataURL();\n", + " // Re-enable the keyboard manager in IPython - without this line, in FF,\n", + " // the notebook keyboard shortcuts fail.\n", + " IPython.keyboard_manager.enable()\n", + " $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n", + " fig.close_ws(fig, msg);\n", + "}\n", + "\n", + "mpl.figure.prototype.close_ws = function(fig, msg){\n", + " fig.send_message('closing', msg);\n", + " // fig.ws.close()\n", + "}\n", + "\n", + "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n", + " // Turn the data on the canvas into data in the output cell.\n", + " var width = this.canvas.width/mpl.ratio\n", + " var dataURL = this.canvas.toDataURL();\n", + " this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n", + "}\n", + "\n", + "mpl.figure.prototype.updated_canvas_event = function() {\n", + " // Tell IPython that the notebook contents must change.\n", + " IPython.notebook.set_dirty(true);\n", + " this.send_message(\"ack\", {});\n", + " var fig = this;\n", + " // Wait a second, then push the new image to the DOM so\n", + " // that it is saved nicely (might be nice to debounce this).\n", + " setTimeout(function () { fig.push_to_output() }, 1000);\n", + "}\n", + "\n", + "mpl.figure.prototype._init_toolbar = function() {\n", + " var fig = this;\n", + "\n", + " var nav_element = $('<div/>')\n", + " nav_element.attr('style', 'width: 100%');\n", + " this.root.append(nav_element);\n", + "\n", + " // Define a callback function for later on.\n", + " function toolbar_event(event) {\n", + " return fig.toolbar_button_onclick(event['data']);\n", + " }\n", + " function toolbar_mouse_event(event) {\n", + " return fig.toolbar_button_onmouseover(event['data']);\n", + " }\n", + "\n", + " for(var toolbar_ind in mpl.toolbar_items){\n", + " var name = mpl.toolbar_items[toolbar_ind][0];\n", + " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", + " var image = mpl.toolbar_items[toolbar_ind][2];\n", + " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", + "\n", + " if (!name) { continue; };\n", + "\n", + " var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n", + " button.click(method_name, toolbar_event);\n", + " button.mouseover(tooltip, toolbar_mouse_event);\n", + " nav_element.append(button);\n", + " }\n", + "\n", + " // Add the status bar.\n", + " var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n", + " nav_element.append(status_bar);\n", + " this.message = status_bar[0];\n", + "\n", + " // Add the close button to the window.\n", + " var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n", + " var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n", + " button.click(function (evt) { fig.handle_close(fig, {}); } );\n", + " button.mouseover('Stop Interaction', toolbar_mouse_event);\n", + " buttongrp.append(button);\n", + " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", + " titlebar.prepend(buttongrp);\n", + "}\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(el){\n", + " var fig = this\n", + " el.on(\"remove\", function(){\n", + "\tfig.close_ws(fig, {});\n", + " });\n", + "}\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(el){\n", + " // this is important to make the div 'focusable\n", + " el.attr('tabindex', 0)\n", + " // reach out to IPython and tell the keyboard manager to turn it's self\n", + " // off when our div gets focus\n", + "\n", + " // location in version 3\n", + " if (IPython.notebook.keyboard_manager) {\n", + " IPython.notebook.keyboard_manager.register_events(el);\n", + " }\n", + " else {\n", + " // location in version 2\n", + " IPython.keyboard_manager.register_events(el);\n", + " }\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._key_event_extra = function(event, name) {\n", + " var manager = IPython.notebook.keyboard_manager;\n", + " if (!manager)\n", + " manager = IPython.keyboard_manager;\n", + "\n", + " // Check for shift+enter\n", + " if (event.shiftKey && event.which == 13) {\n", + " this.canvas_div.blur();\n", + " event.shiftKey = false;\n", + " // Send a \"J\" for go to next cell\n", + " event.which = 74;\n", + " event.keyCode = 74;\n", + " manager.command_mode();\n", + " manager.handle_keydown(event);\n", + " }\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_save = function(fig, msg) {\n", + " fig.ondownload(fig, null);\n", + "}\n", + "\n", + "\n", + "mpl.find_output_cell = function(html_output) {\n", + " // Return the cell and output element which can be found *uniquely* in the notebook.\n", + " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", + " // IPython event is triggered only after the cells have been serialised, which for\n", + " // our purposes (turning an active figure into a static one), is too late.\n", + " var cells = IPython.notebook.get_cells();\n", + " var ncells = cells.length;\n", + " for (var i=0; i<ncells; i++) {\n", + " var cell = cells[i];\n", + " if (cell.cell_type === 'code'){\n", + " for (var j=0; j<cell.output_area.outputs.length; j++) {\n", + " var data = cell.output_area.outputs[j];\n", + " if (data.data) {\n", + " // IPython >= 3 moved mimebundle to data attribute of output\n", + " data = data.data;\n", + " }\n", + " if (data['text/html'] == html_output) {\n", + " return [cell, data, j];\n", + " }\n", + " }\n", + " }\n", + " }\n", + "}\n", + "\n", + "// Register the function which deals with the matplotlib target/channel.\n", + "// The kernel may be null if the page has been refreshed.\n", + "if (IPython.notebook.kernel != null) {\n", + " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", + "}\n" + ], + "text/plain": [ + "<IPython.core.display.Javascript object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "<img src=\"data:image/png;base64,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3uRYSIAESIAESIAESMAOAhSAdkBiFRIgARIgARIgARKwEgEKQCt5k2MhARIgARIgARIgATsIUADaAYlVSIAESIAESIAESMBKBCgAreRNjoUESIAESIAESIAE7CBAAWgHJFYhARIgARIgARIgASsRoAC0kjc5FhIgARIgARIgARKwgwAFoB2QWIUESIAESIAESIAErESAAtBK3uRYSIAESIAESIAESMAOAhSAdkBiFRIgARIgARIgARKwEgEKQCt5k2MhARIgARIgARIgATsIUADaAYlVSIAESIAESIAESMBKBCgAreRNjoUESIAESIAESIAE7CBAAWgHJFYhARIgARIgARIgASsRoAC0kjc5FhIgARIgARIgARKwgwAFoB2QWIUESIAESIAESIAErESAAtBK3uRYSIAESIAESIAESMAOAhSAdkBiFRIgARIgARIgARKwEgEKQCt5k2MhARIgARIgARIgATsIUADaAYlVSIAESIAESIAESMBKBCgAreRNjoUESIAESIAESIAE7CBAAWgHJFYhARIgARIgARIgASsRoAC0kjc5FhIgARIgARIgARKwgwAFoB2QWIUESIAESIAESIAErESAAtBK3uRYSIAESIAESIAESMAOAhSAdkBiFRIgARIgARIgARKwEgEKQCt5k2MhARIgARIgARIgATsIUADaAYlVSIAESIAESIAESMBKBP4PqLhk1uX9waEAAAAASUVORK5CYII=\" width=\"640\">" + ], + "text/plain": [ + "<IPython.core.display.HTML object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "[<matplotlib.lines.Line2D at 0x1c28d280f0>]" + ] + }, + "execution_count": 89, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pl.plot(gb)" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([-45., -44., -43., -42., -41., -40., -39., -38., -37., -36., -35.,\n", + " -34., -33., -32., -31., -30., -29., -28., -27., -26., -25., -24.,\n", + " -23., -22., -21., -20., -19., -18., -17., -16., -15., -14., -13.,\n", + " -12., -11., -10., -9., -8., -7., -6., -5., -4., -3., -2.,\n", + " -1., 0., 1., 2., 3., 4., 5., 6., 7., 8., 9.,\n", + " 10., 11., 12., 13., 14., 15., 16., 17., 18., 19., 20.,\n", + " 21., 22., 23., 24., 25., 26., 27., 28., 29., 30., 31.,\n", + " 32., 33., 34., 35., 36., 37., 38., 39., 40., 41., 42.,\n", + " 43., 44., 45.])" + ] + }, + "execution_count": 41, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.linspace(-45,45,91)" + ] + }, + { + "cell_type": "code", + "execution_count": 82, + "metadata": {}, + "outputs": [], + "source": [ + "hfdiff = np.dot(gb, as_s[::60].T)" + ] + }, + { + "cell_type": "code", + "execution_count": 84, + "metadata": {}, + "outputs": [ + { + "data": { + "application/javascript": [ + "/* Put everything inside the global mpl namespace */\n", + "window.mpl = {};\n", + "\n", + "\n", + "mpl.get_websocket_type = function() {\n", + " if (typeof(WebSocket) !== 'undefined') {\n", + " return WebSocket;\n", + " } else if (typeof(MozWebSocket) !== 'undefined') {\n", + " return MozWebSocket;\n", + " } else {\n", + " alert('Your browser does not have WebSocket support.' +\n", + " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", + " 'Firefox 4 and 5 are also supported but you ' +\n", + " 'have to enable WebSockets in about:config.');\n", + " };\n", + "}\n", + "\n", + "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", + " this.id = figure_id;\n", + "\n", + " this.ws = websocket;\n", + "\n", + " this.supports_binary = (this.ws.binaryType != undefined);\n", + "\n", + " if (!this.supports_binary) {\n", + " var warnings = document.getElementById(\"mpl-warnings\");\n", + " if (warnings) {\n", + " warnings.style.display = 'block';\n", + " warnings.textContent = (\n", + " \"This browser does not support binary websocket messages. \" +\n", + " \"Performance may be slow.\");\n", + " }\n", + " }\n", + "\n", + " this.imageObj = new Image();\n", + "\n", + " this.context = undefined;\n", + " this.message = undefined;\n", + " this.canvas = undefined;\n", + " this.rubberband_canvas = undefined;\n", + " this.rubberband_context = undefined;\n", + " this.format_dropdown = undefined;\n", + "\n", + " this.image_mode = 'full';\n", + "\n", + " this.root = $('<div/>');\n", + " this._root_extra_style(this.root)\n", + " this.root.attr('style', 'display: inline-block');\n", + "\n", + " $(parent_element).append(this.root);\n", + "\n", + " this._init_header(this);\n", + " this._init_canvas(this);\n", + " this._init_toolbar(this);\n", + "\n", + " var fig = this;\n", + "\n", + " this.waiting = false;\n", + "\n", + " this.ws.onopen = function () {\n", + " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", + " fig.send_message(\"send_image_mode\", {});\n", + " if (mpl.ratio != 1) {\n", + " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", + " }\n", + " fig.send_message(\"refresh\", {});\n", + " }\n", + "\n", + " this.imageObj.onload = function() {\n", + " if (fig.image_mode == 'full') {\n", + " // Full images could contain transparency (where diff images\n", + " // almost always do), so we need to clear the canvas so that\n", + " // there is no ghosting.\n", + " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", + " }\n", + " fig.context.drawImage(fig.imageObj, 0, 0);\n", + " };\n", + "\n", + " this.imageObj.onunload = function() {\n", + " fig.ws.close();\n", + " }\n", + "\n", + " this.ws.onmessage = this._make_on_message_function(this);\n", + "\n", + " this.ondownload = ondownload;\n", + "}\n", + "\n", + "mpl.figure.prototype._init_header = function() {\n", + " var titlebar = $(\n", + " '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n", + " 'ui-helper-clearfix\"/>');\n", + " var titletext = $(\n", + " '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n", + " 'text-align: center; padding: 3px;\"/>');\n", + " titlebar.append(titletext)\n", + " this.root.append(titlebar);\n", + " this.header = titletext[0];\n", + "}\n", + "\n", + "\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._init_canvas = function() {\n", + " var fig = this;\n", + "\n", + " var canvas_div = $('<div/>');\n", + "\n", + " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", + "\n", + " function canvas_keyboard_event(event) {\n", + " return fig.key_event(event, event['data']);\n", + " }\n", + "\n", + " canvas_div.keydown('key_press', canvas_keyboard_event);\n", + " canvas_div.keyup('key_release', canvas_keyboard_event);\n", + " this.canvas_div = canvas_div\n", + " this._canvas_extra_style(canvas_div)\n", + " this.root.append(canvas_div);\n", + "\n", + " var canvas = $('<canvas/>');\n", + " canvas.addClass('mpl-canvas');\n", + " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", + "\n", + " this.canvas = canvas[0];\n", + " this.context = canvas[0].getContext(\"2d\");\n", + "\n", + " var backingStore = this.context.backingStorePixelRatio ||\n", + "\tthis.context.webkitBackingStorePixelRatio ||\n", + "\tthis.context.mozBackingStorePixelRatio ||\n", + "\tthis.context.msBackingStorePixelRatio ||\n", + "\tthis.context.oBackingStorePixelRatio ||\n", + "\tthis.context.backingStorePixelRatio || 1;\n", + "\n", + " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", + "\n", + " var rubberband = $('<canvas/>');\n", + " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", + "\n", + " var pass_mouse_events = true;\n", + "\n", + " canvas_div.resizable({\n", + " start: function(event, ui) {\n", + " pass_mouse_events = false;\n", + " },\n", + " resize: function(event, ui) {\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " stop: function(event, ui) {\n", + " pass_mouse_events = true;\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " });\n", + "\n", + " function mouse_event_fn(event) {\n", + " if (pass_mouse_events)\n", + " return fig.mouse_event(event, event['data']);\n", + " }\n", + "\n", + " rubberband.mousedown('button_press', mouse_event_fn);\n", + " rubberband.mouseup('button_release', mouse_event_fn);\n", + " // Throttle sequential mouse events to 1 every 20ms.\n", + " rubberband.mousemove('motion_notify', mouse_event_fn);\n", + "\n", + " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", + " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", + "\n", + " canvas_div.on(\"wheel\", function (event) {\n", + " event = event.originalEvent;\n", + " event['data'] = 'scroll'\n", + " if (event.deltaY < 0) {\n", + " event.step = 1;\n", + " } else {\n", + " event.step = -1;\n", + " }\n", + " mouse_event_fn(event);\n", + " });\n", + "\n", + " canvas_div.append(canvas);\n", + " canvas_div.append(rubberband);\n", + "\n", + " this.rubberband = rubberband;\n", + " this.rubberband_canvas = rubberband[0];\n", + " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", + " this.rubberband_context.strokeStyle = \"#000000\";\n", + "\n", + " this._resize_canvas = function(width, height) {\n", + " // Keep the size of the canvas, canvas container, and rubber band\n", + " // canvas in synch.\n", + " canvas_div.css('width', width)\n", + " canvas_div.css('height', height)\n", + "\n", + " canvas.attr('width', width * mpl.ratio);\n", + " canvas.attr('height', height * mpl.ratio);\n", + " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", + "\n", + " rubberband.attr('width', width);\n", + " rubberband.attr('height', height);\n", + " }\n", + "\n", + " // Set the figure to an initial 600x600px, this will subsequently be updated\n", + " // upon first draw.\n", + " this._resize_canvas(600, 600);\n", + "\n", + " // Disable right mouse context menu.\n", + " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", + " return false;\n", + " });\n", + "\n", + " function set_focus () {\n", + " canvas.focus();\n", + " canvas_div.focus();\n", + " }\n", + "\n", + " window.setTimeout(set_focus, 100);\n", + "}\n", + "\n", + "mpl.figure.prototype._init_toolbar = function() {\n", + " var fig = this;\n", + "\n", + " var nav_element = $('<div/>')\n", + " nav_element.attr('style', 'width: 100%');\n", + " this.root.append(nav_element);\n", + "\n", + " // Define a callback function for later on.\n", + " function toolbar_event(event) {\n", + " return fig.toolbar_button_onclick(event['data']);\n", + " }\n", + " function toolbar_mouse_event(event) {\n", + " return fig.toolbar_button_onmouseover(event['data']);\n", + " }\n", + "\n", + " for(var toolbar_ind in mpl.toolbar_items) {\n", + " var name = mpl.toolbar_items[toolbar_ind][0];\n", + " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", + " var image = mpl.toolbar_items[toolbar_ind][2];\n", + " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", + "\n", + " if (!name) {\n", + " // put a spacer in here.\n", + " continue;\n", + " }\n", + " var button = $('<button/>');\n", + " button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n", + " 'ui-button-icon-only');\n", + " button.attr('role', 'button');\n", + " button.attr('aria-disabled', 'false');\n", + " button.click(method_name, toolbar_event);\n", + " button.mouseover(tooltip, toolbar_mouse_event);\n", + "\n", + " var icon_img = $('<span/>');\n", + " icon_img.addClass('ui-button-icon-primary ui-icon');\n", + " icon_img.addClass(image);\n", + " icon_img.addClass('ui-corner-all');\n", + "\n", + " var tooltip_span = $('<span/>');\n", + " tooltip_span.addClass('ui-button-text');\n", + " tooltip_span.html(tooltip);\n", + "\n", + " button.append(icon_img);\n", + " button.append(tooltip_span);\n", + "\n", + " nav_element.append(button);\n", + " }\n", + "\n", + " var fmt_picker_span = $('<span/>');\n", + "\n", + " var fmt_picker = $('<select/>');\n", + " fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n", + " fmt_picker_span.append(fmt_picker);\n", + " nav_element.append(fmt_picker_span);\n", + " this.format_dropdown = fmt_picker[0];\n", + "\n", + " for (var ind in mpl.extensions) {\n", + " var fmt = mpl.extensions[ind];\n", + " var option = $(\n", + " '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n", + " fmt_picker.append(option)\n", + " }\n", + "\n", + " // Add hover states to the ui-buttons\n", + " $( \".ui-button\" ).hover(\n", + " function() { $(this).addClass(\"ui-state-hover\");},\n", + " function() { $(this).removeClass(\"ui-state-hover\");}\n", + " );\n", + "\n", + " var status_bar = $('<span class=\"mpl-message\"/>');\n", + " nav_element.append(status_bar);\n", + " this.message = status_bar[0];\n", + "}\n", + "\n", + "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n", + " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", + " // which will in turn request a refresh of the image.\n", + " this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n", + "}\n", + "\n", + "mpl.figure.prototype.send_message = function(type, properties) {\n", + " properties['type'] = type;\n", + " properties['figure_id'] = this.id;\n", + " this.ws.send(JSON.stringify(properties));\n", + "}\n", + "\n", + "mpl.figure.prototype.send_draw_message = function() {\n", + " if (!this.waiting) {\n", + " this.waiting = true;\n", + " this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n", + " }\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype.handle_save = function(fig, msg) {\n", + " var format_dropdown = fig.format_dropdown;\n", + " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", + " fig.ondownload(fig, format);\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype.handle_resize = function(fig, msg) {\n", + " var size = msg['size'];\n", + " if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n", + " fig._resize_canvas(size[0], size[1]);\n", + " fig.send_message(\"refresh\", {});\n", + " };\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n", + " var x0 = msg['x0'] / mpl.ratio;\n", + " var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n", + " var x1 = msg['x1'] / mpl.ratio;\n", + " var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n", + " x0 = Math.floor(x0) + 0.5;\n", + " y0 = Math.floor(y0) + 0.5;\n", + " x1 = Math.floor(x1) + 0.5;\n", + " y1 = Math.floor(y1) + 0.5;\n", + " var min_x = Math.min(x0, x1);\n", + " var min_y = Math.min(y0, y1);\n", + " var width = Math.abs(x1 - x0);\n", + " var height = Math.abs(y1 - y0);\n", + "\n", + " fig.rubberband_context.clearRect(\n", + " 0, 0, fig.canvas.width, fig.canvas.height);\n", + "\n", + " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n", + " // Updates the figure title.\n", + " fig.header.textContent = msg['label'];\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n", + " var cursor = msg['cursor'];\n", + " switch(cursor)\n", + " {\n", + " case 0:\n", + " cursor = 'pointer';\n", + " break;\n", + " case 1:\n", + " cursor = 'default';\n", + " break;\n", + " case 2:\n", + " cursor = 'crosshair';\n", + " break;\n", + " case 3:\n", + " cursor = 'move';\n", + " break;\n", + " }\n", + " fig.rubberband_canvas.style.cursor = cursor;\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_message = function(fig, msg) {\n", + " fig.message.textContent = msg['message'];\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_draw = function(fig, msg) {\n", + " // Request the server to send over a new figure.\n", + " fig.send_draw_message();\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n", + " fig.image_mode = msg['mode'];\n", + "}\n", + "\n", + "mpl.figure.prototype.updated_canvas_event = function() {\n", + " // Called whenever the canvas gets updated.\n", + " this.send_message(\"ack\", {});\n", + "}\n", + "\n", + "// A function to construct a web socket function for onmessage handling.\n", + "// Called in the figure constructor.\n", + "mpl.figure.prototype._make_on_message_function = function(fig) {\n", + " return function socket_on_message(evt) {\n", + " if (evt.data instanceof Blob) {\n", + " /* FIXME: We get \"Resource interpreted as Image but\n", + " * transferred with MIME type text/plain:\" errors on\n", + " * Chrome. But how to set the MIME type? It doesn't seem\n", + " * to be part of the websocket stream */\n", + " evt.data.type = \"image/png\";\n", + "\n", + " /* Free the memory for the previous frames */\n", + " if (fig.imageObj.src) {\n", + " (window.URL || window.webkitURL).revokeObjectURL(\n", + " fig.imageObj.src);\n", + " }\n", + "\n", + " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", + " evt.data);\n", + " fig.updated_canvas_event();\n", + " fig.waiting = false;\n", + " return;\n", + " }\n", + " else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n", + " fig.imageObj.src = evt.data;\n", + " fig.updated_canvas_event();\n", + " fig.waiting = false;\n", + " return;\n", + " }\n", + "\n", + " var msg = JSON.parse(evt.data);\n", + " var msg_type = msg['type'];\n", + "\n", + " // Call the \"handle_{type}\" callback, which takes\n", + " // the figure and JSON message as its only arguments.\n", + " try {\n", + " var callback = fig[\"handle_\" + msg_type];\n", + " } catch (e) {\n", + " console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n", + " return;\n", + " }\n", + "\n", + " if (callback) {\n", + " try {\n", + " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", + " callback(fig, msg);\n", + " } catch (e) {\n", + " console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n", + " }\n", + " }\n", + " };\n", + "}\n", + "\n", + "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", + "mpl.findpos = function(e) {\n", + " //this section is from http://www.quirksmode.org/js/events_properties.html\n", + " var targ;\n", + " if (!e)\n", + " e = window.event;\n", + " if (e.target)\n", + " targ = e.target;\n", + " else if (e.srcElement)\n", + " targ = e.srcElement;\n", + " if (targ.nodeType == 3) // defeat Safari bug\n", + " targ = targ.parentNode;\n", + "\n", + " // jQuery normalizes the pageX and pageY\n", + " // pageX,Y are the mouse positions relative to the document\n", + " // offset() returns the position of the element relative to the document\n", + " var x = e.pageX - $(targ).offset().left;\n", + " var y = e.pageY - $(targ).offset().top;\n", + "\n", + " return {\"x\": x, \"y\": y};\n", + "};\n", + "\n", + "/*\n", + " * return a copy of an object with only non-object keys\n", + " * we need this to avoid circular references\n", + " * http://stackoverflow.com/a/24161582/3208463\n", + " */\n", + "function simpleKeys (original) {\n", + " return Object.keys(original).reduce(function (obj, key) {\n", + " if (typeof original[key] !== 'object')\n", + " obj[key] = original[key]\n", + " return obj;\n", + " }, {});\n", + "}\n", + "\n", + "mpl.figure.prototype.mouse_event = function(event, name) {\n", + " var canvas_pos = mpl.findpos(event)\n", + "\n", + " if (name === 'button_press')\n", + " {\n", + " this.canvas.focus();\n", + " this.canvas_div.focus();\n", + " }\n", + "\n", + " var x = canvas_pos.x * mpl.ratio;\n", + " var y = canvas_pos.y * mpl.ratio;\n", + "\n", + " this.send_message(name, {x: x, y: y, button: event.button,\n", + " step: event.step,\n", + " guiEvent: simpleKeys(event)});\n", + "\n", + " /* This prevents the web browser from automatically changing to\n", + " * the text insertion cursor when the button is pressed. We want\n", + " * to control all of the cursor setting manually through the\n", + " * 'cursor' event from matplotlib */\n", + " event.preventDefault();\n", + " return false;\n", + "}\n", + "\n", + "mpl.figure.prototype._key_event_extra = function(event, name) {\n", + " // Handle any extra behaviour associated with a key event\n", + "}\n", + "\n", + "mpl.figure.prototype.key_event = function(event, name) {\n", + "\n", + " // Prevent repeat events\n", + " if (name == 'key_press')\n", + " {\n", + " if (event.which === this._key)\n", + " return;\n", + " else\n", + " this._key = event.which;\n", + " }\n", + " if (name == 'key_release')\n", + " this._key = null;\n", + "\n", + " var value = '';\n", + " if (event.ctrlKey && event.which != 17)\n", + " value += \"ctrl+\";\n", + " if (event.altKey && event.which != 18)\n", + " value += \"alt+\";\n", + " if (event.shiftKey && event.which != 16)\n", + " value += \"shift+\";\n", + "\n", + " value += 'k';\n", + " value += event.which.toString();\n", + "\n", + " this._key_event_extra(event, name);\n", + "\n", + " this.send_message(name, {key: value,\n", + " guiEvent: simpleKeys(event)});\n", + " return false;\n", + "}\n", + "\n", + "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n", + " if (name == 'download') {\n", + " this.handle_save(this, null);\n", + " } else {\n", + " this.send_message(\"toolbar_button\", {name: name});\n", + " }\n", + "};\n", + "\n", + "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n", + " this.message.textContent = tooltip;\n", + "};\n", + "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", + "\n", + "mpl.extensions = [\"eps\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\"];\n", + "\n", + "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n", + " // Create a \"websocket\"-like object which calls the given IPython comm\n", + " // object with the appropriate methods. Currently this is a non binary\n", + " // socket, so there is still some room for performance tuning.\n", + " var ws = {};\n", + "\n", + " ws.close = function() {\n", + " comm.close()\n", + " };\n", + " ws.send = function(m) {\n", + " //console.log('sending', m);\n", + " comm.send(m);\n", + " };\n", + " // Register the callback with on_msg.\n", + " comm.on_msg(function(msg) {\n", + " //console.log('receiving', msg['content']['data'], msg);\n", + " // Pass the mpl event to the overridden (by mpl) onmessage function.\n", + " ws.onmessage(msg['content']['data'])\n", + " });\n", + " return ws;\n", + "}\n", + "\n", + "mpl.mpl_figure_comm = function(comm, msg) {\n", + " // This is the function which gets called when the mpl process\n", + " // starts-up an IPython Comm through the \"matplotlib\" channel.\n", + "\n", + " var id = msg.content.data.id;\n", + " // Get hold of the div created by the display call when the Comm\n", + " // socket was opened in Python.\n", + " var element = $(\"#\" + id);\n", + " var ws_proxy = comm_websocket_adapter(comm)\n", + "\n", + " function ondownload(figure, format) {\n", + " window.open(figure.imageObj.src);\n", + " }\n", + "\n", + " var fig = new mpl.figure(id, ws_proxy,\n", + " ondownload,\n", + " element.get(0));\n", + "\n", + " // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n", + " // web socket which is closed, not our websocket->open comm proxy.\n", + " ws_proxy.onopen();\n", + "\n", + " fig.parent_element = element.get(0);\n", + " fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n", + " if (!fig.cell_info) {\n", + " console.error(\"Failed to find cell for figure\", id, fig);\n", + " return;\n", + " }\n", + "\n", + " var output_index = fig.cell_info[2]\n", + " var cell = fig.cell_info[0];\n", + "\n", + "};\n", + "\n", + "mpl.figure.prototype.handle_close = function(fig, msg) {\n", + " var width = fig.canvas.width/mpl.ratio\n", + " fig.root.unbind('remove')\n", + "\n", + " // Update the output cell to use the data from the current canvas.\n", + " fig.push_to_output();\n", + " var dataURL = fig.canvas.toDataURL();\n", + " // Re-enable the keyboard manager in IPython - without this line, in FF,\n", + " // the notebook keyboard shortcuts fail.\n", + " IPython.keyboard_manager.enable()\n", + " $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n", + " fig.close_ws(fig, msg);\n", + "}\n", + "\n", + "mpl.figure.prototype.close_ws = function(fig, msg){\n", + " fig.send_message('closing', msg);\n", + " // fig.ws.close()\n", + "}\n", + "\n", + "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n", + " // Turn the data on the canvas into data in the output cell.\n", + " var width = this.canvas.width/mpl.ratio\n", + " var dataURL = this.canvas.toDataURL();\n", + " this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n", + "}\n", + "\n", + "mpl.figure.prototype.updated_canvas_event = function() {\n", + " // Tell IPython that the notebook contents must change.\n", + " IPython.notebook.set_dirty(true);\n", + " this.send_message(\"ack\", {});\n", + " var fig = this;\n", + " // Wait a second, then push the new image to the DOM so\n", + " // that it is saved nicely (might be nice to debounce this).\n", + " setTimeout(function () { fig.push_to_output() }, 1000);\n", + "}\n", + "\n", + "mpl.figure.prototype._init_toolbar = function() {\n", + " var fig = this;\n", + "\n", + " var nav_element = $('<div/>')\n", + " nav_element.attr('style', 'width: 100%');\n", + " this.root.append(nav_element);\n", + "\n", + " // Define a callback function for later on.\n", + " function toolbar_event(event) {\n", + " return fig.toolbar_button_onclick(event['data']);\n", + " }\n", + " function toolbar_mouse_event(event) {\n", + " return fig.toolbar_button_onmouseover(event['data']);\n", + " }\n", + "\n", + " for(var toolbar_ind in mpl.toolbar_items){\n", + " var name = mpl.toolbar_items[toolbar_ind][0];\n", + " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", + " var image = mpl.toolbar_items[toolbar_ind][2];\n", + " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", + "\n", + " if (!name) { continue; };\n", + "\n", + " var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n", + " button.click(method_name, toolbar_event);\n", + " button.mouseover(tooltip, toolbar_mouse_event);\n", + " nav_element.append(button);\n", + " }\n", + "\n", + " // Add the status bar.\n", + " var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n", + " nav_element.append(status_bar);\n", + " this.message = status_bar[0];\n", + "\n", + " // Add the close button to the window.\n", + " var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n", + " var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n", + " button.click(function (evt) { fig.handle_close(fig, {}); } );\n", + " button.mouseover('Stop Interaction', toolbar_mouse_event);\n", + " buttongrp.append(button);\n", + " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", + " titlebar.prepend(buttongrp);\n", + "}\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(el){\n", + " var fig = this\n", + " el.on(\"remove\", function(){\n", + "\tfig.close_ws(fig, {});\n", + " });\n", + "}\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(el){\n", + " // this is important to make the div 'focusable\n", + " el.attr('tabindex', 0)\n", + " // reach out to IPython and tell the keyboard manager to turn it's self\n", + " // off when our div gets focus\n", + "\n", + " // location in version 3\n", + " if (IPython.notebook.keyboard_manager) {\n", + " IPython.notebook.keyboard_manager.register_events(el);\n", + " }\n", + " else {\n", + " // location in version 2\n", + " IPython.keyboard_manager.register_events(el);\n", + " }\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._key_event_extra = function(event, name) {\n", + " var manager = IPython.notebook.keyboard_manager;\n", + " if (!manager)\n", + " manager = IPython.keyboard_manager;\n", + "\n", + " // Check for shift+enter\n", + " if (event.shiftKey && event.which == 13) {\n", + " this.canvas_div.blur();\n", + " event.shiftKey = false;\n", + " // Send a \"J\" for go to next cell\n", + " event.which = 74;\n", + " event.keyCode = 74;\n", + " manager.command_mode();\n", + " manager.handle_keydown(event);\n", + " }\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_save = function(fig, msg) {\n", + " fig.ondownload(fig, null);\n", + "}\n", + "\n", + "\n", + "mpl.find_output_cell = function(html_output) {\n", + " // Return the cell and output element which can be found *uniquely* in the notebook.\n", + " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", + " // IPython event is triggered only after the cells have been serialised, which for\n", + " // our purposes (turning an active figure into a static one), is too late.\n", + " var cells = IPython.notebook.get_cells();\n", + " var ncells = cells.length;\n", + " for (var i=0; i<ncells; i++) {\n", + " var cell = cells[i];\n", + " if (cell.cell_type === 'code'){\n", + " for (var j=0; j<cell.output_area.outputs.length; j++) {\n", + " var data = cell.output_area.outputs[j];\n", + " if (data.data) {\n", + " // IPython >= 3 moved mimebundle to data attribute of output\n", + " data = data.data;\n", + " }\n", + " if (data['text/html'] == html_output) {\n", + " return [cell, data, j];\n", + " }\n", + " }\n", + " }\n", + " }\n", + "}\n", + "\n", + "// Register the function which deals with the matplotlib target/channel.\n", + "// The kernel may be null if the page has been refreshed.\n", + "if (IPython.notebook.kernel != null) {\n", + " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", + "}\n" + ], + "text/plain": [ + "<IPython.core.display.Javascript object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAgAElEQVR4XuydB3RU1dbH/ymUJCQhCUkoSei9h94J3fLsFAsqFsQuPhS7gAUVRUXFhqJYniiCld57DSWUAAES0khvpLdv7fsefgKRzOTeO3PvzP+uxXItc0/7nT2z95yzi0tlZWUl+JAACZAACZAACZAACTgNARcagE6z11woCZAACZAACZAACSgEaABSEEiABEiABEiABEjAyQjQAHSyDedySYAESIAESIAESIAGIGWABEiABEiABEiABJyMAA1AJ9twLpcESIAESIAESIAEaABSBkiABEiABEiABEjAyQjQAHSyDedySYAESIAESIAESIAGIGWABEiABEiABEiABJyMAA1AJ9twLpcESIAESIAESIAEaABSBkiABEiABEiABEjAyQjQAHSyDedySYAESIAESIAESIAGIGWABEiABEiABEiABJyMAA1AJ9twLpcESIAESIAESIAEaABSBkiABEiABEiABEjAyQjQAHSyDedySYAESIAESIAESIAGIGWABEiABEiABEiABJyMAA1AJ9twLpcESIAESIAESIAEaABSBkiABEiABEiABEjAyQjQAHSyDedySYAESIAESIAESIAGIGWABEiABEiABEiABJyMAA1AJ9twLpcESIAESIAESIAEaABSBkiABEiABEiABEjAyQjQAHSyDedySYAESIAESIAESIAGIGWABEiABEiABEiABJyMAA1AJ9twLpcESIAESIAESIAEaABSBkiABEiABEiABEjAyQjQAHSyDedySYAESIAESIAESIAGIGWABEiABEiABEiABJyMAA1AJ9twLpcESIAESIAESIAEaABSBkiABEiABEiABEjAyQjQAHSyDedySYAESIAESIAESIAGIGWABEiABEiABEiABJyMAA1AJ9twLpcESIAESIAESIAEaABSBkiABEiABEiABEjAyQjQAHSyDedySYAESIAESIAESIAGIGWABEiABEiABEiABJyMAA1AJ9twLpcESIAESIAESIAEaABSBkiABEiABEiABEjAyQjQAHSyDedySYAESIAESIAESIAGIGWABEiABEiABEiABJyMAA1AJ9twLpcESIAESIAESIAEaABSBkiABEiABEiABEjAyQjQAHSyDedySYAESIAESIAESIAG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\" width=\"640\">" + ], + "text/plain": [ + "<IPython.core.display.HTML object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "pl.plot(t_filt_dec,hfdiff,':')\n", + "pl.xlabel('time (s)')\n", + "pl.ylabel('field (nT)')\n", + "pl.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python (geomagenv36)", + "language": "python", + "name": "geomagenv36" + }, + "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.6.6" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/geomagio/algorithm/FilterAlgorithm.py b/geomagio/algorithm/FilterAlgorithm.py new file mode 100644 index 0000000000000000000000000000000000000000..73af88f1915a7db37f11809c54fdf5c14fbdfd51 --- /dev/null +++ b/geomagio/algorithm/FilterAlgorithm.py @@ -0,0 +1,123 @@ +"""Algorithm that converts from one geomagnetic coordinate system to a + related geographic coordinate system, by using transformations generated + from absolute, baseline measurements. +""" +from __future__ import absolute_import + +from .Algorithm import Algorithm +import json +import numpy as np +from numpy.lib import stride_tricks as npls +import scipy.signal as sps +from obspy.core import Stream, Stats +import sys + + +class FilterAlgorithm(Algorithm): + """Adjusted Data Algorithm""" + + def __init__(self, matrix=None, decimation=None, window=None, + data_type=None, location=None, inchannels=None, outchannels=None): + Algorithm.__init__(self, inchannels=inchannels, + outchannels=outchannels) + self.numtaps=91 + # get filter window (standard intermagnet one-minute filter) + self.window = sps.get_window(window=('gaussian', 15.8734), + Nx=self.numtaps) + # normalize filter window + self.window = self.window/np.sum(self.window) + self.decimation = 60 + self.data_type = data_type + self.location = location + + def create_trace(self, channel, stats, data): + """Utility to create a new trace object. + + Parameters + ---------- + channel : str + channel name. + stats : obspy.core.Stats + channel metadata to clone. + data : numpy.array + channel data. + + Returns + ------- + obspy.core.Trace + trace containing data and metadata. + """ + stats = Stats(stats) + if self.data_type is None: + stats.data_type = 'variation' + else: + stats.data_type = self.data_type + if self.data_type is None: + stats.location = 'R0' + else: + stats.location = self.location + + trace = super(FilterAlgorithm, self).create_trace(channel, stats, + data) + return trace + + def process(self, stream): + """Run algorithm for a stream. + Processes all traces in the stream. + Parameters + ---------- + stream : obspy.core.Stream + stream of data to process + Returns + ------- + out : obspy.core.Stream + stream containing 1 trace per original trace. + """ + + out = Stream() + + for trace in stream: + data = trace.data + times = trace.times() + half = (self.numtaps-1)/2 + step = self.decimation + shape = data.shape[:-1] + (data.shape[-1] - numtaps + 1, + numtaps) + strides = data.strides + (data.strides[-1],) + as_s = npls.as_strided(data, shape=shape, strides=strides, + writeable=False) + + filtered = np.dot(self.window, as_s[half:-half:step].T) + + stats=Stats(trace.stats) + stats.delta = delta*self.decimation + stats.npts = len(filtered) + trace_out = self.create_trace('', trace.stats) + + out += trace_out + + return out + + @classmethod + def add_arguments(cls, parser): + """Add command line arguments to argparse parser. + Parameters + ---------- + parser: ArgumentParser + command line argument parser + """ + + parser.add_argument('--adjusted-statefile', + default=None, + help='File to store state between calls to algorithm') + + def configure(self, arguments): + """Configure algorithm using comand line arguments. + Parameters + ---------- + arguments: Namespace + parsed command line arguments + """ + Algorithm.configure(self, arguments) + self.statefile = arguments.adjusted_statefile + self.load_state()