{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "\n",
    "# DAC-ADC Pmod Examples using Matplotlib and Widget"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "skip"
    }
   },
   "source": [
    "----"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "## Contents\n",
    "\n",
    "\n",
    "[Pmod DAC-ADC Feedback](#Pmod-DAC-ADC-Feedback)\n",
    "\n",
    "[Tracking the IO Error](#Tracking-the-I/O-linearity)\n",
    "\n",
    "[Error plot with Matplotlib](#Error-plot-with-Matplotlib)\n",
    "\n",
    "[XKCD Plot](#XKCD-Plot)\n",
    "\n",
    "[Widget controlled plot](#Wideget-controlled-plot)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "----"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Pmod DAC-ADC Feedback"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This example shows how to use the PmodDA4 DAC and the PmodAD2 ADC on the PYNQ-Z1 board, using the baord's two Pmod interfaces.  The notebook then compares the DAC output to the ADC input and tracks the errors.\n",
    "\n",
    "The errors are plotted using Matplotlib and an XKCD version of the plot is produced (for fun). Finally a slider widget is introduced to control the number of samples diaplayed in the error plot.\n",
    "\n",
    "Note: The output of the DAC (pin A) must be connected with a wire to the input of the ADC (V1 input)."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1. Import hardware libraries and classes"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "from pynq import Overlay\n",
    "from pynq.iop import Pmod_ADC, Pmod_DAC"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2. Program the ZYNQ PL"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "ol = Overlay('base.bit')\n",
    "ol.download()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3. Instantiate the Pmod peripherals as Python objects"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "adc = Pmod_ADC(1)\n",
    "dac = Pmod_DAC(2)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 4. Write to DAC, read from ADC, print result"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0.3418]\n"
     ]
    }
   ],
   "source": [
    "dac.write(0.35)\n",
    "sample = adc.read()\n",
    "print(sample)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "----\n",
    "\n",
    "[Contents](#Contents)\n",
    "\n",
    "----"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Tracking the IO Error\n",
    "Report DAC-ADC Pmod Loopback Measurement Error."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": false,
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Value written: 0.00\tSample read: 0.00\tError: +0.0020\n",
      "Value written: 0.11\tSample read: 0.10\tError: -0.0037\n",
      "Value written: 0.21\tSample read: 0.21\tError: +0.0004\n",
      "Value written: 0.32\tSample read: 0.30\tError: -0.0111\n",
      "Value written: 0.42\tSample read: 0.43\tError: +0.0086\n",
      "Value written: 0.53\tSample read: 0.50\tError: -0.0278\n",
      "Value written: 0.63\tSample read: 0.62\tError: -0.0144\n",
      "Value written: 0.74\tSample read: 0.73\tError: -0.0102\n",
      "Value written: 0.84\tSample read: 0.81\tError: -0.0335\n",
      "Value written: 0.95\tSample read: 0.93\tError: -0.0177\n",
      "Value written: 1.05\tSample read: 1.03\tError: -0.0253\n",
      "Value written: 1.16\tSample read: 1.12\tError: -0.0368\n",
      "Value written: 1.26\tSample read: 1.24\tError: -0.0210\n",
      "Value written: 1.37\tSample read: 1.31\tError: -0.0598\n",
      "Value written: 1.47\tSample read: 1.43\tError: -0.0401\n",
      "Value written: 1.58\tSample read: 1.53\tError: -0.0516\n",
      "Value written: 1.68\tSample read: 1.62\tError: -0.0631\n",
      "Value written: 1.79\tSample read: 1.75\tError: -0.0434\n",
      "Value written: 1.89\tSample read: 1.81\tError: -0.0842\n",
      "Value written: 2.00\tSample read: 1.93\tError: -0.0664\n"
     ]
    }
   ],
   "source": [
    "from math import ceil\n",
    "from time import sleep\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "from pynq import Overlay\n",
    "from pynq.iop import Pmod_ADC, Pmod_DAC\n",
    "\n",
    "ol = Overlay('base.bit')\n",
    "ol.download()\n",
    "\n",
    "adc = Pmod_ADC(1)\n",
    "dac = Pmod_DAC(2)\n",
    "\n",
    "delay = 0.0\n",
    "values = np.linspace(0, 2, 20)\n",
    "samples = []\n",
    "for value in values:\n",
    "    dac.write(value)\n",
    "    sleep(delay)\n",
    "    sample = adc.read()\n",
    "    samples.append(sample[0])\n",
    "    print('Value written: {:4.2f}\\tSample read: {:4.2f}\\tError: {:+4.4f}'.\n",
    "          format(value, sample[0], sample[0]-value))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Error plot with Matplotlib\n",
    "This example shows plots in notebook (rather than in separate window)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": false,
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nMn2xm/Mfs6ioiPXr1zffCUUkbdq3j3QJNLa1b5/tEjasRQaGRP8YB7sl+4958803M2bMmNC+8vJy\nxo4dG9p31FFHMW/evAbz2LNnD2VlZQBMnjyZn/zkJ6Hj/fr149lnn02uQE1UVVVFQUEBtbW1acmn\nU6dOdOrUidLSUsaNG8fChQ2vjllRUUHXrl359NNPDzi2bNkyxo4dS3FxMd26dWPo0KHMmjXroMon\nIhEtMjDkiuHDh/Piiy9GJ7LasmUL+/fvZ8WKFaF969atY/jw4aHXfvbZZ81e3sa4e92dDQedl5mx\na9cudu/ezcqVKznjjDM477zzmD07vO58VVUVy5Yto3v37jz22GOhYy+++CKnn346p512GuvWrWPb\ntm38z//8D08//fRBl09EyJ8ZSyNFTV74Tt/0bsnat2+fFxYW+iuvvOLu7vPmzfPJkyd7RUVFaF95\nebm7u5uZ/+Y3v/Hy8nL//Oc/H923bt06v+eee7xNmzberl07Lyoq8nHjxvn48eO9oKDACwsLvaio\nyH/5y1+6u/uLL77oJ598snfp0sUHDRrklZWV0TJVVFT49ddf78OGDfOioiIfPXq0b9++Pe776NOn\njxcUFHjHjh29qKjIly5d6rW1tX7TTTd53759vUePHj5x4kTfvXt33HzWr1/vBQUF/tlnn4X2/+pX\nv/KePXuG9t14440+btw4/9nPfuZnn3126Ngpp5zi//7v/x73XCK54mC/Sw5In+IXVPDdmdr3baov\nyNaWj4HB3f20007z//7v/3Z39ylTpvjMmTP9uuuuC+379re/7e6RIDBq1CjfuXOn19TUuLt7QUGB\nr1u3zt3dJ02a5Ndff30o/7KyMn/22Wejzzdu3OglJSX+l7/8xd3dFy5c6CUlJb5t2zZ3jwSG/v37\n+9q1a72mpsYrKir8mmuuifse6r7Qa2tro/vuu+8+Ly8v9/Xr1/tHH33k559/vo8fPz6pfOoHhrff\nftsLCgr8zTffjO7r37+/P/jgg/7WW295mzZt/IMPPnB397179/rnPve5ULATyWX5GBjUlJRhI0aM\nYNGiRQAsXryYU089lVNOOSW0L3bSsGuvvZYuXbrQrl07gLqgGFdsmgceeICxY8cyevRoAE4//XRO\nOOEEnnzyyWiayZMnc+SRR9KuXTu+/vWv8+qrryb1XmLPM3fuXK644gr69u1LYWEhv/jFL3jooYea\n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\niIT8f516hlpxaYCyAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x30535b70>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "%matplotlib inline\n",
    "    \n",
    "X = np.arange(len(values))\n",
    "plt.bar(X + 0.0, values, facecolor='blue', \n",
    "        edgecolor='white', width=0.5, label=\"Written_to_DAC\")\n",
    "plt.bar(X + 0.25, samples, facecolor='red', \n",
    "        edgecolor='white', width=0.5, label=\"Read_from_ADC\")\n",
    "\n",
    "plt.title('DAC-ADC Linearity')\n",
    "plt.xlabel('Sample_number')\n",
    "plt.ylabel('Volts')\n",
    "plt.legend(loc='upper left', frameon=False)\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "----\n",
    "\n",
    "[Contents](#Contents)\n",
    "\n",
    "----"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## XKCD Plot\n",
    "\n",
    "Same data plotted in XKCD format ...\n",
    "\n",
    "(http://xkcd.com)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": false,
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nftlraWnxhoaG9vaj7POyfv16D4C3evVq76qrrvKeeuopz/M8r1KpeEceeaQ3Ojq6l59w35Fisegd\ndNBB3uWXX+795Cc/8Q477DAvn8/v7cfaJ6W3t9d7+OGHvaGhIW/u3Lme53nenXfe6d11113sb849\n91zv9ddf1+qoqQrg2WefxUUXXQTA57ccGRnBoYceuncfah+Vww8/HOPj42hra8PixYu1kByRhMtH\nPvIRAMDbb7+NF154Aeeeey4AoK+vD11dXU4k3Ae6JJNJHH/88Xj77bcxb948vP/++6ivr8cNN9yA\nkTAAt0gE6e7uxtKlS3HTTTex46F8DM3n8+jt7cVRRx2l1VFTCSAWi2FoaAj5fB7XXnstli1bhrQN\nRG0kAens7MQ777yD//mf/8G0adNwySWX7O1H2meFP67neR47AnvllVfiq1/96n59FHhPCPnrmGOO\nwVtvvYUnn3wSQ0ND+Md//Me9/GT7nrz88svYtGkTW5RQDC0Wi7jhhhtw7bXXGknia4oP4JZbbsHZ\nZ5+NpqYm3H333Vi0aNHefqR9WubOnYu5c+ciHo8HYAwiqU5uueUWHHvssejs7MR3v/tdq0uLkehl\n/vz5mD9/Pj744AM8/vjje/tx9impVCpYtmwZ2tvb8fDDD2PBggW4+eabceGFF6KhoQF33HEHLrjg\nAqOOmjsGOjAwwC5SRFK9PPHEE/jXf/1XdHd3Y926dfja174WrbCqlEqlgvvuuw/nnHMO5s2bh97e\nXnR2dobeco1ELU899RRisRg++OADPPLII5gxYwbWrFmDlStXhgasSKakUqngmmuuwaxZszA+Po75\n8+fj8ssvx9DQEBKJBJotOA1qLgFEsnukVCrh1VdfxYsvvoijjjoKF1544d5+pEgiESSfz+Oll17C\niy++iFNOOQVnnHHG3n6kA06iBBBJJJFEcoBKTW0CRxJJJJFE8teTKAFEEkkkkRygEiWASCKJJJID\nVKIEEEkkkURygEqUACLZZ+XNN9/UYhuF3XwulUro7+/fE49lJQMDA0bil0gi+WtIlAAiqWkpl8v4\n/ve/j5NOOgmLFi3CH//4RwDAV7/6VZx88slYsmQJPM9Db28vVq9eDQDYsGED5syZgz/96U9Ys2YN\nvva1r2Hp0qX4zGc+gy1btgAAli5dimXLlgmfNTAwgMWLF+NDH/oQenp6cMQRR2iPz27cuBEbNmxg\n/79+/Xocd9xxgb/73ve+x5jVvve976FSqSCXy+GjH/0oHnvsMfT39+P3v/89PvGJT2DhwoVYsmQJ\nstkscrkcrrvuOvzN3/wNpk2bhiOOOIJRUD755JP42Mc+hhNPPBFLlizBe++995c7OpIDU/YYUlEk\nkewG+da3vuUdfvjh3tq1a73f/OY33sjIiLd582Zv7ty53ujoqDd//nxvzZo13vPPP+/FYjHvtdde\n80477TTvlFNO8R544AGvp6fHW7BggfelL33Ju+iii7yenh6vWCx6s2bN8r7zne8In7V+/Xpvzpw5\n3pYtW7xSqRT6XLNnz/a2b9/ueZ7nrVq1yjv99NM9z/O8Bx980CsWi57ned4nP/lJ9jkAvHvuuce7\n9dZbvTPPPNO7+OKLvSuuuMK74447vKefftobHR31br/9du+ss87ytmzZ4rW2tnrvvvuuVygU2Oe+\n8847Xltbm/fAAw94P/3pT71bbrnFO/jgg701a9bsNp9HcuBIlAAiqWnp7Oz0Xn31VW/Hjh1epVLx\nPM/zVq5c6X3qU5/yPM/z/uM//sNbunSp97vf/c4D4DU2Nnq33nqr9/DDD3u33367N3PmTG/btm2e\n53nexo0bvY6ODm98fNxra2vzXnnlFeGzNm/e7M2YMcO77777vPvvv997/vnntc913333eQC8T3/6\n057ned5//ud/etdcc43X29vrJZNJhsL6xz/+0Zs1a5a3detWb/r06V46nfZOPfVU7/333/fOOuss\n75vf/Kb30ksvecPDw95jjz3mnX/++d7LL7/sVSoVr6Ghwbvnnnu8+++/nyGQ9vb2escdd5xXLpe9\n0dFR75VXXvGWLl3qLVq0aLf6PZIDQ6IWUCQ1LSeeeCKuvPJKHH/88TjzzDPxzjvv4Fe/+hUGBwdx\n11134e6778bvf/97zJkzB/PmzcPdd9+NFStW4JhjjgHgX5dfv349Xn31VSxevBj3338/+vr6MDQ0\nhLa2NuGzNm/ejPb2dmzfvh3vvvtu4Pe8vPHGG/jJT36CDRs2YNWqVXj99dfR1dWFdevW4eMf/zha\nW1sBAIcddhja2trw3HPPYc6cOXjwwQfx0EMPYfbs2WhpaWF8u48++ii++MUvYmBgAEcffTQ2b96M\nlpYWDA0N4c0332TP0t3djc7OTixZsgTNzc248cYbkUqlcO+99+4J90eyn0tNgcFFEoksTz/9NHbt\n2oXOzk589rOfxX//93+jUqlg48aNOPzww7Fs2TLcfPPNyOfzSCaTuO666wD40M0k119/PT784Q9j\nyZIl+NSnPoXVq1ejrq4O3d3dwmdt3boV559/Pr7xjW8Ir2/btk0AKps3bx4qlQp6enrw+OOP47TT\nTsO2bdvw8MMPY8eOHQIGC5GNL1q0CN/97ndx7rnnoqurC5s2bUI2m2V/d8MNN+CGG27Aj3/8Y3zz\nm9/E6aefjjPOOENJAH7hhRfiG9/4Burr67Fs2TIsXrz4L3NyJAesRAkgkpqVbdu24ZlnnsFxxx2H\nZ555Bk888QTeeOMNfO5zn8MjjzyCk046CQBw++23o6+vLwAdTrDD69evx4c+9CH2ek9PDyqVCo44\n4gh0dHQAAM4880xkMhmsXLkS69atQ39/P1pbW/Hcc89h5syZuOmmmwTdjz76KADg4IMPxg9/+EPc\neeeduOiii/DUU0+ht7cXgA8dfcMNN+Dzn/88enp6AgCH9Hy/+93vkEwm8Yc//AGPPvooli1bhjfe\neANPPvkkTjvtNOzYsQPpdBpPPfUUDjnkEJx++un42c9+hltuuQUXXHABUqkUw4CPJBIXibCAIqlZ\n6evrwwMPPICf/vSn+MhHPoIbb7wRxxxzDE466SSsXbuW4Zzfd999uOyyy/Cb3/wGZ511FgBg165d\nSCaTOOGEE9jJIV7WrFmDDRs24IQTTsAJJ5yAYrGITZs2Ydu2bWhvb8fBBx+MmTNnIpFIKJ/tiiuu\nwPXXX4+TTz5ZeH10dJS1q7Zv3w4AePzxx5FMJrFu3TqceOKJSKfTKBQK6O3txeDgIJ5++mls2bIF\n8+bNwyc+8QkcddRR2LhxI9566y3MmDED3d3dmDNnDnuWX//61xgeHsaiRYvwwgsv4NJLL8WaNWtw\n7LHH7jbfR3JgSJQAItnnZGxszEhywcuPf/zjPUKG88QTT+CEE07A7NmzA7/bsmULVq1ahdmzZ+Pi\niy9GMrlnC+0PPvgAjY2NbN8hkkhsJUoAkUQSSSQHqESngCKJJJJIDlCJEkAkkUQSyQEqUQKIJJJI\nIjlAJUoAkUQSSSQHqEQJIJJIIonkAJUoAUQSSSSRHKDy/wHvnEUFz2ldGQAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x30523470>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "%matplotlib inline\n",
    "    \n",
    "# xkcd comic book style plots\n",
    "with plt.xkcd():\n",
    "    X = np.arange(len(values))\n",
    "    plt.bar(X + 0.0, values, facecolor='blue', \n",
    "            edgecolor='white', width=0.5, label=\"Written_to_DAC\")\n",
    "    plt.bar(X + 0.25, samples, facecolor='red', \n",
    "            edgecolor='white', width=0.5, label=\"Read_from_ADC\")\n",
    "\n",
    "    plt.title('DAC-ADC Linearity')\n",
    "    plt.xlabel('Sample_number')\n",
    "    plt.ylabel('Volts')\n",
    "    plt.legend(loc='upper left', frameon=False)\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "----\n",
    "\n",
    "[Contents](#Contents)\n",
    "\n",
    "----"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Widget controlled plot"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In this example, we extend the IO plot with a slider widget to control the number of samples appearing in the output plot.\n",
    "\n",
    "We use the `ipwidgets` library and the simple `interact()` method to launch a slider bar.\n",
    "\n",
    "> The interact function (ipywidgets.interact) automatically creates user interface (UI) controls for exploring code and data interactively. It is the easiest way to get started using IPython’s widgets.\n",
    "\n",
    "For more details see [Using ipwidgets interact()](https://ipywidgets.readthedocs.io/en/latest/examples/Using%20Interact.html#)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": false,
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x30205530>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from math import ceil\n",
    "from time import sleep\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "\n",
    "from ipywidgets import interact\n",
    "import ipywidgets as widgets\n",
    "\n",
    "from pynq import Overlay\n",
    "from pynq.iop import Pmod_ADC, Pmod_DAC\n",
    "\n",
    "ol = Overlay('base.bit')\n",
    "ol.download()\n",
    "\n",
    "dac = Pmod_DAC(2)\n",
    "adc = Pmod_ADC(1)\n",
    "\n",
    "def capture_samples(nmbr_of_samples):    \n",
    "    # Write to DAC, read from ADC, write to OLED\n",
    "    delay = 0.0\n",
    "    values = np.linspace(0, 2, nmbr_of_samples)\n",
    "    samples = []\n",
    "    for value in values:\n",
    "        dac.write(value)\n",
    "        sleep(delay)\n",
    "        sample = adc.read()\n",
    "        samples.append(sample[0])\n",
    "\n",
    "    X = np.arange(nmbr_of_samples)\n",
    "    plt.bar(X + 0.0, values[:nmbr_of_samples+1], \n",
    "            facecolor='blue', edgecolor='white', \n",
    "            width=0.5, label=\"Written_to_DAC\")\n",
    "    plt.bar(X + 0.25, samples[:nmbr_of_samples+1], \n",
    "            facecolor='red', edgecolor='white', \n",
    "            width=0.5, label=\"Read_from_ADC\")\n",
    "\n",
    "    plt.title('DAC-ADC Linearity')\n",
    "    plt.xlabel('Sample_number')\n",
    "    plt.ylabel('Volts')\n",
    "    plt.legend(loc='upper left', frameon=False)\n",
    "   \n",
    "interact(capture_samples, \n",
    "         nmbr_of_samples=widgets.IntSlider(\n",
    "            min=5, max=30, step=5,\n",
    "            value=10, continuous_update=False));\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "----\n",
    "\n",
    "[Contents](#Contents)\n",
    "\n",
    "----"
   ]
  }
 ],
 "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.4.3+"
  },
  "widgets": {
   "state": {
    "c1f11e63b6034c5c859c7e974b0ce83c": {
     "views": [
      {
       "cell_index": 25
      }
     ]
    }
   },
   "version": "1.2.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
