{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# RVE Test "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "%load_ext autoreload\n",
    "%autoreload 2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [],
   "source": [
    "import compmod2 as cp2\n",
    "import argiope as ag\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "from string import Template\n",
    "import inspect, os, local_settings, scipy\n",
    "import matplotlib.pyplot as plt\n",
    "from mpl_toolkits import mplot3d as mpl3d\n",
    "import matplotlib.colors as colors\n",
    "import matplotlib as mpl\n",
    "%matplotlib nbagg"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [],
   "source": [
    "# USEFUL FUNCTIONS\n",
    "def create_dir(path):\n",
    "    try:\n",
    "        os.mkdir(path)\n",
    "    except:\n",
    "        pass\n",
    "# SETTINGS\n",
    "workdir   = \"_workdir/\"\n",
    "outputdir = \"outputs/\"\n",
    "label   = \"RVE\"\n",
    "create_dir(workdir)\n",
    "create_dir(workdir + outputdir)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Model settings"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 10.5 ms, sys: 0 ns, total: 10.5 ms\n",
      "Wall time: 10.5 ms\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "shape = np.array([4, 4, 4])\n",
    "Ne = shape.prod()\n",
    "\n",
    "def element_map(mesh):\n",
    "    mesh.elements.loc[:, (\"type\", \"solver\", \"\") ] = \"C3D8R\"\n",
    "    return mesh\n",
    "    \n",
    "    \n",
    "def material_map(mesh):\n",
    "    mesh.elements.materials = [\"mat{0}\".format(i) for i in mesh.elements.index]\n",
    "    return mesh\n",
    "\n",
    "dist = cp2.distributions.Weibull(k = 1., l = 1.e-2)\n",
    "xt, x = dist.discretize(Ne, xmax = 1.)\n",
    "np.random.shuffle(x)\n",
    "E = 210.e3\n",
    "nu = .3\n",
    "materials = [ag.materials.ElasticPerfectlyPlastic(\n",
    "                                 label = \"mat{0}\".format(i+1), \n",
    "                                 young_modulus = E, \n",
    "                                 poisson_ratio = nu, \n",
    "                                 yield_stress = x[i] * E) \n",
    "                                 for i in range(Ne)]\n",
    "\n",
    "steps = [cp2.models.RVEStep(name = \"loading1\", \n",
    "                            cx = (\"disp\", .1),\n",
    "                            field_output_frequency = 100),\n",
    "         cp2.models.RVEStep(name = \"unloading1\", \n",
    "                            cx = (\"force\", 0.),\n",
    "                            field_output_frequency = 100),\n",
    "         cp2.models.RVEStep(name = \"loading2\", \n",
    "                            cx = (\"disp\", .1),\n",
    "                            field_output_frequency = 100),]\n",
    "\n",
    "sample = cp2.models.RVESample(shape = shape,\n",
    "                              element_map = element_map,\n",
    "                              material_map = material_map)\n",
    "model = cp2.models.RVETest(label = label,\n",
    "                           parts = {\"sample\":sample},\n",
    "                           steps = steps,\n",
    "                           materials = materials,\n",
    "                           solver = \"abaqus\", \n",
    "                           solver_path = local_settings.ABAQUS_PATH,\n",
    "                           workdir = workdir,\n",
    "                           verbose = True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Solving"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "#### POST-PROCESSING \"RVE\" USING POST-PROCESSOR \"ABAQUS\"\n",
      "     Abaqus License Manager checked out the following license(s):\n",
      "     \"cae\" release 6.13 from flex2-symme.univ-savoie.fr\n",
      "     <7 out of 9 licenses remain available>.\n",
      "  => POST-PROCESSED RVE: DURATION = 1.68s >\n"
     ]
    }
   ],
   "source": [
    "if True:\n",
    "    model.write_input()\n",
    "    #model.run_simulation()\n",
    "    model.postproc()\n",
    "    model.save(workdir + label + \".pckl\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Post-Processing "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead tr th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe thead tr:last-of-type th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th colspan=\"3\" halign=\"left\">areas</th>\n",
       "      <th colspan=\"3\" halign=\"left\">dimensions</th>\n",
       "      <th colspan=\"3\" halign=\"left\">disp</th>\n",
       "      <th>energies</th>\n",
       "      <th>...</th>\n",
       "      <th colspan=\"5\" halign=\"left\">strains</th>\n",
       "      <th colspan=\"3\" halign=\"left\">stress</th>\n",
       "      <th>time</th>\n",
       "      <th>volume</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th>A1</th>\n",
       "      <th>A2</th>\n",
       "      <th>A3</th>\n",
       "      <th>L1</th>\n",
       "      <th>L2</th>\n",
       "      <th>L3</th>\n",
       "      <th>U1</th>\n",
       "      <th>U2</th>\n",
       "      <th>U3</th>\n",
       "      <th>We</th>\n",
       "      <th>...</th>\n",
       "      <th>E22</th>\n",
       "      <th>E33</th>\n",
       "      <th>LE11</th>\n",
       "      <th>LE22</th>\n",
       "      <th>LE33</th>\n",
       "      <th>S11</th>\n",
       "      <th>S22</th>\n",
       "      <th>S33</th>\n",
       "      <th>t</th>\n",
       "      <th>V</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>frame</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.00</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.999375</td>\n",
       "      <td>1.000687</td>\n",
       "      <td>1.000687</td>\n",
       "      <td>1.001</td>\n",
       "      <td>0.999688</td>\n",
       "      <td>0.999687</td>\n",
       "      <td>0.001</td>\n",
       "      <td>-0.000312</td>\n",
       "      <td>-0.000313</td>\n",
       "      <td>0.095873</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.000312</td>\n",
       "      <td>-0.000313</td>\n",
       "      <td>0.001000</td>\n",
       "      <td>-0.000312</td>\n",
       "      <td>-0.000313</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.01</td>\n",
       "      <td>1.000374</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.998707</td>\n",
       "      <td>1.001349</td>\n",
       "      <td>1.001354</td>\n",
       "      <td>1.002</td>\n",
       "      <td>0.999356</td>\n",
       "      <td>0.999351</td>\n",
       "      <td>0.002</td>\n",
       "      <td>-0.000644</td>\n",
       "      <td>-0.000649</td>\n",
       "      <td>0.353291</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.000644</td>\n",
       "      <td>-0.000649</td>\n",
       "      <td>0.001998</td>\n",
       "      <td>-0.000645</td>\n",
       "      <td>-0.000650</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.02</td>\n",
       "      <td>1.000704</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.998000</td>\n",
       "      <td>1.001992</td>\n",
       "      <td>1.002001</td>\n",
       "      <td>1.003</td>\n",
       "      <td>0.999004</td>\n",
       "      <td>0.998995</td>\n",
       "      <td>0.003</td>\n",
       "      <td>-0.000996</td>\n",
       "      <td>-0.001005</td>\n",
       "      <td>0.732349</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.000996</td>\n",
       "      <td>-0.001005</td>\n",
       "      <td>0.002996</td>\n",
       "      <td>-0.000996</td>\n",
       "      <td>-0.001005</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.03</td>\n",
       "      <td>1.000994</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.997261</td>\n",
       "      <td>1.002617</td>\n",
       "      <td>1.002631</td>\n",
       "      <td>1.004</td>\n",
       "      <td>0.998636</td>\n",
       "      <td>0.998623</td>\n",
       "      <td>0.004</td>\n",
       "      <td>-0.001364</td>\n",
       "      <td>-0.001377</td>\n",
       "      <td>1.199574</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.001364</td>\n",
       "      <td>-0.001377</td>\n",
       "      <td>0.003992</td>\n",
       "      <td>-0.001365</td>\n",
       "      <td>-0.001378</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.04</td>\n",
       "      <td>1.001250</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 33 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "          areas                     dimensions                       disp  \\\n",
       "             A1        A2        A3         L1        L2        L3     U1   \n",
       "frame                                                                       \n",
       "0      1.000000  1.000000  1.000000      1.000  1.000000  1.000000  0.000   \n",
       "1      0.999375  1.000687  1.000687      1.001  0.999688  0.999687  0.001   \n",
       "2      0.998707  1.001349  1.001354      1.002  0.999356  0.999351  0.002   \n",
       "3      0.998000  1.001992  1.002001      1.003  0.999004  0.998995  0.003   \n",
       "4      0.997261  1.002617  1.002631      1.004  0.998636  0.998623  0.004   \n",
       "\n",
       "                           energies    ...      strains                      \\\n",
       "             U2        U3        We    ...          E22       E33      LE11   \n",
       "frame                                  ...                                    \n",
       "0      0.000000  0.000000  0.000000    ...     0.000000  0.000000  0.000000   \n",
       "1     -0.000312 -0.000313  0.095873    ...    -0.000312 -0.000313  0.001000   \n",
       "2     -0.000644 -0.000649  0.353291    ...    -0.000644 -0.000649  0.001998   \n",
       "3     -0.000996 -0.001005  0.732349    ...    -0.000996 -0.001005  0.002996   \n",
       "4     -0.001364 -0.001377  1.199574    ...    -0.001364 -0.001377  0.003992   \n",
       "\n",
       "                          stress          time    volume  \n",
       "           LE22      LE33    S11 S22 S33     t         V  \n",
       "frame                                                     \n",
       "0      0.000000  0.000000    NaN NaN NaN  0.00  1.000000  \n",
       "1     -0.000312 -0.000313    NaN NaN NaN  0.01  1.000374  \n",
       "2     -0.000645 -0.000650    NaN NaN NaN  0.02  1.000704  \n",
       "3     -0.000996 -0.001005    NaN NaN NaN  0.03  1.000994  \n",
       "4     -0.001365 -0.001378    NaN NaN NaN  0.04  1.001250  \n",
       "\n",
       "[5 rows x 33 columns]"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model = ag.utils.load(workdir + label + \".pckl\")\n",
    "data = model.data[\"history\"]\n",
    "data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/javascript": [
       "/* Put everything inside the global mpl namespace */\n",
       "window.mpl = {};\n",
       "\n",
       "\n",
       "mpl.get_websocket_type = function() {\n",
       "    if (typeof(WebSocket) !== 'undefined') {\n",
       "        return WebSocket;\n",
       "    } else if (typeof(MozWebSocket) !== 'undefined') {\n",
       "        return MozWebSocket;\n",
       "    } else {\n",
       "        alert('Your browser does not have WebSocket support.' +\n",
       "              'Please try Chrome, Safari or Firefox ≥ 6. ' +\n",
       "              'Firefox 4 and 5 are also supported but you ' +\n",
       "              'have to enable WebSockets in about:config.');\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n",
       "    this.id = figure_id;\n",
       "\n",
       "    this.ws = websocket;\n",
       "\n",
       "    this.supports_binary = (this.ws.binaryType != undefined);\n",
       "\n",
       "    if (!this.supports_binary) {\n",
       "        var warnings = document.getElementById(\"mpl-warnings\");\n",
       "        if (warnings) {\n",
       "            warnings.style.display = 'block';\n",
       "            warnings.textContent = (\n",
       "                \"This browser does not support binary websocket messages. \" +\n",
       "                    \"Performance may be slow.\");\n",
       "        }\n",
       "    }\n",
       "\n",
       "    this.imageObj = new Image();\n",
       "\n",
       "    this.context = undefined;\n",
       "    this.message = undefined;\n",
       "    this.canvas = undefined;\n",
       "    this.rubberband_canvas = undefined;\n",
       "    this.rubberband_context = undefined;\n",
       "    this.format_dropdown = undefined;\n",
       "\n",
       "    this.image_mode = 'full';\n",
       "\n",
       "    this.root = $('<div/>');\n",
       "    this._root_extra_style(this.root)\n",
       "    this.root.attr('style', 'display: inline-block');\n",
       "\n",
       "    $(parent_element).append(this.root);\n",
       "\n",
       "    this._init_header(this);\n",
       "    this._init_canvas(this);\n",
       "    this._init_toolbar(this);\n",
       "\n",
       "    var fig = this;\n",
       "\n",
       "    this.waiting = false;\n",
       "\n",
       "    this.ws.onopen =  function () {\n",
       "            fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n",
       "            fig.send_message(\"send_image_mode\", {});\n",
       "            if (mpl.ratio != 1) {\n",
       "                fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n",
       "            }\n",
       "            fig.send_message(\"refresh\", {});\n",
       "        }\n",
       "\n",
       "    this.imageObj.onload = function() {\n",
       "            if (fig.image_mode == 'full') {\n",
       "                // Full images could contain transparency (where diff images\n",
       "                // almost always do), so we need to clear the canvas so that\n",
       "                // there is no ghosting.\n",
       "                fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
       "            }\n",
       "            fig.context.drawImage(fig.imageObj, 0, 0);\n",
       "        };\n",
       "\n",
       "    this.imageObj.onunload = function() {\n",
       "        fig.ws.close();\n",
       "    }\n",
       "\n",
       "    this.ws.onmessage = this._make_on_message_function(this);\n",
       "\n",
       "    this.ondownload = ondownload;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_header = function() {\n",
       "    var titlebar = $(\n",
       "        '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
       "        'ui-helper-clearfix\"/>');\n",
       "    var titletext = $(\n",
       "        '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
       "        'text-align: center; padding: 3px;\"/>');\n",
       "    titlebar.append(titletext)\n",
       "    this.root.append(titlebar);\n",
       "    this.header = titletext[0];\n",
       "}\n",
       "\n",
       "\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_canvas = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var canvas_div = $('<div/>');\n",
       "\n",
       "    canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
       "\n",
       "    function canvas_keyboard_event(event) {\n",
       "        return fig.key_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    canvas_div.keydown('key_press', canvas_keyboard_event);\n",
       "    canvas_div.keyup('key_release', canvas_keyboard_event);\n",
       "    this.canvas_div = canvas_div\n",
       "    this._canvas_extra_style(canvas_div)\n",
       "    this.root.append(canvas_div);\n",
       "\n",
       "    var canvas = $('<canvas/>');\n",
       "    canvas.addClass('mpl-canvas');\n",
       "    canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
       "\n",
       "    this.canvas = canvas[0];\n",
       "    this.context = canvas[0].getContext(\"2d\");\n",
       "\n",
       "    var backingStore = this.context.backingStorePixelRatio ||\n",
       "\tthis.context.webkitBackingStorePixelRatio ||\n",
       "\tthis.context.mozBackingStorePixelRatio ||\n",
       "\tthis.context.msBackingStorePixelRatio ||\n",
       "\tthis.context.oBackingStorePixelRatio ||\n",
       "\tthis.context.backingStorePixelRatio || 1;\n",
       "\n",
       "    mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
       "\n",
       "    var rubberband = $('<canvas/>');\n",
       "    rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
       "\n",
       "    var pass_mouse_events = true;\n",
       "\n",
       "    canvas_div.resizable({\n",
       "        start: function(event, ui) {\n",
       "            pass_mouse_events = false;\n",
       "        },\n",
       "        resize: function(event, ui) {\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "        stop: function(event, ui) {\n",
       "            pass_mouse_events = true;\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "    });\n",
       "\n",
       "    function mouse_event_fn(event) {\n",
       "        if (pass_mouse_events)\n",
       "            return fig.mouse_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    rubberband.mousedown('button_press', mouse_event_fn);\n",
       "    rubberband.mouseup('button_release', mouse_event_fn);\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband.mousemove('motion_notify', mouse_event_fn);\n",
       "\n",
       "    rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
       "    rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
       "\n",
       "    canvas_div.on(\"wheel\", function (event) {\n",
       "        event = event.originalEvent;\n",
       "        event['data'] = 'scroll'\n",
       "        if (event.deltaY < 0) {\n",
       "            event.step = 1;\n",
       "        } else {\n",
       "            event.step = -1;\n",
       "        }\n",
       "        mouse_event_fn(event);\n",
       "    });\n",
       "\n",
       "    canvas_div.append(canvas);\n",
       "    canvas_div.append(rubberband);\n",
       "\n",
       "    this.rubberband = rubberband;\n",
       "    this.rubberband_canvas = rubberband[0];\n",
       "    this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
       "    this.rubberband_context.strokeStyle = \"#000000\";\n",
       "\n",
       "    this._resize_canvas = function(width, height) {\n",
       "        // Keep the size of the canvas, canvas container, and rubber band\n",
       "        // canvas in synch.\n",
       "        canvas_div.css('width', width)\n",
       "        canvas_div.css('height', height)\n",
       "\n",
       "        canvas.attr('width', width * mpl.ratio);\n",
       "        canvas.attr('height', height * mpl.ratio);\n",
       "        canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
       "\n",
       "        rubberband.attr('width', width);\n",
       "        rubberband.attr('height', height);\n",
       "    }\n",
       "\n",
       "    // Set the figure to an initial 600x600px, this will subsequently be updated\n",
       "    // upon first draw.\n",
       "    this._resize_canvas(600, 600);\n",
       "\n",
       "    // Disable right mouse context menu.\n",
       "    $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n",
       "        return false;\n",
       "    });\n",
       "\n",
       "    function set_focus () {\n",
       "        canvas.focus();\n",
       "        canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    window.setTimeout(set_focus, 100);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\n",
       "    for(var toolbar_ind in mpl.toolbar_items) {\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) {\n",
       "            // put a spacer in here.\n",
       "            continue;\n",
       "        }\n",
       "        var button = $('<button/>');\n",
       "        button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
       "                        'ui-button-icon-only');\n",
       "        button.attr('role', 'button');\n",
       "        button.attr('aria-disabled', 'false');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "\n",
       "        var icon_img = $('<span/>');\n",
       "        icon_img.addClass('ui-button-icon-primary ui-icon');\n",
       "        icon_img.addClass(image);\n",
       "        icon_img.addClass('ui-corner-all');\n",
       "\n",
       "        var tooltip_span = $('<span/>');\n",
       "        tooltip_span.addClass('ui-button-text');\n",
       "        tooltip_span.html(tooltip);\n",
       "\n",
       "        button.append(icon_img);\n",
       "        button.append(tooltip_span);\n",
       "\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    var fmt_picker_span = $('<span/>');\n",
       "\n",
       "    var fmt_picker = $('<select/>');\n",
       "    fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
       "    fmt_picker_span.append(fmt_picker);\n",
       "    nav_element.append(fmt_picker_span);\n",
       "    this.format_dropdown = fmt_picker[0];\n",
       "\n",
       "    for (var ind in mpl.extensions) {\n",
       "        var fmt = mpl.extensions[ind];\n",
       "        var option = $(\n",
       "            '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
       "        fmt_picker.append(option)\n",
       "    }\n",
       "\n",
       "    // Add hover states to the ui-buttons\n",
       "    $( \".ui-button\" ).hover(\n",
       "        function() { $(this).addClass(\"ui-state-hover\");},\n",
       "        function() { $(this).removeClass(\"ui-state-hover\");}\n",
       "    );\n",
       "\n",
       "    var status_bar = $('<span class=\"mpl-message\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n",
       "    // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n",
       "    // which will in turn request a refresh of the image.\n",
       "    this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.send_message = function(type, properties) {\n",
       "    properties['type'] = type;\n",
       "    properties['figure_id'] = this.id;\n",
       "    this.ws.send(JSON.stringify(properties));\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.send_draw_message = function() {\n",
       "    if (!this.waiting) {\n",
       "        this.waiting = true;\n",
       "        this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n",
       "    }\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    var format_dropdown = fig.format_dropdown;\n",
       "    var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n",
       "    fig.ondownload(fig, format);\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype.handle_resize = function(fig, msg) {\n",
       "    var size = msg['size'];\n",
       "    if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n",
       "        fig._resize_canvas(size[0], size[1]);\n",
       "        fig.send_message(\"refresh\", {});\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
       "    var x0 = msg['x0'] / mpl.ratio;\n",
       "    var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
       "    var x1 = msg['x1'] / mpl.ratio;\n",
       "    var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n",
       "    x0 = Math.floor(x0) + 0.5;\n",
       "    y0 = Math.floor(y0) + 0.5;\n",
       "    x1 = Math.floor(x1) + 0.5;\n",
       "    y1 = Math.floor(y1) + 0.5;\n",
       "    var min_x = Math.min(x0, x1);\n",
       "    var min_y = Math.min(y0, y1);\n",
       "    var width = Math.abs(x1 - x0);\n",
       "    var height = Math.abs(y1 - y0);\n",
       "\n",
       "    fig.rubberband_context.clearRect(\n",
       "        0, 0, fig.canvas.width, fig.canvas.height);\n",
       "\n",
       "    fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n",
       "    // Updates the figure title.\n",
       "    fig.header.textContent = msg['label'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n",
       "    var cursor = msg['cursor'];\n",
       "    switch(cursor)\n",
       "    {\n",
       "    case 0:\n",
       "        cursor = 'pointer';\n",
       "        break;\n",
       "    case 1:\n",
       "        cursor = 'default';\n",
       "        break;\n",
       "    case 2:\n",
       "        cursor = 'crosshair';\n",
       "        break;\n",
       "    case 3:\n",
       "        cursor = 'move';\n",
       "        break;\n",
       "    }\n",
       "    fig.rubberband_canvas.style.cursor = cursor;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_message = function(fig, msg) {\n",
       "    fig.message.textContent = msg['message'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_draw = function(fig, msg) {\n",
       "    // Request the server to send over a new figure.\n",
       "    fig.send_draw_message();\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n",
       "    fig.image_mode = msg['mode'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function() {\n",
       "    // Called whenever the canvas gets updated.\n",
       "    this.send_message(\"ack\", {});\n",
       "}\n",
       "\n",
       "// A function to construct a web socket function for onmessage handling.\n",
       "// Called in the figure constructor.\n",
       "mpl.figure.prototype._make_on_message_function = function(fig) {\n",
       "    return function socket_on_message(evt) {\n",
       "        if (evt.data instanceof Blob) {\n",
       "            /* FIXME: We get \"Resource interpreted as Image but\n",
       "             * transferred with MIME type text/plain:\" errors on\n",
       "             * Chrome.  But how to set the MIME type?  It doesn't seem\n",
       "             * to be part of the websocket stream */\n",
       "            evt.data.type = \"image/png\";\n",
       "\n",
       "            /* Free the memory for the previous frames */\n",
       "            if (fig.imageObj.src) {\n",
       "                (window.URL || window.webkitURL).revokeObjectURL(\n",
       "                    fig.imageObj.src);\n",
       "            }\n",
       "\n",
       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
       "                evt.data);\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "        else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n",
       "            fig.imageObj.src = evt.data;\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        var msg = JSON.parse(evt.data);\n",
       "        var msg_type = msg['type'];\n",
       "\n",
       "        // Call the  \"handle_{type}\" callback, which takes\n",
       "        // the figure and JSON message as its only arguments.\n",
       "        try {\n",
       "            var callback = fig[\"handle_\" + msg_type];\n",
       "        } catch (e) {\n",
       "            console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        if (callback) {\n",
       "            try {\n",
       "                // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n",
       "                callback(fig, msg);\n",
       "            } catch (e) {\n",
       "                console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
       "            }\n",
       "        }\n",
       "    };\n",
       "}\n",
       "\n",
       "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
       "mpl.findpos = function(e) {\n",
       "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
       "    var targ;\n",
       "    if (!e)\n",
       "        e = window.event;\n",
       "    if (e.target)\n",
       "        targ = e.target;\n",
       "    else if (e.srcElement)\n",
       "        targ = e.srcElement;\n",
       "    if (targ.nodeType == 3) // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "\n",
       "    // jQuery normalizes the pageX and pageY\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    // offset() returns the position of the element relative to the document\n",
       "    var x = e.pageX - $(targ).offset().left;\n",
       "    var y = e.pageY - $(targ).offset().top;\n",
       "\n",
       "    return {\"x\": x, \"y\": y};\n",
       "};\n",
       "\n",
       "/*\n",
       " * return a copy of an object with only non-object keys\n",
       " * we need this to avoid circular references\n",
       " * http://stackoverflow.com/a/24161582/3208463\n",
       " */\n",
       "function simpleKeys (original) {\n",
       "  return Object.keys(original).reduce(function (obj, key) {\n",
       "    if (typeof original[key] !== 'object')\n",
       "        obj[key] = original[key]\n",
       "    return obj;\n",
       "  }, {});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.mouse_event = function(event, name) {\n",
       "    var canvas_pos = mpl.findpos(event)\n",
       "\n",
       "    if (name === 'button_press')\n",
       "    {\n",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * mpl.ratio;\n",
       "    var y = canvas_pos.y * mpl.ratio;\n",
       "\n",
       "    this.send_message(name, {x: x, y: y, button: event.button,\n",
       "                             step: event.step,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "\n",
       "    /* This prevents the web browser from automatically changing to\n",
       "     * the text insertion cursor when the button is pressed.  We want\n",
       "     * to control all of the cursor setting manually through the\n",
       "     * 'cursor' event from matplotlib */\n",
       "    event.preventDefault();\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    // Handle any extra behaviour associated with a key event\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.key_event = function(event, name) {\n",
       "\n",
       "    // Prevent repeat events\n",
       "    if (name == 'key_press')\n",
       "    {\n",
       "        if (event.which === this._key)\n",
       "            return;\n",
       "        else\n",
       "            this._key = event.which;\n",
       "    }\n",
       "    if (name == 'key_release')\n",
       "        this._key = null;\n",
       "\n",
       "    var value = '';\n",
       "    if (event.ctrlKey && event.which != 17)\n",
       "        value += \"ctrl+\";\n",
       "    if (event.altKey && event.which != 18)\n",
       "        value += \"alt+\";\n",
       "    if (event.shiftKey && event.which != 16)\n",
       "        value += \"shift+\";\n",
       "\n",
       "    value += 'k';\n",
       "    value += event.which.toString();\n",
       "\n",
       "    this._key_event_extra(event, name);\n",
       "\n",
       "    this.send_message(name, {key: value,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n",
       "    if (name == 'download') {\n",
       "        this.handle_save(this, null);\n",
       "    } else {\n",
       "        this.send_message(\"toolbar_button\", {name: name});\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n",
       "    this.message.textContent = tooltip;\n",
       "};\n",
       "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to  previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"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",
       "        event.shiftKey = false;\n",
       "        // Send a \"J\" for go to next cell\n",
       "        event.which = 74;\n",
       "        event.keyCode = 74;\n",
       "        manager.command_mode();\n",
       "        manager.handle_keydown(event);\n",
       "    }\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    fig.ondownload(fig, null);\n",
       "}\n",
       "\n",
       "\n",
       "mpl.find_output_cell = function(html_output) {\n",
       "    // Return the cell and output element which can be found *uniquely* in the notebook.\n",
       "    // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n",
       "    // IPython event is triggered only after the cells have been serialised, which for\n",
       "    // our purposes (turning an active figure into a static one), is too late.\n",
       "    var cells = IPython.notebook.get_cells();\n",
       "    var ncells = cells.length;\n",
       "    for (var i=0; i<ncells; i++) {\n",
       "        var cell = cells[i];\n",
       "        if (cell.cell_type === 'code'){\n",
       "            for (var j=0; j<cell.output_area.outputs.length; j++) {\n",
       "                var data = cell.output_area.outputs[j];\n",
       "                if (data.data) {\n",
       "                    // IPython >= 3 moved mimebundle to data attribute of output\n",
       "                    data = data.data;\n",
       "                }\n",
       "                if (data['text/html'] == html_output) {\n",
       "                    return [cell, data, j];\n",
       "                }\n",
       "            }\n",
       "        }\n",
       "    }\n",
       "}\n",
       "\n",
       "// Register the function which deals with the matplotlib target/channel.\n",
       "// The kernel may be null if the page has been refreshed.\n",
       "if (IPython.notebook.kernel != null) {\n",
       "    IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n",
       "}\n"
      ],
      "text/plain": [
       "<IPython.core.display.Javascript object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAgAElEQVR4nOzdeXhU1cEG8EkUApgABvKwaMVSkVovmyiIC4vIYo1A/USKC/kqBC2NWrUtikvQCsZasX5WUBQ7AQxrIGIMUsCwhrAlGEiIQkhCIIEQQhYmyQyTeb8/eLg4JuHm3Dtz50zm/T3PfZ521uPLOZyXWe5YQEREREQBxeLrARARERGRuVgAiYiIiAIMCyARERFRgGEBJCIiIgowLIBEREREAYYFkIiIiCjAsAASERERBRgWQCIiIqIAwwJIREREFGBYAImIiIgCDAsgERERUYBhASQiIiIKMCyARERERAGGBZCIiIgowLAAEhEREQUYFkAiIiKiAMMCSERERBRgWACJiIiIAgwLIBEREVGAYQEkIiIiCjAsgEREREQBhgWQiIiIKMCwABIREREFGBZAIiIiogDDAkhEREQUYFgAiYiIiAIMCyARERFRgGEBJCIiIgowLIBEREREAYYFkIiIiCjAsAASERERBRgWQCIiIqIAwwJIREREFGBYAImIiIgCDAsgERERUYBhASQiIiIKMCyARERERAGGBZCIiIgowLAAEhEREQUYFkAiIiKiAMMCSERERBRgWACJiIiIAgwLIBEREVGAYQEkIiIiCjAsgEREREQBhgWQiIiIKMCwABIREREFGBZAIiIiogDDAkhEREQUYFgAiYiIiAIMCyARERFRgGEBJCIiIgowLIBEREREAUbKArh161ZERkaiW7dusFgsWLt2rdv1Foul0eMf//iHepsePXo0uH7mzJluj1NYWIjIyEi0a9cOnTp1wrPPPgu73W7KfyMRERGRr0hZAFNSUvDqq68iMTGx0QJYUlLidnzxxRcICgpCXl6eepsePXrgrbfecrtddXW1er3T6YSiKBgxYgQyMjKwceNGdO/eHTExMab9dxIRERH5gpQF8KcaK4A/N378eNx3331ul/Xo0QMffPBBk/dJSUlBcHAwTp48qV62bNkyhISEoLKy0tigiYiIiCTm9wXw1KlTuPrqq/Hll1+6Xd6jRw907doV4eHh6NevH95++223t3dff/119O3b1+0+5eXlsFgs+O6775o1tvr6ehQVFaGiogKVlZU8ePDgwYMHDz84KioqUFRUhPr6eoFG0rL4fQF89913ce2116K2ttbt8nnz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\" width=\"640\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure()\n",
    "for i in data.step.s.unique():\n",
    "    step = data[data.step.s == i]\n",
    "    plt.plot(step.strains.LE11, step.stress.S11, label = \"step {0}\".format(i))\n",
    "plt.xlabel(\"Log. strain, $E$\")\n",
    "plt.ylabel(\"Cauchy Stress, $\\sigma$\")\n",
    "plt.grid()\n",
    "plt.legend(loc = \"best\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "plt.figure()\n",
    "for i in data.step.s.unique():\n",
    "    step = data[data.step.s == i]\n",
    "    plt.plot(step.strains.LE11, step.energies.Wp, label = \"step {0}\".format(i))\n",
    "plt.xlabel(\"Log. strain, $E$\")\n",
    "plt.ylabel(\"Plastic Dissipated Energy, $W_p$\")\n",
    "plt.grid()\n",
    "plt.legend(loc = \"best\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## RVE plot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>frame</th>\n",
       "      <th>frame_value</th>\n",
       "      <th>label</th>\n",
       "      <th>part</th>\n",
       "      <th>position</th>\n",
       "      <th>step_label</th>\n",
       "      <th>step_num</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>EE</td>\n",
       "      <td>ISAMPLE</td>\n",
       "      <td>element</td>\n",
       "      <td>loading1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>LE</td>\n",
       "      <td>ISAMPLE</td>\n",
       "      <td>element</td>\n",
       "      <td>loading1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>PE</td>\n",
       "      <td>ISAMPLE</td>\n",
       "      <td>element</td>\n",
       "      <td>loading1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>S</td>\n",
       "      <td>ISAMPLE</td>\n",
       "      <td>element</td>\n",
       "      <td>loading1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>U</td>\n",
       "      <td>ISAMPLE</td>\n",
       "      <td>node</td>\n",
       "      <td>loading1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>EE</td>\n",
       "      <td>ISAMPLE</td>\n",
       "      <td>element</td>\n",
       "      <td>loading1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>LE</td>\n",
       "      <td>ISAMPLE</td>\n",
       "      <td>element</td>\n",
       "      <td>loading1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>PE</td>\n",
       "      <td>ISAMPLE</td>\n",
       "      <td>element</td>\n",
       "      <td>loading1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>S</td>\n",
       "      <td>ISAMPLE</td>\n",
       "      <td>element</td>\n",
       "      <td>loading1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>U</td>\n",
       "      <td>ISAMPLE</td>\n",
       "      <td>node</td>\n",
       "      <td>loading1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>EE</td>\n",
       "      <td>ISAMPLE</td>\n",
       "      <td>element</td>\n",
       "      <td>unloading1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>LE</td>\n",
       "      <td>ISAMPLE</td>\n",
       "      <td>element</td>\n",
       "      <td>unloading1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>PE</td>\n",
       "      <td>ISAMPLE</td>\n",
       "      <td>element</td>\n",
       "      <td>unloading1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>S</td>\n",
       "      <td>ISAMPLE</td>\n",
       "      <td>element</td>\n",
       "      <td>unloading1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>U</td>\n",
       "      <td>ISAMPLE</td>\n",
       "      <td>node</td>\n",
       "      <td>unloading1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>EE</td>\n",
       "      <td>ISAMPLE</td>\n",
       "      <td>element</td>\n",
       "      <td>unloading1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>LE</td>\n",
       "      <td>ISAMPLE</td>\n",
       "      <td>element</td>\n",
       "      <td>unloading1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>PE</td>\n",
       "      <td>ISAMPLE</td>\n",
       "      <td>element</td>\n",
       "      <td>unloading1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>S</td>\n",
       "      <td>ISAMPLE</td>\n",
       "      <td>element</td>\n",
       "      <td>unloading1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>U</td>\n",
       "      <td>ISAMPLE</td>\n",
       "      <td>node</td>\n",
       "      <td>unloading1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>EE</td>\n",
       "      <td>ISAMPLE</td>\n",
       "      <td>element</td>\n",
       "      <td>loading2</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>LE</td>\n",
       "      <td>ISAMPLE</td>\n",
       "      <td>element</td>\n",
       "      <td>loading2</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>22</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>PE</td>\n",
       "      <td>ISAMPLE</td>\n",
       "      <td>element</td>\n",
       "      <td>loading2</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>S</td>\n",
       "      <td>ISAMPLE</td>\n",
       "      <td>element</td>\n",
       "      <td>loading2</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>24</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>U</td>\n",
       "      <td>ISAMPLE</td>\n",
       "      <td>node</td>\n",
       "      <td>loading2</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>EE</td>\n",
       "      <td>ISAMPLE</td>\n",
       "      <td>element</td>\n",
       "      <td>loading2</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>26</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>LE</td>\n",
       "      <td>ISAMPLE</td>\n",
       "      <td>element</td>\n",
       "      <td>loading2</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>27</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>PE</td>\n",
       "      <td>ISAMPLE</td>\n",
       "      <td>element</td>\n",
       "      <td>loading2</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>28</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>S</td>\n",
       "      <td>ISAMPLE</td>\n",
       "      <td>element</td>\n",
       "      <td>loading2</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>29</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>U</td>\n",
       "      <td>ISAMPLE</td>\n",
       "      <td>node</td>\n",
       "      <td>loading2</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   frame frame_value label     part position  step_label step_num\n",
       "0      0           0    EE  ISAMPLE  element    loading1        0\n",
       "1      0           0    LE  ISAMPLE  element    loading1        0\n",
       "2      0           0    PE  ISAMPLE  element    loading1        0\n",
       "3      0           0     S  ISAMPLE  element    loading1        0\n",
       "4      0           0     U  ISAMPLE     node    loading1        0\n",
       "5      1           1    EE  ISAMPLE  element    loading1        0\n",
       "6      1           1    LE  ISAMPLE  element    loading1        0\n",
       "7      1           1    PE  ISAMPLE  element    loading1        0\n",
       "8      1           1     S  ISAMPLE  element    loading1        0\n",
       "9      1           1     U  ISAMPLE     node    loading1        0\n",
       "10     0           0    EE  ISAMPLE  element  unloading1        1\n",
       "11     0           0    LE  ISAMPLE  element  unloading1        1\n",
       "12     0           0    PE  ISAMPLE  element  unloading1        1\n",
       "13     0           0     S  ISAMPLE  element  unloading1        1\n",
       "14     0           0     U  ISAMPLE     node  unloading1        1\n",
       "15     1           1    EE  ISAMPLE  element  unloading1        1\n",
       "16     1           1    LE  ISAMPLE  element  unloading1        1\n",
       "17     1           1    PE  ISAMPLE  element  unloading1        1\n",
       "18     1           1     S  ISAMPLE  element  unloading1        1\n",
       "19     1           1     U  ISAMPLE     node  unloading1        1\n",
       "20     0           0    EE  ISAMPLE  element    loading2        2\n",
       "21     0           0    LE  ISAMPLE  element    loading2        2\n",
       "22     0           0    PE  ISAMPLE  element    loading2        2\n",
       "23     0           0     S  ISAMPLE  element    loading2        2\n",
       "24     0           0     U  ISAMPLE     node    loading2        2\n",
       "25     1           1    EE  ISAMPLE  element    loading2        2\n",
       "26     1           1    LE  ISAMPLE  element    loading2        2\n",
       "27     1           1    PE  ISAMPLE  element    loading2        2\n",
       "28     1           1     S  ISAMPLE  element    loading2        2\n",
       "29     1           1     U  ISAMPLE     node    loading2        2"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "step_label = \"loading1\"\n",
    "frame = -1\n",
    "field_label = \"LE\"\n",
    "component_label = \"v11\"\n",
    "\n",
    "# FIELDS MANAGEMENT\n",
    "fdata = model.parts[\"sample\"].mesh.fields_metadata()\n",
    "fields = model.parts[\"sample\"].mesh.fields\n",
    "F_id = fdata[(fdata.step_label == step_label) & (fdata.label == field_label)].sort_values(\"frame\").index[frame]\n",
    "F = fields[F_id].data[component_label]\n",
    "fdata"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/javascript": [
       "/* Put everything inside the global mpl namespace */\n",
       "window.mpl = {};\n",
       "\n",
       "\n",
       "mpl.get_websocket_type = function() {\n",
       "    if (typeof(WebSocket) !== 'undefined') {\n",
       "        return WebSocket;\n",
       "    } else if (typeof(MozWebSocket) !== 'undefined') {\n",
       "        return MozWebSocket;\n",
       "    } else {\n",
       "        alert('Your browser does not have WebSocket support.' +\n",
       "              'Please try Chrome, Safari or Firefox ≥ 6. ' +\n",
       "              'Firefox 4 and 5 are also supported but you ' +\n",
       "              'have to enable WebSockets in about:config.');\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n",
       "    this.id = figure_id;\n",
       "\n",
       "    this.ws = websocket;\n",
       "\n",
       "    this.supports_binary = (this.ws.binaryType != undefined);\n",
       "\n",
       "    if (!this.supports_binary) {\n",
       "        var warnings = document.getElementById(\"mpl-warnings\");\n",
       "        if (warnings) {\n",
       "            warnings.style.display = 'block';\n",
       "            warnings.textContent = (\n",
       "                \"This browser does not support binary websocket messages. \" +\n",
       "                    \"Performance may be slow.\");\n",
       "        }\n",
       "    }\n",
       "\n",
       "    this.imageObj = new Image();\n",
       "\n",
       "    this.context = undefined;\n",
       "    this.message = undefined;\n",
       "    this.canvas = undefined;\n",
       "    this.rubberband_canvas = undefined;\n",
       "    this.rubberband_context = undefined;\n",
       "    this.format_dropdown = undefined;\n",
       "\n",
       "    this.image_mode = 'full';\n",
       "\n",
       "    this.root = $('<div/>');\n",
       "    this._root_extra_style(this.root)\n",
       "    this.root.attr('style', 'display: inline-block');\n",
       "\n",
       "    $(parent_element).append(this.root);\n",
       "\n",
       "    this._init_header(this);\n",
       "    this._init_canvas(this);\n",
       "    this._init_toolbar(this);\n",
       "\n",
       "    var fig = this;\n",
       "\n",
       "    this.waiting = false;\n",
       "\n",
       "    this.ws.onopen =  function () {\n",
       "            fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n",
       "            fig.send_message(\"send_image_mode\", {});\n",
       "            if (mpl.ratio != 1) {\n",
       "                fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n",
       "            }\n",
       "            fig.send_message(\"refresh\", {});\n",
       "        }\n",
       "\n",
       "    this.imageObj.onload = function() {\n",
       "            if (fig.image_mode == 'full') {\n",
       "                // Full images could contain transparency (where diff images\n",
       "                // almost always do), so we need to clear the canvas so that\n",
       "                // there is no ghosting.\n",
       "                fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
       "            }\n",
       "            fig.context.drawImage(fig.imageObj, 0, 0);\n",
       "        };\n",
       "\n",
       "    this.imageObj.onunload = function() {\n",
       "        fig.ws.close();\n",
       "    }\n",
       "\n",
       "    this.ws.onmessage = this._make_on_message_function(this);\n",
       "\n",
       "    this.ondownload = ondownload;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_header = function() {\n",
       "    var titlebar = $(\n",
       "        '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
       "        'ui-helper-clearfix\"/>');\n",
       "    var titletext = $(\n",
       "        '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
       "        'text-align: center; padding: 3px;\"/>');\n",
       "    titlebar.append(titletext)\n",
       "    this.root.append(titlebar);\n",
       "    this.header = titletext[0];\n",
       "}\n",
       "\n",
       "\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_canvas = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var canvas_div = $('<div/>');\n",
       "\n",
       "    canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
       "\n",
       "    function canvas_keyboard_event(event) {\n",
       "        return fig.key_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    canvas_div.keydown('key_press', canvas_keyboard_event);\n",
       "    canvas_div.keyup('key_release', canvas_keyboard_event);\n",
       "    this.canvas_div = canvas_div\n",
       "    this._canvas_extra_style(canvas_div)\n",
       "    this.root.append(canvas_div);\n",
       "\n",
       "    var canvas = $('<canvas/>');\n",
       "    canvas.addClass('mpl-canvas');\n",
       "    canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
       "\n",
       "    this.canvas = canvas[0];\n",
       "    this.context = canvas[0].getContext(\"2d\");\n",
       "\n",
       "    var backingStore = this.context.backingStorePixelRatio ||\n",
       "\tthis.context.webkitBackingStorePixelRatio ||\n",
       "\tthis.context.mozBackingStorePixelRatio ||\n",
       "\tthis.context.msBackingStorePixelRatio ||\n",
       "\tthis.context.oBackingStorePixelRatio ||\n",
       "\tthis.context.backingStorePixelRatio || 1;\n",
       "\n",
       "    mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
       "\n",
       "    var rubberband = $('<canvas/>');\n",
       "    rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
       "\n",
       "    var pass_mouse_events = true;\n",
       "\n",
       "    canvas_div.resizable({\n",
       "        start: function(event, ui) {\n",
       "            pass_mouse_events = false;\n",
       "        },\n",
       "        resize: function(event, ui) {\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "        stop: function(event, ui) {\n",
       "            pass_mouse_events = true;\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "    });\n",
       "\n",
       "    function mouse_event_fn(event) {\n",
       "        if (pass_mouse_events)\n",
       "            return fig.mouse_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    rubberband.mousedown('button_press', mouse_event_fn);\n",
       "    rubberband.mouseup('button_release', mouse_event_fn);\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband.mousemove('motion_notify', mouse_event_fn);\n",
       "\n",
       "    rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
       "    rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
       "\n",
       "    canvas_div.on(\"wheel\", function (event) {\n",
       "        event = event.originalEvent;\n",
       "        event['data'] = 'scroll'\n",
       "        if (event.deltaY < 0) {\n",
       "            event.step = 1;\n",
       "        } else {\n",
       "            event.step = -1;\n",
       "        }\n",
       "        mouse_event_fn(event);\n",
       "    });\n",
       "\n",
       "    canvas_div.append(canvas);\n",
       "    canvas_div.append(rubberband);\n",
       "\n",
       "    this.rubberband = rubberband;\n",
       "    this.rubberband_canvas = rubberband[0];\n",
       "    this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
       "    this.rubberband_context.strokeStyle = \"#000000\";\n",
       "\n",
       "    this._resize_canvas = function(width, height) {\n",
       "        // Keep the size of the canvas, canvas container, and rubber band\n",
       "        // canvas in synch.\n",
       "        canvas_div.css('width', width)\n",
       "        canvas_div.css('height', height)\n",
       "\n",
       "        canvas.attr('width', width * mpl.ratio);\n",
       "        canvas.attr('height', height * mpl.ratio);\n",
       "        canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
       "\n",
       "        rubberband.attr('width', width);\n",
       "        rubberband.attr('height', height);\n",
       "    }\n",
       "\n",
       "    // Set the figure to an initial 600x600px, this will subsequently be updated\n",
       "    // upon first draw.\n",
       "    this._resize_canvas(600, 600);\n",
       "\n",
       "    // Disable right mouse context menu.\n",
       "    $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n",
       "        return false;\n",
       "    });\n",
       "\n",
       "    function set_focus () {\n",
       "        canvas.focus();\n",
       "        canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    window.setTimeout(set_focus, 100);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\n",
       "    for(var toolbar_ind in mpl.toolbar_items) {\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) {\n",
       "            // put a spacer in here.\n",
       "            continue;\n",
       "        }\n",
       "        var button = $('<button/>');\n",
       "        button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
       "                        'ui-button-icon-only');\n",
       "        button.attr('role', 'button');\n",
       "        button.attr('aria-disabled', 'false');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "\n",
       "        var icon_img = $('<span/>');\n",
       "        icon_img.addClass('ui-button-icon-primary ui-icon');\n",
       "        icon_img.addClass(image);\n",
       "        icon_img.addClass('ui-corner-all');\n",
       "\n",
       "        var tooltip_span = $('<span/>');\n",
       "        tooltip_span.addClass('ui-button-text');\n",
       "        tooltip_span.html(tooltip);\n",
       "\n",
       "        button.append(icon_img);\n",
       "        button.append(tooltip_span);\n",
       "\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    var fmt_picker_span = $('<span/>');\n",
       "\n",
       "    var fmt_picker = $('<select/>');\n",
       "    fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
       "    fmt_picker_span.append(fmt_picker);\n",
       "    nav_element.append(fmt_picker_span);\n",
       "    this.format_dropdown = fmt_picker[0];\n",
       "\n",
       "    for (var ind in mpl.extensions) {\n",
       "        var fmt = mpl.extensions[ind];\n",
       "        var option = $(\n",
       "            '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
       "        fmt_picker.append(option)\n",
       "    }\n",
       "\n",
       "    // Add hover states to the ui-buttons\n",
       "    $( \".ui-button\" ).hover(\n",
       "        function() { $(this).addClass(\"ui-state-hover\");},\n",
       "        function() { $(this).removeClass(\"ui-state-hover\");}\n",
       "    );\n",
       "\n",
       "    var status_bar = $('<span class=\"mpl-message\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n",
       "    // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n",
       "    // which will in turn request a refresh of the image.\n",
       "    this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.send_message = function(type, properties) {\n",
       "    properties['type'] = type;\n",
       "    properties['figure_id'] = this.id;\n",
       "    this.ws.send(JSON.stringify(properties));\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.send_draw_message = function() {\n",
       "    if (!this.waiting) {\n",
       "        this.waiting = true;\n",
       "        this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n",
       "    }\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    var format_dropdown = fig.format_dropdown;\n",
       "    var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n",
       "    fig.ondownload(fig, format);\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype.handle_resize = function(fig, msg) {\n",
       "    var size = msg['size'];\n",
       "    if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n",
       "        fig._resize_canvas(size[0], size[1]);\n",
       "        fig.send_message(\"refresh\", {});\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
       "    var x0 = msg['x0'] / mpl.ratio;\n",
       "    var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
       "    var x1 = msg['x1'] / mpl.ratio;\n",
       "    var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n",
       "    x0 = Math.floor(x0) + 0.5;\n",
       "    y0 = Math.floor(y0) + 0.5;\n",
       "    x1 = Math.floor(x1) + 0.5;\n",
       "    y1 = Math.floor(y1) + 0.5;\n",
       "    var min_x = Math.min(x0, x1);\n",
       "    var min_y = Math.min(y0, y1);\n",
       "    var width = Math.abs(x1 - x0);\n",
       "    var height = Math.abs(y1 - y0);\n",
       "\n",
       "    fig.rubberband_context.clearRect(\n",
       "        0, 0, fig.canvas.width, fig.canvas.height);\n",
       "\n",
       "    fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n",
       "    // Updates the figure title.\n",
       "    fig.header.textContent = msg['label'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n",
       "    var cursor = msg['cursor'];\n",
       "    switch(cursor)\n",
       "    {\n",
       "    case 0:\n",
       "        cursor = 'pointer';\n",
       "        break;\n",
       "    case 1:\n",
       "        cursor = 'default';\n",
       "        break;\n",
       "    case 2:\n",
       "        cursor = 'crosshair';\n",
       "        break;\n",
       "    case 3:\n",
       "        cursor = 'move';\n",
       "        break;\n",
       "    }\n",
       "    fig.rubberband_canvas.style.cursor = cursor;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_message = function(fig, msg) {\n",
       "    fig.message.textContent = msg['message'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_draw = function(fig, msg) {\n",
       "    // Request the server to send over a new figure.\n",
       "    fig.send_draw_message();\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n",
       "    fig.image_mode = msg['mode'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function() {\n",
       "    // Called whenever the canvas gets updated.\n",
       "    this.send_message(\"ack\", {});\n",
       "}\n",
       "\n",
       "// A function to construct a web socket function for onmessage handling.\n",
       "// Called in the figure constructor.\n",
       "mpl.figure.prototype._make_on_message_function = function(fig) {\n",
       "    return function socket_on_message(evt) {\n",
       "        if (evt.data instanceof Blob) {\n",
       "            /* FIXME: We get \"Resource interpreted as Image but\n",
       "             * transferred with MIME type text/plain:\" errors on\n",
       "             * Chrome.  But how to set the MIME type?  It doesn't seem\n",
       "             * to be part of the websocket stream */\n",
       "            evt.data.type = \"image/png\";\n",
       "\n",
       "            /* Free the memory for the previous frames */\n",
       "            if (fig.imageObj.src) {\n",
       "                (window.URL || window.webkitURL).revokeObjectURL(\n",
       "                    fig.imageObj.src);\n",
       "            }\n",
       "\n",
       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
       "                evt.data);\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "        else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n",
       "            fig.imageObj.src = evt.data;\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        var msg = JSON.parse(evt.data);\n",
       "        var msg_type = msg['type'];\n",
       "\n",
       "        // Call the  \"handle_{type}\" callback, which takes\n",
       "        // the figure and JSON message as its only arguments.\n",
       "        try {\n",
       "            var callback = fig[\"handle_\" + msg_type];\n",
       "        } catch (e) {\n",
       "            console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        if (callback) {\n",
       "            try {\n",
       "                // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n",
       "                callback(fig, msg);\n",
       "            } catch (e) {\n",
       "                console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
       "            }\n",
       "        }\n",
       "    };\n",
       "}\n",
       "\n",
       "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
       "mpl.findpos = function(e) {\n",
       "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
       "    var targ;\n",
       "    if (!e)\n",
       "        e = window.event;\n",
       "    if (e.target)\n",
       "        targ = e.target;\n",
       "    else if (e.srcElement)\n",
       "        targ = e.srcElement;\n",
       "    if (targ.nodeType == 3) // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "\n",
       "    // jQuery normalizes the pageX and pageY\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    // offset() returns the position of the element relative to the document\n",
       "    var x = e.pageX - $(targ).offset().left;\n",
       "    var y = e.pageY - $(targ).offset().top;\n",
       "\n",
       "    return {\"x\": x, \"y\": y};\n",
       "};\n",
       "\n",
       "/*\n",
       " * return a copy of an object with only non-object keys\n",
       " * we need this to avoid circular references\n",
       " * http://stackoverflow.com/a/24161582/3208463\n",
       " */\n",
       "function simpleKeys (original) {\n",
       "  return Object.keys(original).reduce(function (obj, key) {\n",
       "    if (typeof original[key] !== 'object')\n",
       "        obj[key] = original[key]\n",
       "    return obj;\n",
       "  }, {});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.mouse_event = function(event, name) {\n",
       "    var canvas_pos = mpl.findpos(event)\n",
       "\n",
       "    if (name === 'button_press')\n",
       "    {\n",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * mpl.ratio;\n",
       "    var y = canvas_pos.y * mpl.ratio;\n",
       "\n",
       "    this.send_message(name, {x: x, y: y, button: event.button,\n",
       "                             step: event.step,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "\n",
       "    /* This prevents the web browser from automatically changing to\n",
       "     * the text insertion cursor when the button is pressed.  We want\n",
       "     * to control all of the cursor setting manually through the\n",
       "     * 'cursor' event from matplotlib */\n",
       "    event.preventDefault();\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    // Handle any extra behaviour associated with a key event\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.key_event = function(event, name) {\n",
       "\n",
       "    // Prevent repeat events\n",
       "    if (name == 'key_press')\n",
       "    {\n",
       "        if (event.which === this._key)\n",
       "            return;\n",
       "        else\n",
       "            this._key = event.which;\n",
       "    }\n",
       "    if (name == 'key_release')\n",
       "        this._key = null;\n",
       "\n",
       "    var value = '';\n",
       "    if (event.ctrlKey && event.which != 17)\n",
       "        value += \"ctrl+\";\n",
       "    if (event.altKey && event.which != 18)\n",
       "        value += \"alt+\";\n",
       "    if (event.shiftKey && event.which != 16)\n",
       "        value += \"shift+\";\n",
       "\n",
       "    value += 'k';\n",
       "    value += event.which.toString();\n",
       "\n",
       "    this._key_event_extra(event, name);\n",
       "\n",
       "    this.send_message(name, {key: value,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n",
       "    if (name == 'download') {\n",
       "        this.handle_save(this, null);\n",
       "    } else {\n",
       "        this.send_message(\"toolbar_button\", {name: name});\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n",
       "    this.message.textContent = tooltip;\n",
       "};\n",
       "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to  previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"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",
       "        event.shiftKey = false;\n",
       "        // Send a \"J\" for go to next cell\n",
       "        event.which = 74;\n",
       "        event.keyCode = 74;\n",
       "        manager.command_mode();\n",
       "        manager.handle_keydown(event);\n",
       "    }\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    fig.ondownload(fig, null);\n",
       "}\n",
       "\n",
       "\n",
       "mpl.find_output_cell = function(html_output) {\n",
       "    // Return the cell and output element which can be found *uniquely* in the notebook.\n",
       "    // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n",
       "    // IPython event is triggered only after the cells have been serialised, which for\n",
       "    // our purposes (turning an active figure into a static one), is too late.\n",
       "    var cells = IPython.notebook.get_cells();\n",
       "    var ncells = cells.length;\n",
       "    for (var i=0; i<ncells; i++) {\n",
       "        var cell = cells[i];\n",
       "        if (cell.cell_type === 'code'){\n",
       "            for (var j=0; j<cell.output_area.outputs.length; j++) {\n",
       "                var data = cell.output_area.outputs[j];\n",
       "                if (data.data) {\n",
       "                    // IPython >= 3 moved mimebundle to data attribute of output\n",
       "                    data = data.data;\n",
       "                }\n",
       "                if (data['text/html'] == html_output) {\n",
       "                    return [cell, data, j];\n",
       "                }\n",
       "            }\n",
       "        }\n",
       "    }\n",
       "}\n",
       "\n",
       "// Register the function which deals with the matplotlib target/channel.\n",
       "// The kernel may be null if the page has been refreshed.\n",
       "if (IPython.notebook.kernel != null) {\n",
       "    IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n",
       "}\n"
      ],
      "text/plain": [
       "<IPython.core.display.Javascript object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<img src=\"data:image/png;base64,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\" width=\"640\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# PATCHES\n",
    "vertices, emap = model.get_Poly3DCollection(deformed = True, \n",
    "                                            step_label = step_label, \n",
    "                                            frame = frame, \n",
    "                                            displacement_factor = 1.)\n",
    "        \n",
    "collection = mpl3d.art3d.Poly3DCollection(vertices)\n",
    "collection.set_array(F.loc[emap] * 100)\n",
    "collection.set_linewidth(.5)\n",
    "collection.set_edgecolor(\"black\")\n",
    "collection.set_cmap(mpl.cm.jet)\n",
    "collection.set_clim(0., 20.)\n",
    "\n",
    "# FIGURE\n",
    "fig = plt.figure()\n",
    "ax1 = fig.add_subplot(1, 1, 1, projection='3d', aspect = \"equal\")\n",
    "ax1.add_collection3d(collection)\n",
    "#ax1.axis(\"off\")\n",
    "ax1.set_xlabel(r'loading direction, $\\vec x$ axis')\n",
    "ax1.set_ylabel(r'$\\vec y$ axis')\n",
    "ax1.set_zlabel(r'$\\vec z$ axis')\n",
    "offset = .05\n",
    "ax1.set_xlim3d(-offset, 1. + offset)\n",
    "ax1.set_ylim3d(-offset, 1. + offset)\n",
    "ax1.set_zlim3d(-offset, 1. + offset)\n",
    "ax1.set_xticks([0, 1])\n",
    "ax1.set_yticks([0, 1])\n",
    "ax1.set_zticks([0, 1])\n",
    "cbar = plt.colorbar(collection)\n",
    "cbar.set_label(r\"True Strain Tensor, $LE_{11}$ [$\\%$]\")\n",
    "cbar.set_ticks(np.linspace(0., 20, 6))\n",
    "plt.savefig(\"model.pdf\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Periodic BC checking"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>node</th>\n",
       "      <th>v1</th>\n",
       "      <th>v2</th>\n",
       "      <th>v3</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>25.0</td>\n",
       "      <td>2.500000e+01</td>\n",
       "      <td>25.0</td>\n",
       "      <td>25.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>4.0</td>\n",
       "      <td>1.000000e-01</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>0.0</td>\n",
       "      <td>2.665862e-09</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>4.0</td>\n",
       "      <td>1.000000e-01</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>4.0</td>\n",
       "      <td>1.000000e-01</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>4.0</td>\n",
       "      <td>1.000000e-01</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>4.0</td>\n",
       "      <td>1.000000e-01</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>4.0</td>\n",
       "      <td>1.000000e-01</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       node            v1    v2    v3\n",
       "count  25.0  2.500000e+01  25.0  25.0\n",
       "mean    4.0  1.000000e-01   0.0   0.0\n",
       "std     0.0  2.665862e-09   0.0   0.0\n",
       "min     4.0  1.000000e-01   0.0   0.0\n",
       "25%     4.0  1.000000e-01   0.0   0.0\n",
       "50%     4.0  1.000000e-01   0.0   0.0\n",
       "75%     4.0  1.000000e-01   0.0   0.0\n",
       "max     4.0  1.000000e-01   0.0   0.0"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "U_id = fdata[(fdata.step_label == step_label) & (fdata.label == \"U\")].sort_values(\"frame\").index[frame]\n",
    "U = fields[U_id].data\n",
    "nodes = model.parts[\"sample\"].mesh.nodes\n",
    "\n",
    "def check_direction(direction = \"x\"):\n",
    "    \"\"\"\n",
    "    Calculates the difference of the displacements on 2 opposite faces that are normal to a given direction.\n",
    "    \"\"\"\n",
    "    F0 = nodes[(nodes.sets.control == False) & (nodes.coords[direction] == 0.)].coords.sort_values([\"x\", \"y\", \"z\"])\n",
    "    F1 = nodes[(nodes.sets.control == False) & (nodes.coords[direction] == 1.)].coords.sort_values([\"x\", \"y\", \"z\"])\n",
    "    U0 = U.loc[F0.index].reset_index()\n",
    "    U1 = U.loc[F1.index].reset_index()\n",
    "    return U1 - U0\n",
    "\n",
    "check_direction(\"x\").describe()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>node</th>\n",
       "      <th>v1</th>\n",
       "      <th>v2</th>\n",
       "      <th>v3</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>25.0</td>\n",
       "      <td>25.0</td>\n",
       "      <td>2.500000e+01</td>\n",
       "      <td>25.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>20.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>-4.163784e-02</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>7.457459e-10</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>20.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>-4.163784e-02</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>20.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>-4.163784e-02</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>20.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>-4.163784e-02</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>20.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>-4.163784e-02</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>20.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>-4.163784e-02</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       node    v1            v2    v3\n",
       "count  25.0  25.0  2.500000e+01  25.0\n",
       "mean   20.0   0.0 -4.163784e-02   0.0\n",
       "std     0.0   0.0  7.457459e-10   0.0\n",
       "min    20.0   0.0 -4.163784e-02   0.0\n",
       "25%    20.0   0.0 -4.163784e-02   0.0\n",
       "50%    20.0   0.0 -4.163784e-02   0.0\n",
       "75%    20.0   0.0 -4.163784e-02   0.0\n",
       "max    20.0   0.0 -4.163784e-02   0.0"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "check_direction(\"y\").describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>node</th>\n",
       "      <th>v1</th>\n",
       "      <th>v2</th>\n",
       "      <th>v3</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>25.0</td>\n",
       "      <td>25.0</td>\n",
       "      <td>25.0</td>\n",
       "      <td>2.500000e+01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>100.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>-4.791145e-02</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.103872e-09</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>100.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>-4.791145e-02</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>100.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>-4.791145e-02</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>100.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>-4.791145e-02</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>100.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>-4.791145e-02</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>100.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>-4.791145e-02</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        node    v1    v2            v3\n",
       "count   25.0  25.0  25.0  2.500000e+01\n",
       "mean   100.0   0.0   0.0 -4.791145e-02\n",
       "std      0.0   0.0   0.0  1.103872e-09\n",
       "min    100.0   0.0   0.0 -4.791145e-02\n",
       "25%    100.0   0.0   0.0 -4.791145e-02\n",
       "50%    100.0   0.0   0.0 -4.791145e-02\n",
       "75%    100.0   0.0   0.0 -4.791145e-02\n",
       "max    100.0   0.0   0.0 -4.791145e-02"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "check_direction(\"z\").describe()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The boundary conditions are perfectly matched. "
   ]
  }
 ],
 "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.5.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
