From 4fe7eec19b93886f8838bf1b3f30f43e1658df67 Mon Sep 17 00:00:00 2001 From: rch <rostislav.chudoba@rwth-aachen.de> Date: Tue, 26 Jan 2021 16:05:33 +0100 Subject: [PATCH] using widget front end --- ...1_elastic_stiffness_of_the_composite.ipynb | 5 +- bmcs_course/2_1_PO_LF_LM_RG.ipynb | 4653 +---------------- environment.yml | 1 + 3 files changed, 81 insertions(+), 4578 deletions(-) diff --git a/bmcs_course/1_1_elastic_stiffness_of_the_composite.ipynb b/bmcs_course/1_1_elastic_stiffness_of_the_composite.ipynb index 5a2093d..5ddf50e 100644 --- a/bmcs_course/1_1_elastic_stiffness_of_the_composite.ipynb +++ b/bmcs_course/1_1_elastic_stiffness_of_the_composite.ipynb @@ -167,8 +167,7 @@ "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.9.0" + "pygments_lexer": "ipython3" }, "toc": { "base_numbering": 1, @@ -190,5 +189,5 @@ } }, "nbformat": 4, - "nbformat_minor": 2 + "nbformat_minor": 4 } diff --git a/bmcs_course/2_1_PO_LF_LM_RG.ipynb b/bmcs_course/2_1_PO_LF_LM_RG.ipynb index 7effa66..15f5c89 100644 --- a/bmcs_course/2_1_PO_LF_LM_RG.ipynb +++ b/bmcs_course/2_1_PO_LF_LM_RG.ipynb @@ -256,7 +256,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": { "slideshow": { "slide_type": "fragment" @@ -264,7 +264,7 @@ }, "outputs": [], "source": [ - "%matplotlib notebook\n", + "%matplotlib widget\n", "import sympy as sp # symbolic algebra package\n", "import numpy as np # numerical package\n", "import matplotlib.pyplot as plt # plotting package\n", @@ -285,7 +285,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": { "slideshow": { "slide_type": "fragment" @@ -342,24 +342,13 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": { "slideshow": { "slide_type": "fragment" } }, - "outputs": [ - { - "data": { - "text/plain": "\\bar{\\tau}⋅p\n────────────\nA_\\mathrm{f}", - "image/png": "iVBORw0KGgoAAAANSUhEUgAAABcAAAArCAYAAACTkhN2AAAACXBIWXMAAA7EAAAOxAGVKw4bAAACwklEQVRIDe2X31UUMRTGWY8FrNoBdoBagdCBHCoAOpDj0+6bBzpQOhA6ACtQ6QA6ALeD9fvdyc1mMsnszMKDnuM9J5v7L998uclMspPlcrnlMp/Pj6TvuZ31D4ofZ75ec5KC92ZuEHy2wZjBQ56nmZr2qWxKM039iX6snK9qO/Ltqr1TO1TbDvaroB8qZxGZy/iiALKv9kbtOvTo1gCWjhxIP2vUre/qt7HVTqTfqV0QM+ZywuRK/SVORDrtprFWv/KR+yN4YHwnXxwn+1btI3EHByQCBYAFCQUBzHN50Ocsx0qqnGksS5ZwIPsq85mpQfZQ9dQcoXypsJUX5NXAPyjhZzqioAPCLPIZ8tBv5HfAlUwdWSCfOnklAaTFWmPYaTyMhW1qjpIIrFnxqgiEulLvB08KpAB9L91mYwvqCaFn7/q2zELR9HqfCMh2hiLs8T3ZkdhGr78AePhb9ez/qnRqXs1sBzr1bocbazS42FJvFt1fpBKu+UaBC5jF5nVHPslmd1Rlo5pX0bLAKObZ2LXmvws+mc1mq0N07UTHJfxf0GK9/o7doreRb/yvIsWKcwxzTnS+4YNlEHj4powChsEgcOVxXtr1gfIwcIisBRcYtzCanzB8cgdJL3hgea8e4PuAOJh56QxNWXFG+rXZmb9ME/r0KnOBcpSlFyMHf90HmMb6mO8nrBlj1wX1xbIEMiw8a3Ir+6wIrgDXBV6a9Irh5agtKLN8oUae5XTABWgB9bBoiXx8njvMwxi7Hyq+8EGlmp8q2e/enuc9dfcZmE+5O1LYqlPpjI2HdgtcARax7/sBK5uZehON4U5pd0Pp7C7/g7B6Q+VkuhdpsBne+rW7YchtBUoGxxxM+CjBGoFJvEziEBj3FfZ7mnMtvzMG47fsifooT3LMCbQI3qp5fOQTKY9mHlifiw+lYzHZMfY2/wFAeeyd0KjR1QAAAABJRU5ErkJggg==\n", - "text/latex": "$\\displaystyle \\frac{\\bar{\\tau} p}{A_\\mathrm{f}}$" - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "d_sig_f = p * tau / A_f\n", "d_sig_f" @@ -383,24 +372,13 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "metadata": { "slideshow": { "slide_type": "fragment" } }, - "outputs": [ - { - "data": { - "text/plain": " \\bar{\\tau}⋅p⋅x\nC + ──────────────\n A_\\mathrm{f} ", - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAE0AAAArCAYAAAA9pAX3AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAE40lEQVRoBe2a23HTQBSGnUwKCNBB6ACSCkg6SKACoAMyeUreGOgA0gFJB4EKuHQAHQDpIHzfeo9GliX5irFkzsxqb2fXe379e/Yib93d3Q26JhcXFy8Y81HDuH9R/7KhbinFW10EbSmWL9DJ9gJtN7bpThctZ/q9YdxO0d2G8b9E5711xI+IDgkHhOeEvZx/kNPP0bklra792a9S1n82LBp8Rue6c0xj0O+yASfEjwkfc2w6BXQSYOSVZ+TfDpODT8R75gmnpH8QrnKd0Ztcp/5nwiXhMOsKqC9r0CmmMXhZc0N87eAV0oZvw9zok3L1NV6RYT8oK9qS/054RbAPGZZAMY/IvmOC7FTuEzoJmuAUAGVQ0tTSqhoRpNAXwNcVHdkjYMZfiGVeiKz9Rlnqn1hmJ+kU02LQpVhfc1PKjyRLBuvTFKdyWdy23Ga9ADfqn5KogpzqOufTwqIcO32+VMrqsoIj66qsFMwP1QboWS77iqlM2a5B3c4yDQP0UTr1KkO0qyqCMMIy2unDBPE0g+GC4EKgnptjGViermfkXTwGXWaaLCsbpT1jkgHRnwlyEspMC8AT0gInqAZPE7LpF6EQyqyLBaW7TMMI91Gx/SgMrElosCKj0kpJ+gHhiHyALrvcpiRdyt3nuUrb/1eCYBZTtfYYhYJoS9/kKIlD7Og9wTdlx4muUbmOMWPU8H1iV8OlyE61Fzr3bZwRXDlOyEvfJKSPCQ7CN1Le0wwV1vPpWAuWLGOIBWiAIbt0hrLIuT7mYCm7Jsg+dUYcK/mJQlsN0HmXd+wT282rwO9ok2Mt/NG8fZXbbZcyHjH2CY/5sTHASnoCW11ZStWtSY0w/HXBBhcKbVJc+eJMOSxZ4JmYRodONVeYkenY0K8ry9jepkH3nxVjk1NyqdMyjNmmc+mrH6uey0KnGrvi6Nc2VmSaGzllKiAA+RbdtumbOuvzQ5/m3Ff+CpWHXffruXV+fv4bkzxXbU1jGnrqyrZGoT62JVUdr1cU/WJVvFEobhKqleapX4sPGk5PDZhqRWPQcXRpnZ7oxZTX1kJy+3QJWBTOkKD9VC92hi7nUnV6pv0WA3JBmCQH6LUCNqmDPtQLWuzsw7fV2gVY6nlK2Hhxy+EWQl/itcjYBpCywwCMuNWXbQqasbn1eHQvA+dNaICjv7uibu0P5tO8MOzQBWnPQof3BJo/SEcCVevAre+JeAT05LOQ6NNWKb6YYPEqf1dS6LMXBsxB196nrdSaFf0YoLl3dJ8oeA/JxwXkzCNYNdNmHuAyGgCQK78hgNpdpN/egwZgOv+fmVk/M1iWzS3FQjB3D+vf0G8DscAF0+I4N9foe800wDoElfLH5ADt4Vxo5UZ9Z5qXqsEyTY6Vu3Z6ZpC9ztfnfScff5yxbSG9BQ2DvVj1cqB8TxjTsmkhkJVu8tVr0un0d0/sqheASgYTy5oRoczrpTGm5TZ++7il3tAoffVp6X9mDVbr14JxSQWgHpFwS+JdYe0ZPCnmR+9Aw2idv1/Fm0QWJSaGAm287krna9Kutq2fGHsFGsY67TyQtxntJcQg65qcWXqxEACAzPEwLssERKbFn1sssszjkytp0iEW3I+EmW9wNubsCUitAngC/5t44pV6r6ZnKypLrPzPNMDMLLsk6RTWH7qCxumB7Kj8AZ1np8PsukhFAAAAAElFTkSuQmCC\n", - "text/latex": "$\\displaystyle C + \\frac{\\bar{\\tau} p x}{A_\\mathrm{f}}$" - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "sig_f = sp.integrate(d_sig_f, x) + C\n", "sig_f " @@ -423,24 +401,13 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "metadata": { "slideshow": { "slide_type": "fragment" } }, - "outputs": [ - { - "data": { - "text/plain": " \\bar{\\tau}⋅p⋅x\nC + ──────────────\n A_\\mathrm{f} \n──────────────────\n E_\\mathrm{f} ", - "image/png": "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\n", - "text/latex": "$\\displaystyle \\frac{C + \\frac{\\bar{\\tau} p x}{A_\\mathrm{f}}}{E_\\mathrm{f}}$" - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "eps_f = sig_f / E_f\n", "eps_f" @@ -473,24 +440,13 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "metadata": { "slideshow": { "slide_type": "fragment" } }, - "outputs": [ - { - "data": { - "text/plain": " 2 \n C⋅x \\bar{\\tau}⋅p⋅x \n──────────── + D + ───────────────────────────\nE_\\mathrm{f} 2⋅A_\\mathrm{f}⋅E_\\mathrm{f}", - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAJ4AAAAxCAYAAAArzxBAAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAJEElEQVR4Ae2c7XEUORCG1y4H4PNFcJDBARGcyYCPCIAMjuIX/KMgAyCCO8gAiABDBpABPmfAvY9QC2k+pNlZ7XrXq66SNSO1NK3ud1otjbwHP378WDRqGpijgWfPnh2r3RPf9prPH6j8otTfUYmh1TcNZDTwQiB7ZPW6fqXrz0rXrWwsPxyraOVNAxM08FBgO434Xuj6msr+jMoGLxvwBtXSCidqAG93NpE3YTsYi/GEWubvh0q3leI5+73qXisxpz9S/lh5o6aBhbCAx7ujvDjVDsZ4avi3OiBofK50V/cBeLqmY+ZyXCwPatQ0sBAmmF7vKN2Yoo4EeGqMl3urhDf7S/dfup2o7J0SXhCeD936dr85DcgONiMNPfRc9SHwH2KoVabngAWc0A1dByeV6z8Bnhg/KtHJH4UOAOc98XxT3uiSNCD9v9ajSZdGkgG8PFaOM1r4e/IsNgLwxAhicZfJ1EpnA3Susn8HylvRHmnAg4ywC+DZShYvW4z7HfB8B8R133T9boLuQDMPTEhtmapx/9AtpQdKvBH3laBPE/v/yd3+ZjUgXeIs0Dd6HyIWfywEAcWpUmwT7n9Xwj5h01e8y9iQPTv4yQOpj+IUbx7PGHtgCr1FF+r4Qre9+E9lYUNRPAD5jRJg442gbxQ1Bdhia5TTgNcndrirxAyEbhNPIx6z0X1vA0Ikwqnnun+pfKGcdpS7qVL5ZBuq7W/in0UGPFYj0GxQSAjePAZhhFLoF68HnSjF9a6w/VleA9I1HoxtrWAvXS+UDGihU5XB+8kX4N26s9pXleEkaL8xGxrwAAUPzgaE8EDiO1YCWDGdddqzrP5ifMp5MxtV0IB0CcACyHQPuLr2sCcBNOOF77lV+PyYXDzkG7OhAe9cD3UCIESOJCBeDIDaYBx7NDhrfk8X3UFaXcvraoAY+v1Ql7KLA6TyU1/f3QJjir3wfIlNVb42Gx7GwujhuOIS3RJfV8CkjR8kQI6nArzkJHAnnbWbKRrAGZwVGAEY3s8BMeIFkL0dinXb0DwesRfzOwNwQafyHkkY+HpezAOKAJXAlDeKxQpvUTx1P9F9EvyKp9GKGpBOcRZ8mM86A/EAsMTbqQ02B4gs/nAKG7Oh83h6KAAhBgM4CJOQyk6VHOiUd98YeBkUid1yBnCuFIj2urEAN5S3iyoasNBntDNvE+K7MKOpjGscAV+osOlGbZgcEvACAjCEMoABoreqS94WlQWK2rFCWuj+pRIKwb2zxwMgw7Sr+0aVNCC94qXYssrNVNgCPhZ8AAxiD++V2rlZSTkOA9tvxIYJ8PTQvSApme0DXgozAi+VvWgYAOKeKSgOF1zFrv3RGNhDvakc4G0F7SXwTPMyBOf+2fLpGURlhBwYjE+IO+2tJT9ejMMdWxNjH0qgnSEpjlizF4POGYD6IeaB/vmZpX9Vbx/g+fqyNNWUdemHRw0kBx6c0GmrYuydAp6UhxJtKtTlShRPs2MdERexDTQH7DVlHZMvWy65ie0+eiZ2FeaMI/uMuZVHcxtegXbEeAsZI7cNYfFd8UTtNupDYyNE2MowYdc8Xk374vFGV+r+QeZdmaoaVdTAXgJPnsDiu8HPTJF+b/pr83xRVbtcRQN7CTwpbEp8h17ddKy8BFB4Gy2hgYOnT59u/KcE5HEOcjKqnm0MA0fMeuJvki8jvoxtkUknYMQHkFghl+RAN3z6Gz13prq1yKp+N24Xr8eNZDu1jydjsErju+ToLv0UrXmjflBuHq3XTHW2j+dO8fYYCgVqX0XWwmN2tnrvploBohjfiYdFBZ+PAOel/jPNziKrIPjeAU/6sCk8t6Jl/44jRKMesaDXVl3QwFGh/ipWc2hyIVD19u9UBiiJ2bLTMO0braaBvQGeQOW+Qkhdbqr196Y9269j2+S26q7c9onGdE1j45RR77u0KWGTeRZ4EtJOcdh+1pmEu4gExGAMiNUm5/W3dmqSbJNWvNHYtuJScqNf+7iPHVjRc2qm57ELAvPiWXxbYB2u1jOr4aEEPFaPnK2zUxyDwIoEGpa4Ximgj4Ffr+f6Pa0sq/QK6DgzF/SuaxY9nylTysWpYUTiY4W9EujoTP1Uw8NhkG7kQg8j7oFyg2Tlt/bpSbLszCqzkqyAjH8jCKR+8X6AGg82lQCu+2ar9oB5Nql9FTwUgScJ7W0r7d67k6uzR9QaDmkAI3+VsY87lTgBTs0UQSQewEsyx9Dtq9N18bYKHqYAzyFcA0g8nu6Z7x3pmjcwqfdVLVtNA+h06D/DrNcsiGQXgPldOaD77hsVwWqdj+RV8HA00nlcTGyQgEoD4eGALZDKlg12Q9t2MawB6XRsQeTitQk6ZxFiU7V5vJPhp00urYKHLPAktEO3ROIzlcUUvGWU7+QZtcnq3VJG2QHD47VspTsoqbddHB4Z8GbbrSYessDTiGw+5/8OnEdTzqD53Q4bSDJwLxztACjxyUrfVZPO2w0awAHw/xMlvWIz83a0sxlqcKqdaLdqeCgBz3k8CRWmUV0TcySnWnVPoGsD4y3jNAcuHfA1qqQB6ZivKuh/bAp2T1I98TezFPxGNsWO2WSK3arhoQS83nzuRxEGpMExEE5ysN/HNceILsiVGlXSgHSKjk+Um9cZ7NnbYDHEpzL2Y3sez7eZYrdqeDgclF6FEsahW5dxnODYVRdPsyjEfvyPZTveb/AXCVzj9mdpDUifbABfVx48na7xaD0QiQ/dj03D2M08n5NDvICpaDfxVcVDzuPZm5WsaJ20/o8fOD/iw0A5iEnA+9DnMWu7nqkB6RJgoOPuYgIwJke2xAM4kl/n7DyWWSgBq9pMtVtVPOSAx8AWCNYR3t36QRLohrdwiK+VzdeAdAxI0DFfbEJ443s8VVnwbMarfPS0tNqd0xZepXjW8l1ms6p4SIAnYYjR3igxYPdmqMy2UUwqeG4qkfO2jHpEa9Dy2RogzMEOhDNdsl0G7ICN8HYL2QOPZz/EQxFlgIYVruNR7n4LR+VdL6qqX6T6teGh6tF3L+h/yrP/y/BraO1qGzSwLrvl+j3choE3GfZPA9U8nkc30zRunaCX1dWyccT+WeCSR7wuu5X6/R8cJc0mmm4UNgAAAABJRU5ErkJggg==\n", - "text/latex": "$\\displaystyle \\frac{C x}{E_\\mathrm{f}} + D + \\frac{\\bar{\\tau} p x^{2}}{2 A_\\mathrm{f} E_\\mathrm{f}}$" - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "u_f = sp.integrate(eps_f, x) + D\n", "u_f" @@ -533,24 +489,13 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "metadata": { "slideshow": { "slide_type": "slide" } }, - "outputs": [ - { - "data": { - "text/plain": "⎧ P ⎫\n⎨C: ────────────⎬\n⎩ A_\\mathrm{f}⎭", - "image/png": "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\n", - "text/latex": "$\\displaystyle \\left\\{ C : \\frac{P}{A_\\mathrm{f}}\\right\\}$" - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "eq_C = {P - sig_f.subs({x:0}) * A_f}\n", "C_subs = sp.solve(eq_C,C) \n", @@ -604,24 +549,13 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "metadata": { "slideshow": { "slide_type": "fragment" } }, - "outputs": [ - { - "data": { - "text/plain": "⎧ -a⋅(2⋅P + \\bar{\\tau}⋅a⋅p) ⎫\n⎨D: ───────────────────────────⎬\n⎩ 2⋅A_\\mathrm{f}⋅E_\\mathrm{f}⎭", - "image/png": "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\n", - "text/latex": "$\\displaystyle \\left\\{ D : - \\frac{a \\left(2 P + \\bar{\\tau} a p\\right)}{2 A_\\mathrm{f} E_\\mathrm{f}}\\right\\}$" - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "eqns_D = {u_f.subs(C_subs).subs(x,a)}\n", "D_subs = sp.solve(eqns_D,D)\n", @@ -641,24 +575,13 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "metadata": { "slideshow": { "slide_type": "fragment" } }, - "outputs": [ - { - "data": { - "text/plain": " 2 \n P⋅x \\bar{\\tau}⋅p⋅x a⋅(2⋅P + \\bar{\\tau\n───────────────────────── + ─────────────────────────── - ────────────────────\nA_\\mathrm{f}⋅E_\\mathrm{f} 2⋅A_\\mathrm{f}⋅E_\\mathrm{f} 2⋅A_\\mathrm{f}⋅E_\\ma\n\n \n}⋅a⋅p) \n───────\nthrm{f}", - "image/png": "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\n", - "text/latex": "$\\displaystyle \\frac{P x}{A_\\mathrm{f} E_\\mathrm{f}} + \\frac{\\bar{\\tau} p x^{2}}{2 A_\\mathrm{f} E_\\mathrm{f}} - \\frac{a \\left(2 P + \\bar{\\tau} a p\\right)}{2 A_\\mathrm{f} E_\\mathrm{f}}$" - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "u_f.subs(C_subs).subs(D_subs) " ] @@ -690,24 +613,13 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "metadata": { "slideshow": { "slide_type": "fragment" } }, - "outputs": [ - { - "data": { - "text/plain": "⎧ -P ⎫\n⎨a: ────────────⎬\n⎩ \\bar{\\tau}⋅p⎭", - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAGIAAAAyCAYAAACnKw75AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAGAUlEQVR4Ae2c7VUVMRCGLx4KUKxA7MCPCoQOUCpQO9DDP/5xpAO0AsUOwAoEOkAr8B47wPfJZsJmN5u79ws8m51zsvmaZG/e2ZnJThY2bm5uJjk6PDzcVv8JPCrv5njHvhgB4fVMLT+UjlQ+jnvj2oO4Gtc0+INarpV+Kb2Oe8faLASE35XH7UDlayUe6iRtdGmEBn3SCATxXuXPydEDa9Q6WS9av+OXdq78ry8/VL6ldKH0UbzW7ru7M/EyFs1AEM9V58GOKCkIMfJDzpQ+q/w+GlFARWvGXl8pf95crtrA5YXSE5XnFcZvjbvQuJaJ7zJNH/kBGlCiELDr0Ncqa13xlzzh71o9mQYvNCzLjsp2jzCiSxBoBGpZItXNUmr9mBfocZXNdTXh2j3C4JYgJC2kDfVWu4p9MFdnNoQDjjZFZlYM1BRPV5v5hqdNhpYgagzTWrmkYqc18CaFfpx1l6AWwmpzoVEDHeSBZnU45EBqxxzhL/eUXqv+PXSuqDAKIgaSpx16KbDZvhvxLnWmNreJscZV5qMgYjTNP9z5y2vOR8Q/sYwaGrFS298XtlEQHimZHdvb38u2fRTE7SNr/iFy1Lfd6y2NgrjFd5+iNONeNKJ4Zy3gCVlsKznTpDoawQ4pG7YWz0ppFMR/Ek8bTdNKn+vFJxsFsTh2y4zcag5OCQJ7CZUa9KtWv4ar/I5haoHVcJeUIO51Gxd+2XALvDAaxmGVKWd9oN5fkl7vbZx40SJiM4R5/ygRFNvrs/MQD3Gcc+WlHEIdab2nWu87pXAEHWmEOtzXGmK0mLuKedIYpHupRGiYxLaPeT6p3FJBtQfy/QiRo8ciSGvmIUUAJyqzdkdBEGoEvDdKr1S2A4yKq+MqPoA+VUIA9TGU0SqzickZfP8j5a2z4eSAgTRqvWg/wrhU2b2/bKoAmDzR2K65DsTFjzl6qDmCiqkOoSW9YvYamxWWm81f/G/lawh+c1/i/CAE8lTOf8jVd9YGn+bdaDRlq+Ln6xheHjFTJ3UfMc2OTHeiQZEv0aSAhMqtPGajuRHaUtqjOeYCTPdbN7mt7AMWp2RnqL9Vdqoy6+7iA3BSE3CEM1F/JCDaRrpFQPhg0r8o4QqO6z4Cu/VN6Yc6ghNRfRbVfQO8OHpnCjQPO6d55pp1r0H0CxNMOseuCMFhFQTBCtWIMDBRSCtL4sVM8NQHoNXG5GjUhRK0q7amoKoeXdWHf7lRwkcVQVor/pMvCvERTggsPBIEDSJ2T8/8ANeQuXCkyPnuByV7j0AjtmhTbtvh5BTiQZgIygSX5BtYo328F21w6s7a1mu2HUCtbH1R7oFMne+m2qKxVtEc5p+saeg5GhE0wRab0ggzJTjikVaIgB46w9QwDrOnNCJ0Dr0gYPh+tSuKMFU/PnMdhB+OqHRBYKcjWx2hc4eVlGm6w9uPtzIEitUImR12eZgms9uGieXhD3TEy5YcJ/tS6a0SW3bqfBFO+a142AEuTEVqhECzbTW7O0Im7A7JQxJP3WTtq24fE7i//KGuxFYUxzvzvUs8WSpOIwQeTzdfaYSgpMoTpdaWEuTUDv9PyiKefqLKYazqnKfwzrQUlSgIAA+ge6BzZgXgjR+hHDUQd6ZNPEQJcvM0hsXVIk1TDMGED8uagcvAYuAqxydAzZdctr8EThcWApOOgqiCb31CLACeOuxCQARLl6KiBaGnGJu/rdxMTw5MAI+0QePYdaEJLn6UGzyrrzgf0QCEaHEr3NDgmQhw/AD+YWp9akOICIBQ9lJmiTlzgtiCYeDEe4FtZXNLRRsgzuZth8Q7RDbM70bEl05MW4JAukoM5ykYNGmdfaPE+Af+AB4T1seMdeFmmLY0qMtHYAt3dGMb2DVxKe1oROQfFly4adbX5vguQZjzOWgOKK3uH0b8gb3ULQSBnwc8TbOieZKC8CrIKz0nbzi0IsmvnZAGxH+YmevfPlTD3Ns5lsXmSZrD5D9FqU2AYyI4VuQ/RzEclsklPMyRbQg6nXtWEPwATYRauolUxmmN1BMB4cWWF004UtmChsnR/wDgUeCG3hXtcgAAAABJRU5ErkJggg==\n", - "text/latex": "$\\displaystyle \\left\\{ a : - \\frac{P}{\\bar{\\tau} p}\\right\\}$" - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "eqns_a = {eps_f.subs(C_subs).subs(D_subs).subs(x,a)}\n", "a_subs = sp.solve(eqns_a,a)\n", @@ -729,24 +641,13 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "metadata": { "slideshow": { "slide_type": "fragment" } }, - "outputs": [ - { - "data": { - "text/plain": "⎧ P -a⋅(2⋅P + \\bar{\\tau}⋅a⋅p) -P ⎫\n⎨C: ────────────, D: ───────────────────────────, a: ────────────⎬\n⎩ A_\\mathrm{f} 2⋅A_\\mathrm{f}⋅E_\\mathrm{f} \\bar{\\tau}⋅p⎭", - "image/png": "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\n", - "text/latex": "$\\displaystyle \\left\\{ C : \\frac{P}{A_\\mathrm{f}}, \\ D : - \\frac{a \\left(2 P + \\bar{\\tau} a p\\right)}{2 A_\\mathrm{f} E_\\mathrm{f}}, \\ a : - \\frac{P}{\\bar{\\tau} p}\\right\\}$" - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "var_subs = {}\n", "[var_subs.update(var) for var in [C_subs,D_subs,a_subs]]\n", @@ -766,24 +667,13 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "metadata": { "slideshow": { "slide_type": "fragment" } }, - "outputs": [ - { - "data": { - "text/plain": " 2 \n P P⋅x \\\n──────────────────────────────────────── + ───────────────────────── + ───────\n2⋅A_\\mathrm{f}⋅E_\\mathrm{f}⋅\\bar{\\tau}⋅p A_\\mathrm{f}⋅E_\\mathrm{f} 2⋅A_\\ma\n\n 2 \nbar{\\tau}⋅p⋅x \n────────────────────\nthrm{f}⋅E_\\mathrm{f}", - "image/png": "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\n", - "text/latex": "$\\displaystyle \\frac{P^{2}}{2 A_\\mathrm{f} E_\\mathrm{f} \\bar{\\tau} p} + \\frac{P x}{A_\\mathrm{f} E_\\mathrm{f}} + \\frac{\\bar{\\tau} p x^{2}}{2 A_\\mathrm{f} E_\\mathrm{f}}$" - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "u_f_x = u_f.subs(var_subs)\n", "u_f_x" @@ -805,24 +695,13 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "metadata": { "slideshow": { "slide_type": "fragment" } }, - "outputs": [ - { - "data": { - "text/plain": " 2 2\nP x \n── + P⋅x + ──\n2 2 ", - "image/png": "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\n", - "text/latex": "$\\displaystyle \\frac{P^{2}}{2} + P x + \\frac{x^{2}}{2}$" - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "data_f = {L_b:1, p:1, E_f:1, A_f:1, tau:1}\n", "u_f_x.subs(data_f)" @@ -841,22 +720,13 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": null, "metadata": { "slideshow": { "slide_type": "fragment" } }, - "outputs": [ - { - "data": { - "text/plain": "array([0. , 0.005, 0.02 , 0.045, 0.08 , 0.125, 0.18 , 0.245, 0.32 ,\n 0.405, 0.5 ])" - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "get_u_f_x = sp.lambdify((x, P), u_f_x.subs(data_f))\n", "x_range = np.linspace(-1, 0, 11)\n", @@ -876,7 +746,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": null, "metadata": { "slideshow": { "slide_type": "slide" @@ -918,30 +788,13 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": null, "metadata": { "slideshow": { "slide_type": "slide" } }, - "outputs": [ - { - "data": { - "text/plain": "<IPython.core.display.Javascript object>", - "application/javascript": "/* Put everything inside the global mpl namespace */\n/* global mpl */\nwindow.mpl = {};\n\nmpl.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(\n '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\nmpl.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 = document.createElement('div');\n this.root.setAttribute('style', 'display: inline-block');\n this._root_extra_style(this.root);\n\n parent_element.appendChild(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 (fig.ratio !== 1) {\n fig.send_message('set_dpi_ratio', { dpi_ratio: fig.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\nmpl.figure.prototype._init_header = function () {\n var titlebar = document.createElement('div');\n titlebar.classList =\n 'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n var titletext = document.createElement('div');\n titletext.classList = 'ui-dialog-title';\n titletext.setAttribute(\n 'style',\n 'width: 100%; text-align: center; padding: 3px;'\n );\n titlebar.appendChild(titletext);\n this.root.appendChild(titlebar);\n this.header = titletext;\n};\n\nmpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n\nmpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n\nmpl.figure.prototype._init_canvas = function () {\n var fig = this;\n\n var canvas_div = (this.canvas_div = document.createElement('div'));\n canvas_div.setAttribute(\n 'style',\n 'border: 1px solid #ddd;' +\n 'box-sizing: content-box;' +\n 'clear: both;' +\n 'min-height: 1px;' +\n 'min-width: 1px;' +\n 'outline: 0;' +\n 'overflow: hidden;' +\n 'position: relative;' +\n 'resize: both;'\n );\n\n function on_keyboard_event_closure(name) {\n return function (event) {\n return fig.key_event(event, name);\n };\n }\n\n canvas_div.addEventListener(\n 'keydown',\n on_keyboard_event_closure('key_press')\n );\n canvas_div.addEventListener(\n 'keyup',\n on_keyboard_event_closure('key_release')\n );\n\n this._canvas_extra_style(canvas_div);\n this.root.appendChild(canvas_div);\n\n var canvas = (this.canvas = document.createElement('canvas'));\n canvas.classList.add('mpl-canvas');\n canvas.setAttribute('style', 'box-sizing: content-box;');\n\n this.context = canvas.getContext('2d');\n\n var backingStore =\n this.context.backingStorePixelRatio ||\n this.context.webkitBackingStorePixelRatio ||\n this.context.mozBackingStorePixelRatio ||\n this.context.msBackingStorePixelRatio ||\n this.context.oBackingStorePixelRatio ||\n this.context.backingStorePixelRatio ||\n 1;\n\n this.ratio = (window.devicePixelRatio || 1) / backingStore;\n if (this.ratio !== 1) {\n fig.send_message('set_dpi_ratio', { dpi_ratio: this.ratio });\n }\n\n var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n 'canvas'\n ));\n rubberband_canvas.setAttribute(\n 'style',\n 'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n );\n\n // Apply a ponyfill if ResizeObserver is not implemented by browser.\n if (this.ResizeObserver === undefined) {\n if (window.ResizeObserver !== undefined) {\n this.ResizeObserver = window.ResizeObserver;\n } else {\n var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n this.ResizeObserver = obs.ResizeObserver;\n }\n }\n\n this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n var nentries = entries.length;\n for (var i = 0; i < nentries; i++) {\n var entry = entries[i];\n var width, height;\n if (entry.contentBoxSize) {\n if (entry.contentBoxSize instanceof Array) {\n // Chrome 84 implements new version of spec.\n width = entry.contentBoxSize[0].inlineSize;\n height = entry.contentBoxSize[0].blockSize;\n } else {\n // Firefox implements old version of spec.\n width = entry.contentBoxSize.inlineSize;\n height = entry.contentBoxSize.blockSize;\n }\n } else {\n // Chrome <84 implements even older version of spec.\n width = entry.contentRect.width;\n height = entry.contentRect.height;\n }\n\n // Keep the size of the canvas and rubber band canvas in sync with\n // the canvas container.\n if (entry.devicePixelContentBoxSize) {\n // Chrome 84 implements new version of spec.\n canvas.setAttribute(\n 'width',\n entry.devicePixelContentBoxSize[0].inlineSize\n );\n canvas.setAttribute(\n 'height',\n entry.devicePixelContentBoxSize[0].blockSize\n );\n } else {\n canvas.setAttribute('width', width * fig.ratio);\n canvas.setAttribute('height', height * fig.ratio);\n }\n canvas.setAttribute(\n 'style',\n 'width: ' + width + 'px; height: ' + height + 'px;'\n );\n\n rubberband_canvas.setAttribute('width', width);\n rubberband_canvas.setAttribute('height', height);\n\n // And update the size in Python. We ignore the initial 0/0 size\n // that occurs as the element is placed into the DOM, which should\n // otherwise not happen due to the minimum size styling.\n if (width != 0 && height != 0) {\n fig.request_resize(width, height);\n }\n }\n });\n this.resizeObserverInstance.observe(canvas_div);\n\n function on_mouse_event_closure(name) {\n return function (event) {\n return fig.mouse_event(event, name);\n };\n }\n\n rubberband_canvas.addEventListener(\n 'mousedown',\n on_mouse_event_closure('button_press')\n );\n rubberband_canvas.addEventListener(\n 'mouseup',\n on_mouse_event_closure('button_release')\n );\n // Throttle sequential mouse events to 1 every 20ms.\n rubberband_canvas.addEventListener(\n 'mousemove',\n on_mouse_event_closure('motion_notify')\n );\n\n rubberband_canvas.addEventListener(\n 'mouseenter',\n on_mouse_event_closure('figure_enter')\n );\n rubberband_canvas.addEventListener(\n 'mouseleave',\n on_mouse_event_closure('figure_leave')\n );\n\n canvas_div.addEventListener('wheel', function (event) {\n if (event.deltaY < 0) {\n event.step = 1;\n } else {\n event.step = -1;\n }\n on_mouse_event_closure('scroll')(event);\n });\n\n canvas_div.appendChild(canvas);\n canvas_div.appendChild(rubberband_canvas);\n\n this.rubberband_context = rubberband_canvas.getContext('2d');\n this.rubberband_context.strokeStyle = '#000000';\n\n this._resize_canvas = function (width, height, forward) {\n if (forward) {\n canvas_div.style.width = width + 'px';\n canvas_div.style.height = height + 'px';\n }\n };\n\n // Disable right mouse context menu.\n this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n event.preventDefault();\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\nmpl.figure.prototype._init_toolbar = function () {\n var fig = this;\n\n var toolbar = document.createElement('div');\n toolbar.classList = 'mpl-toolbar';\n this.root.appendChild(toolbar);\n\n function on_click_closure(name) {\n return function (_event) {\n return fig.toolbar_button_onclick(name);\n };\n }\n\n function on_mouseover_closure(tooltip) {\n return function (event) {\n if (!event.currentTarget.disabled) {\n return fig.toolbar_button_onmouseover(tooltip);\n }\n };\n }\n\n fig.buttons = {};\n var buttonGroup = document.createElement('div');\n buttonGroup.classList = 'mpl-button-group';\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 /* Instead of a spacer, we start a new button group. */\n if (buttonGroup.hasChildNodes()) {\n toolbar.appendChild(buttonGroup);\n }\n buttonGroup = document.createElement('div');\n buttonGroup.classList = 'mpl-button-group';\n continue;\n }\n\n var button = (fig.buttons[name] = document.createElement('button'));\n button.classList = 'mpl-widget';\n button.setAttribute('role', 'button');\n button.setAttribute('aria-disabled', 'false');\n button.addEventListener('click', on_click_closure(method_name));\n button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n\n var icon_img = document.createElement('img');\n icon_img.src = '_images/' + image + '.png';\n icon_img.srcset = '_images/' + image + '_large.png 2x';\n icon_img.alt = tooltip;\n button.appendChild(icon_img);\n\n buttonGroup.appendChild(button);\n }\n\n if (buttonGroup.hasChildNodes()) {\n toolbar.appendChild(buttonGroup);\n }\n\n var fmt_picker = document.createElement('select');\n fmt_picker.classList = 'mpl-widget';\n toolbar.appendChild(fmt_picker);\n this.format_dropdown = fmt_picker;\n\n for (var ind in mpl.extensions) {\n var fmt = mpl.extensions[ind];\n var option = document.createElement('option');\n option.selected = fmt === mpl.default_extension;\n option.innerHTML = fmt;\n fmt_picker.appendChild(option);\n }\n\n var status_bar = document.createElement('span');\n status_bar.classList = 'mpl-message';\n toolbar.appendChild(status_bar);\n this.message = status_bar;\n};\n\nmpl.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\nmpl.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\nmpl.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\nmpl.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\nmpl.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], msg['forward']);\n fig.send_message('refresh', {});\n }\n};\n\nmpl.figure.prototype.handle_rubberband = function (fig, msg) {\n var x0 = msg['x0'] / fig.ratio;\n var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n var x1 = msg['x1'] / fig.ratio;\n var y1 = (fig.canvas.height - msg['y1']) / fig.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,\n 0,\n fig.canvas.width / fig.ratio,\n fig.canvas.height / fig.ratio\n );\n\n fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n};\n\nmpl.figure.prototype.handle_figure_label = function (fig, msg) {\n // Updates the figure title.\n fig.header.textContent = msg['label'];\n};\n\nmpl.figure.prototype.handle_cursor = function (fig, msg) {\n var cursor = msg['cursor'];\n switch (cursor) {\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\nmpl.figure.prototype.handle_message = function (fig, msg) {\n fig.message.textContent = msg['message'];\n};\n\nmpl.figure.prototype.handle_draw = function (fig, _msg) {\n // Request the server to send over a new figure.\n fig.send_draw_message();\n};\n\nmpl.figure.prototype.handle_image_mode = function (fig, msg) {\n fig.image_mode = msg['mode'];\n};\n\nmpl.figure.prototype.handle_history_buttons = function (fig, msg) {\n for (var key in msg) {\n if (!(key in fig.buttons)) {\n continue;\n }\n fig.buttons[key].disabled = !msg[key];\n fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n }\n};\n\nmpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n if (msg['mode'] === 'PAN') {\n fig.buttons['Pan'].classList.add('active');\n fig.buttons['Zoom'].classList.remove('active');\n } else if (msg['mode'] === 'ZOOM') {\n fig.buttons['Pan'].classList.remove('active');\n fig.buttons['Zoom'].classList.add('active');\n } else {\n fig.buttons['Pan'].classList.remove('active');\n fig.buttons['Zoom'].classList.remove('active');\n }\n};\n\nmpl.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.\nmpl.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\n fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n evt.data\n );\n fig.updated_canvas_event();\n fig.waiting = false;\n return;\n } else if (\n typeof evt.data === 'string' &&\n evt.data.slice(0, 21) === 'data:image/png;base64'\n ) {\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(\n \"No handler for the '\" + msg_type + \"' message type: \",\n msg\n );\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(\n \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n e,\n e.stack,\n msg\n );\n }\n }\n };\n};\n\n// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\nmpl.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 }\n if (e.target) {\n targ = e.target;\n } else if (e.srcElement) {\n targ = e.srcElement;\n }\n if (targ.nodeType === 3) {\n // defeat Safari bug\n targ = targ.parentNode;\n }\n\n // pageX,Y are the mouse positions relative to the document\n var boundingRect = targ.getBoundingClientRect();\n var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n var y = e.pageY - (boundingRect.top + document.body.scrollTop);\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 */\nfunction simpleKeys(original) {\n return Object.keys(original).reduce(function (obj, key) {\n if (typeof original[key] !== 'object') {\n obj[key] = original[key];\n }\n return obj;\n }, {});\n}\n\nmpl.figure.prototype.mouse_event = function (event, name) {\n var canvas_pos = mpl.findpos(event);\n\n if (name === 'button_press') {\n this.canvas.focus();\n this.canvas_div.focus();\n }\n\n var x = canvas_pos.x * this.ratio;\n var y = canvas_pos.y * this.ratio;\n\n this.send_message(name, {\n x: x,\n y: y,\n button: event.button,\n step: event.step,\n guiEvent: simpleKeys(event),\n });\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\nmpl.figure.prototype._key_event_extra = function (_event, _name) {\n // Handle any extra behaviour associated with a key event\n};\n\nmpl.figure.prototype.key_event = function (event, name) {\n // Prevent repeat events\n if (name === 'key_press') {\n if (event.which === this._key) {\n return;\n } else {\n this._key = event.which;\n }\n }\n if (name === 'key_release') {\n this._key = null;\n }\n\n var value = '';\n if (event.ctrlKey && event.which !== 17) {\n value += 'ctrl+';\n }\n if (event.altKey && event.which !== 18) {\n value += 'alt+';\n }\n if (event.shiftKey && event.which !== 16) {\n value += 'shift+';\n }\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, guiEvent: simpleKeys(event) });\n return false;\n};\n\nmpl.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\nmpl.figure.prototype.toolbar_button_onmouseover = function (tooltip) {\n this.message.textContent = tooltip;\n};\n\n///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n// prettier-ignore\nvar _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\nmpl.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\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n\nmpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n\nmpl.default_extension = \"png\";/* global mpl */\n\nvar 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\nmpl.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 = document.getElementById(id);\n var ws_proxy = comm_websocket_adapter(comm);\n\n function ondownload(figure, _format) {\n window.open(figure.canvas.toDataURL());\n }\n\n var fig = new mpl.figure(id, ws_proxy, ondownload, element);\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;\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 fig.cell_info[0].output_area.element.on(\n 'cleared',\n { fig: fig },\n fig._remove_fig_handler\n );\n};\n\nmpl.figure.prototype.handle_close = function (fig, msg) {\n var width = fig.canvas.width / fig.ratio;\n fig.cell_info[0].output_area.element.off(\n 'cleared',\n fig._remove_fig_handler\n );\n fig.resizeObserverInstance.unobserve(fig.canvas_div);\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.innerHTML =\n '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n fig.close_ws(fig, msg);\n};\n\nmpl.figure.prototype.close_ws = function (fig, msg) {\n fig.send_message('closing', msg);\n // fig.ws.close()\n};\n\nmpl.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 / this.ratio;\n var dataURL = this.canvas.toDataURL();\n this.cell_info[1]['text/html'] =\n '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n};\n\nmpl.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 () {\n fig.push_to_output();\n }, 1000);\n};\n\nmpl.figure.prototype._init_toolbar = function () {\n var fig = this;\n\n var toolbar = document.createElement('div');\n toolbar.classList = 'btn-toolbar';\n this.root.appendChild(toolbar);\n\n function on_click_closure(name) {\n return function (_event) {\n return fig.toolbar_button_onclick(name);\n };\n }\n\n function on_mouseover_closure(tooltip) {\n return function (event) {\n if (!event.currentTarget.disabled) {\n return fig.toolbar_button_onmouseover(tooltip);\n }\n };\n }\n\n fig.buttons = {};\n var buttonGroup = document.createElement('div');\n buttonGroup.classList = 'btn-group';\n var button;\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 /* Instead of a spacer, we start a new button group. */\n if (buttonGroup.hasChildNodes()) {\n toolbar.appendChild(buttonGroup);\n }\n buttonGroup = document.createElement('div');\n buttonGroup.classList = 'btn-group';\n continue;\n }\n\n button = fig.buttons[name] = document.createElement('button');\n button.classList = 'btn btn-default';\n button.href = '#';\n button.title = name;\n button.innerHTML = '<i class=\"fa ' + image + ' fa-lg\"></i>';\n button.addEventListener('click', on_click_closure(method_name));\n button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n buttonGroup.appendChild(button);\n }\n\n if (buttonGroup.hasChildNodes()) {\n toolbar.appendChild(buttonGroup);\n }\n\n // Add the status bar.\n var status_bar = document.createElement('span');\n status_bar.classList = 'mpl-message pull-right';\n toolbar.appendChild(status_bar);\n this.message = status_bar;\n\n // Add the close button to the window.\n var buttongrp = document.createElement('div');\n buttongrp.classList = 'btn-group inline pull-right';\n button = document.createElement('button');\n button.classList = 'btn btn-mini btn-primary';\n button.href = '#';\n button.title = 'Stop Interaction';\n button.innerHTML = '<i class=\"fa fa-power-off icon-remove icon-large\"></i>';\n button.addEventListener('click', function (_evt) {\n fig.handle_close(fig, {});\n });\n button.addEventListener(\n 'mouseover',\n on_mouseover_closure('Stop Interaction')\n );\n buttongrp.appendChild(button);\n var titlebar = this.root.querySelector('.ui-dialog-titlebar');\n titlebar.insertBefore(buttongrp, titlebar.firstChild);\n};\n\nmpl.figure.prototype._remove_fig_handler = function (event) {\n var fig = event.data.fig;\n if (event.target !== this) {\n // Ignore bubbled events from children.\n return;\n }\n fig.close_ws(fig, {});\n};\n\nmpl.figure.prototype._root_extra_style = function (el) {\n el.style.boxSizing = 'content-box'; // override notebook setting of border-box.\n};\n\nmpl.figure.prototype._canvas_extra_style = function (el) {\n // this is important to make the div 'focusable\n el.setAttribute('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 } else {\n // location in version 2\n IPython.keyboard_manager.register_events(el);\n }\n};\n\nmpl.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\n // Check for shift+enter\n if (event.shiftKey && event.which === 13) {\n this.canvas_div.blur();\n // select the cell after this one\n var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n IPython.notebook.select(index + 1);\n }\n};\n\nmpl.figure.prototype.handle_save = function (fig, _msg) {\n fig.ondownload(fig, null);\n};\n\nmpl.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.\nif (IPython.notebook.kernel !== null) {\n IPython.notebook.kernel.comm_manager.register_target(\n 'matplotlib',\n mpl.mpl_figure_comm\n );\n}\n" - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": "<IPython.core.display.HTML object>", - "text/html": "<div id='77e72190-28fa-4314-9ad7-630452415ffa'></div>" - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "fig, ax_u1 = plt.subplots(1,1, figsize=(6,3), tight_layout=True)\n", "ax_u1.plot(x_range, u_f_x_range, color='black');\n", @@ -963,30 +816,13 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": null, "metadata": { "slideshow": { "slide_type": "fragment" } }, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/latex": [ - "$\\displaystyle \\left\\{ a : - \\frac{P}{\\bar{\\tau} p}\\right\\}$" - ], - "text/plain": [ - "⎧ -P ⎫\n", - "⎨a: ────────────⎬\n", - "⎩ \\bar{\\tau}⋅p⎭" - ] - }, - "execution_count": 18, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "a_subs" ] @@ -1023,7 +859,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": null, "metadata": { "slideshow": { "slide_type": "fragment" @@ -1050,1002 +886,13 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": null, "metadata": { - "scrolled": false, "slideshow": { "slide_type": "slide" } }, - "outputs": [ - { - "data": { - "application/javascript": [ - "/* Put everything inside the global mpl namespace */\n", - "/* global mpl */\n", - "window.mpl = {};\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(\n", - " '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", - "\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 = document.createElement('div');\n", - " this.root.setAttribute('style', 'display: inline-block');\n", - " this._root_extra_style(this.root);\n", - "\n", - " parent_element.appendChild(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 (fig.ratio !== 1) {\n", - " fig.send_message('set_dpi_ratio', { dpi_ratio: fig.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 = document.createElement('div');\n", - " titlebar.classList =\n", - " 'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n", - " var titletext = document.createElement('div');\n", - " titletext.classList = 'ui-dialog-title';\n", - " titletext.setAttribute(\n", - " 'style',\n", - " 'width: 100%; text-align: center; padding: 3px;'\n", - " );\n", - " titlebar.appendChild(titletext);\n", - " this.root.appendChild(titlebar);\n", - " this.header = titletext;\n", - "};\n", - "\n", - "mpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n", - "\n", - "mpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n", - "\n", - "mpl.figure.prototype._init_canvas = function () {\n", - " var fig = this;\n", - "\n", - " var canvas_div = (this.canvas_div = document.createElement('div'));\n", - " canvas_div.setAttribute(\n", - " 'style',\n", - " 'border: 1px solid #ddd;' +\n", - " 'box-sizing: content-box;' +\n", - " 'clear: both;' +\n", - " 'min-height: 1px;' +\n", - " 'min-width: 1px;' +\n", - " 'outline: 0;' +\n", - " 'overflow: hidden;' +\n", - " 'position: relative;' +\n", - " 'resize: both;'\n", - " );\n", - "\n", - " function on_keyboard_event_closure(name) {\n", - " return function (event) {\n", - " return fig.key_event(event, name);\n", - " };\n", - " }\n", - "\n", - " canvas_div.addEventListener(\n", - " 'keydown',\n", - " on_keyboard_event_closure('key_press')\n", - " );\n", - " canvas_div.addEventListener(\n", - " 'keyup',\n", - " on_keyboard_event_closure('key_release')\n", - " );\n", - "\n", - " this._canvas_extra_style(canvas_div);\n", - " this.root.appendChild(canvas_div);\n", - "\n", - " var canvas = (this.canvas = document.createElement('canvas'));\n", - " canvas.classList.add('mpl-canvas');\n", - " canvas.setAttribute('style', 'box-sizing: content-box;');\n", - "\n", - " this.context = canvas.getContext('2d');\n", - "\n", - " var backingStore =\n", - " this.context.backingStorePixelRatio ||\n", - " this.context.webkitBackingStorePixelRatio ||\n", - " this.context.mozBackingStorePixelRatio ||\n", - " this.context.msBackingStorePixelRatio ||\n", - " this.context.oBackingStorePixelRatio ||\n", - " this.context.backingStorePixelRatio ||\n", - " 1;\n", - "\n", - " this.ratio = (window.devicePixelRatio || 1) / backingStore;\n", - " if (this.ratio !== 1) {\n", - " fig.send_message('set_dpi_ratio', { dpi_ratio: this.ratio });\n", - " }\n", - "\n", - " var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n", - " 'canvas'\n", - " ));\n", - " rubberband_canvas.setAttribute(\n", - " 'style',\n", - " 'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n", - " );\n", - "\n", - " // Apply a ponyfill if ResizeObserver is not implemented by browser.\n", - " if (this.ResizeObserver === undefined) {\n", - " if (window.ResizeObserver !== undefined) {\n", - " this.ResizeObserver = window.ResizeObserver;\n", - " } else {\n", - " var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n", - " this.ResizeObserver = obs.ResizeObserver;\n", - " }\n", - " }\n", - "\n", - " this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n", - " var nentries = entries.length;\n", - " for (var i = 0; i < nentries; i++) {\n", - " var entry = entries[i];\n", - " var width, height;\n", - " if (entry.contentBoxSize) {\n", - " if (entry.contentBoxSize instanceof Array) {\n", - " // Chrome 84 implements new version of spec.\n", - " width = entry.contentBoxSize[0].inlineSize;\n", - " height = entry.contentBoxSize[0].blockSize;\n", - " } else {\n", - " // Firefox implements old version of spec.\n", - " width = entry.contentBoxSize.inlineSize;\n", - " height = entry.contentBoxSize.blockSize;\n", - " }\n", - " } else {\n", - " // Chrome <84 implements even older version of spec.\n", - " width = entry.contentRect.width;\n", - " height = entry.contentRect.height;\n", - " }\n", - "\n", - " // Keep the size of the canvas and rubber band canvas in sync with\n", - " // the canvas container.\n", - " if (entry.devicePixelContentBoxSize) {\n", - " // Chrome 84 implements new version of spec.\n", - " canvas.setAttribute(\n", - " 'width',\n", - " entry.devicePixelContentBoxSize[0].inlineSize\n", - " );\n", - " canvas.setAttribute(\n", - " 'height',\n", - " entry.devicePixelContentBoxSize[0].blockSize\n", - " );\n", - " } else {\n", - " canvas.setAttribute('width', width * fig.ratio);\n", - " canvas.setAttribute('height', height * fig.ratio);\n", - " }\n", - " canvas.setAttribute(\n", - " 'style',\n", - " 'width: ' + width + 'px; height: ' + height + 'px;'\n", - " );\n", - "\n", - " rubberband_canvas.setAttribute('width', width);\n", - " rubberband_canvas.setAttribute('height', height);\n", - "\n", - " // And update the size in Python. We ignore the initial 0/0 size\n", - " // that occurs as the element is placed into the DOM, which should\n", - " // otherwise not happen due to the minimum size styling.\n", - " if (width != 0 && height != 0) {\n", - " fig.request_resize(width, height);\n", - " }\n", - " }\n", - " });\n", - " this.resizeObserverInstance.observe(canvas_div);\n", - "\n", - " function on_mouse_event_closure(name) {\n", - " return function (event) {\n", - " return fig.mouse_event(event, name);\n", - " };\n", - " }\n", - "\n", - " rubberband_canvas.addEventListener(\n", - " 'mousedown',\n", - " on_mouse_event_closure('button_press')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseup',\n", - " on_mouse_event_closure('button_release')\n", - " );\n", - " // Throttle sequential mouse events to 1 every 20ms.\n", - " rubberband_canvas.addEventListener(\n", - " 'mousemove',\n", - " on_mouse_event_closure('motion_notify')\n", - " );\n", - "\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseenter',\n", - " on_mouse_event_closure('figure_enter')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseleave',\n", - " on_mouse_event_closure('figure_leave')\n", - " );\n", - "\n", - " canvas_div.addEventListener('wheel', function (event) {\n", - " if (event.deltaY < 0) {\n", - " event.step = 1;\n", - " } else {\n", - " event.step = -1;\n", - " }\n", - " on_mouse_event_closure('scroll')(event);\n", - " });\n", - "\n", - " canvas_div.appendChild(canvas);\n", - " canvas_div.appendChild(rubberband_canvas);\n", - "\n", - " this.rubberband_context = rubberband_canvas.getContext('2d');\n", - " this.rubberband_context.strokeStyle = '#000000';\n", - "\n", - " this._resize_canvas = function (width, height, forward) {\n", - " if (forward) {\n", - " canvas_div.style.width = width + 'px';\n", - " canvas_div.style.height = height + 'px';\n", - " }\n", - " };\n", - "\n", - " // Disable right mouse context menu.\n", - " this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n", - " event.preventDefault();\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 toolbar = document.createElement('div');\n", - " toolbar.classList = 'mpl-toolbar';\n", - " this.root.appendChild(toolbar);\n", - "\n", - " function on_click_closure(name) {\n", - " return function (_event) {\n", - " return fig.toolbar_button_onclick(name);\n", - " };\n", - " }\n", - "\n", - " function on_mouseover_closure(tooltip) {\n", - " return function (event) {\n", - " if (!event.currentTarget.disabled) {\n", - " return fig.toolbar_button_onmouseover(tooltip);\n", - " }\n", - " };\n", - " }\n", - "\n", - " fig.buttons = {};\n", - " var buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'mpl-button-group';\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", - " /* Instead of a spacer, we start a new button group. */\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - " buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'mpl-button-group';\n", - " continue;\n", - " }\n", - "\n", - " var button = (fig.buttons[name] = document.createElement('button'));\n", - " button.classList = 'mpl-widget';\n", - " button.setAttribute('role', 'button');\n", - " button.setAttribute('aria-disabled', 'false');\n", - " button.addEventListener('click', on_click_closure(method_name));\n", - " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", - "\n", - " var icon_img = document.createElement('img');\n", - " icon_img.src = '_images/' + image + '.png';\n", - " icon_img.srcset = '_images/' + image + '_large.png 2x';\n", - " icon_img.alt = tooltip;\n", - " button.appendChild(icon_img);\n", - "\n", - " buttonGroup.appendChild(button);\n", - " }\n", - "\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - "\n", - " var fmt_picker = document.createElement('select');\n", - " fmt_picker.classList = 'mpl-widget';\n", - " toolbar.appendChild(fmt_picker);\n", - " this.format_dropdown = fmt_picker;\n", - "\n", - " for (var ind in mpl.extensions) {\n", - " var fmt = mpl.extensions[ind];\n", - " var option = document.createElement('option');\n", - " option.selected = fmt === mpl.default_extension;\n", - " option.innerHTML = fmt;\n", - " fmt_picker.appendChild(option);\n", - " }\n", - "\n", - " var status_bar = document.createElement('span');\n", - " status_bar.classList = 'mpl-message';\n", - " toolbar.appendChild(status_bar);\n", - " this.message = status_bar;\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", - "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", - "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], msg['forward']);\n", - " fig.send_message('refresh', {});\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_rubberband = function (fig, msg) {\n", - " var x0 = msg['x0'] / fig.ratio;\n", - " var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n", - " var x1 = msg['x1'] / fig.ratio;\n", - " var y1 = (fig.canvas.height - msg['y1']) / fig.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,\n", - " 0,\n", - " fig.canvas.width / fig.ratio,\n", - " fig.canvas.height / fig.ratio\n", - " );\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", - " 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.handle_history_buttons = function (fig, msg) {\n", - " for (var key in msg) {\n", - " if (!(key in fig.buttons)) {\n", - " continue;\n", - " }\n", - " fig.buttons[key].disabled = !msg[key];\n", - " fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n", - " if (msg['mode'] === 'PAN') {\n", - " fig.buttons['Pan'].classList.add('active');\n", - " fig.buttons['Zoom'].classList.remove('active');\n", - " } else if (msg['mode'] === 'ZOOM') {\n", - " fig.buttons['Pan'].classList.remove('active');\n", - " fig.buttons['Zoom'].classList.add('active');\n", - " } else {\n", - " fig.buttons['Pan'].classList.remove('active');\n", - " fig.buttons['Zoom'].classList.remove('active');\n", - " }\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", - "\n", - " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", - " evt.data\n", - " );\n", - " fig.updated_canvas_event();\n", - " fig.waiting = false;\n", - " return;\n", - " } else if (\n", - " typeof evt.data === 'string' &&\n", - " evt.data.slice(0, 21) === 'data:image/png;base64'\n", - " ) {\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(\n", - " \"No handler for the '\" + msg_type + \"' message type: \",\n", - " msg\n", - " );\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(\n", - " \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n", - " e,\n", - " e.stack,\n", - " msg\n", - " );\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", - " }\n", - " if (e.target) {\n", - " targ = e.target;\n", - " } else if (e.srcElement) {\n", - " targ = e.srcElement;\n", - " }\n", - " if (targ.nodeType === 3) {\n", - " // defeat Safari bug\n", - " targ = targ.parentNode;\n", - " }\n", - "\n", - " // pageX,Y are the mouse positions relative to the document\n", - " var boundingRect = targ.getBoundingClientRect();\n", - " var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n", - " var y = e.pageY - (boundingRect.top + document.body.scrollTop);\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", - " }\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", - " this.canvas.focus();\n", - " this.canvas_div.focus();\n", - " }\n", - "\n", - " var x = canvas_pos.x * this.ratio;\n", - " var y = canvas_pos.y * this.ratio;\n", - "\n", - " this.send_message(name, {\n", - " x: x,\n", - " y: y,\n", - " button: event.button,\n", - " step: event.step,\n", - " guiEvent: simpleKeys(event),\n", - " });\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", - " // Prevent repeat events\n", - " if (name === 'key_press') {\n", - " if (event.which === this._key) {\n", - " return;\n", - " } else {\n", - " this._key = event.which;\n", - " }\n", - " }\n", - " if (name === 'key_release') {\n", - " this._key = null;\n", - " }\n", - "\n", - " var value = '';\n", - " if (event.ctrlKey && event.which !== 17) {\n", - " value += 'ctrl+';\n", - " }\n", - " if (event.altKey && event.which !== 18) {\n", - " value += 'alt+';\n", - " }\n", - " if (event.shiftKey && event.which !== 16) {\n", - " value += 'shift+';\n", - " }\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, 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", - "\n", - "///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n", - "// prettier-ignore\n", - "var _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\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\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", - "\n", - "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n", - "\n", - "mpl.default_extension = \"png\";/* global mpl */\n", - "\n", - "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 = document.getElementById(id);\n", - " var ws_proxy = comm_websocket_adapter(comm);\n", - "\n", - " function ondownload(figure, _format) {\n", - " window.open(figure.canvas.toDataURL());\n", - " }\n", - "\n", - " var fig = new mpl.figure(id, ws_proxy, ondownload, element);\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;\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", - " fig.cell_info[0].output_area.element.on(\n", - " 'cleared',\n", - " { fig: fig },\n", - " fig._remove_fig_handler\n", - " );\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_close = function (fig, msg) {\n", - " var width = fig.canvas.width / fig.ratio;\n", - " fig.cell_info[0].output_area.element.off(\n", - " 'cleared',\n", - " fig._remove_fig_handler\n", - " );\n", - " fig.resizeObserverInstance.unobserve(fig.canvas_div);\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.innerHTML =\n", - " '<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 / this.ratio;\n", - " var dataURL = this.canvas.toDataURL();\n", - " this.cell_info[1]['text/html'] =\n", - " '<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 () {\n", - " fig.push_to_output();\n", - " }, 1000);\n", - "};\n", - "\n", - "mpl.figure.prototype._init_toolbar = function () {\n", - " var fig = this;\n", - "\n", - " var toolbar = document.createElement('div');\n", - " toolbar.classList = 'btn-toolbar';\n", - " this.root.appendChild(toolbar);\n", - "\n", - " function on_click_closure(name) {\n", - " return function (_event) {\n", - " return fig.toolbar_button_onclick(name);\n", - " };\n", - " }\n", - "\n", - " function on_mouseover_closure(tooltip) {\n", - " return function (event) {\n", - " if (!event.currentTarget.disabled) {\n", - " return fig.toolbar_button_onmouseover(tooltip);\n", - " }\n", - " };\n", - " }\n", - "\n", - " fig.buttons = {};\n", - " var buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'btn-group';\n", - " var button;\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", - " /* Instead of a spacer, we start a new button group. */\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - " buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'btn-group';\n", - " continue;\n", - " }\n", - "\n", - " button = fig.buttons[name] = document.createElement('button');\n", - " button.classList = 'btn btn-default';\n", - " button.href = '#';\n", - " button.title = name;\n", - " button.innerHTML = '<i class=\"fa ' + image + ' fa-lg\"></i>';\n", - " button.addEventListener('click', on_click_closure(method_name));\n", - " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", - " buttonGroup.appendChild(button);\n", - " }\n", - "\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - "\n", - " // Add the status bar.\n", - " var status_bar = document.createElement('span');\n", - " status_bar.classList = 'mpl-message pull-right';\n", - " toolbar.appendChild(status_bar);\n", - " this.message = status_bar;\n", - "\n", - " // Add the close button to the window.\n", - " var buttongrp = document.createElement('div');\n", - " buttongrp.classList = 'btn-group inline pull-right';\n", - " button = document.createElement('button');\n", - " button.classList = 'btn btn-mini btn-primary';\n", - " button.href = '#';\n", - " button.title = 'Stop Interaction';\n", - " button.innerHTML = '<i class=\"fa fa-power-off icon-remove icon-large\"></i>';\n", - " button.addEventListener('click', function (_evt) {\n", - " fig.handle_close(fig, {});\n", - " });\n", - " button.addEventListener(\n", - " 'mouseover',\n", - " on_mouseover_closure('Stop Interaction')\n", - " );\n", - " buttongrp.appendChild(button);\n", - " var titlebar = this.root.querySelector('.ui-dialog-titlebar');\n", - " titlebar.insertBefore(buttongrp, titlebar.firstChild);\n", - "};\n", - "\n", - "mpl.figure.prototype._remove_fig_handler = function (event) {\n", - " var fig = event.data.fig;\n", - " if (event.target !== this) {\n", - " // Ignore bubbled events from children.\n", - " return;\n", - " }\n", - " fig.close_ws(fig, {});\n", - "};\n", - "\n", - "mpl.figure.prototype._root_extra_style = function (el) {\n", - " el.style.boxSizing = 'content-box'; // override notebook setting of border-box.\n", - "};\n", - "\n", - "mpl.figure.prototype._canvas_extra_style = function (el) {\n", - " // this is important to make the div 'focusable\n", - " el.setAttribute('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", - " } else {\n", - " // location in version 2\n", - " IPython.keyboard_manager.register_events(el);\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", - "\n", - " // Check for shift+enter\n", - " if (event.shiftKey && event.which === 13) {\n", - " this.canvas_div.blur();\n", - " // select the cell after this one\n", - " var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n", - " IPython.notebook.select(index + 1);\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_save = function (fig, _msg) {\n", - " fig.ondownload(fig, null);\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(\n", - " 'matplotlib',\n", - " mpl.mpl_figure_comm\n", - " );\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=\"600\">" - ], - "text/plain": [ - "<IPython.core.display.HTML object>" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "72bf3e14e0914f0181fa89fc2ed43934", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "interactive(children=(FloatSlider(value=0.0, description='P', max=1.0, step=0.05), Output()), _dom_classes=('w…" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "u_fa_x_range = get_u_fa_x(x_range, 1)\n", "fig, (ax_u2) = plt.subplots(1,1, figsize=(6,3), tight_layout=True)\n", @@ -2073,32 +920,13 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": null, "metadata": { "slideshow": { "slide_type": "fragment" } }, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/latex": [ - "$\\displaystyle \\begin{cases} \\frac{P}{A_\\mathrm{f} E_\\mathrm{f}} + \\frac{\\bar{\\tau} p x}{A_\\mathrm{f} E_\\mathrm{f}} & \\text{for}\\: x > - \\frac{P}{\\bar{\\tau} p} \\\\0 & \\text{otherwise} \\end{cases}$" - ], - "text/plain": [ - "⎧ P \\bar{\\tau}⋅p⋅x -P \n", - "⎪───────────────────────── + ───────────────────────── for x > ────────────\n", - "⎨A_\\mathrm{f}⋅E_\\mathrm{f} A_\\mathrm{f}⋅E_\\mathrm{f} \\bar{\\tau}⋅p\n", - "⎪ \n", - "⎩ 0 otherwise " - ] - }, - "execution_count": 20, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "eps_f_x = sp.diff(u_fa_x,x)\n", "eps_f_x" @@ -2120,38 +948,13 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": null, "metadata": { "slideshow": { "slide_type": "fragment" } }, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/latex": [ - "$\\displaystyle E_\\mathrm{f} \\left(\\begin{cases} \\frac{P}{A_\\mathrm{f} E_\\mathrm{f}} + \\frac{\\bar{\\tau} p x}{A_\\mathrm{f} E_\\mathrm{f}} & \\text{for}\\: x > - \\frac{P}{\\bar{\\tau} p} \\\\0 & \\text{otherwise} \\end{cases}\\right)$" - ], - "text/plain": [ - " ⎛⎧ P \\bar{\\tau}⋅p⋅x \n", - " ⎜⎪───────────────────────── + ───────────────────────── for x > \n", - "E_\\mathrm{f}⋅⎜⎨A_\\mathrm{f}⋅E_\\mathrm{f} A_\\mathrm{f}⋅E_\\mathrm{f} \n", - " ⎜⎪ \n", - " ⎝⎩ 0 oth\n", - "\n", - " -P ⎞\n", - "────────────⎟\n", - "\\bar{\\tau}⋅p⎟\n", - " ⎟\n", - "erwise ⎠" - ] - }, - "execution_count": 21, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "sig_f_x = E_f * eps_f_x\n", "sig_f_x" @@ -2173,32 +976,13 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": null, "metadata": { "slideshow": { "slide_type": "fragment" } }, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/latex": [ - "$\\displaystyle \\begin{cases} \\bar{\\tau} & \\text{for}\\: x > - \\frac{P}{\\bar{\\tau} p} \\\\0 & \\text{otherwise} \\end{cases}$" - ], - "text/plain": [ - "⎧ -P \n", - "⎪\\bar{\\tau} for x > ────────────\n", - "⎨ \\bar{\\tau}⋅p\n", - "⎪ \n", - "⎩ 0 otherwise " - ] - }, - "execution_count": 22, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "tau_x = sp.simplify(sig_f_x.diff(x) * A_f / p)\n", "tau_x" @@ -2218,7 +1002,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": null, "metadata": { "slideshow": { "slide_type": "fragment" @@ -2244,7 +1028,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -2253,803 +1037,13 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": null, "metadata": { "slideshow": { "slide_type": "slide" } }, - "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 / mpl.ratio, fig.canvas.height / mpl.ratio);\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\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\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", - " // select the cell after this one\n", - " var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n", - " IPython.notebook.select(index + 1);\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,iVBORw0KGgoAAAANSUhEUgAAA3YAAAC7CAYAAAApMwx6AAAgAElEQVR4nO3deVhV5d4+8IdBZBYkh34BmmWWWqamp7fC4byWUr0Ox86VlvmqzWIdG6zToCxQ6zg2mJkNDmnZgGPOpqRvWs6amoghgyClxmAhCLLv3x/rEsX2di+GtZ413J/r+l7nsNuszcNm3eu5ETYCREREREREZGlC9gdAREREREREdcNiR0REREREZHEsdkRERERERBbHYkdERERERGRxLHZEREREREQWx2JHRERERERkcSx2REREREREFsdiR0REREREZHEsdkRERERERBbHYkdERERERGRxLHZEREREREQWx2JHRERERERkcY4tdkII+Pj4cDgck4wQzowjZhGHY65hFnE4HDNMbbLImekFwMfHR/aHQESXcOo56dR1E5mVU89Jp66byKxqc06aqtjNmDEDnTt3RkBAAAYOHHjF+xYXF2Pw4MEICwtD06ZNkZycXKPHYoARmYuZzklmEZFzmemcZBYROZfli93ixYuxdOlSJCQkeA2woUOHIj4+HoWFhThy5AhiYmIwf/58zY/FACMyFzOdk8wiIucy0znJLCJyLssXuwsSExOvGGAlJSUICAjA3r17q26bOnUqunXrpvkxGGBE+lu2DCgv13ZfM56TzCIie/jmyDcoqyjTdF8znpPMIqqRrCxg/36OWSc7W9PT6Jhit2fPHvj6+qKysrLqtk2bNiEiIkLzYzDAiPT1zjuAEMBDD2m7vxnPSWYRkfV9vPtjCEWg36J+mu5vxnOSWUSapaaqF1+OeefBBzU9lY4pdlu2bEGjRo2q3bZnzx74+fl5fB9FUer8SjNEpM0nn6jZFRgILF+u7X3MuKlgFhFZ26IDi+Cj+CBgfAC+OPCFpvdhFpGlffyxegFu1Qr47//mmG3+/ndg3DhNT6Vjih2/M0VkXl98Afj4AAEBwMyZwG+/aXs/M56TzCIi61qethz+yf7wS/LD9G3TceLMCU3vZ8ZzkllEms2apRa7558H8vI4ZpujR4HjxzU9lY4pdhd+lnzfvn1Vt02bNg1xcXGaH4MBRlT/VqwA/P0BPz/g7beBtDR7FztmEZE5bcjYgIDxAfBRfPCf//sP0k6l2brYMYuoyrvvqsVuzBj5JYbj7GJXUVGB0tJSvPbaaxgwYABKS0tx7tw5t/d95JFHcN9996GoqAjp6emIjY3lqz8RSfTtt0DDhuq/1r35pppbR45Ys9gxi4is6/vs7xE8MRhCEUhMTcTx4uNIP51uyWLHLKIamz5dLXavviq/xHCcXewSExMhhKg23bt3BwD06dMHEydOrLpvcXExBg0ahNDQUDRp0gRJSUk1eiwGGFH92boVCAlRryWJiWpm5eVZt9gxi4isafeJ3Qh/MxxCEXhp/UvIKcpB3pk8yxY7ZhHV2KRJ6sV43Dj5JYbj7GJnJAYYUf3Yswdo1OjiT37k5FzML6sWOyM5dd1E9e3QyUOImhQFoQgkrEpAdlE28s7kWbrYGcmp67adCRPUC/L48fJLDIfFzigMMKK6O3QIuOoq9RoycqT6p1kuzS8WO++cum6i+vTL77/g6qlXQygCw5cNR1ZhVlWpY7HTxqnrtp3ERPWi/Oab8ksMh8XOKAwworr55Rfg6qvV68ewYerfQ708v1jsvHPquonqy/Hi42jxVgsIReDBrx9EZkFmtVLHYqeNU9dtO6++ql6Yp06VX2I4LHZGYYAR1d7x40CLFhf/zmZmpvv8YrHzzqnrJqoPv/7xK26YcQOEItD3877IKMj4S6ljsdPGqeu2nTFj1Ivz22/LLzEcFjujMMCIaue334A2bdTrxv/8D5CR4Tm/WOy8c+q6ierq97O/45ZZt0AoAr0+7YX00+luSx2LnTZOXbftjB6tXqBnzpRfYjgsdkZhgBHVXEEB0KGDes3o1QtIT79yfrHYeefUdRPVxZmyM+j6UVcIRSBuThx+Pvmzx1LHYqeNU9dtOwkJ6kV69mz5JYbDYmcUBhhRzZw5A/ztb+r14s47gZ9/9p5fLHbeOXXdRLVVUl6CbnO7QSgCt82+DQd+PXDFUsdip41T1207TzyhXqjnzJFfYjgsdkZhgBFpd/Ys0KOHeq247TbgwAFt+cVi551T101UG2UVZeizsA+EInDz+zdjb/5er6WOxU4bp67bdoYPVy/Wn34qv8RwWOyMwgAj0ubcOSA+Xr1OtG8P7N2rPb9Y7Lxz6rqJaqqisgL/+PIfEIpAmxltsDNvp6ZSx2KnjVPXbTtDhqgX7EWL5JcYDoudURhgRN5VVAAPPKBeI264Adi+vWb5xWLnnVPXTVQTla5KDF06FEIRuPbta7E1Z6vmUsdip41T1207gwapF+2vv5ZfYjgsdkZhgBFdWWUlMHSoen1o2RL4/vua5xeLnXdOXTeRVi6XC0+vfBpCEbhm2jVIPZZao1LHYqeNU9dtOwMHqhfuZcvklxgOi51RGGBEnrlcwMiR6rXh//0/YNOm2uUXi513Tl03kRYulwtj1o+BUASaTG6CtUfX1rjUsdhp49R1207fvurFe9Uq+SWGw2JnFAYYkXsuF/DSS+p1oUkTYM2a2ucXi513Tl03kRbJ3yVDKAKR/4nEirQVtSp1LHbaOHXdtnPhl+LXrZNfYjgsdkZhgBG5N2GCek2IiACWL69bfrHYeefUdRN5M33bdAhFIOyNMHx18KtalzoWO22cum7b6dVLvYhv3Ci/xHBY7IzCACP6q7ffVq8HoaHAl1/WPb9Y7Lxz6rqJruTDXR9CKAJBE4KwYP8C5BbnstjpzKnrtp3u3dUL+ZYt8ksMh8XOKAwwouo+/li9FgQGqn/+JjeXxc4ITl03kSef//Q5fBQfBIwPwIe7PqxzqWOx08ap67adO+5QL+bbtskvMRwWO6MwwIguWrQI8PEBAgKA2bPrp9Sx2Gnj1HUTubPs8DL4JfnBL8kPM36cUS+ljsVOG6eu23a6dFGL3c6d8ksMh8XOKAwwItWKFYC/P+DnB7z7bv2VOhY7bZy6bqLLrf9lPQLGB8BH8cHk7yfjePHxeil1LHbaOHXdtnPrrWqx27dPfonhsNgZhQFGBGzYADRsqP5r3aRJatbUZ36x2Hnn1HUTXer77O8RPDEYQhFQUpV6LXUsdto4dd22066dWuwOHZJfYjgsdkZhgJHTff89EBys5r+i1H+pY7HTxqnrJrpgV94uhL8ZDqEIvLz+ZeQU5dRrqWOx08ap67adG25QL+xHjsgvMRwWO6MwwMjJdu8GwsPV7H/pJSAnR5/8YrHzzqnrJgKAg78dRNSkKAhFYNTqUcguyq73Usdip41T1207rVqpF/fMTPklhsNiZxQGGDnVwYNAVJSa+wkJQHa2fvnFYuedU9dNdPT3o2g+tTmEIjBi2QhkFWbpUupY7LRx6rptJyZG/aX5rCz5JYbDYmcUBhg50S+/AFdfrZa64cP1z30WO++cum5ytuyibMS+FQuhCDz49YPILMjUrdSx2Gnj1HXbTvPm6i/P6/ldWw6LndkwwMhpcnKAFi3UUvfgg8b8lAaLnXdOXTc5V/4f+Wj9bmsIRaDfon7IKMjQtdSx2Gnj1HXbTlQUEBLCYmfWYbHTBwOMnOTXXy/+PnXfvkBGhjH5xWLnnVPXTc70+9nfcfP7N0MoAvcsuAfpp9N1L3Usdto4dd22Ex4ORETo98vzHBY7M2KAkVP8/jtw881qqbv7biA93bj8YrHzzqnrJucpLitGlw+7QCgCcXPicPjUYUNKHYudNk5dt+0EBan/asdiZ85hsdMHA4ycoLgY6NpVLXVxccDPPxubXyx23jl13eQsJeUl6Da3G4Qi0OXDLjj420HDSh2LnTZOXbft+PsDzZrp8zeMOCx2ZsUAI7srKQG6dVNL3W23AQcOGJ9fLHbeOXXd5BxlFWXovaA3hCJwy6xbsC9/n6GljsVOG6eu21ZcLvWif801LHZmHRY7fTDAyM7KyoA+fdR8v/lmYO9eOfllRLHr0qWLpomLi6vV8fXGLCI7q6iswIAvBkAoAm1mtMHOvJ2Glzqjih2ziKQrL1cv/C1aALm58ksM56/DYqcPBhjZVUUF8I9/qNnepg2wc6e8/DKi2AUGBmLevHlXnLlz5yI8PLxWx9cbs4jsqtJViSFLhkAoAte+fS225WyTUuqMKnbMIpKupES9+F93HYudWYfFTh8MMLKjykpg6FA116+9Fti6VW5+GVHsunbtqul+d9xxR62OrzdmEdmRy+XCU988BaEIXDPtGqQeS5VW6owqdswikq6o6OJ3dWUXGI77YbHTBwOM7MblAp5++uKP16emys8v/o6dd05dN9mXy+XCi+tehFAEmk5pinW/rJNa6vg7dto4dd22cuqUuglo107+BoDjfljs9MEAIztxuYAxY9Q8b9IEWLtWfnbl5bHYaeHUdZN9JX2XBKEINJ7UGN+kfSO91LHYaePUddtKfr66Ebj1VvkbAI77YbHTBwOM7CQ5Wc3yyEhgxQr5uXVhZBS7gwcP4v3330dycjKSkpKqxqyYRWQn07dNh1AEwt4IQ8qhFOmFTmaxYxaR4XJyLr4UtuwNAMf9sNjpgwFGdjF9uprjYWHAV1/Jz6xLx+hiN3fuXAQGBqJXr15o2LBh1f/279+/zsfWC7OI7GL2rtkQikDQhCAs3L8QucW50gudrGLHLCIpMjLUDcHtt8vfAHDcD4udPhhgZAcffqhmeFAQsGCB+V4Ey+hid8MNN2DdunUAgIiICADA4sWL8dRTT9X52HphFpEdfPbTZ/BRfBAwPgAf7f7IVKVORrFjFpEUaWnqpuCuu+RvADjuh8VOHwwwsrrPPwd8fICAALXgma3U5eUZX+zCwsKq/n9kZCQA9YUcrrrqqjofWy/MIrK6pYeXwi/JD/7J/pjx4wzTlToZxY5ZRFIcOKAWux495G8AOO6HxU4fDDCysmXLAD8/dWbMMGepy8szvti1bt0aeXl5AICOHTti8+bNOHToEKKioup8bL0wi8jK1v2yDgHjA+Cj+GDy95NxvPi49BJnhmLHLCIp9uxRi12vXvI3ABz3Y9Zi16VLF00TFxdX24fQFQOMrGr9evVf6Xx8gMmT1XyQnVOexuhiN23aNCxZsgQA8Omnn6JBgwYICAhAYmJinY+tF2YRWdWWrC0ImhAEoQgkf5ds2lIno9gxi0iK7dvVYtenj/wNAMf9mLXYBQYGYt68eVecuXPnIjw8vLYPoSsGGFnR//2f+vt0QgCKYu5Sl5dnfLErKCio9nZ2djZ+/vnnOh9XT8wisqKdeTsR9kYYhCLw7w3/Rk5RjvTyZqZixywiKb7/Xt0g3H+//A0Ax/2Ytdh17dpV0/3uuOOO2j6ErhhgZDW7dgHh4Wpmv/yy+qrGsvPJ2xhV7Hbv3o3o6Gj4+vri2muvxYEDB2p9LKMxi8hqDvx2AI0nNYZQBJ5d/azpS52RxY5ZRFKlpqqbhP795W8AOO7HrMXO6hhgZCUHDwJRUWpejxoFZGfLzyYtY1Sx69mzJ5577jkcPHgQ//rXvxAfH1/rYxmNWURWkn46Hc2mNINQBEYsG4Gswizppc1MxY5ZRFKtX69uFB54QP4GgON+WOz0wQAjqzh6FGjeXM3qESOArCz5uaR1jCp2UVFROHfuHACgpKQEV199da2PZTRmEVlFVmEWYqbHQCgCg74ehMyCTOmFzWzFjllEUq1apW4WBg+WvwHguB+rFbv27dvX9yF1wQAjK8jOBmJj1ZweNAjIzJSfSTUZo4rdpS8tDlx8eXErYBaRFZw4cwLXv3s9hCLQb1E/ZBRkSC9rZix2zCKSavlydcMwZIj8DQDH/Vit2F0eambFACOzy88HWrdWM7pvXyAjQ34e1XSMKnYNGzbEzJkzqyY4OLja2zNnzqz1sfXGLCKzO11yGu3fbw+hCPRe0Bvpp9OlFzWzFjtmEUmVkqJuGoYPl78B4LgfqxW70NDQ+j6kLhhgZGanTwM336zm8z33AOnp8rOoNmNUsevevTt69OjhcXr27FnrY+uNWURmVlxWjNs+vA1CEeg2pxsOnzosvaSZudgxi0iqRYvUjcPjj8vfAHDcj9WK3WeffVbr9y0vL0dCQgIiIyMRGRmJUaNGoaKiwu19u3fvjoCAAISEhFRNWVmZ5sdigJFZFRcDt92mZnNcHHD4sPwcqu0Y/ecO6guziAgoKS9B3Jw4CEWg60ddcfC3g9ILmtmLXX1jFlGNfPqpunl4+mn5GwCO+7FasauLcePGoVOnTsjPz8eJEyfQoUMHJCUlub1v9+7dMWPGjFo/FgOMzKikBOjWTc3lrl3VV8OUnUF1GasWO2YROV1ZRRl6L+gNoQh0mNUB+/L3SS9nTix2zCKqkU8+UTcQzzwjfwPAcT9mLXa9e/fWdL97771X8zGjo6OxdOnSqrdTUlIQGxvr9r4MMLKbsjKgd281k2+5Bdi3T37+1HWMKnZjxozxOjXBLCInq6iswIAvBkAoAjfOuBG78nZJL2ZWKXbMIpLqgw/UTcRzz8nfAHDcj1mLXVBQEFavXo1Vq1ZdcRo1aqTpeAUFBRBCIDMzs+q2Y8eOQQiBoqKiv9y/e/fuiIqKQuPGjdGpUyd8/fXXNfr4GWBkJhUVwIABah7feKP6x8hlZ099jFHFzsfHB23btsXw4cMxbNgwt6MVs4icrNJViYcXPwyhCLR6pxV+yPlBeimzUrFjFpFUM2aoG4kxY+RvADjux6zFrkWLFmjZsqXXadOmjabj5eTkQAiBwsLCqtsuhNpxN5+AH374AcXFxSgvL8eKFSsQHByM1NRUj8dXFAU+Pj5VI4SpfgqVHKyyUn1lYiGAa68Ftm6Vnzv1NUYVu8mTJ6Ndu3Zo164dpk2bhpMnT9b6WMwiciqXy4UnVjwBoQhET4/Gd5nfSS9kVit2zCKSavp0dTPxyivyNwAc92PWYlffLoRVVlZW1W1X+s7U5Z544gkkJCRofjx+Z4rMwOUCnnxSzeFrrgFSU+VnTn2O0b9jt337djz55JNo0qQJBgwYgJUrV6KysrJGx2AWkRO5XC48v/Z5CEWg2ZRmWP/LeullzIrF7gJmEUkxaZK6oRg3Tv4GgON+nFLsAPVnyZctW1b19uLFixETE6PpfZ966imMHDlS82MxwEg2lwt44QU1g5s2Bdatk5839T2yXjyltLQUr776Kvz8/LBx48Yavz+ziJwmMTURQhFoPKkxVqatlF7ErF7sLmAWkaEmTFA3FcnJ8jcAHPfjpGI3duxYdO7cGfn5+cjPz0fHjh3dvvpTYWEhVq9ejbNnz+L8+fNYvXo1QkJCsGHDBs2PxQAj2ZKS1PyNjAS++UZ+1ugxRhe7M2fOYPbs2bj99tsRGxuLsWPHVvsxJq2YReQkU7dOhVAEwt8IR8qhFOklzA7FjllEUiQmqhuLN9+UvwHguB8nFbvy8nKMHDkSERERiIiIQEJCQtXfa+nTpw8mTpwIADh58iS6dOmCsLAwhIeH49Zbb8WiRYtq9FgMMJJp2jQ1e8PCgJQU+Tmj1xhV7DZu3IghQ4agcePGGDRoENatWweXy1Xr4zGLyClm7ZwFoQgETwzGwv0LkVucK72EWbnYMYtIqtdeUzcXU6bI3wBw3I8Vil1aWlqN/gimGTDASJbZs9XcDQoCFi4EcnPl54xeY+SrYt50000YP348Zs6c6XbMillEsizYvwA+ig8ajm+IT/Z8YttSZ2SxYxaRVC+9pG4w3n5b/gaA436sUOxat26No0ePVrvt+PHj2LFjR30cXhcMMJJh4ULAxwdo2FD9O6J2LnV5ecYVu+7du6NHjx4ep2fPnrU+tt6YRSTD4p8Xwy/JD/7J/nhv+3u2LnVGFjtmEUn13HNqsZs5U/4GgON+rFDsQkNDq/7/Cy+8AAA4deoU2rdvXx+H1wUDjIy2ZAng5wf4+wPvvWf/UpeXJ+/FU6zEqesmedYcXYMGyQ3gm+SLqVun4njxcenFyy7Fzsqcum5bGTVKLXazZ8vfAHDcjxWKXbNmzVBcXIzKykoEBQVV3a71j5PLwAAjI61bBwQEqP9aN3myek7LzhYjhsXOO6eum+TYnLUZQROCIBSB8ZvHO6LUsdhp49R128qFv580Z478DQDH/Vih2D322GOIj49HQkICGjdujMOHD6OgoACRkZH1cXhdMMDIKFu2qL9PJ4T6SphOKXV5ecYUu969e2u637333lur4+uNWURG2ZG7A2FvhEEoAv/e8G/kFOVIL1x2KnbMIpJuxAh1szF/vvwNAMf9WKHYnT17Fi+99BJef/11zJ07Fy1btsR//dd/oV+/fvVxeF0wwMgIO3eqr3wpBPDvfwM5OfIzxcgxotgFBQVh9erVWLVq1RXHrD9BwCwiI/z060+I/E8khCLw7OpnHVXqjCp2zCKS7pFH1A3H55/L3wBw3I8Vit3l1q5diylTpuDkyZN6HL5eMMBIbwcOAI0bqxn77LPOK3V5ecYUuxYtWqBly5Zep02bNrU6vt6YRaS3I6ePoNmUZhCKwKPLH0V2Ubb0omXHYscsIukGDVI3HV99JX8DwHE/Vix2VsAAIz2lpwPNmqn5+uijQHa2/CyRMfwdO++cum4yRlZhFmKmx0AoAg+lPITMgkzpJcuuxc7qnLpuWxk4UN14LFsmfwPAcT8sdvpggJFesrOBmBg1WwcPBjIz5eeIrGGx886p6yb9nThzAte9cx2EItD/i/7IKMiQXrBY7MzLqeu2lb591c3HypXyNwAc98Nipw8GGOkhPx+4/no1V/v1AzIy5GeIzGGx886p6yZ9nSo5hXYz20EoAr0X9Eb66XTp5YrFztycum5biY9XNyBr18rfAHDcD4udPhhgVN9Onwbat1cz9Z571B/HlJ0fssfoYmfm3+v1hFlE9a2otAidZ3eGUAS6z+2Ow6cOSy9WsofFzjunrttW7r5b3YR8+638DQDH/bDY6YMBRvWpuBi47TY1T+PigMOH5WeHGcboYufr64vDhw/X+ThGYhZRffrz3J+4a85dEIpA14+64uBvB6WXKjOM0cVu9uzZdT6G0ZhFNtCjh7oR2bJF/gaA435Y7PTBAKP68uefapkTAujaFTh4UH5umGWMLnY+Pj64/vrr0aBBA8TExGDUqFHIz8+v83H1xCyi+lJWUYZ7FtwDoQjcOutW7MvfJ71QmWWMLnZhYWF1PobRmEU2cOed6mZk2zb5GwCO+2Gx0wcDjOpDWdnFn3zo0AHYt09+ZphpZBS7Z555Bjt27MD69evx+OOPo3nz5jh69Gidj60XZhHVh/Lz5ei3qB+EInDjezdiV94u6WXKTGN0sQsNDXV7+5IlS+p8bL0wi2yga1d1Q7Jzp/wNAMf9sNjpgwFGdVVeDvTvr2bojTcCu3bJzwuzjdHFLjAwEOfPn69220cffYS+ffvW+dh6YRZRXZ2vPI+HFj8EoQhc9851+CHnB+lFymxjdLHz9/fHww8/jEmTJmHNmjXIy8tDfn6+x8JnBswiG+jYUd2U8LvM5h0WO30wwKguzp8HHnpIzc9WrYAffpCfFWYco4td69atkZaWVu22iooKNGnSpM7H1guziOrC5XLh8RWPQygCMdNjsDlzs/QSZcYxutgFBgYiOTkZDzzwAFq3bg1fX1/4+vpi8ODBdT62XphFNnDhFdz4OyHmHRY7fTDAqLZcLuCJJ9TsjI4GvvtOfk6YdYwudpMmTUL79u2xa9euqtu2bNmC2NjYOh9bL8wiqi2Xy4Xn1j4HoQg0m9IMGzI2SC9QZh3Zv2N37tw5nD59us7H1ROzyAbatFE3J2lp8jcAHPfDYqcPBhjVhssFPP+8mptNmwLr18vPCDOPjL9j98YbbyAsLAzR0dFo164d/P398dZbb9XLsfXALKLaGrdpHIQi0HhSY6xMWym9PJl5jC52nTp1qvMxjMYssoFWrdQNyrFj8jcAHPfDYqcPBhjVRmKimpmNGwMrV8rPB7OPrD9QXlZWhvXr1+Ozzz7DTz/9VG/H1QOziGpjytYpEIpA+JvhWPzzYunFyezDv2PnnVPXbSsxMYCvL5CVJX8DwHE/LHb6YIBRTU2Zopa68HAgJUV+NlhhZBU7K3Hquqn23t/xPoQiEDwxGJ/v/xy5xbnSi5PZh8XOO6eu21aaNwcCAoDsbPkbAI77YbHTBwOMauKDD9RSFxwMLFwI5ObKzwYrDIudd05dN9XOp/s+hVAEAscHYs7eOSx1LHb1xqnrtpWoKCAkhMXOzMNipw8GGGm1YAHg4wM0bAh88glLXU2Gxc47p66bai7lUAp8k3zhn+yPmTtmstSx2NUrp67bVsLDgUaNgJwc+RsAjvthsdMHA4y0WLIE8PMD/P2BmTNZ6mo6LHbeOXXdVDOr01ejQXID+Cb5Ytq2aThefFx6WbLSsNh559R120pwsPqvdix25h0WO30wwMibtWuBBg3U30OeMkU9D2XngdWGxc47p66btPsu8zsETgiEUAQmbJ7AUsdipwunrttWGjQAmjXjhsXMw2KnDwYYXcnmzUBQkPp7dcnJzMjaDoudd05dN2mzPXc7Qt8IhVAEXvn2FeQU5UgvSVYcFjvvnLpu23C51E3LNddw02LmYbHTBwOMPNmxAwgLU/PxlVf4Ew11GRY775y6bvJu/6/7EfmfSAhFYPSa0Sx1LHa6cuq6baOiQt24tGjB3xsx87DY6YMBRu7s3w9ERqrZ+OyzLHV1HRY775y6brqytFNpaDqlKYQi8PiKx5FdlC29HFl5WOy8c+q6bePsWXXzct11LHZmHhY7fTDA6HJHjqg/mi4E8NhjfLXg+hgWO++cum7yLLMwE9HToyEUgSGLhyCzIFN6MbL6sNh559R120ZxsbqBadNG/sWf43lY7PTBAKNLZWUBMTFqJj78MJCZKf/ct8Ow2Hnn1HWTe3ln8tDqnVYQisA/vvgHMgoypJciOwyLnUhyIsEAABKBSURBVHdOXbdtnD6tbmLatZN/8ed4HhY7fTDA6IITJ9SfXBACGDAAyMiQf97bZVjsvHPquumvTpWcQtuZbSEUgfiF8Th6+qj0QmSXYbHzzqnrto38fHUj06GD/Is/x/Ow2OmDAUYAcOoU0LatmoV9+qjnm+xz3k7DYuedU9dN1RWWFqLjBx0hFIEe83og7VSa9DJkp2Gx886p67aNnBx1M9O5s/yLP8fzsNjpgwFGRUVq/gkBdO8OHD4s/3y327DYeefUddNFf577E3d8cgeEInD7R7fj0G+HpBchuw2LnXdOXbdtZGSoG5q//U3+xZ/jeVjs9MEAc7Y//wTuuutiBh48KP9ct+Ow2Hnn1HWTqrSiFL0+7QWhCHT8oCP25++XXoLsOCx23jl13baRlqZuau66S/7Fn+N5WOz0wQBzrtJS4O671fy79Vb1TxzIPs/tOix23jl13QSUny9H30V9IRSBm967CbtP7JZegOw6LHbeOXXdtnHwoLqx6dFD/sWf43lY7PTBAHOm8nKgXz81+266Cdi1S/45budhsfPOqet2uvOV5zE4ZTCEInDdO9fhx+M/Si8/dh4WO++cum7b2LtX3dz06iX/4s/xPCx2+mCAOc/588BDD138+50//ij//Lb7sNh559R1O5nL5cJjyx+DUARipsdgS9YW6cXH7sNi551T120bO3ZcfCU42Rd/judhsdMHA8xZXC7g8cfVzIuJATZvln9uO2FY7Lxz6rqdyuVyYfSa0RCKQPMpzbEhY4P00uOEYbHzzqnrto2tW9VNzv33y7/4czwPi50+GGDO4XIBo0eredesGbBhg/zz2inDYuedU9ftVGM3jYVQBKImRWHVkVXSC49ThsXOO6eu2za++07d6PTvL//iz/E8LHb6YIA5x9ixatZFRQGrVsk/p500LHbeOXXdTjTp+0kQikD4m+FY8vMS6WXHScNi551T120bGzaom52BA+Vf/Dmeh8VOHwwwZ5g8Wc258HBg8WL557PThsXOO6eu22lm7pgJoQgETwzG5/s/R25xrvSy46RhsfPOqeu2jdWr1Q3PoEHyL/4cz8Nipw8GmP3NnKlmXHAw8NlnQG6u/PPZacNi551T1+0k8/bOg1AEGo5viDl757DUsdiZklPXbRvLl6ubniFD5F/8OZ6HxU4fDDB7mz9fzbeGDYFPPmGpkzUsdt45dd1OkXIoBb5JvmiQ3ADv73ifpY7FzrScum7bSElRNz7Dhsm/+HM8D4udPhhg9pWSAvj6Av7+6r/asdTJGxY775y6bidYlb4KDZIbwDfJF9O3Tcfx4uPSC45Th8XOO6eu2zYWLVKL3WOPyb/4czwPi50+GGD2tGYN0KCBWuymTVPPHdnnsJOHxc47p67b7lIzUxE4IRBCEZi4eSJLHYud6Tl13bbx6adqsXv6afkXf47nYbHTBwPMfr77DggMVHNt/HiWOjMMi513Tl23nf14/EeEvhEKoQi8tvE15BTlSC82Th8WO++cum7bmDNH3QA984z8iz/H8zip2JWXlyMhIQGRkZGIjIzEqFGjUFFR4fa+xcXFGDx4MMLCwtC0aVMkJyfX6LEYYPayfTsQGqpm2iuvADk58s9djnWLHbOIamtf/j5E/CcCQhF4fu3zLHUmGasWO2YRaTZ7troJeu45+Rd/judxUrEbN24cOnXqhPz8fJw4cQIdOnRAUlKS2/sOHToU8fHxKCwsxJEjRxATE4P58+drfiwGmH3s3w9ERqp5Nno0S52ZxqrFjllEtZF2Kg1NJjeBUASe/OZJZBdlSy80HGsXO2YRafbee+pGaMwY+Rd/judxUrGLjo7G0qVLq95OSUlBbGzsX+5XUlKCgIAA7N27t+q2qVOnolu3bpofiwFmD6mpQNOmapY9/jiQnS3/nOVcHKsWO2YR1dTWnK2Inh4NoQgMWTwEmQWZ0ssMx/rFjllEmr311sUfW5J98ed4HqcUu4KCAgghkJmZWXXbsWPHIIRAUVFRtfvu2bMHvr6+qKysrLpt06ZNiIiI0Px4Wj5Zc+YAL7/MMevcfbeaYRf+bEtmpvzzlVN9rFjszJhFC/cvxMsbXuaYdO797F4IRUAoAgO/HIhjBcekFxmO9YudGbMIX30l/+LPcT89e6obonHj5F/8OZ7HKcUuJycHQggUFhZW3XYh1I5f9gnYsmULGjVqVO22PXv2wM/Pz+PxFUWBj49P1Qjhfenx8ReLA8ecc+21wJQp6o9jHjrEMdscOGC9YmfGLPrnV/+sKg4cc07M9Bi8seUN7M3fi0MnD3FMNgd+O2C5YmfGLMKwYfIv/Jwrz5Qp8i/+nCtvjHJzNWWApYvdhbDKysqquk32d6Y2b1b/uPWsWRwzzoIFwIkTQHExx8xTVlZ/56QRzJhFW3O24pM9n2DWzlkcE878ffORW5yL4rJijomntKK03s5JI5gxi7B9u/rjTLI3ABz389ln6ndTZV/4OVees2fr75y8jGmKHaD+LPmyZcuq3l68eDFiYmL+cr8LP0u+b9++qtumTZuGuLg4zY9lluAmIpWZzklmEZFzmemcZBYROZfli93YsWPRuXNn5OfnIz8/Hx07dvT46k+PPPII7rvvPhQVFSE9PR2xsbF89SciCzPTOcksInIuM52TzCIi57J8sSsvL8fIkSMRERGBiIgIJCQkVP29lj59+mDixIlV9y0uLsagQYMQGhqKJk2aeAw6TxhgROZipnOSWUTkXGY6J5lFRM5l+WJnJAYYkbk49Zx06rqJzMqp56RT101kVix2NSCEqPZqUJ5G6/2sMlyP+cdua6rJueZEzCJ7jN3WY8c1MYuujFlkn7Hbmpy6ntpkkTPTqwZ8fOz1HSyux/zstia7rUcWu30euR7zs9ua7LYeWez2ebTbegD7rYnr0Y7Fzgt+MZmb3dYD2G9NdluPLHb7PHI95me3NdltPbLY7fNot/UA9lsT16Mdi50X/GIyN7utB7Dfmuy2Hlns9nnkeszPbmuy23pksdvn0W7rAey3Jq5HOxY7LxRFkf0h1Cuux/zstia7rUcWu30euR7zs9ua7LYeWez2ebTbegD7rYnr0Y7FjoiIiIiIyOJY7IiIiIiIiCyOxY6IiIiIiMjiWOyIiIiIiIgsjsWOiIiIiIjI4ljsLjNv3jx06dIF4eHhaN68OUaMGIHCwsIrvs8HH3yAmJgYBAcH495778WJEycM+mi9O3DgAO655x5ERUVBCIE//vjjivefO3cufH19ERISUjUff/yxQR+tdzVdD2Du5wcAli5diuuvvx5BQUG48847cfjwYY/3NePzU15ejoSEBERGRiIyMhKjRo1CRUWF2/sWFxdj8ODBCAsLQ9OmTZGcnGzwR2sdzCLzfa1fillkvueHWaQPZpH5vtYvxSwy3/MjM4tY7C4zc+ZMpKamorS0FL///jvi4+MxZMgQj/ffuHEjIiIi8OOPP+LPP//E8OHD0bNnTwM/4itLS0vDxx9/jG+++UZzgHXu3Nmgj67maroesz8/R44cQUhICFauXInS0lKMHTsWN9xwg8cAMOPzM27cOHTq1An5+fk4ceIEOnTogKSkJLf3HTp0KOLj41FYWIgjR44gJiYG8+fPN/gjtgZmkfm+1i/FLDLf88Ms0gezyHxf65diFpnv+ZGZRSx2XixfvhwtW7b0+N+HDBmCf/3rX1Vv//bbb/Dz80NGRoYRH55mmZmZtgiwC7Sux+zPz+uvv45+/fpVvV1eXo7IyEhs2rTJ7f3N+PxER0dj6dKlVW+npKQgNjb2L/crKSlBQEAA9u7dW3Xb1KlT0a1bN0M+TqtjFpkTs8g8mEXGYBaZE7PIPGRmEYudF88//zzuv/9+j//9lltuwdy5c6vdFhsbi2XLlun8kdVMTQIsKCgIV111FVq1aoXRo0dr+md9o2ldj9mfn759+yIxMbHabd26dcPbb7/t9v5me34KCgoghEBmZmbVbceOHYMQAkVFRdXuu2fPHvj6+qKysrLqtk2bNiEiIsKoD9fSmEXMIj0xi5hFWjGLmEV6YhbVLYscVezKy8tRWlrqcVwuV7X7r169GuHh4fjpp588HrNVq1bVWjmgnjQLFizQZQ2Xqsl6tJ7wGRkZ+OWXX1BZWYmjR4/izjvvxLBhw/ReCgB91mP25+fvf/873nrrrWrv17dvX4wfP97tMWU+P+7k5ORACFHt9y0uhNrx48er3XfLli1o1KhRtdv27NkDPz8/Qz5WM2EWMYsAcz0/zCJmEbPIPWZR/WEW6Z9Fjip2Dz74IIQQHufSdr1x40Y0btwY33777RWPecstt2DevHnVbjPqOx81WY/WE/5y27ZtQ2ho6F/CXQ96rMfsz0/fvn2hKEq197vSd6YuZ+Tz486FsMrKyqq6jd8l945ZxCwCzPX8MIuYRcwibZhFtccs4r/YSbFp0yZERkZi7dq1Xu87ZMgQjB49uurtkydPmupnlS+obYD9+OOPUk8QT2rys+Rmfn5ef/119O/fv+rt8vJyNG7cGBs3btT0/mZ4fqKjo6tdEBYvXoyYmJi/3O/Cz5Lv27ev6rZp06YhLi7OkI/TiphFF5nha90dZpHKDM8Ps0g/zKKLzPC17g6zSGWG50dmFrHYXSY1NRURERFYuXKlpvtv3LgRkZGR2LFjB0pKSvDoo4+a6tWFXC4XSktLkZaWBiEETp8+7fbHKy5YvXp11cveZmZmIi4u7oqvfmW0mq7H7M9PWloaQkJCsHr1apSVlSExMRGtW7f2+OpPZnx+xo4di86dOyM/Px/5+fno2LGjx1d/euSRR3DfffehqKgI6enpiI2N5SvRecAsMt/X+qWYReZ7fphF+mAWme9r/VLMIvM9PzKziMXuMj169PjL38MICQmp+u8LFy5E27Ztq73PrFmzcM011yA4OBjx8fGm+nsgF76D4+mf7y9fz4svvohmzZohKCgIMTExePbZZ3HmzBlJH/1f1XQ9gLmfHwBYsmQJrr/+egQGBuKOO+6o9vdarPD8lJeXY+TIkYiIiEBERAQSEhKqArhPnz6YOHFi1X2Li4sxaNAghIaGokmTJh6DjphFZvxavxSzyHzPD7NIH8wi832tX4pZZL7nR2YWsdgRERERERFZHIsdERERERGRxbHYERERERERWRyLHRERERERkcWx2BEREREREVkcix0REREREZHFsdgRERERERFZHIsdERERERGRxbHYERERERERWRyLHZlSYmIi/Pz8EBISgoyMDEMec8+ePQgJCYGvry9mzJhhyGMSkbkxi4jIDJhFpAWLHZlSYmIiBg4cKOWxu3fvzgAjIgDMIiIyB2YRacFiR6bEACMiM2AWEZEZMItICxY7MkRWVhYiIyOxYcMGAEBpaSnat2+PSZMmub2/uwBLTExEv3798MQTTyA8PBwtW7ZEamoqUlJS0KpVK0RGRmLs2LFV9587dy46d+6MsWPHIioqCs2aNcMXX3yBzZs3o23btggPD8djjz2GysrKao/DACOyL2YREZkBs4j0wGJHhvnyyy9x9dVX49SpUxg5ciR69eoFl8vl9r6eAqxBgwZYsmQJzp8/j9deew3R0dEYNmwY/vzzTxw8eBABAQHYv38/ADXA/P398e6776KiogIffvghIiIi8MADD+D06dPIzc1F06ZNsXz58mqPwwAjsjdmERGZAbOI6huLHRlqxIgRuPnmm9GkSROcOHHC4/08Bdidd95Z9fahQ4cghMDRo0erbuvSpQvmzp0LQA2w6Ojoqv9WUlICIUTVd8cA4J///CcSExOrPQ4DjMj+mEVEZAbMIqpPLHZkqN27d0MIgRdffPGK9/MUYJfelpmZCSEE/vjjj6rbLg2fCz9ycCkhBA4cOFD19v/+7//ihRdeqHYfBhiR/TGLiMgMmEVUn1jsyDDnzp3DrbfeiuHDhyM8PBw//fSTx/sywIhIL8wiIjIDZhHVNxY7Mszo0aPRs2dPVFZWYvr06Wjbti3Onj3r9r4MMCLSC7OIiMyAWUT1jcWODLFmzRpcddVVyM3NBQC4XC706dMHTz31lNv7M8CISA/MIiIyA2YR6YHFjkxp/PjxCA4ORqNGjXDs2DFDHnPv3r1o1KgRgoKCMGvWLEMek4jMjVlERGbALCItWOyIiIiIiIgsjsWOiIiIiIjI4ljsiIiIiIiILI7FjoiIiIiIyOJY7IiIiIiIiCyOxY6IiIiIiMjiWOyIiIiIiIgsjsWOiIiIiIjI4ljsiIiIiIiILI7FjoiIiIiIyOJY7IiIiIiIiCyOxY6IiIiIiMjiWOyIiIiIiIgsjsWOiIiIiIjI4v4/r83G9bb0XOoAAAAASUVORK5CYII=\" width=\"989.3666666666667\">" - ], - "text/plain": [ - "<IPython.core.display.HTML object>" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "fig, (ax_eps, ax_sig, ax_tau) = plt.subplots(1,3, figsize=(10,3), tight_layout=True)\n", "poui.plot_filled_var(ax_eps, x_range, get_eps_f_x(x_range,1 ), \n", @@ -3093,31 +1087,13 @@ }, { "cell_type": "code", - "execution_count": 64, + "execution_count": null, "metadata": { "slideshow": { "slide_type": "fragment" } }, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/latex": [ - "$\\displaystyle - w + \\frac{P^{2}}{2 A_\\mathrm{f} E_\\mathrm{f} \\bar{\\tau} p}$" - ], - "text/plain": [ - " 2 \n", - " P \n", - "-w + ────────────────────────────────────────\n", - " 2⋅A_\\mathrm{f}⋅E_\\mathrm{f}⋅\\bar{\\tau}⋅p" - ] - }, - "execution_count": 64, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "u_f_x.subs(x,0) - w" ] @@ -3135,29 +1111,13 @@ }, { "cell_type": "code", - "execution_count": 67, + "execution_count": null, "metadata": { "slideshow": { "slide_type": "fragment" } }, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/latex": [ - "$\\displaystyle \\sqrt{2} \\sqrt{A_\\mathrm{f}} \\sqrt{E_\\mathrm{f}} \\sqrt{\\bar{\\tau}} \\sqrt{p} \\sqrt{w}$" - ], - "text/plain": [ - " ______________ ______________ ____________ \n", - "√2⋅╲╱ A_\\mathrm{f} ⋅╲╱ E_\\mathrm{f} ⋅╲╱ \\bar{\\tau} ⋅√p⋅√w" - ] - }, - "execution_count": 67, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "Pw_pull = sp.solve(u_f_x.subs({x:0})-w, P)[0]\n", "Pw_pull" @@ -3176,56 +1136,26 @@ }, { "cell_type": "code", - "execution_count": 68, + "execution_count": null, "metadata": { "slideshow": { "slide_type": "fragment" } }, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAATcAAAAVCAYAAAAjMam7AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAHsUlEQVR4Ae2c63XVOBSFnawUwKSEoQMeFRA6YBYVAB0Ma/7lL3QAVMCjAzIV8OgApoIEOsjsT9ERku1r+/rqyr7GZy1dyZIsnbMlbb2cHF1fX1d1OT8/v6W4e8QrfFFPX59XBFYEVgSmRkDc9Kd0uCP3VeHvdX2O6xHK9Lfi/pWD4D7X07ueqUzuS1eeNW1FYEVgRSAHAp7QILUXCn+Ug7OCnISQAkp8JO+F3B8K/4zTBobfKx9MOrlIf/RAn7sjbRlkg8pmMngo51a68pkQYuwAnBnmlDTlJ28xKYUDBnks7itIP0K+yl3JvVfaayKmkpI4TGHjUu3rs0vp9LG/5H+U/4aw4Z+QmyLpmN+VMR6clrfT1zt06EmJTTpAJBjIgIJsIJW9iup8qQpeymd/z/K4lbwUbyS4V30oXHUVx8HXCxbUDxb0o7s8TyVT4VDK3qXaN9IuSM4mVdcEdXLbpV0Y1B+oQMqxPW3sgXcpfMi7qhNSdsytMGRShGxV15nXr+t8kpXLbZ9vr95UOGCU6jbM6QuTSmkcVN9TGdw6uSn+SunPcgJS2r6cuneVlcuuLOQmZdjK4qzxWDn8TmIdmqVxl3zrSlxImhF9HxYLMfeXGRoHTGCTbr9/abOGGhcK20KiBmXrdymfldqlf3/v28Ft9dxzfjeghUGyctMzq0cnCrOqTNJ90tK8xxhUx2JpRq72zB+BHCu35+rItmKzrSiH51lEZbPauYjqyFJu5kLYiiXEJX0hPAgtiOI4FxgtB4TFTnb2ATRXHKQXk9k/cpt2LowVdy65ycY52iad6MvsTujnjHXscxO6fM7pnyhP0tcVl8gUdtXJDaU7lYw19kbH2w8jtyxnSyoffVgFcjkwS/EYoBvnjNzOIuhN42fBgQIPDIuE6NE/l8wVB+nFsQzCmS8XWjw/lwuiPJ2kP1fbZMBD6QYx078Z74GkFYedxNvRjIKpFLKLXWOyqArkJgUgEQ5EbRWWatj+xBVsnN+IsXVbqrwMeEBg8H/Tc98s9lN5xn6W0q5x/lhrVLBwnVc+MxyfPxjZJ7UqfisceFnvHBIW8YSX2G4PsgeM3shx0G4YWvJGf444eFs+yQ+XKApXcp1kVjdS+WfXxtKJsfzJ60qYLwKCnXpmZxWOX3y+xCtkFzrxvRsXmk6/YwXuyBkjw9CDDkSVD4NYrbwyR+HeKsirTfjQjtmMfINmd+U3wmwrbw5xEFUlPUNH9uHEPsXFmGyNg6/jULBIbG9rJI8R5B9wa8vXFqd3Z4UDtsiFAa8wxD1Kx7nZJjuYfMw27HpbaxO3O1GeuH/XstxMzo3IjBGqn76ELs8U/iL36EQ/NMwTRUI4MN8Duc6GUbozRH5jxlUc3zg1Vm7+HVeuwq0rGr13iEKDtw1mI/rK286qmO/hwG6JONB2YLGRrGQ7GHB+au3PxPBAbmnCpUrv6vUQjFZbWV91k7h0rvd1R+SWb2Kb2EWeyrFtvjhBGa8YjEeDsFVw34qRtkEgwXg7Gmej41JBEOUFAPLfUphBz5Z00AoxFDLDgGywBm90ZKXZAEZzBvVrxS0SBwyMsKjP7CSbhJ2BxwKiP/PvDjqYtoJm7vMxad8YmrkJDfVYyCQf+KvdXPspfvKxLF3AnN3kbYXd2DvWQyzMugzAjeI7Ytffj8L0GB1E71CuO1xVGFadAxiJjkHZ7QK2cq3PZqEU2coq9r58zlOWigP2dmIh2+l48STAxEAnhPQ5e+VcJ6x2FS4q0iFHf6hUDu3Ncc3GFWxRw3xlGeyjver9nEmb8Z5cnPgqS3tMjoyxsKiok1unQr7h+v5O8IpCfN7O8voSVQYrvWu5LjLtK6aRTrmK/JGhXGaLSuW0dmTF0yHQ/RX5dhGVlR0LypROOXDAtI1YqB5IC/eOjF4gQ85rGRwI/j0X6vg5EBzCAOswpZG0D9uohHLljW5n/z6LHojbieJ45rOXQcdYyp99HN9okvw67rGYEwt0+d44Lh0YrJWeGbCJUYqjc7P1dHnkQ4Kcr4xmdb1rTPxZ5Q0SvYOeNKYNFA4XIR9us9ztbFQuhIGzAdZbB/mVia27m6F5QXHUGYvVj8+ZZn3Gi/MOCquMrbDwOpke1JEVBwpUHX1YgJHtBD5gA+95oX3ilRp/h9pLCpQhR75BfUJ599ofvC2xxwpi1GS2rW1UWsg+G9McR9nNKIf3/FOK7G021C7ydclR/P/cpCidjatUdwPS9eK2aSqTgcDscbTtu/vKL10gZAg4HnT7qs6Vu+JwA69w4OIpfOaj5x965mNQu5m7yVjwV3UX7w8FzavG2qf3IOsz+dl5IZf90q3BXce5Cj/QctxZ2IHqnlPtKXAIM746Jmc3/DuoyYjNgzkFDjnbsa+ssfaxctt599GnXO70OrldqoLT3JWo09r2pVKYcxa2K5OK1wl7i4mvky1tpfBvi4MHnNtE2+Zww2UXEj65rOfbpmh/KGnhWPv8e4zX+DKopOpD64Jjkh1YfVtKhv/kJt0eDLVml3xqtKdyk9/a7mJDjndXHG5QXDoOY+zTO2zTuTTg3JRzaybk2Y0Z6WS8lXyJkZCblK+UEZbmEoAV3Fs9T71VkBqrrAisCKwIpAiImyDdx3JwVoOr/gef2rOZIE5dEAAAAABJRU5ErkJggg==\n", - "text/latex": [ - "$\\displaystyle \\left\\{ A_\\mathrm{f} : 1, \\ E_\\mathrm{f} : 1, \\ L_{b} : 1, \\ \\bar{\\tau} : 1, \\ p : 1\\right\\}$" - ], - "text/plain": [ - "{A_\\mathrm{f}: 1, E_\\mathrm{f}: 1, L_b: 1, \\bar{\\tau}: 1, p: 1}" - ] - }, - "execution_count": 68, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "data_f" ] }, { "cell_type": "code", - "execution_count": 70, + "execution_count": null, "metadata": { "slideshow": { "slide_type": "fragment" } }, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAADwAAAAXCAYAAABXlyyHAAAACXBIWXMAAA7EAAAOxAGVKw4bAAADSklEQVRYCb2X61FUMRSALzsUgNoBdABYgdABaAVCBzr+45+DHQgVONCBWIFAB9KBSAf4fZckk72bi7vJumcmJPfkvF8b1h4fH7taODk52Yb3Zl5+6Nfmpf1fdOuNgk/h38GR20Y5K2Ovdjhkt1uls0Hn3BVVimK1wwj7xDLDq4TmiprUWEukN+HbZL+q4a/hCdnt2JvapzbDHzHalQBDDELE7XK+97vVwKRgSRW1tuiUxoENjPjBvhONCc6esh9mOMvvA2sffFMlBPkX7Eln1LPoXlPSOvJ5oEjc+xyHcWb7gXWR4yvPMxVVKadbyGGcMLt77JcDhXt8/wn3+ZWZ3QBvuVdBkLnL3lQlUflCDsM0Npk15g6jzGgJDFQtlCqqVlaXhhbGHiDl4R+RPOB+a6gNXOrdwZ0vsY77qskKX6yo41xuwB+B05Ybvs/iPWd1HrP3POz6ZdB8ID30GebgcDkPF2yzEGi+zt6UMdCr2FKOk7tM+Dx2rKIckF9g/c7SmRzkyVvIqvPbX45uAqMfRsi1HQzlOANGTSXzgsPqbIwHvNVi7z8H0qTsSci39sbX1j7nO/EZKNNA9AC97WaF9XQ6HHsvTl4jNAXQWD6LZFfaK/imSjEKBd9SUffwxyC8Rea3TK5VZRsMB9w1PE8OZ8SmXkFGNS8JSSzLqMTvUYDX4HTsY842VRRytVP5ZlLncrvEOYeGM6Pn4W7mZyn2Q+o7mG36S/bEJGMJAu0We3KWs0/QFEDOy6ooB+Ut8nK7LPHr3DbuzXoq8cng0rRbDkcQGj3BEo/l3iNKf4Lg1+wpWIHOgPnMnALoNLSlogzisH/FDbP7Dl2pxNenrHj6MMuWhk4r0PrPo/hElf3lXkUOKfs27/WX4ByEY8NOXbaAQeqrAtp5K0rHtLMH+DyrT1t6CLiUXZHFtzSETsEYwUO+h5HsBcY/gd7SKYFlN/oG5k6DNPYFZ/tP3W88l4TlOGhicKX9zbJizlk/Wa9Yv6DJe3zUYaNsxuzdsUcF1+2AfJ3VabNsYP1nI80AvpcKk5I0FPpWVvmwH0vkTTh0xd9JZ4UrDs4muWPM62MXGDLzhByjXQLeoWhFOcGfbZ9WXcUMtwpdlH+VFfUXRHFbU55BHroAAAAASUVORK5CYII=\n", - "text/latex": [ - "$\\displaystyle \\sqrt{2} \\sqrt{w}$" - ], - "text/plain": [ - "√2⋅√w" - ] - }, - "execution_count": 70, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "Pw_pull.subs(data_f)" ] @@ -3244,7 +1174,7 @@ }, { "cell_type": "code", - "execution_count": 71, + "execution_count": null, "metadata": { "slideshow": { "slide_type": "fragment" @@ -3268,804 +1198,13 @@ }, { "cell_type": "code", - "execution_count": 72, + "execution_count": null, "metadata": { - "scrolled": false, "slideshow": { "slide_type": "fragment" } }, - "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 / mpl.ratio, fig.canvas.height / mpl.ratio);\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\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\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", - " // select the cell after this one\n", - " var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n", - " IPython.notebook.select(index + 1);\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=\"700\">" - ], - "text/plain": [ - "<IPython.core.display.HTML object>" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "fig, ax_pull = plt.subplots(1,1, figsize=(7,4), tight_layout=True)\n", "w_range = np.linspace(0,2,50)\n", @@ -4083,7 +1222,7 @@ }, { "cell_type": "code", - "execution_count": 73, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -4094,38 +1233,9 @@ }, { "cell_type": "code", - "execution_count": 74, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/latex": [ - "$\\displaystyle \\begin{cases} w + \\frac{L_{b}^{2} \\bar{\\tau} p}{2 A_\\mathrm{f} E_\\mathrm{f}} - \\frac{\\sqrt{2} L_{b} \\sqrt{\\bar{\\tau}} \\sqrt{p} \\sqrt{w}}{\\sqrt{A_\\mathrm{f}} \\sqrt{E_\\mathrm{f}}} & \\text{for}\\: L_{b} < \\frac{\\sqrt{2} \\sqrt{A_\\mathrm{f}} \\sqrt{E_\\mathrm{f}} \\sqrt{w}}{\\sqrt{\\bar{\\tau}} \\sqrt{p}} \\\\0 & \\text{otherwise} \\end{cases}$" - ], - "text/plain": [ - "⎧ 2 ____________ \n", - "⎪ L_b ⋅\\bar{\\tau}⋅p √2⋅L_b⋅╲╱ \\bar{\\tau} ⋅√p⋅√w \n", - "⎪w + ─────────────────────────── - ───────────────────────────────── for L_b \n", - "⎨ 2⋅A_\\mathrm{f}⋅E_\\mathrm{f} ______________ ______________ \n", - "⎪ ╲╱ A_\\mathrm{f} ⋅╲╱ E_\\mathrm{f} \n", - "⎪ \n", - "⎩ 0 \n", - "\n", - " ______________ ______________ \n", - " √2⋅╲╱ A_\\mathrm{f} ⋅╲╱ E_\\mathrm{f} ⋅√w\n", - "< ───────────────────────────────────────\n", - " ____________ \n", - " ╲╱ \\bar{\\tau} ⋅√p \n", - " \n", - " otherwise " - ] - }, - "execution_count": 74, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "w_L_b = u_fa_x.subs(x, -L_b).subs(P, Pw_pull)\n", "w_L_b" @@ -4133,28 +1243,9 @@ }, { "cell_type": "code", - "execution_count": 75, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/latex": [ - "$\\displaystyle - \\frac{\\sqrt{2} \\sqrt{A_\\mathrm{f}} \\sqrt{E_\\mathrm{f}} \\sqrt{w}}{\\sqrt{\\bar{\\tau}} \\sqrt{p}}$" - ], - "text/plain": [ - " ______________ ______________ \n", - "-√2⋅╲╱ A_\\mathrm{f} ⋅╲╱ E_\\mathrm{f} ⋅√w \n", - "─────────────────────────────────────────\n", - " ____________ \n", - " ╲╱ \\bar{\\tau} ⋅√p " - ] - }, - "execution_count": 75, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "aw_pull = a_subs[a].subs(P, Pw_pull)\n", "aw_pull" @@ -4169,7 +1260,7 @@ }, { "cell_type": "code", - "execution_count": 76, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -4201,7 +1292,7 @@ }, { "cell_type": "code", - "execution_count": 77, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -4216,813 +1307,9 @@ }, { "cell_type": "code", - "execution_count": 78, + "execution_count": null, "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 / mpl.ratio, fig.canvas.height / mpl.ratio);\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\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\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", - " // select the cell after this one\n", - " var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n", - " IPython.notebook.select(index + 1);\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,iVBORw0KGgoAAAANSUhEUgAABDgAAAJYCAYAAACHNFbvAAAgAElEQVR4nOzdeVxU5eI/8GeGbVBwRUVyzQAVl7ql0qLZVcAWU25hWfenZqLeFr11K5cWvKZSWt00NbWb12+xuKRhKjdFgeqKdpNywaVcwAUU05BhZ2A+vz/mOjTOsAyi55xnPu/X6/MHpzMzZ575w/N8Ouc5AkREREREREREGieUPgAiIiIiIiIiouvFgoOIiIiIiIiINI8FBxERERERERFpHgsOIiIiIiIiItI8FhxEREREREREpHksOIiIiIiIiIhI81hwEBEREREREZHmseAgIiIiIiIiIs1jwUFEREREREREmseCg4iIiIiIiIg0jwUHEREREREREWkeCw4iIiIiIiIi0jwWHERERERERESkeSw4iIiIiIiIiEjzWHAQERERERERkeax4CAiIiIiIiIizWPBoaCCggIkJSUhMzMTWVlZDMMwDCNdMjMzkZSUhIKCAqX/2dUkniswDMMwsqcpzxVYcCgoKSkJQgiGYRiGkT5JSUlK/7OrSTxXYBiGYVwlTXGuwIJDQZmZmdYfUunWjGEYhmFuRK5O0DMzM5X+Z1eTeK7AMAzDyJ6mPFdgwaGgrKwsCCGQlZWl9KEQERHdEPy37vpw/IiISHZN+W8dCw4F8aSFiIhkx3/rrg/Hj4iIZMeCQxI8aSEiItnx37rrw/EjIiLZseCQBE9aiIhIdvy37vpw/IiISHYsOCTBkxYiIpId/627Phw/IiKSHQsOSfCkhYiIZMd/664Px4+IiGTHgkMSPGkhVJUDuV8rfRRERACAkhLg+++b9j35b9314fgREZHsWHBIgictLqzsInBwLrCxAxAvgCuHlT4iInJBhYXAv/8NzJoF3Hsv4OEB6PWA0dh0n8F/664Px4+IiGTHgkMSPGlxQQWHgL3PAolelmLjan6YpvSREZELuHQJSEoCXn4ZuPNOS5khhH22bWu6z+S/ddeH40dERLJjwSEJnrS4CLMZyNsO7Aq3LTXiBbC1D3DsI6CiCf93KRHR/1y4AKxfDzz/PNCnj+MyQwhApwN69gSeegpYutTyuqbCf+uuD8ePiIhkx4JDEjxpkVxVOXDyX8C2vtcUGzogNQI4kwSUXbbcrlJVofTREpEEzp4F4uOByZOB4ODaCw13d6BfP2DiRGDVKuDAAeDcOeD4cUvKy5vumPhv3fXh+BERkexYcEiCJy2SqvgNyFoAbPS3LTbWNgP2TAQu/QBUGi2pKGDBQUSNlpMD/N//WYqKW2+tvdDw9ATuuguYOhVYswY4fNhSaOTm2oYFh4XRaMSrr76KsLAw+Pn5QQiBmJiYBr8+Pz8f48ePR9u2beHt7Y3Q0FDs3LmzUceixfEjIiJyBgsOSfCkRTLFp4F9LwHrfGyLjY0dgJ9eB4ynaooNFhxE5CSzGTh1CvjXv4Dx44Fu3WovNLy9gdBQ4MUXLVd0HDtmX2Y4CgsOi+zsbLRs2RJDhgzBpEmTnCo4ysvL0adPH3Tq1AlxcXHYsWMHRo0aBXd3d6Snpzt9LFocPyIiImew4JAET1okUXAQ2P1nIMHdttjY0hM4tsRSYFxbbLDgIKJ6XC00Vq8Gxo0DunSpvdBo1szyFJS//tWy5sbx4w0rNFhwOGY2m2E2mwEAv/76q1MFx7JlyyCEQEZGhnWbyWRC7969MXDgQKePRYvjR0RE5AwWHJLgSYvG5X8HpD1sv3DojvuA7LVA+ZXaiw0WHER0DWcKDR8fYPBg4G9/A774Ajh5snGFBguO+jlbcAwfPhzBwcF22xcsWAAhBM6dO+fU52t9/IiIiOrDgkMSPGnRILMZOLcF2HHvNcWGHkh/FDi/E6gorL/YYMFBRACysy23nNRXaPj6AkOGAK++Cnz5ZdMVGiw46udsweHv74+oqCi77Vu3boUQAtu3b3fq87U+fkRERPVhwSEJnrRoSHUVkJ0IbOtnW2wkegEZ44BL+xpearDgIHJZZ88Cn30GPPNM3Wto+PjUFBpJSZYrO25EocGCo37OFhweHh6YMmWK3faMjAwIIZCQkFDra/Pz85GVlWWTpKQkTY8fERFRfVhwSELrJ30uoaoCOPFPYPNttsXGOl/ghxeBK0cbV2yw4CByCXl5lkU+J00CevSovdBo3txyy8nNLjRYcNSvMQXH1KlT7bZfLTgSExNrfW1MTAyEEA6j1fEjIiKqDwsOSWj9pE9qVWXAz0uBLzvbFhsb2gI/zQKM2ddXbLDgIJLSpUuWNTGeew7o1av+RUFffhnYuPHG3XLCguP63cxbVHgFBxERuSIWHJLQ+kmflEwlwNEPgE0dbYuNTQHAoXlASW7TFBssOIikcOUK8NVXwEsvAf371/3Y1rvvrnnKyYkTypcZLDgaxtmCIywsDD179rTbHhsbCyEEcnNznfp8rY8fERFRfVhwSIInLSpiKgaOvAdsbG9bbHzZxbK9rke9suAgchmlpUBKCjBrFjBoEKDXOy40PD2Bu+4CXngBWLsW+OUX5csLFhyN42zBsXz5cgghsHfvXus2k8mEkJAQDBo0yOnP1/r4ERER1YcFhyR40qICpmLgyCLgi3a2xcbmHsCxJUDZrzem2GDBQaQJlZXA7t3A3LnA0KGW4sJRoeHuDtx+OxAdDfzf/wHHjilfVrDguD7JycnYsGEDVq9eDSEEoqKisGHDBmzYsAElJSUAgIkTJ8LNzQ05OTnW15WXlyMkJASdO3dGfHw8UlJSEBkZCXd3d6Snpzt9HFodPyIiooZiwSEJnrQoyFQCHHnfQbERCPzyMVB++cYWGyw4iFSpuhrYvx94/33goYcsTzNxVGjodEDPnsCECcCqVcChQ8C5c8oXFCw4mk7Xrl1rXfAzOzsbADB+/Hibv6+6cOECxo0bhzZt2sBgMCA0NBQpKSmNOg6tjh8REVFDseCQBE9aFFBVBhxbDGz0ty02vgoEfll584oNFhxEqnHypKWkGDMG8POrfR2N7t2BJ54AliwBMjPlKDRYcKgfx4+IiGTn0gXHjz/+iFGjRqFjx47w9vZGcHAw/v73v1svF70qMzMTw4YNQ/PmzdGyZUtERkbi5MmTDt9zyZIlCA4OhqenJ7p164Y5c+agsrLSbr/8/HyMHz8ebdu2hbe3N0JDQ7Fz585GfxeetNxE1ZXALyuATbdcc8XGbZbtN7vYYMFBpJiLFy3rYkyaBHTrVnuh4e8PjBoFvPsukJEhZ6HBgkP9OH5ERCQ7ly04Dh8+DIPBgP79+2PdunXYtWsXYmJi4ObmhkcffdS639GjR+Hr64vBgwdj27Zt2LhxI0JCQhAQEICLFy/avOe8efOg0+kwa9YspKWlYeHChfD09ER0dLTNfuXl5ejTpw86deqEuLg47NixA6NGjWr0PbUAT1puiuoq4NTnwOZbbYuNpG6Wx8AqVWyw4CC6aUpKgK+/Bl55xbJORm2FRsuWQFgY8NZbwM6dwJkzyhcOLDiI40dERLJz2YLj9ddfhxACJ06csNk+efJkCCHw22+/AQCioqLg5+eHwsJC6z45OTnw8PDAa6+9Zt126dIlGAwGTJ482eb95s+fD51Oh8OHD1u3LVu2DEIIZGRkWLeZTCb07t0bAwcObNT34UnLDWQ2A2eTgK19rnkqSifg6D+AskvKFhssOIhumKoqYO9eYN68uhcG9fYG7rnHUnxs3gzk5ChfMCgdFhzqw/EjIiLZuWzBMWfOHAgh8Ouvv9psf+2116DX61FcXAyTyQRvb29MmTLF7vXh4eEIDAy0/h0XFwchBPbs2WOzX15eHoQQmD9/vnXb8OHDERwcbPeeCxYsgBAC586dc/r78KTlBsn/Bth+t22x8UU7IGsBUHpB+VKDBQdRkzKbLZPyjz8G/vQnoFUrx4WGXg/06wdMngzExQE//6x8oaC2sOBQH44fERHJzmULjuzsbLRq1QqPP/44Tp48CaPRiC1btqBly5Z48cUXAQDHjh2DEALLli2ze/0rr7wCnU6HsrIyAMDMmTMhhEBxcbHdvn5+fhg7dqz1b39/f0RFRdntt3XrVgghsH37dqe/D09amljBQSDtYdtiY31L4KfXgZJzypcZLDiImsylS8D69ZbHsta1jkb37sDYscCyZcCBA66xjgYLDrlw/IiISHYuW3AAlvU1evbsafO4tmnTpsFsNgMAdu/eDSEEEhMT7V579WqLvLw8AEB0dDS8vLwcfk5QUBDCw8Otf3t4eDi8KiQjIwNCCCQkJNR53Pn5+cjKyrJJUlIST1qaQvEZIGM8EK+rKTbWegM/vAAYTylfYrDgILpuFRVAejowezZw112Wx7Q6KjTatLE83nX+fOC774CzZ5UvDbQUFhzqw/EjIiLZuWzBkZ2djdtuuw333nsvvvjiC3zzzTdYuHAhWrRogYkTJwKoKTjWrl1r9/qrBcf58+cBWAoOg8Hg8LOCgoIQERFh/dvDwwNTp0612+9qweGoUPm9mJgYm1Lm9+FJSyNVXAF+mgmsNdQUGwluwO7/BxRkKV9esOAgajSzGThyBFi8GHj4YaB5c8eFhpcXcPfdlnU0tmzhOhosOOTD8SMiItm5bMHxxBNPoH379na3lKxevRpCCKSnpzfqFpVrHzELNP0tKryCowlVVwLHPgK+8LO9HSX1QeDXPcqXFiw4iBrl0iVg3Tpg4kSgU6fabzvp1cuyz5o1wLFjypcCMoUFh/pw/IiISHYuW3AEBwdj6NChdtsPHToEIQSWLl1qXWTU0dUWERERNouMxsfHQwiBvXv32ux3/vx5u0VGw8LC0LNnT7v3jI2NhRACubm5Tn8fnrQ4yWwGzm0FtvS0LTaS7wTObgEqCpUvLFhwEDWYyQT85z/Am28CAwfWfttJ+/bAqFHAe+8BP/zAdTRYcLgWjh8REcnOZQuOBx54AO3atUNRUZHN9lWrVkEIgaSkJADAmDFj0L59exiNRus+p0+fhqenJ2bMmGHddvnyZRgMBrsyJDY21u4xscuXL7crQ0wmE0JCQjBo0KBGfR+etDih4CCwa7htsZHUFTj+T6D8ivJFBQsOogbJzgZWrAAiI4EWLRwXGgYDcO+9wIwZwL//DZw+rfzE31XCgkN9OH5ERCQ7ly04Nm/eDJ1Oh9DQUKxbtw67du3C/Pnz4ePjg969e6OiwjJJPHr0KHx8fDBkyBAkJydj06ZN6NOnDwICAnDx4kWb95w3bx50Oh1mz56N9PR0LFq0CF5eXoiOjrbZr7y8HCEhIejcuTPi4+ORkpKCyMhIuLu7Iz09vVHfhyctDVB+Cfjvc0CCvqbYWOcLHHhLfY98ZcFBZKekBEhOBqZNA4KDa7/tJDgYeOYZy20nfHwrCw6qwfEjIiLZuWzBAQCpqakIDw+Hv78/vL29ERQUhL/97W+4dOmSzX779u3DsGHD0KxZM7Ro0QKjR4/GiRMnHL7n4sWLERQUBE9PT3Tp0gUxMTGorKy02+/ChQsYN24c2rRpA4PBgNDQUKSkpDT6u/CkpQ7VJss6Gxta2y4gmjEBKPxF+WKCBQeRQ2YzkJUFvP8+EBZmWQS0tqedPPww8M47wN69vO1ELWHBoT4cPyIikp1LFxwy4UlLLS6kA1v72N6OsmMwkP+d8oUECw4iO4WFwMaNQHQ00Lmz40LD3R24805g+nQgKYlPO1FrWHCoD8ePiIhkx4JDEjxpuUZJLvCfp2yLjS+7ACfXaHudDRYcJBmzGfjpJyA2FhgyxFJeOCo1AgKAqChg2TLg4EFepaGFsOBQH44fERHJjgWHJHjS8j/VlcCR94B1PjXFxlpv4KeZQOl55UsIFhxEKCgA1q+3rJPRsaPjQsPLy7I46MyZwI4dwJkzyk/YGRYcWsfxIyIi2bHgkARPWgBc3A1s62t71Ubaw8BvB5QvH1hwkAszm4EDByxXaQweDLi5OS41unYFnn4a+OQT4Ngx5SfoDAsO2XD8iIhIdiw4JOHSJy3ll4C9k2yLjc09gJx1QEWh8sUDCw5yQYWFwKZNwKRJwC231P4I18GDgTfeAHbtAs6eVX5SzrDgkBnHj4iIZMeCQxIuedJiNgOnPge+8KspNhK9gB9nyPHYVxYcpCFmM3D0KPDee8Af/wh4eNR+lcaf/wx8+imv0pA9LDjUh+NHRESyY8EhCZc7aSk6BaRG2F61kTIUuPSD8kUDCw5yEWVlwNdfAy++CNx6a+1radx3HzB7Nq/ScLWw4FAfjh8REcmOBYckXOakpboKOPI+sLZZTbHxhR9wfKW8T0dhwUEqcu4csHIlMHIk0KxZ7U88efJJYNUqXqXhymHBoT4cPyIikh0LDkm4xEnLlcPA14Nsr9r4z1OA8aTy5YIawoKDboDqamDvXss6Gbff7rjQcHcHBgwAXnnFckUHn3jC5Oay4FAjjh8REcmOBYckpD5pqa4EsuYDiZ41xUZSd+BMkmstIsqCg26SwkJgwwZgwgSgfXvHpUabNsCjjwIffgjs32+5skPpCTWjrrDgUB+OHxERyY4FhySkPWkpOAQk/+F3V23oge//ApTkKl8oqC0sOOg6nDoFLF4MDB9e+wKhvXoBU6cCGzcCOTnKT6AZdYcFh/pw/IiISHYsOCQh3UlLdRVw+F3bqza+CgJyv1a+SFBrWHCQE6qqgN27gZkzgZCQ2h/jOnQo8Pe/W/blVRqMM2HBoT4cPyIikh0LDklIddJiPA5sv8f2qo0fXnDNR7+y4KAmVFRkufpiwgSgXTvHpYa/PzBmDBcIZa4/LDjUh+NHRESyY8EhCSlOWsxm4MQ/gXXNa8qNzT2A3H8rXx5oISw4yIHcXGDFCuChhyyPbHVUaoSEAC+8AHz1FXD6tPITY0aOsOBQH44fERHJjgWHJDR/0lJ+Cfgm0vYJKXuf5VobLDjISWYzcPAg8Pbblieb1HXrydy5wJ49vPWEuTFhwWFRVFSE6dOno2PHjvDy8kL//v2RmJjYoNempqZi+PDhaNeuHZo3b46+ffti8eLFqKqqatSxaHH8iIiInMGCQxKaPmk5vxPY1LGm2NjYAchZzyeksOCgBjKZgLQ0YPp0oFs3x6WGnx/w2GPAypXA0aPKT34Z+cOCwyIsLAytWrXCihUrkJqaikmTJkEIgfj4+Dpfl5KSAr1ej6FDhyIpKQkpKSl48cUXIYTAtGnTGnUsWhw/IiIiZ7DgkIQmT1qqK4H9s4F4XU25kfYQUHhC+bJAi2HB4VKKiy3raYwbZ3lkq6NS47bbgOhoyyNf+dQT5maHBQewbds2CCGQkJBgsz0sLAwBAQF1Xonx9NNPw8vLC8XFxTbbw8PD0aJFi0Ydj9bGj4iIyFksOCShuZOW4hzbhUTXNgOOfgCUX1G+KNBqWHBILz8f+Oc/gUcesdxmcm2h4eYG3HUXMGMGsGsXcPas8pNcxnXDggOYNGkSfHx8YDKZbLYnJCRACIHdu3fX+toJEybA19cX1dXVNtvHjBmD9u3bN+p4tDZ+REREzmLBIQlNnbSc/QpY36qm3NjSG7iYoXxBoPWw4JDSqVPA++8D990H6HT2pYa3N/DHPwKxsUBmJtfTYNQTFhxAaGgoBgwYYLf96vdYuXJlra/du3cvvLy88PzzzyM3NxcFBQX47LPP4OHhgffee69Rx6O18SMiInIWCw5JaOKkpdoE/DTDdiHRjAlAaZ7y5YAMYcEhBbMZOHAAmDMH6N/f8a0nbdoAkZHA8uV8lCuj3rDgAAIDAxEREWG3PS8vD0IILFiwoM7X7969GwEBARBCQAgBNzc3LFy4sEGfnZ+fj6ysLJskJSVpavyIiIicxYJDEqo/6SvNA1KG1BQb63yA459wIVEWHASguhrYvRt45RWgRw/HpcYtt1jW24iPt1zVofTklWHqCwsOS8ExYsQIu+1XC47Y2NhaX7tv3z60b98eI0eOxJYtW5Camoo33ngDnp6emDt3br2fHRMTYy1Gro1Wxo+IiMhZLDgkoeqTvosZtk9J2dIL+HWv8oWAbGHBoSkmk2WdjOeeAzp2dFxqBAUBf/kL8NVXwJkzyk9YGcaZsOC4vltUBg0ahL59+9otRPrWW29Br9fj5MmTdX42r+AgIiJXxIJDEqo96Tu+Ekj0qCk3vhsDlOQqXwbIGBYcqldeDmzbBkycCLRta19o6HTA7bcDr74KpKZykVBG22HBAURHRztcZDQxMbHeRUa9vLwwYcIEu+1btmyBEAJbt251+ni0Nn5ERETOYsEhCdWdtFRVAN9Prik2EtyBrHf4lBQWHC6ntBTYtAl46imgRQv7UsPdHQgNBWJigL17uUgoI09YcADJyckQQmDt2rU220eMGFHvY2K7d++OPn362O0ze/ZsCCGwf/9+p49Ha+NHRETkLBYcklDVSUv5JSDl/ppy44t2wNktyhcAsocFh2oUFQHr1wNjxgDNm9uXGp6ewNChlief/PgjSw1GzrDgsAgLC0Pr1q2xatUqpKamIjo6GkIIxMXFWfeZOHEi3NzckJOTY922ZMkSCCHw4IMPIikpCTt27MCMGTPg7u6O4cOHN+pYtDh+REREzmDBIQnVnLRcOQJs7lFTbiTfDhQcUn7y7wphwaGowkLLAqCRkYDB4PhxruHhwAcfAIcOKT/5ZJgbHRYcFkVFRZg2bRr8/f3h6emJfv36ITEx0Waf8ePHQwiB7Oxsm+0bN27EfffdBz8/PzRv3hwhISF4++23UVxc3Khj0eL4EREROYMFhyRUcdJyPgVY37Km3PhmNB8By4JDaoWFwOefAyNHWq7KuLbUaN4ceOghYOlS4OhR5SecDHMzw4JDfTh+REQkOxYcklD8pOXkGss6G1fLjR9fBcoLlJ/0u1JYcNwUhYVAXBzw6KOAl5d9qdGiheW/ffwx8PPPyk8yGUapsOBQH44fERHJjgWHJBQ7aTGbgYNza4qNRE/Lk1MqCpWf8LtaWHDcMEaj5faTUaNqLzUiI4FPPgF++UX5iSXDqCEsONSH40dERLJjwSEJRU5aqquAvdE15cb6VsDZr5Sf6LtqWHA0qeJiYN06S3FRX6lx/Ljyk0mGUVtYcKgPx4+IiGTHgkMSN/2kpaoc+PbxmnLjy07AxQzlJ/muHBYc162sDPjyS+CJJ4BmzRyXGqNHA6tW8UoNhqkvLDjUh+NHRESyY8EhiZt60lJZBOwKqyk3tvQCCg4rP8F39bDgaJSKCmDbNmDcOEuBcW2p4eNjWUSUpQbDOBcWHOrD8SMiItmx4JDETTtpqbgCbL+7ptz49wDAeEr5yT3DgsMJVVVAWhoQHQ20aeP4ka4PPggsWwYcO6b8RJFhtBgWHOrD8SMiItm5fMHx3Xff4cEHH0SrVq1gMBhw2223Ye7cuTb7ZGZmYtiwYWjevDlatmyJyMhInDx50uH7LVmyBMHBwfD09ES3bt0wZ84cVFZW2u2Xn5+P8ePHo23btvD29kZoaCh27tzZ6O9xU05aKn6zFBpXy42UoUDJOeUn9gwLjgYwm4EffgBeegkICLAvNby8gOHDgX/8AzhyRPnJIcNoPSw41IfjR0REsnPpgiM+Ph56vR5PPvkkvvrqK6SmpuKTTz7B3//+d+s+R48eha+vLwYPHoxt27Zh48aNCAkJQUBAAC5evGjzfvPmzYNOp8OsWbOQlpaGhQsXwtPTE9HR0Tb7lZeXo0+fPujUqRPi4uKwY8cOjBo1Cu7u7khPT2/Ud7nhJy3ll4HkP9SUG6kPAmX5yk/qGRYc9ThyBHjzTeC22+xLDXd3YPBg4N13gUOHlJ8QMoxMYcGhPhw/IiKSncsWHOfOnUPz5s3xl7/8pc79oqKi4Ofnh8LCQuu2nJwceHh44LXXXrNuu3TpEgwGAyZPnmzz+vnz50On0+Hw4cPWbcuWLYMQAhkZGdZtJpMJvXv3xsCBAxv1fW7oSUvFb0Dy7TXlRtojQNmvyk/oGRYctTh3Dli0CLj9dvtSQ6cD7roLiIkBMjMt+yo9EWQYGcOCQ304fkREJDuXLTjmzJkDIQRycnJq3cdkMsHb2xtTpkyx+2/h4eEIDAy0/h0XFwchBPbs2WOzX15eHoQQmD9/vnXb8OHDERwcbPeeCxYsgBAC586dc/r73LCTlkoj8PXAmnLjm9FA2SXlJ/MMC45rXLkCfPop8MADlhLj2mIjJAR49VXgP/9hqcEwNyMsONSH40dERLJz2YLjj3/8I9q0aYOvv/4a/fv3h5ubG9q1a4cpU6ZYr9Y4duwYhBBYtmyZ3etfeeUV6HQ6lJWVAQBmzpwJIQSKi4vt9vXz88PYsWOtf/v7+yMqKspuv61bt0IIge3btzv9fW7ISYupBEgZUlNupD/KckPNccGCo7wc2LQJeOwxyxoa15YaXbsCzz0H7NwJnD2r/ISPYVwpLDjUh+NHRESyc9mCIzg4GAaDAb6+vliwYIF1zQxvb2/ce++9MJvN2L17N4QQSExMtHv91ast8vLyAADR0dHw8vJy+FlBQUEIDw+3/u3h4eHwqpCMjAwIIZCQkFDnsefn5yMrK8smSUlJTXvSUl0JpI6oKTd2hfO2FLXHRQoOsxn47jtg8mSgVSv7UsPPD/jzn4GNG4HTp5Wf5DGMq4YFh/pw/IiISHYuW3AEBgZCCIHY2Fib7R9++CGEEEhJSbEWHGvXrrV7/dWC4/z58wAsBYfBYHD4WUFBQYiIiLD+7eHhgalTp9rtd7XgcFSo/F5MTAyEEA7TJCctZjOQMa6m3NgxBCg9r/wEnnHpguP4ceCtt4Du3e1LjWbNgJEjgdWrgZMnlZ/YMQzDgkONOH5ERCQ7ly04QkNDIYTAjz/+aLP9559/hhAC7777bqNuUSkpKbHbt6lvUbnhV3Dsn11TbiTfwUfBaiUSFhyXLwPLlwN3321fari5WZ6A8v77fKwrw6gxai84MjMzG5Wr/+5rEQsOIiKSncsWHJMnT3ZYcFwtNRYtWmRdZNTR1RYRERE2i4zGx8dDCIG9e/fa7Hf+/KxHmyoAACAASURBVHm7RUbDwsLQs2dPu/eMjY2FEAK5ublOf58m+yF/WV5TbiR1Bwp/UX7izrhUwVFZCSQlAZGRgIeH48VCZ80Cvv+ei4UyjJqj9oJDp9NBr9c7nczMzCb4JspgwUFERLJz2YJj+/btdsUDAHzwwQcQQuC7774DAIwZMwbt27eH0Wi07nP69Gl4enpixowZ1m2XL1+GwWCwK0NiY2PtHhO7fPlyuzLEZDIhJCQEgwYNatT3aZIfMm8HkOBmKTe+8AMu/aD8pJ1xmYLjp5+A6dOBdu3sSw1/f2DSJODrr7lYKMNoJVooON58802sWbOmQfn0009ZcBAREamcyxYcADBy5Eh4eXnh7bffRkpKCmJjY2EwGPDII49Y9zl69Ch8fHwwZMgQJCcnY9OmTejTpw8CAgJw8eJFm/ebN28edDodZs+ejfT0dCxatAheXl6Ijo622a+8vBwhISHo3Lkz4uPjkZKSgsjISLi7uyM9Pb1R3+W6f8jCn4H1rSzlRqIByN2h/ISdkb7guHAB+OADoF8/x+tqjB4NfPYZkJOj/GSNYRjnooWC4/vvv2/w/lVVVdDpdCw4iIiIVMylC47S0lLMmDEDnTt3hru7O7p06YJZs2ah/JqzsX379mHYsGFo1qwZWrRogdGjR+PEiRMO33Px4sUICgqCp6cnunTpgpiYGFRWVtrtd+HCBYwbNw5t2rSBwWBAaGgoUlJSGv1druuHrCgAtgTX3JryywrlJ+uMtAVHRYXlCScjR1rW0fh9qaHTAYMGAe+8Axw+rPwEjWGYxkftBUdSUhKuXLni9GuuPkpei1hwEBGR7Fy64JBJo39IsxlIf7Sm3Nj3V6CiUPnJOiNdwXHoEPDSS5bHuF57tUaXLsCLLwLffst1NRhGlqi94HBFHD8iIpIdCw5JNPqHPLKoptzYFQGU/6b8RJ2RpuAoKAA+/hgYMMC+1PDxAR57DFi7Fjh9WvnJGMMwTRsWHOrD8SMiItmx4JBEo37I/O9qFhX9sgtgzFZ+ks5ovuCorgZ27QKefhowGOyLjQEDLLeg8NGuDCN3tFZwfPnll3j88ccxYMAA9O3b1yb9+vVr8s9TAgsOIiKSHQsOSTj9Q5ZfBjbd8r9FRT2BvJ3KT9AZTRcceXnA/PnArbc6fgrKlClAaipvQWEYV4mWCo6FCxdCp9Ohffv2uOeeezB06FC7yIAFBxERyY4FhySc/iH/82TNrSlZscpPzhlNFhwmE7BlCzBqlP2CoR4eQEQE8OmnwKlTyk+2GIa5udFSwdGtWzc8++yzqKqqatL3VRsWHEREJDtVFhyZmZmNSllZWVMdguY49UNmJ/5u3Y0woPyK8pNzRlMFR3Y28OabwC232F+tcdttwMyZQGam8hMshmGUi5YKDl9fX+zatatJ31ONWHAQEZHsVFlw6HQ66PV6p6PlZ9Nfrwb/kCW5wPpWlnJjQ1vgyhHlJ+aMJgqOykpg0ybLVRk6nW2p4e0NREYCGzYAZ84oP7FiGEb5aKngGDFiBJYuXdqk76lGLDiIiEh2qi043nzzTaxZs6ZB+fTTT1lwNPSH/Paxmqs3TvxL+Uk5o/qC4/Rpy9UaHTvaX63Rpw8wZ47lEbBKT6YYhlFXtFRwHDt2DL169cLmzZtRUaGeJ1E1NRYcREQkO9UWHN9//32D96+qqoJOp2PBUd8PeW5LTbmRPgqoKFR+Us6osuCoqrKsrfHII4Beb1tq+PoCTz5p+e9nzyo/iWIYRp3RUsFRVVWFF198EXq9Hm5ubvD19bVJixYtGv3eRUVFmD59Ojp27AgvLy/0798fiYmJDX59UlIShgwZAl9fXzRr1gy9e/fGypUrG3UsLDiIiEh2qiw4kpKScOXKFadfU1hY2FSHoDn1/pCmYsujYOMFsL4Fb02RMU1QcOTlAXPnAp07O75aY948Pt6VYZiGRUsFx8svvwydToc77rgDTz31FCZMmGCXxgoLC0OrVq2wYsUKpKamYtKkSRBCID4+vt7XxsbGQq/X47nnnsO///1v7Ny5E0uXLsVHH33UqGNhwUFERLJTZcFBzqv3h9z/es3VG4cXKj8ZZ1RTcJjNQHo6MGYM4O5uW2o0awZERQFJSbxag2EY56KlgqNNmzaYOXNmk74nAGzbtg1CCCQkJNhsDwsLQ0BAQJ1Pbdm3bx/0ej3efffdJjseFhxERCQ7FhySqPOHLDkLrDVYyo3k24Hy35SfjDOKFxxGI7BsGRASYn+1Rs+eQEwMcPCg8pMkhmG0GS0VHC1btrwhT1GZNGkSfHx8YDKZbLYnJCRACIHdu3fX+toJEybA29sbpaWlTXY8LDiIiEh2LDgkUecPmTG+5uqNs1uUn4gzihYcWVnAc88BPj62pYanJzByJJ+EwjBM00RLBUdUVBTmz5/fpO8JAKGhoRgwYIDd9qvfo661NG699Vb84Q9/wOeff46goCDo9XrccsstmDFjRqMXQmXBQUREslNlwdG3b98Gp1+/fk31sZpW6w/5234gXmcpN1JHcGFRmVNHwWEyARs3Avffb3+1xi23AC+9BPzwg/ITIoZh5ImWCo6DBw+iV69e+PDDD3H8+HFcvnzZLo0RGBiIiIgIu+15eXkQQmDBggW1vtbLywu+vr5o3bo1li5ditTUVLz++utwc3PDU089Ve9n5+fnIysryyZJSUksOIiISGqqLDjuv/9+DB06tM7cdddd0Ol00Ov1TfWxmlbrD/ntnyzlRoIb8Ose5SfhzE0tOC5dAt55B+jSxbbU0OmA++4DVqwATp1SfiLEMIx80VLBodPprOcUtaUxAgMDMWLECLvtVwuO2NjYWl/r4eEBIYTdE1f++te/QgiB48eP1/nZMTExEEI4DAsOIiKSlSoLjrqYTCYsW7YMHTp0gF6vx5///Oeb8bGq5/CHvHK45taU755QfgLO3LSC48ABYNIkwGCwLTZatADGjQN27QLOnVN+AsQwjLzRUsERExODOXPm1JnGuJ5bVPz9/SGEwG+//Wazffv27RBCYN26dXV+Nq/gICIiV6SpgmP9+vUIDAyEXq9HeHg4fvrppxv9kZrh8IfMGPe/gkMH/LpX+Qk4c0NTVVqATWuvYOj91Xa3ofToYVk09PBh5Sc9DMO4RrRUcNwo0dHRDhcZTUxMrHeR0fDwcIcFx9dffw0hBDZs2OD08Wht/IiIiJyliYIjLS0NAwcOhE6nw5133omdO3feqI/SLLsfsvi05baUeAGkj1R88s3cuBReMuKDRWXo1rXK7jaUBx4A1qwBTp9WfrLDMIxrhQUHkJycDCEE1q5da7N9xIgR9T4mduXKlRBCID4+3mb7tGnToNfrkZOT4/TxaG38iIiInKXqguPgwYN48MEHodfr0aNHD7v7UKmG3Q+5//Wa21PO71J8Es40fbJ/KcLLf62Ar6/Zptjw9TVj3DggNZW3oTAMo1y0VnB8+eWXePzxxzFgwIAmXdA8LCwMrVu3xqpVq5Camoro6GgIIRAXF2fdZ+LEiXBzc7MpLSorK/GHP/wBLVu2xOLFi5GSkoIZM2bAzc0NL7zwQqOOhQUHERHJTpUFx5kzZzBu3Di4u7ujffv2WLJkCSorK5vq7aVk80NWVwIb/S3lRvKdfHKKZMn4thhRj1VCr7ctNrp2qcKbs4zIOlih+MSGYRhGSwXHwoULodPp0L59e9xzzz0OFzdvrKKiIkybNg3+/v7w9PREv3797P6Hzfjx4yGEQHZ2ts32y5cvY8qUKejQoQM8PDwQFBSERYsWobq6ulHHwoKDiIhkp8qCw2AwQK/X46GHHkJ6ejoyMzPrDF3zQ57ZWHP1xrElik/ImeuPqdSI9QmlCB1kexuKEMDAu0xYsbQEp48XIO/UReSeZcHBMIzy0VLB0a1bNzz77LN13jIiAxYcREQkO1UWHFcf11bfI9v4mNgaNj9k6oOWcmN9C6AkV/HJOdP4lFwxYuniMnTvbrtwqIe7GY8+UonNm4pxLtuIvNNG5OWw4GAYRj3RUsHh6+uLXbt2Nel7qhELDiIikp0qC441a9Y4FfrdD/nTbiDB3VJw7P5/ik/Qmcbl17wizHmzHG3b2hYbLVuaMfnZcmR8W2QpNX4fFhwMw6goWio4RowYgaVLlzbpe6oRCw4iIpKdKgsOcp71h/x6Qc3tKac3Kj5RZ5zLyWNFeP4vFfD2tl1fo9Mt1XhjVhmOHDTaFxssOBiGUWG0VHAcO3YMvXr1wubNm1FRUdGk760mLDiIiEh2LDgkYf0h1/zxf7entAbKflV8ws40LJnfF+OJKPuFQ3v3qsI/FpXi1M91FBssOBiGUWG0VHBUVVXhxRdfhF6vh5ubG3x9fW3SokWLJv08pbDgICIi2amy4Ojbty8OHTrU4P2rq6vRt29fHDlypKkOQXOsP+QiT0vB8d0Tik/amfrzbWoJIsJNdguH3nu3CWs+LcGZkw0oNlhwMAyjwmip4Hj55Zeh0+lwxx134KmnnsKECRPsIgMWHEREJDtVFhw6nQ7//e9/G7x/VVUVdDqdSz9RxfpDvvu/21NOfKr45J1xHHOFEclfleC+e22LDXd3Mx55qBJffVmM3Bwnig0WHAzDqDBaKjjatGmDmTNnNul7qhELDiIikp1qC46AgAB07969wdHr9Sw4fl9wXDmm+ESesU1VmREbEktxx+22j3r19DRj7BMV+Da1qHHFBgsOhmFUGC0VHC1btuRTVIiIiCSgyoLD0aWhDcnp06eb6hA0x6bg2NwDqChUfELPWFJZYsSaf5aiZ7BtsdG8uRnPTijH3v84eCIKCw6GYTQeLRUcUVFRmD9/fpO+pxqx4CAiItmpsuAg59kUHP95WvFJPWMpNv65sgzdu9s/6vWF58rx0w9NUGqw4GAYRqXRUsFx8OBB9OrVCx9++CGOHz+Oy5cv20UGLDiIiEh2LDgkYVNwHPlA8cm9K6eyxIhPVpShWzfbYqNdu2q8+rcyHD7QxMUGCw6GYVQYLRUcOp0OOp0Oer2+1siABQcREcmOBYckbAqOc9sUn+S7YiqKjVj1sX2x4d+hGm+9XoafD9+gYoMFB8MwKoyWCo6YmBjMmTOnzsiABQcREcmOBYckbAoO4wnFJ/uulIpiI1YuL0PXrtcUG/6WYuOXG11ssOBgGEaF0VLB4So4fkREJDsWHJKw/pDvt+ACozcpplIjPl1VqnyxwYKDYRgVhgWH+nD8iIhIdiw4fueTTz6BEALNmze3+2+ZmZkYNmwYmjdvjpYtWyIyMhInT550+D5LlixBcHAwPD090a1bN8yZMweVlZV2++Xn52P8+PFo27YtvL29ERoaip07dzbq2K0/5Mc9FZ/4y57qciPWxZciKNC+2Ih5Q4FigwUHwzAqDAsO9eH4ERGR7FRZcBiNRjzzzDPw8/ODt7c37r//fnzzzTdN9fYOnTt3Di1btkRAQIBdwXH06FH4+vpi8ODB2LZtGzZu3IiQkBAEBATg4sWLNvvOmzcPOp0Os2bNQlpaGhYuXAhPT09ER0fb7FdeXo4+ffqgU6dOiIuLw44dOzBq1Ci4u7sjPT3d6eO3/pD/HKh4ASBrzBVGbE0qQf9+to977dDecsXG8SMKFRssOBiGUWHUXnD07dsXhw4davD+1dXV6Nu3L44cOXLdn60UFhxERCQ7VRYcL7zwAnQ6HXr37o3Q0FD4+PjA09OzURP/hnrkkUcwcuRIjB8/3q7giIqKgp+fHwoLC63bcnJy4OHhgddee8267dKlSzAYDJg8ebLN6+fPnw+dTofDhw9bty1btgxCCGRkZFi3mUwm9O7dGwMHDnT6+K0/5JphihcBMiYtpQT33G1bbLRuXY3X/laGY1kKFxssOBiGUWHUXnDodDr897//bfD+VVVV0Ol0yMzMvO7PVgoLDiIikp0qC46uXbvihRdesP598eJF3HPPPRg0aFBTfYSNzz//HL6+vjh79qxdwWEymeDt7Y0pU6bYvS48PByBgYHWv+Pi4iCEwJ49e2z2y8vLgxAC8+fPt24bPnw4goOD7d5zwYIFEELg3LlzTn0H6w8ZN0rxMkCm/LCnGGHDTTbFho+PGS8+X45DP6mg1GDBwTCMSqOFgiMgIADdu3dvcPR6PQsOIiIiFVNlweHm5mZ3S8revXuh1+vx22+/NdXHALCsg9G2bVssW7YMAOwKjmPHjkEIYf3vv/fKK69Ap9OhrKwMADBz5kwIIVBcXGy3r5+fH8aOHWv929/fH1FRUXb7bd26FUIIbN++3anvYf0h1/5Z8VJAhpz6uQhPjqm0KTYMBjOefaYcP/5XBWUGCw6GYVQetRccEyZMaFROnz7dBN9EGSw4iIhIdqosOHQ6Hb7//nubbSUlJdDpdE7dL9sQjz32GO655x6YzWYA9gXH7t27IYRAYmKi3WuvXm2Rl5cHAIiOjoaXl5fDzwkKCkJ4eLj1bw8PD4dXhWRkZEAIgYSEhFqPOT8/H1lZWTZJSkqy/JAbnlG8HNByLp034qXpFfDwMFuLDQ93M556ogJ7vitSvsRgwcEwjEai9oLDFXH8iIhIdqotOJKSkmy23Yh7X7/44gt4enrarI1RW8Gxdu1au9dfLTjOnz8PwFJwGAwGh58VFBSEiIgI698eHh6YOnWq3X5XCw5HhcpVMTExEEI4DAuOxqXMaMTC2DK0bGm2uWrjwYhKpKaovNhgwcEwjArDgkN9OH5ERCQ71RYcer0ePj4+uPvuu/GXv/wFS5cubdJ7X4uKitChQwf87W9/Q0FBgTVjx45F8+bNUVBQgOLi4kbdolJSUmK3b1PeolL3FRwTFS8LtJTqciM+W12KLl1sH/l65x9M2LC2GLk5KiguWHAwDKPBsOBQH44fERHJTpUFR3JyMubNm4c//elP6Nq1K3Q6nTXNmjVDaGgonn/+eaxevRr79+9v1GdkZ2fXehXE1YwaNcq6yKijqy0iIiJsFhmNj4+HEAJ79+612e/8+fN2i4yGhYWhZ8+edu8ZGxsLIQRyc3Od+j7WH3LDs4qXBlpJWkoJ7rjd9skot3avwsdLS3DmpAoKCxYcDMNoOCw41IfjR0REslNlwXGty5cvIyUlBe+88w7GjBmD2267DXq93nqlR2OUlZUhLS3NLhERETAYDEhLS7Ou9zFmzBi0b98eRqPR+vrTp0/D09MTM2bMsDlOg8FgV4bExsbaPSZ2+fLldmWIyWRCSEhIo54Ww4Kj4ck5XoTH/2S7gKifXzX+/lYZTv2sgqKCBQfDMBKEBYf6cPyIiEh2mig4HCksLERqairef//9Jn3fa9fgAICjR4/Cx8cHQ4YMQXJyMjZt2oQ+ffogICAAFy9etNl33rx50Ol0mD17NtLT07Fo0SJ4eXkhOjraZr/y8nKEhISgc+fOiI+PR0pKCiIjI+Hu7o709HSnj5sFR/0pLjDizdnlMBhq1tkwGMx4bmo5Dh9QQUHBgoNhGInCgkN9OH5ERCQ7zRYcN4qjggMA9u3bh2HDhqFZs2Zo0aIFRo8ejRMnTjh8j8WLFyMoKAienp7o0qULYmJiUFlZabffhQsXMG7cOLRp0wYGgwGhoaFISUlp1HGz4Kg95gojEj4rRadOtutsPPRgJb5L18gCoiw4GIbRWLRUcDz88MN466238OWXX2r6MbD1YcFBRESyY8EhCRYcjrNvbzHuvcdkU2z07lWFhM9LtLWAKAsOhmE0Fi0VHAMGDIDBYLDe+urn54fw8HDMnDkT69evr/V/aGgNCw4iIpIdCw5JsOCwzaXzRkyaWAGdruZ2lLZtqvH2nFLkHFdBGcGCg2EYyaOlggOwPI5+//79+PTTT/Hcc88hMDDQWng0dr0vwPLUtunTp6Njx47w8vJC//7963wUfG1ef/11CCEQEhLS6GNhwUFERLJjwSEJFhyWmCuM+Nc/S9G2bc3tKB7uZkwYV4EDP6qghGDBwTCMi0RrBYcjX3zxBbp164ZVq1Y1+j3CwsLQqlUrrFixAqmpqZg0aRKEEIiPj2/we/z000/w8vJChw4dWHAQERHVgQWHJFhwGHF4fzGGDLa9HeW+e0xI+XeRfLejsOBgGEblkaHgACxPPfv9E9OcsW3bNgghkJCQYLM9LCwMAQEBqKqqqvc9TCYTbr/9dkybNg33338/Cw4iIqI6sOCQhCsXHCVXjJj1Wjnc3WtuR2nfrhofvleKs6dUUDyw4GAYxgUjS8GRl5eHW2+9tVGvnTRpEnx8fGAymWy2JyQkQAiB3bt31/seb7/9Nrp06YKioiIWHERERPVgwSEJVy04tm0uQbduNbej6PVm/PmpChyU/XYUFhwMw6g8Wio4nn/+eaxevRr79++3u6ri5MmT8Pb2btT7hoaGYsCAAXbbr36PlStX1vn6w4cPw8vLC9u2bQMAFhxERET1YMEhCVcrOM5lF+GxyEqb21FCelfhyy+KXeN2FBYcDMOoPFoqONq1a2ddUNRgMGDAgAGYMmUK5s6dizvvvBO33357o943MDAQERERdtvz8vIghMCCBQtqfW11dTUGDRqEsWPHWrc5U3Dk5+cjKyvLJklJSSw4iIhIaiw4JOEqBYe5wojVn5SiZcua21F8fMx4Y1YZsn9RQcnAgoNhGAa5udoqOADg9OnT2LhxI2bNmoXhw4ejbdu20Ol06NGjR4NuJXEkMDAQI0aMsNt+teCIjY2t9bWLFi1CmzZtkJ+fb93mTMERExMDIYTDsOAgIiJZseCQhCsUHGdOFmFEhO0iog9GVGLPd0XKlwtqCAsOhmFUFK0VHI5UVlZe1+sbe4vK6dOn4e3tjcWLF6OgoMCae++9F7169UJBQQFKS0vr/GxewUFERK6IBYckZC44zBVG/HNlGVq0qLlqo127aiz/qATnslVQLKglLDgYhlFRZCg4rld0dLTDRUYTExPrXGQ0LS2t1qsvrmb69OlOH4/Wxo+IiMhZLDgkIWvBcfpEEcLDbK/aGDWyEj/9oIJCQW1hwcEwjIrCggNITk6GEAJr16612T5ixIg6HxNbUFCAtLQ0u/Tv3x/dunVDWloajh8/7vTxaG38iIiInMWCQxKyFRzmCiNWLi+Dr6/to19XLONVGyw4GIbRQlhwWISFhaF169ZYtWoVUlNTER0dDSEE4uLirPtMnDgRbm5uyMnJqfO9+BQVIiKiurHgkIRMBcfZU0UYPsz2qo3IURU4kKmCEkHNYcHBMIyKwoLDoqioCNOmTYO/vz88PT3Rr18/JCYm2uwzfvx4CCGQnZ1d53ux4CAiIqobCw5JyFJwbFpfitata67a8O9QjU8+5lUbLDgYhtFaWHCoD8ePiIhkx4JDElovOEquGDElusLmqo3Rj1biwI8qKA60EhYcDMOoKCw41IfjR0REsmPBIQktFxwH9hWjd68qa7Hh62vG+wtLedUGCw6GYTQcFhzqw/EjIiLZseCQhBYLDnOFEUv+UQYvr5pbUu643YRvU4uULwu0GBYcDMOoKCw41IfjR0REsmPBIQmtFRwXc4vw8EM1C4nq9WY8N7Ucp35WQVGg1bDgYBhGRWHBoT4cPyIikh0LDkloqeDY+XUJ/P2rreVGx47VSPisBLk5KigJtBwWHAzDqCgsONSH40dERLJjwSEJLRQc5goj3plfDr2+5paUiLBK7N+ngnJAhrDgYBhGRWHBoT4cPyIikh0LDkmoveAo+s2IqMcqrcWGwWDG23NKceakCooBWcKCg2EYFYUFh/pw/IiISHYsOCSh5oLj+JEi9AmpeUrKLQHV2LypWPlCQLaw4GAYRkVhwaE+HD8iIpIdCw5JqLXgSP6qBK1a1dyScneoCZnfq6AMkDEsOBiGUVFYcKgPx4+IiGTHgkMSais4zBVGzJ9bDp2uptyYOIFPSWHBwTCMq4QFh/pw/IiISHYsOCShpoLDeNmIP42uWW/D29uM9xeW4ly2CkoAmcOCg2EYFYUFh/pw/IiISHYsOCShloLjxNEi9O5Vs95G507V2JLE9TZYcDAM42phwaE+HD8iIpIdCw5JqKHgyPy+GO3bV1vLjXvvNuHH/6pg4u8qYcHBMIyKwoJDfTh+REQkOxYcklC64Nj5dQl8fGrW23hmfAWyf1HBpN+VwoKDYRgVhQWH+nD8iIhIdiw4JKFkwbEuvhQeHpZyQ6czY/aMMq63wYKDYRgXDwsO9eH4ERGR7FhwSEKpguOjD8usT0rxcDfj/XdLkZujgsm+K4YFB8MwKgoLDvXh+BERkexYcEjiZhcc5gojXp9Zbr0lpVkzM1avKmG5wYKDYRgGubksONSI40dERLJjwSGJm1lwmEqNePaZCmu50bZNNTZt4JNSFA8LDoZhVBQWHOrD8SMiItmx4JDEzSo4SguNePSRSpvHwO7aUaT85J5hwcEwjKrCgkN9OH5ERCQ7ly04du3ahWeeeQbBwcFo1qwZAgIC8Oijj2Lfvn12+2ZmZmLYsGFo3rw5WrZsicjISJw8edLh+y5ZsgTBwcHw9PREt27dMGfOHFRWVtrtl5+fj/Hjx6Nt27bw9vZGaGgodu7c2ejvczMKjqLfjLjvXpO13OjVswrf72a5oZqw4GAYRkVhwaE+HD8iIpKdyxYcjz/+OB544AEsX74c6enp2LBhA0JDQ+Hu7o5du3ZZ9zt69Ch8fX0xePBgbNu2DRs3bkRISAgCAgJw8eJFm/ecN28edDodZs2ahbS0NCxcuBCenp6Ijo622a+8vBx9+vRBp06dEBcXhx07dmDUqFFwd3dHenp6o77PjS44youMGPbHmnJj0AATDv6ogkk9w4KDYRhVhgWH+nD8iIhIdi5bcOTn59ttKyoqQocOHTBs2DDrtqioKPj5+aGwsNC6LScnBx4eHnjttdes2y5dugSDwYDJkyfbvOf8+fOh0+lw+PBh67Zly5ZBCIGMjAzrNpPJhN69e2PgwIGN+j43suAwlRoROarmtpTB3Iw7wAAAIABJREFU95nwy2EVTOgZFhwMw6g2LDjUh+NHRESyc9mCozYPPPAAgoKCAFhKB29vb0yZMsVuv/DwcAQGBlr/jouLgxACe/bssdkvLy8PQgjMnz/fum348OEIDg62e88FCxZACIFz5845fdw3quCoLjdiwriacuPOO0w4ekgFk3mGBQfDMKoOCw714fgREZHsWHD8zpUrV6xrbADAsWPHIITAsmXL7PZ95ZVXoNPpUFZWBgCYOXMmhBAoLi6229fPzw9jx461/u3v74+oqCi7/bZu3QohBLZv3+70sd+IgsNcYcRL02ueltIzuAoHeFuKesOCg2EYFYUFh/pw/IiISHYsOH7n6aefhru7u3Wh0d27d0MIgcTERLt9r15tkZeXBwCIjo6Gl5eXw/cNCgpCeHi49W8PDw+HV4VkZGRACIGEhIQ6jzM/Px9ZWVk2SUpKavKC4+055dZyo1vXanyfwQVFVR0WHAzDqCgsONSH40dERLJjwfE/b7zxBoQQ+Oijj6zbrhYca9eutdv/asFx/vx5AJaCw2AwOHzvoKAgREREWP/28PDA1KlT7fa7WnA4KlR+LyYmBkIIh2mqgmPp4jJrueHfoRrfprLcUH1YcDAMo6Kw4FAfjh8REcmOBQeAOXPm2K2TATTuFpWSkhK7fZv6FpUbfQVH3JpSa7nRunU1vt5WrPzknWHBwTCMpsKCw6KoqAjTp09Hx44d4eXlhf79+9f7PzIAYOPGjXjyySfRo0cPGAwGdO3aFU899RR++eWXRh+LFsePiIjIGS5fcFwtN+bMmWP3364uMuroaouIiAibRUbj4+MhhMDevXtt9jt//rxdeRIWFoaePXvavWdsbCyEEMjNzXX6ezTVGhxfbSqBm5sZQgDNm5uxcT3LDc2EBQfDMCoKCw6LsLAwtGrVCitWrEBqaiomTZoEIQTi4+PrfN3AgQPx6KOPYvXq1UhPT8fnn3+OXr16wcfHp9HfX4vjR0RE5AyXLjjmzp0LIQTeeOONWvcZM2YM2rdvD6PRaN12+vRpeHp6YsaMGdZtly9fhsFgsCtDYmNj7R4Tu3z5crsyxGQyISQkBIMGDWrUd2mKguObXSUwGCzlhpeXGZ+tLlF+0s6w4GAYRpNhwQFs27bN4dpaYWFhCAgIQFVVVa2vdfQ4+9zcXHh4eODZZ59t1PFobfyIiIic5bIFx3vvvQchBEaMGIE9e/bY5aqjR4/Cx8cHQ4YMQXJyMjZt2oQ+ffogICAAFy9etHnPefPmQafTYfbs2UhPT8eiRYvg5eWF6Ohom/3Ky8sREhKCzp07Iz4+HikpKYiMjIS7uzvS09Mb9X2ut+C4cLYI7dtXQwjAzc2M5R+x3NBcWHAwDKOisOAAJk2aBB8fH5hMJpvtCQkJEEJg9+7dTr9n9+7dbRYud4bWxo+IiMhZLltw3H///bUu1CmE7VfZt28fhg0bhmbNmqFFixYYPXo0Tpw44fB9Fy9ejKCgIHh6eqJLly6IiYlBZWWl3X4XLlzAuHHj0KZNGxgMBoSGhiIlJaXR3+d6Cg5zhREPPWiyrrsxN6YMuTkqmLAzLDgYhtFsWHAAoaGhGDBggN32q99j5cqVTr3fyZMnodfr8dJLLzXqeLQ2fkRERM5y2YJDNtdTcCz5R80TUx6MqMTZUyqYrDMsOBiG0XRYcACBgYE2T1G7Ki8vD0IILFiwoMHvZTKZMHToULRo0QJnzpypd/86FyTXyPgRERE5iwWHJBpbcBzMLIaXl2XdjYCO1TiQqYKJOsOCg2EYzYcFh6XgGDFihN32qwVHbGxsg97HbDZj3LhxcHNzQ1JSUoNeU+cj5TUyfkRERM5iwSGJxhQcpYVG9AmpghCAXm9G/Gdcd0PTYcHBMIyKwoKjaW5RMZvNmDhxIvR6PT7//PMGfzav4CAiIlfEgkMSjSk4Xny+wnprypTocq67ofWw4GAYRkVhwQFER0c7XGQ0MTGxQYuMXi03dDodVq9efd3Ho7XxIyIichYLDkk4W3Bs21xiLTf6963CqZ9VMEFnWHAwDCNNWHAAycnJEEJg7dq1NttHjBhR72NizWYznn32Weh0OqxatapJjkdr40dEROQsFhyScKbg+P0jYZs1M2PXjiLlJ+cMCw6GYaQKCw6LsLAwtG7dGqtWrUJqaiqio6MhhEBcXJx1n4kTJ8LNzQ05OTnWbS+88AKEEJg4caLdo+x//PHHRh2LFsePiIjIGSw4JNHQguPaR8LGzitVfmLOsOBgGEa6sOCwKCoqwrRp0+Dv7w9PT0/069cPiYmJNvuMHz8eQghkZ2dbt3Xt2rXWRUK7du3aqGPR4vgRERE5gwWHJBpacPCRsBKHBQfDMCoKCw714fgREZHsWHBIoiEFBx8JK3lYcDAMo6Kw4FAfjh8REcmOBYck6is4yox8JKz0YcHBMIyKwoJDfTh+REQkOxYckqiv4Fi5vObWFD4SVtKw4GAYRkVhwaE+HD8iIpIdCw5J1FdwPPyQZWFRP79qnDiqgsk4w4KDYRipw4JDfTh+REQkOxYckqir4Ci5YoTBYFl740+jK5SfiDMsOBiGkT4sONSH40dERLJjwSGJugqOrUkl1ttTli3hY2GlDQsOhmFUFBYc6sPxIyIi2bHgkERdBcfUyRUQAvDwMOPwARVMxBkWHAzDSB8WHOrD8SMiItmx4JBEbQWHucKITp2qIQRwT6hJ+Uk4w4KDYRiXCAsO9eH4ERGR7FhwSKK2gmP/D8XW21Nen1mm/CScYcHBMIxLhAWH+nD8iIhIdiw4JFFbwTF/brm14EjbWaT8JJxhwcEwjEuEBYf6cPyIiEh2LDgkUVvBcXdoFYQAetxahXPZKpiEMyw4GIZxibDgUB+OHxERyY4FhyQcFRwXc4ug01keD/vMeD4eVvqw4GAYRkVhwaE+HD8iIpIdCw5JOCo4/u/TUuvtKfGflfx/9u49Lso6////ewABBVTyhGTaYdGUUj/talSb5irC7n7WdD/alttXCiHbDmptdrKVKVPSDqulplbapoBFBq1KqYmUmaZhtuqWVmIHNXLNiuwgyvP3Bz+GnUBhYHDeMzzut9vrDy/nuubN63K8XvNkDr5/Ak4RcFAU1WyKgMM+9A8AEOgIOAJEbQHHVSOPyRipdVSF9u624Ak4RcBBUVSzKQIO+9A/AECgI+AIED8POI4d/VatW1e+PeW3ycd8/+SbIuCgKKpZFQGHfegfACDQEXAEiJ8HHIVrjrrenvLwQ9/7/sk3RcBBUVSzKgIO+9A/AECgI+AIED8POG6f+JOMkYKCKrRtiwVPvikCDoqimlURcNiH/gEAAh0BR4D4ecDRPe6EjJEu6luu/fssePJNEXBQFNWsioDDPvQPABDoCDgCxH8HHHt2lbnennL7hB99/8SbIuCgKKrZFQGHfegfACDQEXAEiP8OOP7+yA+ugKNgxXe+f+JNEXBQFNXsioDDPvQPABDoCDgCxH8HHIN/Uy5jpNjOJ/TZXgueeFMEHBRFNbsi4LAP/QMABDoCjgBRdSKLs8YqJKTy62Gv+dNPvn/STRFwUBTVLIuAwz70DwAQ6Ag4AkTVicyfcYPr7SlPLzjq+yfdFAEHRVHNsgg47EP/AACBjoAjQFSdyL/fdKOMkVqGV2j3LguedFMEHBRFNcsi4LAP/QMABDoCjgBRdSIn/v5mGSNdMfCY759wUwQcFEU12yLgsA/9AwAEOgKOAFF1Im8dOlYhwcf0QMYPvn/CTRFwUBTVbIuAwz70DwAQ6Ag4fKisrEwTJkxQ586dFRYWpj59+ignJ6dBx3KdyBlGB+bGKH/qFH2y57Dvn3RTBBwURTXLIuCo1JhrfWlpqVJSUtSuXTu1bNlSCQkJeu211xq8Fn/sHwAAniDg8KHExES1bdtW8+fPV2FhodLS0mSMUVZWlsfH+u+A48RSh5RltCnzd4QczakIOCiKsqgIOCo19Fr/448/6oILLlCXLl20dOlSrVmzRldeeaVCQkJUVFTUoLX4Y/8AAPAEAYePrFq1SsYYZWdnu21PTExUbGysjh8/7tHx/jvgUFZ1vfpwhu+feFMEHBRFNbsi4GjctX7u3Lkyxuitt95ybSsvL1evXr3Uv3//Bq3H3/oHAICnCDh8JC0tTZGRkSovL3fbnp2dLWOMNm7c6NHxags4Tix16IsnY3gVR3MpAg6KoiwqAo7GXeuHDBmiHj161Ng+ffp0GWP0+eefe7wef+sfAACeIuDwkYSEBPXr16/G9qoTsmDBAo+Od7JXcCjLqCjnFd8/+aYIOCiKalZFwNG4a31MTIxGjRpVY/vKlStljNHq1as9Xo+3+/f+c8/pX/PmURRFUVT9a+7cWuunb77xyrWJgMNH4uLilJSUVGP7gQMHZIzR9OnTT7pvaWmpdu7c6VYvvPCCjDHKv60y5Pjvmjc5U6te2kAFfL2ulS+9oX++/K7++c+dFEVRPq28vJ0qKNipbdt21rhmNbTy8/NljFFxcXFTXqK9pjHX+hYtWmjcuHE1tr/11lu1vu3l5045K+Tne+V8/LpDB50bHk5RFEVRja4//fGP1s0KBBweiIuLU3Jyco3tVUNPZmbmSffNyMiQMYaiKIqimmXl5+c35SXaaxpzrW/RooVuvPHGGturAo66vomFWYGiKIpqzuWNWYGAwwONedlqbb+VWbp0qYwxeuGFF7z2m7LmXlXpn7d+09Xci37ST9uLntrfz+LiYuXn5+vIkSNNeYn2Gl++RaW2WeGtt97Ss88+q+LiYmvPMcU5CbTinNhVnA/7ytvnxJuzAgGHB9LT02v94LGcnBwZ04gPGd3pH+9L9gf01Lvop3fRT++jp95FPxt3rU9MTNT5559fY3tmZqaMMdq/f7/X1+spzrF9OCf24ZzYhfNhH5vPCQGHBwoKCmSM0bJly9y2JycnN+5rYi38h+Gv6Kl30U/vop/eR0+9i3427lo/b948GWO0efNm17by8nLFx8fr4osvbrI1e4JzbB/OiX04J3bhfNjH5nNCwOGhxMRERUdHa+HChSosLFR6erqMMVq6dKnHx7L5H4a/oqfeRT+9i356Hz31LvpZqT7X+tTUVAUHB2vfvn2ubT/++KPi4+N11llnKSsrS2vXrtWIESMUEhKioqIiX/woNXCO7cM5sQ/nxC6cD/vYfE4IODxUVlam8ePHKyYmRqGhoerdu3edHxp2Mjb/w/BX9NS76Kd30U/vo6feRT8r1edan5KSImOMSkpK3LZ/8cUXGjNmjM444wyFh4crISFBa9euPY2rPzXOsX04J/bhnNiF82Efm88JAYcPlZaWKiMjQ6Wlpb5eSsCgp95FP72LfnofPfUu+hn4OMf24ZzYh3NiF86HfWw+JwQcAAAAAADA7xFwAAAAAAAAv0fAAQAAAAAA/B4BBwAAAAAA8HsEHE2grKxMEyZMUOfOnRUWFqY+ffrU+5tWSktLlZKSonbt2qlly5ZKSEjQa6+91sQrtltD+7l8+XJdffXVOu+88xQeHq5u3bpp9OjR2rNnz2lYtd0a82/0v02ePFnGGMXHxzfBKv1HY/uZn5+vAQMGKCoqSq1atVKvXr20YMGCJlyx3RrTz8LCQg0ZMkQdOnRQRESELrzwQs2ePVvHjx9v4lXb7dtvv9WkSZOUmJio9u3byxijjIyMeu/Ptcm/rFu3Ttdff7169OihVq1aKTY2VsOGDdM777xT6+2Li4s1ePBgRUREqE2bNhoxYoQ+/vjjWm/7+OOPq0ePHgoNDdXZZ58tp9OpY8eONeWPExA8eQxWfUPPz6tHjx613p5z4jlP/0/kMeIb69evr/WxYIzRpk2batzek/OEhvHWc4imRMDRBBITE9W2bVvNnz9fhYWFSktLkzFGWVlZp9zvxx9/1AUXXKAuXbpo6dKlWrNmja688kqFhISoqKjoNK3ePg3tZ//+/TVs2DAtWrRIRUVFWrJkiXr27KnIyEgrv9LodGpoT//bu+++q7CwMHXq1KnZBxyN6WdmZqaCgoJ000036ZVXXtFrr72mOXPm6IknnjgNK7dTQ/u5du1aBQUF6YorrlB+fr7Wrl2rW2+9VcYYjR8//jSt3k4lJSVq06aNBgwY4OpnfQMOrk3+Z+TIkRo0aJDmzZunoqIi5ebmKiEhQSEhIVq3bp3bbd9//31FRUXp8ssv16pVq7R8+XLFx8crNjZWX375pdttH3zwQTkcDt1zzz1av369Zs6cqdDQUKWnp5/OH88vefIYTElJUcuWLbVp0ya32r59e43bck4axpPzwWPEd6oCjunTp9d4PJSVlbnd1pPzhIbzxnOIpkbA4WWrVq2SMUbZ2dlu2xMTExUbG3vK3yLOnTtXxhi99dZbrm3l5eXq1auX+vfv32Rrtllj+lnb1xbt379fLVq00NixY72+Vn/RmJ5WKS8vV9++fTV+/HgNHDiwWQccjennO++8o6CgIM2YMaOpl+k3GtPPP//5zwoLC9N3333ntn3o0KFq3bp1k6zXX1RUVKiiokKSdOjQIY8CDq5N/qe2619ZWZk6deqkwYMHu20fNWqU2rdvr2+++ca1bd++fWrRooXuvPNO17b//Oc/Cg8P1w033OC2/7Rp0+RwOLRr1y4v/xSBxZPHYEpKiiIiIuo8Juek4Tw5HzxGfKcq4MjNza3ztvU9T2g4bzyHOB0IOLwsLS1NkZGRKi8vd9uenZ0tY4w2btx40n2HDBlS68sPp0+fLmOMPv/8c6+v13aN6efJnHPOORo6dKi3luh3vNHTqVOnqmvXriorK2v2AUdj+nndddepZcuW+v7775t6mX6jsf2MiorSiRMn3LZfddVV6tixY5Os1x95GnBwbQocgwYNUvfu3V1/Li8vV8uWLTVu3Lgatx06dKji4uJcf166dGmtLws/cOCAjDGaNm1a0y08wHgr4OCceMepzgePEd+qb8DhyXlCwzXF87KmQMDhZQkJCerXr1+N7Tt37pQx5pTvq4+JidGoUaNqbF+5cqWMMVq9erVX1+oPGtPP2nz88ccKCgrSbbfd5q0l+p3G9nTXrl0KCwvTqlWrJKnZBxyN6ee5556riy66SEuWLFH37t0VFBSkM888U3fddZd++umnply2tRrTz82bNyssLEw333yz9u/fryNHjui5555TixYt9MgjjzTlsv2KpwEH16bA8PXXX7vek17lgw8+kDFGc+fOrXH7O+64Qw6HQz/88IMk6e6775YxpsYrpCSpffv2uuaaa5pu8QGmPgFHUFCQOnXq5Lou3HzzzTp8+LDb7Tgn3nGq88FjxLeqAo6OHTsqODhYUVFRGjp0qDZs2OB2O0/OExrO28/LmgoBh5fFxcUpKSmpxvaq9Hb69Okn3bdFixa1Jo9vvfVWrS8Hag4a08+fKy8v1xVXXKHWrVvr008/9eYy/UpjenrixAldfPHFbhfp5h5wNKafYWFhioqKUnR0tObMmaPCwkJNnjxZwcHBGj16dFMu21qNfcxv3LhRsbGxrg8hCw4O1syZM5tquX7J04CDa1Ng+POf/6yQkBC3DxrduHGjjDG1fkBc1St0Dhw4IElKT09XWFhYrcfu3r17s35lpKfqegw+9thjeuyxx7RmzRqtWbNGkydPVqtWrXT++ee7fe4A58Q7TnU+eIz41rZt2zRhwgTl5eXpjTfe0KJFi9SzZ08FBwfr1Vdfdd3Ok/OEhvPm87KmRMDhZXFxcUpOTq6xverEZ2ZmnnTfFi1a6MYbb6yxvWqItO0Tak+HxvTzv1VUVGjMmDEKDg5Wfn6+t5fpVxrT04cfflhnnHGG2/u7CTga95iv7bE9ceJEGWP04Ycfen29tmtMP9955x117NhRf/jDH7RixQoVFhbqvvvuU2hoqB544IGmXLZfaUjAwbXJd071LQI/r3fffbfWY9x3330yxtT48OKqJwXLli2rsU/Vk4KDBw9KqnzyFh4eXuvxu3fvXuvQG6gae048fQxK0osvvihjjB577DHXNs5JpaY8HzxGvMcb/5dJ0pEjR9SlSxf17t3btc2T84SG89bzsqZGwOFlvEXFu7zxUqiKigqlpqYqKChIS5YsaYpl+pWG9vSTTz5Ry5YtNXv2bB05csRVl112mXr27KkjR440y8+SaOxj3hijr776ym376tWrZYzR888/7/X12q4x/bz44ot14YUX1viQqylTpigoKIivivv/8RYV/3LgwAE99dRT9aqfv4VBkpxO50nf/9+Ql98fPXq0xm2b28vvG3tOGhJwnDhxQhEREbrqqqtc2zgnlZryfPAY8Z7Gnqf/duONN8oY45o7eYvK6cFbVJqp9PT0Wj98JScnp84PX0lMTNT5559fY3tmZqaMMdq/f7/X12u7xvRTqg43HA6HFi1a1JRL9RsN7Wl9kvcJEyacjh/BKo35Nzp06NBaA45XX31VxtTvU8MDTWP6GRYWpuuuu67G9hUrVsgYo5UrV3p9vf7I0ydXXJv8V1W44XQ6a/37qg/mq+0VOklJSW4fzJeVlSVjjDZv3ux2u4MHD540QEHtGhpwtGrVSldffbVrG+fEO+rzIaM8Ruwybtw4GWNcoYUn5wkN19jnZacLAYeXFRQU1PoSqeTk5Dq/PmfevHk1/mMsLy9XfHy8Lr744iZbs80a08+KigqNHTtWDodDCxcubOql+o2G9vTIkSNav359jerTp4/OPvtsrV+/vlm+paIx/0YXLFggY2p+d/j48eMVFBSkffv2NcmabdaYfp5zzjm64IILatzm3nvvlTFG27dvb5I1+xtPn1xxbfJPDzzwgIwxuu+++055u6pvGfr2229d2z755BOFhobqrrvucm07fPiwwsPDazyByMzM5CswPdSQgOP555+XMUazZs1ybeOceEdd54PHiF2++uornXnmmerbt6/b9vqeJzRcY2a004mAowkkJiYqOjpaCxcuVGFhodLT02WM0dKlS123SU1NVXBwsNsTmB9//FHx8fE666yzlJWVpbVr12rEiBEKCQlRUVGRL34UKzS0n7fccouMMUpNTdWmTZvcatu2bb74UazR0J7Wprl/BofU8H4eO3ZMF110kdq0aaPZs2dr7dq1uuuuuxQcHKxbbrnFFz+KFRraz8cff1zGGP32t79Vfn6+1qxZo7vuukshISEaMmSIL34UqxQUFCg3N1eLFi2SMUajRo1Sbm6ucnNzXS+p5toUGB555BEZY5ScnFzj+vfzr7B8//33FRkZqQEDBqigoEAvvfSSLrjgAsXGxurLL790u+2DDz4oh8Ohe++9V0VF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\" width=\"900\">" - ], - "text/plain": [ - "<IPython.core.display.HTML object>" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "5147d52eb00c46cc85f60ecc8cd3331b", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "VBox(children=(HBox(children=(FloatSlider(value=1e-05, description='\\\\(t\\\\)', max=1.0, min=1e-05, step=0.05), …" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "po.interact_fields()" ] @@ -5068,803 +1355,13 @@ }, { "cell_type": "code", - "execution_count": 79, + "execution_count": null, "metadata": { "slideshow": { "slide_type": "slide" } }, - "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 / mpl.ratio, fig.canvas.height / mpl.ratio);\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\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\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", - " // select the cell after this one\n", - " var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n", - " IPython.notebook.select(index + 1);\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=\"700\">" - ], - "text/plain": [ - "<IPython.core.display.HTML object>" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "get_Pw_pull_args = sp.lambdify((w, A_f, E_f, tau, p, L_b), Pw_pull)\n", "ds16 = 16 \n", @@ -5881,6 +1378,13 @@ "fig.legend(loc=9);" ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, { "cell_type": "code", "execution_count": null, @@ -5891,9 +1395,9 @@ ], "metadata": { "kernelspec": { - "name": "base", + "display_name": "bmcs_env", "language": "python", - "display_name": "base" + "name": "bmcs_env" }, "language_info": { "codemirror_mode": { @@ -5904,8 +1408,7 @@ "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.9.0" + "pygments_lexer": "ipython3" }, "toc": { "base_numbering": 1, @@ -5928,4 +1431,4 @@ }, "nbformat": 4, "nbformat_minor": 4 -} \ No newline at end of file +} diff --git a/environment.yml b/environment.yml index 689623e..487790a 100644 --- a/environment.yml +++ b/environment.yml @@ -9,6 +9,7 @@ dependencies: - numpy - sympy - scipy +- k3d - ipywidgets - traitsui - pip -- GitLab