{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "# Example 2.2: Pull-out from elastic matrix"
   ]
  },
  {
   "attachments": {
    "image.png": {
     "image/png": "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"
    }
   },
   "cell_type": "markdown",
   "metadata": {
    "hide_input": true,
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## Observation\n",
    "Let us try to utilize the depicted idealization for the derivation of a model that can help us simulate the test results of the RILEM pull-out test\n",
    "![image.png](attachment:image.png)"
   ]
  },
  {
   "attachments": {
    "image.png": {
     "image/png": "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"
    }
   },
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "## Idealization of the pull-out problem\n",
    "This notebook explains the derivation of the pullout model and provides also its executable form.\n",
    "The one-dimensional idealization of the pull-out is introduced in the figure\n",
    "\n",
    "![image.png](attachment:image.png)\n",
    "\n",
    "**Remark**: The origin of the coordinate system is placed at the transition between the bond zone and free zone of the fiber. The domain in the bond zone is defined as $x \\in (-L_\\mathrm{b},0)$. As a result, in the bond domain $x < 0$."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "The meaning of the variables defining the idealization is summarized in the table"
   ]
  },
  {
   "attachments": {
    "image.png": {
     "image/png": "iVBORw0KGgoAAAANSUhEUgAAAsYAAADaCAYAAACl44R8AAAABHNCSVQICAgIfAhkiAAAIABJREFUeF7s3QeYbUWVPvwNJtJIGJAgSYIEyUmQOAQlCBJEcpKMEgQBEYFLUMk5m8gSBdEBJUsUJAiIaXAGBXVmdFAUFdP451ffV2fq7rv3PrG7T3fXep773D471K56a1XVu1atqpruH69LkSUjkBHICGQEMgIZgYxARiAjMMkRmH6Slz8XPyOQEcgIZAQyAhmBjEBGICMQEHhjxGG66abLkGQEMgIZgYxARiAjkBHICGQEJiUCgiiyx3hSVn0udEYgI5ARyAhkBDICGYGMQBmBlsf4d7/7Xfle/p0RyAhkBDICGYGMQEYgI5ARmDQIZI/xpKnqXNCMQEYgI5ARyAhkBDICGYEmBDIxbkIn38sIZAQyAhmBjEBGICOQEZg0CGRiPGmqOhc0I5ARyAhkBDICGYGMQEagCYFWjHHTQ3X3Xn311aKT2OS3ve1txRvf2Nen6rIwIa//5Cc/Kf7yl7+Esv3zP/9zAb86+eMf/1j89Kc/bd1edNFFC9d++ctfVr4iLWlOZqG3//mf/1m85S1vCTDAesYZZyzmm2++FiyuwdUzVqm++c1vLuadd96hg00+H3zwwWKdddYZV23slVdeKX7wgx8UL7/8crHqqqsWc801V8fY/s///E/x4x//OLy79tprF29961s7fnc0HvzXf/3XQh6XXXbZYsUVVxyNT+ZvZAQyAhmBjMCAEOjLY/y9732vuPTSS4sll1yy2G677Yobb7yxuOWWW4qbb765uOqqq4pPfvKTxdJLL11885vfHFB2J0cyTz/9dPG5z32uWH/99Yv11luv+N///d/agl988cXFu9/97uKwww4r7rvvvuJPf/pT8etf/zpgvuOOO4Z7X//614vvfOc7xQMPPFCcdNJJgUxcdtlltWlO9Bu//e1vAyYf+tCHine9613FwQcfHEhaKq+99lrx6U9/ulhuueWKz3zmMwVdH0a54YYbii233LL4/Oc/P4zZq80TUvvVr3612H777Ysf/ehHtc9V3fjv//7v4stf/nKxww47BANnmORjH/tY8bOf/SwYn+9///uLP//5z8OUvZyXjEBGICOQEWiDwHTx5Lvf//73bR6tvv3973+/WH311YsvfelLxTbbbDPNQx//+MfD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JwSi8ba3va0WuPe///219ybyjT//+c9BB+okH9teh8zgr//jH/8opptuusEnPKQpvvDCC8XNN988pLnL2coIZAQmOgLTusl6KLEpaSTK4q2f/exnIYUcStEDkEPwyi9+8YvikksuKa6//voQSmARmtCCiSb33ntv8ac//alYZZVVGou2xRZbFH/4wx/CM3bp4CndY489ire+9a3Fd77znWKuueYqDjvssHBfKJFp7wUXXDB4Wi3cE4vriEliwdiPf/zjYrbZZgux3PJw6KGHFiussELjvfByhTSl5/FvfvObxcMPP1wssMACIU56++23L1ZbbbVWSs8++2yo63e+852FHUlmnHHGYv/99y9cP/7444vvfve7xVVXXVU88sgjBSJ85JFHhmum85XNDiapbtAZ+gMbhrFvRa+yvIrlhtFtt91WfO1rXwv5kJ7Y2XXXXbeVr/vuu6/43ve+F/RPuMb6669fbLrpphUIdHZJrDiiL1zoySefDGEYSy65ZOvldvX6/PPPB5yWWWaZQnw1j+1uu+3Wer9d+k255BmFxfzzzx/0cfrppy/222+/QIRhJabYN6+77rpQL3CwKLZOhB+cdNJJQQeV95VXXgmzeFEHm3RUnR144IGhDqdMmRIw+/Wvf1385Cc/CSFW8pVKnf7A64gjjggx6Oedd17xxBNPBNy32mqrYuONNw5J1Omm2H7x43bGYbjSyZVXXrnYdtttw3uMhPPPP78w5pjlkTffmmeeeabKW/6REcgIZAR6RWAgxPjKK68sdt5555AH0++kymOsU/v5z39ezDfffGEAyDJcCDBmLJ781Kc+FQZFswCvvvrqhCTGCC5BbJskjbmm5wb3e+65p/j4xz8edgcQU48YIyTCTpDDhRdeOCT59NNPFxtttFGB6NF9O14gBFEQEItUEaK6e3V5a/cOQxWpQr4RCPlbY401wm9lQlaQDcQZqXj55ZcDaUGolOPGG28M5FG7/sAHPtDKBhKPmJgdShfYIjNIF/JLEBfkEYHeaaedApnz3RVXXDEY0dIVtnP33XcXe++9dyDu8slgOOiggwpY2xlFOX1T7Peaa65ZB0ftdeW97LLLggdSGsi6nVfUDQOFNNUr76UQI3XOwCB+S0t8eifp12XugQceCPUOjxjCJLzHgk/eerp58sknF0JazFzss88+dUmF67BjYKh3ZSSM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bb311mHBWpQmnMvfjL9PPfXUcIiRUBqhYQ8++GBoy5/73OfC4s+mNI855phw3LgY+Rju0Qnmvn3SSSeFenUqKXzoiqntdri2y28/uliV905nyZSpThfFy2oz9M7MGkeK9sgY00/ut99+oTp61cX77ruvEDM788wzh7pbf/31i0033TRWce3/QrL0DQsuuGBoZ07hMwMqvIVU4VFuPzFx7ZajabbZZgvlW2CBBcL/d911VzhxtkoGpffItzhdfQSdhSvnzTzzzFP12Wmu0UN9h7UbMDFDN+ecc071nPamP3WmAUeFNq/etEV9s7rzrvUhniP6q3IbdV1ayi4t6cw999zT5KnqglhxfY7wKmXzrplb/WGMlW7Xfqr625inI488slhooYVan67T56q85WuDR6AnYqwhvvjiiyE3+++/fytXBlnTluutt17bnEqjjsw6015D0cjEAHmW0iEkQglSWWONNYLntC6tthkZ4gfiQB+zaIBHPlJBcP74xz9OU4p+3p0msUl8QSeNsNA/gx/StfzyywfSQnSYjBWkIUqMP95ss83CdDUCdeONNwZCQgwE4potyNloo41a75X/MDgifNtvv324xYONxOlEoyCidCISPwR83333DbH7iIoFVgaqLbbYIrzy6U9/OhyDe8YZZ4TBBRE899xzA8kSD0kQCMTfd/fcc89wTRq+YcEi4W2SthkLAzHxG1ndcsstw6DPiDBArbnmmmHWgwgNYkj4lnIYWDx78sknh/vtxECMtEo7GtZWlcNavCSSByeEQ6hBu3SFT9ixYoUVViiOPfbY2hks9QcDhF555f/73/9+IAPtcK4rk/S8j8Tr26yMpxMG+bnmmqux7tQFEpEu1uwEc3kxkDOu5D/i0wmuTflVj/3oYlPefZcuRqNLn4+gqGfSThevu+668Pydd94ZCCcCgmDFtskw6UUX9QHaCX3WJ0iTHmkDdL5OGGz09frrry8WXnjh8BhjVF+AaNOxJjxi+/GeMjGSzCaqU+1b/yO+ftVVV63LQggb6lfvJW58RlBPO+208C1EVfu3mLndjA3yZ8Yj9jEWgdqlAqGPhFUbVqZbbrkl4EK0EfWoL1pnnXWCgcPJ4BkGpufuvvvuqdqo9xBiuHI26MuJvrAT+dGPfhQMnl122SU8bsMAOhOJeCftp6m/VYd4D2mnz53kNz/THwJdh1Jo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AhNFpRBtQtB22bZEn7j88ssLC2pQIDDXEZCY4Nhjj02JD7bbbruUVEAElLlKYhVLuCFtsWQUM0m+4xNPPLEQg9z7qtnlurx3pnmVIliSDqHURslQ14X3UZ4hEEsaIamIOL5BgUAgEAgEAvMfgYmjUkh7u8kmmxSf//zni5122mn+IxItWDQI5IQIBx100ERxtmcCMBnBqul68ztkL5QOuS3j5KT8yMQmk9tGG22UslQSkPldDaKlwatMhOutt15BSB6WZGgQ39N1XXZImwlZ+oICgUAgEAgE5i8C1rqJXCk0PWuvcpri+QvH3OFcOlcbDulRX/GKV6RUqzI3ycJ1xBFHpLTBtPXSnPonq3c2J09Sdu4gMDuc5JS5bWmXZ4eTqW/Rz7LVNdFsRGi5++67U5Y8GdRojNtoafE6Gzi0tbt6b2m5cnTlL54LBAKBQCAQ6I7ARK4UXkMwXmONNQpak6DpQYC2jp/2j3/84+Lhhx8udt9990L2v9tuu62g3STQ7brrrin5APP6F7/4xf6LJyk7PdxHLeMgIG5uJvG+lzblTcMwPuYCr8N4jPuBQCAQCAQCgUBXBCbSGPd6veL73/9+se2223Z9XzzXEQFb6UDBAAAgAElEQVTxm7/xjW8UTOeZpK6lPT755JP71xzEol2u0iRlO7K36B6jsT/mmGPSoTeHrh544IHikEMOSQdPm7T0nqFNlT2tmpxGX11wwQXFKquskrTC3AH4yV5yySXFueeeWxx99NHFFVdcUay22mrFhz70oYTzwQcfXCy//PJTMP/yl7+crAi0u/p777337tQnzgB87WtfS/HEbbpohZUlCN96663FV77ylVTPJz7xieSi8J73vKcx9riY5Iceeui08HrNNdcUN998czrod9dddyWfXW4cXYhvrw2kdvz2t78ttt9++4RplRwStmF8xjOeUTzyyCOFw3v7779/3z1klP67//77i9NPP71YccUVi+WWW26kw5pcY2C+5pprFssuu2yK6/6jH/0oWYFcQ5dddlkaN0984hPT+IADqxG68cYb0xjUnquuuir1I9J+7a5a7drGayoUFAgEAoFAINCIwESCsUXMAZSq8Nb4lrg4FgKrr776lHJMtgSmKhHMmg4gTVJ2LGYXcCHa3Ne85jVJW++QKSLAysp4/PHHJ6Frzz33TALKZpttljT8iEBDCOYT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jZb/D3/4Q/GFL3yhePazn13ceOONxTHHHFMwI1511VXpW0KsBCwu6rz00kuTFoR1YOeddy423njjPh+sB8qri+DuHYccckji13VuG3x6uYUg2u/nP//56e+2svyq77nnnvR9S6/8ox/9KJkoh7k9aIcN2TOe8YyUMERb+VRznUBHHXVUcf311xd//etfE09rrrlm6xzBx5EpUF34+POf/1xwfVEO/fvf/y5OOumklJAERvfee29yz1h99dXT/dNPP7244oorihVWWKGwSEhLj2jsDj744HS48qtf/Wp6B+z49doIwQhWyDynH81pfMOXWWaZ5Ivu4GCmNj6H9UO/kgF/wItvOh9M+FI6rLTSSv2nbTSMOQf1zL02QjbN0ngPapu55Mgjj0yHTpXnPmT80S75zULFusFC8ve//z29ix++zfmg8eaZtjHVZMEyZmm14C799TBiFTOGjC/4K4/HPL70q2/IQTG8GhN777132ohpm37zPpa1f/7zn8Wf/vSnhJd50nNVMr+eccYZhXkVTsbFPvvs0/qNr7baagm/Ufsjj7W2sm3YWGv5pXP7MnewSrHiZuryHeRnjbPTTjsttcM3r93+7kLD5o1B8+ZDDz2UlGu//e1vk+IHHl37y/yc/Z+5U5gLnFswBobNR8P4HTbeBrVnEO/m1Kc85SlprFFiGaOs7GussUZScGVqGweD1gzKM2uUw8zm10MPPTTNfcZknv/NeZNuPrqMgwX1TNkZicoFYqR/pdtEr1xY+mXKwdgrJ6Te5z73uZHqGfW9i+X5973vfb1y0zEFy3Ih673xjW+ccq0UGHp77LHHlGuTlF0s+GpnKfCY+XvlItsrXYN6pVmud9NNN/VKgbZXaux75STWx7V0H+qtv/76vVJIS9dKwalXCiG90oUo/b7uuut6pW9er9y09MoJKpUv3TDSvXLRSu8pNf79+srFPF074YQTeqXVJV0vBbFeKcz1SqGvVy7e6dpFF13Ue9azntUrhYH02/vXW2+93oUXXtivq5z4envttVf/d7lA98pNa/937tMuZbfccste6VqQcCiF3d6GG264RD25voxDKbD2ygN1/eeULd0l+u3y3Ic//OFUb7XsoL+32WabXilY9581z5S+yek3HEoBoI+ta+XC0yutWL3y8GS/jH4oF55e6b/Yv1ZaWHrbbrtt/3e5qKQ+0Jd1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"
    }
   },
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "![image.png](attachment:image.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "The pull-out test is controlled by the displacement at the end of the fiber $w$. \n",
    "\n",
    "The force $P$ is measured to obtain the pull-out curve $P(w)$"
   ]
  },
  {
   "attachments": {
    "image.png": {
     "image/png": "iVBORw0KGgoAAAANSUhEUgAAAawAAAB9CAYAAAD+3VeSAAAABHNCSVQICAgIfAhkiAAAG9xJREFUeF7tnQvYFdP+x3/RTRddVZTiJBHquEZEOjkq93sJHY9DOkdED7kU53E5yJHLIYTINSSXlLs4JEQuXSiUW0iUVJJb/z7rnNn//e535n1n7z2z373n/f6e533YM2vWrPnMNN9Zv/Vbv1Vj3XozmQiIgAiIgAgUOYENirx9ap4IiIAIiIAIOAISLD0IIiACIiACJUFAglUSt0mNFAEREAERkGDpGRABERABESgJAhKskrhNaqQIiIAIiIAES8+ACIiACIhASRCQYJXEbVIjRUAEREAEJFh6BkRABERABEqCgASrJG6TGikCIiACIiDB0jMgAiIgAiJQEgQkWCVxm9RIERABERCBmnEjmD9/vl111VVWp06duE+l+kVABKqYQOPGje2yyy6r4lbo9EklUCPu5Ldjx461QYMG2ZAhQ5LKUNclAiLwPwL//ve/Tfm09TjERSD2HhYN7927tw0cODCua1C9IiACRUIAwZKJQFwENIYVF1nVKwIiIAIiECkBCVakOFWZCIiACIhAXAQkWHGRVb0iIAIiIAKREpBgRYpTlYmACIiACMRFQIIVF1nVKwIiIAIiECkBCVakOFWZCIiACIhAXAQkWHGRVb0iIAIiIAKREpBgRYpTlYmACIiACMRFQIIVF1nVKwIiIAIiECkBCVakOFWZCIiACIhAXAQkWHGRVb0iIAIiIAKREpBgRYpTlYmACIiACMRFQIIVF1nVKwIiIAIiECkBCVakOFWZCIiACIhAXAQkWHGRVb0iIAIiIAKREpBgRYpTlYmACIiACMRFQIIVF1nVKwIiIAIiECkBCVakOFWZCIiACIhAXAQkWHGRVb0iIAIiIAKREpBgRYpTlYmACIiACMRFQIIVF1nVmxOBt956K6fjdJAIiEDyCdRM/iXqCisicPXVV9vSpUsrKpLat//++9u+++4bqmwuhd58800bPHiwTZ8+3WrXrp1LFTpGBEQgwQQkWAm+uWEubdiwYfbpp5/aEUccYV27drXrrrvOatb8/8fixx9/tHnz5tmFF15o2223XZgqcyrz66+/2qhRo2zdunVOQFu3bp1TPTpIBEQguQTkEkzuvQ19ZQsWLHBlu3fvXkas2FavXj3bZZddrF+/frbZZpuFrjPbgg888IA1aNDAHfbdd99le7jKi4AIVAMCEqxqcJMru0Rv3AhhCrJmzZrZpptuGrQ7r+3ffPONLVmyxHr06OHq+fbbb/OqTweLgAgkk4AEK5n3NaurmjVrljVu3Njat2+fOm716tU2Y8aM1O9atWpZmzZtsqo3bOHx48fbiSeeaIgiFnZMLWz9KicCIpAMAhrDSsZ9zPkqli1bZosWLbJevXpZjRo1UvW88MILZVyAf/7zn3M+R0UH0rv7wx/+YE2aNLFNNtnEFS1ll+Dvv/9ukydPtmeeecZ+++0369ixox1yyCHuGjPtpZdesqeeesptbtSokfXv39/atWuXWUy/RUAE/kdAglXNHwUEg0AHelDPPfece8l+9tln9tBDD7kXb5zGuZ544gkbOXKkO03z5s3df+N2Cf7888/2zjvvZH1pnTp1So2zBR18xRVXuN7qGWecYbg6x40bZxMmTLC///3vdsIJJ7jDOD9BLLhYL7jgAlcnwS233XabEYmJyMlEQATKE5BglWdSrbZ441deBOCGG25ov/zyi22++eZWp06dWFkQaEF04gYb/NczXSiX4KpVq2zmzJlGbyis0fvEJeoFhvgdN2fOHNtqq63s6KOPdru33npr23333Z04XX/99e58AwcOtPPOO8/1aPv06ZOqhuCWIUOG2JgxYyRYfnC1TQTWE5BgVfPHAMHCHXXUUUelhGPXXXd1va50ozeEmEVluP0++OAD22effWzx4sWpagmpj9sl2LRpU9fjidreeOMN+8tf/lKmWq4HwWLqAGL00Ucf2RZbbFFGrLwDEEVEDh4K64/67qi+JBCQYCXhLuZ4DQgD41eIhtfLoSrcU3/6059StdJz+PLLLy3Kcazbb7/djVlNmjSpTOs33njj2F2COeKq9DDEKZ2jd0DdunXtqquusuOPP96efvppmzhxYmBdBL588sknEqxAQtpRnQlIsKrx3Q8KZ2dsJT2EfcqUKXbWWWc5Uri1fvrpJzc/i8m+a9eutfr166corly50ho2bFgh1bffftv1MjzXWXphJinjrsMtybiaZ5yHHggZMNasWeN6e142DNpB+Y022qjC83o7aT8RkPQawxpCRNg/ghpkfmLllWUO25577mlTp051LkHGthCyTPvhhx/K8Mzcr98iUJ0JSLCq8d0nFRK28847B1JAPIjgQzw+/PBDu/jii93YFpFvvPi///57mz17tp166qmGACJWjz/+uBO47bffvly9iMSjjz5qF110Ubl9bOBcGL2/Vq1auf8nAOSWW26xY445xrWDMkTYeT1DxGzFihVGeH5mpg5XQYYheEyWJvghrNF72nbbbSsVLHqniHmm/ec//zHGzkg9ddNNNzmOl112WZnITI7BrThgwIDMw/VbBERgPQEJVjV+DBAsegwECvjZwoUL3Yv1jjvucLs7dOhgZ555pouAI5KN8RYMV+G0adNS40JE+eHq8xMsxnHIRxjUG2F8CUsXLMbXGO96/fXXbezYse5Y3Ilnn322a5vXDnqC7733nu20006ujiBD8AYNGhS0O+ftffv2de4+LxrQqwgRuvPOO+2aa65xvHGvPvbYY07czznnnNTYIOWw9B5rzo3RgSKQQAISrATe1IouiXlXvNgZ2Cd8nWjAu+++u8whTBr2BIKxLC/cnEKIBT0sTyTYhsikixO9kczeCy9oekX0NHr27Glt27YtMzeJYIRXXnnFXnzxRdcWXvBE2BFFiNGzIqzcEzp6MbgA09uBi5AeTlUZ4ezMt7r22mutW7duzl3K9fBftnnuxBEjRtiWW27pxBeRIsiF+4JdeumlVdV8nVcEip6ABKvob1G0DfRyAzIeg1svyOgF4b5CWDLNb+ylsghCemcIzmmnnebGoLwQdq9uXua77bab7bHHHk6IEM3MSMXMDO5+7chsa6F/77XXXu46GSNDqI477jgnTunGWBzbDz74YDdeh1jBp0uXLuVchIVuv84nAsVMQIJVzHcnhrbxkmcsptDGS7wia9GihfGXBKPHecABB1R6KYh0ejRmpQeogAhUcwLKJVjNH4BsLp+xKdx6y5cvt2effdYdym8yOjC+9PXXX7t5RnPnznUBGkQDRmGE1RM9SL24KmkHa2altwNXIz2VV1991bVDJgIikDwCNda7XcrOEI34GvHTP/LII/LNR8y1KqojIpCAAcaTGKMiO8b777+f+t2yZUsXOUhoOy5C/vxy6GXbdibd4l7jUcVd6AUu4CJkO+1A0GgXIe701DJdjtmeU+VzI4CrOeZXSm4N01GJICCXYCJuY2EugqAC/tKtEO5Fv4Swme2ozOVYGEI6iwiIQJwEJFhx0lXdIiACoQm8/PLLzqUbxpiacMopp4QpmlUZVilgysQOO+yQ1XHVrTBBRUxt8aahZHP9ZHthKkz66hBhj5dghSWlciIgArESwLVLFOtJJ51k7777rhtKYNqFZ2RZYSrG1Vdf7ebpRS1YuLxZWZtMJEkVLFzojAkHGVNYiAyuSEwQdT4uiOjNxbjHJBZgXmK2JsHKlpjKi4AIxEKAr3V6Tl999ZX7ej/00EPLnYc5a0x/YMHPqI0kxSweyjhtUo1AJZYRYn4ga7GxYgAZYzDGfxkvfvLJJ13mmnPPPbdcwmtyj44ePdpls8nVunfv7rLiMDdx6NChWVUjwcoKlwqLgAjESYDgGaJODzvssMDT0OvKnNsWWDjkDtZHI48jluQoU9KdDR8+3KUJQ7BIZcYcwHRjbiAfBeTn/Mc//lFmH0vgkFYtKFNNSNx2+umnuwnzfJSQVzSsKaw9LCmVEwERiJ2Al+mEievp9tprr6V+4tZibbKojKhGeg1k1Mfo4SXd4AzDTLHiuon0JAL3rrvuKoMBVyCuWIQmX0PwWOLHW7w1bH0SrLCkVE4ERCB2ArxIGT9JFyxcVSz26RmpwRhnisp4MZNYmWAL8jgm2SUIM9KXkRKsR48evgg//vhjN22FFGvpRgLqKHNwwpyUbYwdhjUJVlhSKicCIhArAXo6CBYuIlxWTEInapBFMVknLN0y03Tl2jBelgQQeJlJWAYmyS5BODHpHkHyxq4y2ZFrFGMcyzN6tZMnTzZSj/kZ6dbogfmxy8wr6h3PxwHTUYgaDGsSrLCkVE4ERCBWAkSvkcWEMSqWlHnwwQddz4oB/r333jvw3IzFMIDvvWgDC/rsuPzyy11wgWesA0dgAhPgk2qsrID59bDoXbHsDR8JrMzgGUESTNrP/HBgP4kCWNWB6D+WKkrvobKcEMc8/PDDvjiJNCTpdVhT0EVYUionAiIQKwFv/Aq307HHHps6Fy9Ev6VqKICbihD4/v37uwF8xljCGkvR8JWfvryOt3ApL93MLC3MPZowYYJ7IXOuUl23DMEiWwwrW/OH0TNClBgrJBADnulG9CDC4xfuzscCLlr2LVmyxIXN01PFCGb54osvXE/Kz1q3bu3Su4U1CVZYUionAiIQK4GgL3/WN0uPSrv++utdlBl23333uag1QqV5qYY13I/Dhg1zWfPpzXmWHimYLliMox1++OEunyXzw3CBlaIh/qyDx9I99CQ9Y/wOpkFzo4jcbNSoUblLZm4c7kIEcPz48S4MPj0og3tKqrSgjDhMZUDkwpoEKywplRMBEYiNAC8+Ehizvpn3de6djCVpPCPk2ltXjG28dL3xrAYNGoRu37333usCOzJXh/aiDzMjBXGVkauSFywTm0vVcL954svCqGENV206d+84PiS8Ndxw4fbu3Tu1ajhl6DUHjZWxn3l32fSKJVhh75jKiYAIxEZg9uzZ7sVFLybIEDWyXLDKtLcoJhN9ER8CCZiESgRhZUYvigCBcePGlSvKC/jWW28tMw7DuXhh0ytDIBGubMSx3EmqcIPndqVHmo3xUVBRr5LgFSYk33PPPalqGb8ioGXUqFGBp2Ldu8xoxMDC63co6KIiOtonAiJQEAJB7sD0kzOJlUTIDP4jTEyAxZXFWBL/H0asqI+ggqCw+PQxLO/cTGaeOHGii1xk9QmCPErVEKyGDRvajjvumNUlkLJpxYoVgcewlBACtd9++6XKMCbGxwE9LPaxskOmIXTcw7CmHlZYUionAiIQOQFcfIsXL7bbb7/d1Y27ii91z5gzRDogoszoRS1cuDCvNhCa/fnnn/tOmKVib1ma9PBsXu70AiZNmuSEsVQN8UBEevXqVS7lUmXXxARj8jgGGcEbjFWlr6Lw/PPPu48LjkUoEa3MsSzufXrQS1D93nb1sCojpP0iIAKxEeBFx4A+KX+I+COcHFHy/hAOXnoERxDe7rfUTJjGPfHEE3bggQc6lyO58rxxF+9Y3F2MlXnRcZxr4MCBRiRhUoxrQjQIuMjWSNXEuB73ys9IXIx7z5tzxZjfo48+6ubUEYgxdepU37EsPli6devmV6XvNvWwfLFoowiIQCEIZDPwn0976FUw74ixJ1x7mYYoXnLJJanxKfLoUQ73WambN6eN64D3ggULnBv1n//8Z+gPAAIuEBYyZCD8mYagwY/JxuR5JKKQCcEkKT7//PPdPLpMly3iOWvWLN+xxMz6vd8SrCAy2i4CIlDUBAiHRlT4mif0PTPiL73xdevWTf0MCpggYs0zAivSfxc1iEoah0hF8WFAdCQh/X6CRRO8qQbpzaF8kNHrJW8hy5mENbkEw5JSOREQgaIiwBws5lIRwUc0WlzG2A3BFggkmTH80g/Fde5iqpe1wpjDRWRmFMYEZTJkZGPqYWVDS2VFQASKhkB66qA4G0WEHFGFvFwZp0kPLIjzvMVWNy49MtqzbthNN92UV/MIyGBidrbjaeph5YVdB4uACCSdAK5GJjPjImRicbp7MenXnnl9LG1PIEU+CzjSQ6PHSsaSbE2ClS0xlRcBERCBakyA0H7yKS5btiwnCsxpIyK0ojHHoIrlEgwio+0iIAIiIAK+BNKXHvEtUMHGwYMHV7C34l3qYVXMR3tFQAREQASKhIAEq0huhJohAiIgAiJQMQEJVsV8tFcEREAERKBICEiwiuRGqBkiIAIiIAIVE4g96IIUJ4uXrrTpM+dU3BLtFQERKHkCdRq2sBmz5pX8dWR7AbVr1bYO7dvaxvVqZ3toIsuTxDibZUPCQqixfo2XdWEL51Ju0PBRNmt5a1u70j9pYi516hgREAERKCYCdeo3s9p1atv0G/sVU7OqrC1kIbnyyitdSij+OnbsGElbYu9htWzVxpbNXL8swLQxkTRYlYiACIhAsRHo3LWnbdXnrGJrVpW2h0z3/I0cOdI6d+4ciXhpDKtKb6lOLgIiIALJJ+AJ1zbbbGNdunRxy7vMnz8/6wuPvYeVdYt0gAiIgAgkmMA777zjEvYm2ebMCY5ZyKfnJcFK8lOjaxMBESg6AiNGjLApU6YUXbuqokF+4nXyySdby5YtfZsjl6AvFm0UAREQAREoFIH27dtb37593V+QWNEW9bAKdUd0HhEQAREQgRQBRMqLImQBzjAmwQpDSWVEQAREICICrLSbdCOsfcCAAeUuMxeRSq9EglUOqTaIgAiIgAhERSBfkSqoYDVoUN+atu5gTbr3jer6VY8IiIAIFBWBlu062YrVPxdVm6qyMS1atLBzzz3XufzCuvvCtDf2TBdzF31ng0c/Z1u02jhMe1RGBERABEqOwKo1v9hmzRvYDUN7llzbS6nBsQtWKcFQW0VABERABIqXgMLai/feqGUiIAIiIAJpBCRYehxEQAREQARKgoAEqyRukxopAiIgAiIgwdIzIAIiIAIiUBIE8pqH9dZbb9mECRNsww03LHOxtWrVsksuuaQkAKiRIiACIhBE4Mcff7TLL7/cfv/9d9too41c0lrCtVu1ahV0iLbHSCCvKEFWE166dKmdeeaZ9uCDD9oNN9xghxxyiDVq1MgaNmwYY7NVtQgEE7jwwgvtgw8+8C2w11572emnn+67TxtFIJ0Aq+buvffeNmjQIBs4cKDbRbJW5hbNmDHDmjZtKmAFJpCXYHlt3WWXXezDDz+0ZcuWlettFfh6dDoRsJUrVxovGz+rXbu21a9f32+XtolAGQJ8gP/rX/+yRYsWWY0aNVL7TjjhBKtTp47deuutIlZgAnmPYa1YscJY36V79+4SqwLfPJ3OnwC9+yZNmvj+Saz8mWlreQLjx4+3bt26lRErSvGBfv/99xvuQllhCeQ1hkVTX3nlFfvtt9+sR48ehW25ziYCAQRwB7722mv288/lU+Uwvtq/f3+rW7duwNHaXBUEfvjhB5s2bZr7yMANh82aNcs++eQT924ptPtt7dq17kP8j3/8Yzkcm266qa1evdreffdd22OPPcrt14b4COQtWC+++KJr3b777htfK1WzCIQkcOedd9qwYcNsyy23dEd89tln1rZt29TRjRs3toMPPliCFZJnIYrNnTvXjYH369fPJk6caGQz79ixo7Vp08aWL19uu+22my1YsMA22CBvh1DoyyG4ArcyHziZVq9ePbdpyZIlmbv0O2YCkQgWLwG/L5GY267qRaAMgddff931rL744gsX0fXNN98YARg333yzSBUpgZ9++snuuusuu/LKK10LjzzySNthhx3c2NH+++/vFvQjuGvdunWBV/D+++/b0UcfnZWLjudj0qRJtvXWW/vWyzgoRgBZkNErlBWWQF6CxQ17++233UOVGdpe2MvQ2UTAXMTqjTfemHoWp06dGmmmaDGOnsDkyZONIAbPCN5iiOGggw5ym+69917Xy6no/bLtttva7NmzI20cbajM/FzOlR2j/fkRyKuP/fLLL2v8Kj/+OjpCAgceeGCZF9tjjz0mwYqQbxxVESK+3XbbpaqeOXOmcwWyhhLGmFaDBg3iOHWFdeI1qsw0dacyQtHvz0uwXnrpJdeioPGrVatW2bhx46JvtWoUgUoIrFmzxng+cS/JSocA96wYArgQSkLZmaqTaZ4rsNCBIJntqI6/83IJ8nBxY7t06eLLju78nnvu6btPG0UgTgIvvPCCC7xgvoysNAjwkfHGG2/Ycccdl2ow0XiffvqpderUKfAiCNo44ogj3FhXWKtZs6bhjgwawyKwgsAPv8CKr776yonZ9ttvH/Z0KhcRgZwFi68MUjPhhvGL3iG6hweCWeJhjTldpECpzOiK88Bhn3/+uQ0fPtw++ugj5w7661//6male/uJYiR9FA8g+9mnB60ywqW/X+7A0riHo0ePtk022cSOP/54498q4eTMc/KMgIxevXpVeDG4FIMym1R4YCU7jznmGLvnnnvKlSKcnflZhLfLCksgZ8GaPn26G7/ycwfyVTRgwADbb7/9Uldz7bXXusitIAGjrhEjRvjOnclEcsopp9jOO+9sfJFdeumldt1117mHniixY4891gklYbL8YyA0lRnrCBiRRuQ4bNmypSsvSyYB7vOUKVNchKCseAnwgcoUBN4J/Lt99tln3b9LL2wcEeLfb4cOHarkIs444wxj8jCepH322ce14euvv7annnrKPV+ywhPIOjUTubR4kAgVZqLfFVdc4cQDI4x4zpw57ibz//R+vCSRb775pss5SKBGVPbQQw+5ORrt2rVLVUlPi68f5t4cdthhdsEFF5Q5HWG0d9xxhw0ePDiqZqieIiPAS45nbeTIkdaiRYsia52ak06AcHY+VnGx4QpkSsLdd99tm2++uTVr1sz4OK1KIy3T+eefb127dnX5UZkjNmTIEOvZs2dVNqvanjtrwUJw+MqozBjbSu/KM4GTXleUgoVo8kBnuiSffvpp6927txOlMWPGlGsq2/72t7+V264NIiACIuBHgHlZuCubN2/ut1vbCkQga5cgOQNztS+//NJuueUWF6hBTwhBo4eE8ZV1+OGHh5r8d9FFFxlZt5ms/Oqrr7r/94y5EUQm4gY855xznPuP8p4x7qalAXK9gzpOBKonAXpXCmOv+nuftWDl02QyZXtjWLjmOnfu7PKFMc+CgAgGyrOx3Xff3a1Vg9jtuOOOLghk7NixNnToUJfjiygf3Azz5883BlAXL17s8oMhmjIREAEREIHSIpDXPKxsLzU9LxfJR/kjuWU+dt555xnzva655hqjB3fbbbelElLSg1u4cKH16dPHZeQgqgc3YvpSAfmcW8eKgAiIgAgUjkDWY1i5No0xLHpE8+bNM2aRE7hBb4v5MhWlXcn1fDpOBERABEQgWQQKJljff/+9C7hgDRl6OPwmlLUq0q4k6xbqakRABESgehAomGBVD5y6ShEQAREQgbgIFHQMK66LUL0iIAIiIALJJyDBSv491hWKgAiIQCIISLAScRt1ESIgAiKQfAISrOTfY12hCIiACCSCgAQrEbdRFyECIiACyScgwUr+PdYVioAIiEAiCPwfCOuiNyPHXvsAAAAASUVORK5CYII="
    }
   },
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "### Simplifications\n",
    "\n",
    "Before referring to advanced possibilities how to solve this problem, let show that we can derive a rather simple, yet useful model by putting together the conditions of equilibrium, kinematics/compatibility and the constitutive laws of the components and their interface.  \n",
    "\n",
    "![image.png](attachment:image.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "**Simplification 1: dropped** The dimensions of the concrete block are 100 $\\times$ 100 mm so that $A_\\mathrm{m} = $10000 mm. Let us assume the diameter of the steel rebar 16 mm so that we get $A_\\mathrm{f}$ = 201 mm. Considering Young's modulus of concrete $E_\\mathrm{m}=$ 28 GPa and  of steel $E_\\mathrm{f} = $ 210 GPa we see that the effective tensile stiffness of these components in the test reads\n",
    "\\begin{align}\n",
    "E_\\mathrm{m} A_\\mathrm{m} &= 280000 \\; \\mathrm{kN/mm} \\\\\n",
    "E_\\mathrm{f} A_\\mathrm{f} &=  42210 \\; \\mathrm{kN/mm} \\\\\n",
    "\\end{align}\n",
    "The stiffness of concrete cross section is thus almost seven times larger than that of concrete. To simplify the construction of the model, let us assume that its stiffness infinite, i.e. $E_\\mathrm{m} A_\\mathrm{m} = \\infty$. This means that $u_\\mathrm{m}(x) = 0, \\forall x \\in (-L_\\mathrm{b}, 0)$."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "**Simplification 2:** Further, we assume that the interface between steel and concrete transfers a constant shear stress independently on the amount of slip, i.e.\n",
    "\\begin{align}\n",
    " \\tau(s) = \\bar{\\tau}\n",
    "\\end{align}\n",
    "were $\\tau$ is a constant material parameter."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "**Simplification 3:** We consider $L_\\mathrm{b} = \\infty$. Thus, the pull-out process can continue infinitely."
   ]
  },
  {
   "attachments": {
    "image.png": {
     "image/png": "iVBORw0KGgoAAAANSUhEUgAAAawAAAB9CAYAAAD+3VeSAAAABHNCSVQICAgIfAhkiAAAG9xJREFUeF7tnQvYFdP+x3/RTRddVZTiJBHquEZEOjkq93sJHY9DOkdED7kU53E5yJHLIYTINSSXlLs4JEQuXSiUW0iUVJJb/z7rnNn//e535n1n7z2z373n/f6e533YM2vWrPnMNN9Zv/Vbv1Vj3XozmQiIgAiIgAgUOYENirx9ap4IiIAIiIAIOAISLD0IIiACIiACJUFAglUSt0mNFAEREAERkGDpGRABERABESgJAhKskrhNaqQIiIAIiIAES8+ACIiACIhASRCQYJXEbVIjRUAEREAEJFh6BkRABERABEqCgASrJG6TGikCIiACIiDB0jMgAiIgAiJQEgQkWCVxm9RIERABERCBmnEjmD9/vl111VVWp06duE+l+kVABKqYQOPGje2yyy6r4lbo9EklUCPu5Ldjx461QYMG2ZAhQ5LKUNclAiLwPwL//ve/Tfm09TjERSD2HhYN7927tw0cODCua1C9IiACRUIAwZKJQFwENIYVF1nVKwIiIAIiECkBCVakOFWZCIiACIhAXAQkWHGRVb0iIAIiIAKREpBgRYpTlYmACIiACMRFQIIVF1nVKwIiIAIiECkBCVakOFWZCIiACIhAXAQkWHGRVb0iIAIiIAKREpBgRYpTlYmACIiACMRFQIIVF1nVKwIiIAIiECkBCVakOFWZCIiACIhAXAQkWHGRVb0iIAIiIAKREpBgRYpTlYmACIiACMRFQIIVF1nVKwIiIAIiECkBCVakOFWZCIiACIhAXAQkWHGRVb0iIAIiIAKREpBgRYpTlYmACIiACMRFQIIVF1nVKwIiIAIiECkBCVakOFWZCIiACIhAXAQkWHGRVb0iIAIiIAKREpBgRYpTlYmACIiACMRFQIIVF1nVmxOBt956K6fjdJAIiEDyCdRM/iXqCisicPXVV9vSpUsrKpLat//++9u+++4bqmwuhd58800bPHiwTZ8+3WrXrp1LFTpGBEQgwQQkWAm+uWEubdiwYfbpp5/aEUccYV27drXrrrvOatb8/8fixx9/tHnz5tmFF15o2223XZgqcyrz66+/2qhRo2zdunVOQFu3bp1TPTpIBEQguQTkEkzuvQ19ZQsWLHBlu3fvXkas2FavXj3bZZddrF+/frbZZpuFrjPbgg888IA1aNDAHfbdd99le7jKi4AIVAMCEqxqcJMru0Rv3AhhCrJmzZrZpptuGrQ7r+3ffPONLVmyxHr06OHq+fbbb/OqTweLgAgkk4AEK5n3NaurmjVrljVu3Njat2+fOm716tU2Y8aM1O9atWpZmzZtsqo3bOHx48fbiSeeaIgiFnZMLWz9KicCIpAMAhrDSsZ9zPkqli1bZosWLbJevXpZjRo1UvW88MILZVyAf/7zn3M+R0UH0rv7wx/+YE2aNLFNNtnEFS1ll+Dvv/9ukydPtmeeecZ+++0369ixox1yyCHuGjPtpZdesqeeesptbtSokfXv39/atWuXWUy/RUAE/kdAglXNHwUEg0AHelDPPfece8l+9tln9tBDD7kXb5zGuZ544gkbOXKkO03z5s3df+N2Cf7888/2zjvvZH1pnTp1So2zBR18xRVXuN7qGWecYbg6x40bZxMmTLC///3vdsIJJ7jDOD9BLLhYL7jgAlcnwS233XabEYmJyMlEQATKE5BglWdSrbZ441deBOCGG25ov/zyi22++eZWp06dWFkQaEF04gYb/NczXSiX4KpVq2zmzJlGbyis0fvEJeoFhvgdN2fOHNtqq63s6KOPdru33npr23333Z04XX/99e58AwcOtPPOO8/1aPv06ZOqhuCWIUOG2JgxYyRYfnC1TQTWE5BgVfPHAMHCHXXUUUelhGPXXXd1va50ozeEmEVluP0++OAD22effWzx4sWpagmpj9sl2LRpU9fjidreeOMN+8tf/lKmWq4HwWLqAGL00Ucf2RZbbFFGrLwDEEVEDh4K64/67qi+JBCQYCXhLuZ4DQgD41eIhtfLoSrcU3/6059StdJz+PLLLy3Kcazbb7/djVlNmjSpTOs33njj2F2COeKq9DDEKZ2jd0DdunXtqquusuOPP96efvppmzhxYmBdBL588sknEqxAQtpRnQlIsKrx3Q8KZ2dsJT2EfcqUKXbWWWc5Uri1fvrpJzc/i8m+a9eutfr166corly50ho2bFgh1bffftv1MjzXWXphJinjrsMtybiaZ5yHHggZMNasWeN6e142DNpB+Y022qjC83o7aT8RkPQawxpCRNg/ghpkfmLllWUO25577mlTp051LkHGthCyTPvhhx/K8Mzcr98iUJ0JSLCq8d0nFRK28847B1JAPIjgQzw+/PBDu/jii93YFpFvvPi///57mz17tp166qmGACJWjz/+uBO47bffvly9iMSjjz5qF110Ubl9bOBcGL2/Vq1auf8nAOSWW26xY445xrWDMkTYeT1DxGzFihVGeH5mpg5XQYYheEyWJvghrNF72nbbbSsVLHqniHmm/ec//zHGzkg9ddNNNzmOl112WZnITI7BrThgwIDMw/VbBERgPQEJVjV+DBAsegwECvjZwoUL3Yv1jjvucLs7dOhgZ555pouAI5KN8RYMV+G0adNS40JE+eHq8xMsxnHIRxjUG2F8CUsXLMbXGO96/fXXbezYse5Y3Ilnn322a5vXDnqC7733nu20006ujiBD8AYNGhS0O+ftffv2de4+LxrQqwgRuvPOO+2aa65xvHGvPvbYY07czznnnNTYIOWw9B5rzo3RgSKQQAISrATe1IouiXlXvNgZ2Cd8nWjAu+++u8whTBr2BIKxLC/cnEKIBT0sTyTYhsikixO9kczeCy9oekX0NHr27Glt27YtMzeJYIRXXnnFXnzxRdcWXvBE2BFFiNGzIqzcEzp6MbgA09uBi5AeTlUZ4ezMt7r22mutW7duzl3K9fBftnnuxBEjRtiWW27pxBeRIsiF+4JdeumlVdV8nVcEip6ABKvob1G0DfRyAzIeg1svyOgF4b5CWDLNb+ylsghCemcIzmmnnebGoLwQdq9uXua77bab7bHHHk6IEM3MSMXMDO5+7chsa6F/77XXXu46GSNDqI477jgnTunGWBzbDz74YDdeh1jBp0uXLuVchIVuv84nAsVMQIJVzHcnhrbxkmcsptDGS7wia9GihfGXBKPHecABB1R6KYh0ejRmpQeogAhUcwLKJVjNH4BsLp+xKdx6y5cvt2effdYdym8yOjC+9PXXX7t5RnPnznUBGkQDRmGE1RM9SL24KmkHa2altwNXIz2VV1991bVDJgIikDwCNda7XcrOEI34GvHTP/LII/LNR8y1KqojIpCAAcaTGKMiO8b777+f+t2yZUsXOUhoOy5C/vxy6GXbdibd4l7jUcVd6AUu4CJkO+1A0GgXIe701DJdjtmeU+VzI4CrOeZXSm4N01GJICCXYCJuY2EugqAC/tKtEO5Fv4Swme2ozOVYGEI6iwiIQJwEJFhx0lXdIiACoQm8/PLLzqUbxpiacMopp4QpmlUZVilgysQO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mjZtKmAFJpCXYHlt3WWXXezDDz+0ZcuWlettFfh6dDoRsJUrVxovGz+rXbu21a9f32+XtolAGQJ8gP/rX/+yRYsWWY0aNVL7TjjhBKtTp47deuutIlZgAnmPYa1YscJY36V79+4SqwLfPJ3OnwC9+yZNmvj+Saz8mWlreQLjx4+3bt26lRErSvGBfv/99xvuQllhCeQ1hkVTX3nlFfvtt9+sR48ehW25ziYCAQRwB7722mv288/lU+Uwvtq/f3+rW7duwNHaXBUEfvjhB5s2bZr7yMANh82aNcs++eQT924ptPtt7dq17kP8j3/8Yzkcm266qa1evdreffdd22OPPcrt14b4COQtWC+++KJr3b777htfK1WzCIQkcOedd9qwYcNsyy23dEd89tln1rZt29TRjRs3toMPPliCFZJnIYrNnTvXjYH369fPJk6caGQz79ixo7Vp08aWL19uu+22my1YsMA22CBvh1DoyyG4ArcyHziZVq9ePbdpyZIlmbv0O2YCkQgWLwG/L5GY267qRaAMgddff931rL744gsX0fXNN98YARg333yzSBUpgZ9++snuuusuu/LKK10LjzzySNthhx3c2NH+++/vFvQjuGvdunWBV/D+++/b0UcfnZWLjudj0qRJtvXWW/vWyzgoRgBZkNErlBWWQF6CxQ17++233UOVGdpe2MvQ2UTAXMTqjTfemHoWp06dGmmmaDGOnsDkyZONIAbPCN5iiOGggw5ym+69917Xy6no/bLtttva7NmzI20cbajM/FzOlR2j/fkRyKuP/fLLL2v8Kj/+OjpCAgceeGCZF9tjjz0mwYqQbxxVESK+3XbbpaqeOXOmcwWyhhLGmFaDBg3iOHWFdeI1qsw0dacyQtHvz0uwXnrpJdeioPGrVatW2bhx46JvtWoUgUoIrFmzxng+cS/JSocA96wYArgQSkLZmaqTaZ4rsNCBIJntqI6/83IJ8nBxY7t06eLLju78nnvu6btPG0UgTgIvvPCCC7xgvoysNAjwkfHGG2/Ycccdl2ow0XiffvqpderUKfAiCNo44ogj3FhXWKtZs6bhjgwawyKwgsAPv8CKr776yonZ9ttvH/Z0KhcRgZwFi68MUjPhhvGL3iG6hweCWeJhjTldpECpzOiK88Bhn3/+uQ0fPtw++ugj5w7661//6male/uJYiR9FA8g+9mnB60ywqW/X+7A0riHo0ePtk022cSOP/54498q4eTMc/KMgIxevXpVeDG4FIMym1R4YCU7jznmGLvnnnvKlSKcnflZhLfLCksgZ8GaPn26G7/ycwfyVTRgwADbb7/9Uldz7bXXusitIAGjrhEjRvjOnclEcsopp9jOO+9sfJFdeumldt1117mHniixY4891gklYbL8YyA0lRnrCBiRRuQ4bNmypSsvSyYB7vOUKVNchKCseAnwgcoUBN4J/Lt99tln3b9LL2wcEeLfb4cOHarkIs444wxj8jCepH322ce14euvv7annnrKPV+ywhPIOjUTubR4kAgVZqLfFVdc4cQDI4x4zpw57ibz//R+vCSRb775pss5SKBGVPbQQw+5ORrt2rVLVUlPi68f5t4cdthhdsEFF5Q5HWG0d9xxhw0ePDiqZqieIiPAS45nbeTIkdaiRYsia52ak06AcHY+VnGx4QpkSsLdd99tm2++uTVr1sz4OK1KIy3T+eefb127dnX5UZkjNmTIEOvZs2dVNqvanjtrwUJw+MqozBjbSu/KM4GTXleUgoVo8kBnuiSffvpp6927txOlMWPGlGsq2/72t7+V264NIiACIuBHgHlZuCubN2/ut1vbCkQga5cgOQNztS+//NJuueUWF6hBTwhBo4eE8ZV1+OGHh5r8d9FFFxlZt5ms/Oqrr7r/94y5EUQm4gY855xznPuP8p4x7qalAXK9gzpOBKonAXpXCmOv+nuftWDl02QyZXtjWLjmOnfu7PKFMc+CgAgGyrOx3Xff3a1Vg9jtuOOOLghk7NixNnToUJfjiygf3Azz5883BlAXL17s8oMhmjIREAEREIHSIpDXPKxsLzU9LxfJR/kjuWU+dt555xnzva655hqjB3fbbbelElLSg1u4cKH16dPHZeQgqgc3YvpSAfmcW8eKgAiIgAgUjkDWY1i5No0xLHpE8+bNM2aRE7hBb4v5MhWlXcn1fDpOBERABEQgWQQKJljff/+9C7hgDRl6OPwmlLUq0q4k6xbqakRABESgehAomGBVD5y6ShEQAREQgbgIFHQMK66LUL0iIAIiIALJJyDBSv491hWKgAiIQCIISLAScRt1ESIgAiKQfAISrOTfY12hCIiACCSCgAQrEbdRFyECIiACyScgwUr+PdYVioAIiEAiCPwfCOuiNyPHXvsAAAAASUVORK5CYII="
    }
   },
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "![image.png](attachment:image.png)\n",
    "\n",
    "## Boundary value problem\n",
    "This example shows the analytically solvable model - the simplest possible configuration of the pullout test.\n",
    "By applying the simplifying assumptions, the model parameters specified in the table above reduce to the following symbols that we now define as variables within the `sympy` package. This will allow us to apply the `sympy` package to perform algebraic manipulation, to integrate and to differentiate automatically and concentrate on the model construction instead."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "notes"
    }
   },
   "source": [
    "It is convenient to classify the parameters and variables involved in the model into the groups related to parameters describing the geometry, material behavior, measured response, internal state and subsidiary integration parameters that will be resolved during the model derivation. In this classification we also associate the mathematical symbols with the Python variable name introduced in the next cell."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "**Geometrical variables:**\n",
    "\n",
    "| Python | Parameter | Description | \n",
    "| :- | :-: | :- |\n",
    "| `A_f` | $A_\\mathrm{f}$ |  Cross section area modulus of the reinforcement |\n",
    "| `A_m` | $A_\\mathrm{m}$ |  Cross section area modulus of the matrix |\n",
    "| `p`   | $p$            |  Perimeter of the reinforcement                  |\n",
    "| `L_b` | $L_\\mathrm{b}$ |  Length of the bond zone of the pulled-out bar   |\n",
    "| `x`   | $x$            |  Longitudinal coordinate |\n",
    "\n",
    "**Material parameters:**\n",
    "\n",
    "| Python | Parameter | Description | \n",
    "| :- | :-: | :- |\n",
    "| `E_f`     | $E_\\mathrm{f}$ |  Young's modulus of the reinforcement |\n",
    "| `E_m`     | $E_\\mathrm{m}$ |  Young's modulus of the matrix |\n",
    "| `tau_bar` | $\\bar{\\tau}$   |  Frictional bond stress               |\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "**Control parameter:**\n",
    "\n",
    "| Python | Parameter | Description | \n",
    "| :- | :-: | :- |\n",
    "| `P` | $P$ | Pullout force |\n",
    "| `w` | $w$ | pullout control  displacement\n",
    "\n",
    "**State parameter:**\n",
    "\n",
    "| Python | Parameter | Description | \n",
    "| :- | :-: | :- |\n",
    "| `a` | $a$ | Length of the debonded zone |\n",
    "\n",
    "**Integration constants:**\n",
    "\n",
    "| Python | Parameter | Description | \n",
    "| :- | :-: | :- |\n",
    "| `C`, `D` | $C,D$ | Integration constants to be resolved through boundary and continuity conditions |"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "**Let's import the packages:**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 97,
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [],
   "source": [
    "%matplotlib notebook\n",
    "import sympy as sp # symbolic algebra package\n",
    "import numpy as np # numerical package\n",
    "import matplotlib.pyplot as plt # plotting package\n",
    "sp.init_printing() # enable nice formating of the derived expressions\n",
    "import ipywidgets as ipw"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "Here we tell `sympy` to remember these variables for further use. The parameter of the `symbols( str )` is a string that contains comma-separated printable symbol definition. One can use latex commands in this string to introduce e.g. Greek symbols like `\\gamma, \\beta`, etc. The number of symbols in `str` must be equal to the number of variables assigned on the left hand side of the `=` sign"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 98,
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [],
   "source": [
    "E_m, A_m = sp.symbols('E_\\mathrm{m}, A_\\mathrm{m}', nonnegative = True )\n",
    "E_f, A_f = sp.symbols('E_\\mathrm{f}, A_\\mathrm{f}', nonnegative = True )\n",
    "tau, p = sp.symbols('tau, p', nonnegative = True)\n",
    "C, D, E, F = sp.symbols('C, D, E, F')\n",
    "P, w = sp.symbols('P, w')\n",
    "x, a, L_b = sp.symbols('x, a, L_b')"
   ]
  },
  {
   "attachments": {
    "image.png": {
     "image/png": "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"
    }
   },
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## Infinitesimal bond segment\n",
    "Let us now consider an infinitely small segment of the bond zone and employ the usual model ingredients, i.e. equilibrium, constitutive laws of the components and then the kinematics\n",
    "![image.png](attachment:image.png)\n",
    "\n",
    "\\begin{align}\n",
    "\\mathrm{d} \\sigma_\\mathrm{f} A_\\mathrm{f} = p \\bar{\\tau} \\, \\mathrm{d}x\n",
    "\\end{align}"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "### Equilibrium \n",
    "In the halfspace $x \\in (-\\infty, 0)$ the governing equations take the folowing form:<br>\n",
    "\n",
    "In constrast to the case of rigid matrix we have to account for equilibrium in both components (m,f). Thus, an additional equilibrium with inverse sign of the shear stress flow must be added\n",
    "\\begin{align}\n",
    "\\frac{\\mathrm{d} \\sigma_\\mathrm{f}}{\\mathrm{d} x} &= \\frac{p \\bar{\\tau}}{A_\\mathrm{f}} \\\\\n",
    "\\frac{\\mathrm{d} \\sigma_\\mathrm{m}}{\\mathrm{d} x} &= - \\frac{p \\bar{\\tau}}{A_\\mathrm{m}} \n",
    "\\end{align}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 99,
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/latex": [
       "$\\displaystyle \\left( \\frac{p \\tau}{A_\\mathrm{f}}, \\  - \\frac{p \\tau}{A_\\mathrm{m}}\\right)$"
      ],
      "text/plain": [
       "⎛    p⋅τ          -p⋅τ     ⎞\n",
       "⎜────────────, ────────────⎟\n",
       "⎝A_\\mathrm{f}  A_\\mathrm{m}⎠"
      ]
     },
     "execution_count": 99,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "d_sig_f = p * tau / A_f\n",
    "d_sig_m = -p * tau / A_m\n",
    "d_sig_f, d_sig_m"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Following the same procedure as in the worksheet [Pullout from rigid matrix](2_1_pullout_from_rigid_matrix.ipynb) let us integrate the equilibrium equations to obtain the stresses in the components"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "\\begin{align}\n",
    "\\sigma_\\mathrm{f}(x) &= \\int \\frac{p\\bar{\\tau}}{A_\\mathrm{f}} \\, \\mathrm{d}x = \\frac{p \\bar{\\tau}}{A_\\mathrm{f}} x + C \\\\\n",
    "\\sigma_\\mathrm{m}(x) &= \\int \\frac{p\\bar{\\tau}}{A_\\mathrm{m}} \\, \\mathrm{d}x = \\frac{p \\bar{\\tau}}{A_\\mathrm{m}} x + D\n",
    "\\end{align}\n",
    "with $C$ as an unknown integration constant. In `sympy` we can issue the `sp.integrate` method to perform the automatic integration"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 100,
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/latex": [
       "$\\displaystyle \\left( C + \\frac{p \\tau x}{A_\\mathrm{f}}, \\  D - \\frac{p \\tau x}{A_\\mathrm{m}}\\right)$"
      ],
      "text/plain": [
       "⎛       p⋅τ⋅x             p⋅τ⋅x    ⎞\n",
       "⎜C + ────────────, D - ────────────⎟\n",
       "⎝    A_\\mathrm{f}      A_\\mathrm{m}⎠"
      ]
     },
     "execution_count": 100,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sig_f = sp.integrate(d_sig_f, x) + C\n",
    "sig_m = sp.integrate(d_sig_m, x) + D\n",
    "sig_f, sig_m"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "### Constitutive laws: \n",
    "Both matrix and fiber are assumed linear elasticwith the Young's modulus $E_\\mathrm{f}$ and $E_\\mathrm{m}$, respectively\n",
    "\\begin{align}\n",
    "\\varepsilon_\\mathrm{f}(x) &= \\frac{1}{E_\\mathrm{f}} \\sigma_{\\mathrm{f}} = \\frac{1}{E_\\mathrm{f}} \\left(\\frac{p \\tau}{A_\\mathrm{f}} x + C \\right), \\\\\n",
    "\\varepsilon_\\mathrm{m}(x) &= \\frac{1}{E_\\mathrm{m}} \\sigma_{\\mathrm{m}} = \\frac{1}{E_\\mathrm{m}} \\left(\\frac{p \\tau}{A_\\mathrm{m}} x + D \\right).\n",
    "\\end{align}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 101,
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/latex": [
       "$\\displaystyle \\left( \\frac{C + \\frac{p \\tau x}{A_\\mathrm{f}}}{E_\\mathrm{f}}, \\  \\frac{D - \\frac{p \\tau x}{A_\\mathrm{m}}}{E_\\mathrm{m}}\\right)$"
      ],
      "text/plain": [
       "⎛       p⋅τ⋅x             p⋅τ⋅x    ⎞\n",
       "⎜C + ────────────  D - ────────────⎟\n",
       "⎜    A_\\mathrm{f}      A_\\mathrm{m}⎟\n",
       "⎜────────────────, ────────────────⎟\n",
       "⎝  E_\\mathrm{f}      E_\\mathrm{m}  ⎠"
      ]
     },
     "execution_count": 101,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "eps_f = sig_f / E_f\n",
    "eps_m = sig_m / E_m\n",
    "eps_f, eps_m"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "### Kinematics: \n",
    "Realizing that\n",
    "\\begin{align}\n",
    "\\varepsilon &= \\frac{\\mathrm{d} u}{\\mathrm{d} x}\n",
    "\\implies \n",
    "u = \\int\n",
    "\\varepsilon \\mathrm{d} x\n",
    "\\end{align}\n",
    "we obtain the displacement fields of the fiber and of the matrix as an integral\n",
    "\\begin{align}\n",
    "u_\\mathrm{f}(x) &= \n",
    "\\int \n",
    "\\frac{1}{E_\\mathrm{f}} \\left(\\frac{p \\tau}{A_\\mathrm{f}} x + C \\right) \\; \\mathrm{d}x =\n",
    "\\frac{p \\tau x^{2}}{2 A_\\mathrm{f} E_\\mathrm{f}} + \\frac{C x}{E_{\\mathrm{f}}} + E \n",
    "\\\\\n",
    "u_\\mathrm{m}(x) &= \n",
    "\\int \n",
    "\\frac{1}{E_\\mathrm{m}} \\left(\\frac{p \\tau}{A_\\mathrm{m}} x + C \\right) \\; \\mathrm{d}x =\n",
    "\\frac{p \\tau x^{2}}{2 A_\\mathrm{m} E_\\mathrm{m}} + \\frac{C x}{E_{\\mathrm{m}}} + F \n",
    "\\end{align}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 102,
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/latex": [
       "$\\displaystyle \\left( \\frac{C x}{E_\\mathrm{f}} + E + \\frac{p \\tau x^{2}}{2 A_\\mathrm{f} E_\\mathrm{f}}, \\  \\frac{D x}{E_\\mathrm{m}} + F - \\frac{p \\tau x^{2}}{2 A_\\mathrm{m} E_\\mathrm{m}}\\right)$"
      ],
      "text/plain": [
       "⎛                                   2                                         \n",
       "⎜    C⋅x                       p⋅τ⋅x                 D⋅x                      \n",
       "⎜──────────── + E + ───────────────────────────, ──────────── + F - ──────────\n",
       "⎝E_\\mathrm{f}       2⋅A_\\mathrm{f}⋅E_\\mathrm{f}  E_\\mathrm{m}       2⋅A_\\mathr\n",
       "\n",
       "      2          ⎞\n",
       " p⋅τ⋅x           ⎟\n",
       "─────────────────⎟\n",
       "m{m}⋅E_\\mathrm{m}⎠"
      ]
     },
     "execution_count": 102,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "u_f = sp.integrate(eps_f, x) + E\n",
    "u_m = sp.integrate(eps_m, x) + F\n",
    "u_f, u_m"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "**What's next?**\n",
    "\n",
    "To resolve the constants let us apply boundary conditions and compatibility conditions "
   ]
  },
  {
   "attachments": {
    "image.png": {
     "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZ8AAACrCAYAAAC5fpGbAAAABHNCSVQICAgIfAhkiAAAIABJREFUeF7tnQe4FNX5/w+C9B5ApCjSMRYIEKWoqJAYQjAqIIogwRLEaCARAhoQGwoGC1gSNIqCxoZGlIAhCiqgAhYEJRFFpYj0DlL3t5/zf+b+9+6d2Z29d7Z/3+fZB+7MmVM+Z3feecs5UyoUFiMRAREQAREQgRQSOCaFbakpERCBLCLQp0+fLOqtupptBErJ8sm2KVN/RSA1BEqVKmXkGEkN63xsRZZPPs66xiwCIiACaSYg5ZPmCVDzIiACIpCPBKR88nHWNWYREAERSDMBKZ80T4CaFwEREIF8JCDlk4+zrjGLgAiIQJoJSPmkeQLUvAiIgAjkIwEpn3ycdY1ZBERABNJMQMonzROg5kVABEQgHwlI+eTjrGvMIiACIpBmAlI+aZ4ANS8CIiAC+UhAyicfZ11jFgEREIE0E5DySfMEqHkREAERyEcCUj75OOsaswiIgAikmYCUT5onQM2LgAiIQD4SkPLJx1nXmEVABEQgzQSkfNI8AWpeBERABPKRgJRPPs66xiwCIiACaSYg5ZPmCVDzIiACIpCPBKR88nHWNWYRyHICR44cMaNGjTKbN28u9ki2b99uxowZY6hLknoCUj6pZ64WRUAESkAgFAqZK664wnTo0MHUrl272DXVqFHDtGvXzgwcONBQpyS1BEqFoYt6apmrNRHICgKlSpXKyJvyrbfeag4fPmzuuusuV44bN240Tz31lPn666+tVXPqqaeaAQMGmGrVqrmWx/phrLfddpvr+Uw8+M4775iXXnrJjq906dLmoosuMueee24mdtW7TygfiQiIgAhEEwjfNaIPpf3vJUuWhJo1axb64YcfXPvy7rvvhk444YTQ888/HwrfmEOHDh0KPfroo6EmTZqEPvzwQ9drDh48GGrRokWIujNdwko3NHjw4ND5558f+uabb2x316xZE+rSpUvommuuCXE+WyTzvl3ZQk79FIEcJ5Bpyufo0aOhs846K/TEE0+4kt+6dWso7IYLTZw4scj50aNHhxo0aBDauXNnkXMcePrpp0NhF5xVWJkskyZNClWvXj0UjlcV6uaOHTtCdevWDYWtwkzufqG+SflkzVSpoyKQWgKZpnzmzp1rb7z79+93BTFixIjQMcccE9q2bVuR8+vXrye8EBo/fnyRcxw4cOBAqFatWqFZs2a5ns+Eg3v27AlVrVo1NGjQINfuDBs2LFSxYkVPBet6URoPKuHA2yOpMyIgAhlEYMqUKeZXv/qVKV++vGuvpk+fbsLWjSGRIFrq1atnwjdmQxk3KVu2rK07bFW5nc6IY6+99prZtWuXOe2001z707JlS7Nv3z4zY8YM1/OZdlDKJ9NmRP0RgRwnEHafJTxCbqozZ840HTt2dL129erV5rvvvjM1a9Z0Pc/BsFvKrFixwoQtI9cy3bp1M6+//roJW1au59N9cOHChbYLbsqV42HLzZ4Px73sv5kuZbw6SBZF2BT1Oq3jIiACIpAQAW6Kjz32mAknC1gr5Mknn7RZZpFyyy23mPr165shQ4YUOv7BBx/Y+1H79u1d2/zqq6/s8cqVK7ue52ClSpVs9h5l3ZQUade0QVvhAL5nPek64YwxnvL58ssv09XFhNr1VD5h/6LJlkEkNGIVFgERSDmBcGaWVTZTp041n3/+uU1/Zq1O165dC/qyadMmc/fdd5urrrqqSP9QCOXKlTOnn356kXMc2L17t+vxyINlyvy/21046cC1bNOmTW3acjjrzbfyQZmtXbvWpn4XV44//nhToUKFuJc7YwzHtVzLOse9xud6URoPeiqfNPZJTYuACOQYgQcffNCMGzfOcINcunSpHR2utEiZP3++tUzCGW1FRo/yCicbGEeBRBdwbswoDy/B8kGIm7gJVhgWES48v/LRRx/ZWBHWXHEEHjfeeKPdaSGe+FUqfsvFay/Z56V8kk1Y9YtAnhPAhR9Og7YxF+SZZ56xVky0a+vtt9+25zt37lyEGPEcr0WiFHa2yIm1VU54zY+t1/m3SCPhA7i0wplxbqdcj7Vt29bGmjJJihNTS0f/3e23dPREbYqACOQkAayRhx9+2I4N19q8efNM9+7dTThtuNB4UT7Eexo3blyEA7EYLB8viXXOucaxtKLbjawTyyfaIvNqM9XHY/U7si+x4l6p7nOs9qR8YtHROREQgUAIVKlSxdZDGjDWSb9+/QrVywahxILIOHMT3G2xrBrHKooVe3EsAqcvbu1QJpbrzu2aVB1zxhjekcG1Scf1F8tCdL0wTQfldksTeDUrAvlIgHRpMt169OhRaPhYPcR7vJQPbjqvWA0Vsb4H2bJliydWZwfsE0880bNMeKcAw5ogv4Ky+vbbb0u0Bx6bo8ZSiE5fwtsG2f/iwnST77//3h5u2LCh2+mMOyblk3FTog6JQO4SeP/99226NMokUpx4T6dOnezh5557zvTq1asgwQCF4axzcaPTvHlzu87FK15DnAflQ2ZZrJszwfpY56PbXrZsmenTp48pSZwlvGOBIcU8nrCL91//+te4yueMM86IV1VGnJfyyYhpUCdEIPcJ4BLDsnCL6RAHwl3kWCXhjUFN3759C6CQBo1VQ1abm5VAphquPLLq2M36pJNOKgR0+fLl1jq59NJLPUET68GqoC2/0qZNG7Nq1Sq/xUtU7sILL7TrmD777DPXej7++GObTYjSzgZRzCcbZkl9FIEcIEDchoSC6IB+eFNPu6bw5JNPtqMk9oMlEyk89WNdcIP1kqFDh1oF9sILLxQpwusHsIxGjhxZ5JxzgLpRkI715VkwTScYG2nZr776qmEdZqTw95w5c8wNN9xQoMDT1E3fzUr5+EalgiIgAiUlcOedd5rZs2ebt956y7rIJkyYYLe7Ce86bTZs2GDWrVtn7rnnHnP99dcXaorFpdx8WVfjJY0aNTLTpk0z9913n+F9N4688cYbdmeFZ5991hx33HFel9vFpWS7tW7d2rNMuk/cfvvt5rzzzjOXX355gQJiOyBcd6R9e73jKN39dmvf82Vy+D61w4EbMh0TgfwgwHYzuKqClpUrV9o91Kj7ggsusBtl8v9XXnnF7r3Wu3dv06pVqyLNXnfddXZNDU/+sYRtaB555BFrKVEvFhfKLNoVF13HxRdfbC2zyZMnR5/KqL8Z04svvmjefPNN64LkdeBnn3223TEiUzP13ABK+bhR0TEREAH7iulkKJ/iomVnBBagYiF57W9W3LqxvlA8ixcvtlv/SJJPQG635DNWCyIgAgEQQBmSoo1VE7SwCJZkBCmeoMl61yfLx5uNzohAXhPINMuHyQi/Mtq6mLBQ6tSpE8j8sOvCmWeeaRYtWlSwBVAgFauSmARk+cTEo5MiIAKZRICFlvfee6+N4QThEqQOYkkPPPCAFE+KJ1rKJ8XA1ZwIiEDJCJCQwEvl7rjjjpJVFL567NixdoPTnj17lrguVZAYASmfxHiptAiIQAYQGDZsmI3PeL2V1E8XyRJjtwXWxkhST0Axn9QzV4sikBUEMjHmkxXg1ElfBGT5+MKkQiIgAiIgAkESkPIJkqbqEgEREAER8EVAyscXJhUSAREQAREIkoCUT5A0VZcIiIAIiIAvAlI+vjCpkAiIgAiIQJAEpHyCpKm6REAEREAEfBGQ8vGFSYVEQAREQASCJCDlEyRN1SUCIiACIuCLgJSPL0wqJAIiIAIiECQBKZ8gaaouERABERABXwSkfHxhUiEREAEREIEgCUj5BElTdYmACIiACPgiIOXjC5MKiYAIiIAIBElAyidImqpLBERABETAFwEpH1+YVEgEREAERCBIAlI+QdJUXSIgAiIgAr4ISPn4wqRCIiACIiACQRKQ8gmSpuoSAREQARHwRUDKxxcmFRIBERABEQiSgJRPkDRVlwiIgAiIgC8CUj6+MKmQCIiACIhAkASkfIKkqbpEQAREQAR8EZDy8YVJhURABERABIIkIOXjg+acOXPMiy++6KOkioiACIiACPghUMZPoSDLvPnmm2bq1Klm37595vDhw7bqcuXK2U+kHDhwwPBx5Mc//rEZN25ckF3xVde2bdvM+PHjTZs2bUzv3r19XaNCIiACIiACsQmkXPmcf/75hs9HH31krr32WnPssceauXPnmsqVKxfp6f79+80777xj/vKXv5idO3cWOZ+KA5MmTTK7d+82W7ZsSUVzakMEREAE8oJAypWPQ/XLL7+0/8WicVM8nKtQoYL5+c9/btavX28/qZZPP/3ULF261Da7efPmVDev9kRABEQgZwmkLebz4YcfWqht27aNC7dRo0ambt26ccsFWeDo0aPm4YcfNiNGjLDVbt261XBMIgIiIAIiUHICaVE+oVDIOMrnpz/9adxRlCpVKuXK5+WXX7buwaZNm9r+oXi2b98et68qIAIiIAIiEJ9AWpTPV199ZXbs2GHKli1rTj311EK95CZPnCVSSEZo0aJF/NEEVAIlQxyqV69eplatWgW1btq0KaAWVI0IiIAI5DeBtMR8nDgKigcFFCkffPCBqVixYqFjHTt2TOksPfLII+b66683xxxzjO1f1apVza5du6zrLV+ETMR//vOf5u2337bJHvXr1zfnnHOO6datmyldurQrhu+//95gMS5btswcOnTIWo19+/Y1jRs3di2vgyIgAvlLIC2Wz5IlSyzxSJfbDz/8YDPgnLTmdE3J8uXLzZEjR8xpp51W0IUf/ehH9v/5onz27Nljfvvb35qF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"
    }
   },
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## Resolving integration constants \n",
    "### Equilibrium at the loaded end\n",
    "![image.png](attachment:image.png)\n",
    "\n",
    "__Conditions 1 and 2__: Stress in the free length and at the support must be equal to load over area: \n",
    "\n",
    "$\\sigma_\\mathrm{f}(0) = P/A_\\mathrm{f} \\; \\implies \\; P - \\sigma_\\mathrm{f}(0) A_\\mathrm{f} = 0 \\implies C = P / A_\\mathrm{f}$\n",
    "\n",
    "$\\sigma_\\mathrm{m}(0) = -P/A_\\mathrm{m} \\; \\implies \\; P + \\sigma_\\mathrm{f}(0) A_\\mathrm{f} = 0 \\implies D = - P / A_\\mathrm{D}$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 103,
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/latex": [
       "$\\displaystyle \\left( \\left\\{ C : \\frac{P}{A_\\mathrm{f}}\\right\\}, \\  \\left\\{ D : - \\frac{P}{A_\\mathrm{m}}\\right\\}\\right)$"
      ],
      "text/plain": [
       "⎛⎧        P      ⎫  ⎧       -P      ⎫⎞\n",
       "⎜⎨C: ────────────⎬, ⎨D: ────────────⎬⎟\n",
       "⎝⎩   A_\\mathrm{f}⎭  ⎩   A_\\mathrm{m}⎭⎠"
      ]
     },
     "execution_count": 103,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "eq_C = {P - sig_f.subs({x:0}) * A_f}\n",
    "C_subs = sp.solve(eq_C,C)   \n",
    "eq_D = {P + sig_m.subs({x:0}) * A_m}\n",
    "D_subs = sp.solve(eq_D,D)   \n",
    "C_subs, D_subs # display the result"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "**`sympy` explanation**: Let us explain the two lines\n",
    "\n",
    "__Line 1__: Defines the equation to solve $P - \\sigma_\\mathrm{f}(x=0) A_\\mathrm{f} = 0$ in curly braces `{}`. The resulting data type is a set. Set is an unordered container. The set was assigned to a variable `eq_C`. \n",
    "\n",
    "__Line 2__: Then we used the `sp.solve` method available in `sympy` package with two parameters. The first parameter is the equation to solve `eq_C` and the second is the variable `C` that we want to resolve. The result is obtained in form of a dictionary defining a key-value pair of the variable and the resolved expression. "
   ]
  },
  {
   "attachments": {
    "image.png": {
     "image/png": "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"
    }
   },
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "### Compatibility conditions\n",
    "![image.png](attachment:image.png)\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "__Condition 3__: The displacement of the matrix at the support must be zero, i.e.\n",
    "\n",
    "$u_\\mathrm{m}(0) = 0$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 104,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAD4AAAAVCAYAAAAeql2xAAAACXBIWXMAAA7EAAAOxAGVKw4bAAADIElEQVRYCd2Y3VEUQRCAD4oAUDOADA6MAMjAnwiUDKR8482CDA4jQMxAjEAhA8lAJAP8vqmdqZ3Znd3j7nw4u6qZme6env6d2WPj8fFxUsLp6el7aHvgDfOLkr8Oa+yeYucx+Au8YP3Qtnuj7TjMbZjfwWvmJ23BdZ3jxyG2X4EHzG+jH1tx0oxvGKcImO0qwP8A8whUqXAN3oXZZPKc0QDuN+MJ8ucNb2UDOs9Q9hs0k7vgJbTkGOsA0EziFxafweRX6bgKogNhY98fFOnIOaN9cstoEDoA/RvErMQ6QgsQ0HvDtk+MX93OaKBtyyOwz35tUCbBZpo9ccIB9pBgtmtgifUZUpMfpXOu988OY3DaDcx1zLXnzQULO472WOZmtQb3MMRVwmuU9QX7B3TbNMts7eBlHH/bKP3ZVs7BO+0185VmHH0x4MUxqaVq/Ey+7PGMObKw1O+aMguijdMeHJ5A1qkch3Qh55PjXWE2qwA/ZnOoisrAR31eugnKjLvJfhkEDIhRLUvOm7akjenSGY2qGdzeH43vs3EoGAY2Bi3oSxnHmVdQdOggcIb/xFt8n30zRDUoBIP1k0obeZ14Nnxch5s5UXBfFOsJZ/gBcwzOHOVvMZkymikjvsd6HsNjxv0oCNFn1Bjfyn8JQ1mN1eDb3gHs07cr0OzPNpnEd9hI+BYaiDFQJuvvZsPl2MZl+NgWgoyO6GRbXayC3sSx17d/wrgLnqceZ2Fvima/CsjFbGcXF/QHMKNVlSzH0MboZFtTDEbnjsEu336funR5JscbDUZr7JKJ/T30frcNWvXcjxQ/h0vwq9PqjVXR5svL6KXjbeHa3EtwwgGdyNY2DNHRsw3+AUMpDsnKQ86n8p4x2NHQrACz+s51BbL7YasilJE5RMW2gJEOFQHNyKvsjHlvX8EbBfbaIup5ig5/bHxkX6zOl6yzX19jB8/ruGUSnoExhYvwccBSnBsMFsJL/WzuK/V4ScxtyDoKlo53vnDW0akem21VqyRB5jgl5MXhzTj4pKXdazDBF59f/8GStUb2r6foB8LemD5b/+3/3P4Chn8OBSzvxOwAAAAASUVORK5CYII=\n",
      "text/latex": [
       "$\\displaystyle \\left\\{ F : 0\\right\\}$"
      ],
      "text/plain": [
       "{F: 0}"
      ]
     },
     "execution_count": 104,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "F_subs = sp.solve({u_m.subs(x,0) - 0}, F)\n",
    "F_subs"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "__Condition 4__: Let us now require that at the end of unknown debonded length $a < 0$, the slip between the reinforcement and the matrix will be zero, i.e. $u_\\mathrm{f}(a) = u_\\mathrm{m}(a)$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 105,
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/latex": [
       "$\\displaystyle \\left\\{ E : - \\frac{P a}{A_\\mathrm{m} E_\\mathrm{m}} - \\frac{a^{2} p \\tau}{2 A_\\mathrm{m} E_\\mathrm{m}} - \\frac{P a}{A_\\mathrm{f} E_\\mathrm{f}} - \\frac{a^{2} p \\tau}{2 A_\\mathrm{f} E_\\mathrm{f}}\\right\\}$"
      ],
      "text/plain": [
       "⎧                                             2                               \n",
       "⎪                P⋅a                         a ⋅p⋅τ                        P⋅a\n",
       "⎨E: - ───────────────────────── - ─────────────────────────── - ──────────────\n",
       "⎪     A_\\mathrm{m}⋅E_\\mathrm{m}   2⋅A_\\mathrm{m}⋅E_\\mathrm{m}   A_\\mathrm{f}⋅E\n",
       "⎩                                                                             \n",
       "\n",
       "                          2              ⎫\n",
       "                         a ⋅p⋅τ          ⎪\n",
       "─────────── - ───────────────────────────⎬\n",
       "_\\mathrm{f}   2⋅A_\\mathrm{f}⋅E_\\mathrm{f}⎪\n",
       "                                         ⎭"
      ]
     },
     "execution_count": 105,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "eqns_u_equal = {u_f.subs(C_subs).subs(x,a) - u_m.subs(D_subs).subs(F_subs).subs(x,a)}\n",
    "E_subs = sp.solve(eqns_u_equal,E)\n",
    "E_subs"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "__Condition 5__: To resolve for $a$ we postulate, that the strains $\\varepsilon_\\mathrm{f}$ and $\\varepsilon_\\mathrm{m $ are equal if there is no slip between the two components. This means that at the end of the debonded length $\\varepsilon_\\mathrm{f}(a) = \\varepsilon_\\mathrm{m}(a)$:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 106,
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/latex": [
       "$\\displaystyle \\left\\{- \\frac{- \\frac{P}{A_\\mathrm{m}} - \\frac{a p \\tau}{A_\\mathrm{m}}}{E_\\mathrm{m}} + \\frac{\\frac{P}{A_\\mathrm{f}} + \\frac{a p \\tau}{A_\\mathrm{f}}}{E_\\mathrm{f}}\\right\\}$"
      ],
      "text/plain": [
       "⎧         P            a⋅p⋅τ            P            a⋅p⋅τ    ⎫\n",
       "⎪  - ──────────── - ────────────   ──────────── + ────────────⎪\n",
       "⎨    A_\\mathrm{m}   A_\\mathrm{m}   A_\\mathrm{f}   A_\\mathrm{f}⎬\n",
       "⎪- ───────────────────────────── + ───────────────────────────⎪\n",
       "⎩           E_\\mathrm{m}                   E_\\mathrm{f}       ⎭"
      ]
     },
     "execution_count": 106,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "eqns_eps_equal = {eps_f.subs(C_subs).subs(x,a) - eps_m.subs(D_subs).subs(x,a)}\n",
    "eqns_eps_equal"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 107,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/latex": [
       "$\\displaystyle \\left\\{ a : - \\frac{P}{p \\tau}\\right\\}$"
      ],
      "text/plain": [
       "⎧   -P ⎫\n",
       "⎨a: ───⎬\n",
       "⎩   p⋅τ⎭"
      ]
     },
     "execution_count": 107,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a_subs = sp.solve(eqns_eps_equal,a)\n",
    "a_subs"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "**sympy explanation:** The same methods of substitution and algebraic resolution were applied in the last step to resolve $a$\n",
    "\n",
    "Now all the unknown parameters are resolved. Lets put them all into a single dictionary called var_subs for convenience to avoid long substitution expressions to derive $u_\\mathrm{f}$, $\\varepsilon_\\mathrm{f}$ and $\\sigma_\\mathrm{f}$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 108,
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/latex": [
       "$\\displaystyle \\left\\{ C : \\frac{P}{A_\\mathrm{f}}, \\  D : - \\frac{P}{A_\\mathrm{m}}, \\  E : - \\frac{P a}{A_\\mathrm{m} E_\\mathrm{m}} - \\frac{a^{2} p \\tau}{2 A_\\mathrm{m} E_\\mathrm{m}} - \\frac{P a}{A_\\mathrm{f} E_\\mathrm{f}} - \\frac{a^{2} p \\tau}{2 A_\\mathrm{f} E_\\mathrm{f}}, \\  F : 0, \\  a : - \\frac{P}{p \\tau}\\right\\}$"
      ],
      "text/plain": [
       "⎧                                                                             \n",
       "⎪        P               -P                        P⋅a                        \n",
       "⎨C: ────────────, D: ────────────, E: - ───────────────────────── - ──────────\n",
       "⎪   A_\\mathrm{f}     A_\\mathrm{m}       A_\\mathrm{m}⋅E_\\mathrm{m}   2⋅A_\\mathr\n",
       "⎩                                                                             \n",
       "\n",
       "  2                                                         2                 \n",
       " a ⋅p⋅τ                        P⋅a                         a ⋅p⋅τ             \n",
       "───────────────── - ───────────────────────── - ───────────────────────────, F\n",
       "m{m}⋅E_\\mathrm{m}   A_\\mathrm{f}⋅E_\\mathrm{f}   2⋅A_\\mathrm{f}⋅E_\\mathrm{f}   \n",
       "                                                                              \n",
       "\n",
       "           ⎫\n",
       "        -P ⎪\n",
       ": 0, a: ───⎬\n",
       "        p⋅τ⎪\n",
       "           ⎭"
      ]
     },
     "execution_count": 108,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "var_subs = {}\n",
    "[var_subs.update(var) for var in [C_subs,D_subs,F_subs,E_subs,a_subs]]\n",
    "var_subs"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "With the known values of integration parameters we can resolve the sought displacement fields and plot them"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 109,
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/latex": [
       "$\\displaystyle \\left( \\frac{P^{2}}{2 A_\\mathrm{m} E_\\mathrm{m} p \\tau} + \\frac{P^{2}}{2 A_\\mathrm{f} E_\\mathrm{f} p \\tau} + \\frac{P x}{A_\\mathrm{f} E_\\mathrm{f}} + \\frac{p \\tau x^{2}}{2 A_\\mathrm{f} E_\\mathrm{f}}, \\  - \\frac{P x}{A_\\mathrm{m} E_\\mathrm{m}} - \\frac{p \\tau x^{2}}{2 A_\\mathrm{m} E_\\mathrm{m}}\\right)$"
      ],
      "text/plain": [
       "⎛                2                                 2                          \n",
       "⎜               P                                 P                           \n",
       "⎜─────────────────────────────── + ─────────────────────────────── + ─────────\n",
       "⎝2⋅A_\\mathrm{m}⋅E_\\mathrm{m}⋅p⋅τ   2⋅A_\\mathrm{f}⋅E_\\mathrm{f}⋅p⋅τ   A_\\mathrm\n",
       "\n",
       "                                   2                                          \n",
       "  P⋅x                         p⋅τ⋅x                          P⋅x              \n",
       "──────────────── + ───────────────────────────, - ───────────────────────── - \n",
       "{f}⋅E_\\mathrm{f}   2⋅A_\\mathrm{f}⋅E_\\mathrm{f}    A_\\mathrm{m}⋅E_\\mathrm{m}   \n",
       "\n",
       "                2          ⎞\n",
       "           p⋅τ⋅x           ⎟\n",
       "───────────────────────────⎟\n",
       "2⋅A_\\mathrm{m}⋅E_\\mathrm{m}⎠"
      ]
     },
     "execution_count": 109,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "u_f_x = u_f.subs(var_subs)\n",
    "u_m_x = u_m.subs(var_subs)\n",
    "u_f_x, u_m_x"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## Visualization of results\n",
    "We have derived a symbolic expression. But how to efficiently quantify it?\n",
    "### Substitute for material parameters\n",
    "Substitute for all the material and geometry parameters and the load P the value 1 and plot the curve"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 110,
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/latex": [
       "$\\displaystyle \\left( P^{2} + P x + \\frac{x^{2}}{2}, \\  - P x - \\frac{x^{2}}{2}\\right)$"
      ],
      "text/plain": [
       "⎛            2          2⎞\n",
       "⎜ 2         x          x ⎟\n",
       "⎜P  + P⋅x + ──, -P⋅x - ──⎟\n",
       "⎝           2          2 ⎠"
      ]
     },
     "execution_count": 110,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data_f = {L_b:1, p:1, E_f:1, A_f:1, tau:1, E_m:1, A_m:1}\n",
    "u_f_x.subs(data_f), u_m_x.subs(data_f)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "Let us now prepare this function for interactive visualization"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 111,
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(array([0.5  , 0.505, 0.52 , 0.545, 0.58 , 0.625, 0.68 , 0.745, 0.82 ,\n",
       "        0.905, 1.   ]),\n",
       " array([ 0.5  ,  0.495,  0.48 ,  0.455,  0.42 ,  0.375,  0.32 ,  0.255,\n",
       "         0.18 ,  0.095, -0.   ]))"
      ]
     },
     "execution_count": 111,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "get_u_f_x = sp.lambdify((x, P), u_f_x.subs(data_f))\n",
    "get_u_m_x = sp.lambdify((x, P), u_m_x.subs(data_f))\n",
    "x_range = np.linspace(-1, 0, 11)\n",
    "get_u_f_x(x_range, 1), get_u_m_x(x_range, 1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "**`sympy` explanation:** The obtained expression `u_f_x` contains symbols. To plot a function, the symbolic expression must be transformed to a quantifiable procedure. This is what `sp.lambdify` is doing. Its first argument  specifies the input variables for the generated \"lambdified\" function. In our case, it is `x` and `P`. The second argument is the expression to be evaluated, i.e. our solution with substituted data parameters `u_f_x.subs(data_f)`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 112,
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "outputs": [],
   "source": [
    "x_range = np.linspace(-2,0,100)\n",
    "u_f_x_range = get_u_f_x(x_range, 1)\n",
    "u_m_x_range = get_u_m_x(x_range, 1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "**`numpy` explanation:** To prepare an array of data we first generated an array `x_range` with 100 values in the range from (-2,0). Then the newly generated function `get_u_f_x` was called with these 100 values to get the corresponding value of displacement."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "**`matplotlib` explanation:** Let us plot the result using the matplotlib package. It is possible to invoke simply the method\n",
    "\n",
    "`plt.plot(x_range, u_f_range)`\n",
    "\n",
    "with the first argument specifying the data points along the horizontal and second argument along the vertical axis, respectively.\n",
    "\n",
    "But to prepare the later interaction with the model we directly use a more flexible plotting area with two subplots called `axes`. Such area is prepared using the function `plt.subplots(rows, cols)` which returns a figure and the `axes` for specified number of `rows` and `cols`. The returned `axes` objects can then be used to insert the data arrays as in the above `plt.plot` method. Below we construct a figure with two axes and plot into our displacement profile into the left diagram. We insert also a legend and fill the area between zero level and the data points with a value of opacity $0.2$. The second subplot axes is empty. It is prepared for the next diagram explained below."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 113,
   "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,iVBORw0KGgoAAAANSUhEUgAAAtAAAAFoCAYAAAB+JswZAAAgAElEQVR4nOydZ1gU58KGZxdpIijYTVTsLViDJYniiaKoR401sQQNwmeLmmhs8SiKImLHQhC7IiA2VGyooGIBBLEgTTq7SUwzxsREQZ7vR457Mi4gIOxsee7run+4F8sOw+773g4z7wgghBBCCCGElBpB6g0ghBBCCCFEl2BAE0IIIYQQUgYY0IQQQgghhJQBBjQhhBBCCCFlgAFNCCGEEEJIGWBAE0IIIYQQUgYY0IQQQgghhJQBBjQhhBBCCCFlgAFNCCGEEEJIGWBAE0IIIYQQUgYY0IQQQgghhJQBBjQhhBBCCCFlgAFNCCGEEEJIGWBAE0IIIYQQUgYY0IQQQgghhJQBBjQhhBBCCCFlgAH9Bjx69AihoaGIj49HYmIipZRSSinVUuPj4xEaGopHjx69cQMyoN+A0NBQCIJAKaWUUkp1xNDQ0DduQAb0GxAfH6/6RUj9vypKKaWUUlq8Lw98xsfHv3EDMqDfgMTERAiCgMTERKk3hRBCCCGElEBFdhsD+g1gQBNCCCGE6AYMaC2BAU0IIYQQohswoLUEBjQhhBBCiG7AgNYSGNCEEEIIIbqBQQf0b7/9hrlz58LR0RG1atWCIAhwd3cv9fMfPnyICRMmoGbNmjA3N0f37t1x4cKFcm0LA5oQUh7y8/Pxww8/IDMzExkZGbQMZmZmQqlU4smTJygsLJT6V0kI0SEMOqCzsrJQvXp19OrVC66urmUK6L/++gvvvPMO3n77bQQEBCA8PBxDhw5FlSpVcOnSpTJvCwOaEFJWCgsLkZWVhaSkJKSmpkoepLrmgwcPkJSUhKSkJHz//feMaEJIqTHogC4sLFQNmD/++GOZAnrr1q0QBAHXr19XPZafn4+2bduia9euZd4WBjQhpKw8fvwYSUlJUCqVjL9y8uzZM2RnZyMpKQlPnjyRenMIITqCQQf0PylrQPft2xetWrVSe3zlypUQBAEKhaJMry9FQP/6668aey1CSMWTl5eHpKQk5OfnS70pOs2zZ89U/xEhhOgmjx8/1uiBBAb0fylrQNerVw+jRo1SezwsLAyCIODcuXNlen1NB/SZM2dgbW2Ns2fPauT1CCEVT2ZmJtLS0qTeDL3gwYMHyMzMlHozCCHl4MGDB2jevDmWLl2qsddkQP+Xsga0sbExJk+erPb49evXIQgCAgMDi33uw4cPi70lpCYC+ueff4aVlRUEQYCRkRF27NhR6a9JCKl4MjIykJ6eLvVm6AXp6enIyMiQejMIIWUkOjpatRCEIAiIiIjQyOsyoP9LeQJ6ypQpao+/DOigoKBin+vu7q76Rb+qpo5AHz58GGZmZqrXXbx4Mc+hJETHeHkxHHlzuC8J0T1CQ0Nhbm6uaplp06Zp7JQ2BvR/0eQpHFIfgf7ntlavXl31xnN2dsazZ8809vqEkDeD0VdxcF8Solts3rwZMpkMgiBALpfj66+/RlZWFl68eKGR12dA/5eyBrSjoyNat26t9riXlxcEQSjzxShSXET48OFDHD9+HA0bNlRFdJ8+ffD48WONbQMhpPww+ioO7ktCdIMXL17gq6++UnWLubk5fH19kZSUxICWgrIGtK+vLwRBQHR0tOqx/Px8tGvXDt26dSvz60sV0Hfu3MGdO3fQvn171ZvRzs4OeXl5GtsOQkj5YPRVHNyXhGg/f/75Jz7++GNVr9jY2ODQoUNQKpVITk5mQGuS06dP49ChQ9i1axcEQcCoUaNw6NAhHDp0CH/88QcAwMXFBUZGRsjOzlY976+//kK7du3QsGFDHDhwAOfPn8ewYcN06kYqLwNaqVTiwYMH6NOnj+pNWb9+fdy6dUtj20IIKTuMvoqD+5IQ7eaHH37Ae++9p+oUW1tbREREQKlUMqCloHHjxsVe0JeVlQUAmDBhgujfL/n+++/h7OwMGxsbmJmZoXv37jh//ny5tkPqgFYqlcjNzYWzs7Pq57ewsEBYWJjGtocQUjYMIfpq166NqVOnqj1ub2+PAQMGVNjrGMK+JERXSUlJQbNmzVR90rlzZ8THx6v6hQFtwGhDQCuVSigUCri7u4tOzN+8ebPGtokQUnr0Pfqys7MhCAK2b98uejw/Px+mpqZYtGgRACApKQl2dnaoVq0agoODy/Va+r4vCdFVLl++DGtra1U8Dxw4EKmpqaJ2YUAbMNoS0C/dsWOHaJm7WbNmoaCgQGPbRgh5PcVF36xZs+Dg4KA1zpo1q1w/3+HDhyEIgtrpZAkJCRAEAUeOHAEAfPbZZ1i4cGG5XuMlDGhCtI99+/bB2NhY1SJTpkxBTk5Okd3CgDZQtC2glUolTp8+jdq1a6veuIMHD8aTJ080tn2EkJIpLvocHByKPTVNCh0cHMr18y1YsAAmJiZ4/vy56PEdO3aITqvr06cP9u/fX67XeAkDmhDtobCwUHTPDGNjY3h6eiIvL6/YZmFAGyjaGNBKpRIxMTFo2bKl6k3cvn175ObmamwbCSHFo+9HoPv06YMuXbqoPT516lTY2NgAAJycnCCXy2FqagoLCwv89NNP5XotBjQh2sHTp0/xySefqLrDysoKe/fuhUKhKLFXGNAGirYG9Ms3Za9evVRv5rp16yI2NlZj20kIKRp9jz4bGxu4ubmpPd68eXP07dtX9W8HBwcegSZED/juu+/QrVs3VW80bNgQZ8+efW2nMKANGG0OaKVSiZycHNVqJIIgwMzMDAcPHtTYthJC1NHn6Hv27BkEQcDSpUtFj788L3revHmqxxjQhOg+d+7cEd3YrUuXLoiLiytVozCgDRhtD+iXLl++HEZGRqo3uIeHBwoLCzW2zYSQ/6Hv0de0aVN06tQJ6enpUCqV2Lp1q2rp0X+utsGAJkS3OXHiBCwsLFRtMWzYMKSlpZWpTxjQBoquBLRSqURAQACqVaumeqOPGTMGT58+1dh2E0L+Rt+jLyoqCu3bt4epqSlsbW0xd+5c+Pn5QRAEpKWlqb6OAU2IblJYWIg1a9aols6VyWT48ssvi11pgwFN1NClgFYqlYiMjMTbb7+tiuh3330XCoVCY9tOCGH0vYQBTYju8eeff4pu3mZubo5Nmza99mJBBjQRoWsBrVQqcffuXXTt2lX15q9Xrx5iYmI0tv2EGDqMvr9hQBOiW3z33Xfo3r27qB9CQ0PL3SMMaANGFwNaqVQiKysLY8aMUX0ITE1NceDAAY39DIQYMoy+ioP7khDNEB8fL/oLdseOHREdHf1GLcKANmB0NaCVyr9v//3qxYXz58/nnQsJqWQYfRUH9yUhlc/Bgwdhbm6uaoWhQ4cWeVtuBjQpNboc0C8NDg6GlZWV6H71v/76q8Z+HkIMDUZfxcF9SUjlUVBQgK+//lrVB3K5HHPnzi3XxYIMaCJCHwJaqVQiKioKzZo1U31IWrZsieTkZI39TIQYEoy+ioP7kpDK4dGjRxg0aJCqCywtLbFt27ZyXyzIgCYi9CWglUolUlJS0KdPH9FtOE+ePKmxn4sQQ4HRV3FwXxJS8SQlJaFly5aqHmjSpAnOnTtX4d3BgDZg9CmglUol8vLyMGvWLNWHRiaT8aYrhFQwjL6Kg/uSkIrlxIkTsLS0VHVA7969K605GNAGjL4F9Ev9/f1FFwwMHz4cv/32m8Z+RkL0GUZfxcF9SUjF8OLFC3h4eKhujiIIAqZMmYKsrKxK7Q0GtIGirwGtVCpx8eJFNGrUSPVBat26NVJSUjT2cxKirzD6Kg7uS0LenF9//RWDBw9WzfdVq1aFj49PhZ/vzIAmKvQ5oJVKJe7fv4+ePXuKLiI4duyYxn5WQvQRRl/FwX1JyJuRmJiIFi1aqOb5Ro0aISwsTCONwYA2YPQ9oJVKJXJzczFjxgzVh0sQBCxcuJDrRRNSThh9FQf3JSHl5+DBg7CwsBCd73z79m2N9QUD2oAxhIB+6c6dO0UfNEdHR/z0008a+7kJ0RcYfRUH9yUhZSc/Px9fffWVaMGAzz//vNLPd2ZAExWGFNBKpRKXL19G8+bNRX/quXnzpsZ+dkL0AUZfxcF9SUjZ+O6779C7d2/RkrV+fn4aOd+ZAU1UGFpAK5VKpKamYsCAAaoPn4mJCfz8/LjUHSGlhNFXcXBfElJ6rly5gvr164tumnbhwgXJeoIBbcAYYkArlUooFAosXrwYRkZGqg/i+PHj8ccff2hsPxCiqzD6Kg7uS0JeT2FhIdauXSuaswcPHoykpCRJW4IBbcAYakC/9OjRo6hdu7bqA9muXTukpqZqbF8QoosYQvTVrl0bU6dOVXvc3t4eAwYMqLDXMYR9Scib8Ouvv2L48OGivxq7u7sjNzdX8oZgQBswhh7QSqUSt2/fRvfu3UVL3R06dEhj+4MQXUPfoy87OxuCIGD79u2ix/Pz82FqaopFixZV2Gvp+74k5E24c+eOaIm6t956C4cPH5a8GxjQhAH9X3NycjB9+nTRUnfTp0/HX3/9pbH9QoiuUFz0zTozCw67HbTGWWdmlevnO3z4MARBwK1bt0SPJyQkQBAEHDlypFzftygY0ISoU1hYCH9/f5iZmanm5F69eiE+Pl7yXmBAEwAM6FfdvXs3rKysVB/YLl26cHIj5BWKiz6H3Q4Qlgpao8Nuh3L9fAsWLICJiQmeP38uenzHjh0QBAFZWVnl+r5FwYAmRMyTJ08wbtw41Twsl8sxY8YMZGdnS94IDGiiggGtbnR0NNq3b6/68FavXh1Hjx7V2P4hRNvR9yPQffr0QZcuXdQenzp1KmxsbFT/FgQBvr6+sLW1RfXq1eHr64sbN26gbdu2qFGjBpYtW1bufUmIIXL37l20atVKNf/Wrl0be/fulWyJOgY0KRYGdNFmZWXBxcVFdErHzJkz8ezZM43tJ0K0FX2PPhsbG7i5uak93rx5c/Tt21f1b0EQ8PHHH+OPP/5AREQETE1NMXr0aPzyyy9ITk6GmZkZ0tPTS3wtfd+XhJSGwsJC7NixQ3TKRvfu3RETEyN5DzCgSZEwoEvW398flpaWqg90586d8eDBA43tK0K0EX2OvmfPnkEQBCxdulT0+MvzoufNm6d6TBAExMfHq/5dp04d0V+runbt+tq/XunzviSkNDx+/BhjxowRnbIxffp0ZGZmSt4ADGhSLAzo13vjxg3Y2dmpPtzVqlXDgQMHNLa/CNE29D36mjZtik6dOiE9PR1KpRJbt25F48aNIQgCgoODVV8nCALy8vJU/27cuDGioqJU/3ZwcMD+/ftLfC1935eElMTNmzfRrFkz1fxaq1Yt7N69W6tP2WBAEwAM6NKalZUFNzc30SkdEydOxO+//66x/UaItqDv0RcVFYX27dvD1NQUtra2mDt3Lvz8/CAIAtLS0lRfx4AmpHy8ePEC69atg7GxsWpOfe+993TilA0GNAHAgC6re/fuhbW1teoD36pVK9y+fVtj+44QbYDR9zcMaELKzg8//ICBAweq5tEqVapg9uzZWrvKBgOaFAkDuuzGx8eLbrxiamoKHx8fFBYWamwfEiIljL6/YUATUjbCw8NRr1490Y1RQkJCdOqUDQY0AcCALq+5ubmYM2cO5HK5aiBwcnLC999/r7H9SIhUMPoqDu5LYgj89ddfmDNnjug0yH79+uH27duSz+cMaFIuGNBv5rFjx9CgQQPVgFCnTh2cPn1aY/uSEClg9FUc3JdE30lOTkanTp1U86S5uTk8PDyQk5Mj+RzOgCblhgFdMR+ewYMHq60Z/eeff2psnxKiSRh9FQf3JdFXXt6O29zcXDU3tm3bFufOnZN83mZA/43OBfSTJ08wa9Ys1K9fH6ampujQoQOCgoJK9dyIiAj07dsXtWvXhoWFBezs7ODj44OCgoJybQsDumJUKBTYuHEjLCwsVANFu3btcOfOHY3tV0I0BaOv4uC+JPrIDz/8gI8++kg1H8pkMri4uCAtLU3y+ZoB/T90LqAdHR1Ro0YN+Pn5ISIiAq6urhAE4bVrC58/fx5yuRy9e/dGaGgozp8/jxkzZqiOeJYHBnTFev36dXTo0EE1aJiYmGDNmjUa+2ARogkYfRUH9yXRN8LCwlC3bl3RqY26trYzA1oLOXXqFARBQGBgoOhxR0dHNGjQoMQjyePGjYOpqana2sP9+vWDlZVVubaHAV3xZmdnY9asWTAyMlINIA4ODsjOztbYPiakMsnIyHjtLapJ6UhPT2dAE73g999/x5QpU0SnMzo6OiIuLk7yeZkBXTQ6FdCurq6oVq0a8vPzRY8HBgZCEARcu3at2OdOnDgRlpaWar+k0aNHo06dOuXaHgZ05XnixAnV3csEQYCVlRX279/P5e6IzpOVlYXU1FS+l9+QwsJCpKamIjMzU+pNIeSNiImJQYsWLVTznYWFBTw9PZGbmyv5XMyALh6dCuju3bvD3t5e7fGXO2Tbtm3FPjc6OhqmpqaYPn06lEolHj16hH379sHY2Bhr164t1/YwoCvXtLQ0jBkzRvQ/8hEjRuCHH37Q2P4mpKL59ttvkZSUhO+//54RXU7y8/OhVCqRlJTE8YDoLM+ePcPixYtFf3Ht3LkzIiMjJZ9/GdCvR6cCukWLFujfv7/a499++y0EQcDKlStLfP61a9dEy6YZGRlh9erVpXrthw8fIjExUWRoaCgDWgPu2rULNWvWFJ0Tdvz4cY3tc0IqkhcvXiArKwtJSUlITU1VnYZAX296ejrS0tKQlJSEpKQkZGdnq/1FkhBd4O7du6Ll6YyNjfHFF18gMzNT8jmXAV06dC6gnZyc1B5/GdBeXl7FPjcuLg516tTB4MGDcfLkSUREROA///kPTExM4OHh8drXdnd3Fx0J/acM6Mr3zp076Nevn2i/Ozs749GjRxrb94RUFC9evMC3336LrKwsyaNU18zMzEReXh4eP37MI/hE5ygoKMCqVatgYmKimstatmyJ0NBQvb1QkAGtBbzJKRzdunWDnZ2d2oWGS5YsgVwuR0ZGyRei8Ai09CoUCvj4+MDS0lJ0K9Pw8HCN7X9CCCGkPKSlpaFHjx6q+Usul8PV1RWpqamSz68M6LKjUwHt5uZW5EWEQUFBr72I0NTUFBMnTlR7/OTJkxAEAWFhYWXeHp4DLY03b95Ez549RUej/+///g+PHz/W2O+BEEIIKQ0FBQVYv3696KYotra2OHjwoEEedWZAS8Dp06chCAKCg4NFjzs5Ob12GbsmTZrgnXfeUfuar7/+GoIg4Pbt22XeHga0dCoUCnh5eYkGpLfffhvnzp3T2O+CEEIIKYmUlBS89957ogM+48aNQ1JSkuTzqDbIgNYgjo6OsLa2hr+/PyIiIuDm5gZBEBAQEKD6GhcXFxgZGYnWDt60aRMEQcCAAQMQGhqK8PBwzJ8/H1WqVEHfvn3LtS0MaOm9ceMGunfvLhqcXFxc8Ouvv2rsd0IIIYT8k4KCAqxZswZmZmaqualhw4bYu3evwR91/qcMaA3y5MkTzJw5E/Xq1YOJiQnat2+vdivvCRMmQBAEZGVliR4/cuQIPvjgA9SqVQsWFhZo164dli9frnZzldLCgNYO8/Ly4OnpiapVq4rOjT516pTGfi+EEEIIACQlJYkO7MhkMowfPx7379+XfL7UNhnQBgoDWruMiYnB+++/LzoaPXbsWPz4448a+/0QQggxTJ49ewYPDw/RChuNGzdGYGAgjzoXIwPaQGFAa58KhQLe3t6oVq2aagCrVasWDhw4wCWvCCGEVAoxMTGws7MTrbDh7OzMc51fIwPaQGFAa69xcXHo06eP6Gj0gAEDkJubq7HfFSGEEP3m999/x5dffgm5XK6aa5o3b46QkBAedS6FDGgDhQGt3SoUCvj6+sLGxkY1sFWrVg2bN28uccUWQggh5HWcO3cOTZo0Ed1NcPr06UhLS5N8/tMVGdAGCgNaN7x37x6GDRsmOhptb2+PhIQEjf3eCCGE6Afff/89xo4dK5pTOnTogNOnT0s+3+maDGgDhQGtW+7fvx9vv/22asAzMjLCnDlzyr0KCyGEEMPhxYsX8Pf3R40aNVTziIWFBRYsWIDMzEzJ5zhdlAFtoDCgdc/09HRMmTIFRkZGoqukueQdIYSQ4rh//z4++OAD0VHnDz/8EFFRUZLPa7osA9pAYUDrruHh4ejYsaNoMBw+fDgvMiSEEKLi999/V9107eVcUbduXWzevBl5eXmSz2W6LgPaQGFA67Z5eXlYsWKFaMk7CwsLrFmzBs+fP9fY75QQQoh2UVhYiGPHjqFRo0aipenGjx+Pu3fvSj5/6YsMaAOFAa0f3rp1C0OGDBEdjW7bti0uX76ssd8rIYQQ7SAjIwODBg0SzQnvvPMOjh49yqXpKlgGtIHCgNYvg4ODRUsSCYKATz/9FN99953Gfr+EEEKk4c8//4SHhwfMzMxUc4CVlRWWLFmCrKwsyecofZQBbaAwoPXPrKwszJ07VzSAWlpaYt26dTytgxBC9JDCwkKEhoaqHUAZOnQoYmNjJZ+X9FkGtIHCgNZfo6Oj0bdvX9Fg2rp1a5w/f15jv2tCCCGVS0pKCvr37y8a61u2bIkDBw7wdA0NyIA2UBjQ+u++fftga2urtlpHdna2xn7nhBBCKpbffvsN8+fPh7Gxseh0ja+//hoZGRmSzz2GIgPaQGFAG4ZZWVlYsGABzM3NVQOtmZkZ/vOf/+DJkyca+90TQgh5M168eIFdu3ahXr16qvFcJpNhxIgRPF1DAhnQBgoD2rCMi4tTW62jQYMG2Lt3r8Y+/IQQQspHVFQUunTpIhrD27dvj8OHD/N0DYlkQBsoDGjDNDQ0FO+8845oELa3t8f169c19j4ghBBSOrKzszF69GjRmF2nTh2sWrUK2dnZks8phiwD2kBhQBuueXl5WLduHWrXri0alD/++GNkZmZq7P1ACCGkaB4/foyFCxeKVlUyNTXF5MmTcf/+fcnnEcqANlgY0DQtLQ3Tpk2DiYmJaoA2MTHBnDlz8Msvv2jsfUEIIeRvnj9/jq1bt6od4HBycsKVK1cknzfo/2RAGygMaPrS6OhoDB48WDRYW1tbY8OGDXj27JnG3h+EEGKoFBYW4vjx42jVqpXaec6BgYE8z1kLZUAbKAxo+qonT57Eu+++Kxq8mzZtiqCgIF5oSAghlcSNGzfQq1cv0dj71ltvYd26dcjJyZF8bqBFy4A2UBjQtCgVCgW2b9+Oxo0biwbzTp06ITw8XGPvFUII0XeSk5MxbNgw0VhrZWWFr776CqmpqZLPB7RkGdAGCgOalmR2djaWLVsGGxsb0eDep08fxMXFaew9Qwgh+oZCoYCrqyvkcrlqbDU2NoazszPi4+MlH/9p6WRAGygMaFoaU1NTMWvWLFStWlUU0qNGjUJycrLG3juEEKLr/PTTT5g7d65oZQ2ZTIYhQ4bg8uXLko/3tGwyoA0UBjQti3fu3IGzszOqVKmiGvjlcjkmTpyIrKwsjb2HCCFE13j8+DHc3d1haWkpOhDRq1cvnDx5khcI6qgMaAOFAU3L47Vr1zBkyBDIZDLRnx6nTp0KpVKpsfcSIYRoO3/88Qe8vb3VToXr1KkTAgICkJeXJ/mYTssvA9pAYUDTN/HChQtwdHQUTQpmZmaYPXs2vv/+e429pwghRNt4+vQpNm7ciHr16onGyLZt28Lf3x+5ubmSj+H0zWVAGygMaFoRnjp1Ch988IFokjA3N8ecOXMY0oQQg+Lp06fw8fFB/fr1RWNis2bN4OPjwyXp9EwGtIHCgKYV6aFDh9CtWze1kP7qq6/w8OFDjb3HCCFE0/z555/YtGmTWjg3btwYq1atQmZmpuRjNK14GdAGCgOaVoYhISGwt7dXC+kvv/wSSiXPkSaE6A+///471q9frxbOjRo1gpeXFzIyMiQfk2nlyYA2UBjQtDINCQlRu6uhiYkJpkyZwlU7CCE6za+//gpPT0/UqlVLLZxXrlzJcDYQGdAGCgOaasKQkBD06NFDNMkYGRlh4sSJSElJ0dh7jxBC3pSffvoJixcvRvXq1UVjmq2tLTw9PRnOBiYD2kBhQFNNGhoait69e4smHZlMhuHDhyMmJkZj70FCCCkr2dnZmDlzptoNpVq2bIl169bxHGcDlQFtoDCgqRSePXsW/fv3F01CgiCgd+/eOHPmDAoLCzX2fiSEkJK4e/cuxo8fDyMjI9F49c4778DX15erahi4DGgDhQFNpTQyMhIjRowQ3dlQEAR06NAB+/fvx/PnzzX2viSEkJcUFhYiIiICAwcOVPuPfvfu3bFr1y6GM4VSyYA2WBjQVBuMjY2Fi4uL2p9G33rrLXh7e+PRo0cae38SQgyX58+fIyAgAJ06dRKNRXK5HP369cPRo0d550AqkgFtoDCgqTZ5//59zJ49W+2WtxYWFpg5cyYyMjI09j4lhBgOjx49gre3N9566y3R2GNqaopRo0bhwoULUCgUko+RVPtkQBsoDGiqjWZkZMDb2xvNmjVTOwr00UcfISIigudJE0LemOTkZEybNg0WFhaiscbGxgbTpk1DbGys5OMh1W4Z0BrkyZMnmDVrFurXrw9TU1N06NABQUFBpX5+aGgoevXqBUtLS1StWhVt27bFtm3byrUtDGiqzSoUCuzbtw/vvfee2nmIdnZ22L59O/744w+NvXcJIbrPixcvcOrUqSIvZG7WrBk8PDyQkpIi+fhHdUMGtAZxdHREjRo14Ofnh4iICLi6ukIQBBw4cOC1z/Xy8oJcLse0adNw5swZXLhwAVu2bMHmzZvLtS0MaKorhoeHY9SoUTA1NVU7UjRv3jye3kEIKZFHjx5h48aNaN68uVo4f/DBB9i+fTsvDKRllgENID4+vlz++eefpX6NU6dOQRAEBAYGih53dHREgwYNUFBQUOxz4+LiIJfL4e3tXe6f8VUY0FTXvHfvHubOnYu6deuqrSc9YMAAnDx5ssTPESHEsIiLi4OLiwvMzc1FY8/4vCcAACAASURBVEbVqlUxZswYhIeH8/xmWm4Z0ABkMhnkcnmZjY+PL/VruLq6olq1asjPzxc9HhgYCEEQcO3atWKfO3HiRJibm+Pp06fl/hlfhQFNddWcnBz4+vqiS5cuakeTGjduDE9PT3z//fcae18TQrSHP/74A7t374a9vX2R48OCBQs4D9EKkQGNvwN68eLF2LNnT6ncuXNnmQO6e/fusLe3V3v85Q4p6Vzmpk2bonPnzti/fz9atmwJuVyOt956C/Pnz8ezZ8/K9TMzoKk+eP78eYwbN05tGbwqVapg+PDhOHPmDI9KE2IAJCQkYNq0aWq32ZbL5fjwww+xc+dOZGdnSz5mUf2RAY2/A7ostxMuKCiATCYrU0C3aNEC/fv3V3v822+/hSAIWLlyZbHPNTU1haWlJaytrbFlyxZERERg0aJFMDIywtixY1/72g8fPkRiYqLI0NBQBjTVG1NTU7F8+XK0bNlS7ahTo0aNsHTpUuTm5mrsvU4IqXweP34MPz8/vPvuu2qf+1q1amHKlCmIioriaRq0UmRA4+/VLX799dcyP+fx48el/voWLVrAyclJ7fGXAe3l5VXsc42NjSEIgtqKHV988QUEQcCDBw9KfG13d3e1weWlDGiqTyoUChw9ehTDhw+HmZmZ2pGo/v37IygoqEzXLxBCtIcXL14gMjISzs7Oan95kslkeP/99+Hj44MHDx5IPh5R/ZYBrSHe5BSOevXqQRAE/PLLL6LHz507B0EQcPDgwRJfm0egqSGanJyM5cuXo23btmr/caxRowamTJmC6OhoritNiA6QmZkJd3d32Nraqn2e69ati6lTp+Ly5cs82kw1JgNaQ7i5uRV5EWFQUNBrLyLs169fkQF99uxZCIKAQ4cOlXl7eA40NSRPnz6NcePGwcrKSm3ybd26NVasWIGsrCyNfRYIIa/nl19+gb+/PxwcHNQ+t8bGxujbty+2bduGzMxMyccYangyoIvg2LFjGDlyJOzt7WFnZyeyffv25fqep0+fhiAICA4OFj3u5OT02mXstm3bVuR60TNnzoRcLkd2dnaZt4cBTQ3RzMxMbN26Fb169YJcLi9yTVg/Pz/8/PPPGvtcEEL+x19//YUjR45g+PDhMDExUfuMtm3bFl9//TXi4uIkH0+oYcuAfoXVq1dDJpOhTp06eO+999C7d281y4ujoyOsra3h7++PiIgIuLm5QRAEBAQEqL7GxcUFRkZGoih+/vw5OnfujOrVq8PHxwfnz5/H/PnzYWRkhM8//7xc28KApoZuXFwc5s2bhxYtWhR5dGvw4ME4cOAAfvvtN419RggxRPLz83Hu3Dm4uLigRo0aap/H2rVrw9nZGWFhYcjLy5N87KBUqWRAq2Fra4tJkyZVytJXT548wcyZM1GvXj2YmJigffv2ahcGTpgwAYIgqP05+eeff8bkyZNRt25dGBsbo2XLllizZk25f3EMaEr/Z3h4OFxdXVGnTh21ydvMzAwjRoxASEgIbx9OSAVRUFCAyMhITJkyBbVq1VL73FlYWGDo0KHYs2cPT9GgWikD+hUsLS1x8eLFyvjWWgUDmlJ1c3NzERQUhJEjRxZ5vrSFhQVGjx6NgwcP8sg0IWUkPz8fFy5cwLRp01QXx7/6l5/evXtj/fr1SE5Olnw8oLQkGdCv4OTkhC1btlTGt9YqGNCUlmxWVhZ27dqFoUOHwsLCQm2yNzU1xZAhQ7Bnzx61C3wJIX/z119/ISwsDJ999hlsbGzUPkdVqlTB+++/j5UrV+L27duSf+4pLa0M6FdISUlBmzZtcPz48XLf5U8XYEBTWnozMjKwbds2DBo0qMiYNjIywr/+9S9s2LABGRkZGvtMEaKN/PTTT9i3bx9GjhyJatWqFRnNPXr0wLJlyxAfH8+l56hOyoB+hYKCAsyYMQNyuRxGRkawtLQUaWVlVRkvq3EY0JSWz8zMTOzevRsjRowo8oInQRDQrl07LFy4ENeuXeOtxIneU1hYiOTkZKxZswY9e/YscoUbU1NT9O7dG15eXkhISGA0U52XAf0Ks2fPhkwmQ6dOnTB27FhMnDhRTX2AAU3pm5uTk4PAwEB8+umneOutt4qMaRsbG3zyySfYt28fHj58qLHPGyGVye+//46TJ09i2rRpRd7cRBAEWFlZ4d///jc2bNiAxMREyT+vlFakDOhXsLGxwYIFCyrjW2sVDGhKK1aFQoHw8HDMnj0bdnZ2RQaFTCaDvb09Fi1ahEuXLun1aWJEvygsLMSdO3ewdu1a9OvXD6ampkW+xxs2bAhnZ2cEBAQgIyND8s8lpZUlA/oVqlevzlU4KgkGNDUk4+Pj4e3tDScnJ1haWhYZGxYWFhg4cCDWr1+Pe/fu8bbiRKvIy8vD7t27MXbs2CKXeHx5PnO3bt0wd+5cnD17Frm5uZJ/9ijVhAzoVxg1ahQ8PT0r41trFQxoSjVnTk4ODh06hMmTJ6N169ZFhsjLG0aMHDkSW7duxf379xnURKMoFAoEBATA1dUVzZs3L/Z92qBBA4waNQq+vr48NYMarAzoV7h79y7atGmDjRs34sGDB/j555/V1AcY0JRK5+3bt7Fx40aMGDGiyPVwXw3qjRs34ubNm8jPz9fY55XoN4WFhUhNTcWuXbvg4uJSYjBbWlriww8/xJIlS3DhwgUeZaZUyYBWQyaTQSaTQS6XF6s+wICmVDtUKBS4dOkSli5dCicnpyLXyv3nKR99+vTBkiVLcObMGb35Dz2pfJ4+fYpr165h7dq1GDZsGGrXrl3s+8zc3Bw9evTAF198gZCQEJ7LTGkRMqBfwd3dHUuXLi1RfYABTal2qlAocOHCBSxduhT9+/cv8jbH/7Rly5b49NNPsWXLFty8eRN//fWXxj7TRDt58eIFUlJSsHfvXkybNg1dunRBlSpVSvyPWY8ePTBr1iyEhIQgPT1d8s8BpdouA9pAYUBTqhsqFApcvXoVa9aswahRo9CsWbMSg9rY2BidOnXCpEmT4Ovri+joaDx9+lRjn3OiWfLz85GYmIh9+/bhiy++QM+ePYu8eck/rVOnDpycnLBo0SKcOHECmZmZkr/PKdU1GdAGCgOaUt313r172L17N2bMmIGePXuievXqJQaTXC5H69atMXr0aKxYsQLHjx9HVlYWL1LUMX744QdcuHABGzZswGeffYYuXbrAzMysxN+9mZkZOnXqhAkTJmDjxo2IioriOcyUVoAM6CI4duwYRo4cCXt7e9jZ2Yls3759Zb2sRmFAU6o/KhQKXLlyRRVWXbt2LXbpvH9arVo12Nvbw9nZGV5eXggNDUVaWhovVpSQFy9eIC8vD+Hh4fDx8cGUKVPQq1evEs9ZfqmJiQnatWuHUaNGYdmyZTh+/DhPx6C0kmRAv8Lq1ashk8lQp04dvPfee+jdu7ea+gADmlL9Ni8vD1euXMGmTZswZcoUODg4oH79+q+NsJdr+zZv3hwDBgzAzJkzsXnzZpw5cwYpKSk8HaQCyM/PR1ZWFiIjI7F9+3bMnz8fw4cPh52dHczNzUv1O6pevTrs7e0xfvx4eHp64uTJk4xlSjUoA/oVbG1tMWnSJBQUFFTGt9caGNCUGqb379/HwYMH4e7ujjFjxqBr166oWbNmqaLtpfXq1UP37t3xySefYN68edi0aROOHDmCmJgYKBQKvR8/S6KwsBA//vgjEhISEBYWBj8/P/znP//BhAkT4ODggMaNG8PIyKjU+9rCwgJ2dnYYOnQo5syZgx07duDGjRs8DYNSiWVAv4KlpSXvRFhJMKAp1V7v3r2LQ4cOYeXKlXBzc0Pfvn3RsmXL155jW5RGRkaoV68eOnTogH79+uHTTz/FV199hdWrV2Pnzp0IDQ3FlStXcP/+fXz33XdavXJIfn4+fvzxR6SmpuLGjRsICwvDvn37sGHDBixcuBAuLi4YNGgQ3n33XTRq1KjYW1y/7oh/o0aN0LNnT4wbNw6LFi3C7t27cf36deTk5Ej+3qCUqsuAfgUnJyds2bKlMr61VsGAppSWRoVCgdjYWAQHB2PNmjWYMWMGhg0bhq5du6JBgwYlLo9WFk1MTFCrVi3YNrGFXSc7dPuwG3oN7YU+n/SB02dOGDR1EIZ8OQTDFgzD8EXDMcJ9BEZ6jMTIFSMxymsURnmPwujVo0WO8h6FUatGYaTnSIxaPgojlo7AiP+MwLCFwzB0zlD8e/q/4TTJCX3H9oXDMAf06NcDHew7oHmL5qhbt26pT6d4nTKZDLVr10bHjh0xcOBA/N///R88PDywe/duREREICMjAwqFQvLfNaW09DKgXyElJQVt2rTB8ePH8ezZs8p4Ca2AAU0prQhzc3MRHx+PkydPws/PD+7u7pg8eTKGDx+O93u/jxb2LVCzQ01UaVcFQmcBwvsChL4ChCEChI8FCBMFCFMECLMECPMECIsFCEsldokAYYEA4UsBwjQBgosAYYwA4SMBQn8BQi8BwrsC5O/IUd2uOpq82wT2Pe3x78H/xsSJE7FgwQL4+PggJCQEV69eRXp6OgOZUj2TAf0KBQUFmDFjBuRyOYyMjGBpaSnSysqqMl5W4zCgKaXlVaFQ4F7GPZy+fRo7ru7A8nPLMf3YdAwPGI4e23rAdr0tLDwtpA9hDWu63BRvrX0LXXy7YNDeQXA97IrFZxbD94ovQuNDEZcWhzxFnuS/P0rpm8uAfoXZs2dDJpOhU6dOGDt2LCZOnKimPsCAppSWZFZuFi7fv4w91/fA/aw7Pgv5DH139UUrn1aouqLqG4WmsYcxaq6qCdv1trDbbIcefj3Qd1dfDN03FGOCxsD1kCtmhs7EgrAFcD/jDq/zXlgfsR5bL2/Fjqs7sOfaHuy7tg8Hrh5AwJUABF4OxIGLB3AgQt3AS4E4cOUAAqICsP/afuy9thc7r+7EN1e+wcbIjfC+4I1l55Zh0elFmH18NiYfmYzxweMxPGA4+u/uj57+PdFxa0c029AMtb1rw2y52Rv/7LbrbdFze0+MDRqLBacWwC/KD+funkNadprkv3dKaelkQL+CjY0NFixYUBnfWqtgQFNKlUol7qbfxZG4I/A674VJhybBYbsDGq1rBPkyeZnCsMqyKqi7ui7abmqLXtt7Yfj+4XA95Ip5YfPgfcEbO67uwLG4Y7iUeAmxKbGIS41DfFq8Tnot6RrCEsKw//p+bIjcgP+c/g+mHp2KjwM/Rt9dfdFxa0e8vfbtcsV2He866ObXDWODxmLJmSUIiA5ATEoMj1xTqmUyoF+hevXqXIWjkmBAUyqdadlpOHHrBLwveGNiyER08+sGay/rUodd1RVV0XRDU/TY1gPD9w/H9KPT4RnuiZ1Xd+JUwilEJ0frdBRXhnGpcYi4F4ED0Qew9uJazDkxB2OCxqD3jt5o5dMK1VdWL/X+N19hjvZb2mN04Gi4n3VHcGww7qbflfx9RamhyoB+hVGjRsHT07MyvrVWwYCmVH+9m34XAdEBmB82HwP3DITtettSRZqJhwmabmgKh+0OGBc8DgtOLYDvFV+cTjiN2JRYyYNUH41MjMSe63uw7OwyTDo0Cf1290ObTW1QzbNaqY9Y997RG5+Hfo5tUdtwI/kGL1ikVAMyoF/h7t27aNOmDTZu3IgHDx7g559/VlMfYEBTqh8mZyUjKDYI88Lmod/ufqi/pv5ro8tsuRla+7SG024nTDkyBd4XvHHo5iHcSLoheVDSv41LjcOZ22ew5dIWzD4xG8P2D0OHrR1gtdLqtb/f6iur4wP/DzD92HTsuLoD8Wnxkr9PKdU3GdCvIJPJIJPJIJfLi1UfYEBTqnvmKfJw8d5FeF/wxseBH6PFxhaQLZWVGFN1V9fF+/7vY8LBCVh+bjlCYkMQnRwteSDS8of16YTT2BCxAVOPTkXfXX1hu94W8qUln7Nef019DNo7CIvPLEborVBk5mZK/n6mVJdlQL+Cu7s7li5dWqL6AAOaUu03IycDR+OOYsGpBfhw54evPWe23up66LW9F9wOu2F9xHqcvX0WN1NvSh59tPKNuh+F7Ve348vjX2LAngFosr5JiVFtstwEXb/pis+PfY491/cgMSNR8vc7pbokA9pAYUBTqn1m5GTg0M1DmH1iNnps6wHT5abFBpCFpwU6+3bG+ODxWHV+FU4nnGYsU5FXEq/A97Ivph6dip7be6KWd61i30+ypTK03dQWkw5Pwq5ruxjUlL5GBrSBwoCmVHpz8nJw4tYJfHXyq9cGc/019eG4yxFfnfgKATcCeBoGLZdhCWHwOOeBYQHD0GxDs2KPUsuWytBuczu4HXbD/uj9eJD9QPLPC6XaJAPaQGFAU6p5FQoFopKi4HneE067nUq8IMx2vS2G7huKpWeX4uStkzy6TCvFS4mX4BPpA+eDzmi3uR2MlhkVu0JLj209MC9sHsISwpCblyv554lSKWVAA7Czs8O9e/dK/fUvXryAnZ0dkpKSKmoTNA4DmlLNmJ6Tjn039uGzkM/QeF3jYoO54bqGGLJvCJadW4ZTCae4pjKVxKj7UfCJ9MGnwZ+izaY2xd5Qx9rLGsP2D8Pmy5txL+Oe5J8zSjUtAxp/r7wRGxtb6q8vKCiATCZDfHx8RW2CxmFAU1p5RqdEY/m55fjXjn8Vezc6ay9r9NnZBwvCFiA0PpTBTLXSS/cuYfWF1Ri2fxjeXvt2sad7dNraCXNOzMHZO2e5DjU1CBnQ+DugGzRogCZNmpRauVzOgC4jDGiqr+Yp8hCWEIZZx2ehzaY2RUZGlWVV0HFrR0w+Mhl7ru9BTHKM5HFEaVk9eeskFp5aiF7be6HqiqrFnq/vfNAZAdEBXC6P6q0MaAATJ04slzk5ORW1CRqHAU3pm5mdl43AmECMDx6POt51igyJ2t61MWjPIKwIX4GLdy9KHj+UVqTRKdH45so3GBc0Dk3WNyl2tZiBewdiy+UtSMlKkfxzS2lFyYA2UBjQlJbd9Jx07L6+GyMPjCx2TeaWG1vis5DPsPv6bh5lpgZl2K0wzD4+G+9+8y6qLKtS5IWIfXb2wbqIdTxvmuq8DGgDhQFNaenMyMnAzms7MXT/0CL/ZF1lWRXYf2OPL49/iePxx3kuM6Vp8bh8/zI8wz3huMsRFp4Wap8bo2VG6OnfE2suruGa01QnZUAbKAxoSos3KzcL+27sw8gDI2Hpaak2+ZsuN8X7/u9j0elFCL8TLnmsUKrNRidHY0PkBgzeOxg1vGoU+Z/Qf+34FzZEbkByVrLkn39KSyMD2kBhQFMqNk+Rh2Pxx/DpwU+LnOTNlpuh947e8Djngch7kZJHCaW6aExKDHwv+2L4/uGw9rIu8jSPgXsGYsfVHbwAkWq1DGgN8uTJE8yaNQv169eHqakpOnTogKCgoDJ/n0WLFkEQBLRr167c28KApvRvLyVewszQmWi4tqHaZG7sYYwP/D+A+xl3RjOlFWxsSiy2Xt6KIfuGFHlTIauVVhgXPA5H4o4gT5En+VhB6T9lQGsQR0dH1KhRA35+foiIiICrqysEQcCBAwdK/T0SEhJgamqKunXrMqApLaf3Mu5hRfgKtN/SvshzM+2/scfXp77myhmUasjolGj4RPrAabcTzFeYq30u3177Nr44/gWuJV+TfPygVKlkQKsxaNAgLFmyBMeOHavQZepOnToFQRAQGBgoetzR0RENGjRAQUHBa79Hfn4+OnbsiJkzZ8LBwYEBTWkZzMnLwd4bezFo7yCYeJioTdCtfVpjRugMhCWE8UJASiX0atJVLD+3HD229Sjy1uLd/LphXcQ6pGalSj6uUMOVAf0K9vb2MDMzg0wmg1wuR61atdCvXz8sWLAAISEhSE9PL9f3dXV1RbVq1ZCfny96PDAwEIIg4Nq1a6/9HsuXL0ejRo3w5MkTBjSlpTQqKQrTjk4rcq3meqvrwfmgM4JighjNlGqhF+5ewJwTc9Dap7Xa59d8hTlGHhiJY/HHePdDqnEZ0EVQUFCA27dvY+fOnZg2bRpatGihCmq5XF6u79m9e3fY29urPf5yh2zbtq3E59+/fx+mpqY4deoUADCgKS3BjJwMbLm8BT229SjyYkDHXY7wifRBdHK05IFAKS2dB2MPYmzQWNh42ah9rptvbI4lZ5ZwfWmqMRnQpeTw4cOwtbWFv79/uZ7fokUL9O/fX+3xb7/9FoIgYOXKlcU+98WLF+jWrRvGjBmjeqwsAf3w4UMkJiaKDA0NZUBTvfNS4iVMOjypyFU02m1uh3kn5/G8Zkp13JiUGKyLWAeH7Q5qp3iYeJhgyL4hCLkZwqPStFJlQJcBX19fzJ8/v1zPbdGiBZycnNQefxnQXl5exT53zZo1sLGxwcOHD1WPlSWg3d3dIQhCkTKgqa6bnZcNvyi/Io82W620wsiAkQiIDuApGpTqoeF3wjH92HS8vfZt9aPSG5rD45wHkjKTJB+nqP7JgC4D3377LZo2bVqu55b3FI6cnByYm5vDx8cHjx49Uvn++++jTZs2ePToEZ4+fVria/MINNVHb6bexBfHvyjy3OZOWzthyZkluHL/iuQTPKW08o1LjYPfFT847nKEsYex2rnSY4PG4uyds5KPW1R/ZEC/wvTp07Fr1y7cvn1bbWWMjIwMmJubl+v7urm5FXkRYVBQUIkXEUZGRhZ79Pils2bNKvP28BxoqosqFAocjTuKQXsHqf3p1tLTEiMDRvKCQEoN3Iv3LuLzY5+jwZoGav+5ftf3Xfhe8UV2Xrbk4xnVbRnQr1C7dm3VBYNmZmawt7fH5MmT4eHhgS5duqBjx47l+r6nT5+GIAgIDg4WPe7k5FTiMnaPHj1CZGSkmh06dICtrS0iIyPx4MGDMm8PA5rqkhk5GVgfuR7vbH6nyOXn5ofNx6V7lySfuCml2uPN1JvwifTBB/4fQL5UrrYCz/yw+bibflfy8Y3qpgzoIsjJycGRI0ewcOFC9O3bFzVr1oRMJkOzZs1KtdxccTg6OsLa2hr+/v6IiIiAm5sbBEFAQECA6mtcXFxgZGSE7OzsEr8XV+GghmDCgwTMOj4LNqvEV90bexjDcZcjtkdtx83Um5JP1JRS7TbsVhg+Df5U7Y6HJstN8HHgx7h476Lk4x3VLRnQpeT58+dv/D2ePHmCmTNnol69ejAxMUH79u3VbuU9YcIECIKArKysEr8XA5rqsxfvXcTHgR+r3fCk5qqamBgyEWEJYZJPyJRS3fNa0jUsOrUITTc0VftrlsN2BwTGBHL1DloqGdAGCgOaapsKhQKBMYFw2O5Q5Gkai08vRtT9KMknYEqp7vvyosOe23tCtlQmGm9a+bTC+oj1yMzNlHxcpNorA9pAYUBTbTEnLwdbLm9B201tRZOYbKkMH/h/gK2XtyI2JVbyCZdSqp+GxoViZMBImC03E41BdVbXwaLTi5CclSz5OEm1Twa0gcKAplKbnpOOFeEr0HBtQ7U7BX60/yMcjD3I1TQopRozMjES045OQ81VNUVjUjXPaph+bDoSHiRIPm5S7ZEBbaAwoKlU3s+8j69OfqV2YaC1lzVcQlxw9s5ZySdSSqnhGp0cjSVnlsB2va3aBYfjgsfhWvI1ycdRKr0MaAOFAU017d30u/g89HNU86wmmpTqr6mPL45/wWXoKKVa5c3Um1h3cZ3a8pnyZXIMDxiOyMRIycdVKp0MaAOFAU01ZXxaPNwOu6mdX9hsQzMsObME15KuST5RUkppSe64ugPvbXtP7TqNgXsG4tydc5KPs1TzMqANFAY0rWxjU2PhfNBZbSm6tpvawvu8N2KSYySfFCmltCwGRQfhw50fqq3c0WdnH5y6fUrycZdqTga0gcKAppXly3A29jAWTTAdt3bEhsgNXFGDUqrzHr55GAP2DIB8mZwhbaAyoA0UBjStaG+m3sSEkAlqR5ztv7GH7xVf3jGQUqp3Ho8/jqH7hqLKsiqica/vzr44ffu05OMyrTwZ0AYKA5pWlLce3MJnIZ8VGc5+UX4MZ0qp3huWEFZkSDvuckT43XDJx2la8TKgDRQGNH1T72Xcw9SjU9UuDrT/xh5+VxjOlFLD8+StkxiybwiMlhmJxsXBewfj8v3Lko/btOJkQBsoDGhaXlOyUjD7xGy15eg6+3bGN1e+YThTSg3eE/EnMHjvYNE50vJlcow+MBrRKdGSj+P0zWVAGygMaFpWM3IysPjMYtTwqiEK53ab28Hnkg/DmVJKX/Fo3FE47nIUrdph7GGMz0I+w510zoe6LAPaQGFA09Kam5eLDZEb0GBNA1E4t9jYgsvRUUppKQyOCUav7b1EY6jFCgvMPjEbqVmpko/ztOwyoA0UBjR9nQqFAnuu70Frn9aiQb/h2oZYdnYZw5lSSsvo3ut78a7vu6Ixteaqmlh+bjmycrMkH/dp6WVAGygMaFqSYQlh6O7XXW2Qn31iNu8cSCmlb+iWS1vQcmNL0RjbaF0jfHPlGygUCsnnAPp6GdAGCgOaFmV0SjQ+2v+R+M+MnhaYdGgSLt27JPmkQyml+uLN1JvwDPdUOz2u89bOCI0PlXw+oCXLgDZQGND0nyZlJmHq0amitZyNPYwx8sBInLl9RvKJhlJK9dXo5GjMOTEH1VdWF4X0wD0DcTXpquTzAy1aBrSBwoCmSqUS2XnZWBG+AtZe1qKBu/eO3jgYe1DyiYVSSg3FS4mX4HzQWe1AhuthV9zPvC/5fEHFMqANFAY0DYgOQIuNLdSWpPvmyjeIS42TfDKhlFJDNCwhDP139xeNzdZe1vA874mcvBzJ5w76twxoA4UBbbhevn8ZH+78UDQ4119THx7nPLiyBqWUaon7b+xHx60dRWN1K59WCIoNknweoQxog4UBbXgmZSbB9bArqiyrohqMq66oCrfDbrhy/4rkkwWllFKxcalx8D7vjfpr6otCuu+uvohKipJ8XjFkGdAGCgPacMxT5GHtxbWouaqmm4hXOgAAIABJREFUavCVLZVhwJ4BOHnrpOQTBKWU0pK9nnwd045Og/kKc9H50Z8f+xxp2WmSzzOGKAPaQGFAG4ZhCWFqfwK022KHHVd38DxnSinVMc/eOYtBewaJbg1eb3U9+F7x5frRGpYBbaAwoPXbO+l38EngJ6Jwru1dG0vOLOF5zpRSquPuvb4XbTa1EY3x3f264/zd85LPP4YiA9pAYUDrp7l5ufAM94TVSivRn/nGBo1F5L1IyQd9SimlFePN1JtYfHoxanjVUI338mVyTDo0CSlZKZLPR/ouA9pAYUDrn2EJYbDbYic6ItHNrxuCY4IlH+gppZRWjpcSL2H0gdGQL5Orxv463nV4Wkcly4A2UBjQ+mNiRiLGB49XOyduZfhK3Ey9KfngTimltPINjglGhy0dRAdR3tv2Hi7fvyz5PKWPMqANFAa07qtQKLA+cj1sVtmITtcYFzQOl+5dknwwp5RSqlnjUuPgfsZddFqHsYcxZhybgfScdMnnLX2SAW2gMKB128v3L6PHth6iIw2dfTsjMCZQ8gGcUkqptEYmRmLY/mGiv0w2WtcIQTG8CUtFyYA2UBjQumlmbibmnJgDEw8T1aBYc1VNrq5BKaVUzb3X96KVTyvRwZaP9n+EO+mci99UBrSBwoDWPQ/HHUazDc1EN0MZsm8Izt85L/kgTSmlVDuNTYnF7BOzRTdhqb6yOtZeXIs8RZ7kc5uuyoA2UBjQumNSZhLGBI0RHUFouqEpfK/48mYolFJKS+WphFPoub2n2kpNV+5fkXye00UZ0AYKA1o33H51O+p411ENdqbLTeF22A1Xk65KPhhTSinVPddcXINa3rVU84qJhwkWnlqI7Lxsyec8XZIBbaAwoLXbhAcJGLh3oNpFgiGxIZIPvpRSSnXbK/evYNSBUaKLDNtuaouzd85KPv/pigxoA4UBrZ0qFAqsi1iH6iurqwY1S09LzA+bz4sEKaWUVqg7r+5E43WNVfON0TIjTD06lUvelUIGtIHCgNY+Y1Nj0Wt7L9FRZ4ftDjh566TkgyyllFL99EbyDbgccoHRMiPV3NNkfROExodKPi9qswxoA4UBrT0qFAqsurAKFp4WoqXpPMM9eSdBSimlGjE4JhhtNrURrfTketiVR6OLkQGtQZ48eYJZs2ahfv36MDU1RYcOHRAUFPTa5x05cgSffPIJmjVrBjMzMzRu3Bhjx45FWlpaubeFAa0d3ki+gff93xcddXba7cSl6SillGrc2JRYzAydKbrXQON1jXEk7ojk86W2yYDWII6OjqhRowb8/PwQEREBV1dXCIKAAwcOlPi8rl27YsiQIdi1axcuXbqE/fv3o02bNqhWrVq5dyQDWlrzFHnwPO+JqiuqqgapOt51sPrCah51ppRSKqlH4o7gnc3viA7ufBbyGR5kP5B8/tQWGdAa4tSpUxAEAYGBgaLHHR0d0aBBAxQUFBT73IcPH6o9plQqYWxsjEmTJpVrexjQ0hmbGqu2FuegPYNw4e4FyQdNSimlND7t76PRXxz/QnQ02na9LUJv8dxopZIBrTFcXV1RrVo15Ofnix4PDAyEIAi4du1amb9nkyZN0K9fv3JtDwNa8yoUCqyPXA9LT8v/HXVeXQdrL67lDVEopZRqpcfijqH9lvaqeUu+TI6pR6ciIydD8nmVAV0+dCqgu3fvDnt7e7XHX+6Qbdu2len7ZWRkQC6X48svvyzX9jCgNWvCgwT0291P7VxnHnWmlFKq7b48N9rYw1g1h7Xc2NKg141mQGuIFi1aoH///mqPf/vttxAEAStXriz198rPz0fv3r1hZWWF3Nzc1379w4cPkZiYKDI0NJQBrSG3RW2DtZe1atCxWWUDr/NePNeZUkqpTnno5iG08mmlms+qLKuC2SdmIycvR/K5lgFdenQuoJ2cnNQefxnQXl5epfo+hYWFcHZ2hpGREUJDQ0v1HHd3dwiCUKQM6Er8cGUlY0TACNFR53/t+BfO3D4j+SBIKaWUlsfolGi4HXYTrRvdcWtHRCVFST7vMqBLh04FdEWcwlFYWAgXFxfI5XLs37+/1K/NI9Ca90jcEby19i3V4GK10gpLzizhUWdKKaV6YcCNADRZ30Q1z5mvMMeqC6ugUCgkn4MZ0CWjUwHt5uZW5EWEQUFBpbqI8GU8y2Qy7Nq16423h+dAV46ZuZmYenQqZEtlqkHlXd93ERofKvlgRymllFak15Ov45PAT0R/ae2zsw9uP7gt+XzMgC4enQro06dPQxAEBAcHix53cnJ67TJ2hYWFmDRpEmQyGfz9/StkexjQFW/EvQi03dRWNYiYeJhgxrEZiEmOkXyQo5RSSitL38u+qOVdSzX/WXtZY/f13ZLPywzootGpgAb+XvPZ2toa/v7+iIiIgJubGwRBQEBAgOprXFxcYGRkhOzsbNVjn3/+OQRBgIuLC27cuCHy1q1b5doWBnTFqVAo4BnuCbPlZqKrkwNuBEg+qFFKKaWaMDIxEn139RUdjR4fPF5vbwXOgNYgT548wcyZM1GvXj2YmJigffv2arfynjBhAgRBQFZWluqxxo0bF3sRYOPGjcu1LQzoivFu+l3RgCFbKsPYoLGIuh8l+WBGKaWUatrl55bDYoWFal5svrE5wu+GSz5fM6D/h84FtDbBgH5zA2MCUce7juhW3D6RPrwpCqWUUoP25K2TsNtip5ofjT2MsfTsUuQp8iSfuxnQDOg3ggFdfjNzMzH5yGTRn6kctjvg7J2zkg9alFJKqTYYkxIDt8NukC+Tq+bK3jt6680FhgxoA4UBXT6vJl0V3dLUfLk55p6ci9iUWMkHK0oppVTb3Hl1J+qtrqeaN2t510JQTJDk8zkDmpQLBnTZ3Xx5Myw8LUQXCgbFBEk+OFFKKaXa7KXES+i3q5/oeqHpx6YjOy9b8rmdAU3KBAO69KZlp2F04GjRKRujDozihYKUUkppKY1LjcOSM0tEK1Z12toJ0SnRks/zDGhSahjQpTP8bjiabWim+rBXX1kdq86v4oWClFJKaTk8fPOwaF619LTEtqhtks/3DGhSKhjQJatQKLDqwiqYLjdVfcg7bu3IOwpSSimlb+j15OsYGTBS9JfdCSH/397dR0VV538A/wozPImJaPGQHs1WRGDRrcRx3aInlG33YJhW63qcQrA8me62W+2ulpohZP3UUgnR1BNPtvhACKiAiCUPCqg/xQg1MR1Uals7y2rUKO/fH/3m1jgzwHCBmXt5v855/9Hde2Hms/d+5y3zpMe5C+cc/vjPAk3tYoG2nYbGBjye/rh0Ubssc8Ez/3wGFZ9VOHzRYRiGYRi1ZGXJSgxIHCA93oatDUN5fbnDewALNNnEAm09xSeKMXL1SOliHpw8mJ/tzDAMwzA9lPxj+Rjz3hjpcdc70Rtph9Ic3gdYoMkqFmjzGAwGvL3/bbM3N9yTcg/yj+Y7fHFhGIZhGDWnqr4KT2c/bfaSjricOKd+SQcLdB/FAv1Tzpw/gycynrB4yUZlfaXDFxWGYRiG6St5Z/878E70lh6Px64bi8OfH3Z4T2CBJgkL9I85eOoggt8Nli5W32RfrC5dzZdsMAzDMIwDknc0z+wlHT5JPkivSnd4X2CBJgAs0E1NTdjw6QaLf+nm1eY5fPFgGIZhmL6cqvoqTM/86VM6+i3th4UfL8SFixcc3h1YoPu4vlygz188j4TtCWavtXo6+2mUf1bu8EWDYRiGYZgfk1iUaPbepPvT7seJsycc3iNYoPuwvlqga0/XYvz746WLsX9if7xZ9CZfssEwDMMwTpic6hwM/5/h0uO2/0p/5B3NY4GWgQVahr5YoHfW7MTtb90uXYS/WP0LfHTkI4cvDgzDMAzD2M6npz5F1OYo6fFb+4YWySXJMBgMLNBdwAItQ18q0AaDAcv3LYdmmUa6+KK3RONg3UGHLwoMwzAMw3ScmoYa/DXvr3Bd5io9lj+V9RS++PILFmg7sUDL0FcK9Nkvz2JaxjSzf7W+lPcSqhuqHb4YMAzDMAxjXzYd2gTfZF/pcT18XTiONBxhgbYDC7QMfaFAV9RXIOS9EOkiu/2t25H6aarDL36GYRiGYbqevf+7F+HrwqXH90FJg7DtyDYW6E5igZZB7QU6+3A2fJJ8zD6ijt8qyDAMwzDqSFV9FWZkzjD7ErTXCl/rtddFs0D3UWot0AaDAa/teQ0uy1yki2pG5gx+RB3DMAzDqDDL9i6D2xtu0mN+bHoszn55lgW6HSzQMqixQJ/98ixi02Oli8h9uTsWFy7m650ZhmEYRsXJrMqE30o/6fE/bG1Yj78umgW6j1JbgT78+WGErQ2TLh6/lX74oPwDh1/UDMMwDMP0fEpOlOBX638l9QDfZF9sr9nOAm0FC7QMairQ22u2m70jd9z6cSg4VuDwi5lhGIZhmN5L1edVeDLrSakPaJZpsHzf8h55XTQLdB+llgKdVJxk9vnOsemxOPTZIYdfxAzDMAzDOCav7XkN2je0UjeYmT0TjRcaWaD/Hwu0DEov0Ocvnof+n3qzz3d+effLfL0zwzAMwzDYWrEVQ5KHSD0hIjUCJ86eYIEGC7QsSi7QJ784iUlpk8w+/3H9wfUOv1gZhmEYhnGe7D2+F2PeGyP1haHvDEXxiWIW6G64PX2WUgv0gboDGLFqhHQxjFozCjtrdjr8ImUYhmEYxvlS/lk5Jm+eLPUGrze9sLl8Mws0dY0SC/SHlR/CO9Fbugge3PQgyk6WOfziZBiGYRjGeVPTUIMXdr2Afkv7SR3i1fxXZb25kAW6j1JSgTYYDFi6d6nZl6M8889ncLj+sMMvSoZhGIZhlJFVpavg+aan1CWmZUzDuQvnWKCp85RSoM9fPI9Z22ZJJ7vHcg8s3bsUNQ01Dr8QGYZhGIZRVj468hH8V/pLveK+9+/r0psLWaD7KCUU6FPnTuE3ab+RTvIhbw3BxkMbHX7xMQzDMAyj3JScKEH4unCzNxeWnixlgaaOOXuB/vSzTzFy9Ujp5A5aE4Tc2lyHX3QMwzAMwyg/lfWV+O3W30o9o39if2RUZbBAU/ucuUDvqNkBnyQf6aS+f+P9fLMgwzAMwzDdmpqGGszbMU/qGy7LXLB833IWaLLNWQv0u2Xvmn970LaZqKyvdPhFxjAMwzCMOpNcnAz35e5S95izfQ4uXLzAAk2WnK1AGwwGvJT3ktn317+S/wq/WZBhGIZhmB7Ph5UfwjfJV+ohUZujcOb8GRZoMudMBfrchXOYljFNOmm9E72xunQ1P2mDYRiGYZheS/6xfNy16i6pj4StDcPRM0dZoOknzlKg676ogy5VJ52sAW8HIKMyw+EXEcMwDMMwfS9ldWWIeD/CrJeUnCxhgXaklpYWLFy4EAEBAXB3d8fYsWORnZ3dqWObm5uh1+sxePBgeHp6QqfToaSkpMu3xRkKdEV9hdknbYS8F4L8o/kOv3gYhmEYhum7qfq8CjEfxph9Qkf24WwWaEeJioqCj48PUlNTUVpaivj4eAghkJmZ2e5xra2tCAsLw9ChQ5GRkYGioiJMnToVGo0GZWVlXbotji7QBccLMOStIdLJGbkxkp+0wTAMwzCMU6SmoQbzd803e2/WqtJVLNC9raCgAEIIZGVlmW2PiopCYGAgbty4YfPY9evXQwiBiooKaZvRaERISAgiIiK6dHscWaC3Vmw1+yrNp7KeQlV9lcMvFoZhGIZhmJ8nqTjJ7NPB/pL3FxgMBhbo3hIfHw9vb28YjUaz7VlZWRBCoLy83Oaxjz76KEaPHm2xfcWKFRBCwGAw2H17HFWgF+UugssyF+nzFl/c9SI/aYNhGIZhGKfNpkObMCBxgNkf/k6cOsEC3Rt0Oh3Gjx9vsd00kA0bNtg81t/fHzNmzLDYnp+fDyEE9u3bZ/ft6e0CfbPtJl78+EXp5HNf7o43i97kJ20wDMMwDOP02V69HQErA6Qe8+v3f42Tp0+yQPe0UaNGYcqUKRbbL126BCEEVqxYYfNYrVaL5557zmJ7RUWF1ZeF3Kq5uRl1dXVmyc3N7bUC3WpsxcwdM6WTbuCKgXiv9D2U15UzDMMwDMMoInk1eQhaEyT1mTHvjsHFby/2eI8C+niBjo6OtthuKtBJSUk2j9VqtXj++ecttpsKdEef5LFkyRIIIaymNwp0y/ctuGfDPRBLBQJXBiK1JBUfV3zMMAzDMAyjqGz7ZBvuXXcvxFKB21bchs+++qzHexTQhwu0I1/C4ei/QAPA5ZbLmL5tOuoMdbj8zWWGYRiGYRhF5uLXFxG3Mw75p/J7pUMBfbhAJyQkWH0TYXZ2dodvIoyKikJwcLDF9qSkJAgh0NTUZPftccSbCImIiIjIfn22QBcWFkIIgW3btpltj46O7vBj7FJSUiCEQFVVlbTNaDQiNDQUEyZM6NLtYYEmIiIiUoY+W6CBH/+SPGjQIKSlpaG0tBQJCQkQQiAjI0PaJy4uDq6urjh//ry0rbW1FaGhoRg2bBgyMzNRXFyM2NhYxX2RChERERHZr08X6JaWFixYsAD+/v5wc3NDeHi4xRsA9Xo9hBBobGw0237lyhXMnj0bvr6+8PDwgE6nQ3FxcZdvCws0ERERkTL06QLtTFigiYiIiJSBBdpJsEATERERKQMLtJNggSYiIiJSBhZoJ8ECTURERKQMLNBOggWaiIiISBlYoJ0ECzQRERGRMrBAO4na2loIIZCbm2vxNd8MwzAMwzCM8yQ3NxdCCNTW1srugCzQMpj+j2AYhmEYhmGUkdzcXNkdkAVahqtXryI3Nxe1tbW9/q8n/tWbc+FsOBfOhrNxlnAunI0SZlNbW4vc3FxcvXpVdgdkgVaYujq+7toazsU2zsY6zsU2zsY2zsY6zsU2zsY2Jc+GBVphlHyy9STOxTbOxjrOxTbOxjbOxjrOxTbOxjYlz4YFWmGUfLL1JM7FNs7GOs7FNs7GNs7GOs7FNs7GNiXPhgVaYZR8svUkzsU2zsY6zsU2zsY2zsY6zsU2zsY2Jc+GBVphmpubsWTJEjQ3Nzv6pjgVzsU2zsY6zsU2zsY2zsY6zsU2zsY2Jc+GBZqIiIiIyA4s0EREREREdmCBJiIiIiKyAws0EREREZEdWKCdxP79+/Hss89i9OjR8PLyQmBgIGJiYlBTU9Ppn9Hc3Ay9Xo/BgwfD09MTOp0OJSUlVvctLi6GTqeDp6cnBg8eDL1e75Qv4v/Pf/6Dl19+GVFRURgyZAiEEFiyZEmnj4+MjGz36zwvX77c4b5TpkzpgXsmn9zZbNmypVNzMcnOzsbYsWPh7u6OgIAALFy4EC0tLd14j7qP3Nns2LEDTz/9NO6++254eHhg+PDhmDlzJk6fPm2xr5LOG7lzAdS5zpi0tLRg4cKFCAgIgLu7O8aOHYvs7OxOHavmtQaQNxs1rzVy5qKGdUbO/Vf6WsIC7SSmT5+Ohx56CCkpKSgrK0NOTg50Oh00Gg3279/f4fGtra0ICwvD0KFDkZGRgaKiIkydOhUajQZlZWVm+5aVlUGj0WDq1KkoKipCRkYG7rzzToSFhaG1tbWn7mKXNDY2YuDAgXjggQcQHx9v9wP+qVOnUFlZaZb9+/dDq9VCp9OZ7RsZGYmRI0da7F9fX9/N96p7yJ2N6UFty5YtFvf5hx9+MNs3IyMDQgjEx8ejtLQUqampGDhwIKKiorr5XnUPubOJiIhATEwMNm/ejLKyMqSnp2PMmDHw9va2+LglJZ03cuei1nXGJCoqCj4+PkhNTUVpaak0o8zMzA6PVfNaA8ibjZrXGjlzUcM609X7r4a1hAXaSVj7l1RLSwv8/PzwyCOPdHj8+vXrIYRARUWFtM1oNCIkJAQRERFm+44fPx4hISEwGo3StvLycgghkJKSIuNedL+2tja0tbUBAL7++usu/cXsVlu3boUQAps2bTLbHhkZidDQUFk/uzfJnY3pQa26urrd/W7cuIGAgABMnjzZbHtmZiaEECgsLLT7tvc0ubOxdj02NTVBq9Vizpw5ZtuVdN7InYta1xkAKCgogBACWVlZZtujoqIQGBiIGzdu2P0z1bLWyJ2NWtcauXNR+joj5/6rYS1hgXZyDz30EIKCgjrc79FHH8Xo0aMttq9YsQJCCBgMBgCAwWCAEAJJSUkW+wYFBTntv/KB7ivQ999/P7y9vS2eEnTGBaqzerJAHzp0CEIIi6flfvjhB3h7eyMhIaErN7nXdNd5AwB33XWXxYO7Us+brsxFzetMfHw8vL29zR6kASArKwtCCJSXl9v9M9Wy1sidjVrXmp44ZwDlrDNy7r8a1hIWaCf27bffYuDAgYiNje1wX39/f8yYMcNie35+PoQQ2LdvHwBg7969EEKgoKDAYt/p06cjICBA/g3vId1RhE6fPi09PXiryMhIeHh4YNCgQXB1dcXIkSPxj3/8A9evX5dxq3uHnALt5+cHFxcXDBo0CLGxsTh58qTZfqmpqRBC4NSpUxY/47777sPEiRPl3vwe1V0F+osvvoCLiwv+/Oc/m21X6nnTlbmoeZ3R6XQYP368xXbTN6Vt2LDBrp+nprVG7mzUutZ09zkDKGudkXP/1bCWsEA7sT/+8Y/QaDSdeiOhVqvFc889Z7G9oqLC7CkW01NhlZWVFvvOnTsXbm5u8m94D+mOIvTqq6/avP+LFi1CSkoKSktLUVBQgPnz50Oj0eCBBx7AzZs3ZdzynteV2ezZsweLFi3C7t27cfDgQaxbtw5Dhw5F//79cfz4cWm/xMREm2/2mTx5cqeeIXGk7jhvjEYjHnzwQdx22224cOGC2f+m1POmK3NR8zozatQoq2/IunTpEoQQWLFihV0/T01rjdzZqHWt6e5zRmnrjJz7r4a1hAW6Bxw4cKDdd2P/PMeOHbP6MxYvXgwhBNauXdup36nVavH8889bbDedjKanxEwnY1VVlcW+c+fOhbu7ux331D5y5yK3CBmNRvj7+9v1NNg777wDIQR27tzZpd/ZWY6ejUljYyO8vb0RExMjbTM9qF25csVi/8mTJ1t9Gq47OXo2bW1tmD17NlxdXZGbm9upY3rjvHHEXJSwzgBdm82oUaMQHR1t8bNMZcDaU8i2qG2t6c7ZmDjbWuPouTjrOtMeOfdfKWtJe1ige8ClS5ewcePGTuWbb76xOH7p0qUQQiAxMbHTv1MJT4fInYvcIvTxxx9DCIHVq1d3+pgrV65ACIFXXnmlS7+zsxw9m5+Ljo7GHXfcIf23o59WdeRs2traEBcXBxcXF6Snp3f6uN44bxwxFyWsM0DXZtOdT8erba3piZcqAM611jhyLs68zrSHL+Egp2Iqz0uXLrXruKioKAQHB1tsT0pKghACTU1NAH56QX5ycrLFvqNHj3bKN/eYyC2JMTExcHNzw7/+9a9OH2NaoP72t7916Xf2lu4s0FOmTIG/v7/036Z3O2/bts1sP6PR6JRv7LlVV2djelDr168fNm/ebNexSjhvujIXNa8zCQkJVt8QlZ2dDSHse0OY2taa7pzNzyl9remOuSh5nZFz/9WwlrBAO5E33ngDQggsXrzY7mNTUlIsnuYwGo0IDQ3FhAkTzPaNiIhAWFiY2UfMVFZWQgiB999/v+t3oIfJKYmXL1+GRqPBk08+addxb731FoQQnX5KzVG6q0CfO3cO3t7eePzxx6Vtpo+WuvWpOtMiuWfPHlm/s6d1ZTZtbW2YM2cO+vXrh7S0NLt/pxLOm67MRc3rTGFhodXyFh0dbdfH2Klxremu2fycGtYauXNR+joj5/6rYS1hgXYSptcyRUdHW3xQ+q0vno+Li4OrqyvOnz8vbWttbUVoaCiGDRuGzMxMFBcXIzY21uqHkh84cAAajQaxsbEoLi5GZmYmhg0b5vAPJbelsLAQOTk52Lx5M4QQmDFjBnJycpCTk4Nr165J+1mbi0lycjKEECgqKrL6Oz755BNMmTIFqampKCoqQl5eHubNmwdXV1c8/PDDTvnGHkDebB555BEsW7YMu3btwv79+7FmzRoEBgZiwIABFu+OT09PhxACc+fOxYEDB5CWlgYfHx+n/EuiiZzZzJ8/H0IIxMXFWVyLR48elfZT4nkjZy5qXmeAH/8qNmjQIKSlpaG0tBQJCQkQQiAjI8Nsv7641siZjZrXGjlzUcM605n7r9a1hAXaSXT0NbA/p9frIYRAY2Oj2fYrV65g9uzZ8PX1hYeHB3Q6HYqLi63+vqKiIuh0Onh4eMDX1xezZ892+Ndi2jJ8+HCbc/n5DGzNBfjx8yJHjBghfYnErc6cOYPHHnsMd955J9zd3eHh4YFf/vKXSExMdNoHe0DebP70pz8hJCQEAwYMgEajQWBgIGbNmoWGhgarvysrKwvh4eFwc3ODv78/FixY4LRfrwvIm017xw4fPlzaT4nnjdzrSa3rDPDjl1ctWLAA/v7+cHNzQ3h4uNWvJe6La42c2ah5rZEzFzWsM525/2pdS1igiYiIiIjswAJNRERERGQHFmgiIiIiIjuwQBMRERER2YEFmoiIiIjIDizQRERERER2YIEmIiIiIrIDCzQRERERkR1YoImIiIiI7MACTURERERkBxZoIiIVW7JkifT1wP3793f0zTFz7Ngxs68vzsnJcfRNIiLqFBZoIiIVMxXoyspKHDlyxNE3x8y1a9dQWVmJ9evXs0ATkaKwQBMRqZipQDuzAwcOsEATkaI496pKRNTHfffddxg3bhzuvvtufPvtt9L2y5cvw8/PD5GRkbhx44bN49sr0MOHD8fvfvc77N69G+PGjYOHhweCg4Oxe/duAMCWLVsQHBwMLy8vjB8/HtXV1WbH6/V69O/fH/X19Zg8eTK8vLzg7++PpKQkAEBlZSUmTZoELy8vjBo1Clu3brV6O1igiUhpWKCJiJzc6dOnMWDAAEybNg0AcPPmTTz88MO44447cOnSpXaP7ahADx06FGHT9WXeAAAC8UlEQVRhYcjOzkZhYSEmTJgArVaL119/HZMmTcLOnTuxa9cuBAUFwc/PD9evX5eO1+v1cHNzw5gxY/Duu++iuLgYzz77LIQQ+Pvf/46goCB88MEH2LdvH37/+99DCIGamhqL28ECTURKwwJNRKQAH330EYQQWLNmDV5//XW4uLigqKiow+M6KtCenp4wGAzStuPHj0MIgYCAAFy7dk3anpubCyEE8vLypG16vR5CCOzYsUPaZjQacfvtt0MIgaNHj0rbv/nmG7i6uuKll16yuB0s0ESkNCzQREQKMW/ePGi1Wri4uGDx4sWdOqajAj1x4kSzbd9//z2EEPjDH/5gtr2hoQFCCKxdu1baptfr0a9fP3z33Xdm+06cOBEBAQEWvy8gIABPPPGExXYWaCJSGhZoIiKFqK6uhhACbm5u+Oqrrzp1TGdeA30rIQReeOEFs22NjY0QQuDtt9+WtpleA32ryMhIhIaGdvr3sUATkdKwQBMRKcB///tfBAcHIygoCAMHDkRMTEynjmOBJiLqfizQREQKMGvWLHh5eaGurg7bt2+HEAKrVq3q8DgWaCKi7scCTUTk5DZu3AghBLZs2SJtmz9/PrRaLQ4fPtzusSzQRETdjwWaiMiJnThxAp6entDr9WbbW1tbce+992LEiBG4evWqzeNZoImIuh8LNBGRipkKtNFobPcLVxzFaDSipKSEBZqIFIUFmohIxUwFWghh9a/FjnTs2DHptrFAE5GSsEATEalYU1MTqqurUV1dbfbFJs7g+vXr0m2rrq7Gv//9b0ffJCKiTmGBJiIiIiKyAws0EREREZEdWKCJiIiIiOzAAk1EREREZAcWaCIiIiIiO7BAExERERHZgQWaiIiIiMgOLNBERERERHZggSYiIiIisgMLNBERERGRHVigiYiIiIjswAJNRERERGQHFmgiIiIiIjuwQBMRERER2YEFmoiIiIjIDizQRERERER2YIEmIiIiIrIDCzQRERERkR3+D/nv6S0VRn/JAAAAAElFTkSuQmCC\" width=\"600\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "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', label=r'$u_\\mathrm{f}$');\n",
    "ax_u1.set_xlabel('x [mm]'); ax_u1.set_ylabel('$u$ [mm]')\n",
    "ax_u1.fill_between(x_range, u_f_x_range, color='black', alpha=0.1);\n",
    "ax_u1.plot(x_range, u_m_x_range, color='green', label=r'$u_\\mathrm{m}$');\n",
    "ax_u1.fill_between(x_range, u_m_x_range, color='green', alpha=0.1)\n",
    "ax_u1.legend(loc=9);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "### Range of validity\n",
    "Let us now augment the solution with the outside intervals.\n",
    "Let us recall that the debonded length was"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 114,
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/latex": [
       "$\\displaystyle \\left\\{ a : - \\frac{P}{p \\tau}\\right\\}$"
      ],
      "text/plain": [
       "⎧   -P ⎫\n",
       "⎨a: ───⎬\n",
       "⎩   p⋅τ⎭"
      ]
     },
     "execution_count": 114,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a_subs"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "so that $a = -1$. The range $x < a$ is beyond our applied model assumptions. We explicitly treated only the range $x \\in (a, 0)$. Thus for nicer postprocessing we have to set $u_f(x) = u_f(a), \\; \\forall x < a$ "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "This can be readily done using the piecewise covering the domain of $x$ piece by piece.\n",
    "\\begin{align}\n",
    "  u_\\mathrm{fa} & = \\left\\{\n",
    "  \\begin{array}{ll}\n",
    "  u_\\mathrm{f}(a) &  x < a, \\\\\n",
    "  u_\\mathrm{f}(x) &  x < 0 \\land x > a, \\; \\mathrm{where} \\; a = -\\frac{P}{p\\tau}\n",
    "  \\end{array}\n",
    "  \\right.\n",
    "\\end{align}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 115,
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [],
   "source": [
    "u_fa_x = sp.Piecewise((u_f_x.subs(x, var_subs[a]), x <= var_subs[a]),\n",
    "                      (u_f_x, x > var_subs[a]))\n",
    "u_ma_x = sp.Piecewise((u_m_x.subs(x, var_subs[a]), x <= var_subs[a]),\n",
    "                    (u_m_x, x > var_subs[a]))\n",
    "get_u_fa_x = sp.lambdify((x, P), u_fa_x.subs(data_f))\n",
    "get_u_ma_x = sp.lambdify((x, P), u_ma_x.subs(data_f))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "skip"
    }
   },
   "source": [
    "Plot the two fields into a single diagram"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 116,
   "metadata": {
    "scrolled": false,
    "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=\"600\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "ee1cef988fc843138df88e2b5d4895ed",
       "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"
    }
   ],
   "source": [
    "u_fa_x_range = get_u_fa_x(x_range, 1)\n",
    "u_ma_x_range = get_u_ma_x(x_range, 1)\n",
    "fig, (ax_u2) = plt.subplots(1,1, figsize=(6,3), tight_layout=True)\n",
    "line_u_f, = ax_u2.plot(x_range, u_fa_x_range, color='black');\n",
    "line_u_m, = ax_u2.plot(x_range, u_ma_x_range, color='green');\n",
    "ax_u2.set_xlabel('x [mm]'); ax_u2.set_ylabel('$u$ [mm]')\n",
    "def update(P):\n",
    "    line_u_f.set_ydata(get_u_fa_x(x_range, P))\n",
    "    line_u_m.set_ydata(get_u_ma_x(x_range, P))\n",
    "ipw.interact(update, P=ipw.FloatSlider(min=0, max=1, step=0.05));"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "### Evaluate strains and stresses\n",
    "With the known displacements at hand, we can directly calculate the strains as\n",
    "\\begin{align}\n",
    "\\varepsilon_\\mathrm{f} &= \\frac{\\mathrm{d} u_\\mathrm{f}}{ \\mathrm{d} x} \\\\\n",
    "\\varepsilon_\\mathrm{m} &= \\frac{\\mathrm{d} u_\\mathrm{m}}{ \\mathrm{d} x} \\\\\n",
    "\\end{align}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlkAAAA/CAYAAADTyt0pAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAbq0lEQVR4Ae2d7ZHcNhKGZ1UbwHodwd1lYOsikJyBbUUgOwNf6Zf9T3XOQFYElp2BzxFIdgbni8DrzWDvfTBoLsghOfwmyOmu4gDEZ+MF0Gw0QM7Vw8PDoQt99913Xyndjdzvu6QnjdJ+Iuffut7I/zNhTo6AI+AIjEXAZctYBD2/I+AIDEFAsue58n0h9+su+Z90SaTCPle6f8nto2B9ozy/6bpXPlewugDtaRwBR+AsApInLlvOouQJHAFHYA4EJH/+o3L/HuXQ2Squz6VQQX9Xmre6np1La/HKg/UKQfi9/P+ycHcdAUcgDwQ0L1mNMTdxWQT9oetGF/P9XtdLpcHNily2ZNUdzowjsCkEJpR7X6jh/1N5v+tC6Wqkq3PbhSrgv8rNdl8nK5bSIbR/0fWz/DDi5Ag4AhkioPnJEYB/y/0oZU/3LJI+l/uPNHxtv/hx2bJ2J3j9jsDGEZAcmUTuRXn0k+D4VH4WqbXUul2ojAhbtvu6KlishKkUenl0/NcRcAQyReAz8VW3CvtT4Vi0siHJIJct2fSGM+IIbBqBSeSeZBKy850u03lqQWlUslQAQpYtvz7bfV8qPcLwB+XPbqtBfDk5Ao7AIwK8mILVuUpNQqiabsl7ly1Lou11OQL7RWBKuYd+9In0Hc6t11KjkqXUb3T9J2prtZlrAm17sFWzq8nnQY6AI7AgAprXLIZYSJUsWQpnYUW4zWV5syDjx2VLFt3hTDgC20Ngarmn8jAmsdPHufVauq4LVUa0Ms4/9D2TgXCG7o7O+V/VxZYk2xMwS30/Kux3uU4XiID6nnHHq7HvdX2me6wqTtMj8DQW+bUwZv59HO/f677vvJ+eu9MSe8uW0yI8xBFwBC4cgTnk3mth+o3kJtfJ0apaJUsZXunCitV4mOtMR3XaKlT5fOLhtdzwiQe5rK5/k8vDdWjdZ1jz6FwRUJ9jxsVS8TddTAYOZT/XVbK2KHyzpLZgKUKJ5Dsray4mUF55M6bPcYAccO8qW3zxlkNvOQ+dENA89MVlJ6RGJ5pc7qnv7Nw6z6uTo1InSpYS8aDj6vShraFNVj2c8OdbE8U3tOS3b2rxoP10aNmeb7MIMOY+MA7kolhdbbYlCeNqD4sHFi5YiHlTNwdLEXP8g67dkfD1xdvuenW/DdJ49cXlct07l9zjeBULaM6O/pA250TJUiQPg4M6vpQwzdTB32W7kDMWdRYKtokwu93o6rRq7cCPJ9kGArdiczcWTI1ftrjsW1SscnJQrmwksHK2c04WtgW3VbYIY1+8baEXnccUAV9cpmjM659F7knu/KGLnQn6sqQ7lZQsJWLFzWq7sC7JPxfR2Lp6TLFqip+LHy/XEZgEAc0jlCu2q3DZDp/VKtyXafHDag5ac7vyyMH0v754mx5TL3FeBHxxOS++ofQF5N6PqojFNDt0hbGgpGQpAaYuCNPXbCQGUOagtlUpDyinC0AgDn4UERTrg+5xcINyIpfxgoWVA9oQh7R/UXiwhMolX6HUyM8A/6cuwjn7VAx43Zcolo31AyIPlifGHooI9fypNCeHGRV+QkpHHvhAaPI3VHWW2pN8SwaIJ0zaL2Kd8IhQaMRnSd4mqos+98XbRGB6MY5AVwQkR7JdXC4k97BgIf95bhVnXa8rAIbtAzE098OBhxBkVqvj3fG3TfFK07l/JwhovAUzq9wwLuQWlh/5UVw4o1d6GULhKFl8n4S/bmK88tXdv+SyJYfS8FoXCgUP3ZL5VveBlD4ob3LDhJCLssV3o8I/HOiefztgjJ5VspTWvjeF4pKthUi80Zaz7VGazZHaRn9CbTLEF29HjPx3ZQQ0XpFtyDpk1EH3OLhB/skN8klBvrgMyAz/EZazyz3VwZlyZD/PkUYli86eW8FKkTKhmIaZ314pt3t3LxMBFCz+oqlqbWEQ8yYqb8GaUkOa57o3Je3cwXmsYyhjRihoPIRNKaOcar2WtuqiZJGe+tmfRzlzWhYBX7wti7fXNgKBKLf4hIovLkfgmFlW9CfOlGMACM+la2NQAUGb1r09sCxqDveupVATlKa9tyT1qD0jwEBV+1B6eBmiRAxgXYS90JWO2dRPfBtxXipVhqgPpS2Eye284FDasFKSyyoG5Y8tq2r5bbycxKkMFiG/nkS0B/DHzn0waC9tm7Hg1kS+eGtCxsNzQsAXlzn1RndeWGzbDkqQw4WSpQj76KNte3QvtmdKPQQwq5HLFKq0BBOQXS0IaV737wsBFCwoKD1H78kvilFKd+lNm59xWIlnoVGYeStxnW5VJlYwvpXCCyS/yv0gd9C5p8jfp50qbkikMh4aonoFq5xzVsFe5c2UuK3vTdb44m0m8L3YaRDQXEOm+eKyH5ylxeWKcg95D6FPhWMZqZLFAwayRMe7+X6xEphCldZiwrCzFSHN7P5dIWCKdt04sYZaGruvKk4W3upGwUaaScadysOSxTYn8+onufCJZWtRK5Pq24JyJGjGk9rqi7fxMHoJ6yPgi8uR38lcS+5FGYSs52PagZ6YRy7a85JnSTCHFowkfHAuhq2gQQ/LpBz3bhwBjQEUEsaBWVmLFimO8QoxjgaRyvhclylwYZER6wzlyR++1zao8JhJZbD9iDWKs19YtDiwbwuaMUV73noEfPFWj4uHbgcBWziabKrj3NJY3KDnpWSRydHJFpdR3iGXWVxyWR3G695dnlt85zMoy0HJshtFVDtuNjBUJ9sqd3LZVgkkP4OKMy0vjyH+e2EI0P9VwfJMYV9qbFQn6luF25uFBlNdfosruSovWJgUaApPSZFTPBMEy8h9KePAG5XDwoE6OBzPYddqewaW7NkqCPjirQKI324LAWSFOEbulGQSrUjkhi8uASRPeh/ZCs+W63hjAn8xJSvWywr/lQZO0Pjk5ztFz+Igi0nc2TsCsf/5vkgYlLrnXCArIM42oZwwTvg0gik8KFPFd6gUTj7OUjGOvtI9Lp9hYMuuidgWJ54Px3FQkc+XkJdvxP2m6yC/vWXI7SSkMplj4VMpkxTohZQQoM90MTawUob+l8t4YfGGwu7kCOSGAOOzSoxVznQix9IjBlMtLpFBzI+SIqe6Jl9cUkcsF0s+hpW0PYreHdlzil25w9XDw8NBjeYhw0MO4TT4GzrKy3eF6KSP5LeKdOvkCDgCjsBwBPrIFqXloZV+vJbF2+Ln4Ya31nNeAgIapzwree7abg5bdmFxSftjPItHe5YyrokPW3tybXEZFqeKI7x1cak8lIGiZtYWFpIsQFAIZltcquyLodgvGAo4k/vFdWx50LjkH2vJur0YJL2hjsBGENBER4hiDQxCVC6CtqR4KA0CH8GAWyVWopOc2agW3OO+s2wRrzyURr0l2oMvT+oIDEJA47TVqh3jOV5QS3FO9pqXcW5ULemDDSu1jGUSqLauJfdMjwqy1JQsE2AIpzGE8HZyBC4KAU1mxj3fs+oz/vm7nyXN5pzhQIniy/hswXJEgDBbYKGUsHVwp+ut4quCWMGrUh9sV2XUK3cEHIFsEFhc7kl28gIhAJSULFu9mgY2BqHJDguPYcLzOgJLIaAJda+6sBRlR+KNuf1OF6s6zNem2MFzmPcK402YYsXMveJyJJctOfaK83SRCEQ5keXiUrytLfeQr0GOmiXLlCxWsYMoNoq8HCh2cgQcgQwQ0LwMCye5bA/aOQw4w5KFIDgoLrjR/1yuKWIErU7iz+STy5bVe8MZcASOCES5keviMgu5J4xunsQBEzSuVNgOGEi2EsY85+QIOAJ5IYDylJ7feKF7LFxVYpuQF1hyIpctOfWG8+IIbAeBteSeGaxuzZI1CjK0NRXAdgR7kZO/9j6KOc/sCFw4ApqTWIKYo8FipXusWFx1q1CEEp+xyIJctmTRDc6EI7A5BHKRe5MoWUIf6xVC/NnmesIZdgT2jwAKFVuAfDuK1nLYnQPwQekiICWF57Rd6LIl7Rz3OwKOQFcE1pR7JltvRitZEsj2EUle885JOHftCE/nCOwdAd4a5O99zr6qrTT2tuHqmLhsWb0LnAFHYMsIrCn3bLvw8ESCDAsUZJrX8a7Dr/KyyuRDaqyK0/MeHXJ7EkfAEVgIAbYA3y9U1yTVuGyZBEYvxBG4ZARykHu3dvC9d0dE5QwFi0/luwWrN4KewRGYHwHNTc5XcSbrRZyz81c6sgaXLSMB9OyOwIUjkJPcu/r222+xZP1Fn4ixqz59o/QIbz5wiJL1Uve9rWF96vO0joAjcBkIuGy5jH72VjoCe0RA8gu9CEvaZ9coRroGtVP5eJuQN5T+p4uPktW9rTSo7C6ZVDeN4EvVuPzZJd/GQGlE+UPhc8VPIDg5AltDYG3ZMgdeLq/mQNXLdASyROA2cnU3eLvQmiXBgTLDt3U+kX/RV79VH+fAOBeGosjflPAH11/r4sAbCpf9V5u8To6AIzA3App7fD3+QdfouacyVpMtc+Ck9ri8mgNYL9MRyBiB0UoWbYvCAwHylfxYkZak8AZBTYV/KmxpXmrY8CBH4HIQ0PxHMQoWZflvxrZ8Zdkylv26/C6v6lDxMEdgXwgUsu86tgvByAqUC/8QworFth2fdFjyz2X5FgZ1VqlJmFXTbeJe/TLZP4qrLPBCCeV1fes3/nblteL8JQYB4TQcAY2hf+jipZipyMbo0rJlKv7Tci5CXqUN7uLXeHH51gUoT7M1BO5NyeKbDoXmNbAV9gkHFK1FSBMTnrFWWd2hXoV/E8MXPSMWKp/3h61RDtTxyYzfdSGwCbNvG3E+DeWS/nyr+BNlN2KDMsUWK3lJR3n8lYrtI8vr5AiMQuCfGlOck5yCbH4vJlumYLpahvC4NHlVheDcvcu3cwh5/FYQCM9Szfk/TMnCvI+ywjXIkqHCeGhjBRtrEVMRnelpTMk5LCwzH8f797o3xaNzYbkmVFvoF/5njtXez7q3PgJv4g4KA3f7j7dwT3gN8VFK8kHkDefoFLZ5vNQGlM5XsV20E6UzaxKP9AHnlzhPuIu/pFI7UCaYj5OQyltDtkzCe6WQi5BXlTafvY1zwOXbWaTqEwg/l3v10KwZigwMlCpZBCDw7QEeEvT8wYJSFN4z75DkWG2w6GT/MB3SOMuj9qEEH+SypffewuUyuYLCpLjgEic/K/7aflRcGk5+sxKQdTNEG3WVeKdtul6qEbztyljeAjFfuDav5CZgf6l+OPt1+SR9F+/SsqULT33TXIS86guKxorLt46gCSuXex2xWiuZ+gh5DoVx/eToP7BVBN0enc38oiR8yIVbgct/w7FVORehPKWKxQvdswKsEtuE1qfVuHAvPsHuINcEXLivTZxZoHhmEJ9shcKm4u7lZDMm4KmNxC+K4ZWu3SwU1JZdWOTa+m1gXFbyamAb5szm8q0FXc0rl3st+GQUZQv8kpIVbsTk1lbTTErOKO2eNMHoOCYZSsRB9whsrrqHM7icKBqUoetBcRAKWmrV4n4r9OVWGHU+HYEEgYuRV0mbO3mRTUro8q0dLZd77fjkEltSsq4jV6ZkWWQuzDbyEZUM4lNFoTH9DiJQqGgr1jKag0LMgfWgdBGQksLrcLlTGs50cbYrKKfyY3njLNtrXdmT+OWtNc6R7cJaovbYw+Ugf12fZd8nzuB5BNS3zF/I+/iIQ/XX5VsVkeRe48flXoJH5l7TozhrewhKFsJdF/cWiT9bEq8oBmZ54cAw/59oimK2fI9kjPMcHOY+e9ZFaWotkgpHIUu32dKtx5Hsjc8u/ljJcnDdDk2j/P2i8MCnXHvNm8qe6z4c2o9pTt5kUzzjGeEEhfNsCjvBL6bDIsikADvyMa74R4Pn8vPpAMJQRBlnlEU4WOKSl3ji8EOWh4cqZdF3vD0FP/QD6WgXbaAM+C/6Rml56BBOmbe6wOaFwos3ZuUPfCr8hG+FOWWCgPrpEuVVX/R3L9+aANH4cLkXwREWe5B79vwNu0nXSccjzGlg9qSO4EF58rDMnvFxDNrDfFwpmeaOkwsl5DP5GYuB5EfJ4t8EvtcVrFdywQKlpXibMiZPHQQXilgYJ3JRSP4rF0teWj5loegUVkHFE/ab3L/pQhEijv/3ZPKQF2WLByfl/6DrnfzEv5E/KHtyyUdYULDkHhTGvxJgQeRtWOOB9oYVD2kg3cM7CwcePAXpvmiv/Of4vi8yumdVBNRXlyiv+mLOeLYFSt+8m02vscEz1+WeQBAWe5F7TxmQak+wWj/hJpJZCzahaBnTl+Cqs1ACUBKwZDAQ90gImpICFBuJ4EXh6DsunypPsaUovyk1CPOUrN5CKVHaMBeUCMuZEfmfKw4e+aQAh9VN6SMvytULS0wa+bkKxSjGYTU2Xiz5nXmiyySF/5tKuFnuCO7Kd6UIv3UE8kJA4/wS5FsT6DaPqzLB5d4jYluTezyriv68fmxHOKPDQwUB7+cGEmCqXgkFtoKqD2uS8VC8VXzxsCUwEltPxXaQBXZxlY8HdfVh3SXrJtKofQxKlMj3VYYVZ1vZYNpnXBaDvFJmobjEernnG2OpQkUWFK17PAm11Y8gwOrGywX0NduCr3UxVgIpjDFz9kUNpcNKh+L1F/6YB+XOrHLg1YdvJb8MEkbgwp/V9yH+SL6tb/uUtam0OeAlHnYt35oGhNrtci8BR3hsXu7FPqVVtlA/pEqWBbJFUVgAEgxm8Yope9ttlvKHFiq+rpryKo5VxgkpnAcrD9nwMDxJ0CFAeTeHR4dmnUuCggVVlZpj6PEXgdSHUFLOkdWLchS2+ZIMdXOgsUzlR0DAPw8MxgdfPGer8JUuXlagfLYGa8eO4qrE2atXulDMUNSw5rE1Sfl9+VaWyyDhQx8U59aGtlrlZDkP+7ZH7WiUY5Q1FV5Vvi4Fv2q7e97bPHa59wjc1uWeGV+KxXShZDHZdLH67/swe4RngE91tgqBAUVuOsuF4mFWp5uWzrM0J0mE2Te6hii2VqYJu5OyKwFtwpCk73ShUGHBssP7KGsoRlUlTkH1pPzwcye3UMjkx9LGmS+2F/ryXV+RhzYiIJxdLjWicz7C8TuPkVLYPHa5JzA0ZvYg93gpirYU8r5QsogQEcEDK2x5hJCVf8RL9aBwJ46UD6sSlgCURtplVohb+elMwvkjWxvous2f9oiH2sSWIAoMVtRicNIbCjelH+XCiLT0o5G9zWH3ndxYL/3/QldJSVMcgu8ruaXwMwWzZYgy9FaXKUg/ys+c4qA88V2I8cn4LepWfqxY4MPcxGo2Jd9dePI0CQLCf5BcSoooeVXeLuVVqZHJjeMXZJvLvWRMyLsHuYcly3YFQ+uelNtYPASY8KuTJiIPLJgG/F6kvDysecBhoeOtLt7o4sKPSRIgTPGSN38S33vG45l6gL9jMaXKOgSFhTcL04H7QWG9x4QVWHE5J8fbi9UxzxZdumWI0sXVSCrjd0Wi/BSLlCSMlxbaFPpq2WwzVsO4Nxy68t3Ir0cMQ0D9MngeNtWoMncnr1ra6vg9guNy7xELfJuVe5rD6CrI6NQgcChZspSIA7s8KNjeKFbR8i9O4gNm7WzF0AcqpjseyHVkq4i6uOzC9o4H404X/c05pvvYAYwB7k2xCMG6R1n+iUsBKC4oRAfdo6DZOSbuiWfrjvHDmIaYxJyXQkkhDfV+JO9buViK+Duij3UFPhTGxMEqRRlYtnDZtuOhWEdYq4x/i68LO6iMOn5fxkwoeCidYEB5WOuK78EpvJVvpXWaAYHYH2PlUhNnu5FXTQ10/MrIxHnscu9w2IPcs2fMu7SXS0pWjOCBwEOE1T0K11rEw5KHGw85E2p9eSFvYY2gTbpHkeSh1frffn0rWiD97vFQv6Aw2UBthVRpg5KUJlIY4/UkXGGENylFB+VjPNTlIw4Fr6Tk6b6RlP5kcVIXRgEKb+K3U53K38h3I4MeMRaBKeZhEw97kldNbXT8KshoHrvcO2KydbnHbgjHOpDLBT0pfNGjBKaUcE5lFRIPKEN/RmYZgFgPepHy3igDF2cnjLAEBADkWjstbgqXQTJ5ueJ1q3hMgamX4QhkgcAU87CpISp7DXnVxM4s4Y7fLLB6oRkgoLHNFjj05ug8/tZZsohlNc7WyGtdQSl5zNLJd6tUQ/JZ4WzpmGUBJYsVXokUz0FiiMPrddYPy8MZLMrinrJOqENZJ3nqAlTOmDbXFWlhm8TDmHfXEZgQgbGyZQwrZ+fhiMI7y6sRdayd1fFbuwe8/rkQQAfhCMfJ7t+JJQsOlNDejMK024dMybjpkylNq7rRCDmwbsS2XsmSpTRYdjhXgzJYOmRmmYjXxdZgOPAuP1uOqVVLt8U5nnNlhbRr/Dgea6DudWaIwGjZMqZNXebhmPKVt5O8GlnHatkdv9Wg94pnRkBjmwUSOomdKyvVWKtkxRQoWrx63kdhskPmg7YaY11ohHy0ka09DjRzGPkQ4/BCrGaDVUrhTedlaHg1LpzLoSxdZt7rUhZ1Lk6xzY7H4sh7hRkiMEq2jGlPj3k4ppqu8mpMHavkdfxWgd0rXQ6B8Ca6xvmJFQsWrpv4UAb7urQdVGxKmoZTGcoLB8DMGpbGn/OT/5nqtlXrQX6sWGbNwhzHPYoHr8mjBJ4cNFYchGb5Ovj0o3SUaeXSJrZCu5ZlxSztOh5LI+715YrAWNkypl1d5iGL0V91sfgziznHFMiLnMGSzp+ON53Z7CKvxtYhFlYhx28V2L3SuRHQfEbXYX7zKY5aelIb+hiI+QtFhkLOktIhYLAWoQBVvzvUml/pWckhhEwRCuljmfif8hPvOVz2Qf5aBUvhCCzoRLNUHHxhybIv3LeWFUpZ4Uf8OR4r4O5V5omA5sNg2TKmRT3mIXKLhSWyjwWqKVPIGvwoGiwOT0jxXeXV4DpOKl0oQG3rKscGt23P+C3UTV7NcAT4jmP62aGTkhotWaTU4MVyhGBgZcZ3es6S0nPQHMsT3zHq9EV1paN8JmPp7TyFo9yhBEE05KDLhNcxtPKreISZKXghT0xyK5fyEGhDPwkRi5rXURscj3kh9tI3iIDmRW/ZMqaZA+dhOMaQ1Gv3dwq7ScKDd6C8sjKtOLuvrcMSLe06fksj7vUtiYDGN+fB+feNVp2kVcmCYQrQxRmpN7pqV2I1DeMcFQxgmWL778SilOZRfDh3lYbhVzjCozaumtbulYfV5JCtSitiddfxWL0LnIF8EeglW8Y0Y+A8RNHpTAPlVa86OjMzcULHb2JAvbhsENDY5lgU3xI9a3w6t10YGqWCOFvwVK5ZiFobq3S81Ye1CA0PRatTvtZCy5Eoe88nKnfKsspcLnc3ZRumLGs5BLymi0BgAdkyCEfxhZXK5g7CF8v8U12c/4Rwex+jCDnjzxJ1pPUt6V+ibUvUsSRmXtc6CGgcsSPGjlknA9DVw8NDJ07jAEVItFqlqoVFhu7ksufu5Ag4Ao7AJAi4bJkERi/EEXAEeiAQ5c5Brm3Tt+b+P8+cl6zCVM8UAAAAAElFTkSuQmCC\n",
      "text/latex": [
       "$\\displaystyle \\left( \\begin{cases} 0 & \\text{for}\\: x \\leq - \\frac{P}{p \\tau} \\\\\\frac{P}{A_\\mathrm{f} E_\\mathrm{f}} + \\frac{p \\tau x}{A_\\mathrm{f} E_\\mathrm{f}} & \\text{otherwise} \\end{cases}, \\  \\begin{cases} 0 & \\text{for}\\: x \\leq - \\frac{P}{p \\tau} \\\\- \\frac{P}{A_\\mathrm{m} E_\\mathrm{m}} - \\frac{p \\tau x}{A_\\mathrm{m} E_\\mathrm{m}} & \\text{otherwise} \\end{cases}\\right)$"
      ],
      "text/plain": [
       "⎛⎧                                                               -P   ⎧       \n",
       "⎜⎪                          0                            for x ≤ ───  ⎪       \n",
       "⎜⎪                                                               p⋅τ  ⎪       \n",
       "⎜⎨                                                                  , ⎨       \n",
       "⎜⎪            P                         p⋅τ⋅x                         ⎪       \n",
       "⎜⎪───────────────────────── + ─────────────────────────   otherwise   ⎪- ─────\n",
       "⎝⎩A_\\mathrm{f}⋅E_\\mathrm{f}   A_\\mathrm{f}⋅E_\\mathrm{f}               ⎩  A_\\ma\n",
       "\n",
       "                                                          -P ⎞\n",
       "                    0                             for x ≤ ───⎟\n",
       "                                                          p⋅τ⎟\n",
       "                                                             ⎟\n",
       "       P                         p⋅τ⋅x                       ⎟\n",
       "──────────────────── - ─────────────────────────   otherwise ⎟\n",
       "thrm{m}⋅E_\\mathrm{m}   A_\\mathrm{m}⋅E_\\mathrm{m}             ⎠"
      ]
     },
     "execution_count": 72,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "eps_f_x = sp.diff(u_fa_x,x)\n",
    "eps_m_x = sp.diff(u_ma_x,x)\n",
    "eps_f_x, eps_m_x"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "The stresses along the fiber are given as\n",
    "\\begin{align}\n",
    "\\sigma_\\mathrm{f} &= \\frac{\\varepsilon_\\mathrm{f}}{ E_\\mathrm{f} } \\\\\n",
    "\\sigma_\\mathrm{m} &= \\frac{\\varepsilon_\\mathrm{m}}{ E_\\mathrm{f} }\n",
    "\\end{align}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/latex": [
       "$\\displaystyle \\left( E_\\mathrm{f} \\left(\\begin{cases} 0 & \\text{for}\\: x \\leq - \\frac{P}{p \\tau} \\\\\\frac{P}{A_\\mathrm{f} E_\\mathrm{f}} + \\frac{p \\tau x}{A_\\mathrm{f} E_\\mathrm{f}} & \\text{otherwise} \\end{cases}\\right), \\  E_\\mathrm{m} \\left(\\begin{cases} 0 & \\text{for}\\: x \\leq - \\frac{P}{p \\tau} \\\\- \\frac{P}{A_\\mathrm{m} E_\\mathrm{m}} - \\frac{p \\tau x}{A_\\mathrm{m} E_\\mathrm{m}} & \\text{otherwise} \\end{cases}\\right)\\right)$"
      ],
      "text/plain": [
       "⎛             ⎛⎧                                                              \n",
       "⎜             ⎜⎪                          0                            for x ≤\n",
       "⎜             ⎜⎪                                                              \n",
       "⎜E_\\mathrm{f}⋅⎜⎨                                                              \n",
       "⎜             ⎜⎪            P                         p⋅τ⋅x                   \n",
       "⎜             ⎜⎪───────────────────────── + ─────────────────────────   otherw\n",
       "⎝             ⎝⎩A_\\mathrm{f}⋅E_\\mathrm{f}   A_\\mathrm{f}⋅E_\\mathrm{f}         \n",
       "\n",
       " -P ⎞               ⎛⎧                                                        \n",
       " ───⎟               ⎜⎪                           0                            \n",
       " p⋅τ⎟               ⎜⎪                                                        \n",
       "    ⎟, E_\\mathrm{m}⋅⎜⎨                                                        \n",
       "    ⎟               ⎜⎪              P                         p⋅τ⋅x           \n",
       "ise ⎟               ⎜⎪- ───────────────────────── - ───────────────────────── \n",
       "    ⎠               ⎝⎩  A_\\mathrm{m}⋅E_\\mathrm{m}   A_\\mathrm{m}⋅E_\\mathrm{m} \n",
       "\n",
       "         -P ⎞⎞\n",
       " for x ≤ ───⎟⎟\n",
       "         p⋅τ⎟⎟\n",
       "            ⎟⎟\n",
       "            ⎟⎟\n",
       "  otherwise ⎟⎟\n",
       "            ⎠⎠"
      ]
     },
     "execution_count": 73,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sig_f_x = E_f * eps_f_x\n",
    "sig_m_x = E_m * eps_m_x\n",
    "sig_f_x, sig_m_x"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "The profile of shear stress along the bond zone is obtained as\n",
    "\\begin{align}\n",
    " \\tau = \\frac{\\mathrm{d} \\sigma}{\\mathrm{d} x}\n",
    "\\end{align}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/latex": [
       "$\\displaystyle \\begin{cases} 0 & \\text{for}\\: x \\leq - \\frac{P}{p \\tau} \\\\\\tau & \\text{otherwise} \\end{cases}$"
      ],
      "text/plain": [
       "⎧           -P \n",
       "⎪0  for x ≤ ───\n",
       "⎨           p⋅τ\n",
       "⎪              \n",
       "⎩τ   otherwise "
      ]
     },
     "execution_count": 74,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tau_x = sig_f_x.diff(x) * A_f / p\n",
    "sp.simplify(tau_x)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "### Plot the strains and stresses\n",
    "Similarly to the callable function `get_u_fa_x` let us define the functions for the strains and stresses using the `sp.lambdify` generator "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [],
   "source": [
    "get_eps_f_x = sp.lambdify((x, P), eps_f_x.subs(data_f))\n",
    "get_eps_m_x = sp.lambdify((x, P), eps_m_x.subs(data_f))\n",
    "get_sig_f_x = sp.lambdify((x, P), sig_f_x.subs(data_f))\n",
    "get_sig_m_x = sp.lambdify((x, P), sig_m_x.subs(data_f))\n",
    "get_tau_x = sp.lambdify((x, P), tau_x.subs(data_f))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "To make the code for plotting shorter let us define a general procedure plotting and filling the curves and attaching the labels to a specified subplot in one call "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [],
   "source": [
    "def plot_filled_var(ax, xdata, ydata, xlabel='', ylabel='', \n",
    "                    color='black', alpha=0.1, ylim=None):\n",
    "    line, = ax.plot(xdata, ydata, color=color);\n",
    "    if xlabel:\n",
    "        ax.set_xlabel(xlabel); \n",
    "    if ylabel:\n",
    "        ax.set_ylabel(ylabel)\n",
    "    if ylim:\n",
    "        ax.set_ylim(*ylim)\n",
    "    ax.fill_between(xdata, ydata, color=color, alpha=alpha);\n",
    "    return line"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "metadata": {
    "scrolled": false,
    "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=\"1000\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, (ax_eps, ax_sig, ax_tau) = plt.subplots(1,3, figsize=(10,3), tight_layout=True)\n",
    "plot_filled_var(ax_eps, x_range, get_eps_f_x(x_range,1 ), \n",
    "                color='blue',xlabel='x [mm]', ylabel=r'$\\varepsilon$ [-]')\n",
    "plot_filled_var(ax_eps, x_range, get_eps_m_x(x_range,1 ), \n",
    "                color='blue',alpha=0.8)\n",
    "plot_filled_var(ax_sig, x_range, get_sig_f_x(x_range,1),\n",
    "                color='green', xlabel='x [mm]', ylabel=r'$\\sigma$ [MPa]')\n",
    "plot_filled_var(ax_sig, x_range, get_sig_m_x(x_range,1),\n",
    "                color='green', alpha=0.8)\n",
    "plot_filled_var(ax_tau, x_range, get_tau_x(x_range,1),\n",
    "                color='red', xlabel='x [mm]', ylabel=r'$\\tau$ [MPa]');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## Pull-out curve"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Quick summary - direct derivation\n",
    "\\begin{align}\n",
    "   \\varepsilon_\\mathrm{f}(0) &= \\frac{P}{E_\\mathrm{f} A_\\mathrm{f}},  \\;\\;\n",
    "    \\varepsilon_\\mathrm{m}(0) = \\frac{-P}{E_\\mathrm{m} A_\\mathrm{m}} \\\\\n",
    "    T &= \\frac{p\\tau}{E_\\mathrm{f} A_\\mathrm{f}} \\\\\n",
    "     a &= \\frac{\\varepsilon_\\mathrm{f}(0)}{T} = \\frac{P}{p\\tau}.\n",
    "\\end{align}\n",
    "Thus, the crack opening can be expressed as the area of the triangle\n",
    "\\begin{align}\n",
    "   w &= \\frac{1}{2}\\left[\\varepsilon_\\mathrm{f}(0) - \\varepsilon_\\mathrm{m}(0)\\right]a \\nonumber \\\\\n",
    "     &= \\frac{1}{2}\\frac{P^2}{p\\tau} \\left[\\frac{1}{E_\\mathrm{f} A_\\mathrm{f}} + \\frac{1}{E_\\mathrm{m} A_\\mathrm{m}}\\right].\n",
    "\\end{align}\n",
    "By solving this equation for $P$ we obtain the pullout curve in the form\n",
    "\\begin{align}\n",
    "   P(w) = \\sqrt{2wp\\tau \\frac{E_\\mathrm{f}A_\\mathrm{f}E_\\mathrm{m}A_\\mathrm{m}}{E_\\mathrm{f}A_\\mathrm{f}+E_\\mathrm{m}A_\\mathrm{m}}}.\n",
    "\\end{align}\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Pull-out curve derived from the displacement field solution "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "**`sympy` explanation:** In parallel let us use again the `subs` and `solve` provided in `sympy` to define the `P_push` and `P_pull` variables in the running `jupyter` kernel. As `solve` searches for zero point of the supplied equation we must transform the above equation into"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/latex": [
       "$\\displaystyle - w + \\frac{P^{2}}{2 A_\\mathrm{m} E_\\mathrm{m} p \\tau} + \\frac{P^{2}}{2 A_\\mathrm{f} E_\\mathrm{f} p \\tau}$"
      ],
      "text/plain": [
       "                     2                                 2              \n",
       "                    P                                 P               \n",
       "-w + ─────────────────────────────── + ───────────────────────────────\n",
       "     2⋅A_\\mathrm{m}⋅E_\\mathrm{m}⋅p⋅τ   2⋅A_\\mathrm{f}⋅E_\\mathrm{f}⋅p⋅τ"
      ]
     },
     "execution_count": 79,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "u_f_x.subs(x,0) - w"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "and then send it to `sp.solve`"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/latex": [
       "$\\displaystyle \\left( - \\sqrt{2} \\sqrt{A_\\mathrm{f}} \\sqrt{A_\\mathrm{m}} \\sqrt{E_\\mathrm{f}} \\sqrt{E_\\mathrm{m}} \\sqrt{p} \\sqrt{\\tau} \\sqrt{\\frac{w}{A_\\mathrm{f} E_\\mathrm{f} + A_\\mathrm{m} E_\\mathrm{m}}}, \\  \\sqrt{2} \\sqrt{A_\\mathrm{f}} \\sqrt{A_\\mathrm{m}} \\sqrt{E_\\mathrm{f}} \\sqrt{E_\\mathrm{m}} \\sqrt{p} \\sqrt{\\tau} \\sqrt{\\frac{w}{A_\\mathrm{f} E_\\mathrm{f} + A_\\mathrm{m} E_\\mathrm{m}}}\\right)$"
      ],
      "text/plain": [
       "⎛                                                                             \n",
       "⎜      ______________   ______________   ______________   ______________      \n",
       "⎜-√2⋅╲╱ A_\\mathrm{f} ⋅╲╱ A_\\mathrm{m} ⋅╲╱ E_\\mathrm{f} ⋅╲╱ E_\\mathrm{m} ⋅√p⋅√τ\n",
       "⎝                                                                             \n",
       "\n",
       "     _______________________________________________________                  \n",
       "    ╱                           w                                  ___________\n",
       "⋅  ╱  ───────────────────────────────────────────────────── , √2⋅╲╱ A_\\mathrm{\n",
       " ╲╱   A_\\mathrm{f}⋅E_\\mathrm{f} + A_\\mathrm{m}⋅E_\\mathrm{m}                   \n",
       "\n",
       "                                                                 _____________\n",
       "___   ______________   ______________   ______________          ╱             \n",
       "f} ⋅╲╱ A_\\mathrm{m} ⋅╲╱ E_\\mathrm{f} ⋅╲╱ E_\\mathrm{m} ⋅√p⋅√τ⋅  ╱  ────────────\n",
       "                                                             ╲╱   A_\\mathrm{f}\n",
       "\n",
       "__________________________________________⎞\n",
       "              w                           ⎟\n",
       "───────────────────────────────────────── ⎟\n",
       "⋅E_\\mathrm{f} + A_\\mathrm{m}⋅E_\\mathrm{m} ⎠"
      ]
     },
     "execution_count": 80,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Pw_push, Pw_pull = sp.solve(u_f_x.subs({x:0})-w, P)\n",
    "Pw_push, Pw_pull"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "Note that the obtained $P(w)$ covers both the pull-out and push-in case. If we supply the parameters defined above with unit stiffness, area and perimeter we obtain"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 91,
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAG8AAAAaCAYAAAC5KgISAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAEJElEQVRoBe2a/1HbMBTHSa4DUDpBwwbQTkDYANigsAE9/iL/9WADYIIWNgAmaMsGZIOmbJB+P0JPlR2fS2PLMnd5d/KTnyy/30+Sk7X5fL4Wt9PT0y21cUxb9Ys26toe8sdxFc8BRIPJZLKl/onwvtFyYskxEv/HJjLoHYMm85vObUMHybCrdlT2y5uScFe63ynRct6eifmuhL7LKURD3q3oIBtgh0O1S5MnZJ6IFyI+Cp/bYE4sOci6a+HtnHI04d22DnofVWhb+Am5hlw8k0N1g1ehZ4bP4v8lswxN2betAwlGJjtwzlPvSO3SPPo8lO8qOdbFfSx8k0+KZpwT6YA9SDIH5jwIt57WB3QiIYja1wyt66CAmMogU+E9DDNUZyRMpPdiU+Ajdk/4tWddKh3wE5XSrXlj4ScZyy2CEDMDERvqemZZlmWfUgc2LR8QjKMCuznSMTtEWbcZC+PplHbohR2xxighnE3drtTfc+R5r37nASmeVDGyLpUOD3r/OnxY8yibM7U+AA6qyjqcwxGGdZmojoESEgcfDsOALjrjBzvqp9bBfDXCeRtqySNUxmf3SImuA74iFI4ruie4vvtJfGmIHQWZd4bNlp5nTaCVnxOpGSA/7R9vSa2D+WqDskmUmjcX5JKwjN8vDNQTPmke6e1A/WN1yBgMWnno9s9cuAnFy0xjtnk50FA4+4nO5zygvNliR9aq87x8fdAh+ArnmSedFcoXCc14pcHLz1bdaz6ZY9l0pnuit2xsphKxhXUComhOPmEinkAyRzIMjc1W2VG1OjHxf0Dv75MOVEoHQ13xZCA8k9u7Ylg1jGkOXDi/aZx1oirrYkH4WP7A+yIiZbQQCBrH0KGMRs8u3YWnWl90IICBKc5DKCNATAKR8mQeBo4Bh5pzY3rcZ07sOMaqaOz0Cg6NX9Kk3xMdLNFmOI/NQFc7M9tJhuyTQci6G2+YOtuSTcHpep6SiSJbNkk0+mGthS4a2+q52k97riHuXIeSvNjAncsH/PCqGwzzVgqShUlBPK7FgLOZ46f7wpfyOuZ61korcwCy9UqNAHynxhlwIYM9Dw3//SLPzbKg93Wug8nqbTAS3nU/CanzW4P7wknKjTEGiwfZQRZwbsPo/E7lPveonwzEg4C5E24coLl0wDjije2+Cp9TNoFvaiz+yUFMKWs0yiVb71BC1U8JH8W7seMQMJcO4svehOB31cWcRznCmF0BZzUE+dGWQesE90r/qntmibFOdfDycc4N+wPnPB9JlBRKS3IQH85qlGhb/FPzPBDPVv8hkEEHbESVCh8p4r9BkAn3EmrpAzlvX0EaC8gvVMZN4bDMBOfBUgNkXicbCPit4GUWkF84HlwIF/Yltua5t2iQcnYrzPFhBf2xANm28HfMQub1R9aVJC+xwB9QGj9Qo8RIMwAAAABJRU5ErkJggg==\n",
      "text/latex": [
       "$\\displaystyle \\left( - \\sqrt{w}, \\  \\sqrt{w}\\right)$"
      ],
      "text/plain": [
       "(-√w, √w)"
      ]
     },
     "execution_count": 91,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Pw_push.subs(data_f), Pw_pull.subs({A_f:1, E_f:1, L_b:1, p:1, tau:1, A_m:1, E_m:1})"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "### Plot the pull-out curve\n",
    "The symbolic expression must be transformed into a quantifiable form using `sp.lambdify`"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 117,
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [],
   "source": [
    "get_Pw_pull = sp.lambdify(w, Pw_pull.subs(data_f))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "For completeness, let us add the solution of the rigid matrix problem"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 119,
   "metadata": {},
   "outputs": [],
   "source": [
    "Pw_pull_rigid = sp.sqrt(2*tau*p*w*E_f*A_f)\n",
    "get_Pw_pull_rigid = sp.lambdify(w, Pw_pull_rigid.subs(data_f))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "Plotting is done using the same methods as above"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 121,
   "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,iVBORw0KGgoAAAANSUhEUgAAA0gAAAHgCAYAAACfN01xAAAgAElEQVR4nOzdZ3SU5aKG4S89QOhIRwSlSBFUwGAhFgLYQFSwgyIgCCoWBEGNDRA3yraAyEGwUJS4NaKgBghFaSJICSI1AVJJCCQhIXXu82OkjDMTkiHJN5M811r3D+OE5Jy91uZ99sy8YyAiIiIiIiIAGGb/AiIiIiIiIu5CA0lEREREROQfGkgiIiIiIiL/0EASERERERH5hwaSiIiIiIjIPzSQRERERERE/qGBJCIiIiIi8g8NJBERERERkX9oIImIiIiIiPxDA0lEREREROQfGkgiIiIiIiL/0EASERERERH5hwaSiIiIiIjIPzSQRERERERE/qGBJCIiIiIi8g8NJBERERERkX9oIJWT48ePExERwZYtW4iOjlZKKaWUUkqVUlu2bCEiIoLjx49f8LldA6mcREREYBiGUkoppZRSqoyKiIi44HO7BlI52bJly5n/0Mxe2EoppZRSSlWkTj8ZsWXLlgs+t2sglZPo6GgMwyA6OtrsX0VEREREpEIpzbO2BlI50UASERERESkbGkgeSANJRERERKRsaCB5IA0kEREREZGyoYHkgTSQRERERETKhgaSB9JAEhEREREpGxpIHkgDSURERESkbGggeSANJBERERGRsqGB5IE0kEREREREyoYGkgfSQBIRERERKRuVdiCtXLmSxx57jDZt2lC1alUaN25M3759+eOPP4r1/cnJyQwePJi6detSpUoVgoODWbFihcPHLl++nODgYKpUqULdunUZPHgwycnJLv/uGkgiIiIiImWj0g6ke++9l5tuuomZM2eyevVqwsPDCQ4OxtfXl5UrVxb5vTk5OXTo0IGmTZsyf/58IiMj6devH76+vqxevdrmsatXr8bX15d+/foRGRnJ/PnzadKkCR06dCAnJ8el310DSURERESkbFTageToGZzMzEwaNGjALbfcUuT3zpgxA8MwWL9+/Zmv5efn065dO7p162bz2K5du9KuXTvy8/PPfG3dunUYhsHMmTNd+t01kEREREREykalHUjO3HTTTbRu3brIx/Ts2ZM2bdrYfX3y5MkYhkFcXBwAcXFxGIbBlClT7B7bunVrQkNDXfodNZBERERERMqGBtI5Tpw4Qc2aNenfv3+Rj2vYsCEDBgyw+/qPP/6IYRj8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XNscDoe6dOmin//85z57fC0EEgCA/RBIAADg12RnZ8sYowMHDuj48eO68MIL9c9//lNpaWm6/fbbJVVHVNu2bXXo0KF6n6chgbRz506P7XfeeaeCgoK8PpW6+uqr9YMf/MBnj6+FQAIAsB8CCQAA/Jo1a9bIGKMvv/xSzz77rHr06CGHw6EHH3xQN998s5xOp/r06aP77rvvrM/TkEA6cOCA12Patm3rtX9iYqLHUuFNfXwtBBIAgP0QSAAA4Nd8+OGHrmjo0aOH/vrXv0qS/vjHP+rKK6/UihUrFBoaqj179pz1eQgkAABoCAQSAAD4Nbt27ZIxRhMmTFDnzp11/PhxSdILL7ygnj17KjExUXffffc5n4dAAgCAhkAgAQCAX3Po0CEZYxQSEqLHH3/ctX3JkiUKCQlxLa99LggkAABoCAQSAAD4NVVVVQoKCvJahOGNN96QMUbJyckNeh4CCQAAGgKBBAAArYLaQHI4HKqsrLT7cDxwOp1yOBxauHAhgQQAYDMEEgAAtApSUlJkjJExps5Pb+xk+fLlrmMjkAAA7IVAAgCAVkFhYaE2b96szZs3a/v27XYfjgdHjhxxHdvmzZtdC1EAAMD5h0ACAAAAAACogUACAAAAAACogUACAAAAAACogUACAAAAAACogUACAAAAAACogUACAAAAAACogUACAAAAAACogUACAAAAAACogUACAAAAAACogUACAAAAAACogUACAAAAAACogUACAAAAAACogUACAAAAAACogUACAAAAAACogUACAAAAAACogUACAAAAAACogUACAAAAAACogUACAAAAAACogUACAAAAAACo4f8DfRpsDeozkf4AAAAASUVORK5CYII=\" width=\"700\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, ax_pull = plt.subplots(1,1, figsize=(7,4), tight_layout=True)\n",
    "w_range = np.linspace(0,2,50)\n",
    "plot_filled_var(ax_pull, w_range, get_Pw_pull(w_range), \n",
    "                color='blue', xlabel='$w$ [mm]', ylabel=r'$P$ [N]');\n",
    "plot_filled_var(ax_pull, w_range, get_Pw_pull_rigid(w_range), \n",
    "                color='red');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "### Interactive exploration\n",
    "Now that we have finished the construction of the model we can track the process and explore the correspondence between the internal state and externally observed response"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 122,
   "metadata": {
    "hide_input": false,
    "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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g4LDAnwdWPLz8xUeHq6lS5fqyJEjFbnwwgvVr18/HTlyRD/99FONv5szOOpfRoZ09tmVxYbDIU2fLn32mfkHB4QQYufYpeC47LLLtGDBAr3++uv1+hhYzvgEAFjViRMntGTJErVu3bqi2AgJCdGcOXO0d+9eNUaxQcFhEQkJCVWecpqamlrjKadbt26t9uyLU5k/f77X+8N/kfFNSYl07bXul6P06ye99hqXoxBCSH3ELgXH8OHDFRYWVnH5avv27TVhwgTdddddWr9+vb766iuf3pczPgEAVpSenq6+ffu6fTdceOGF2rx5sxqz2KDgsIj09HQZhqF169a5bY+Nja3xpmFHjhzR1q1bPTJkyBD17NlTW7du1YEDB7zeHwoO75SXS2vXut9EtGlT6c9/lg4eNP+AgBBC/CV2KTgk1yPld+3apRdffFE33XSToqKiKgoPX+/ZxRmfAAAr2bNnjy699FK3YqN79+5atmxZo12OQsFhUTExMWrTpo1WrVqlzMxMJSQkyDAMrVmzpuJnZs+eraCgIOXl5dX4XlxT23i++Ub6/e/dz9oYN0764APzDwQIIcTfYqeCoyqvvfaaevbsqVWrVvn0es74BABYweHDhxUfHy+n01nxPdK8eXP96U9/0pdffimzig0KDgs5duyYEhMTFRERoSZNmmjw4MFKTU11+5m4uDgZhqFDhw7V+F4UHA2vvFxKSXE/a6NtW2nJEqmw0PyDAEII8cfYveCQpOXLl+vOO+/06bWc8QkAMNP333+vBQsWqGnTphXFhtPp1BVXXKHt27fL7GKDggNVYmCpWUmJNHWq+1kbEydKH39s/vBPCCH+HH8oOA4fPqxevXr5/HrO+AQANLaff/5ZTz31lNq3b+929t/FF1+s9PR0FRUVyexSg4ID1WJgqd6rr0rt27uftfHkk5y1QQghjRG7FBw333yzkpOTtWvXLo+zKg4ePKjw8HCf35szPgEAjaW0tFTJycnq3r27W7HRr18/rV69WoWFhTK7zKDgwBkxsHj697+ladPcz9qYMEHascP8gZ8QQgIldik4OnToUHFD0bCwMA0fPlxz587VQw89pPPOO09Dhw6t199nFuYFAPBPZWVleuWVV3T22We7FRs9evTQk08+qby8PJldYlBwoNYYWNxlZUldulQWG61bS088wVkbhBDS2LFLwSG5nlyy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S5Ys4QyPRgwFh8nq4xKV8vJyzZ49W06nU6+88kqtf7eVz+A4elTq2dNVbjRpIr35pvnDNSGEEPNCweH/T10rLqbgIITYK1999ZU2btyou+++W+PHj1erVq2qLTz69u2r66+/XuvWrdOhQ4dM33d/DQWHyRISEqq8yWhqamqtbjJ6qtxwOBxKTk6u8/5YZeC77rrKS1PuvNP8wZoQQoi5CfSCIxCeulZcTMFBCLF3CgoK9N577+mBBx7QhAkT1KJFiyrLjmbNmunSSy/VE088oc8++8z0/fanUHCYLD09XYZhaN26dW7bY2NjzziwlJeXa86cOXI4HFq1alW97I8VBr516yrLjVGjpLw88wdrQggh5ibQC45AeOpacTEFByHEv5Kfn6+0tDT96U9/0vnnny+n0+lRdjidTo0cOVILFixQdna26fts91BwWEBMTIzatGmjVatWKTMzUwkJCTIMQ2vWrKn4mdmzZysoKEh5eXkV22655RYZhqHZs2frww8/dMunn37q076YPfAVFEitW7vKjdatpexs84dqQggh5ifQC45AeOpacTEFByHEv7N3714tX75cU6dOVZs2bao8u2PQoEG65557KDt8DAWHBRw7dkyJiYmKiIhQkyZNNHjwYI+bhsXFxckwDB06dKhiW48ePaq9xqtHjx4+7YuZA19ZmTRmTOXZG08/bf5ATQghxBoJ9IIjEJ66VlxMwUEICZwUFBTo9ddf19y5c6s9rhs8eLAWLFignJwc0/fXLqHggBszB77FiyvLjalTpcJC8wdqQggh1ggFh/8/da24mIKDEBKYKSoqUkZGhm677TadffbZVV7GMnr0aD355JP68ssvTd9fK4eCA27MGvhycqSQEFe50aOHlJtr/jBNCCHEOgn0giMQnrpWXEzBQQghRUVFev/99zV//nz17NnTo+xo2rSppk2bpo0bN6qoqMj0/bVaKDjgxoyB78cfpT59XOVGcLC0YYP5gzQhhBBrJdALjkB46lpxMQUHIYT8OkVFRXrrrbc0e/ZstWvXzqPs6Nmzp+666y7t3LnT9H21Sig44MaMge/GGysvTbnlFqmoyPxBmhBCiLUS6AVHIDx1rbiYgoMQQqpLXl6eVq9erUmTJikkJMSt6AgODtakSZOUkpKiwsJC0/fVzFBwwE1jD3zvvltZbgwbJn39tflDNCGEEOsl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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": "7e246753a60c4fe3b56507359c426bfa",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "interactive(children=(FloatSlider(value=0.0, description='w', max=1.0, step=0.02), Output()), _dom_classes=('w…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import ipywidgets as ipw\n",
    "\n",
    "def update_filled_plot(ax, line, xdata, ydata, color='green', alpha=0.1):\n",
    "    line.set_ydata(ydata)\n",
    "    ax.collections.clear()\n",
    "    ax.fill_between(xdata, ydata, 0, color=color, alpha=alpha)\n",
    "\n",
    "w_max = 1.0\n",
    "P_max = get_Pw_pull(w_max)\n",
    "eps_max = get_eps_f_x(0,P_max)\n",
    "eps_min = get_eps_m_x(0,P_max)\n",
    "tau_max = float(tau.subs(data_f) * 2)\n",
    "\n",
    "fig, ((ax_po, ax_u),(ax_eps, ax_tau)) = plt.subplots(2,2,figsize=(9,5), tight_layout=True)\n",
    "\n",
    "x_range = np.linspace(-2,0,100)\n",
    "sig_f_x_range = get_sig_f_x(x_range, 0)\n",
    "tau_x_range = get_tau_x(x_range, 0)\n",
    "\n",
    "line_u_f = plot_filled_var(ax_u, x_range, get_u_fa_x(x_range, 0), \n",
    "                         xlabel='$x$ [mm]', ylabel='$u$ [mm]', \n",
    "                         color='black', alpha=0.2, ylim=(0, w_max)\n",
    "                        )\n",
    "line_u_m = plot_filled_var(ax_u, x_range, get_u_ma_x(x_range, 0), \n",
    "                         color='black', alpha=0.8\n",
    "                        )\n",
    "\n",
    "line_eps_f = plot_filled_var(ax_eps, x_range, get_eps_f_x(x_range, 0), \n",
    "                           xlabel='$x$ [mm]', ylabel=r'$\\varepsilon$ [mm]', color='green',\n",
    "                           ylim=(eps_min, eps_max)\n",
    "                          )\n",
    "\n",
    "line_eps_m = plot_filled_var(ax_eps, x_range, get_eps_m_x(x_range, 0), \n",
    "                           xlabel='$x$ [mm]', ylabel=r'$\\varepsilon$ [mm]', color='green',\n",
    "                           ylim=(eps_min, eps_max)\n",
    "                          )\n",
    "\n",
    "line_tau = plot_filled_var(ax_tau, x_range, get_tau_x(x_range, 0), \n",
    "                           xlabel='$x$ [mm]', ylabel=r'$\\tau$ [MPa]', color='red',\n",
    "                           ylim=(0, tau_max)\n",
    "                          )\n",
    "\n",
    "w_range = np.linspace(0,w_max,50)\n",
    "plot_filled_var(ax_po, w_range, get_Pw_pull(w_range), \n",
    "                xlabel=r'$w$ [mm]', ylabel=r'$P$ [N]', color='blue')\n",
    "Pw_marker, = ax_po.plot(0,0,marker='o', color='blue')\n",
    "\n",
    "def update(w=w_max):\n",
    "    P = get_Pw_pull(w)\n",
    "    Pw_marker.set_ydata(P)\n",
    "    Pw_marker.set_xdata(w) \n",
    "    update_filled_plot(ax_u, line_u_m, x_range, get_u_ma_x(x_range,P),\n",
    "                       color='black', alpha=0.7)\n",
    "    update_filled_plot(ax_u, line_u_f, x_range, get_u_fa_x(x_range,P),\n",
    "                       color='black', alpha=0.1)\n",
    "    update_filled_plot(ax_eps, line_eps_m, x_range, get_eps_m_x(x_range, P), \n",
    "                       color='green')\n",
    "    update_filled_plot(ax_eps, line_eps_f, x_range, get_eps_f_x(x_range, P), \n",
    "                       color='green')\n",
    "    update_filled_plot(ax_tau, line_tau, x_range, get_tau_x(x_range, P), \n",
    "                       color='red')\n",
    "    fig.canvas.draw_idle()\n",
    "\n",
    "ipw.interact(update, w=ipw.FloatSlider(min=0, max=w_max, step=w_max/50));"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## Let's learn from the model\n",
    "\n",
    "Exercise the relation between $P$ and $\\tau(x)$ and between $w$ and $\\varepsilon(x)$.\n",
    "\n",
    " 1. What is the meaning of the green area?\n",
    " 2. What is the meaning of the red area?\n",
    " 3. What is the meaning of the slope of the green curve?\n",
    " 4. Is it possible to reproduce the shown RILEM test response using this \"frictional\" model?\n",
    " 4. What is the role of debonded length $a$ in view of general non-linear simulation?\n",
    " 5. When does the pull-out fail?\n",
    " 6. What happens with $a$ upon unloading?"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## Let's make a prediction\n",
    "What is the effect of the elastic matrix? What ratio of $\\frac{E_\\mathrm{f} A_\\mathrm{f}}{E_\\mathrm{m} A_\\mathrm{m}}$ is it relevant?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.7"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": true,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {
    "height": "calc(100% - 180px)",
    "left": "10px",
    "top": "150px",
    "width": "203.5px"
   },
   "toc_section_display": true,
   "toc_window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}