{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# One German Tank\n",
    "The following problem was posed to me as a demonstration that Bayesian inference is not the best approach for all problems. It is a special case of the [German Tank Problem](https://en.wikipedia.org/wiki/German_tank_problem). The name commemorates a famous statistical inference of the production of German tanks in World War II, based solely on the serial numbers recorded from a relatively small sample of tanks captured and inspected by the Allies. The special case of looking at only one serial number is equivalent to the following problem.\n",
    "\n",
    "__Problem:__ An unknown number of paper tickets, numbered $1,...,N$, are placed into a hat. Ticket number $m$ is drawn from the hat. Estimate $N$.\n",
    "\n",
    "It is not obvious that a single draw gives enough information to estimate $N$. As we will see, the most straightforward Bayesian answer is that there is no answer. That should leave us a bit suspicious of the problem. Yet there is a simple _frequentist_ answer: $m\\in {1,...,N}$, with uniform probability $\\Pr(m|N) = 1/N$ for each of these possibilities. Pretend we know $N$. Then the mean value of the ticket drawn is $\\left<m\\right>=(N+1)/2$. Our frequentist estimate of $N$ is then\n",
    "$$\n",
    "    \\hat{N}_f = 2m-1.\n",
    "$$\n",
    "This makes intuitive sense, but the assumptions are perhaps a bit murky."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Bayesian Approach: Flat Prior\n",
    "As already stated,\n",
    "$$\n",
    "    \\Pr(m|N=n) = \\begin{cases}\n",
    "        \\frac{1}{n}, & 1 \\le m \\le n,\\\\\n",
    "        0,           & m > n.\n",
    "    \\end{cases}\n",
    "$$\n",
    "The posterior probability is\n",
    "$$\n",
    "    \\Pr(N=n|m) = \\frac{\\Pr(m|N=n)\\,\\Pr(N=n)}{\\Pr(m)}, \\quad m \\le N.\n",
    "$$\n",
    "Marginalizing over all possible $N$,\n",
    "$$\n",
    "    \\Pr(m) = \\sum_{n'=m}^{\\infty}\\Pr(m|N=n')\\,\\Pr(N=n').\n",
    "$$\n",
    "A flat prior, $\\Pr(N=n) \\propto 1$, cannot be normalized over its semi-infinite domain $N\\in [1,\\infty)$. Such a distribution is termed _improper_. Since the normalization cancels anyway, let's not worry about it. The posterior becomes\n",
    "$$\n",
    "    \\Pr(N=n|m) = \\frac{n^{-1}}{\\sum_{n'=m}^{\\infty} n'^{-1}}.\n",
    "$$\n",
    "Since this is not normalizable, the median and mean do not exist. The best we can do is the (obviously biased) maximum likelihood estimate, $\\hat{N}_{ML}=m$."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Modified Prior\n",
    "As I see it, the only way for Bayesian inference to arrive at a useful answer is to posit a different prior, $\\Pr(N=n)$. If pressed, I suppose most people would admit that infinite $N$, which is the source of all the difficulty, doesn't make much sense. The hat must have some finite capacity, even if I do not know what it is. In some sense, I am looking for the _flattest useful prior_, one that does not impose a particular scale on $N$ before ticket number $m$ is introduced. I propose:\n",
    "$$\n",
    "    \\Pr(N=n) \\propto n^{-\\alpha}, \\quad \\alpha \\ge 0. \\quad(1)\n",
    "$$\n",
    "Thus, the marginalization over $N$ looks like\n",
    "$$\n",
    "    \\Pr(m) = \\frac{1}{\\zeta(1+\\alpha)} \\sum_{n=m}^{\\infty} n^{-(1+\\alpha)},\n",
    "$$\n",
    "where the normalization factor is given by the reciprocal of the Riemann zeta function, \n",
    "$$\n",
    "    \\zeta(z) \\equiv \\sum_{k=1}^{\\infty} k^{-z}.\n",
    "$$\n",
    "which is undefined for $z=1$  (corresponding to $\\alpha=0$, the flat prior). The posterior is then\n",
    "$$\n",
    "    \\Pr(N=n|m) = \\frac{n^{-(1+\\alpha)}}{\\sum_{n'=m}^{\\infty}n'^{-(1+\\alpha)}}.\\quad (2)\n",
    "$$\n",
    "Estimating $N$ requires some chosen measure of the central tendency, $\\hat{N}$, of this distribution. I propose that $\\alpha$ should be an integer, small enough that the central tendency of the prior alone yields an undefined result, but large enough to provide sufficient information to obtain $\\hat{N}$. Under this rule, _the scale is imposed by the evidence, not solely by the prior_. Specifically,\n",
    "\n",
    "| $$\\textbf{Measure of}\\ \\hat{N}$$ | $$\\quad\\alpha\\quad$$ | $$\\hat{N}\\ \\ \\textbf{(nearest integer)}\\quad$$ | $\\textbf{Comment}$  |\n",
    "| ----: | :---------- | :---------------------: | :------------------------- |\n",
    "| Mode   | $\\quad 0$  | $$m\\quad$$              | See previous section.      |\n",
    "| Median | $\\quad 1$  | $2m - \\frac{1}{2}\\quad$ | See below.                 |\n",
    "| Mean   | $\\quad 2$  | $$2m - 1\\quad$$         | Matches $\\hat{N}_f$. Derived below. |\n",
    "\n",
    "In the next sections I derive the results for the median and mean."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### The Median\n",
    "\n",
    "Exercise left to the reader."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### The Mean\n",
    "\n",
    "For the mean, $\\hat{N}=\\left<N\\right>$, my rule dictates that the prior goes as \n",
    "$$ \\Pr(N=n) \\propto n^{-2},$$ \n",
    "a distribution whose mean diverges logarithmically. The posterior is then\n",
    "$$\n",
    "    \\Pr(N=n|m) \\propto n^{-3},\\quad N \\ge m.\n",
    "$$\n",
    "Under the assumed prior, our estimate of $N$ is then\n",
    "$$\n",
    "    \\left<N\\right> = \\frac{\\sum_{n=m}^{\\infty}n^{-2}}{\\sum_{n=m}^{\\infty}n^{-3}}\n",
    "    = \\frac{\\zeta(2) - \\sum_{n=1}^{m-1}n^{-2}}{\\zeta(3) - \\sum_{n=1}^{m-1}n^{-3}}.\n",
    "$$\n",
    "Using the midpoint method approimation to the sums,\n",
    "$$\n",
    "    \\left<N\\right> \\approx\\frac{\\int_{m-1/2}^{\\infty}x^{-2}\\,dx}\n",
    "                               {\\int_{m-1/2}^{\\infty}x^{-3}\\,dx} = 2m-1.\n",
    "$$\n",
    "The approximate formula always gives the value of the integer nearest to $\\left<N\\right>$, which is all the accuracy we could reasonably desire, considering that $N \\in {1,2,3,....}\\ $ As the numerical test below demonstrates, the _absolute_ error (not just fractional error) decays steadily with increasing $m$, always falling between the two plotted trend lines.\n",
    "\n",
    "Oddly, the approximation happens to match the frequentist result, $\\hat{N}_f = 2m-1$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1.3684327776202059\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Numerical test of the approximate formula for the mean of N, with alpha=2.\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import scipy.special as sp\n",
    "\n",
    "M = 30   # Maximum value of m for numerical test\n",
    "m     = np.arange(1.0,M+1)\n",
    "Napprox = 2*m - 1     # Approximate formula for <N>\n",
    "numer = np.empty(M)   # Numerator of <N>\n",
    "denom = np.empty(M)   # Denominator of <N>\n",
    "numer[0] = sp.zeta(2)\n",
    "denom[0] = sp.zeta(3)\n",
    "for i in range(1,M):\n",
    "    numer[i] = numer[i-1] - 1/i**(2)\n",
    "    denom[i] = denom[i-1] - 1/i**(3)\n",
    "Nexact = numer/denom  # Exact (to numerical precision) value of <N>\n",
    "print(Nexact[0])\n",
    "plt.figure()\n",
    "plt.plot(np.log10(m), np.log10(Nexact - Napprox),'k.-',\n",
    "         label=r'$\\left[ \\left< N \\right>_{exact} - \\left< N \\right>_{approx} \\right]$')\n",
    "plt.plot( np.log10(m), np.log10(1/(2.5*m)),'r--', label='$1/(2.5 m)$' )\n",
    "plt.plot( np.log10(m), np.log10(1/(3*m)),'c-', label='$1/(3 m)$' )\n",
    "plt.xlabel(r'$\\log_{10} m$')\n",
    "plt.ylabel(r'$\\log_{10}$ absolute error')\n",
    "plt.legend()\n",
    "plt.show();"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Discussion\n",
    "What have I learned from this exercise? Perhaps that I should have stuck with the frequentist approach, because I managed to get (approximately) the same result from Bayesian inference? But what does the frequentist result mean? The frequentist procedure was straightforward, but lacked the clarity of assumptions afforded by Bayesian inference. \n",
    "\n",
    "I had to make a very particular assumption about the prior to get $\\left<N\\right> = 2m-1$ from Bayes' theorem. I did my best to justify that assumption, but there is nothing unique about my choices. For example, I could have picked any $\\alpha \\in (1,2]$ to calculate $\\left<N\\right>$. Any choice in that semi-open interval leads to a well-defined mean. At the same time, this range of choices does not directly impose a scale on the prior distribution, in that the mean of the prior diverges. Consider $m=1$, which leads to\n",
    "$$\n",
    "    \\left<N\\right> = \\frac{\\zeta(\\alpha)}{\\zeta(1+\\alpha)}.\n",
    "$$\n",
    "As you can see from the plot below, this results in practically any value of $\\left<N\\right>$ I might want. $\\alpha=2$ yields $\\left<N\\right>=1.36843$, a lower limit of what can be obtained for $\\left<N\\right>$, but there is no upper limit. Likewise, $\\left<N\\right>\\rightarrow 2m-1$ is a lower limit of what can be obtained from equation (1) for $m\\gg 1$, but there is no upper limit.\n",
    "\n",
    "Bayes' theorem can make very little sense of the frequentist result. Further below, I have included an Appendix with a different frequentist approach that yields a radically different answer. Perhaps the undefined result of the Bayesian analysis should have warned me that I was attempting to answer an _ill-posed question_.\n",
    "\n",
    "I conclude that if we draw only one serial number $m$, all we can say is that $N \\ge m$, and of any two particular choices, the smaller value of $N$ is more probable."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure()\n",
    "alpha = np.arange(1.0005,2,.001)\n",
    "plt.plot(np.log10(alpha-1), np.log10( sp.zeta(alpha)/sp.zeta(1+alpha) ))\n",
    "plt.xlabel(r'$\\log_{10}(\\alpha-1)$')\n",
    "plt.ylabel(r'$\\log_{10}\\left<N\\right>$')\n",
    "plt.title(r'$\\left<N\\right>$ with $m=1$, for a range of assumptions')\n",
    "plt.show();"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Appendix: Alternative Frequentist Solution\n",
    "\n",
    "__This was fun, but in the end it does not produce much insight. I may eventually delete it.__\n",
    "\n",
    "Now I pose the question: By what factor should I multiply $m$ to get an estimate of $N$? It seems then that the starting point is not $\\left<m\\right>$, but $\\left<N/m\\right>$.\n",
    "\n",
    "Pretend for a moment that we know $N$.\n",
    "$$\n",
    "    \\left< \\frac{N}{m} \\right> = \\sum_{m'} \\frac{N}{m'}\\Pr(m'|N).\n",
    "$$\n",
    "But recall\n",
    "$$\n",
    "    \\Pr(m|N) = \\begin{cases}\n",
    "        \\frac{1}{N}, & m \\le N\\\\\n",
    "        0,           & m > N\n",
    "    \\end{cases}\n",
    "$$\n",
    "Hence,\n",
    "$$\n",
    "    \\left< \\frac{N}{m} \\right> = \\sum_{m'=1}^N \\frac{1}{m'}.\n",
    "$$\n",
    "Of course, we don't really know $N$! But perhaps it would be reasonable to place $\\left<N\\right>$ in the upper limit of the sum on the right hand side.$^*$ Since we do know $m$, I now propose\n",
    "$$\n",
    "    m\\,\\left< \\frac{N}{m} \\right> = \\boxed{\n",
    "    \\left<N\\right> = m \\sum_{m'=1}^{\\left<N\\right>} \\frac{1}{m'}.\n",
    "    }\n",
    "$$\n",
    "\n",
    "The above equation cannot be solved for $\\left<N\\right>$, but can be trivially solved for $m$. The only disadvantage is that the results are then for non-integer $m$ (except $m=1$ at $\\left<N\\right>=1$).\n",
    "A reasonable approximation can be made by turning the series into an integral using the midpoint method,\n",
    "$$\n",
    "    \\left<N\\right> = m \\left[ 1 + \\log\\left( \\frac{2\\left<N\\right>+1}{3} \\right) \\right].\n",
    "$$\n",
    "This is transcendental, but the approximation is nice because it happens to be exact for $\\left<N\\right>=1$, very accurate for $\\left<N\\right> \\gg 1$, and $\\left<N\\right>$ can be obtained quickly for any chosen $m$ using, e.g., Newton's method. \n",
    "\n",
    "The eyeball fit below is good enough for $m<10000$:\n",
    "$$\n",
    "    \\boxed{\\left<N\\right> = 2m - 1 + 1.1 m \\log m}\n",
    "$$\n",
    "\n",
    "$^*$Should I instead average the sum over all possible $N$?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Tabulating non-integer m from the series\n",
    "Nmax = int(1e5)\n",
    "N_array = np.arange(1,Nmax+1)\n",
    "m_array = np.empty((Nmax))\n",
    "harmonic_sum = 0\n",
    "for i in range(Nmax):\n",
    "    harmonic_sum += 1/N_array[i]\n",
    "    m_array[i] = N_array[i]/harmonic_sum"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Root finding from the midpoint approximation....\n",
    "m = 1  # Initialize m before defining the function\n",
    "def rootme(N):\n",
    "    return (  N - m*(1+np.log((2*N+1)/3)) )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Execution Time =  0.9318995069999998  seconds.\n"
     ]
    }
   ],
   "source": [
    "from scipy.optimize import root\n",
    "from scipy.optimize import newton\n",
    "from time import perf_counter\n",
    "M = 10000\n",
    "ms = np.arange(1,M+1)\n",
    "N_guess = 2*ms - 1  # Initial guess will use old frequentist estimate.\n",
    "N_avg = np.empty(M)\n",
    "t1 = perf_counter()\n",
    "for i in range(M):\n",
    "    m = ms[i]\n",
    "    soln = root(rootme, N_guess[i])\n",
    "    N_avg[i] = soln.x\n",
    "t2 = perf_counter()\n",
    "print('Execution Time = ',t2-t1,' seconds.')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/javascript": [
       "/* Put everything inside the global mpl namespace */\n",
       "/* global mpl */\n",
       "window.mpl = {};\n",
       "\n",
       "mpl.get_websocket_type = function () {\n",
       "    if (typeof WebSocket !== 'undefined') {\n",
       "        return WebSocket;\n",
       "    } else if (typeof MozWebSocket !== 'undefined') {\n",
       "        return MozWebSocket;\n",
       "    } else {\n",
       "        alert(\n",
       "            'Your browser does not have WebSocket support. ' +\n",
       "                'Please try Chrome, Safari or Firefox ≥ 6. ' +\n",
       "                'Firefox 4 and 5 are also supported but you ' +\n",
       "                'have to enable WebSockets in about:config.'\n",
       "        );\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure = function (figure_id, websocket, ondownload, parent_element) {\n",
       "    this.id = figure_id;\n",
       "\n",
       "    this.ws = websocket;\n",
       "\n",
       "    this.supports_binary = this.ws.binaryType !== undefined;\n",
       "\n",
       "    if (!this.supports_binary) {\n",
       "        var warnings = document.getElementById('mpl-warnings');\n",
       "        if (warnings) {\n",
       "            warnings.style.display = 'block';\n",
       "            warnings.textContent =\n",
       "                'This browser does not support binary websocket messages. ' +\n",
       "                'Performance may be slow.';\n",
       "        }\n",
       "    }\n",
       "\n",
       "    this.imageObj = new Image();\n",
       "\n",
       "    this.context = undefined;\n",
       "    this.message = undefined;\n",
       "    this.canvas = undefined;\n",
       "    this.rubberband_canvas = undefined;\n",
       "    this.rubberband_context = undefined;\n",
       "    this.format_dropdown = undefined;\n",
       "\n",
       "    this.image_mode = 'full';\n",
       "\n",
       "    this.root = document.createElement('div');\n",
       "    this.root.setAttribute('style', 'display: inline-block');\n",
       "    this._root_extra_style(this.root);\n",
       "\n",
       "    parent_element.appendChild(this.root);\n",
       "\n",
       "    this._init_header(this);\n",
       "    this._init_canvas(this);\n",
       "    this._init_toolbar(this);\n",
       "\n",
       "    var fig = this;\n",
       "\n",
       "    this.waiting = false;\n",
       "\n",
       "    this.ws.onopen = function () {\n",
       "        fig.send_message('supports_binary', { value: fig.supports_binary });\n",
       "        fig.send_message('send_image_mode', {});\n",
       "        if (fig.ratio !== 1) {\n",
       "            fig.send_message('set_dpi_ratio', { dpi_ratio: fig.ratio });\n",
       "        }\n",
       "        fig.send_message('refresh', {});\n",
       "    };\n",
       "\n",
       "    this.imageObj.onload = function () {\n",
       "        if (fig.image_mode === 'full') {\n",
       "            // Full images could contain transparency (where diff images\n",
       "            // almost always do), so we need to clear the canvas so that\n",
       "            // there is no ghosting.\n",
       "            fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
       "        }\n",
       "        fig.context.drawImage(fig.imageObj, 0, 0);\n",
       "    };\n",
       "\n",
       "    this.imageObj.onunload = function () {\n",
       "        fig.ws.close();\n",
       "    };\n",
       "\n",
       "    this.ws.onmessage = this._make_on_message_function(this);\n",
       "\n",
       "    this.ondownload = ondownload;\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._init_header = function () {\n",
       "    var titlebar = document.createElement('div');\n",
       "    titlebar.classList =\n",
       "        'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n",
       "    var titletext = document.createElement('div');\n",
       "    titletext.classList = 'ui-dialog-title';\n",
       "    titletext.setAttribute(\n",
       "        'style',\n",
       "        'width: 100%; text-align: center; padding: 3px;'\n",
       "    );\n",
       "    titlebar.appendChild(titletext);\n",
       "    this.root.appendChild(titlebar);\n",
       "    this.header = titletext;\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n",
       "\n",
       "mpl.figure.prototype._init_canvas = function () {\n",
       "    var fig = this;\n",
       "\n",
       "    var canvas_div = (this.canvas_div = document.createElement('div'));\n",
       "    canvas_div.setAttribute(\n",
       "        'style',\n",
       "        'border: 1px solid #ddd;' +\n",
       "            'box-sizing: content-box;' +\n",
       "            'clear: both;' +\n",
       "            'min-height: 1px;' +\n",
       "            'min-width: 1px;' +\n",
       "            'outline: 0;' +\n",
       "            'overflow: hidden;' +\n",
       "            'position: relative;' +\n",
       "            'resize: both;'\n",
       "    );\n",
       "\n",
       "    function on_keyboard_event_closure(name) {\n",
       "        return function (event) {\n",
       "            return fig.key_event(event, name);\n",
       "        };\n",
       "    }\n",
       "\n",
       "    canvas_div.addEventListener(\n",
       "        'keydown',\n",
       "        on_keyboard_event_closure('key_press')\n",
       "    );\n",
       "    canvas_div.addEventListener(\n",
       "        'keyup',\n",
       "        on_keyboard_event_closure('key_release')\n",
       "    );\n",
       "\n",
       "    this._canvas_extra_style(canvas_div);\n",
       "    this.root.appendChild(canvas_div);\n",
       "\n",
       "    var canvas = (this.canvas = document.createElement('canvas'));\n",
       "    canvas.classList.add('mpl-canvas');\n",
       "    canvas.setAttribute('style', 'box-sizing: content-box;');\n",
       "\n",
       "    this.context = canvas.getContext('2d');\n",
       "\n",
       "    var backingStore =\n",
       "        this.context.backingStorePixelRatio ||\n",
       "        this.context.webkitBackingStorePixelRatio ||\n",
       "        this.context.mozBackingStorePixelRatio ||\n",
       "        this.context.msBackingStorePixelRatio ||\n",
       "        this.context.oBackingStorePixelRatio ||\n",
       "        this.context.backingStorePixelRatio ||\n",
       "        1;\n",
       "\n",
       "    this.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
       "    if (this.ratio !== 1) {\n",
       "        fig.send_message('set_dpi_ratio', { dpi_ratio: this.ratio });\n",
       "    }\n",
       "\n",
       "    var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n",
       "        'canvas'\n",
       "    ));\n",
       "    rubberband_canvas.setAttribute(\n",
       "        'style',\n",
       "        'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n",
       "    );\n",
       "\n",
       "    // Apply a ponyfill if ResizeObserver is not implemented by browser.\n",
       "    if (this.ResizeObserver === undefined) {\n",
       "        if (window.ResizeObserver !== undefined) {\n",
       "            this.ResizeObserver = window.ResizeObserver;\n",
       "        } else {\n",
       "            var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n",
       "            this.ResizeObserver = obs.ResizeObserver;\n",
       "        }\n",
       "    }\n",
       "\n",
       "    this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n",
       "        var nentries = entries.length;\n",
       "        for (var i = 0; i < nentries; i++) {\n",
       "            var entry = entries[i];\n",
       "            var width, height;\n",
       "            if (entry.contentBoxSize) {\n",
       "                if (entry.contentBoxSize instanceof Array) {\n",
       "                    // Chrome 84 implements new version of spec.\n",
       "                    width = entry.contentBoxSize[0].inlineSize;\n",
       "                    height = entry.contentBoxSize[0].blockSize;\n",
       "                } else {\n",
       "                    // Firefox implements old version of spec.\n",
       "                    width = entry.contentBoxSize.inlineSize;\n",
       "                    height = entry.contentBoxSize.blockSize;\n",
       "                }\n",
       "            } else {\n",
       "                // Chrome <84 implements even older version of spec.\n",
       "                width = entry.contentRect.width;\n",
       "                height = entry.contentRect.height;\n",
       "            }\n",
       "\n",
       "            // Keep the size of the canvas and rubber band canvas in sync with\n",
       "            // the canvas container.\n",
       "            if (entry.devicePixelContentBoxSize) {\n",
       "                // Chrome 84 implements new version of spec.\n",
       "                canvas.setAttribute(\n",
       "                    'width',\n",
       "                    entry.devicePixelContentBoxSize[0].inlineSize\n",
       "                );\n",
       "                canvas.setAttribute(\n",
       "                    'height',\n",
       "                    entry.devicePixelContentBoxSize[0].blockSize\n",
       "                );\n",
       "            } else {\n",
       "                canvas.setAttribute('width', width * fig.ratio);\n",
       "                canvas.setAttribute('height', height * fig.ratio);\n",
       "            }\n",
       "            canvas.setAttribute(\n",
       "                'style',\n",
       "                'width: ' + width + 'px; height: ' + height + 'px;'\n",
       "            );\n",
       "\n",
       "            rubberband_canvas.setAttribute('width', width);\n",
       "            rubberband_canvas.setAttribute('height', height);\n",
       "\n",
       "            // And update the size in Python. We ignore the initial 0/0 size\n",
       "            // that occurs as the element is placed into the DOM, which should\n",
       "            // otherwise not happen due to the minimum size styling.\n",
       "            if (width != 0 && height != 0) {\n",
       "                fig.request_resize(width, height);\n",
       "            }\n",
       "        }\n",
       "    });\n",
       "    this.resizeObserverInstance.observe(canvas_div);\n",
       "\n",
       "    function on_mouse_event_closure(name) {\n",
       "        return function (event) {\n",
       "            return fig.mouse_event(event, name);\n",
       "        };\n",
       "    }\n",
       "\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mousedown',\n",
       "        on_mouse_event_closure('button_press')\n",
       "    );\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mouseup',\n",
       "        on_mouse_event_closure('button_release')\n",
       "    );\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mousemove',\n",
       "        on_mouse_event_closure('motion_notify')\n",
       "    );\n",
       "\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mouseenter',\n",
       "        on_mouse_event_closure('figure_enter')\n",
       "    );\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mouseleave',\n",
       "        on_mouse_event_closure('figure_leave')\n",
       "    );\n",
       "\n",
       "    canvas_div.addEventListener('wheel', function (event) {\n",
       "        if (event.deltaY < 0) {\n",
       "            event.step = 1;\n",
       "        } else {\n",
       "            event.step = -1;\n",
       "        }\n",
       "        on_mouse_event_closure('scroll')(event);\n",
       "    });\n",
       "\n",
       "    canvas_div.appendChild(canvas);\n",
       "    canvas_div.appendChild(rubberband_canvas);\n",
       "\n",
       "    this.rubberband_context = rubberband_canvas.getContext('2d');\n",
       "    this.rubberband_context.strokeStyle = '#000000';\n",
       "\n",
       "    this._resize_canvas = function (width, height, forward) {\n",
       "        if (forward) {\n",
       "            canvas_div.style.width = width + 'px';\n",
       "            canvas_div.style.height = height + 'px';\n",
       "        }\n",
       "    };\n",
       "\n",
       "    // Disable right mouse context menu.\n",
       "    this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n",
       "        event.preventDefault();\n",
       "        return false;\n",
       "    });\n",
       "\n",
       "    function set_focus() {\n",
       "        canvas.focus();\n",
       "        canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    window.setTimeout(set_focus, 100);\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function () {\n",
       "    var fig = this;\n",
       "\n",
       "    var toolbar = document.createElement('div');\n",
       "    toolbar.classList = 'mpl-toolbar';\n",
       "    this.root.appendChild(toolbar);\n",
       "\n",
       "    function on_click_closure(name) {\n",
       "        return function (_event) {\n",
       "            return fig.toolbar_button_onclick(name);\n",
       "        };\n",
       "    }\n",
       "\n",
       "    function on_mouseover_closure(tooltip) {\n",
       "        return function (event) {\n",
       "            if (!event.currentTarget.disabled) {\n",
       "                return fig.toolbar_button_onmouseover(tooltip);\n",
       "            }\n",
       "        };\n",
       "    }\n",
       "\n",
       "    fig.buttons = {};\n",
       "    var buttonGroup = document.createElement('div');\n",
       "    buttonGroup.classList = 'mpl-button-group';\n",
       "    for (var toolbar_ind in mpl.toolbar_items) {\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) {\n",
       "            /* Instead of a spacer, we start a new button group. */\n",
       "            if (buttonGroup.hasChildNodes()) {\n",
       "                toolbar.appendChild(buttonGroup);\n",
       "            }\n",
       "            buttonGroup = document.createElement('div');\n",
       "            buttonGroup.classList = 'mpl-button-group';\n",
       "            continue;\n",
       "        }\n",
       "\n",
       "        var button = (fig.buttons[name] = document.createElement('button'));\n",
       "        button.classList = 'mpl-widget';\n",
       "        button.setAttribute('role', 'button');\n",
       "        button.setAttribute('aria-disabled', 'false');\n",
       "        button.addEventListener('click', on_click_closure(method_name));\n",
       "        button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n",
       "\n",
       "        var icon_img = document.createElement('img');\n",
       "        icon_img.src = '_images/' + image + '.png';\n",
       "        icon_img.srcset = '_images/' + image + '_large.png 2x';\n",
       "        icon_img.alt = tooltip;\n",
       "        button.appendChild(icon_img);\n",
       "\n",
       "        buttonGroup.appendChild(button);\n",
       "    }\n",
       "\n",
       "    if (buttonGroup.hasChildNodes()) {\n",
       "        toolbar.appendChild(buttonGroup);\n",
       "    }\n",
       "\n",
       "    var fmt_picker = document.createElement('select');\n",
       "    fmt_picker.classList = 'mpl-widget';\n",
       "    toolbar.appendChild(fmt_picker);\n",
       "    this.format_dropdown = fmt_picker;\n",
       "\n",
       "    for (var ind in mpl.extensions) {\n",
       "        var fmt = mpl.extensions[ind];\n",
       "        var option = document.createElement('option');\n",
       "        option.selected = fmt === mpl.default_extension;\n",
       "        option.innerHTML = fmt;\n",
       "        fmt_picker.appendChild(option);\n",
       "    }\n",
       "\n",
       "    var status_bar = document.createElement('span');\n",
       "    status_bar.classList = 'mpl-message';\n",
       "    toolbar.appendChild(status_bar);\n",
       "    this.message = status_bar;\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.request_resize = function (x_pixels, y_pixels) {\n",
       "    // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n",
       "    // which will in turn request a refresh of the image.\n",
       "    this.send_message('resize', { width: x_pixels, height: y_pixels });\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.send_message = function (type, properties) {\n",
       "    properties['type'] = type;\n",
       "    properties['figure_id'] = this.id;\n",
       "    this.ws.send(JSON.stringify(properties));\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.send_draw_message = function () {\n",
       "    if (!this.waiting) {\n",
       "        this.waiting = true;\n",
       "        this.ws.send(JSON.stringify({ type: 'draw', figure_id: this.id }));\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_save = function (fig, _msg) {\n",
       "    var format_dropdown = fig.format_dropdown;\n",
       "    var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n",
       "    fig.ondownload(fig, format);\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_resize = function (fig, msg) {\n",
       "    var size = msg['size'];\n",
       "    if (size[0] !== fig.canvas.width || size[1] !== fig.canvas.height) {\n",
       "        fig._resize_canvas(size[0], size[1], msg['forward']);\n",
       "        fig.send_message('refresh', {});\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_rubberband = function (fig, msg) {\n",
       "    var x0 = msg['x0'] / fig.ratio;\n",
       "    var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n",
       "    var x1 = msg['x1'] / fig.ratio;\n",
       "    var y1 = (fig.canvas.height - msg['y1']) / fig.ratio;\n",
       "    x0 = Math.floor(x0) + 0.5;\n",
       "    y0 = Math.floor(y0) + 0.5;\n",
       "    x1 = Math.floor(x1) + 0.5;\n",
       "    y1 = Math.floor(y1) + 0.5;\n",
       "    var min_x = Math.min(x0, x1);\n",
       "    var min_y = Math.min(y0, y1);\n",
       "    var width = Math.abs(x1 - x0);\n",
       "    var height = Math.abs(y1 - y0);\n",
       "\n",
       "    fig.rubberband_context.clearRect(\n",
       "        0,\n",
       "        0,\n",
       "        fig.canvas.width / fig.ratio,\n",
       "        fig.canvas.height / fig.ratio\n",
       "    );\n",
       "\n",
       "    fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_figure_label = function (fig, msg) {\n",
       "    // Updates the figure title.\n",
       "    fig.header.textContent = msg['label'];\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_cursor = function (fig, msg) {\n",
       "    var cursor = msg['cursor'];\n",
       "    switch (cursor) {\n",
       "        case 0:\n",
       "            cursor = 'pointer';\n",
       "            break;\n",
       "        case 1:\n",
       "            cursor = 'default';\n",
       "            break;\n",
       "        case 2:\n",
       "            cursor = 'crosshair';\n",
       "            break;\n",
       "        case 3:\n",
       "            cursor = 'move';\n",
       "            break;\n",
       "    }\n",
       "    fig.rubberband_canvas.style.cursor = cursor;\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_message = function (fig, msg) {\n",
       "    fig.message.textContent = msg['message'];\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_draw = function (fig, _msg) {\n",
       "    // Request the server to send over a new figure.\n",
       "    fig.send_draw_message();\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_image_mode = function (fig, msg) {\n",
       "    fig.image_mode = msg['mode'];\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_history_buttons = function (fig, msg) {\n",
       "    for (var key in msg) {\n",
       "        if (!(key in fig.buttons)) {\n",
       "            continue;\n",
       "        }\n",
       "        fig.buttons[key].disabled = !msg[key];\n",
       "        fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n",
       "    if (msg['mode'] === 'PAN') {\n",
       "        fig.buttons['Pan'].classList.add('active');\n",
       "        fig.buttons['Zoom'].classList.remove('active');\n",
       "    } else if (msg['mode'] === 'ZOOM') {\n",
       "        fig.buttons['Pan'].classList.remove('active');\n",
       "        fig.buttons['Zoom'].classList.add('active');\n",
       "    } else {\n",
       "        fig.buttons['Pan'].classList.remove('active');\n",
       "        fig.buttons['Zoom'].classList.remove('active');\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function () {\n",
       "    // Called whenever the canvas gets updated.\n",
       "    this.send_message('ack', {});\n",
       "};\n",
       "\n",
       "// A function to construct a web socket function for onmessage handling.\n",
       "// Called in the figure constructor.\n",
       "mpl.figure.prototype._make_on_message_function = function (fig) {\n",
       "    return function socket_on_message(evt) {\n",
       "        if (evt.data instanceof Blob) {\n",
       "            /* FIXME: We get \"Resource interpreted as Image but\n",
       "             * transferred with MIME type text/plain:\" errors on\n",
       "             * Chrome.  But how to set the MIME type?  It doesn't seem\n",
       "             * to be part of the websocket stream */\n",
       "            evt.data.type = 'image/png';\n",
       "\n",
       "            /* Free the memory for the previous frames */\n",
       "            if (fig.imageObj.src) {\n",
       "                (window.URL || window.webkitURL).revokeObjectURL(\n",
       "                    fig.imageObj.src\n",
       "                );\n",
       "            }\n",
       "\n",
       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
       "                evt.data\n",
       "            );\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        } else if (\n",
       "            typeof evt.data === 'string' &&\n",
       "            evt.data.slice(0, 21) === 'data:image/png;base64'\n",
       "        ) {\n",
       "            fig.imageObj.src = evt.data;\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        var msg = JSON.parse(evt.data);\n",
       "        var msg_type = msg['type'];\n",
       "\n",
       "        // Call the  \"handle_{type}\" callback, which takes\n",
       "        // the figure and JSON message as its only arguments.\n",
       "        try {\n",
       "            var callback = fig['handle_' + msg_type];\n",
       "        } catch (e) {\n",
       "            console.log(\n",
       "                \"No handler for the '\" + msg_type + \"' message type: \",\n",
       "                msg\n",
       "            );\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        if (callback) {\n",
       "            try {\n",
       "                // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n",
       "                callback(fig, msg);\n",
       "            } catch (e) {\n",
       "                console.log(\n",
       "                    \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n",
       "                    e,\n",
       "                    e.stack,\n",
       "                    msg\n",
       "                );\n",
       "            }\n",
       "        }\n",
       "    };\n",
       "};\n",
       "\n",
       "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
       "mpl.findpos = function (e) {\n",
       "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
       "    var targ;\n",
       "    if (!e) {\n",
       "        e = window.event;\n",
       "    }\n",
       "    if (e.target) {\n",
       "        targ = e.target;\n",
       "    } else if (e.srcElement) {\n",
       "        targ = e.srcElement;\n",
       "    }\n",
       "    if (targ.nodeType === 3) {\n",
       "        // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "    }\n",
       "\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    var boundingRect = targ.getBoundingClientRect();\n",
       "    var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n",
       "    var y = e.pageY - (boundingRect.top + document.body.scrollTop);\n",
       "\n",
       "    return { x: x, y: y };\n",
       "};\n",
       "\n",
       "/*\n",
       " * return a copy of an object with only non-object keys\n",
       " * we need this to avoid circular references\n",
       " * http://stackoverflow.com/a/24161582/3208463\n",
       " */\n",
       "function simpleKeys(original) {\n",
       "    return Object.keys(original).reduce(function (obj, key) {\n",
       "        if (typeof original[key] !== 'object') {\n",
       "            obj[key] = original[key];\n",
       "        }\n",
       "        return obj;\n",
       "    }, {});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.mouse_event = function (event, name) {\n",
       "    var canvas_pos = mpl.findpos(event);\n",
       "\n",
       "    if (name === 'button_press') {\n",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * this.ratio;\n",
       "    var y = canvas_pos.y * this.ratio;\n",
       "\n",
       "    this.send_message(name, {\n",
       "        x: x,\n",
       "        y: y,\n",
       "        button: event.button,\n",
       "        step: event.step,\n",
       "        guiEvent: simpleKeys(event),\n",
       "    });\n",
       "\n",
       "    /* This prevents the web browser from automatically changing to\n",
       "     * the text insertion cursor when the button is pressed.  We want\n",
       "     * to control all of the cursor setting manually through the\n",
       "     * 'cursor' event from matplotlib */\n",
       "    event.preventDefault();\n",
       "    return false;\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function (_event, _name) {\n",
       "    // Handle any extra behaviour associated with a key event\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.key_event = function (event, name) {\n",
       "    // Prevent repeat events\n",
       "    if (name === 'key_press') {\n",
       "        if (event.which === this._key) {\n",
       "            return;\n",
       "        } else {\n",
       "            this._key = event.which;\n",
       "        }\n",
       "    }\n",
       "    if (name === 'key_release') {\n",
       "        this._key = null;\n",
       "    }\n",
       "\n",
       "    var value = '';\n",
       "    if (event.ctrlKey && event.which !== 17) {\n",
       "        value += 'ctrl+';\n",
       "    }\n",
       "    if (event.altKey && event.which !== 18) {\n",
       "        value += 'alt+';\n",
       "    }\n",
       "    if (event.shiftKey && event.which !== 16) {\n",
       "        value += 'shift+';\n",
       "    }\n",
       "\n",
       "    value += 'k';\n",
       "    value += event.which.toString();\n",
       "\n",
       "    this._key_event_extra(event, name);\n",
       "\n",
       "    this.send_message(name, { key: value, guiEvent: simpleKeys(event) });\n",
       "    return false;\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onclick = function (name) {\n",
       "    if (name === 'download') {\n",
       "        this.handle_save(this, null);\n",
       "    } else {\n",
       "        this.send_message('toolbar_button', { name: name });\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onmouseover = function (tooltip) {\n",
       "    this.message.textContent = tooltip;\n",
       "};\n",
       "\n",
       "///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n",
       "// prettier-ignore\n",
       "var _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\n",
       "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
       "\n",
       "mpl.default_extension = \"png\";/* global mpl */\n",
       "\n",
       "var comm_websocket_adapter = function (comm) {\n",
       "    // Create a \"websocket\"-like object which calls the given IPython comm\n",
       "    // object with the appropriate methods. Currently this is a non binary\n",
       "    // socket, so there is still some room for performance tuning.\n",
       "    var ws = {};\n",
       "\n",
       "    ws.close = function () {\n",
       "        comm.close();\n",
       "    };\n",
       "    ws.send = function (m) {\n",
       "        //console.log('sending', m);\n",
       "        comm.send(m);\n",
       "    };\n",
       "    // Register the callback with on_msg.\n",
       "    comm.on_msg(function (msg) {\n",
       "        //console.log('receiving', msg['content']['data'], msg);\n",
       "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
       "        ws.onmessage(msg['content']['data']);\n",
       "    });\n",
       "    return ws;\n",
       "};\n",
       "\n",
       "mpl.mpl_figure_comm = function (comm, msg) {\n",
       "    // This is the function which gets called when the mpl process\n",
       "    // starts-up an IPython Comm through the \"matplotlib\" channel.\n",
       "\n",
       "    var id = msg.content.data.id;\n",
       "    // Get hold of the div created by the display call when the Comm\n",
       "    // socket was opened in Python.\n",
       "    var element = document.getElementById(id);\n",
       "    var ws_proxy = comm_websocket_adapter(comm);\n",
       "\n",
       "    function ondownload(figure, _format) {\n",
       "        window.open(figure.canvas.toDataURL());\n",
       "    }\n",
       "\n",
       "    var fig = new mpl.figure(id, ws_proxy, ondownload, element);\n",
       "\n",
       "    // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n",
       "    // web socket which is closed, not our websocket->open comm proxy.\n",
       "    ws_proxy.onopen();\n",
       "\n",
       "    fig.parent_element = element;\n",
       "    fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n",
       "    if (!fig.cell_info) {\n",
       "        console.error('Failed to find cell for figure', id, fig);\n",
       "        return;\n",
       "    }\n",
       "    fig.cell_info[0].output_area.element.on(\n",
       "        'cleared',\n",
       "        { fig: fig },\n",
       "        fig._remove_fig_handler\n",
       "    );\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_close = function (fig, msg) {\n",
       "    var width = fig.canvas.width / fig.ratio;\n",
       "    fig.cell_info[0].output_area.element.off(\n",
       "        'cleared',\n",
       "        fig._remove_fig_handler\n",
       "    );\n",
       "    fig.resizeObserverInstance.unobserve(fig.canvas_div);\n",
       "\n",
       "    // Update the output cell to use the data from the current canvas.\n",
       "    fig.push_to_output();\n",
       "    var dataURL = fig.canvas.toDataURL();\n",
       "    // Re-enable the keyboard manager in IPython - without this line, in FF,\n",
       "    // the notebook keyboard shortcuts fail.\n",
       "    IPython.keyboard_manager.enable();\n",
       "    fig.parent_element.innerHTML =\n",
       "        '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
       "    fig.close_ws(fig, msg);\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.close_ws = function (fig, msg) {\n",
       "    fig.send_message('closing', msg);\n",
       "    // fig.ws.close()\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.push_to_output = function (_remove_interactive) {\n",
       "    // Turn the data on the canvas into data in the output cell.\n",
       "    var width = this.canvas.width / this.ratio;\n",
       "    var dataURL = this.canvas.toDataURL();\n",
       "    this.cell_info[1]['text/html'] =\n",
       "        '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function () {\n",
       "    // Tell IPython that the notebook contents must change.\n",
       "    IPython.notebook.set_dirty(true);\n",
       "    this.send_message('ack', {});\n",
       "    var fig = this;\n",
       "    // Wait a second, then push the new image to the DOM so\n",
       "    // that it is saved nicely (might be nice to debounce this).\n",
       "    setTimeout(function () {\n",
       "        fig.push_to_output();\n",
       "    }, 1000);\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function () {\n",
       "    var fig = this;\n",
       "\n",
       "    var toolbar = document.createElement('div');\n",
       "    toolbar.classList = 'btn-toolbar';\n",
       "    this.root.appendChild(toolbar);\n",
       "\n",
       "    function on_click_closure(name) {\n",
       "        return function (_event) {\n",
       "            return fig.toolbar_button_onclick(name);\n",
       "        };\n",
       "    }\n",
       "\n",
       "    function on_mouseover_closure(tooltip) {\n",
       "        return function (event) {\n",
       "            if (!event.currentTarget.disabled) {\n",
       "                return fig.toolbar_button_onmouseover(tooltip);\n",
       "            }\n",
       "        };\n",
       "    }\n",
       "\n",
       "    fig.buttons = {};\n",
       "    var buttonGroup = document.createElement('div');\n",
       "    buttonGroup.classList = 'btn-group';\n",
       "    var button;\n",
       "    for (var toolbar_ind in mpl.toolbar_items) {\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) {\n",
       "            /* Instead of a spacer, we start a new button group. */\n",
       "            if (buttonGroup.hasChildNodes()) {\n",
       "                toolbar.appendChild(buttonGroup);\n",
       "            }\n",
       "            buttonGroup = document.createElement('div');\n",
       "            buttonGroup.classList = 'btn-group';\n",
       "            continue;\n",
       "        }\n",
       "\n",
       "        button = fig.buttons[name] = document.createElement('button');\n",
       "        button.classList = 'btn btn-default';\n",
       "        button.href = '#';\n",
       "        button.title = name;\n",
       "        button.innerHTML = '<i class=\"fa ' + image + ' fa-lg\"></i>';\n",
       "        button.addEventListener('click', on_click_closure(method_name));\n",
       "        button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n",
       "        buttonGroup.appendChild(button);\n",
       "    }\n",
       "\n",
       "    if (buttonGroup.hasChildNodes()) {\n",
       "        toolbar.appendChild(buttonGroup);\n",
       "    }\n",
       "\n",
       "    // Add the status bar.\n",
       "    var status_bar = document.createElement('span');\n",
       "    status_bar.classList = 'mpl-message pull-right';\n",
       "    toolbar.appendChild(status_bar);\n",
       "    this.message = status_bar;\n",
       "\n",
       "    // Add the close button to the window.\n",
       "    var buttongrp = document.createElement('div');\n",
       "    buttongrp.classList = 'btn-group inline pull-right';\n",
       "    button = document.createElement('button');\n",
       "    button.classList = 'btn btn-mini btn-primary';\n",
       "    button.href = '#';\n",
       "    button.title = 'Stop Interaction';\n",
       "    button.innerHTML = '<i class=\"fa fa-power-off icon-remove icon-large\"></i>';\n",
       "    button.addEventListener('click', function (_evt) {\n",
       "        fig.handle_close(fig, {});\n",
       "    });\n",
       "    button.addEventListener(\n",
       "        'mouseover',\n",
       "        on_mouseover_closure('Stop Interaction')\n",
       "    );\n",
       "    buttongrp.appendChild(button);\n",
       "    var titlebar = this.root.querySelector('.ui-dialog-titlebar');\n",
       "    titlebar.insertBefore(buttongrp, titlebar.firstChild);\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._remove_fig_handler = function (event) {\n",
       "    var fig = event.data.fig;\n",
       "    if (event.target !== this) {\n",
       "        // Ignore bubbled events from children.\n",
       "        return;\n",
       "    }\n",
       "    fig.close_ws(fig, {});\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function (el) {\n",
       "    el.style.boxSizing = 'content-box'; // override notebook setting of border-box.\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function (el) {\n",
       "    // this is important to make the div 'focusable\n",
       "    el.setAttribute('tabindex', 0);\n",
       "    // reach out to IPython and tell the keyboard manager to turn it's self\n",
       "    // off when our div gets focus\n",
       "\n",
       "    // location in version 3\n",
       "    if (IPython.notebook.keyboard_manager) {\n",
       "        IPython.notebook.keyboard_manager.register_events(el);\n",
       "    } else {\n",
       "        // location in version 2\n",
       "        IPython.keyboard_manager.register_events(el);\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function (event, _name) {\n",
       "    var manager = IPython.notebook.keyboard_manager;\n",
       "    if (!manager) {\n",
       "        manager = IPython.keyboard_manager;\n",
       "    }\n",
       "\n",
       "    // Check for shift+enter\n",
       "    if (event.shiftKey && event.which === 13) {\n",
       "        this.canvas_div.blur();\n",
       "        // select the cell after this one\n",
       "        var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n",
       "        IPython.notebook.select(index + 1);\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_save = function (fig, _msg) {\n",
       "    fig.ondownload(fig, null);\n",
       "};\n",
       "\n",
       "mpl.find_output_cell = function (html_output) {\n",
       "    // Return the cell and output element which can be found *uniquely* in the notebook.\n",
       "    // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n",
       "    // IPython event is triggered only after the cells have been serialised, which for\n",
       "    // our purposes (turning an active figure into a static one), is too late.\n",
       "    var cells = IPython.notebook.get_cells();\n",
       "    var ncells = cells.length;\n",
       "    for (var i = 0; i < ncells; i++) {\n",
       "        var cell = cells[i];\n",
       "        if (cell.cell_type === 'code') {\n",
       "            for (var j = 0; j < cell.output_area.outputs.length; j++) {\n",
       "                var data = cell.output_area.outputs[j];\n",
       "                if (data.data) {\n",
       "                    // IPython >= 3 moved mimebundle to data attribute of output\n",
       "                    data = data.data;\n",
       "                }\n",
       "                if (data['text/html'] === html_output) {\n",
       "                    return [cell, data, j];\n",
       "                }\n",
       "            }\n",
       "        }\n",
       "    }\n",
       "};\n",
       "\n",
       "// Register the function which deals with the matplotlib target/channel.\n",
       "// The kernel may be null if the page has been refreshed.\n",
       "if (IPython.notebook.kernel !== null) {\n",
       "    IPython.notebook.kernel.comm_manager.register_target(\n",
       "        'matplotlib',\n",
       "        mpl.mpl_figure_comm\n",
       "    );\n",
       "}\n"
      ],
      "text/plain": [
       "<IPython.core.display.Javascript object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAACgKADAAQAAAABAAAB4AAAAAAfNMscAABAAElEQVR4AeydBZyUVRfGH7q7FJDu7mYJCekSlO4UEBAUPmkQBAQBEQQkDEpUQiVEUEAQpRFpBQHpkF42eL977vgOs8Ps7uzs7O7Ec/kN88bN/3135sy555wbz1AJTCRAAiRAAiRAAiRAAn5DIL7fjJQDJQESIAESIAESIAES0AQoAPJBIAESIAESIAESIAE/I0AB0M8mnMMlARIgARIgARIgAQqAfAZIgARIgARIgARIwM8IUAD0swnncEmABEiABEiABEiAAiCfARIgARIgARIgARLwMwIUAP1swjlcEiABEiABEiABEqAAyGeABEiABEiABEiABPyMAAVAP5twDpcESIAESIAESIAEKADyGSABEiABEiABEiABPyNAAdDPJpzDJQESIAESIAESIAEKgHwGSIAESIAESIAESMDPCFAA9LMJ53BJgARIgARIgARIgAIgnwESIAESIAESIAES8DMCFAD9bMI5XBIgARIgARIgARKgAMhngARIgARIgARIgAT8jAAFQD+bcA6XBEiABEiABEiABCgA8hkgARIgARIgARIgAT8jQAHQzyacwyUBEiABEiABEiABCoB8BkiABEiABEiABEjAzwhQAPSzCedwSYAESIAESIAESIACIJ8BEiABEiABEiABEvAzAhQA/WzCOVwSIAESIAESIAESoADIZ4AESIAESIAESIAE/IwABUA/m3AOlwRIgARIgARIgAQoAPIZIAESIAESIAESIAE/I0AB0M8mnMMlARIgARIgARIgAQqAfAZIgARIgARIgARIwM8IUAD0swnncEmABEiABEiABEiAAiCfARIgARIgARIgARLwMwIUAP1swjlcEiABEiABEiABEqAAyGeABEiABEiABEiABPyMAAVAP5twDpcESIAESIAESIAEKADyGSABEiABEiABEiABPyNAAdDPJpzDJQESIAESIAESIAEKgHwGSIAESIAESCACAt988w0KFSqE+/fvR5Ar4ltTpkxBvXr1Is7EuyQQiwQoAMYibDYV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\" width=\"640\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "%matplotlib notebook\n",
    "plt.figure()\n",
    "plt.loglog(ms, N_guess, 'b--', label='$2m-1$')\n",
    "plt.plot(ms, N_avg, 'm-', label='Midpoint method approximation')\n",
    "plt.plot(m_array, N_array, 'k-', label='Series solution')\n",
    "plt.plot(ms, N_guess + 1.1*ms*np.log(ms), 'y--',label='$2m - 1 + 1.1\\,m\\, \\log\\, m$')\n",
    "plt.xlabel('$m$')\n",
    "plt.title(r'Alternate frequentist estimate of $\\left<N\\right>$')\n",
    "plt.legend()\n",
    "plt.show();"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Appendix: Debunking the Frequentist Solution\n",
    "At the start of this notebook, I proposed a “frequentist” solution\n",
    "$$\n",
    "    \\hat{N}_f = 2m-1.\n",
    "$$\n",
    "I will now elucidate the real significance of that solution by a combined of analytic and numerical approach. First, let's do a MonteCarlo calculation...."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "True value of N: 999\n",
      " Median of 2m-1: 999.0\n",
      "   Mean of 2m-1: 998.6834486\n"
     ]
    }
   ],
   "source": [
    "# Simplest test: Fixed N\n",
    "N = 999\n",
    "Ntries = 10000000\n",
    "m_arr = np.random.randint(1, N+1, Ntries)\n",
    "N_freq = 2*m_arr - 1  # Naive frequentist estimate of N. Always an odd number!\n",
    "print('True value of N:', N)\n",
    "print(' Median of 2m-1:', np.median(N_freq))\n",
    "print('   Mean of 2m-1:', np.mean(N_freq))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Number of MonteCarlo trials:  1000000\n",
      " Maximum allowed value of N:  1024\n",
      "             log10 of max N:  3.010299956639812 \n",
      "\n",
      " First quartile of N/(2m-1):  0.6666666666666666\n",
      "         Median of N/(2m-1):  1.0\n",
      " Third quartile of N/(2m-1):  2.0 \n",
      "\n",
      "           Mean of N/(2m-1):  3.9261925179678756\n",
      "        Std dev of N/(2m-1):  24.606176290770858\n"
     ]
    },
    {
     "data": {
      "application/javascript": [
       "/* Put everything inside the global mpl namespace */\n",
       "/* global mpl */\n",
       "window.mpl = {};\n",
       "\n",
       "mpl.get_websocket_type = function () {\n",
       "    if (typeof WebSocket !== 'undefined') {\n",
       "        return WebSocket;\n",
       "    } else if (typeof MozWebSocket !== 'undefined') {\n",
       "        return MozWebSocket;\n",
       "    } else {\n",
       "        alert(\n",
       "            'Your browser does not have WebSocket support. ' +\n",
       "                'Please try Chrome, Safari or Firefox ≥ 6. ' +\n",
       "                'Firefox 4 and 5 are also supported but you ' +\n",
       "                'have to enable WebSockets in about:config.'\n",
       "        );\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure = function (figure_id, websocket, ondownload, parent_element) {\n",
       "    this.id = figure_id;\n",
       "\n",
       "    this.ws = websocket;\n",
       "\n",
       "    this.supports_binary = this.ws.binaryType !== undefined;\n",
       "\n",
       "    if (!this.supports_binary) {\n",
       "        var warnings = document.getElementById('mpl-warnings');\n",
       "        if (warnings) {\n",
       "            warnings.style.display = 'block';\n",
       "            warnings.textContent =\n",
       "                'This browser does not support binary websocket messages. ' +\n",
       "                'Performance may be slow.';\n",
       "        }\n",
       "    }\n",
       "\n",
       "    this.imageObj = new Image();\n",
       "\n",
       "    this.context = undefined;\n",
       "    this.message = undefined;\n",
       "    this.canvas = undefined;\n",
       "    this.rubberband_canvas = undefined;\n",
       "    this.rubberband_context = undefined;\n",
       "    this.format_dropdown = undefined;\n",
       "\n",
       "    this.image_mode = 'full';\n",
       "\n",
       "    this.root = document.createElement('div');\n",
       "    this.root.setAttribute('style', 'display: inline-block');\n",
       "    this._root_extra_style(this.root);\n",
       "\n",
       "    parent_element.appendChild(this.root);\n",
       "\n",
       "    this._init_header(this);\n",
       "    this._init_canvas(this);\n",
       "    this._init_toolbar(this);\n",
       "\n",
       "    var fig = this;\n",
       "\n",
       "    this.waiting = false;\n",
       "\n",
       "    this.ws.onopen = function () {\n",
       "        fig.send_message('supports_binary', { value: fig.supports_binary });\n",
       "        fig.send_message('send_image_mode', {});\n",
       "        if (fig.ratio !== 1) {\n",
       "            fig.send_message('set_dpi_ratio', { dpi_ratio: fig.ratio });\n",
       "        }\n",
       "        fig.send_message('refresh', {});\n",
       "    };\n",
       "\n",
       "    this.imageObj.onload = function () {\n",
       "        if (fig.image_mode === 'full') {\n",
       "            // Full images could contain transparency (where diff images\n",
       "            // almost always do), so we need to clear the canvas so that\n",
       "            // there is no ghosting.\n",
       "            fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
       "        }\n",
       "        fig.context.drawImage(fig.imageObj, 0, 0);\n",
       "    };\n",
       "\n",
       "    this.imageObj.onunload = function () {\n",
       "        fig.ws.close();\n",
       "    };\n",
       "\n",
       "    this.ws.onmessage = this._make_on_message_function(this);\n",
       "\n",
       "    this.ondownload = ondownload;\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._init_header = function () {\n",
       "    var titlebar = document.createElement('div');\n",
       "    titlebar.classList =\n",
       "        'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n",
       "    var titletext = document.createElement('div');\n",
       "    titletext.classList = 'ui-dialog-title';\n",
       "    titletext.setAttribute(\n",
       "        'style',\n",
       "        'width: 100%; text-align: center; padding: 3px;'\n",
       "    );\n",
       "    titlebar.appendChild(titletext);\n",
       "    this.root.appendChild(titlebar);\n",
       "    this.header = titletext;\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n",
       "\n",
       "mpl.figure.prototype._init_canvas = function () {\n",
       "    var fig = this;\n",
       "\n",
       "    var canvas_div = (this.canvas_div = document.createElement('div'));\n",
       "    canvas_div.setAttribute(\n",
       "        'style',\n",
       "        'border: 1px solid #ddd;' +\n",
       "            'box-sizing: content-box;' +\n",
       "            'clear: both;' +\n",
       "            'min-height: 1px;' +\n",
       "            'min-width: 1px;' +\n",
       "            'outline: 0;' +\n",
       "            'overflow: hidden;' +\n",
       "            'position: relative;' +\n",
       "            'resize: both;'\n",
       "    );\n",
       "\n",
       "    function on_keyboard_event_closure(name) {\n",
       "        return function (event) {\n",
       "            return fig.key_event(event, name);\n",
       "        };\n",
       "    }\n",
       "\n",
       "    canvas_div.addEventListener(\n",
       "        'keydown',\n",
       "        on_keyboard_event_closure('key_press')\n",
       "    );\n",
       "    canvas_div.addEventListener(\n",
       "        'keyup',\n",
       "        on_keyboard_event_closure('key_release')\n",
       "    );\n",
       "\n",
       "    this._canvas_extra_style(canvas_div);\n",
       "    this.root.appendChild(canvas_div);\n",
       "\n",
       "    var canvas = (this.canvas = document.createElement('canvas'));\n",
       "    canvas.classList.add('mpl-canvas');\n",
       "    canvas.setAttribute('style', 'box-sizing: content-box;');\n",
       "\n",
       "    this.context = canvas.getContext('2d');\n",
       "\n",
       "    var backingStore =\n",
       "        this.context.backingStorePixelRatio ||\n",
       "        this.context.webkitBackingStorePixelRatio ||\n",
       "        this.context.mozBackingStorePixelRatio ||\n",
       "        this.context.msBackingStorePixelRatio ||\n",
       "        this.context.oBackingStorePixelRatio ||\n",
       "        this.context.backingStorePixelRatio ||\n",
       "        1;\n",
       "\n",
       "    this.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
       "    if (this.ratio !== 1) {\n",
       "        fig.send_message('set_dpi_ratio', { dpi_ratio: this.ratio });\n",
       "    }\n",
       "\n",
       "    var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n",
       "        'canvas'\n",
       "    ));\n",
       "    rubberband_canvas.setAttribute(\n",
       "        'style',\n",
       "        'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n",
       "    );\n",
       "\n",
       "    // Apply a ponyfill if ResizeObserver is not implemented by browser.\n",
       "    if (this.ResizeObserver === undefined) {\n",
       "        if (window.ResizeObserver !== undefined) {\n",
       "            this.ResizeObserver = window.ResizeObserver;\n",
       "        } else {\n",
       "            var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n",
       "            this.ResizeObserver = obs.ResizeObserver;\n",
       "        }\n",
       "    }\n",
       "\n",
       "    this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n",
       "        var nentries = entries.length;\n",
       "        for (var i = 0; i < nentries; i++) {\n",
       "            var entry = entries[i];\n",
       "            var width, height;\n",
       "            if (entry.contentBoxSize) {\n",
       "                if (entry.contentBoxSize instanceof Array) {\n",
       "                    // Chrome 84 implements new version of spec.\n",
       "                    width = entry.contentBoxSize[0].inlineSize;\n",
       "                    height = entry.contentBoxSize[0].blockSize;\n",
       "                } else {\n",
       "                    // Firefox implements old version of spec.\n",
       "                    width = entry.contentBoxSize.inlineSize;\n",
       "                    height = entry.contentBoxSize.blockSize;\n",
       "                }\n",
       "            } else {\n",
       "                // Chrome <84 implements even older version of spec.\n",
       "                width = entry.contentRect.width;\n",
       "                height = entry.contentRect.height;\n",
       "            }\n",
       "\n",
       "            // Keep the size of the canvas and rubber band canvas in sync with\n",
       "            // the canvas container.\n",
       "            if (entry.devicePixelContentBoxSize) {\n",
       "                // Chrome 84 implements new version of spec.\n",
       "                canvas.setAttribute(\n",
       "                    'width',\n",
       "                    entry.devicePixelContentBoxSize[0].inlineSize\n",
       "                );\n",
       "                canvas.setAttribute(\n",
       "                    'height',\n",
       "                    entry.devicePixelContentBoxSize[0].blockSize\n",
       "                );\n",
       "            } else {\n",
       "                canvas.setAttribute('width', width * fig.ratio);\n",
       "                canvas.setAttribute('height', height * fig.ratio);\n",
       "            }\n",
       "            canvas.setAttribute(\n",
       "                'style',\n",
       "                'width: ' + width + 'px; height: ' + height + 'px;'\n",
       "            );\n",
       "\n",
       "            rubberband_canvas.setAttribute('width', width);\n",
       "            rubberband_canvas.setAttribute('height', height);\n",
       "\n",
       "            // And update the size in Python. We ignore the initial 0/0 size\n",
       "            // that occurs as the element is placed into the DOM, which should\n",
       "            // otherwise not happen due to the minimum size styling.\n",
       "            if (width != 0 && height != 0) {\n",
       "                fig.request_resize(width, height);\n",
       "            }\n",
       "        }\n",
       "    });\n",
       "    this.resizeObserverInstance.observe(canvas_div);\n",
       "\n",
       "    function on_mouse_event_closure(name) {\n",
       "        return function (event) {\n",
       "            return fig.mouse_event(event, name);\n",
       "        };\n",
       "    }\n",
       "\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mousedown',\n",
       "        on_mouse_event_closure('button_press')\n",
       "    );\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mouseup',\n",
       "        on_mouse_event_closure('button_release')\n",
       "    );\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mousemove',\n",
       "        on_mouse_event_closure('motion_notify')\n",
       "    );\n",
       "\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mouseenter',\n",
       "        on_mouse_event_closure('figure_enter')\n",
       "    );\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mouseleave',\n",
       "        on_mouse_event_closure('figure_leave')\n",
       "    );\n",
       "\n",
       "    canvas_div.addEventListener('wheel', function (event) {\n",
       "        if (event.deltaY < 0) {\n",
       "            event.step = 1;\n",
       "        } else {\n",
       "            event.step = -1;\n",
       "        }\n",
       "        on_mouse_event_closure('scroll')(event);\n",
       "    });\n",
       "\n",
       "    canvas_div.appendChild(canvas);\n",
       "    canvas_div.appendChild(rubberband_canvas);\n",
       "\n",
       "    this.rubberband_context = rubberband_canvas.getContext('2d');\n",
       "    this.rubberband_context.strokeStyle = '#000000';\n",
       "\n",
       "    this._resize_canvas = function (width, height, forward) {\n",
       "        if (forward) {\n",
       "            canvas_div.style.width = width + 'px';\n",
       "            canvas_div.style.height = height + 'px';\n",
       "        }\n",
       "    };\n",
       "\n",
       "    // Disable right mouse context menu.\n",
       "    this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n",
       "        event.preventDefault();\n",
       "        return false;\n",
       "    });\n",
       "\n",
       "    function set_focus() {\n",
       "        canvas.focus();\n",
       "        canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    window.setTimeout(set_focus, 100);\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function () {\n",
       "    var fig = this;\n",
       "\n",
       "    var toolbar = document.createElement('div');\n",
       "    toolbar.classList = 'mpl-toolbar';\n",
       "    this.root.appendChild(toolbar);\n",
       "\n",
       "    function on_click_closure(name) {\n",
       "        return function (_event) {\n",
       "            return fig.toolbar_button_onclick(name);\n",
       "        };\n",
       "    }\n",
       "\n",
       "    function on_mouseover_closure(tooltip) {\n",
       "        return function (event) {\n",
       "            if (!event.currentTarget.disabled) {\n",
       "                return fig.toolbar_button_onmouseover(tooltip);\n",
       "            }\n",
       "        };\n",
       "    }\n",
       "\n",
       "    fig.buttons = {};\n",
       "    var buttonGroup = document.createElement('div');\n",
       "    buttonGroup.classList = 'mpl-button-group';\n",
       "    for (var toolbar_ind in mpl.toolbar_items) {\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) {\n",
       "            /* Instead of a spacer, we start a new button group. */\n",
       "            if (buttonGroup.hasChildNodes()) {\n",
       "                toolbar.appendChild(buttonGroup);\n",
       "            }\n",
       "            buttonGroup = document.createElement('div');\n",
       "            buttonGroup.classList = 'mpl-button-group';\n",
       "            continue;\n",
       "        }\n",
       "\n",
       "        var button = (fig.buttons[name] = document.createElement('button'));\n",
       "        button.classList = 'mpl-widget';\n",
       "        button.setAttribute('role', 'button');\n",
       "        button.setAttribute('aria-disabled', 'false');\n",
       "        button.addEventListener('click', on_click_closure(method_name));\n",
       "        button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n",
       "\n",
       "        var icon_img = document.createElement('img');\n",
       "        icon_img.src = '_images/' + image + '.png';\n",
       "        icon_img.srcset = '_images/' + image + '_large.png 2x';\n",
       "        icon_img.alt = tooltip;\n",
       "        button.appendChild(icon_img);\n",
       "\n",
       "        buttonGroup.appendChild(button);\n",
       "    }\n",
       "\n",
       "    if (buttonGroup.hasChildNodes()) {\n",
       "        toolbar.appendChild(buttonGroup);\n",
       "    }\n",
       "\n",
       "    var fmt_picker = document.createElement('select');\n",
       "    fmt_picker.classList = 'mpl-widget';\n",
       "    toolbar.appendChild(fmt_picker);\n",
       "    this.format_dropdown = fmt_picker;\n",
       "\n",
       "    for (var ind in mpl.extensions) {\n",
       "        var fmt = mpl.extensions[ind];\n",
       "        var option = document.createElement('option');\n",
       "        option.selected = fmt === mpl.default_extension;\n",
       "        option.innerHTML = fmt;\n",
       "        fmt_picker.appendChild(option);\n",
       "    }\n",
       "\n",
       "    var status_bar = document.createElement('span');\n",
       "    status_bar.classList = 'mpl-message';\n",
       "    toolbar.appendChild(status_bar);\n",
       "    this.message = status_bar;\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.request_resize = function (x_pixels, y_pixels) {\n",
       "    // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n",
       "    // which will in turn request a refresh of the image.\n",
       "    this.send_message('resize', { width: x_pixels, height: y_pixels });\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.send_message = function (type, properties) {\n",
       "    properties['type'] = type;\n",
       "    properties['figure_id'] = this.id;\n",
       "    this.ws.send(JSON.stringify(properties));\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.send_draw_message = function () {\n",
       "    if (!this.waiting) {\n",
       "        this.waiting = true;\n",
       "        this.ws.send(JSON.stringify({ type: 'draw', figure_id: this.id }));\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_save = function (fig, _msg) {\n",
       "    var format_dropdown = fig.format_dropdown;\n",
       "    var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n",
       "    fig.ondownload(fig, format);\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_resize = function (fig, msg) {\n",
       "    var size = msg['size'];\n",
       "    if (size[0] !== fig.canvas.width || size[1] !== fig.canvas.height) {\n",
       "        fig._resize_canvas(size[0], size[1], msg['forward']);\n",
       "        fig.send_message('refresh', {});\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_rubberband = function (fig, msg) {\n",
       "    var x0 = msg['x0'] / fig.ratio;\n",
       "    var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n",
       "    var x1 = msg['x1'] / fig.ratio;\n",
       "    var y1 = (fig.canvas.height - msg['y1']) / fig.ratio;\n",
       "    x0 = Math.floor(x0) + 0.5;\n",
       "    y0 = Math.floor(y0) + 0.5;\n",
       "    x1 = Math.floor(x1) + 0.5;\n",
       "    y1 = Math.floor(y1) + 0.5;\n",
       "    var min_x = Math.min(x0, x1);\n",
       "    var min_y = Math.min(y0, y1);\n",
       "    var width = Math.abs(x1 - x0);\n",
       "    var height = Math.abs(y1 - y0);\n",
       "\n",
       "    fig.rubberband_context.clearRect(\n",
       "        0,\n",
       "        0,\n",
       "        fig.canvas.width / fig.ratio,\n",
       "        fig.canvas.height / fig.ratio\n",
       "    );\n",
       "\n",
       "    fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_figure_label = function (fig, msg) {\n",
       "    // Updates the figure title.\n",
       "    fig.header.textContent = msg['label'];\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_cursor = function (fig, msg) {\n",
       "    var cursor = msg['cursor'];\n",
       "    switch (cursor) {\n",
       "        case 0:\n",
       "            cursor = 'pointer';\n",
       "            break;\n",
       "        case 1:\n",
       "            cursor = 'default';\n",
       "            break;\n",
       "        case 2:\n",
       "            cursor = 'crosshair';\n",
       "            break;\n",
       "        case 3:\n",
       "            cursor = 'move';\n",
       "            break;\n",
       "    }\n",
       "    fig.rubberband_canvas.style.cursor = cursor;\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_message = function (fig, msg) {\n",
       "    fig.message.textContent = msg['message'];\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_draw = function (fig, _msg) {\n",
       "    // Request the server to send over a new figure.\n",
       "    fig.send_draw_message();\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_image_mode = function (fig, msg) {\n",
       "    fig.image_mode = msg['mode'];\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_history_buttons = function (fig, msg) {\n",
       "    for (var key in msg) {\n",
       "        if (!(key in fig.buttons)) {\n",
       "            continue;\n",
       "        }\n",
       "        fig.buttons[key].disabled = !msg[key];\n",
       "        fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n",
       "    if (msg['mode'] === 'PAN') {\n",
       "        fig.buttons['Pan'].classList.add('active');\n",
       "        fig.buttons['Zoom'].classList.remove('active');\n",
       "    } else if (msg['mode'] === 'ZOOM') {\n",
       "        fig.buttons['Pan'].classList.remove('active');\n",
       "        fig.buttons['Zoom'].classList.add('active');\n",
       "    } else {\n",
       "        fig.buttons['Pan'].classList.remove('active');\n",
       "        fig.buttons['Zoom'].classList.remove('active');\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function () {\n",
       "    // Called whenever the canvas gets updated.\n",
       "    this.send_message('ack', {});\n",
       "};\n",
       "\n",
       "// A function to construct a web socket function for onmessage handling.\n",
       "// Called in the figure constructor.\n",
       "mpl.figure.prototype._make_on_message_function = function (fig) {\n",
       "    return function socket_on_message(evt) {\n",
       "        if (evt.data instanceof Blob) {\n",
       "            /* FIXME: We get \"Resource interpreted as Image but\n",
       "             * transferred with MIME type text/plain:\" errors on\n",
       "             * Chrome.  But how to set the MIME type?  It doesn't seem\n",
       "             * to be part of the websocket stream */\n",
       "            evt.data.type = 'image/png';\n",
       "\n",
       "            /* Free the memory for the previous frames */\n",
       "            if (fig.imageObj.src) {\n",
       "                (window.URL || window.webkitURL).revokeObjectURL(\n",
       "                    fig.imageObj.src\n",
       "                );\n",
       "            }\n",
       "\n",
       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
       "                evt.data\n",
       "            );\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        } else if (\n",
       "            typeof evt.data === 'string' &&\n",
       "            evt.data.slice(0, 21) === 'data:image/png;base64'\n",
       "        ) {\n",
       "            fig.imageObj.src = evt.data;\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        var msg = JSON.parse(evt.data);\n",
       "        var msg_type = msg['type'];\n",
       "\n",
       "        // Call the  \"handle_{type}\" callback, which takes\n",
       "        // the figure and JSON message as its only arguments.\n",
       "        try {\n",
       "            var callback = fig['handle_' + msg_type];\n",
       "        } catch (e) {\n",
       "            console.log(\n",
       "                \"No handler for the '\" + msg_type + \"' message type: \",\n",
       "                msg\n",
       "            );\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        if (callback) {\n",
       "            try {\n",
       "                // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n",
       "                callback(fig, msg);\n",
       "            } catch (e) {\n",
       "                console.log(\n",
       "                    \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n",
       "                    e,\n",
       "                    e.stack,\n",
       "                    msg\n",
       "                );\n",
       "            }\n",
       "        }\n",
       "    };\n",
       "};\n",
       "\n",
       "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
       "mpl.findpos = function (e) {\n",
       "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
       "    var targ;\n",
       "    if (!e) {\n",
       "        e = window.event;\n",
       "    }\n",
       "    if (e.target) {\n",
       "        targ = e.target;\n",
       "    } else if (e.srcElement) {\n",
       "        targ = e.srcElement;\n",
       "    }\n",
       "    if (targ.nodeType === 3) {\n",
       "        // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "    }\n",
       "\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    var boundingRect = targ.getBoundingClientRect();\n",
       "    var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n",
       "    var y = e.pageY - (boundingRect.top + document.body.scrollTop);\n",
       "\n",
       "    return { x: x, y: y };\n",
       "};\n",
       "\n",
       "/*\n",
       " * return a copy of an object with only non-object keys\n",
       " * we need this to avoid circular references\n",
       " * http://stackoverflow.com/a/24161582/3208463\n",
       " */\n",
       "function simpleKeys(original) {\n",
       "    return Object.keys(original).reduce(function (obj, key) {\n",
       "        if (typeof original[key] !== 'object') {\n",
       "            obj[key] = original[key];\n",
       "        }\n",
       "        return obj;\n",
       "    }, {});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.mouse_event = function (event, name) {\n",
       "    var canvas_pos = mpl.findpos(event);\n",
       "\n",
       "    if (name === 'button_press') {\n",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * this.ratio;\n",
       "    var y = canvas_pos.y * this.ratio;\n",
       "\n",
       "    this.send_message(name, {\n",
       "        x: x,\n",
       "        y: y,\n",
       "        button: event.button,\n",
       "        step: event.step,\n",
       "        guiEvent: simpleKeys(event),\n",
       "    });\n",
       "\n",
       "    /* This prevents the web browser from automatically changing to\n",
       "     * the text insertion cursor when the button is pressed.  We want\n",
       "     * to control all of the cursor setting manually through the\n",
       "     * 'cursor' event from matplotlib */\n",
       "    event.preventDefault();\n",
       "    return false;\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function (_event, _name) {\n",
       "    // Handle any extra behaviour associated with a key event\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.key_event = function (event, name) {\n",
       "    // Prevent repeat events\n",
       "    if (name === 'key_press') {\n",
       "        if (event.which === this._key) {\n",
       "            return;\n",
       "        } else {\n",
       "            this._key = event.which;\n",
       "        }\n",
       "    }\n",
       "    if (name === 'key_release') {\n",
       "        this._key = null;\n",
       "    }\n",
       "\n",
       "    var value = '';\n",
       "    if (event.ctrlKey && event.which !== 17) {\n",
       "        value += 'ctrl+';\n",
       "    }\n",
       "    if (event.altKey && event.which !== 18) {\n",
       "        value += 'alt+';\n",
       "    }\n",
       "    if (event.shiftKey && event.which !== 16) {\n",
       "        value += 'shift+';\n",
       "    }\n",
       "\n",
       "    value += 'k';\n",
       "    value += event.which.toString();\n",
       "\n",
       "    this._key_event_extra(event, name);\n",
       "\n",
       "    this.send_message(name, { key: value, guiEvent: simpleKeys(event) });\n",
       "    return false;\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onclick = function (name) {\n",
       "    if (name === 'download') {\n",
       "        this.handle_save(this, null);\n",
       "    } else {\n",
       "        this.send_message('toolbar_button', { name: name });\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onmouseover = function (tooltip) {\n",
       "    this.message.textContent = tooltip;\n",
       "};\n",
       "\n",
       "///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n",
       "// prettier-ignore\n",
       "var _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\n",
       "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
       "\n",
       "mpl.default_extension = \"png\";/* global mpl */\n",
       "\n",
       "var comm_websocket_adapter = function (comm) {\n",
       "    // Create a \"websocket\"-like object which calls the given IPython comm\n",
       "    // object with the appropriate methods. Currently this is a non binary\n",
       "    // socket, so there is still some room for performance tuning.\n",
       "    var ws = {};\n",
       "\n",
       "    ws.close = function () {\n",
       "        comm.close();\n",
       "    };\n",
       "    ws.send = function (m) {\n",
       "        //console.log('sending', m);\n",
       "        comm.send(m);\n",
       "    };\n",
       "    // Register the callback with on_msg.\n",
       "    comm.on_msg(function (msg) {\n",
       "        //console.log('receiving', msg['content']['data'], msg);\n",
       "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
       "        ws.onmessage(msg['content']['data']);\n",
       "    });\n",
       "    return ws;\n",
       "};\n",
       "\n",
       "mpl.mpl_figure_comm = function (comm, msg) {\n",
       "    // This is the function which gets called when the mpl process\n",
       "    // starts-up an IPython Comm through the \"matplotlib\" channel.\n",
       "\n",
       "    var id = msg.content.data.id;\n",
       "    // Get hold of the div created by the display call when the Comm\n",
       "    // socket was opened in Python.\n",
       "    var element = document.getElementById(id);\n",
       "    var ws_proxy = comm_websocket_adapter(comm);\n",
       "\n",
       "    function ondownload(figure, _format) {\n",
       "        window.open(figure.canvas.toDataURL());\n",
       "    }\n",
       "\n",
       "    var fig = new mpl.figure(id, ws_proxy, ondownload, element);\n",
       "\n",
       "    // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n",
       "    // web socket which is closed, not our websocket->open comm proxy.\n",
       "    ws_proxy.onopen();\n",
       "\n",
       "    fig.parent_element = element;\n",
       "    fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n",
       "    if (!fig.cell_info) {\n",
       "        console.error('Failed to find cell for figure', id, fig);\n",
       "        return;\n",
       "    }\n",
       "    fig.cell_info[0].output_area.element.on(\n",
       "        'cleared',\n",
       "        { fig: fig },\n",
       "        fig._remove_fig_handler\n",
       "    );\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_close = function (fig, msg) {\n",
       "    var width = fig.canvas.width / fig.ratio;\n",
       "    fig.cell_info[0].output_area.element.off(\n",
       "        'cleared',\n",
       "        fig._remove_fig_handler\n",
       "    );\n",
       "    fig.resizeObserverInstance.unobserve(fig.canvas_div);\n",
       "\n",
       "    // Update the output cell to use the data from the current canvas.\n",
       "    fig.push_to_output();\n",
       "    var dataURL = fig.canvas.toDataURL();\n",
       "    // Re-enable the keyboard manager in IPython - without this line, in FF,\n",
       "    // the notebook keyboard shortcuts fail.\n",
       "    IPython.keyboard_manager.enable();\n",
       "    fig.parent_element.innerHTML =\n",
       "        '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
       "    fig.close_ws(fig, msg);\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.close_ws = function (fig, msg) {\n",
       "    fig.send_message('closing', msg);\n",
       "    // fig.ws.close()\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.push_to_output = function (_remove_interactive) {\n",
       "    // Turn the data on the canvas into data in the output cell.\n",
       "    var width = this.canvas.width / this.ratio;\n",
       "    var dataURL = this.canvas.toDataURL();\n",
       "    this.cell_info[1]['text/html'] =\n",
       "        '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function () {\n",
       "    // Tell IPython that the notebook contents must change.\n",
       "    IPython.notebook.set_dirty(true);\n",
       "    this.send_message('ack', {});\n",
       "    var fig = this;\n",
       "    // Wait a second, then push the new image to the DOM so\n",
       "    // that it is saved nicely (might be nice to debounce this).\n",
       "    setTimeout(function () {\n",
       "        fig.push_to_output();\n",
       "    }, 1000);\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function () {\n",
       "    var fig = this;\n",
       "\n",
       "    var toolbar = document.createElement('div');\n",
       "    toolbar.classList = 'btn-toolbar';\n",
       "    this.root.appendChild(toolbar);\n",
       "\n",
       "    function on_click_closure(name) {\n",
       "        return function (_event) {\n",
       "            return fig.toolbar_button_onclick(name);\n",
       "        };\n",
       "    }\n",
       "\n",
       "    function on_mouseover_closure(tooltip) {\n",
       "        return function (event) {\n",
       "            if (!event.currentTarget.disabled) {\n",
       "                return fig.toolbar_button_onmouseover(tooltip);\n",
       "            }\n",
       "        };\n",
       "    }\n",
       "\n",
       "    fig.buttons = {};\n",
       "    var buttonGroup = document.createElement('div');\n",
       "    buttonGroup.classList = 'btn-group';\n",
       "    var button;\n",
       "    for (var toolbar_ind in mpl.toolbar_items) {\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) {\n",
       "            /* Instead of a spacer, we start a new button group. */\n",
       "            if (buttonGroup.hasChildNodes()) {\n",
       "                toolbar.appendChild(buttonGroup);\n",
       "            }\n",
       "            buttonGroup = document.createElement('div');\n",
       "            buttonGroup.classList = 'btn-group';\n",
       "            continue;\n",
       "        }\n",
       "\n",
       "        button = fig.buttons[name] = document.createElement('button');\n",
       "        button.classList = 'btn btn-default';\n",
       "        button.href = '#';\n",
       "        button.title = name;\n",
       "        button.innerHTML = '<i class=\"fa ' + image + ' fa-lg\"></i>';\n",
       "        button.addEventListener('click', on_click_closure(method_name));\n",
       "        button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n",
       "        buttonGroup.appendChild(button);\n",
       "    }\n",
       "\n",
       "    if (buttonGroup.hasChildNodes()) {\n",
       "        toolbar.appendChild(buttonGroup);\n",
       "    }\n",
       "\n",
       "    // Add the status bar.\n",
       "    var status_bar = document.createElement('span');\n",
       "    status_bar.classList = 'mpl-message pull-right';\n",
       "    toolbar.appendChild(status_bar);\n",
       "    this.message = status_bar;\n",
       "\n",
       "    // Add the close button to the window.\n",
       "    var buttongrp = document.createElement('div');\n",
       "    buttongrp.classList = 'btn-group inline pull-right';\n",
       "    button = document.createElement('button');\n",
       "    button.classList = 'btn btn-mini btn-primary';\n",
       "    button.href = '#';\n",
       "    button.title = 'Stop Interaction';\n",
       "    button.innerHTML = '<i class=\"fa fa-power-off icon-remove icon-large\"></i>';\n",
       "    button.addEventListener('click', function (_evt) {\n",
       "        fig.handle_close(fig, {});\n",
       "    });\n",
       "    button.addEventListener(\n",
       "        'mouseover',\n",
       "        on_mouseover_closure('Stop Interaction')\n",
       "    );\n",
       "    buttongrp.appendChild(button);\n",
       "    var titlebar = this.root.querySelector('.ui-dialog-titlebar');\n",
       "    titlebar.insertBefore(buttongrp, titlebar.firstChild);\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._remove_fig_handler = function (event) {\n",
       "    var fig = event.data.fig;\n",
       "    if (event.target !== this) {\n",
       "        // Ignore bubbled events from children.\n",
       "        return;\n",
       "    }\n",
       "    fig.close_ws(fig, {});\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function (el) {\n",
       "    el.style.boxSizing = 'content-box'; // override notebook setting of border-box.\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function (el) {\n",
       "    // this is important to make the div 'focusable\n",
       "    el.setAttribute('tabindex', 0);\n",
       "    // reach out to IPython and tell the keyboard manager to turn it's self\n",
       "    // off when our div gets focus\n",
       "\n",
       "    // location in version 3\n",
       "    if (IPython.notebook.keyboard_manager) {\n",
       "        IPython.notebook.keyboard_manager.register_events(el);\n",
       "    } else {\n",
       "        // location in version 2\n",
       "        IPython.keyboard_manager.register_events(el);\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function (event, _name) {\n",
       "    var manager = IPython.notebook.keyboard_manager;\n",
       "    if (!manager) {\n",
       "        manager = IPython.keyboard_manager;\n",
       "    }\n",
       "\n",
       "    // Check for shift+enter\n",
       "    if (event.shiftKey && event.which === 13) {\n",
       "        this.canvas_div.blur();\n",
       "        // select the cell after this one\n",
       "        var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n",
       "        IPython.notebook.select(index + 1);\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_save = function (fig, _msg) {\n",
       "    fig.ondownload(fig, null);\n",
       "};\n",
       "\n",
       "mpl.find_output_cell = function (html_output) {\n",
       "    // Return the cell and output element which can be found *uniquely* in the notebook.\n",
       "    // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n",
       "    // IPython event is triggered only after the cells have been serialised, which for\n",
       "    // our purposes (turning an active figure into a static one), is too late.\n",
       "    var cells = IPython.notebook.get_cells();\n",
       "    var ncells = cells.length;\n",
       "    for (var i = 0; i < ncells; i++) {\n",
       "        var cell = cells[i];\n",
       "        if (cell.cell_type === 'code') {\n",
       "            for (var j = 0; j < cell.output_area.outputs.length; j++) {\n",
       "                var data = cell.output_area.outputs[j];\n",
       "                if (data.data) {\n",
       "                    // IPython >= 3 moved mimebundle to data attribute of output\n",
       "                    data = data.data;\n",
       "                }\n",
       "                if (data['text/html'] === html_output) {\n",
       "                    return [cell, data, j];\n",
       "                }\n",
       "            }\n",
       "        }\n",
       "    }\n",
       "};\n",
       "\n",
       "// Register the function which deals with the matplotlib target/channel.\n",
       "// The kernel may be null if the page has been refreshed.\n",
       "if (IPython.notebook.kernel !== null) {\n",
       "    IPython.notebook.kernel.comm_manager.register_target(\n",
       "        'matplotlib',\n",
       "        mpl.mpl_figure_comm\n",
       "    );\n",
       "}\n"
      ],
      "text/plain": [
       "<IPython.core.display.Javascript object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<img src=\"data:image/png;base64,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\" width=\"640\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "Nmin = 1  #2**63-1024\n",
    "Nmax = 2**10 # At most 2**63-2. Max int64 is 2**63-1.\n",
    "Ntries = 1000000\n",
    "N_arr = np.random.randint(Nmin, Nmax+1, Ntries)\n",
    "# print(Nmax-Nmin)\n",
    "m_arr = np.empty((Ntries))\n",
    "for i in range(Ntries):\n",
    "    # print(N_arr[i]+1)\n",
    "    m_arr[i] = np.random.randint(1, N_arr[i]+1)\n",
    "N_freq = 2*m_arr - 1  # Naive frequentist estimate of N.\n",
    "\n",
    "quartiles = np.quantile(N_arr/N_freq, (0.25, 0.5, 0.75))\n",
    "\n",
    "print('Number of MonteCarlo trials: ', Ntries)\n",
    "print(' Maximum allowed value of N: ', Nmax)\n",
    "print('             log10 of max N: ', np.log10(Nmax), '\\n')\n",
    "print(' First quartile of N/(2m-1): ', quartiles[0])\n",
    "print('         Median of N/(2m-1): ', quartiles[1])\n",
    "print(' Third quartile of N/(2m-1): ', quartiles[2], '\\n')\n",
    "print('           Mean of N/(2m-1): ', np.mean(N_arr/N_freq))\n",
    "print('        Std dev of N/(2m-1): ', np.std(N_arr/N_freq))\n",
    "\n",
    "plt.figure()\n",
    "rmin = 0.5\n",
    "rmax = 100\n",
    "rarray = 10**np.arange(np.log10(rmin), np.log10(rmax), 0.1)\n",
    "plt.hist(N_arr/N_freq, bins=rarray, range=[rmin,rmax], density=True, label=\"Monte Carlo\")\n",
    "\n",
    "model = 0.5*rarray**-2\n",
    "plt.plot(rarray,model,label=r'$\\frac{1}{2}\\left(\\frac{N}{2m-1}\\right)^{-2}$')\n",
    "plt.xlabel(r'$\\frac{N}{2m-1}$')\n",
    "plt.ylabel('frequency')\n",
    "plt.xscale('log')\n",
    "plt.yscale('log')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Number of MonteCarlo trials:  1000000\n",
      " Maximum allowed value of N:  1024\n",
      "             log10 of max N:  3.010299956639812 \n",
      "\n",
      " First quartile of N - (2m-1):  -191.0\n",
      "         Median of N - (2m-1):  0.0\n",
      " Third quartile of N - (2m-1):  191.0 \n",
      "\n",
      "           Mean of N - (2m-1):  -0.108432\n",
      "        Std dev of N - (2m-1):  341.69206005481226\n"
     ]
    },
    {
     "data": {
      "application/javascript": [
       "/* Put everything inside the global mpl namespace */\n",
       "/* global mpl */\n",
       "window.mpl = {};\n",
       "\n",
       "mpl.get_websocket_type = function () {\n",
       "    if (typeof WebSocket !== 'undefined') {\n",
       "        return WebSocket;\n",
       "    } else if (typeof MozWebSocket !== 'undefined') {\n",
       "        return MozWebSocket;\n",
       "    } else {\n",
       "        alert(\n",
       "            'Your browser does not have WebSocket support. ' +\n",
       "                'Please try Chrome, Safari or Firefox ≥ 6. ' +\n",
       "                'Firefox 4 and 5 are also supported but you ' +\n",
       "                'have to enable WebSockets in about:config.'\n",
       "        );\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure = function (figure_id, websocket, ondownload, parent_element) {\n",
       "    this.id = figure_id;\n",
       "\n",
       "    this.ws = websocket;\n",
       "\n",
       "    this.supports_binary = this.ws.binaryType !== undefined;\n",
       "\n",
       "    if (!this.supports_binary) {\n",
       "        var warnings = document.getElementById('mpl-warnings');\n",
       "        if (warnings) {\n",
       "            warnings.style.display = 'block';\n",
       "            warnings.textContent =\n",
       "                'This browser does not support binary websocket messages. ' +\n",
       "                'Performance may be slow.';\n",
       "        }\n",
       "    }\n",
       "\n",
       "    this.imageObj = new Image();\n",
       "\n",
       "    this.context = undefined;\n",
       "    this.message = undefined;\n",
       "    this.canvas = undefined;\n",
       "    this.rubberband_canvas = undefined;\n",
       "    this.rubberband_context = undefined;\n",
       "    this.format_dropdown = undefined;\n",
       "\n",
       "    this.image_mode = 'full';\n",
       "\n",
       "    this.root = document.createElement('div');\n",
       "    this.root.setAttribute('style', 'display: inline-block');\n",
       "    this._root_extra_style(this.root);\n",
       "\n",
       "    parent_element.appendChild(this.root);\n",
       "\n",
       "    this._init_header(this);\n",
       "    this._init_canvas(this);\n",
       "    this._init_toolbar(this);\n",
       "\n",
       "    var fig = this;\n",
       "\n",
       "    this.waiting = false;\n",
       "\n",
       "    this.ws.onopen = function () {\n",
       "        fig.send_message('supports_binary', { value: fig.supports_binary });\n",
       "        fig.send_message('send_image_mode', {});\n",
       "        if (fig.ratio !== 1) {\n",
       "            fig.send_message('set_dpi_ratio', { dpi_ratio: fig.ratio });\n",
       "        }\n",
       "        fig.send_message('refresh', {});\n",
       "    };\n",
       "\n",
       "    this.imageObj.onload = function () {\n",
       "        if (fig.image_mode === 'full') {\n",
       "            // Full images could contain transparency (where diff images\n",
       "            // almost always do), so we need to clear the canvas so that\n",
       "            // there is no ghosting.\n",
       "            fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
       "        }\n",
       "        fig.context.drawImage(fig.imageObj, 0, 0);\n",
       "    };\n",
       "\n",
       "    this.imageObj.onunload = function () {\n",
       "        fig.ws.close();\n",
       "    };\n",
       "\n",
       "    this.ws.onmessage = this._make_on_message_function(this);\n",
       "\n",
       "    this.ondownload = ondownload;\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._init_header = function () {\n",
       "    var titlebar = document.createElement('div');\n",
       "    titlebar.classList =\n",
       "        'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n",
       "    var titletext = document.createElement('div');\n",
       "    titletext.classList = 'ui-dialog-title';\n",
       "    titletext.setAttribute(\n",
       "        'style',\n",
       "        'width: 100%; text-align: center; padding: 3px;'\n",
       "    );\n",
       "    titlebar.appendChild(titletext);\n",
       "    this.root.appendChild(titlebar);\n",
       "    this.header = titletext;\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n",
       "\n",
       "mpl.figure.prototype._init_canvas = function () {\n",
       "    var fig = this;\n",
       "\n",
       "    var canvas_div = (this.canvas_div = document.createElement('div'));\n",
       "    canvas_div.setAttribute(\n",
       "        'style',\n",
       "        'border: 1px solid #ddd;' +\n",
       "            'box-sizing: content-box;' +\n",
       "            'clear: both;' +\n",
       "            'min-height: 1px;' +\n",
       "            'min-width: 1px;' +\n",
       "            'outline: 0;' +\n",
       "            'overflow: hidden;' +\n",
       "            'position: relative;' +\n",
       "            'resize: both;'\n",
       "    );\n",
       "\n",
       "    function on_keyboard_event_closure(name) {\n",
       "        return function (event) {\n",
       "            return fig.key_event(event, name);\n",
       "        };\n",
       "    }\n",
       "\n",
       "    canvas_div.addEventListener(\n",
       "        'keydown',\n",
       "        on_keyboard_event_closure('key_press')\n",
       "    );\n",
       "    canvas_div.addEventListener(\n",
       "        'keyup',\n",
       "        on_keyboard_event_closure('key_release')\n",
       "    );\n",
       "\n",
       "    this._canvas_extra_style(canvas_div);\n",
       "    this.root.appendChild(canvas_div);\n",
       "\n",
       "    var canvas = (this.canvas = document.createElement('canvas'));\n",
       "    canvas.classList.add('mpl-canvas');\n",
       "    canvas.setAttribute('style', 'box-sizing: content-box;');\n",
       "\n",
       "    this.context = canvas.getContext('2d');\n",
       "\n",
       "    var backingStore =\n",
       "        this.context.backingStorePixelRatio ||\n",
       "        this.context.webkitBackingStorePixelRatio ||\n",
       "        this.context.mozBackingStorePixelRatio ||\n",
       "        this.context.msBackingStorePixelRatio ||\n",
       "        this.context.oBackingStorePixelRatio ||\n",
       "        this.context.backingStorePixelRatio ||\n",
       "        1;\n",
       "\n",
       "    this.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
       "    if (this.ratio !== 1) {\n",
       "        fig.send_message('set_dpi_ratio', { dpi_ratio: this.ratio });\n",
       "    }\n",
       "\n",
       "    var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n",
       "        'canvas'\n",
       "    ));\n",
       "    rubberband_canvas.setAttribute(\n",
       "        'style',\n",
       "        'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n",
       "    );\n",
       "\n",
       "    // Apply a ponyfill if ResizeObserver is not implemented by browser.\n",
       "    if (this.ResizeObserver === undefined) {\n",
       "        if (window.ResizeObserver !== undefined) {\n",
       "            this.ResizeObserver = window.ResizeObserver;\n",
       "        } else {\n",
       "            var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n",
       "            this.ResizeObserver = obs.ResizeObserver;\n",
       "        }\n",
       "    }\n",
       "\n",
       "    this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n",
       "        var nentries = entries.length;\n",
       "        for (var i = 0; i < nentries; i++) {\n",
       "            var entry = entries[i];\n",
       "            var width, height;\n",
       "            if (entry.contentBoxSize) {\n",
       "                if (entry.contentBoxSize instanceof Array) {\n",
       "                    // Chrome 84 implements new version of spec.\n",
       "                    width = entry.contentBoxSize[0].inlineSize;\n",
       "                    height = entry.contentBoxSize[0].blockSize;\n",
       "                } else {\n",
       "                    // Firefox implements old version of spec.\n",
       "                    width = entry.contentBoxSize.inlineSize;\n",
       "                    height = entry.contentBoxSize.blockSize;\n",
       "                }\n",
       "            } else {\n",
       "                // Chrome <84 implements even older version of spec.\n",
       "                width = entry.contentRect.width;\n",
       "                height = entry.contentRect.height;\n",
       "            }\n",
       "\n",
       "            // Keep the size of the canvas and rubber band canvas in sync with\n",
       "            // the canvas container.\n",
       "            if (entry.devicePixelContentBoxSize) {\n",
       "                // Chrome 84 implements new version of spec.\n",
       "                canvas.setAttribute(\n",
       "                    'width',\n",
       "                    entry.devicePixelContentBoxSize[0].inlineSize\n",
       "                );\n",
       "                canvas.setAttribute(\n",
       "                    'height',\n",
       "                    entry.devicePixelContentBoxSize[0].blockSize\n",
       "                );\n",
       "            } else {\n",
       "                canvas.setAttribute('width', width * fig.ratio);\n",
       "                canvas.setAttribute('height', height * fig.ratio);\n",
       "            }\n",
       "            canvas.setAttribute(\n",
       "                'style',\n",
       "                'width: ' + width + 'px; height: ' + height + 'px;'\n",
       "            );\n",
       "\n",
       "            rubberband_canvas.setAttribute('width', width);\n",
       "            rubberband_canvas.setAttribute('height', height);\n",
       "\n",
       "            // And update the size in Python. We ignore the initial 0/0 size\n",
       "            // that occurs as the element is placed into the DOM, which should\n",
       "            // otherwise not happen due to the minimum size styling.\n",
       "            if (width != 0 && height != 0) {\n",
       "                fig.request_resize(width, height);\n",
       "            }\n",
       "        }\n",
       "    });\n",
       "    this.resizeObserverInstance.observe(canvas_div);\n",
       "\n",
       "    function on_mouse_event_closure(name) {\n",
       "        return function (event) {\n",
       "            return fig.mouse_event(event, name);\n",
       "        };\n",
       "    }\n",
       "\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mousedown',\n",
       "        on_mouse_event_closure('button_press')\n",
       "    );\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mouseup',\n",
       "        on_mouse_event_closure('button_release')\n",
       "    );\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mousemove',\n",
       "        on_mouse_event_closure('motion_notify')\n",
       "    );\n",
       "\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mouseenter',\n",
       "        on_mouse_event_closure('figure_enter')\n",
       "    );\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mouseleave',\n",
       "        on_mouse_event_closure('figure_leave')\n",
       "    );\n",
       "\n",
       "    canvas_div.addEventListener('wheel', function (event) {\n",
       "        if (event.deltaY < 0) {\n",
       "            event.step = 1;\n",
       "        } else {\n",
       "            event.step = -1;\n",
       "        }\n",
       "        on_mouse_event_closure('scroll')(event);\n",
       "    });\n",
       "\n",
       "    canvas_div.appendChild(canvas);\n",
       "    canvas_div.appendChild(rubberband_canvas);\n",
       "\n",
       "    this.rubberband_context = rubberband_canvas.getContext('2d');\n",
       "    this.rubberband_context.strokeStyle = '#000000';\n",
       "\n",
       "    this._resize_canvas = function (width, height, forward) {\n",
       "        if (forward) {\n",
       "            canvas_div.style.width = width + 'px';\n",
       "            canvas_div.style.height = height + 'px';\n",
       "        }\n",
       "    };\n",
       "\n",
       "    // Disable right mouse context menu.\n",
       "    this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n",
       "        event.preventDefault();\n",
       "        return false;\n",
       "    });\n",
       "\n",
       "    function set_focus() {\n",
       "        canvas.focus();\n",
       "        canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    window.setTimeout(set_focus, 100);\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function () {\n",
       "    var fig = this;\n",
       "\n",
       "    var toolbar = document.createElement('div');\n",
       "    toolbar.classList = 'mpl-toolbar';\n",
       "    this.root.appendChild(toolbar);\n",
       "\n",
       "    function on_click_closure(name) {\n",
       "        return function (_event) {\n",
       "            return fig.toolbar_button_onclick(name);\n",
       "        };\n",
       "    }\n",
       "\n",
       "    function on_mouseover_closure(tooltip) {\n",
       "        return function (event) {\n",
       "            if (!event.currentTarget.disabled) {\n",
       "                return fig.toolbar_button_onmouseover(tooltip);\n",
       "            }\n",
       "        };\n",
       "    }\n",
       "\n",
       "    fig.buttons = {};\n",
       "    var buttonGroup = document.createElement('div');\n",
       "    buttonGroup.classList = 'mpl-button-group';\n",
       "    for (var toolbar_ind in mpl.toolbar_items) {\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) {\n",
       "            /* Instead of a spacer, we start a new button group. */\n",
       "            if (buttonGroup.hasChildNodes()) {\n",
       "                toolbar.appendChild(buttonGroup);\n",
       "            }\n",
       "            buttonGroup = document.createElement('div');\n",
       "            buttonGroup.classList = 'mpl-button-group';\n",
       "            continue;\n",
       "        }\n",
       "\n",
       "        var button = (fig.buttons[name] = document.createElement('button'));\n",
       "        button.classList = 'mpl-widget';\n",
       "        button.setAttribute('role', 'button');\n",
       "        button.setAttribute('aria-disabled', 'false');\n",
       "        button.addEventListener('click', on_click_closure(method_name));\n",
       "        button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n",
       "\n",
       "        var icon_img = document.createElement('img');\n",
       "        icon_img.src = '_images/' + image + '.png';\n",
       "        icon_img.srcset = '_images/' + image + '_large.png 2x';\n",
       "        icon_img.alt = tooltip;\n",
       "        button.appendChild(icon_img);\n",
       "\n",
       "        buttonGroup.appendChild(button);\n",
       "    }\n",
       "\n",
       "    if (buttonGroup.hasChildNodes()) {\n",
       "        toolbar.appendChild(buttonGroup);\n",
       "    }\n",
       "\n",
       "    var fmt_picker = document.createElement('select');\n",
       "    fmt_picker.classList = 'mpl-widget';\n",
       "    toolbar.appendChild(fmt_picker);\n",
       "    this.format_dropdown = fmt_picker;\n",
       "\n",
       "    for (var ind in mpl.extensions) {\n",
       "        var fmt = mpl.extensions[ind];\n",
       "        var option = document.createElement('option');\n",
       "        option.selected = fmt === mpl.default_extension;\n",
       "        option.innerHTML = fmt;\n",
       "        fmt_picker.appendChild(option);\n",
       "    }\n",
       "\n",
       "    var status_bar = document.createElement('span');\n",
       "    status_bar.classList = 'mpl-message';\n",
       "    toolbar.appendChild(status_bar);\n",
       "    this.message = status_bar;\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.request_resize = function (x_pixels, y_pixels) {\n",
       "    // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n",
       "    // which will in turn request a refresh of the image.\n",
       "    this.send_message('resize', { width: x_pixels, height: y_pixels });\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.send_message = function (type, properties) {\n",
       "    properties['type'] = type;\n",
       "    properties['figure_id'] = this.id;\n",
       "    this.ws.send(JSON.stringify(properties));\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.send_draw_message = function () {\n",
       "    if (!this.waiting) {\n",
       "        this.waiting = true;\n",
       "        this.ws.send(JSON.stringify({ type: 'draw', figure_id: this.id }));\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_save = function (fig, _msg) {\n",
       "    var format_dropdown = fig.format_dropdown;\n",
       "    var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n",
       "    fig.ondownload(fig, format);\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_resize = function (fig, msg) {\n",
       "    var size = msg['size'];\n",
       "    if (size[0] !== fig.canvas.width || size[1] !== fig.canvas.height) {\n",
       "        fig._resize_canvas(size[0], size[1], msg['forward']);\n",
       "        fig.send_message('refresh', {});\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_rubberband = function (fig, msg) {\n",
       "    var x0 = msg['x0'] / fig.ratio;\n",
       "    var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n",
       "    var x1 = msg['x1'] / fig.ratio;\n",
       "    var y1 = (fig.canvas.height - msg['y1']) / fig.ratio;\n",
       "    x0 = Math.floor(x0) + 0.5;\n",
       "    y0 = Math.floor(y0) + 0.5;\n",
       "    x1 = Math.floor(x1) + 0.5;\n",
       "    y1 = Math.floor(y1) + 0.5;\n",
       "    var min_x = Math.min(x0, x1);\n",
       "    var min_y = Math.min(y0, y1);\n",
       "    var width = Math.abs(x1 - x0);\n",
       "    var height = Math.abs(y1 - y0);\n",
       "\n",
       "    fig.rubberband_context.clearRect(\n",
       "        0,\n",
       "        0,\n",
       "        fig.canvas.width / fig.ratio,\n",
       "        fig.canvas.height / fig.ratio\n",
       "    );\n",
       "\n",
       "    fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_figure_label = function (fig, msg) {\n",
       "    // Updates the figure title.\n",
       "    fig.header.textContent = msg['label'];\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_cursor = function (fig, msg) {\n",
       "    var cursor = msg['cursor'];\n",
       "    switch (cursor) {\n",
       "        case 0:\n",
       "            cursor = 'pointer';\n",
       "            break;\n",
       "        case 1:\n",
       "            cursor = 'default';\n",
       "            break;\n",
       "        case 2:\n",
       "            cursor = 'crosshair';\n",
       "            break;\n",
       "        case 3:\n",
       "            cursor = 'move';\n",
       "            break;\n",
       "    }\n",
       "    fig.rubberband_canvas.style.cursor = cursor;\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_message = function (fig, msg) {\n",
       "    fig.message.textContent = msg['message'];\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_draw = function (fig, _msg) {\n",
       "    // Request the server to send over a new figure.\n",
       "    fig.send_draw_message();\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_image_mode = function (fig, msg) {\n",
       "    fig.image_mode = msg['mode'];\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_history_buttons = function (fig, msg) {\n",
       "    for (var key in msg) {\n",
       "        if (!(key in fig.buttons)) {\n",
       "            continue;\n",
       "        }\n",
       "        fig.buttons[key].disabled = !msg[key];\n",
       "        fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n",
       "    if (msg['mode'] === 'PAN') {\n",
       "        fig.buttons['Pan'].classList.add('active');\n",
       "        fig.buttons['Zoom'].classList.remove('active');\n",
       "    } else if (msg['mode'] === 'ZOOM') {\n",
       "        fig.buttons['Pan'].classList.remove('active');\n",
       "        fig.buttons['Zoom'].classList.add('active');\n",
       "    } else {\n",
       "        fig.buttons['Pan'].classList.remove('active');\n",
       "        fig.buttons['Zoom'].classList.remove('active');\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function () {\n",
       "    // Called whenever the canvas gets updated.\n",
       "    this.send_message('ack', {});\n",
       "};\n",
       "\n",
       "// A function to construct a web socket function for onmessage handling.\n",
       "// Called in the figure constructor.\n",
       "mpl.figure.prototype._make_on_message_function = function (fig) {\n",
       "    return function socket_on_message(evt) {\n",
       "        if (evt.data instanceof Blob) {\n",
       "            /* FIXME: We get \"Resource interpreted as Image but\n",
       "             * transferred with MIME type text/plain:\" errors on\n",
       "             * Chrome.  But how to set the MIME type?  It doesn't seem\n",
       "             * to be part of the websocket stream */\n",
       "            evt.data.type = 'image/png';\n",
       "\n",
       "            /* Free the memory for the previous frames */\n",
       "            if (fig.imageObj.src) {\n",
       "                (window.URL || window.webkitURL).revokeObjectURL(\n",
       "                    fig.imageObj.src\n",
       "                );\n",
       "            }\n",
       "\n",
       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
       "                evt.data\n",
       "            );\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        } else if (\n",
       "            typeof evt.data === 'string' &&\n",
       "            evt.data.slice(0, 21) === 'data:image/png;base64'\n",
       "        ) {\n",
       "            fig.imageObj.src = evt.data;\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        var msg = JSON.parse(evt.data);\n",
       "        var msg_type = msg['type'];\n",
       "\n",
       "        // Call the  \"handle_{type}\" callback, which takes\n",
       "        // the figure and JSON message as its only arguments.\n",
       "        try {\n",
       "            var callback = fig['handle_' + msg_type];\n",
       "        } catch (e) {\n",
       "            console.log(\n",
       "                \"No handler for the '\" + msg_type + \"' message type: \",\n",
       "                msg\n",
       "            );\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        if (callback) {\n",
       "            try {\n",
       "                // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n",
       "                callback(fig, msg);\n",
       "            } catch (e) {\n",
       "                console.log(\n",
       "                    \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n",
       "                    e,\n",
       "                    e.stack,\n",
       "                    msg\n",
       "                );\n",
       "            }\n",
       "        }\n",
       "    };\n",
       "};\n",
       "\n",
       "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
       "mpl.findpos = function (e) {\n",
       "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
       "    var targ;\n",
       "    if (!e) {\n",
       "        e = window.event;\n",
       "    }\n",
       "    if (e.target) {\n",
       "        targ = e.target;\n",
       "    } else if (e.srcElement) {\n",
       "        targ = e.srcElement;\n",
       "    }\n",
       "    if (targ.nodeType === 3) {\n",
       "        // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "    }\n",
       "\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    var boundingRect = targ.getBoundingClientRect();\n",
       "    var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n",
       "    var y = e.pageY - (boundingRect.top + document.body.scrollTop);\n",
       "\n",
       "    return { x: x, y: y };\n",
       "};\n",
       "\n",
       "/*\n",
       " * return a copy of an object with only non-object keys\n",
       " * we need this to avoid circular references\n",
       " * http://stackoverflow.com/a/24161582/3208463\n",
       " */\n",
       "function simpleKeys(original) {\n",
       "    return Object.keys(original).reduce(function (obj, key) {\n",
       "        if (typeof original[key] !== 'object') {\n",
       "            obj[key] = original[key];\n",
       "        }\n",
       "        return obj;\n",
       "    }, {});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.mouse_event = function (event, name) {\n",
       "    var canvas_pos = mpl.findpos(event);\n",
       "\n",
       "    if (name === 'button_press') {\n",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * this.ratio;\n",
       "    var y = canvas_pos.y * this.ratio;\n",
       "\n",
       "    this.send_message(name, {\n",
       "        x: x,\n",
       "        y: y,\n",
       "        button: event.button,\n",
       "        step: event.step,\n",
       "        guiEvent: simpleKeys(event),\n",
       "    });\n",
       "\n",
       "    /* This prevents the web browser from automatically changing to\n",
       "     * the text insertion cursor when the button is pressed.  We want\n",
       "     * to control all of the cursor setting manually through the\n",
       "     * 'cursor' event from matplotlib */\n",
       "    event.preventDefault();\n",
       "    return false;\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function (_event, _name) {\n",
       "    // Handle any extra behaviour associated with a key event\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.key_event = function (event, name) {\n",
       "    // Prevent repeat events\n",
       "    if (name === 'key_press') {\n",
       "        if (event.which === this._key) {\n",
       "            return;\n",
       "        } else {\n",
       "            this._key = event.which;\n",
       "        }\n",
       "    }\n",
       "    if (name === 'key_release') {\n",
       "        this._key = null;\n",
       "    }\n",
       "\n",
       "    var value = '';\n",
       "    if (event.ctrlKey && event.which !== 17) {\n",
       "        value += 'ctrl+';\n",
       "    }\n",
       "    if (event.altKey && event.which !== 18) {\n",
       "        value += 'alt+';\n",
       "    }\n",
       "    if (event.shiftKey && event.which !== 16) {\n",
       "        value += 'shift+';\n",
       "    }\n",
       "\n",
       "    value += 'k';\n",
       "    value += event.which.toString();\n",
       "\n",
       "    this._key_event_extra(event, name);\n",
       "\n",
       "    this.send_message(name, { key: value, guiEvent: simpleKeys(event) });\n",
       "    return false;\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onclick = function (name) {\n",
       "    if (name === 'download') {\n",
       "        this.handle_save(this, null);\n",
       "    } else {\n",
       "        this.send_message('toolbar_button', { name: name });\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onmouseover = function (tooltip) {\n",
       "    this.message.textContent = tooltip;\n",
       "};\n",
       "\n",
       "///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n",
       "// prettier-ignore\n",
       "var _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\n",
       "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
       "\n",
       "mpl.default_extension = \"png\";/* global mpl */\n",
       "\n",
       "var comm_websocket_adapter = function (comm) {\n",
       "    // Create a \"websocket\"-like object which calls the given IPython comm\n",
       "    // object with the appropriate methods. Currently this is a non binary\n",
       "    // socket, so there is still some room for performance tuning.\n",
       "    var ws = {};\n",
       "\n",
       "    ws.close = function () {\n",
       "        comm.close();\n",
       "    };\n",
       "    ws.send = function (m) {\n",
       "        //console.log('sending', m);\n",
       "        comm.send(m);\n",
       "    };\n",
       "    // Register the callback with on_msg.\n",
       "    comm.on_msg(function (msg) {\n",
       "        //console.log('receiving', msg['content']['data'], msg);\n",
       "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
       "        ws.onmessage(msg['content']['data']);\n",
       "    });\n",
       "    return ws;\n",
       "};\n",
       "\n",
       "mpl.mpl_figure_comm = function (comm, msg) {\n",
       "    // This is the function which gets called when the mpl process\n",
       "    // starts-up an IPython Comm through the \"matplotlib\" channel.\n",
       "\n",
       "    var id = msg.content.data.id;\n",
       "    // Get hold of the div created by the display call when the Comm\n",
       "    // socket was opened in Python.\n",
       "    var element = document.getElementById(id);\n",
       "    var ws_proxy = comm_websocket_adapter(comm);\n",
       "\n",
       "    function ondownload(figure, _format) {\n",
       "        window.open(figure.canvas.toDataURL());\n",
       "    }\n",
       "\n",
       "    var fig = new mpl.figure(id, ws_proxy, ondownload, element);\n",
       "\n",
       "    // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n",
       "    // web socket which is closed, not our websocket->open comm proxy.\n",
       "    ws_proxy.onopen();\n",
       "\n",
       "    fig.parent_element = element;\n",
       "    fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n",
       "    if (!fig.cell_info) {\n",
       "        console.error('Failed to find cell for figure', id, fig);\n",
       "        return;\n",
       "    }\n",
       "    fig.cell_info[0].output_area.element.on(\n",
       "        'cleared',\n",
       "        { fig: fig },\n",
       "        fig._remove_fig_handler\n",
       "    );\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_close = function (fig, msg) {\n",
       "    var width = fig.canvas.width / fig.ratio;\n",
       "    fig.cell_info[0].output_area.element.off(\n",
       "        'cleared',\n",
       "        fig._remove_fig_handler\n",
       "    );\n",
       "    fig.resizeObserverInstance.unobserve(fig.canvas_div);\n",
       "\n",
       "    // Update the output cell to use the data from the current canvas.\n",
       "    fig.push_to_output();\n",
       "    var dataURL = fig.canvas.toDataURL();\n",
       "    // Re-enable the keyboard manager in IPython - without this line, in FF,\n",
       "    // the notebook keyboard shortcuts fail.\n",
       "    IPython.keyboard_manager.enable();\n",
       "    fig.parent_element.innerHTML =\n",
       "        '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
       "    fig.close_ws(fig, msg);\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.close_ws = function (fig, msg) {\n",
       "    fig.send_message('closing', msg);\n",
       "    // fig.ws.close()\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.push_to_output = function (_remove_interactive) {\n",
       "    // Turn the data on the canvas into data in the output cell.\n",
       "    var width = this.canvas.width / this.ratio;\n",
       "    var dataURL = this.canvas.toDataURL();\n",
       "    this.cell_info[1]['text/html'] =\n",
       "        '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function () {\n",
       "    // Tell IPython that the notebook contents must change.\n",
       "    IPython.notebook.set_dirty(true);\n",
       "    this.send_message('ack', {});\n",
       "    var fig = this;\n",
       "    // Wait a second, then push the new image to the DOM so\n",
       "    // that it is saved nicely (might be nice to debounce this).\n",
       "    setTimeout(function () {\n",
       "        fig.push_to_output();\n",
       "    }, 1000);\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function () {\n",
       "    var fig = this;\n",
       "\n",
       "    var toolbar = document.createElement('div');\n",
       "    toolbar.classList = 'btn-toolbar';\n",
       "    this.root.appendChild(toolbar);\n",
       "\n",
       "    function on_click_closure(name) {\n",
       "        return function (_event) {\n",
       "            return fig.toolbar_button_onclick(name);\n",
       "        };\n",
       "    }\n",
       "\n",
       "    function on_mouseover_closure(tooltip) {\n",
       "        return function (event) {\n",
       "            if (!event.currentTarget.disabled) {\n",
       "                return fig.toolbar_button_onmouseover(tooltip);\n",
       "            }\n",
       "        };\n",
       "    }\n",
       "\n",
       "    fig.buttons = {};\n",
       "    var buttonGroup = document.createElement('div');\n",
       "    buttonGroup.classList = 'btn-group';\n",
       "    var button;\n",
       "    for (var toolbar_ind in mpl.toolbar_items) {\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) {\n",
       "            /* Instead of a spacer, we start a new button group. */\n",
       "            if (buttonGroup.hasChildNodes()) {\n",
       "                toolbar.appendChild(buttonGroup);\n",
       "            }\n",
       "            buttonGroup = document.createElement('div');\n",
       "            buttonGroup.classList = 'btn-group';\n",
       "            continue;\n",
       "        }\n",
       "\n",
       "        button = fig.buttons[name] = document.createElement('button');\n",
       "        button.classList = 'btn btn-default';\n",
       "        button.href = '#';\n",
       "        button.title = name;\n",
       "        button.innerHTML = '<i class=\"fa ' + image + ' fa-lg\"></i>';\n",
       "        button.addEventListener('click', on_click_closure(method_name));\n",
       "        button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n",
       "        buttonGroup.appendChild(button);\n",
       "    }\n",
       "\n",
       "    if (buttonGroup.hasChildNodes()) {\n",
       "        toolbar.appendChild(buttonGroup);\n",
       "    }\n",
       "\n",
       "    // Add the status bar.\n",
       "    var status_bar = document.createElement('span');\n",
       "    status_bar.classList = 'mpl-message pull-right';\n",
       "    toolbar.appendChild(status_bar);\n",
       "    this.message = status_bar;\n",
       "\n",
       "    // Add the close button to the window.\n",
       "    var buttongrp = document.createElement('div');\n",
       "    buttongrp.classList = 'btn-group inline pull-right';\n",
       "    button = document.createElement('button');\n",
       "    button.classList = 'btn btn-mini btn-primary';\n",
       "    button.href = '#';\n",
       "    button.title = 'Stop Interaction';\n",
       "    button.innerHTML = '<i class=\"fa fa-power-off icon-remove icon-large\"></i>';\n",
       "    button.addEventListener('click', function (_evt) {\n",
       "        fig.handle_close(fig, {});\n",
       "    });\n",
       "    button.addEventListener(\n",
       "        'mouseover',\n",
       "        on_mouseover_closure('Stop Interaction')\n",
       "    );\n",
       "    buttongrp.appendChild(button);\n",
       "    var titlebar = this.root.querySelector('.ui-dialog-titlebar');\n",
       "    titlebar.insertBefore(buttongrp, titlebar.firstChild);\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._remove_fig_handler = function (event) {\n",
       "    var fig = event.data.fig;\n",
       "    if (event.target !== this) {\n",
       "        // Ignore bubbled events from children.\n",
       "        return;\n",
       "    }\n",
       "    fig.close_ws(fig, {});\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function (el) {\n",
       "    el.style.boxSizing = 'content-box'; // override notebook setting of border-box.\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function (el) {\n",
       "    // this is important to make the div 'focusable\n",
       "    el.setAttribute('tabindex', 0);\n",
       "    // reach out to IPython and tell the keyboard manager to turn it's self\n",
       "    // off when our div gets focus\n",
       "\n",
       "    // location in version 3\n",
       "    if (IPython.notebook.keyboard_manager) {\n",
       "        IPython.notebook.keyboard_manager.register_events(el);\n",
       "    } else {\n",
       "        // location in version 2\n",
       "        IPython.keyboard_manager.register_events(el);\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function (event, _name) {\n",
       "    var manager = IPython.notebook.keyboard_manager;\n",
       "    if (!manager) {\n",
       "        manager = IPython.keyboard_manager;\n",
       "    }\n",
       "\n",
       "    // Check for shift+enter\n",
       "    if (event.shiftKey && event.which === 13) {\n",
       "        this.canvas_div.blur();\n",
       "        // select the cell after this one\n",
       "        var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n",
       "        IPython.notebook.select(index + 1);\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_save = function (fig, _msg) {\n",
       "    fig.ondownload(fig, null);\n",
       "};\n",
       "\n",
       "mpl.find_output_cell = function (html_output) {\n",
       "    // Return the cell and output element which can be found *uniquely* in the notebook.\n",
       "    // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n",
       "    // IPython event is triggered only after the cells have been serialised, which for\n",
       "    // our purposes (turning an active figure into a static one), is too late.\n",
       "    var cells = IPython.notebook.get_cells();\n",
       "    var ncells = cells.length;\n",
       "    for (var i = 0; i < ncells; i++) {\n",
       "        var cell = cells[i];\n",
       "        if (cell.cell_type === 'code') {\n",
       "            for (var j = 0; j < cell.output_area.outputs.length; j++) {\n",
       "                var data = cell.output_area.outputs[j];\n",
       "                if (data.data) {\n",
       "                    // IPython >= 3 moved mimebundle to data attribute of output\n",
       "                    data = data.data;\n",
       "                }\n",
       "                if (data['text/html'] === html_output) {\n",
       "                    return [cell, data, j];\n",
       "                }\n",
       "            }\n",
       "        }\n",
       "    }\n",
       "};\n",
       "\n",
       "// Register the function which deals with the matplotlib target/channel.\n",
       "// The kernel may be null if the page has been refreshed.\n",
       "if (IPython.notebook.kernel !== null) {\n",
       "    IPython.notebook.kernel.comm_manager.register_target(\n",
       "        'matplotlib',\n",
       "        mpl.mpl_figure_comm\n",
       "    );\n",
       "}\n"
      ],
      "text/plain": [
       "<IPython.core.display.Javascript object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<img src=\"data:image/png;base64,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QPUeGSOCQzftpBJSTwDjdQD7Tu+++2546623ksvCrLXWWkEC2FfHcwIECBAgQIBA8wVSPwv49ddfD30f8QzgJ554Iuy2225OAml+fNVIgAABAgQIEOgnkHoC2K+G4ozNN988XHTRRaF6dHCgZc0jQIAAAQIECBBorEBTEsDYhREjRoT58+c3tjd1lh53Ucc7lZxxxhl1lmA1AgQIECBAgED7CKR+DODPf/7zit7Hq8y89NJL4bLLLgsf+9jHKt7LyosLLrgg7LzzzllpjnYQIECAAAECBBoqkHoCePDBB1c0ON4J5IMf/GDYe++9w3/+539WvJeFF/Ei1X/605/CQQcdFObMmZOFJmkDAQIECBAgQKChAqkngPHCz2lN9957b/j3f//3MHv27GQU8dZbbw3VCebll1+eLBNHGbfaaqvkNnS77777oJsQd/vGOu6///5Br2PBvwlUX2KACwECBAgQINAeAk07BrAejiVLloRtt9022X080PrTp08Pp556ajjnnHPCQw89FGLit//++4d58+aVF99xxx3D5MmT+z3i8Yg/+9nPwkc/+tHkUV7BEwIECBAgQIBAhwukPgJ42mmnDZrskksuWeGyMZmLj1pTXP/4448PJ5xwQrLIpZdeGu66665wxRVXhAsvvDCZF0cPa00PPPBAuPHGG8NPfvKTEC9XE69ZGG/p9vWvf33AVZYuXRriozTFW8mYCBAgQIAAAQLtJpB6AhhH4uI9gN97772wxRZbJB5PPvlkchZwvCdwaYrHBg5lWrZsWbJr+KyzzqooZurUqYPenRuTxFKieN111yXHANZK/mIlcdlzzz23oj4vCBAgQIAAAQLtJpB6AhhPphg9enT44Q9/GNZZZ53EI14Y+rjjjkt20Z5++umpGL366qth+fLlYYMNNqgoL75esGBBxby0Xpx99tmh7whnHAGcOHFiWsUrhwABAgQINExgoOO23R6uYdyZLzj1BDCe6Xv33XeXk78oEBPB888/P8TRubQSwJJs9UhivOxM9bzSsiv6+7nPfW5Fbyfvrb766iE+8joN9OWRVwv9JkCAAAEC7SyQegIYR8Vefvnl5IzcvjCvvPJKWLx4cd9ZQ3o+fvz4ZLdy9WhfrKd6VHBIFVmZAAECBAh0qED1f+yNCHZooAfoVupnAR9yyCHJ7t6bb745vPDCC8kjPo8naxx6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\" width=\"640\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "quartiles = np.quantile(N_arr - N_freq, (0.25, 0.5, 0.75))\n",
    "\n",
    "print('Number of MonteCarlo trials: ', Ntries)\n",
    "print(' Maximum allowed value of N: ', Nmax)\n",
    "print('             log10 of max N: ', np.log10(Nmax), '\\n')\n",
    "print(' First quartile of N - (2m-1): ', quartiles[0])\n",
    "print('         Median of N - (2m-1): ', quartiles[1])\n",
    "print(' Third quartile of N - (2m-1): ', quartiles[2], '\\n')\n",
    "print('           Mean of N - (2m-1): ', np.mean(N_arr - N_freq))\n",
    "print('        Std dev of N - (2m-1): ', np.std(N_arr - N_freq))\n",
    "\n",
    "plt.figure()\n",
    "plt.hist(N_arr - N_freq, bins=100, density=True)\n",
    "\n",
    "# model = 0.5*rarray**-2\n",
    "# plt.plot(rarray,model,label=r'$\\left(\\frac{N}{2m-1}\\right)^{-2}$')\n",
    "plt.xlabel(r'$N - (2m-1)$')\n",
    "plt.ylabel('frequency')\n",
    "# plt.xscale('log')\n",
    "plt.yscale('log')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Result of the MoteCarlo\n",
    "At this point, $\\hat{N}_f =2m-1$ is looking very interesting. Averaging over an ensemble of $N$ and $m$ values, I have found that:\n",
    "$$\n",
    "    \\left< \\frac{N}{2m-1} \\right>_{\\text{median}} = 1,\n",
    "$$\n",
    "and\n",
    "$$\n",
    "    \\left< N - (2m-1) \\right>_{\\text{median}} =\n",
    "    \\left< N - (2m-1) \\right>_{\\text{mean}} = 0.\n",
    "$$\n",
    "Doesn't this mean that $2m-1$ is a good estimate for $N$? The answer, unfortunately, is no, as I will demonstrate below."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### The meaning of $2m-1$\n",
    "\n",
    "When I calculated the means and medians above, I included all $N$ and $m$. For comparison, then, I should calculate the median value of the distribution $\\Pr(N-(2m-1))$. It is easiest to start by pretending to known $N$:\n",
    "$$\n",
    "    \\Pr(N-(2m-1) | N) = \\begin{cases}\n",
    "        \\frac{1}{N}, & m \\in {1,...,N};\\\\\n",
    "        0,            & \\text{else.}\n",
    "    \\end{cases}\n",
    "$$\n",
    "Now,\n",
    "$$\n",
    "    \\Pr(N-(2m-1)) = \\sum_{N} \\Pr(N-(2m-1) | N)\\,\\Pr(N).\n",
    "$$\n",
    "I want the median of the above distribution, but it turns out there is a slippery way to get it without doing the marginalization over $N$. The reason will become apparent if we take the median of $\\Pr(N-(2m-1) | N)$. Since $m$ takes on values $1,...,N$ with equal probability, $2m-1 \\in {1,3,5,...,2N-1}$. The median (and mean) value of $2m-1$ is thus $N$. Consequently, the median (and mean) of $N-(2m-1)$ is 0 when $N$ is known. As this is independent of $N$, so the marginalization over $N$ is not needed. The result is that \n",
    "$$\n",
    "    \\left< N - (2m-1) \\right>_{\\text{median}} =\n",
    "    \\left< N - (2m-1) \\right>_{\\text{mean}} = 0.\n",
    "$$\n",
    "This is what we found with our Monte Carlo calculation, and the neat thing is that it's independent of our prior, $\\Pr(N)$.\n",
    "\n",
    "It is tempting at this point to think that $2m-1$ is a good estimate of $N$. The appearance of $m$ in this simple expression encourages us to think that we are taking $m$ properly into account when we calculate $m$, but we are not! What we really want is the median of the distribution $\\Pr(N-(2m-1) | m)$. Suppose we try to evaluate as follows:\n",
    "$$\n",
    "    \\Pr(N-(2m-1) | m) =\n",
    "    \\frac{ \\Pr(N-(2m-1) | N) \\, \\Pr(N) }{\\Pr(m)}.\n",
    "$$\n",
    "The denominator requires marginalizing over $N$:\n",
    "$$\n",
    "    \\Pr(m) = \\sum_{N \\ge m} \\Pr(N-(2m-1) | N) \\, \\Pr(N),\n",
    "$$\n",
    "which introduces a dependence on $m$ that will change depending on the form of $\\Pr(N)$.\n",
    "\n",
    "Below, I will demonstrate via MonteCarlo that $2m-1$ has no nice relationship to $N$ when $m$ is held fixed."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/javascript": [
       "/* Put everything inside the global mpl namespace */\n",
       "/* global mpl */\n",
       "window.mpl = {};\n",
       "\n",
       "mpl.get_websocket_type = function () {\n",
       "    if (typeof WebSocket !== 'undefined') {\n",
       "        return WebSocket;\n",
       "    } else if (typeof MozWebSocket !== 'undefined') {\n",
       "        return MozWebSocket;\n",
       "    } else {\n",
       "        alert(\n",
       "            'Your browser does not have WebSocket support. ' +\n",
       "                'Please try Chrome, Safari or Firefox ≥ 6. ' +\n",
       "                'Firefox 4 and 5 are also supported but you ' +\n",
       "                'have to enable WebSockets in about:config.'\n",
       "        );\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure = function (figure_id, websocket, ondownload, parent_element) {\n",
       "    this.id = figure_id;\n",
       "\n",
       "    this.ws = websocket;\n",
       "\n",
       "    this.supports_binary = this.ws.binaryType !== undefined;\n",
       "\n",
       "    if (!this.supports_binary) {\n",
       "        var warnings = document.getElementById('mpl-warnings');\n",
       "        if (warnings) {\n",
       "            warnings.style.display = 'block';\n",
       "            warnings.textContent =\n",
       "                'This browser does not support binary websocket messages. ' +\n",
       "                'Performance may be slow.';\n",
       "        }\n",
       "    }\n",
       "\n",
       "    this.imageObj = new Image();\n",
       "\n",
       "    this.context = undefined;\n",
       "    this.message = undefined;\n",
       "    this.canvas = undefined;\n",
       "    this.rubberband_canvas = undefined;\n",
       "    this.rubberband_context = undefined;\n",
       "    this.format_dropdown = undefined;\n",
       "\n",
       "    this.image_mode = 'full';\n",
       "\n",
       "    this.root = document.createElement('div');\n",
       "    this.root.setAttribute('style', 'display: inline-block');\n",
       "    this._root_extra_style(this.root);\n",
       "\n",
       "    parent_element.appendChild(this.root);\n",
       "\n",
       "    this._init_header(this);\n",
       "    this._init_canvas(this);\n",
       "    this._init_toolbar(this);\n",
       "\n",
       "    var fig = this;\n",
       "\n",
       "    this.waiting = false;\n",
       "\n",
       "    this.ws.onopen = function () {\n",
       "        fig.send_message('supports_binary', { value: fig.supports_binary });\n",
       "        fig.send_message('send_image_mode', {});\n",
       "        if (fig.ratio !== 1) {\n",
       "            fig.send_message('set_dpi_ratio', { dpi_ratio: fig.ratio });\n",
       "        }\n",
       "        fig.send_message('refresh', {});\n",
       "    };\n",
       "\n",
       "    this.imageObj.onload = function () {\n",
       "        if (fig.image_mode === 'full') {\n",
       "            // Full images could contain transparency (where diff images\n",
       "            // almost always do), so we need to clear the canvas so that\n",
       "            // there is no ghosting.\n",
       "            fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
       "        }\n",
       "        fig.context.drawImage(fig.imageObj, 0, 0);\n",
       "    };\n",
       "\n",
       "    this.imageObj.onunload = function () {\n",
       "        fig.ws.close();\n",
       "    };\n",
       "\n",
       "    this.ws.onmessage = this._make_on_message_function(this);\n",
       "\n",
       "    this.ondownload = ondownload;\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._init_header = function () {\n",
       "    var titlebar = document.createElement('div');\n",
       "    titlebar.classList =\n",
       "        'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n",
       "    var titletext = document.createElement('div');\n",
       "    titletext.classList = 'ui-dialog-title';\n",
       "    titletext.setAttribute(\n",
       "        'style',\n",
       "        'width: 100%; text-align: center; padding: 3px;'\n",
       "    );\n",
       "    titlebar.appendChild(titletext);\n",
       "    this.root.appendChild(titlebar);\n",
       "    this.header = titletext;\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n",
       "\n",
       "mpl.figure.prototype._init_canvas = function () {\n",
       "    var fig = this;\n",
       "\n",
       "    var canvas_div = (this.canvas_div = document.createElement('div'));\n",
       "    canvas_div.setAttribute(\n",
       "        'style',\n",
       "        'border: 1px solid #ddd;' +\n",
       "            'box-sizing: content-box;' +\n",
       "            'clear: both;' +\n",
       "            'min-height: 1px;' +\n",
       "            'min-width: 1px;' +\n",
       "            'outline: 0;' +\n",
       "            'overflow: hidden;' +\n",
       "            'position: relative;' +\n",
       "            'resize: both;'\n",
       "    );\n",
       "\n",
       "    function on_keyboard_event_closure(name) {\n",
       "        return function (event) {\n",
       "            return fig.key_event(event, name);\n",
       "        };\n",
       "    }\n",
       "\n",
       "    canvas_div.addEventListener(\n",
       "        'keydown',\n",
       "        on_keyboard_event_closure('key_press')\n",
       "    );\n",
       "    canvas_div.addEventListener(\n",
       "        'keyup',\n",
       "        on_keyboard_event_closure('key_release')\n",
       "    );\n",
       "\n",
       "    this._canvas_extra_style(canvas_div);\n",
       "    this.root.appendChild(canvas_div);\n",
       "\n",
       "    var canvas = (this.canvas = document.createElement('canvas'));\n",
       "    canvas.classList.add('mpl-canvas');\n",
       "    canvas.setAttribute('style', 'box-sizing: content-box;');\n",
       "\n",
       "    this.context = canvas.getContext('2d');\n",
       "\n",
       "    var backingStore =\n",
       "        this.context.backingStorePixelRatio ||\n",
       "        this.context.webkitBackingStorePixelRatio ||\n",
       "        this.context.mozBackingStorePixelRatio ||\n",
       "        this.context.msBackingStorePixelRatio ||\n",
       "        this.context.oBackingStorePixelRatio ||\n",
       "        this.context.backingStorePixelRatio ||\n",
       "        1;\n",
       "\n",
       "    this.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
       "    if (this.ratio !== 1) {\n",
       "        fig.send_message('set_dpi_ratio', { dpi_ratio: this.ratio });\n",
       "    }\n",
       "\n",
       "    var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n",
       "        'canvas'\n",
       "    ));\n",
       "    rubberband_canvas.setAttribute(\n",
       "        'style',\n",
       "        'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n",
       "    );\n",
       "\n",
       "    // Apply a ponyfill if ResizeObserver is not implemented by browser.\n",
       "    if (this.ResizeObserver === undefined) {\n",
       "        if (window.ResizeObserver !== undefined) {\n",
       "            this.ResizeObserver = window.ResizeObserver;\n",
       "        } else {\n",
       "            var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n",
       "            this.ResizeObserver = obs.ResizeObserver;\n",
       "        }\n",
       "    }\n",
       "\n",
       "    this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n",
       "        var nentries = entries.length;\n",
       "        for (var i = 0; i < nentries; i++) {\n",
       "            var entry = entries[i];\n",
       "            var width, height;\n",
       "            if (entry.contentBoxSize) {\n",
       "                if (entry.contentBoxSize instanceof Array) {\n",
       "                    // Chrome 84 implements new version of spec.\n",
       "                    width = entry.contentBoxSize[0].inlineSize;\n",
       "                    height = entry.contentBoxSize[0].blockSize;\n",
       "                } else {\n",
       "                    // Firefox implements old version of spec.\n",
       "                    width = entry.contentBoxSize.inlineSize;\n",
       "                    height = entry.contentBoxSize.blockSize;\n",
       "                }\n",
       "            } else {\n",
       "                // Chrome <84 implements even older version of spec.\n",
       "                width = entry.contentRect.width;\n",
       "                height = entry.contentRect.height;\n",
       "            }\n",
       "\n",
       "            // Keep the size of the canvas and rubber band canvas in sync with\n",
       "            // the canvas container.\n",
       "            if (entry.devicePixelContentBoxSize) {\n",
       "                // Chrome 84 implements new version of spec.\n",
       "                canvas.setAttribute(\n",
       "                    'width',\n",
       "                    entry.devicePixelContentBoxSize[0].inlineSize\n",
       "                );\n",
       "                canvas.setAttribute(\n",
       "                    'height',\n",
       "                    entry.devicePixelContentBoxSize[0].blockSize\n",
       "                );\n",
       "            } else {\n",
       "                canvas.setAttribute('width', width * fig.ratio);\n",
       "                canvas.setAttribute('height', height * fig.ratio);\n",
       "            }\n",
       "            canvas.setAttribute(\n",
       "                'style',\n",
       "                'width: ' + width + 'px; height: ' + height + 'px;'\n",
       "            );\n",
       "\n",
       "            rubberband_canvas.setAttribute('width', width);\n",
       "            rubberband_canvas.setAttribute('height', height);\n",
       "\n",
       "            // And update the size in Python. We ignore the initial 0/0 size\n",
       "            // that occurs as the element is placed into the DOM, which should\n",
       "            // otherwise not happen due to the minimum size styling.\n",
       "            if (width != 0 && height != 0) {\n",
       "                fig.request_resize(width, height);\n",
       "            }\n",
       "        }\n",
       "    });\n",
       "    this.resizeObserverInstance.observe(canvas_div);\n",
       "\n",
       "    function on_mouse_event_closure(name) {\n",
       "        return function (event) {\n",
       "            return fig.mouse_event(event, name);\n",
       "        };\n",
       "    }\n",
       "\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mousedown',\n",
       "        on_mouse_event_closure('button_press')\n",
       "    );\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mouseup',\n",
       "        on_mouse_event_closure('button_release')\n",
       "    );\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mousemove',\n",
       "        on_mouse_event_closure('motion_notify')\n",
       "    );\n",
       "\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mouseenter',\n",
       "        on_mouse_event_closure('figure_enter')\n",
       "    );\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mouseleave',\n",
       "        on_mouse_event_closure('figure_leave')\n",
       "    );\n",
       "\n",
       "    canvas_div.addEventListener('wheel', function (event) {\n",
       "        if (event.deltaY < 0) {\n",
       "            event.step = 1;\n",
       "        } else {\n",
       "            event.step = -1;\n",
       "        }\n",
       "        on_mouse_event_closure('scroll')(event);\n",
       "    });\n",
       "\n",
       "    canvas_div.appendChild(canvas);\n",
       "    canvas_div.appendChild(rubberband_canvas);\n",
       "\n",
       "    this.rubberband_context = rubberband_canvas.getContext('2d');\n",
       "    this.rubberband_context.strokeStyle = '#000000';\n",
       "\n",
       "    this._resize_canvas = function (width, height, forward) {\n",
       "        if (forward) {\n",
       "            canvas_div.style.width = width + 'px';\n",
       "            canvas_div.style.height = height + 'px';\n",
       "        }\n",
       "    };\n",
       "\n",
       "    // Disable right mouse context menu.\n",
       "    this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n",
       "        event.preventDefault();\n",
       "        return false;\n",
       "    });\n",
       "\n",
       "    function set_focus() {\n",
       "        canvas.focus();\n",
       "        canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    window.setTimeout(set_focus, 100);\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function () {\n",
       "    var fig = this;\n",
       "\n",
       "    var toolbar = document.createElement('div');\n",
       "    toolbar.classList = 'mpl-toolbar';\n",
       "    this.root.appendChild(toolbar);\n",
       "\n",
       "    function on_click_closure(name) {\n",
       "        return function (_event) {\n",
       "            return fig.toolbar_button_onclick(name);\n",
       "        };\n",
       "    }\n",
       "\n",
       "    function on_mouseover_closure(tooltip) {\n",
       "        return function (event) {\n",
       "            if (!event.currentTarget.disabled) {\n",
       "                return fig.toolbar_button_onmouseover(tooltip);\n",
       "            }\n",
       "        };\n",
       "    }\n",
       "\n",
       "    fig.buttons = {};\n",
       "    var buttonGroup = document.createElement('div');\n",
       "    buttonGroup.classList = 'mpl-button-group';\n",
       "    for (var toolbar_ind in mpl.toolbar_items) {\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) {\n",
       "            /* Instead of a spacer, we start a new button group. */\n",
       "            if (buttonGroup.hasChildNodes()) {\n",
       "                toolbar.appendChild(buttonGroup);\n",
       "            }\n",
       "            buttonGroup = document.createElement('div');\n",
       "            buttonGroup.classList = 'mpl-button-group';\n",
       "            continue;\n",
       "        }\n",
       "\n",
       "        var button = (fig.buttons[name] = document.createElement('button'));\n",
       "        button.classList = 'mpl-widget';\n",
       "        button.setAttribute('role', 'button');\n",
       "        button.setAttribute('aria-disabled', 'false');\n",
       "        button.addEventListener('click', on_click_closure(method_name));\n",
       "        button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n",
       "\n",
       "        var icon_img = document.createElement('img');\n",
       "        icon_img.src = '_images/' + image + '.png';\n",
       "        icon_img.srcset = '_images/' + image + '_large.png 2x';\n",
       "        icon_img.alt = tooltip;\n",
       "        button.appendChild(icon_img);\n",
       "\n",
       "        buttonGroup.appendChild(button);\n",
       "    }\n",
       "\n",
       "    if (buttonGroup.hasChildNodes()) {\n",
       "        toolbar.appendChild(buttonGroup);\n",
       "    }\n",
       "\n",
       "    var fmt_picker = document.createElement('select');\n",
       "    fmt_picker.classList = 'mpl-widget';\n",
       "    toolbar.appendChild(fmt_picker);\n",
       "    this.format_dropdown = fmt_picker;\n",
       "\n",
       "    for (var ind in mpl.extensions) {\n",
       "        var fmt = mpl.extensions[ind];\n",
       "        var option = document.createElement('option');\n",
       "        option.selected = fmt === mpl.default_extension;\n",
       "        option.innerHTML = fmt;\n",
       "        fmt_picker.appendChild(option);\n",
       "    }\n",
       "\n",
       "    var status_bar = document.createElement('span');\n",
       "    status_bar.classList = 'mpl-message';\n",
       "    toolbar.appendChild(status_bar);\n",
       "    this.message = status_bar;\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.request_resize = function (x_pixels, y_pixels) {\n",
       "    // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n",
       "    // which will in turn request a refresh of the image.\n",
       "    this.send_message('resize', { width: x_pixels, height: y_pixels });\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.send_message = function (type, properties) {\n",
       "    properties['type'] = type;\n",
       "    properties['figure_id'] = this.id;\n",
       "    this.ws.send(JSON.stringify(properties));\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.send_draw_message = function () {\n",
       "    if (!this.waiting) {\n",
       "        this.waiting = true;\n",
       "        this.ws.send(JSON.stringify({ type: 'draw', figure_id: this.id }));\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_save = function (fig, _msg) {\n",
       "    var format_dropdown = fig.format_dropdown;\n",
       "    var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n",
       "    fig.ondownload(fig, format);\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_resize = function (fig, msg) {\n",
       "    var size = msg['size'];\n",
       "    if (size[0] !== fig.canvas.width || size[1] !== fig.canvas.height) {\n",
       "        fig._resize_canvas(size[0], size[1], msg['forward']);\n",
       "        fig.send_message('refresh', {});\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_rubberband = function (fig, msg) {\n",
       "    var x0 = msg['x0'] / fig.ratio;\n",
       "    var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n",
       "    var x1 = msg['x1'] / fig.ratio;\n",
       "    var y1 = (fig.canvas.height - msg['y1']) / fig.ratio;\n",
       "    x0 = Math.floor(x0) + 0.5;\n",
       "    y0 = Math.floor(y0) + 0.5;\n",
       "    x1 = Math.floor(x1) + 0.5;\n",
       "    y1 = Math.floor(y1) + 0.5;\n",
       "    var min_x = Math.min(x0, x1);\n",
       "    var min_y = Math.min(y0, y1);\n",
       "    var width = Math.abs(x1 - x0);\n",
       "    var height = Math.abs(y1 - y0);\n",
       "\n",
       "    fig.rubberband_context.clearRect(\n",
       "        0,\n",
       "        0,\n",
       "        fig.canvas.width / fig.ratio,\n",
       "        fig.canvas.height / fig.ratio\n",
       "    );\n",
       "\n",
       "    fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_figure_label = function (fig, msg) {\n",
       "    // Updates the figure title.\n",
       "    fig.header.textContent = msg['label'];\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_cursor = function (fig, msg) {\n",
       "    var cursor = msg['cursor'];\n",
       "    switch (cursor) {\n",
       "        case 0:\n",
       "            cursor = 'pointer';\n",
       "            break;\n",
       "        case 1:\n",
       "            cursor = 'default';\n",
       "            break;\n",
       "        case 2:\n",
       "            cursor = 'crosshair';\n",
       "            break;\n",
       "        case 3:\n",
       "            cursor = 'move';\n",
       "            break;\n",
       "    }\n",
       "    fig.rubberband_canvas.style.cursor = cursor;\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_message = function (fig, msg) {\n",
       "    fig.message.textContent = msg['message'];\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_draw = function (fig, _msg) {\n",
       "    // Request the server to send over a new figure.\n",
       "    fig.send_draw_message();\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_image_mode = function (fig, msg) {\n",
       "    fig.image_mode = msg['mode'];\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_history_buttons = function (fig, msg) {\n",
       "    for (var key in msg) {\n",
       "        if (!(key in fig.buttons)) {\n",
       "            continue;\n",
       "        }\n",
       "        fig.buttons[key].disabled = !msg[key];\n",
       "        fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n",
       "    if (msg['mode'] === 'PAN') {\n",
       "        fig.buttons['Pan'].classList.add('active');\n",
       "        fig.buttons['Zoom'].classList.remove('active');\n",
       "    } else if (msg['mode'] === 'ZOOM') {\n",
       "        fig.buttons['Pan'].classList.remove('active');\n",
       "        fig.buttons['Zoom'].classList.add('active');\n",
       "    } else {\n",
       "        fig.buttons['Pan'].classList.remove('active');\n",
       "        fig.buttons['Zoom'].classList.remove('active');\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function () {\n",
       "    // Called whenever the canvas gets updated.\n",
       "    this.send_message('ack', {});\n",
       "};\n",
       "\n",
       "// A function to construct a web socket function for onmessage handling.\n",
       "// Called in the figure constructor.\n",
       "mpl.figure.prototype._make_on_message_function = function (fig) {\n",
       "    return function socket_on_message(evt) {\n",
       "        if (evt.data instanceof Blob) {\n",
       "            /* FIXME: We get \"Resource interpreted as Image but\n",
       "             * transferred with MIME type text/plain:\" errors on\n",
       "             * Chrome.  But how to set the MIME type?  It doesn't seem\n",
       "             * to be part of the websocket stream */\n",
       "            evt.data.type = 'image/png';\n",
       "\n",
       "            /* Free the memory for the previous frames */\n",
       "            if (fig.imageObj.src) {\n",
       "                (window.URL || window.webkitURL).revokeObjectURL(\n",
       "                    fig.imageObj.src\n",
       "                );\n",
       "            }\n",
       "\n",
       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
       "                evt.data\n",
       "            );\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        } else if (\n",
       "            typeof evt.data === 'string' &&\n",
       "            evt.data.slice(0, 21) === 'data:image/png;base64'\n",
       "        ) {\n",
       "            fig.imageObj.src = evt.data;\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        var msg = JSON.parse(evt.data);\n",
       "        var msg_type = msg['type'];\n",
       "\n",
       "        // Call the  \"handle_{type}\" callback, which takes\n",
       "        // the figure and JSON message as its only arguments.\n",
       "        try {\n",
       "            var callback = fig['handle_' + msg_type];\n",
       "        } catch (e) {\n",
       "            console.log(\n",
       "                \"No handler for the '\" + msg_type + \"' message type: \",\n",
       "                msg\n",
       "            );\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        if (callback) {\n",
       "            try {\n",
       "                // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n",
       "                callback(fig, msg);\n",
       "            } catch (e) {\n",
       "                console.log(\n",
       "                    \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n",
       "                    e,\n",
       "                    e.stack,\n",
       "                    msg\n",
       "                );\n",
       "            }\n",
       "        }\n",
       "    };\n",
       "};\n",
       "\n",
       "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
       "mpl.findpos = function (e) {\n",
       "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
       "    var targ;\n",
       "    if (!e) {\n",
       "        e = window.event;\n",
       "    }\n",
       "    if (e.target) {\n",
       "        targ = e.target;\n",
       "    } else if (e.srcElement) {\n",
       "        targ = e.srcElement;\n",
       "    }\n",
       "    if (targ.nodeType === 3) {\n",
       "        // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "    }\n",
       "\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    var boundingRect = targ.getBoundingClientRect();\n",
       "    var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n",
       "    var y = e.pageY - (boundingRect.top + document.body.scrollTop);\n",
       "\n",
       "    return { x: x, y: y };\n",
       "};\n",
       "\n",
       "/*\n",
       " * return a copy of an object with only non-object keys\n",
       " * we need this to avoid circular references\n",
       " * http://stackoverflow.com/a/24161582/3208463\n",
       " */\n",
       "function simpleKeys(original) {\n",
       "    return Object.keys(original).reduce(function (obj, key) {\n",
       "        if (typeof original[key] !== 'object') {\n",
       "            obj[key] = original[key];\n",
       "        }\n",
       "        return obj;\n",
       "    }, {});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.mouse_event = function (event, name) {\n",
       "    var canvas_pos = mpl.findpos(event);\n",
       "\n",
       "    if (name === 'button_press') {\n",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * this.ratio;\n",
       "    var y = canvas_pos.y * this.ratio;\n",
       "\n",
       "    this.send_message(name, {\n",
       "        x: x,\n",
       "        y: y,\n",
       "        button: event.button,\n",
       "        step: event.step,\n",
       "        guiEvent: simpleKeys(event),\n",
       "    });\n",
       "\n",
       "    /* This prevents the web browser from automatically changing to\n",
       "     * the text insertion cursor when the button is pressed.  We want\n",
       "     * to control all of the cursor setting manually through the\n",
       "     * 'cursor' event from matplotlib */\n",
       "    event.preventDefault();\n",
       "    return false;\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function (_event, _name) {\n",
       "    // Handle any extra behaviour associated with a key event\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.key_event = function (event, name) {\n",
       "    // Prevent repeat events\n",
       "    if (name === 'key_press') {\n",
       "        if (event.which === this._key) {\n",
       "            return;\n",
       "        } else {\n",
       "            this._key = event.which;\n",
       "        }\n",
       "    }\n",
       "    if (name === 'key_release') {\n",
       "        this._key = null;\n",
       "    }\n",
       "\n",
       "    var value = '';\n",
       "    if (event.ctrlKey && event.which !== 17) {\n",
       "        value += 'ctrl+';\n",
       "    }\n",
       "    if (event.altKey && event.which !== 18) {\n",
       "        value += 'alt+';\n",
       "    }\n",
       "    if (event.shiftKey && event.which !== 16) {\n",
       "        value += 'shift+';\n",
       "    }\n",
       "\n",
       "    value += 'k';\n",
       "    value += event.which.toString();\n",
       "\n",
       "    this._key_event_extra(event, name);\n",
       "\n",
       "    this.send_message(name, { key: value, guiEvent: simpleKeys(event) });\n",
       "    return false;\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onclick = function (name) {\n",
       "    if (name === 'download') {\n",
       "        this.handle_save(this, null);\n",
       "    } else {\n",
       "        this.send_message('toolbar_button', { name: name });\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onmouseover = function (tooltip) {\n",
       "    this.message.textContent = tooltip;\n",
       "};\n",
       "\n",
       "///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n",
       "// prettier-ignore\n",
       "var _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\n",
       "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
       "\n",
       "mpl.default_extension = \"png\";/* global mpl */\n",
       "\n",
       "var comm_websocket_adapter = function (comm) {\n",
       "    // Create a \"websocket\"-like object which calls the given IPython comm\n",
       "    // object with the appropriate methods. Currently this is a non binary\n",
       "    // socket, so there is still some room for performance tuning.\n",
       "    var ws = {};\n",
       "\n",
       "    ws.close = function () {\n",
       "        comm.close();\n",
       "    };\n",
       "    ws.send = function (m) {\n",
       "        //console.log('sending', m);\n",
       "        comm.send(m);\n",
       "    };\n",
       "    // Register the callback with on_msg.\n",
       "    comm.on_msg(function (msg) {\n",
       "        //console.log('receiving', msg['content']['data'], msg);\n",
       "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
       "        ws.onmessage(msg['content']['data']);\n",
       "    });\n",
       "    return ws;\n",
       "};\n",
       "\n",
       "mpl.mpl_figure_comm = function (comm, msg) {\n",
       "    // This is the function which gets called when the mpl process\n",
       "    // starts-up an IPython Comm through the \"matplotlib\" channel.\n",
       "\n",
       "    var id = msg.content.data.id;\n",
       "    // Get hold of the div created by the display call when the Comm\n",
       "    // socket was opened in Python.\n",
       "    var element = document.getElementById(id);\n",
       "    var ws_proxy = comm_websocket_adapter(comm);\n",
       "\n",
       "    function ondownload(figure, _format) {\n",
       "        window.open(figure.canvas.toDataURL());\n",
       "    }\n",
       "\n",
       "    var fig = new mpl.figure(id, ws_proxy, ondownload, element);\n",
       "\n",
       "    // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n",
       "    // web socket which is closed, not our websocket->open comm proxy.\n",
       "    ws_proxy.onopen();\n",
       "\n",
       "    fig.parent_element = element;\n",
       "    fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n",
       "    if (!fig.cell_info) {\n",
       "        console.error('Failed to find cell for figure', id, fig);\n",
       "        return;\n",
       "    }\n",
       "    fig.cell_info[0].output_area.element.on(\n",
       "        'cleared',\n",
       "        { fig: fig },\n",
       "        fig._remove_fig_handler\n",
       "    );\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_close = function (fig, msg) {\n",
       "    var width = fig.canvas.width / fig.ratio;\n",
       "    fig.cell_info[0].output_area.element.off(\n",
       "        'cleared',\n",
       "        fig._remove_fig_handler\n",
       "    );\n",
       "    fig.resizeObserverInstance.unobserve(fig.canvas_div);\n",
       "\n",
       "    // Update the output cell to use the data from the current canvas.\n",
       "    fig.push_to_output();\n",
       "    var dataURL = fig.canvas.toDataURL();\n",
       "    // Re-enable the keyboard manager in IPython - without this line, in FF,\n",
       "    // the notebook keyboard shortcuts fail.\n",
       "    IPython.keyboard_manager.enable();\n",
       "    fig.parent_element.innerHTML =\n",
       "        '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
       "    fig.close_ws(fig, msg);\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.close_ws = function (fig, msg) {\n",
       "    fig.send_message('closing', msg);\n",
       "    // fig.ws.close()\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.push_to_output = function (_remove_interactive) {\n",
       "    // Turn the data on the canvas into data in the output cell.\n",
       "    var width = this.canvas.width / this.ratio;\n",
       "    var dataURL = this.canvas.toDataURL();\n",
       "    this.cell_info[1]['text/html'] =\n",
       "        '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function () {\n",
       "    // Tell IPython that the notebook contents must change.\n",
       "    IPython.notebook.set_dirty(true);\n",
       "    this.send_message('ack', {});\n",
       "    var fig = this;\n",
       "    // Wait a second, then push the new image to the DOM so\n",
       "    // that it is saved nicely (might be nice to debounce this).\n",
       "    setTimeout(function () {\n",
       "        fig.push_to_output();\n",
       "    }, 1000);\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function () {\n",
       "    var fig = this;\n",
       "\n",
       "    var toolbar = document.createElement('div');\n",
       "    toolbar.classList = 'btn-toolbar';\n",
       "    this.root.appendChild(toolbar);\n",
       "\n",
       "    function on_click_closure(name) {\n",
       "        return function (_event) {\n",
       "            return fig.toolbar_button_onclick(name);\n",
       "        };\n",
       "    }\n",
       "\n",
       "    function on_mouseover_closure(tooltip) {\n",
       "        return function (event) {\n",
       "            if (!event.currentTarget.disabled) {\n",
       "                return fig.toolbar_button_onmouseover(tooltip);\n",
       "            }\n",
       "        };\n",
       "    }\n",
       "\n",
       "    fig.buttons = {};\n",
       "    var buttonGroup = document.createElement('div');\n",
       "    buttonGroup.classList = 'btn-group';\n",
       "    var button;\n",
       "    for (var toolbar_ind in mpl.toolbar_items) {\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) {\n",
       "            /* Instead of a spacer, we start a new button group. */\n",
       "            if (buttonGroup.hasChildNodes()) {\n",
       "                toolbar.appendChild(buttonGroup);\n",
       "            }\n",
       "            buttonGroup = document.createElement('div');\n",
       "            buttonGroup.classList = 'btn-group';\n",
       "            continue;\n",
       "        }\n",
       "\n",
       "        button = fig.buttons[name] = document.createElement('button');\n",
       "        button.classList = 'btn btn-default';\n",
       "        button.href = '#';\n",
       "        button.title = name;\n",
       "        button.innerHTML = '<i class=\"fa ' + image + ' fa-lg\"></i>';\n",
       "        button.addEventListener('click', on_click_closure(method_name));\n",
       "        button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n",
       "        buttonGroup.appendChild(button);\n",
       "    }\n",
       "\n",
       "    if (buttonGroup.hasChildNodes()) {\n",
       "        toolbar.appendChild(buttonGroup);\n",
       "    }\n",
       "\n",
       "    // Add the status bar.\n",
       "    var status_bar = document.createElement('span');\n",
       "    status_bar.classList = 'mpl-message pull-right';\n",
       "    toolbar.appendChild(status_bar);\n",
       "    this.message = status_bar;\n",
       "\n",
       "    // Add the close button to the window.\n",
       "    var buttongrp = document.createElement('div');\n",
       "    buttongrp.classList = 'btn-group inline pull-right';\n",
       "    button = document.createElement('button');\n",
       "    button.classList = 'btn btn-mini btn-primary';\n",
       "    button.href = '#';\n",
       "    button.title = 'Stop Interaction';\n",
       "    button.innerHTML = '<i class=\"fa fa-power-off icon-remove icon-large\"></i>';\n",
       "    button.addEventListener('click', function (_evt) {\n",
       "        fig.handle_close(fig, {});\n",
       "    });\n",
       "    button.addEventListener(\n",
       "        'mouseover',\n",
       "        on_mouseover_closure('Stop Interaction')\n",
       "    );\n",
       "    buttongrp.appendChild(button);\n",
       "    var titlebar = this.root.querySelector('.ui-dialog-titlebar');\n",
       "    titlebar.insertBefore(buttongrp, titlebar.firstChild);\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._remove_fig_handler = function (event) {\n",
       "    var fig = event.data.fig;\n",
       "    if (event.target !== this) {\n",
       "        // Ignore bubbled events from children.\n",
       "        return;\n",
       "    }\n",
       "    fig.close_ws(fig, {});\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function (el) {\n",
       "    el.style.boxSizing = 'content-box'; // override notebook setting of border-box.\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function (el) {\n",
       "    // this is important to make the div 'focusable\n",
       "    el.setAttribute('tabindex', 0);\n",
       "    // reach out to IPython and tell the keyboard manager to turn it's self\n",
       "    // off when our div gets focus\n",
       "\n",
       "    // location in version 3\n",
       "    if (IPython.notebook.keyboard_manager) {\n",
       "        IPython.notebook.keyboard_manager.register_events(el);\n",
       "    } else {\n",
       "        // location in version 2\n",
       "        IPython.keyboard_manager.register_events(el);\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function (event, _name) {\n",
       "    var manager = IPython.notebook.keyboard_manager;\n",
       "    if (!manager) {\n",
       "        manager = IPython.keyboard_manager;\n",
       "    }\n",
       "\n",
       "    // Check for shift+enter\n",
       "    if (event.shiftKey && event.which === 13) {\n",
       "        this.canvas_div.blur();\n",
       "        // select the cell after this one\n",
       "        var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n",
       "        IPython.notebook.select(index + 1);\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_save = function (fig, _msg) {\n",
       "    fig.ondownload(fig, null);\n",
       "};\n",
       "\n",
       "mpl.find_output_cell = function (html_output) {\n",
       "    // Return the cell and output element which can be found *uniquely* in the notebook.\n",
       "    // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n",
       "    // IPython event is triggered only after the cells have been serialised, which for\n",
       "    // our purposes (turning an active figure into a static one), is too late.\n",
       "    var cells = IPython.notebook.get_cells();\n",
       "    var ncells = cells.length;\n",
       "    for (var i = 0; i < ncells; i++) {\n",
       "        var cell = cells[i];\n",
       "        if (cell.cell_type === 'code') {\n",
       "            for (var j = 0; j < cell.output_area.outputs.length; j++) {\n",
       "                var data = cell.output_area.outputs[j];\n",
       "                if (data.data) {\n",
       "                    // IPython >= 3 moved mimebundle to data attribute of output\n",
       "                    data = data.data;\n",
       "                }\n",
       "                if (data['text/html'] === html_output) {\n",
       "                    return [cell, data, j];\n",
       "                }\n",
       "            }\n",
       "        }\n",
       "    }\n",
       "};\n",
       "\n",
       "// Register the function which deals with the matplotlib target/channel.\n",
       "// The kernel may be null if the page has been refreshed.\n",
       "if (IPython.notebook.kernel !== null) {\n",
       "    IPython.notebook.kernel.comm_manager.register_target(\n",
       "        'matplotlib',\n",
       "        mpl.mpl_figure_comm\n",
       "    );\n",
       "}\n"
      ],
      "text/plain": [
       "<IPython.core.display.Javascript object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAACgKADAAQAAAABAAAB4AAAAAAfNMscAABAAElEQVR4AeydB3wUxRfHfyQhJISE3lvovfdepAkiUkRFEVRQ/ihYABUUREFRmiIoTZGiIiKKSlGkiPTee++9B0jPf94cey13l4S0S+73Pp/L7s7Mzs58d3P77s28NxlilIBCAiRAAiRAAiRAAiTgMQS8PKan7CgJkAAJkAAJkAAJkIAmQAWQDwIJkAAJkAAJkAAJeBgBKoAedsPZXRIgARIgARIgARKgAshngARIgARIgARIgAQ8jAAVQA+74ewuCZAACZAACZAACVAB5DNAAiRAAiRAAiRAAh5GgAqgh91wdpcESIAESIAESIAEqADyGSABEiABEiABEiABDyNABdDDbji7SwIkQAIkQAIkQAJUAPkMkAAJkAAJkAAJkICHEaAC6GE3nN0lARIgARIgARIgASqAfAZIgARIgARIgARIwMMIUAH0sBvO7pIACZAACZAACZAAFUA+AyRAAiRAAiRAAiTgYQSoAHrYDWd3SYAESIAESIAESIAKIJ8BEiABEiABEiABEvAwAlQAPeyGs7skQAIkQAIkQAIkQAWQzwAJkAAJkAAJkAAJeBgBKoAedsPZXRIgARIgARIgARKgAshngARIgARIgARIgAQ8jAAVQA+74ewuCZAACZAACZAACVAB5DNAAiRAAiRAAiRAAh5GgAqgh91wdpcESIAESIAESIAEqADyGSABEiABEiABEiABDyNABdDDbji7SwIkQAIkQAIkQAJUAPkMkAAJkAAJkAAJkICHEaAC6GE3nN0lARIgARIgARIgASqAfAZIgARIgARIgARIwMMIUAH0sBvO7pIACZAACZAACZAAFUA+AyRAAiRAAiRAAiTgYQSoAHrYDWd3SYAESIAESIAESIAKIJ8BEiABEiABEiABEvAwAlQAPeyGs7skQAIkQAIkQAIkQAWQzwAJkAAJkAAJkAAJeBgBKoAedsPZXRIgARIgARIgARKgAshngARIgARIgARIgAQ8jAAVQA+74ewuCZAACZAACZAACVAB5DNAAiRAAiRA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\" width=\"640\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "mmax = min((Nmax, 1024))\n",
    "Nmed = np.empty((mmax))\n",
    "Nmean = np.empty((mmax))\n",
    "mm = np.arange(1,mmax+1)\n",
    "for i in range(mmax):\n",
    "    ss = np.where(m_arr == mm[i])\n",
    "    Nmed[i] = np.median(N_arr[ss])\n",
    "    Nmean[i] = np.mean(N_arr[ss])\n",
    "\n",
    "plt.figure()\n",
    "plt.plot(mm, Nmed-(2*mm-1), label=r'Monte Carlo median')\n",
    "plt.plot(mm, Nmean-(2*mm-1), label=r'Monte Carlo mean')\n",
    "plt.plot(mm, np.zeros(mm.shape),'r:', label=r'zero')\n",
    "plt.xlabel(r'$m$')\n",
    "plt.ylabel(r'$N-(2m-1)$ at fixed $m$')\n",
    "plt.legend()\n",
    "plt.show();"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/javascript": [
       "/* Put everything inside the global mpl namespace */\n",
       "/* global mpl */\n",
       "window.mpl = {};\n",
       "\n",
       "mpl.get_websocket_type = function () {\n",
       "    if (typeof WebSocket !== 'undefined') {\n",
       "        return WebSocket;\n",
       "    } else if (typeof MozWebSocket !== 'undefined') {\n",
       "        return MozWebSocket;\n",
       "    } else {\n",
       "        alert(\n",
       "            'Your browser does not have WebSocket support. ' +\n",
       "                'Please try Chrome, Safari or Firefox ≥ 6. ' +\n",
       "                'Firefox 4 and 5 are also supported but you ' +\n",
       "                'have to enable WebSockets in about:config.'\n",
       "        );\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure = function (figure_id, websocket, ondownload, parent_element) {\n",
       "    this.id = figure_id;\n",
       "\n",
       "    this.ws = websocket;\n",
       "\n",
       "    this.supports_binary = this.ws.binaryType !== undefined;\n",
       "\n",
       "    if (!this.supports_binary) {\n",
       "        var warnings = document.getElementById('mpl-warnings');\n",
       "        if (warnings) {\n",
       "            warnings.style.display = 'block';\n",
       "            warnings.textContent =\n",
       "                'This browser does not support binary websocket messages. ' +\n",
       "                'Performance may be slow.';\n",
       "        }\n",
       "    }\n",
       "\n",
       "    this.imageObj = new Image();\n",
       "\n",
       "    this.context = undefined;\n",
       "    this.message = undefined;\n",
       "    this.canvas = undefined;\n",
       "    this.rubberband_canvas = undefined;\n",
       "    this.rubberband_context = undefined;\n",
       "    this.format_dropdown = undefined;\n",
       "\n",
       "    this.image_mode = 'full';\n",
       "\n",
       "    this.root = document.createElement('div');\n",
       "    this.root.setAttribute('style', 'display: inline-block');\n",
       "    this._root_extra_style(this.root);\n",
       "\n",
       "    parent_element.appendChild(this.root);\n",
       "\n",
       "    this._init_header(this);\n",
       "    this._init_canvas(this);\n",
       "    this._init_toolbar(this);\n",
       "\n",
       "    var fig = this;\n",
       "\n",
       "    this.waiting = false;\n",
       "\n",
       "    this.ws.onopen = function () {\n",
       "        fig.send_message('supports_binary', { value: fig.supports_binary });\n",
       "        fig.send_message('send_image_mode', {});\n",
       "        if (fig.ratio !== 1) {\n",
       "            fig.send_message('set_dpi_ratio', { dpi_ratio: fig.ratio });\n",
       "        }\n",
       "        fig.send_message('refresh', {});\n",
       "    };\n",
       "\n",
       "    this.imageObj.onload = function () {\n",
       "        if (fig.image_mode === 'full') {\n",
       "            // Full images could contain transparency (where diff images\n",
       "            // almost always do), so we need to clear the canvas so that\n",
       "            // there is no ghosting.\n",
       "            fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
       "        }\n",
       "        fig.context.drawImage(fig.imageObj, 0, 0);\n",
       "    };\n",
       "\n",
       "    this.imageObj.onunload = function () {\n",
       "        fig.ws.close();\n",
       "    };\n",
       "\n",
       "    this.ws.onmessage = this._make_on_message_function(this);\n",
       "\n",
       "    this.ondownload = ondownload;\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._init_header = function () {\n",
       "    var titlebar = document.createElement('div');\n",
       "    titlebar.classList =\n",
       "        'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n",
       "    var titletext = document.createElement('div');\n",
       "    titletext.classList = 'ui-dialog-title';\n",
       "    titletext.setAttribute(\n",
       "        'style',\n",
       "        'width: 100%; text-align: center; padding: 3px;'\n",
       "    );\n",
       "    titlebar.appendChild(titletext);\n",
       "    this.root.appendChild(titlebar);\n",
       "    this.header = titletext;\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n",
       "\n",
       "mpl.figure.prototype._init_canvas = function () {\n",
       "    var fig = this;\n",
       "\n",
       "    var canvas_div = (this.canvas_div = document.createElement('div'));\n",
       "    canvas_div.setAttribute(\n",
       "        'style',\n",
       "        'border: 1px solid #ddd;' +\n",
       "            'box-sizing: content-box;' +\n",
       "            'clear: both;' +\n",
       "            'min-height: 1px;' +\n",
       "            'min-width: 1px;' +\n",
       "            'outline: 0;' +\n",
       "            'overflow: hidden;' +\n",
       "            'position: relative;' +\n",
       "            'resize: both;'\n",
       "    );\n",
       "\n",
       "    function on_keyboard_event_closure(name) {\n",
       "        return function (event) {\n",
       "            return fig.key_event(event, name);\n",
       "        };\n",
       "    }\n",
       "\n",
       "    canvas_div.addEventListener(\n",
       "        'keydown',\n",
       "        on_keyboard_event_closure('key_press')\n",
       "    );\n",
       "    canvas_div.addEventListener(\n",
       "        'keyup',\n",
       "        on_keyboard_event_closure('key_release')\n",
       "    );\n",
       "\n",
       "    this._canvas_extra_style(canvas_div);\n",
       "    this.root.appendChild(canvas_div);\n",
       "\n",
       "    var canvas = (this.canvas = document.createElement('canvas'));\n",
       "    canvas.classList.add('mpl-canvas');\n",
       "    canvas.setAttribute('style', 'box-sizing: content-box;');\n",
       "\n",
       "    this.context = canvas.getContext('2d');\n",
       "\n",
       "    var backingStore =\n",
       "        this.context.backingStorePixelRatio ||\n",
       "        this.context.webkitBackingStorePixelRatio ||\n",
       "        this.context.mozBackingStorePixelRatio ||\n",
       "        this.context.msBackingStorePixelRatio ||\n",
       "        this.context.oBackingStorePixelRatio ||\n",
       "        this.context.backingStorePixelRatio ||\n",
       "        1;\n",
       "\n",
       "    this.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
       "    if (this.ratio !== 1) {\n",
       "        fig.send_message('set_dpi_ratio', { dpi_ratio: this.ratio });\n",
       "    }\n",
       "\n",
       "    var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n",
       "        'canvas'\n",
       "    ));\n",
       "    rubberband_canvas.setAttribute(\n",
       "        'style',\n",
       "        'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n",
       "    );\n",
       "\n",
       "    // Apply a ponyfill if ResizeObserver is not implemented by browser.\n",
       "    if (this.ResizeObserver === undefined) {\n",
       "        if (window.ResizeObserver !== undefined) {\n",
       "            this.ResizeObserver = window.ResizeObserver;\n",
       "        } else {\n",
       "            var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n",
       "            this.ResizeObserver = obs.ResizeObserver;\n",
       "        }\n",
       "    }\n",
       "\n",
       "    this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n",
       "        var nentries = entries.length;\n",
       "        for (var i = 0; i < nentries; i++) {\n",
       "            var entry = entries[i];\n",
       "            var width, height;\n",
       "            if (entry.contentBoxSize) {\n",
       "                if (entry.contentBoxSize instanceof Array) {\n",
       "                    // Chrome 84 implements new version of spec.\n",
       "                    width = entry.contentBoxSize[0].inlineSize;\n",
       "                    height = entry.contentBoxSize[0].blockSize;\n",
       "                } else {\n",
       "                    // Firefox implements old version of spec.\n",
       "                    width = entry.contentBoxSize.inlineSize;\n",
       "                    height = entry.contentBoxSize.blockSize;\n",
       "                }\n",
       "            } else {\n",
       "                // Chrome <84 implements even older version of spec.\n",
       "                width = entry.contentRect.width;\n",
       "                height = entry.contentRect.height;\n",
       "            }\n",
       "\n",
       "            // Keep the size of the canvas and rubber band canvas in sync with\n",
       "            // the canvas container.\n",
       "            if (entry.devicePixelContentBoxSize) {\n",
       "                // Chrome 84 implements new version of spec.\n",
       "                canvas.setAttribute(\n",
       "                    'width',\n",
       "                    entry.devicePixelContentBoxSize[0].inlineSize\n",
       "                );\n",
       "                canvas.setAttribute(\n",
       "                    'height',\n",
       "                    entry.devicePixelContentBoxSize[0].blockSize\n",
       "                );\n",
       "            } else {\n",
       "                canvas.setAttribute('width', width * fig.ratio);\n",
       "                canvas.setAttribute('height', height * fig.ratio);\n",
       "            }\n",
       "            canvas.setAttribute(\n",
       "                'style',\n",
       "                'width: ' + width + 'px; height: ' + height + 'px;'\n",
       "            );\n",
       "\n",
       "            rubberband_canvas.setAttribute('width', width);\n",
       "            rubberband_canvas.setAttribute('height', height);\n",
       "\n",
       "            // And update the size in Python. We ignore the initial 0/0 size\n",
       "            // that occurs as the element is placed into the DOM, which should\n",
       "            // otherwise not happen due to the minimum size styling.\n",
       "            if (width != 0 && height != 0) {\n",
       "                fig.request_resize(width, height);\n",
       "            }\n",
       "        }\n",
       "    });\n",
       "    this.resizeObserverInstance.observe(canvas_div);\n",
       "\n",
       "    function on_mouse_event_closure(name) {\n",
       "        return function (event) {\n",
       "            return fig.mouse_event(event, name);\n",
       "        };\n",
       "    }\n",
       "\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mousedown',\n",
       "        on_mouse_event_closure('button_press')\n",
       "    );\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mouseup',\n",
       "        on_mouse_event_closure('button_release')\n",
       "    );\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mousemove',\n",
       "        on_mouse_event_closure('motion_notify')\n",
       "    );\n",
       "\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mouseenter',\n",
       "        on_mouse_event_closure('figure_enter')\n",
       "    );\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mouseleave',\n",
       "        on_mouse_event_closure('figure_leave')\n",
       "    );\n",
       "\n",
       "    canvas_div.addEventListener('wheel', function (event) {\n",
       "        if (event.deltaY < 0) {\n",
       "            event.step = 1;\n",
       "        } else {\n",
       "            event.step = -1;\n",
       "        }\n",
       "        on_mouse_event_closure('scroll')(event);\n",
       "    });\n",
       "\n",
       "    canvas_div.appendChild(canvas);\n",
       "    canvas_div.appendChild(rubberband_canvas);\n",
       "\n",
       "    this.rubberband_context = rubberband_canvas.getContext('2d');\n",
       "    this.rubberband_context.strokeStyle = '#000000';\n",
       "\n",
       "    this._resize_canvas = function (width, height, forward) {\n",
       "        if (forward) {\n",
       "            canvas_div.style.width = width + 'px';\n",
       "            canvas_div.style.height = height + 'px';\n",
       "        }\n",
       "    };\n",
       "\n",
       "    // Disable right mouse context menu.\n",
       "    this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n",
       "        event.preventDefault();\n",
       "        return false;\n",
       "    });\n",
       "\n",
       "    function set_focus() {\n",
       "        canvas.focus();\n",
       "        canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    window.setTimeout(set_focus, 100);\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function () {\n",
       "    var fig = this;\n",
       "\n",
       "    var toolbar = document.createElement('div');\n",
       "    toolbar.classList = 'mpl-toolbar';\n",
       "    this.root.appendChild(toolbar);\n",
       "\n",
       "    function on_click_closure(name) {\n",
       "        return function (_event) {\n",
       "            return fig.toolbar_button_onclick(name);\n",
       "        };\n",
       "    }\n",
       "\n",
       "    function on_mouseover_closure(tooltip) {\n",
       "        return function (event) {\n",
       "            if (!event.currentTarget.disabled) {\n",
       "                return fig.toolbar_button_onmouseover(tooltip);\n",
       "            }\n",
       "        };\n",
       "    }\n",
       "\n",
       "    fig.buttons = {};\n",
       "    var buttonGroup = document.createElement('div');\n",
       "    buttonGroup.classList = 'mpl-button-group';\n",
       "    for (var toolbar_ind in mpl.toolbar_items) {\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) {\n",
       "            /* Instead of a spacer, we start a new button group. */\n",
       "            if (buttonGroup.hasChildNodes()) {\n",
       "                toolbar.appendChild(buttonGroup);\n",
       "            }\n",
       "            buttonGroup = document.createElement('div');\n",
       "            buttonGroup.classList = 'mpl-button-group';\n",
       "            continue;\n",
       "        }\n",
       "\n",
       "        var button = (fig.buttons[name] = document.createElement('button'));\n",
       "        button.classList = 'mpl-widget';\n",
       "        button.setAttribute('role', 'button');\n",
       "        button.setAttribute('aria-disabled', 'false');\n",
       "        button.addEventListener('click', on_click_closure(method_name));\n",
       "        button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n",
       "\n",
       "        var icon_img = document.createElement('img');\n",
       "        icon_img.src = '_images/' + image + '.png';\n",
       "        icon_img.srcset = '_images/' + image + '_large.png 2x';\n",
       "        icon_img.alt = tooltip;\n",
       "        button.appendChild(icon_img);\n",
       "\n",
       "        buttonGroup.appendChild(button);\n",
       "    }\n",
       "\n",
       "    if (buttonGroup.hasChildNodes()) {\n",
       "        toolbar.appendChild(buttonGroup);\n",
       "    }\n",
       "\n",
       "    var fmt_picker = document.createElement('select');\n",
       "    fmt_picker.classList = 'mpl-widget';\n",
       "    toolbar.appendChild(fmt_picker);\n",
       "    this.format_dropdown = fmt_picker;\n",
       "\n",
       "    for (var ind in mpl.extensions) {\n",
       "        var fmt = mpl.extensions[ind];\n",
       "        var option = document.createElement('option');\n",
       "        option.selected = fmt === mpl.default_extension;\n",
       "        option.innerHTML = fmt;\n",
       "        fmt_picker.appendChild(option);\n",
       "    }\n",
       "\n",
       "    var status_bar = document.createElement('span');\n",
       "    status_bar.classList = 'mpl-message';\n",
       "    toolbar.appendChild(status_bar);\n",
       "    this.message = status_bar;\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.request_resize = function (x_pixels, y_pixels) {\n",
       "    // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n",
       "    // which will in turn request a refresh of the image.\n",
       "    this.send_message('resize', { width: x_pixels, height: y_pixels });\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.send_message = function (type, properties) {\n",
       "    properties['type'] = type;\n",
       "    properties['figure_id'] = this.id;\n",
       "    this.ws.send(JSON.stringify(properties));\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.send_draw_message = function () {\n",
       "    if (!this.waiting) {\n",
       "        this.waiting = true;\n",
       "        this.ws.send(JSON.stringify({ type: 'draw', figure_id: this.id }));\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_save = function (fig, _msg) {\n",
       "    var format_dropdown = fig.format_dropdown;\n",
       "    var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n",
       "    fig.ondownload(fig, format);\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_resize = function (fig, msg) {\n",
       "    var size = msg['size'];\n",
       "    if (size[0] !== fig.canvas.width || size[1] !== fig.canvas.height) {\n",
       "        fig._resize_canvas(size[0], size[1], msg['forward']);\n",
       "        fig.send_message('refresh', {});\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_rubberband = function (fig, msg) {\n",
       "    var x0 = msg['x0'] / fig.ratio;\n",
       "    var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n",
       "    var x1 = msg['x1'] / fig.ratio;\n",
       "    var y1 = (fig.canvas.height - msg['y1']) / fig.ratio;\n",
       "    x0 = Math.floor(x0) + 0.5;\n",
       "    y0 = Math.floor(y0) + 0.5;\n",
       "    x1 = Math.floor(x1) + 0.5;\n",
       "    y1 = Math.floor(y1) + 0.5;\n",
       "    var min_x = Math.min(x0, x1);\n",
       "    var min_y = Math.min(y0, y1);\n",
       "    var width = Math.abs(x1 - x0);\n",
       "    var height = Math.abs(y1 - y0);\n",
       "\n",
       "    fig.rubberband_context.clearRect(\n",
       "        0,\n",
       "        0,\n",
       "        fig.canvas.width / fig.ratio,\n",
       "        fig.canvas.height / fig.ratio\n",
       "    );\n",
       "\n",
       "    fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_figure_label = function (fig, msg) {\n",
       "    // Updates the figure title.\n",
       "    fig.header.textContent = msg['label'];\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_cursor = function (fig, msg) {\n",
       "    var cursor = msg['cursor'];\n",
       "    switch (cursor) {\n",
       "        case 0:\n",
       "            cursor = 'pointer';\n",
       "            break;\n",
       "        case 1:\n",
       "            cursor = 'default';\n",
       "            break;\n",
       "        case 2:\n",
       "            cursor = 'crosshair';\n",
       "            break;\n",
       "        case 3:\n",
       "            cursor = 'move';\n",
       "            break;\n",
       "    }\n",
       "    fig.rubberband_canvas.style.cursor = cursor;\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_message = function (fig, msg) {\n",
       "    fig.message.textContent = msg['message'];\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_draw = function (fig, _msg) {\n",
       "    // Request the server to send over a new figure.\n",
       "    fig.send_draw_message();\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_image_mode = function (fig, msg) {\n",
       "    fig.image_mode = msg['mode'];\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_history_buttons = function (fig, msg) {\n",
       "    for (var key in msg) {\n",
       "        if (!(key in fig.buttons)) {\n",
       "            continue;\n",
       "        }\n",
       "        fig.buttons[key].disabled = !msg[key];\n",
       "        fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n",
       "    if (msg['mode'] === 'PAN') {\n",
       "        fig.buttons['Pan'].classList.add('active');\n",
       "        fig.buttons['Zoom'].classList.remove('active');\n",
       "    } else if (msg['mode'] === 'ZOOM') {\n",
       "        fig.buttons['Pan'].classList.remove('active');\n",
       "        fig.buttons['Zoom'].classList.add('active');\n",
       "    } else {\n",
       "        fig.buttons['Pan'].classList.remove('active');\n",
       "        fig.buttons['Zoom'].classList.remove('active');\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function () {\n",
       "    // Called whenever the canvas gets updated.\n",
       "    this.send_message('ack', {});\n",
       "};\n",
       "\n",
       "// A function to construct a web socket function for onmessage handling.\n",
       "// Called in the figure constructor.\n",
       "mpl.figure.prototype._make_on_message_function = function (fig) {\n",
       "    return function socket_on_message(evt) {\n",
       "        if (evt.data instanceof Blob) {\n",
       "            /* FIXME: We get \"Resource interpreted as Image but\n",
       "             * transferred with MIME type text/plain:\" errors on\n",
       "             * Chrome.  But how to set the MIME type?  It doesn't seem\n",
       "             * to be part of the websocket stream */\n",
       "            evt.data.type = 'image/png';\n",
       "\n",
       "            /* Free the memory for the previous frames */\n",
       "            if (fig.imageObj.src) {\n",
       "                (window.URL || window.webkitURL).revokeObjectURL(\n",
       "                    fig.imageObj.src\n",
       "                );\n",
       "            }\n",
       "\n",
       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
       "                evt.data\n",
       "            );\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        } else if (\n",
       "            typeof evt.data === 'string' &&\n",
       "            evt.data.slice(0, 21) === 'data:image/png;base64'\n",
       "        ) {\n",
       "            fig.imageObj.src = evt.data;\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        var msg = JSON.parse(evt.data);\n",
       "        var msg_type = msg['type'];\n",
       "\n",
       "        // Call the  \"handle_{type}\" callback, which takes\n",
       "        // the figure and JSON message as its only arguments.\n",
       "        try {\n",
       "            var callback = fig['handle_' + msg_type];\n",
       "        } catch (e) {\n",
       "            console.log(\n",
       "                \"No handler for the '\" + msg_type + \"' message type: \",\n",
       "                msg\n",
       "            );\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        if (callback) {\n",
       "            try {\n",
       "                // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n",
       "                callback(fig, msg);\n",
       "            } catch (e) {\n",
       "                console.log(\n",
       "                    \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n",
       "                    e,\n",
       "                    e.stack,\n",
       "                    msg\n",
       "                );\n",
       "            }\n",
       "        }\n",
       "    };\n",
       "};\n",
       "\n",
       "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
       "mpl.findpos = function (e) {\n",
       "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
       "    var targ;\n",
       "    if (!e) {\n",
       "        e = window.event;\n",
       "    }\n",
       "    if (e.target) {\n",
       "        targ = e.target;\n",
       "    } else if (e.srcElement) {\n",
       "        targ = e.srcElement;\n",
       "    }\n",
       "    if (targ.nodeType === 3) {\n",
       "        // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "    }\n",
       "\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    var boundingRect = targ.getBoundingClientRect();\n",
       "    var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n",
       "    var y = e.pageY - (boundingRect.top + document.body.scrollTop);\n",
       "\n",
       "    return { x: x, y: y };\n",
       "};\n",
       "\n",
       "/*\n",
       " * return a copy of an object with only non-object keys\n",
       " * we need this to avoid circular references\n",
       " * http://stackoverflow.com/a/24161582/3208463\n",
       " */\n",
       "function simpleKeys(original) {\n",
       "    return Object.keys(original).reduce(function (obj, key) {\n",
       "        if (typeof original[key] !== 'object') {\n",
       "            obj[key] = original[key];\n",
       "        }\n",
       "        return obj;\n",
       "    }, {});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.mouse_event = function (event, name) {\n",
       "    var canvas_pos = mpl.findpos(event);\n",
       "\n",
       "    if (name === 'button_press') {\n",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * this.ratio;\n",
       "    var y = canvas_pos.y * this.ratio;\n",
       "\n",
       "    this.send_message(name, {\n",
       "        x: x,\n",
       "        y: y,\n",
       "        button: event.button,\n",
       "        step: event.step,\n",
       "        guiEvent: simpleKeys(event),\n",
       "    });\n",
       "\n",
       "    /* This prevents the web browser from automatically changing to\n",
       "     * the text insertion cursor when the button is pressed.  We want\n",
       "     * to control all of the cursor setting manually through the\n",
       "     * 'cursor' event from matplotlib */\n",
       "    event.preventDefault();\n",
       "    return false;\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function (_event, _name) {\n",
       "    // Handle any extra behaviour associated with a key event\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.key_event = function (event, name) {\n",
       "    // Prevent repeat events\n",
       "    if (name === 'key_press') {\n",
       "        if (event.which === this._key) {\n",
       "            return;\n",
       "        } else {\n",
       "            this._key = event.which;\n",
       "        }\n",
       "    }\n",
       "    if (name === 'key_release') {\n",
       "        this._key = null;\n",
       "    }\n",
       "\n",
       "    var value = '';\n",
       "    if (event.ctrlKey && event.which !== 17) {\n",
       "        value += 'ctrl+';\n",
       "    }\n",
       "    if (event.altKey && event.which !== 18) {\n",
       "        value += 'alt+';\n",
       "    }\n",
       "    if (event.shiftKey && event.which !== 16) {\n",
       "        value += 'shift+';\n",
       "    }\n",
       "\n",
       "    value += 'k';\n",
       "    value += event.which.toString();\n",
       "\n",
       "    this._key_event_extra(event, name);\n",
       "\n",
       "    this.send_message(name, { key: value, guiEvent: simpleKeys(event) });\n",
       "    return false;\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onclick = function (name) {\n",
       "    if (name === 'download') {\n",
       "        this.handle_save(this, null);\n",
       "    } else {\n",
       "        this.send_message('toolbar_button', { name: name });\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onmouseover = function (tooltip) {\n",
       "    this.message.textContent = tooltip;\n",
       "};\n",
       "\n",
       "///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n",
       "// prettier-ignore\n",
       "var _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\n",
       "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
       "\n",
       "mpl.default_extension = \"png\";/* global mpl */\n",
       "\n",
       "var comm_websocket_adapter = function (comm) {\n",
       "    // Create a \"websocket\"-like object which calls the given IPython comm\n",
       "    // object with the appropriate methods. Currently this is a non binary\n",
       "    // socket, so there is still some room for performance tuning.\n",
       "    var ws = {};\n",
       "\n",
       "    ws.close = function () {\n",
       "        comm.close();\n",
       "    };\n",
       "    ws.send = function (m) {\n",
       "        //console.log('sending', m);\n",
       "        comm.send(m);\n",
       "    };\n",
       "    // Register the callback with on_msg.\n",
       "    comm.on_msg(function (msg) {\n",
       "        //console.log('receiving', msg['content']['data'], msg);\n",
       "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
       "        ws.onmessage(msg['content']['data']);\n",
       "    });\n",
       "    return ws;\n",
       "};\n",
       "\n",
       "mpl.mpl_figure_comm = function (comm, msg) {\n",
       "    // This is the function which gets called when the mpl process\n",
       "    // starts-up an IPython Comm through the \"matplotlib\" channel.\n",
       "\n",
       "    var id = msg.content.data.id;\n",
       "    // Get hold of the div created by the display call when the Comm\n",
       "    // socket was opened in Python.\n",
       "    var element = document.getElementById(id);\n",
       "    var ws_proxy = comm_websocket_adapter(comm);\n",
       "\n",
       "    function ondownload(figure, _format) {\n",
       "        window.open(figure.canvas.toDataURL());\n",
       "    }\n",
       "\n",
       "    var fig = new mpl.figure(id, ws_proxy, ondownload, element);\n",
       "\n",
       "    // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n",
       "    // web socket which is closed, not our websocket->open comm proxy.\n",
       "    ws_proxy.onopen();\n",
       "\n",
       "    fig.parent_element = element;\n",
       "    fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n",
       "    if (!fig.cell_info) {\n",
       "        console.error('Failed to find cell for figure', id, fig);\n",
       "        return;\n",
       "    }\n",
       "    fig.cell_info[0].output_area.element.on(\n",
       "        'cleared',\n",
       "        { fig: fig },\n",
       "        fig._remove_fig_handler\n",
       "    );\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_close = function (fig, msg) {\n",
       "    var width = fig.canvas.width / fig.ratio;\n",
       "    fig.cell_info[0].output_area.element.off(\n",
       "        'cleared',\n",
       "        fig._remove_fig_handler\n",
       "    );\n",
       "    fig.resizeObserverInstance.unobserve(fig.canvas_div);\n",
       "\n",
       "    // Update the output cell to use the data from the current canvas.\n",
       "    fig.push_to_output();\n",
       "    var dataURL = fig.canvas.toDataURL();\n",
       "    // Re-enable the keyboard manager in IPython - without this line, in FF,\n",
       "    // the notebook keyboard shortcuts fail.\n",
       "    IPython.keyboard_manager.enable();\n",
       "    fig.parent_element.innerHTML =\n",
       "        '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
       "    fig.close_ws(fig, msg);\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.close_ws = function (fig, msg) {\n",
       "    fig.send_message('closing', msg);\n",
       "    // fig.ws.close()\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.push_to_output = function (_remove_interactive) {\n",
       "    // Turn the data on the canvas into data in the output cell.\n",
       "    var width = this.canvas.width / this.ratio;\n",
       "    var dataURL = this.canvas.toDataURL();\n",
       "    this.cell_info[1]['text/html'] =\n",
       "        '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function () {\n",
       "    // Tell IPython that the notebook contents must change.\n",
       "    IPython.notebook.set_dirty(true);\n",
       "    this.send_message('ack', {});\n",
       "    var fig = this;\n",
       "    // Wait a second, then push the new image to the DOM so\n",
       "    // that it is saved nicely (might be nice to debounce this).\n",
       "    setTimeout(function () {\n",
       "        fig.push_to_output();\n",
       "    }, 1000);\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function () {\n",
       "    var fig = this;\n",
       "\n",
       "    var toolbar = document.createElement('div');\n",
       "    toolbar.classList = 'btn-toolbar';\n",
       "    this.root.appendChild(toolbar);\n",
       "\n",
       "    function on_click_closure(name) {\n",
       "        return function (_event) {\n",
       "            return fig.toolbar_button_onclick(name);\n",
       "        };\n",
       "    }\n",
       "\n",
       "    function on_mouseover_closure(tooltip) {\n",
       "        return function (event) {\n",
       "            if (!event.currentTarget.disabled) {\n",
       "                return fig.toolbar_button_onmouseover(tooltip);\n",
       "            }\n",
       "        };\n",
       "    }\n",
       "\n",
       "    fig.buttons = {};\n",
       "    var buttonGroup = document.createElement('div');\n",
       "    buttonGroup.classList = 'btn-group';\n",
       "    var button;\n",
       "    for (var toolbar_ind in mpl.toolbar_items) {\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) {\n",
       "            /* Instead of a spacer, we start a new button group. */\n",
       "            if (buttonGroup.hasChildNodes()) {\n",
       "                toolbar.appendChild(buttonGroup);\n",
       "            }\n",
       "            buttonGroup = document.createElement('div');\n",
       "            buttonGroup.classList = 'btn-group';\n",
       "            continue;\n",
       "        }\n",
       "\n",
       "        button = fig.buttons[name] = document.createElement('button');\n",
       "        button.classList = 'btn btn-default';\n",
       "        button.href = '#';\n",
       "        button.title = name;\n",
       "        button.innerHTML = '<i class=\"fa ' + image + ' fa-lg\"></i>';\n",
       "        button.addEventListener('click', on_click_closure(method_name));\n",
       "        button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n",
       "        buttonGroup.appendChild(button);\n",
       "    }\n",
       "\n",
       "    if (buttonGroup.hasChildNodes()) {\n",
       "        toolbar.appendChild(buttonGroup);\n",
       "    }\n",
       "\n",
       "    // Add the status bar.\n",
       "    var status_bar = document.createElement('span');\n",
       "    status_bar.classList = 'mpl-message pull-right';\n",
       "    toolbar.appendChild(status_bar);\n",
       "    this.message = status_bar;\n",
       "\n",
       "    // Add the close button to the window.\n",
       "    var buttongrp = document.createElement('div');\n",
       "    buttongrp.classList = 'btn-group inline pull-right';\n",
       "    button = document.createElement('button');\n",
       "    button.classList = 'btn btn-mini btn-primary';\n",
       "    button.href = '#';\n",
       "    button.title = 'Stop Interaction';\n",
       "    button.innerHTML = '<i class=\"fa fa-power-off icon-remove icon-large\"></i>';\n",
       "    button.addEventListener('click', function (_evt) {\n",
       "        fig.handle_close(fig, {});\n",
       "    });\n",
       "    button.addEventListener(\n",
       "        'mouseover',\n",
       "        on_mouseover_closure('Stop Interaction')\n",
       "    );\n",
       "    buttongrp.appendChild(button);\n",
       "    var titlebar = this.root.querySelector('.ui-dialog-titlebar');\n",
       "    titlebar.insertBefore(buttongrp, titlebar.firstChild);\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._remove_fig_handler = function (event) {\n",
       "    var fig = event.data.fig;\n",
       "    if (event.target !== this) {\n",
       "        // Ignore bubbled events from children.\n",
       "        return;\n",
       "    }\n",
       "    fig.close_ws(fig, {});\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function (el) {\n",
       "    el.style.boxSizing = 'content-box'; // override notebook setting of border-box.\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function (el) {\n",
       "    // this is important to make the div 'focusable\n",
       "    el.setAttribute('tabindex', 0);\n",
       "    // reach out to IPython and tell the keyboard manager to turn it's self\n",
       "    // off when our div gets focus\n",
       "\n",
       "    // location in version 3\n",
       "    if (IPython.notebook.keyboard_manager) {\n",
       "        IPython.notebook.keyboard_manager.register_events(el);\n",
       "    } else {\n",
       "        // location in version 2\n",
       "        IPython.keyboard_manager.register_events(el);\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function (event, _name) {\n",
       "    var manager = IPython.notebook.keyboard_manager;\n",
       "    if (!manager) {\n",
       "        manager = IPython.keyboard_manager;\n",
       "    }\n",
       "\n",
       "    // Check for shift+enter\n",
       "    if (event.shiftKey && event.which === 13) {\n",
       "        this.canvas_div.blur();\n",
       "        // select the cell after this one\n",
       "        var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n",
       "        IPython.notebook.select(index + 1);\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_save = function (fig, _msg) {\n",
       "    fig.ondownload(fig, null);\n",
       "};\n",
       "\n",
       "mpl.find_output_cell = function (html_output) {\n",
       "    // Return the cell and output element which can be found *uniquely* in the notebook.\n",
       "    // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n",
       "    // IPython event is triggered only after the cells have been serialised, which for\n",
       "    // our purposes (turning an active figure into a static one), is too late.\n",
       "    var cells = IPython.notebook.get_cells();\n",
       "    var ncells = cells.length;\n",
       "    for (var i = 0; i < ncells; i++) {\n",
       "        var cell = cells[i];\n",
       "        if (cell.cell_type === 'code') {\n",
       "            for (var j = 0; j < cell.output_area.outputs.length; j++) {\n",
       "                var data = cell.output_area.outputs[j];\n",
       "                if (data.data) {\n",
       "                    // IPython >= 3 moved mimebundle to data attribute of output\n",
       "                    data = data.data;\n",
       "                }\n",
       "                if (data['text/html'] === html_output) {\n",
       "                    return [cell, data, j];\n",
       "                }\n",
       "            }\n",
       "        }\n",
       "    }\n",
       "};\n",
       "\n",
       "// Register the function which deals with the matplotlib target/channel.\n",
       "// The kernel may be null if the page has been refreshed.\n",
       "if (IPython.notebook.kernel !== null) {\n",
       "    IPython.notebook.kernel.comm_manager.register_target(\n",
       "        'matplotlib',\n",
       "        mpl.mpl_figure_comm\n",
       "    );\n",
       "}\n"
      ],
      "text/plain": [
       "<IPython.core.display.Javascript object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAACgKADAAQAAAABAAAB4AAAAAAfNMscAABAAElEQVR4AeydB3hVRdPH/xASIIEQeu9Vem9SRKUpRcCuiIiI+ioqYP0sqNhQUV8bRQH1tYMgAgLSBem9995CCQnp9ZvZw70mIYSUk+SW/zzP5Z6yZ8/ubw85c3d2ZvIliYBCAiRAAiRAAiRAAiTgNQTye01P2VESIAESIAESIAESIAFDgAogHwQSIAESIAESIAES8DICVAC9bMDZXRIgARIgARIgARKgAshngARIgARIgARIgAS8jAAVQC8bcHaXBEiABEiABEiABKgA8hkgARIgARIgARIgAS8jQAXQywac3SUBEiABEiABEiABKoB8BkiABEiABEiABEjAywhQAfSyAWd3SYAESIAESIAESIAKIJ8BEiABEiABEiABEvAyAlQAvWzA2V0SIAESIAESIAESoALIZ4AESIAESIAESIAEvIwAFUAvG3B2lwRIgARIgARIgASoAPIZIAESIAESIAESIAEvI0AF0MsGnN0lARIgARIgARIgASqAfAZIgARIgARIgARIwMsIUAH0sgFnd0mABEiABEiABEiACiCfARIgARIgARIgARLwMgJUAL1swNldEiABEiABEiABEqACyGeABEiABEiABEiABLyMABVALxtwdpcESIAESIAESIAEqADyGSABEiABEiABEiABLyNABdDLBpzdJQESIAESIAESIAEqgHwGSIAESIAESIAESMDLCFAB9LIBZ3dJgARIgARIgARIgAognwESIAESIAESIAES8DICVAC9bMDZXRIgARIgARIgARKgAshngARIgARIgARIgAS8jAAVQC8bcHaXBEiABEiABEiABKgA8hkgARIgARIgARIgAS8jQAXQywac3SUBEiABEiABEiABKoB8BkiABEiABEiABEjAywhQAfSyAWd3SYAESIAESIAESIAKIJ8BEiABEiABEiABEvAyAlQAvWzA2V0SIAESIAESIAESoALIZ4AESIAESIAESIAEvIwAFUAvG3B2lwRIgARIgARIgASoAPIZIAESIAESIAESIAEvI0AF0MsGnN0lARIgARIgARIgASqAfAZIgARIgARIgARIwMsIUAH0sgFnd0mABEiABEiABEiACiCfARIgARIgARIgARLwMgJUAL1swNldEiABEiABEiABEqACyGeABEiABEiABEiABLyMABVALxtwdpcESIAESIAESIAEqADyGSABEiABEiABEiABLyNABdDLBpzdJQESIAESIAESIAEqgHwGSIAESIAESIAESMDLCFAB9LIBZ3dJgARIgARIgARIgAognwESIAESIAESIAES8DICVAC9bMDZXRIgARIgARIgARKgAshngARIgARIgARIgAS8jAAVQC8bcHaXBEiABEiABEiABKgA8hkgARIgARIgARIgAS8jQAXQywac3SUBEiABEiABEiABKoB8BkiABEiABEiABEjAywgU8LL+2trdxMREnDx5EkWLFkW+fPlsrZuVkQAJkAAJkAAJ5AyBpKQkXLp0CRUqVED+/N45F0YFMBvPlip/lStXzkYNvJQESIAESIAESCCvCBw7dgyVKlXKq9vn6X2pAGYDv878qegDFBgYmI2aeCkJkAAJkAAJkEBuEQgLCzMTOI73eG7d15XuQwUwG6PhMPuq8kcFMBsgeSkJkAAJkAAJ5AEBx3s8D26d57f0TsN3nmNnA0iABEiABEiABEgg7whQAcw79rwzCZAACZAACZAACeQJASqAeYKdNyUBEiABEiABEiCBvCPANYA5zF5dzePj45GQkJDDd2L1rk7Ax8cHBQoUYMggVx8oto8ESIAEvIAAFcAcHOTY2FicOnUKkZGROXgXVu1OBPz9/VG+fHn4+fm5U7PZVhIgARIgAQ8jQAUwhwZUg0QfOnQIOuujgSb1he/N3kY5hNltqtWZYP1BcPbsWfNc1K5d22uDj7rNoLGhJEACJODBBKgA5tDg6stelUANFK2zPhQSKFy4MHx9fXHkyBGjDBYqVIhQSIAESIAESCBPCNAJJIexe2uKmRzG6rbV83lw26Fjw0mABEjAowhQAfSo4WRnSIAESIAESIAESODaBKgAXpsRS5CAk4Cu45w5c6ZznxskQAIkQAIk4I4EqAC646jlYJsffPBB46zy6KOPXnGXxx9/3JzTMnbK6NGj0bRpU9uqXLJkCW655RaULFnSrL+sX78+Ro4ciRMnTth2D1ZEAiRAAiRAAu5MgAqgO49e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\" width=\"640\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "  \n",
    "plt.figure()\n",
    "plt.plot(mm, Nmed, label=r'Monte Carlo')\n",
    "plt.plot(mm, 2*mm-1, label=r'$2m-1$')\n",
    "plt.xlabel(r'$m$')\n",
    "plt.ylabel(r'median $N$ at fixed $m$')\n",
    "plt.legend()\n",
    "plt.show();"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
