{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "origin_pos": 0
   },
   "source": [
    "# Multivariable Calculus\n",
    ":label:`sec_multivariable_calculus`\n",
    "\n",
    "Now that we have a fairly strong understanding of derivatives of a function of a single variable, let us return to our original question where we were considering a loss function of potentially billions of weights.\n",
    "\n",
    "## Higher-Dimensional Differentiation\n",
    "What :numref:`sec_single_variable_calculus` tells us is that if we change a single one of these billions of weights leaving every other one fixed, we know what will happen!  This is nothing more than a function of a single variable, so we can write\n",
    "\n",
    "$$L(w_1+\\epsilon_1, w_2, \\ldots, w_N) \\approx L(w_1, w_2, \\ldots, w_N) + \\epsilon_1 \\frac{d}{dw_1} L(w_1, w_2, \\ldots, w_N).$$\n",
    ":eqlabel:`eq_part_der`\n",
    "\n",
    "We will call the derivative in one variable while fixing the other variables the *partial derivative*, and we will use the notation $\\frac{\\partial}{\\partial w_1}$ for the derivative in :eqref:`eq_part_der`.\n",
    "\n",
    "Now, let us take this and change $w_2$ a little bit to $w_2 + \\epsilon_2$:\n",
    "\n",
    "$$\n",
    "\\begin{aligned}\n",
    "L(w_1+\\epsilon_1, w_2+\\epsilon_2, \\ldots, w_N) & \\approx L(w_1, w_2+\\epsilon_2, \\ldots, w_N) + \\epsilon_1 \\frac{\\partial}{\\partial w_1} L(w_1, w_2+\\epsilon_2, \\ldots, w_N+\\epsilon_N) \\\\\n",
    "& \\approx L(w_1, w_2, \\ldots, w_N) \\\\\n",
    "& \\quad + \\epsilon_2\\frac{\\partial}{\\partial w_2} L(w_1, w_2, \\ldots, w_N) \\\\\n",
    "& \\quad + \\epsilon_1 \\frac{\\partial}{\\partial w_1} L(w_1, w_2, \\ldots, w_N) \\\\\n",
    "& \\quad + \\epsilon_1\\epsilon_2\\frac{\\partial}{\\partial w_2}\\frac{\\partial}{\\partial w_1} L(w_1, w_2, \\ldots, w_N) \\\\\n",
    "& \\approx L(w_1, w_2, \\ldots, w_N) \\\\\n",
    "& \\quad + \\epsilon_2\\frac{\\partial}{\\partial w_2} L(w_1, w_2, \\ldots, w_N) \\\\\n",
    "& \\quad + \\epsilon_1 \\frac{\\partial}{\\partial w_1} L(w_1, w_2, \\ldots, w_N).\n",
    "\\end{aligned}\n",
    "$$\n",
    "\n",
    "We have again used the idea that $\\epsilon_1\\epsilon_2$ is a higher order term that we can discard in the same way we could discard $\\epsilon^{2}$ in the previous section, along with what we saw in :eqref:`eq_part_der`.  By continuing in this manner, we may write that\n",
    "\n",
    "$$\n",
    "L(w_1+\\epsilon_1, w_2+\\epsilon_2, \\ldots, w_N+\\epsilon_N) \\approx L(w_1, w_2, \\ldots, w_N) + \\sum_i \\epsilon_i \\frac{\\partial}{\\partial w_i} L(w_1, w_2, \\ldots, w_N).\n",
    "$$\n",
    "\n",
    "This may look like a mess, but we can make this more familiar by noting that the sum on the right looks exactly like a dot product, so if we let\n",
    "\n",
    "$$\n",
    "\\boldsymbol{\\epsilon} = [\\epsilon_1, \\ldots, \\epsilon_N]^\\top \\; \\text{and} \\;\n",
    "\\nabla_{\\mathbf{x}} L = \\left[\\frac{\\partial L}{\\partial x_1}, \\ldots, \\frac{\\partial L}{\\partial x_N}\\right]^\\top,\n",
    "$$\n",
    "\n",
    "then\n",
    "\n",
    "$$L(\\mathbf{w} + \\boldsymbol{\\epsilon}) \\approx L(\\mathbf{w}) + \\boldsymbol{\\epsilon}\\cdot \\nabla_{\\mathbf{w}} L(\\mathbf{w}).$$\n",
    ":eqlabel:`eq_nabla_use`\n",
    "\n",
    "We will call the vector $\\nabla_{\\mathbf{w}} L$ the *gradient* of $L$.\n",
    "\n",
    "Equation :eqref:`eq_nabla_use` is worth pondering for a moment.  It has exactly the format that we encountered in one dimension, just we have converted everything to vectors and dot products.  It allows us to tell approximately how the function $L$ will change given any perturbation to the input.  As we will see in the next section, this will provide us with an important tool in understanding geometrically how we can learn using information contained in the gradient.\n",
    "\n",
    "But first, let us see this approximation at work with an example.  Suppose that we are working with the function\n",
    "\n",
    "$$\n",
    "f(x, y) = \\log(e^x + e^y) \\text{ with gradient } \\nabla f (x, y) = \\left[\\frac{e^x}{e^x+e^y}, \\frac{e^y}{e^x+e^y}\\right].\n",
    "$$\n",
    "\n",
    "If we look at a point like $(0, \\log(2))$, we see that\n",
    "\n",
    "$$\n",
    "f(x, y) = \\log(3) \\text{ with gradient } \\nabla f (x, y) = \\left[\\frac{1}{3}, \\frac{2}{3}\\right].\n",
    "$$\n",
    "\n",
    "Thus, if we want to approximate $f$ at $(\\epsilon_1, \\log(2) + \\epsilon_2)$,  we see that we should have the specific instance of :eqref:`eq_nabla_use`:\n",
    "\n",
    "$$\n",
    "f(\\epsilon_1, \\log(2) + \\epsilon_2) \\approx \\log(3) + \\frac{1}{3}\\epsilon_1 + \\frac{2}{3}\\epsilon_2.\n",
    "$$\n",
    "\n",
    "We can test this in code to see how good the approximation is.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "origin_pos": 3,
    "tab": [
     "tensorflow"
    ]
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'approximation: [1.0819457], true Value: [1.0821242]'"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "%matplotlib inline\n",
    "import numpy as np\n",
    "import tensorflow as tf\n",
    "from IPython import display\n",
    "from mpl_toolkits import mplot3d\n",
    "from d2l import tensorflow as d2l\n",
    "\n",
    "\n",
    "def f(x, y):\n",
    "    return tf.math.log(tf.exp(x) + tf.exp(y))\n",
    "def grad_f(x, y):\n",
    "    return tf.constant([(tf.exp(x) / (tf.exp(x) + tf.exp(y))).numpy(),\n",
    "                        (tf.exp(y) / (tf.exp(x) + tf.exp(y))).numpy()])\n",
    "\n",
    "epsilon = tf.constant([0.01, -0.03])\n",
    "grad_approx = f(tf.constant([0.]), tf.math.log(\n",
    "    tf.constant([2.]))) + tf.tensordot(\n",
    "    epsilon, grad_f(tf.constant([0.]), tf.math.log(tf.constant(2.))), axes=1)\n",
    "true_value = f(tf.constant([0.]) + epsilon[0], tf.math.log(\n",
    "    tf.constant([2.])) + epsilon[1])\n",
    "f'approximation: {grad_approx}, true Value: {true_value}'"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "origin_pos": 4
   },
   "source": [
    "## Geometry of Gradients and Gradient Descent\n",
    "Consider the expression from :eqref:`eq_nabla_use` again:\n",
    "\n",
    "$$\n",
    "L(\\mathbf{w} + \\boldsymbol{\\epsilon}) \\approx L(\\mathbf{w}) + \\boldsymbol{\\epsilon}\\cdot \\nabla_{\\mathbf{w}} L(\\mathbf{w}).\n",
    "$$\n",
    "\n",
    "Let us suppose that I want to use this to help minimize our loss $L$.  Let us understand geometrically the algorithm of gradient descent first described in  :numref:`sec_autograd`. What we will do is the following:\n",
    "\n",
    "1. Start with a random choice for the initial parameters $\\mathbf{w}$.\n",
    "2. Find the direction $\\mathbf{v}$ that makes $L$ decrease the most rapidly at $\\mathbf{w}$.\n",
    "3. Take a small step in that direction: $\\mathbf{w} \\rightarrow \\mathbf{w} + \\epsilon\\mathbf{v}$.\n",
    "4. Repeat.\n",
    "\n",
    "The only thing we do not know exactly how to do is to compute the vector $\\mathbf{v}$ in the second step.  We will call such a direction the *direction of steepest descent*.  Using the geometric understanding of dot products from :numref:`sec_geometry-linear-algebraic-ops`, we see that we can rewrite :eqref:`eq_nabla_use` as\n",
    "\n",
    "$$\n",
    "L(\\mathbf{w} + \\mathbf{v}) \\approx L(\\mathbf{w}) + \\mathbf{v}\\cdot \\nabla_{\\mathbf{w}} L(\\mathbf{w}) = L(\\mathbf{w}) + \\|\\nabla_{\\mathbf{w}} L(\\mathbf{w})\\|\\cos(\\theta).\n",
    "$$\n",
    "\n",
    "Note that we have taken our direction to have length one for convenience, and used $\\theta$ for the angle between $\\mathbf{v}$ and $\\nabla_{\\mathbf{w}} L(\\mathbf{w})$.  If we want to find the direction that decreases $L$ as rapidly as possible, we want to make this expression as negative as possible.  The only way the direction we pick enters into this equation is through $\\cos(\\theta)$, and thus we wish to make this cosine as negative as possible.  Now, recalling the shape of cosine, we can make this as negative as possible by making $\\cos(\\theta) = -1$ or equivalently making the angle between the gradient and our chosen direction to be $\\pi$ radians, or equivalently $180$ degrees.  The only way to achieve this is to head in the exact opposite direction:  pick $\\mathbf{v}$ to point in the exact opposite direction to $\\nabla_{\\mathbf{w}} L(\\mathbf{w})$!\n",
    "\n",
    "This brings us to one of the most important mathematical concepts in machine learning: the direction of steepest decent points in the direction of $-\\nabla_{\\mathbf{w}}L(\\mathbf{w})$.  Thus our informal algorithm can be rewritten as follows.\n",
    "\n",
    "1. Start with a random choice for the initial parameters $\\mathbf{w}$.\n",
    "2. Compute $\\nabla_{\\mathbf{w}} L(\\mathbf{w})$.\n",
    "3. Take a small step in the opposite of that direction: $\\mathbf{w} \\rightarrow \\mathbf{w} - \\epsilon\\nabla_{\\mathbf{w}} L(\\mathbf{w})$.\n",
    "4. Repeat.\n",
    "\n",
    "\n",
    "This basic algorithm has been modified and adapted many ways by many researchers, but the core concept remains the same in all of them.  Use the gradient to find the direction that decreases the loss as rapidly as possible, and update the parameters to take a step in that direction.\n",
    "\n",
    "## A Note on Mathematical Optimization\n",
    "Throughout this book, we focus squarely on numerical optimization techniques for the practical reason that all functions we encounter in the deep learning setting are too complex to minimize explicitly.\n",
    "\n",
    "However, it is a useful exercise to consider what the geometric understanding we obtained above tells us about optimizing functions directly.\n",
    "\n",
    "Suppose that we wish to find the value of $\\mathbf{x}_0$ which minimizes some function $L(\\mathbf{x})$.  Let us suppose that moreover someone gives us a value and tells us that it is the value that minimizes $L$.  Is there anything we can check to see if their answer is even plausible?\n",
    "\n",
    "Again consider :eqref:`eq_nabla_use`:\n",
    "$$\n",
    "L(\\mathbf{x}_0 + \\boldsymbol{\\epsilon}) \\approx L(\\mathbf{x}_0) + \\boldsymbol{\\epsilon}\\cdot \\nabla_{\\mathbf{x}} L(\\mathbf{x}_0).\n",
    "$$\n",
    "\n",
    "If the gradient is not zero, we know that we can take a step in the direction $-\\epsilon \\nabla_{\\mathbf{x}} L(\\mathbf{x}_0)$ to find a value of $L$ that is smaller.  Thus, if we truly are at a minimum, this cannot be the case!  We can conclude that if $\\mathbf{x}_0$ is a minimum, then $\\nabla_{\\mathbf{x}} L(\\mathbf{x}_0) = 0$.  We call points with $\\nabla_{\\mathbf{x}} L(\\mathbf{x}_0) = 0$ *critical points*.\n",
    "\n",
    "This is nice, because in some rare settings, we *can* explicitly find all the points where the gradient is zero, and find the one with the smallest value.\n",
    "\n",
    "For a concrete example, consider the function\n",
    "$$\n",
    "f(x) = 3x^4 - 4x^3 -12x^2.\n",
    "$$\n",
    "\n",
    "This function has derivative\n",
    "$$\n",
    "\\frac{df}{dx} = 12x^3 - 12x^2 -24x = 12x(x-2)(x+1).\n",
    "$$\n",
    "\n",
    "The only possible location of minima are at $x = -1, 0, 2$, where the function takes the values $-5,0, -32$ respectively, and thus we can conclude that we minimize our function when $x = 2$.  A quick plot confirms this.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "origin_pos": 7,
    "tab": [
     "tensorflow"
    ]
   },
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n",
       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
       "  \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
       "<svg xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"251.482813pt\" height=\"180.65625pt\" viewBox=\"0 0 251.482813 180.65625\" xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\">\n",
       " <metadata>\n",
       "  <rdf:RDF xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n",
       "   <cc:Work>\n",
       "    <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n",
       "    <dc:date>2022-03-24T13:11:59.264617</dc:date>\n",
       "    <dc:format>image/svg+xml</dc:format>\n",
       "    <dc:creator>\n",
       "     <cc:Agent>\n",
       "      <dc:title>Matplotlib v3.5.1, https://matplotlib.org/</dc:title>\n",
       "     </cc:Agent>\n",
       "    </dc:creator>\n",
       "   </cc:Work>\n",
       "  </rdf:RDF>\n",
       " </metadata>\n",
       " <defs>\n",
       "  <style type=\"text/css\">*{stroke-linejoin: round; stroke-linecap: butt}</style>\n",
       " </defs>\n",
       " <g id=\"figure_1\">\n",
       "  <g id=\"patch_1\">\n",
       "   <path d=\"M -0 180.65625 \n",
       "L 251.482813 180.65625 \n",
       "L 251.482813 0 \n",
       "L -0 0 \n",
       "L -0 180.65625 \n",
       "z\n",
       "\" style=\"fill: none\"/>\n",
       "  </g>\n",
       "  <g id=\"axes_1\">\n",
       "   <g id=\"patch_2\">\n",
       "    <path d=\"M 48.982813 143.1 \n",
       "L 244.282813 143.1 \n",
       "L 244.282813 7.2 \n",
       "L 48.982813 7.2 \n",
       "z\n",
       "\" style=\"fill: #ffffff\"/>\n",
       "   </g>\n",
       "   <g id=\"matplotlib.axis_1\">\n",
       "    <g id=\"xtick_1\">\n",
       "     <g id=\"line2d_1\">\n",
       "      <path d=\"M 57.860085 143.1 \n",
       "L 57.860085 7.2 \n",
       "\" clip-path=\"url(#p03c1a7aed4)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_2\">\n",
       "      <defs>\n",
       "       <path id=\"m6cd4afcc54\" d=\"M 0 0 \n",
       "L 0 3.5 \n",
       "\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </defs>\n",
       "      <g>\n",
       "       <use xlink:href=\"#m6cd4afcc54\" x=\"57.860085\" y=\"143.1\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_1\">\n",
       "      <!-- −2 -->\n",
       "      <g transform=\"translate(50.488991 157.698438)scale(0.1 -0.1)\">\n",
       "       <defs>\n",
       "        <path id=\"DejaVuSans-2212\" d=\"M 678 2272 \n",
       "L 4684 2272 \n",
       "L 4684 1741 \n",
       "L 678 1741 \n",
       "L 678 2272 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "        <path id=\"DejaVuSans-32\" d=\"M 1228 531 \n",
       "L 3431 531 \n",
       "L 3431 0 \n",
       "L 469 0 \n",
       "L 469 531 \n",
       "Q 828 903 1448 1529 \n",
       "Q 2069 2156 2228 2338 \n",
       "Q 2531 2678 2651 2914 \n",
       "Q 2772 3150 2772 3378 \n",
       "Q 2772 3750 2511 3984 \n",
       "Q 2250 4219 1831 4219 \n",
       "Q 1534 4219 1204 4116 \n",
       "Q 875 4013 500 3803 \n",
       "L 500 4441 \n",
       "Q 881 4594 1212 4672 \n",
       "Q 1544 4750 1819 4750 \n",
       "Q 2544 4750 2975 4387 \n",
       "Q 3406 4025 3406 3419 \n",
       "Q 3406 3131 3298 2873 \n",
       "Q 3191 2616 2906 2266 \n",
       "Q 2828 2175 2409 1742 \n",
       "Q 1991 1309 1228 531 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "       </defs>\n",
       "       <use xlink:href=\"#DejaVuSans-2212\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-32\" x=\"83.789062\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"xtick_2\">\n",
       "     <g id=\"line2d_3\">\n",
       "      <path d=\"M 93.440365 143.1 \n",
       "L 93.440365 7.2 \n",
       "\" clip-path=\"url(#p03c1a7aed4)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_4\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#m6cd4afcc54\" x=\"93.440365\" y=\"143.1\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_2\">\n",
       "      <!-- −1 -->\n",
       "      <g transform=\"translate(86.069272 157.698438)scale(0.1 -0.1)\">\n",
       "       <defs>\n",
       "        <path id=\"DejaVuSans-31\" d=\"M 794 531 \n",
       "L 1825 531 \n",
       "L 1825 4091 \n",
       "L 703 3866 \n",
       "L 703 4441 \n",
       "L 1819 4666 \n",
       "L 2450 4666 \n",
       "L 2450 531 \n",
       "L 3481 531 \n",
       "L 3481 0 \n",
       "L 794 0 \n",
       "L 794 531 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "       </defs>\n",
       "       <use xlink:href=\"#DejaVuSans-2212\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-31\" x=\"83.789062\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"xtick_3\">\n",
       "     <g id=\"line2d_5\">\n",
       "      <path d=\"M 129.020646 143.1 \n",
       "L 129.020646 7.2 \n",
       "\" clip-path=\"url(#p03c1a7aed4)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_6\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#m6cd4afcc54\" x=\"129.020646\" y=\"143.1\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_3\">\n",
       "      <!-- 0 -->\n",
       "      <g transform=\"translate(125.839396 157.698438)scale(0.1 -0.1)\">\n",
       "       <defs>\n",
       "        <path id=\"DejaVuSans-30\" d=\"M 2034 4250 \n",
       "Q 1547 4250 1301 3770 \n",
       "Q 1056 3291 1056 2328 \n",
       "Q 1056 1369 1301 889 \n",
       "Q 1547 409 2034 409 \n",
       "Q 2525 409 2770 889 \n",
       "Q 3016 1369 3016 2328 \n",
       "Q 3016 3291 2770 3770 \n",
       "Q 2525 4250 2034 4250 \n",
       "z\n",
       "M 2034 4750 \n",
       "Q 2819 4750 3233 4129 \n",
       "Q 3647 3509 3647 2328 \n",
       "Q 3647 1150 3233 529 \n",
       "Q 2819 -91 2034 -91 \n",
       "Q 1250 -91 836 529 \n",
       "Q 422 1150 422 2328 \n",
       "Q 422 3509 836 4129 \n",
       "Q 1250 4750 2034 4750 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "       </defs>\n",
       "       <use xlink:href=\"#DejaVuSans-30\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"xtick_4\">\n",
       "     <g id=\"line2d_7\">\n",
       "      <path d=\"M 164.600926 143.1 \n",
       "L 164.600926 7.2 \n",
       "\" clip-path=\"url(#p03c1a7aed4)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_8\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#m6cd4afcc54\" x=\"164.600926\" y=\"143.1\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_4\">\n",
       "      <!-- 1 -->\n",
       "      <g transform=\"translate(161.419676 157.698438)scale(0.1 -0.1)\">\n",
       "       <use xlink:href=\"#DejaVuSans-31\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"xtick_5\">\n",
       "     <g id=\"line2d_9\">\n",
       "      <path d=\"M 200.181206 143.1 \n",
       "L 200.181206 7.2 \n",
       "\" clip-path=\"url(#p03c1a7aed4)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_10\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#m6cd4afcc54\" x=\"200.181206\" y=\"143.1\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_5\">\n",
       "      <!-- 2 -->\n",
       "      <g transform=\"translate(196.999956 157.698438)scale(0.1 -0.1)\">\n",
       "       <use xlink:href=\"#DejaVuSans-32\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"xtick_6\">\n",
       "     <g id=\"line2d_11\">\n",
       "      <path d=\"M 235.761486 143.1 \n",
       "L 235.761486 7.2 \n",
       "\" clip-path=\"url(#p03c1a7aed4)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_12\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#m6cd4afcc54\" x=\"235.761486\" y=\"143.1\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_6\">\n",
       "      <!-- 3 -->\n",
       "      <g transform=\"translate(232.580236 157.698438)scale(0.1 -0.1)\">\n",
       "       <defs>\n",
       "        <path id=\"DejaVuSans-33\" d=\"M 2597 2516 \n",
       "Q 3050 2419 3304 2112 \n",
       "Q 3559 1806 3559 1356 \n",
       "Q 3559 666 3084 287 \n",
       "Q 2609 -91 1734 -91 \n",
       "Q 1441 -91 1130 -33 \n",
       "Q 819 25 488 141 \n",
       "L 488 750 \n",
       "Q 750 597 1062 519 \n",
       "Q 1375 441 1716 441 \n",
       "Q 2309 441 2620 675 \n",
       "Q 2931 909 2931 1356 \n",
       "Q 2931 1769 2642 2001 \n",
       "Q 2353 2234 1838 2234 \n",
       "L 1294 2234 \n",
       "L 1294 2753 \n",
       "L 1863 2753 \n",
       "Q 2328 2753 2575 2939 \n",
       "Q 2822 3125 2822 3475 \n",
       "Q 2822 3834 2567 4026 \n",
       "Q 2313 4219 1838 4219 \n",
       "Q 1578 4219 1281 4162 \n",
       "Q 984 4106 628 3988 \n",
       "L 628 4550 \n",
       "Q 988 4650 1302 4700 \n",
       "Q 1616 4750 1894 4750 \n",
       "Q 2613 4750 3031 4423 \n",
       "Q 3450 4097 3450 3541 \n",
       "Q 3450 3153 3228 2886 \n",
       "Q 3006 2619 2597 2516 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "       </defs>\n",
       "       <use xlink:href=\"#DejaVuSans-33\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"text_7\">\n",
       "     <!-- x -->\n",
       "     <g transform=\"translate(143.673438 171.376563)scale(0.1 -0.1)\">\n",
       "      <defs>\n",
       "       <path id=\"DejaVuSans-78\" d=\"M 3513 3500 \n",
       "L 2247 1797 \n",
       "L 3578 0 \n",
       "L 2900 0 \n",
       "L 1881 1375 \n",
       "L 863 0 \n",
       "L 184 0 \n",
       "L 1544 1831 \n",
       "L 300 3500 \n",
       "L 978 3500 \n",
       "L 1906 2253 \n",
       "L 2834 3500 \n",
       "L 3513 3500 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "      </defs>\n",
       "      <use xlink:href=\"#DejaVuSans-78\"/>\n",
       "     </g>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"matplotlib.axis_2\">\n",
       "    <g id=\"ytick_1\">\n",
       "     <g id=\"line2d_13\">\n",
       "      <path d=\"M 48.982813 113.757955 \n",
       "L 244.282813 113.757955 \n",
       "\" clip-path=\"url(#p03c1a7aed4)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_14\">\n",
       "      <defs>\n",
       "       <path id=\"m36606659e7\" d=\"M 0 0 \n",
       "L -3.5 0 \n",
       "\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </defs>\n",
       "      <g>\n",
       "       <use xlink:href=\"#m36606659e7\" x=\"48.982813\" y=\"113.757955\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_8\">\n",
       "      <!-- −20 -->\n",
       "      <g transform=\"translate(20.878125 117.557173)scale(0.1 -0.1)\">\n",
       "       <use xlink:href=\"#DejaVuSans-2212\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-32\" x=\"83.789062\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"147.412109\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"ytick_2\">\n",
       "     <g id=\"line2d_15\">\n",
       "      <path d=\"M 48.982813 75.15 \n",
       "L 244.282813 75.15 \n",
       "\" clip-path=\"url(#p03c1a7aed4)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_16\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#m36606659e7\" x=\"48.982813\" y=\"75.15\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_9\">\n",
       "      <!-- 0 -->\n",
       "      <g transform=\"translate(35.620313 78.949219)scale(0.1 -0.1)\">\n",
       "       <use xlink:href=\"#DejaVuSans-30\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"ytick_3\">\n",
       "     <g id=\"line2d_17\">\n",
       "      <path d=\"M 48.982813 36.542045 \n",
       "L 244.282813 36.542045 \n",
       "\" clip-path=\"url(#p03c1a7aed4)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_18\">\n",
       "      <g>\n",
       "       <use xlink:href=\"#m36606659e7\" x=\"48.982813\" y=\"36.542045\" style=\"stroke: #000000; stroke-width: 0.8\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_10\">\n",
       "      <!-- 20 -->\n",
       "      <g transform=\"translate(29.257813 40.341264)scale(0.1 -0.1)\">\n",
       "       <use xlink:href=\"#DejaVuSans-32\"/>\n",
       "       <use xlink:href=\"#DejaVuSans-30\" x=\"63.623047\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"text_11\">\n",
       "     <!-- f(x) -->\n",
       "     <g transform=\"translate(14.798438 83.771094)rotate(-90)scale(0.1 -0.1)\">\n",
       "      <defs>\n",
       "       <path id=\"DejaVuSans-66\" d=\"M 2375 4863 \n",
       "L 2375 4384 \n",
       "L 1825 4384 \n",
       "Q 1516 4384 1395 4259 \n",
       "Q 1275 4134 1275 3809 \n",
       "L 1275 3500 \n",
       "L 2222 3500 \n",
       "L 2222 3053 \n",
       "L 1275 3053 \n",
       "L 1275 0 \n",
       "L 697 0 \n",
       "L 697 3053 \n",
       "L 147 3053 \n",
       "L 147 3500 \n",
       "L 697 3500 \n",
       "L 697 3744 \n",
       "Q 697 4328 969 4595 \n",
       "Q 1241 4863 1831 4863 \n",
       "L 2375 4863 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "       <path id=\"DejaVuSans-28\" d=\"M 1984 4856 \n",
       "Q 1566 4138 1362 3434 \n",
       "Q 1159 2731 1159 2009 \n",
       "Q 1159 1288 1364 580 \n",
       "Q 1569 -128 1984 -844 \n",
       "L 1484 -844 \n",
       "Q 1016 -109 783 600 \n",
       "Q 550 1309 550 2009 \n",
       "Q 550 2706 781 3412 \n",
       "Q 1013 4119 1484 4856 \n",
       "L 1984 4856 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "       <path id=\"DejaVuSans-29\" d=\"M 513 4856 \n",
       "L 1013 4856 \n",
       "Q 1481 4119 1714 3412 \n",
       "Q 1947 2706 1947 2009 \n",
       "Q 1947 1309 1714 600 \n",
       "Q 1481 -109 1013 -844 \n",
       "L 513 -844 \n",
       "Q 928 -128 1133 580 \n",
       "Q 1338 1288 1338 2009 \n",
       "Q 1338 2731 1133 3434 \n",
       "Q 928 4138 513 4856 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "      </defs>\n",
       "      <use xlink:href=\"#DejaVuSans-66\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-28\" x=\"35.205078\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-78\" x=\"74.21875\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-29\" x=\"133.398438\"/>\n",
       "     </g>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"line2d_19\">\n",
       "    <path d=\"M 57.860085 13.377273 \n",
       "L 59.9949 23.924209 \n",
       "L 62.129715 33.372616 \n",
       "L 64.26453 41.789895 \n",
       "L 66.399344 49.241555 \n",
       "L 68.534159 55.791353 \n",
       "L 70.313171 60.605352 \n",
       "L 72.092184 64.870984 \n",
       "L 73.871196 68.622293 \n",
       "L 75.650208 71.892424 \n",
       "L 77.429221 74.713668 \n",
       "L 79.208233 77.117438 \n",
       "L 80.987245 79.13428 \n",
       "L 82.766258 80.793886 \n",
       "L 84.54527 82.125053 \n",
       "L 86.324282 83.155732 \n",
       "L 88.103295 83.912995 \n",
       "L 89.882307 84.423047 \n",
       "L 91.661319 84.71122 \n",
       "L 93.440332 84.801989 \n",
       "L 95.575146 84.683499 \n",
       "L 97.709961 84.353808 \n",
       "L 100.200578 83.751929 \n",
       "L 103.402801 82.720248 \n",
       "L 107.67243 81.070936 \n",
       "L 116.211689 77.694646 \n",
       "L 119.769714 76.553776 \n",
       "L 122.616137 75.849439 \n",
       "L 125.46256 75.373354 \n",
       "L 127.95318 75.170637 \n",
       "L 130.443799 75.18754 \n",
       "L 132.934418 75.439715 \n",
       "L 135.425039 75.939477 \n",
       "L 137.91566 76.695806 \n",
       "L 140.406277 77.714342 \n",
       "L 142.896894 78.997389 \n",
       "L 145.387511 80.543914 \n",
       "L 147.87813 82.349548 \n",
       "L 150.368747 84.406585 \n",
       "L 153.215167 87.051001 \n",
       "L 156.061586 89.98742 \n",
       "L 159.263808 93.605441 \n",
       "L 162.821833 97.959443 \n",
       "L 167.091463 103.539442 \n",
       "L 174.919117 114.237093 \n",
       "L 180.256154 121.339823 \n",
       "L 183.814178 125.716256 \n",
       "L 186.660598 128.885384 \n",
       "L 189.151215 131.340911 \n",
       "L 191.28603 133.159875 \n",
       "L 193.420845 134.671176 \n",
       "L 195.199857 135.664299 \n",
       "L 196.97887 136.387553 \n",
       "L 198.402079 136.753763 \n",
       "L 199.825289 136.915813 \n",
       "L 201.248503 136.85914 \n",
       "L 202.671713 136.568849 \n",
       "L 204.094923 136.029672 \n",
       "L 205.518133 135.225956 \n",
       "L 206.941343 134.141735 \n",
       "L 208.364553 132.760646 \n",
       "L 209.787762 131.066047 \n",
       "L 211.210972 129.040861 \n",
       "L 212.634182 126.667673 \n",
       "L 214.057392 123.928743 \n",
       "L 215.836404 119.963079 \n",
       "L 217.615417 115.361455 \n",
       "L 219.394429 110.086794 \n",
       "L 221.173441 104.101224 \n",
       "L 222.952454 97.365922 \n",
       "L 224.731466 89.841315 \n",
       "L 226.866281 79.71275 \n",
       "L 229.001095 68.31751 \n",
       "L 231.13591 55.582145 \n",
       "L 233.270725 41.431413 \n",
       "L 235.40554 25.788184 \n",
       "L 235.40554 25.788184 \n",
       "\" clip-path=\"url(#p03c1a7aed4)\" style=\"fill: none; stroke: #1f77b4; stroke-width: 1.5; stroke-linecap: square\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_3\">\n",
       "    <path d=\"M 48.982813 143.1 \n",
       "L 48.982813 7.2 \n",
       "\" style=\"fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_4\">\n",
       "    <path d=\"M 244.282813 143.1 \n",
       "L 244.282813 7.2 \n",
       "\" style=\"fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_5\">\n",
       "    <path d=\"M 48.982813 143.1 \n",
       "L 244.282813 143.1 \n",
       "\" style=\"fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_6\">\n",
       "    <path d=\"M 48.982813 7.2 \n",
       "L 244.282813 7.2 \n",
       "\" style=\"fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square\"/>\n",
       "   </g>\n",
       "  </g>\n",
       " </g>\n",
       " <defs>\n",
       "  <clipPath id=\"p03c1a7aed4\">\n",
       "   <rect x=\"48.982813\" y=\"7.2\" width=\"195.3\" height=\"135.9\"/>\n",
       "  </clipPath>\n",
       " </defs>\n",
       "</svg>\n"
      ],
      "text/plain": [
       "<Figure size 252x180 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "x = tf.range(-2, 3, 0.01)\n",
    "f = (3 * x**4) - (4 * x**3) - (12 * x**2)\n",
    "\n",
    "d2l.plot(x, f, 'x', 'f(x)')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "origin_pos": 8
   },
   "source": [
    "This highlights an important fact to know when working either theoretically or numerically: the only possible points where we can minimize (or maximize) a function will have gradient equal to zero, however, not every point with gradient zero is the true *global* minimum (or maximum).\n",
    "\n",
    "## Multivariate Chain Rule\n",
    "Let us suppose that we have a function of four variables ($w, x, y$, and $z$) which we can make by composing many terms:\n",
    "\n",
    "$$\\begin{aligned}f(u, v) & = (u+v)^{2} \\\\u(a, b) & = (a+b)^{2}, \\qquad v(a, b) = (a-b)^{2}, \\\\a(w, x, y, z) & = (w+x+y+z)^{2}, \\qquad b(w, x, y, z) = (w+x-y-z)^2.\\end{aligned}$$\n",
    ":eqlabel:`eq_multi_func_def`\n",
    "\n",
    "Such chains of equations are common when working with neural networks, so trying to understand how to compute gradients of such functions is key.  We can start to see visual hints of this connection in :numref:`fig_chain-1` if we take a look at what variables directly relate to one another.\n",
    "\n",
    "![The function relations above where nodes represent values and edges show functional dependence.](../img/chain-net1.svg)\n",
    ":label:`fig_chain-1`\n",
    "\n",
    "Nothing stops us from just composing everything from :eqref:`eq_multi_func_def` and writing out that\n",
    "\n",
    "$$\n",
    "f(w, x, y, z) = \\left(\\left((w+x+y+z)^2+(w+x-y-z)^2\\right)^2+\\left((w+x+y+z)^2-(w+x-y-z)^2\\right)^2\\right)^2.\n",
    "$$\n",
    "\n",
    "We may then take the derivative by just using single variable derivatives, but if we did that we would quickly find ourself swamped with terms, many of which are repeats!  Indeed, one can see that, for instance:\n",
    "\n",
    "$$\n",
    "\\begin{aligned}\n",
    "\\frac{\\partial f}{\\partial w} & = 2 \\left(2 \\left(2 (w + x + y + z) - 2 (w + x - y - z)\\right) \\left((w + x + y + z)^{2}- (w + x - y - z)^{2}\\right) + \\right.\\\\\n",
    "& \\left. \\quad 2 \\left(2 (w + x - y - z) + 2 (w + x + y + z)\\right) \\left((w + x - y - z)^{2}+ (w + x + y + z)^{2}\\right)\\right) \\times \\\\\n",
    "& \\quad \\left(\\left((w + x + y + z)^{2}- (w + x - y - z)^2\\right)^{2}+ \\left((w + x - y - z)^{2}+ (w + x + y + z)^{2}\\right)^{2}\\right).\n",
    "\\end{aligned}\n",
    "$$\n",
    "\n",
    "If we then also wanted to compute $\\frac{\\partial f}{\\partial x}$, we would end up with a similar equation again with many repeated terms, and many *shared* repeated terms between the two derivatives.  This represents a massive quantity of wasted work, and if we needed to compute derivatives this way, the whole deep learning revolution would have stalled out before it began!\n",
    "\n",
    "\n",
    "Let us break up the problem.  We will start by trying to understand how $f$ changes when we change $a$, essentially assuming that $w, x, y$, and $z$ all do not exist.  We will reason as we did back when we worked with the gradient for the first time.  Let us take $a$ and add a small amount $\\epsilon$ to it.\n",
    "\n",
    "$$\n",
    "\\begin{aligned}\n",
    "& f(u(a+\\epsilon, b), v(a+\\epsilon, b)) \\\\\n",
    "\\approx & f\\left(u(a, b) + \\epsilon\\frac{\\partial u}{\\partial a}(a, b), v(a, b) + \\epsilon\\frac{\\partial v}{\\partial a}(a, b)\\right) \\\\\n",
    "\\approx & f(u(a, b), v(a, b)) + \\epsilon\\left[\\frac{\\partial f}{\\partial u}(u(a, b), v(a, b))\\frac{\\partial u}{\\partial a}(a, b) + \\frac{\\partial f}{\\partial v}(u(a, b), v(a, b))\\frac{\\partial v}{\\partial a}(a, b)\\right].\n",
    "\\end{aligned}\n",
    "$$\n",
    "\n",
    "The first line follows from the definition of partial derivative, and the second follows from the definition of gradient.  It is notationally burdensome to track exactly where we evaluate every derivative, as in the expression $\\frac{\\partial f}{\\partial u}(u(a, b), v(a, b))$, so we often abbreviate this to the much more memorable\n",
    "\n",
    "$$\n",
    "\\frac{\\partial f}{\\partial a} = \\frac{\\partial f}{\\partial u}\\frac{\\partial u}{\\partial a}+\\frac{\\partial f}{\\partial v}\\frac{\\partial v}{\\partial a}.\n",
    "$$\n",
    "\n",
    "It is useful to think about the meaning of the process. We are trying to understand how a function of the form $f(u(a, b), v(a, b))$ changes its value with a change in $a$.  There are two pathways this can occur: there is the pathway where $a \\rightarrow u \\rightarrow f$ and where $a \\rightarrow v \\rightarrow f$.  We can compute both of these contributions via the chain rule: $\\frac{\\partial w}{\\partial u} \\cdot \\frac{\\partial u}{\\partial x}$ and $\\frac{\\partial w}{\\partial v} \\cdot \\frac{\\partial v}{\\partial x}$ respectively, and added up.\n",
    "\n",
    "Imagine we have a different network of functions where the functions on the right depend on those that are connected to on the left as is shown in :numref:`fig_chain-2`.\n",
    "\n",
    "![Another more subtle example of the chain rule.](../img/chain-net2.svg)\n",
    ":label:`fig_chain-2`\n",
    "\n",
    "To compute something like $\\frac{\\partial f}{\\partial y}$, we need to sum over all (in this case $3$) paths from $y$ to $f$ giving\n",
    "\n",
    "$$\n",
    "\\frac{\\partial f}{\\partial y} = \\frac{\\partial f}{\\partial a} \\frac{\\partial a}{\\partial u} \\frac{\\partial u}{\\partial y} + \\frac{\\partial f}{\\partial u} \\frac{\\partial u}{\\partial y} + \\frac{\\partial f}{\\partial b} \\frac{\\partial b}{\\partial v} \\frac{\\partial v}{\\partial y}.\n",
    "$$\n",
    "\n",
    "Understanding the chain rule in this way will pay great dividends when trying to understand how gradients flow through networks, and why various architectural choices like those in LSTMs (:numref:`sec_lstm`) or residual layers (:numref:`sec_resnet`) can help shape the learning process by controlling gradient flow.\n",
    "\n",
    "## The Backpropagation Algorithm\n",
    "\n",
    "Let us return to the example of :eqref:`eq_multi_func_def` the previous section where\n",
    "\n",
    "$$\n",
    "\\begin{aligned}\n",
    "f(u, v) & = (u+v)^{2} \\\\\n",
    "u(a, b) & = (a+b)^{2}, \\qquad v(a, b) = (a-b)^{2}, \\\\\n",
    "a(w, x, y, z) & = (w+x+y+z)^{2}, \\qquad b(w, x, y, z) = (w+x-y-z)^2.\n",
    "\\end{aligned}\n",
    "$$\n",
    "\n",
    "If we want to compute say $\\frac{\\partial f}{\\partial w}$ we may apply the multi-variate chain rule to see:\n",
    "\n",
    "$$\n",
    "\\begin{aligned}\n",
    "\\frac{\\partial f}{\\partial w} & = \\frac{\\partial f}{\\partial u}\\frac{\\partial u}{\\partial w} + \\frac{\\partial f}{\\partial v}\\frac{\\partial v}{\\partial w}, \\\\\n",
    "\\frac{\\partial u}{\\partial w} & = \\frac{\\partial u}{\\partial a}\\frac{\\partial a}{\\partial w}+\\frac{\\partial u}{\\partial b}\\frac{\\partial b}{\\partial w}, \\\\\n",
    "\\frac{\\partial v}{\\partial w} & = \\frac{\\partial v}{\\partial a}\\frac{\\partial a}{\\partial w}+\\frac{\\partial v}{\\partial b}\\frac{\\partial b}{\\partial w}.\n",
    "\\end{aligned}\n",
    "$$\n",
    "\n",
    "Let us try using this decomposition to compute $\\frac{\\partial f}{\\partial w}$.  Notice that all we need here are the various single step partials:\n",
    "\n",
    "$$\n",
    "\\begin{aligned}\n",
    "\\frac{\\partial f}{\\partial u} = 2(u+v), & \\quad\\frac{\\partial f}{\\partial v} = 2(u+v), \\\\\n",
    "\\frac{\\partial u}{\\partial a} = 2(a+b), & \\quad\\frac{\\partial u}{\\partial b} = 2(a+b), \\\\\n",
    "\\frac{\\partial v}{\\partial a} = 2(a-b), & \\quad\\frac{\\partial v}{\\partial b} = -2(a-b), \\\\\n",
    "\\frac{\\partial a}{\\partial w} = 2(w+x+y+z), & \\quad\\frac{\\partial b}{\\partial w} = 2(w+x-y-z).\n",
    "\\end{aligned}\n",
    "$$\n",
    "\n",
    "If we write this out into code this becomes a fairly manageable expression.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "origin_pos": 9,
    "tab": [
     "tensorflow"
    ]
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "    f at -1, 0, -2, 1 is 1024\n",
      "df/dw at -1, 0, -2, 1 is -4096\n"
     ]
    }
   ],
   "source": [
    "# Compute the value of the function from inputs to outputs\n",
    "w, x, y, z = -1, 0, -2, 1\n",
    "a, b = (w + x + y + z)**2, (w + x - y - z)**2\n",
    "u, v = (a + b)**2, (a - b)**2\n",
    "f = (u + v)**2\n",
    "print(f'    f at {w}, {x}, {y}, {z} is {f}')\n",
    "\n",
    "# Compute the single step partials\n",
    "df_du, df_dv = 2*(u + v), 2*(u + v)\n",
    "du_da, du_db, dv_da, dv_db = 2*(a + b), 2*(a + b), 2*(a - b), -2*(a - b)\n",
    "da_dw, db_dw = 2*(w + x + y + z), 2*(w + x - y - z)\n",
    "\n",
    "# Compute the final result from inputs to outputs\n",
    "du_dw, dv_dw = du_da*da_dw + du_db*db_dw, dv_da*da_dw + dv_db*db_dw\n",
    "df_dw = df_du*du_dw + df_dv*dv_dw\n",
    "print(f'df/dw at {w}, {x}, {y}, {z} is {df_dw}')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "origin_pos": 10
   },
   "source": [
    "However, note that this still does not make it easy to compute something like $\\frac{\\partial f}{\\partial x}$.  The reason for that is the *way* we chose to apply the chain rule.  If we look at what we did above, we always kept $\\partial w$ in the denominator when we could.  In this way, we chose to apply the chain rule seeing how $w$ changed every other variable.  If that is what we wanted, this would be a good idea.  However, think back to our motivation from deep learning: we want to see how every parameter changes the *loss*.  In essence, we want to apply the chain rule keeping $\\partial f$ in the numerator whenever we can!\n",
    "\n",
    "To be more explicit, note that we can write\n",
    "\n",
    "$$\n",
    "\\begin{aligned}\n",
    "\\frac{\\partial f}{\\partial w} & = \\frac{\\partial f}{\\partial a}\\frac{\\partial a}{\\partial w} + \\frac{\\partial f}{\\partial b}\\frac{\\partial b}{\\partial w}, \\\\\n",
    "\\frac{\\partial f}{\\partial a} & = \\frac{\\partial f}{\\partial u}\\frac{\\partial u}{\\partial a}+\\frac{\\partial f}{\\partial v}\\frac{\\partial v}{\\partial a}, \\\\\n",
    "\\frac{\\partial f}{\\partial b} & = \\frac{\\partial f}{\\partial u}\\frac{\\partial u}{\\partial b}+\\frac{\\partial f}{\\partial v}\\frac{\\partial v}{\\partial b}.\n",
    "\\end{aligned}\n",
    "$$\n",
    "\n",
    "Note that this application of the chain rule has us explicitly compute $\\frac{\\partial f}{\\partial u}, \\frac{\\partial f}{\\partial v}, \\frac{\\partial f}{\\partial a}, \\frac{\\partial f}{\\partial b}, \\; \\text{and} \\; \\frac{\\partial f}{\\partial w}$.  Nothing stops us from also including the equations:\n",
    "\n",
    "$$\n",
    "\\begin{aligned}\n",
    "\\frac{\\partial f}{\\partial x} & = \\frac{\\partial f}{\\partial a}\\frac{\\partial a}{\\partial x} + \\frac{\\partial f}{\\partial b}\\frac{\\partial b}{\\partial x}, \\\\\n",
    "\\frac{\\partial f}{\\partial y} & = \\frac{\\partial f}{\\partial a}\\frac{\\partial a}{\\partial y}+\\frac{\\partial f}{\\partial b}\\frac{\\partial b}{\\partial y}, \\\\\n",
    "\\frac{\\partial f}{\\partial z} & = \\frac{\\partial f}{\\partial a}\\frac{\\partial a}{\\partial z}+\\frac{\\partial f}{\\partial b}\\frac{\\partial b}{\\partial z}.\n",
    "\\end{aligned}\n",
    "$$\n",
    "\n",
    "and then keeping track of how $f$ changes when we change *any* node in the entire network.  Let us implement it.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "origin_pos": 11,
    "tab": [
     "tensorflow"
    ]
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "f at -1, 0, -2, 1 is 1024\n",
      "df/dw at -1, 0, -2, 1 is -4096\n",
      "df/dx at -1, 0, -2, 1 is -4096\n",
      "df/dy at -1, 0, -2, 1 is -4096\n",
      "df/dz at -1, 0, -2, 1 is -4096\n"
     ]
    }
   ],
   "source": [
    "# Compute the value of the function from inputs to outputs\n",
    "w, x, y, z = -1, 0, -2, 1\n",
    "a, b = (w + x + y + z)**2, (w + x - y - z)**2\n",
    "u, v = (a + b)**2, (a - b)**2\n",
    "f = (u + v)**2\n",
    "print(f'f at {w}, {x}, {y}, {z} is {f}')\n",
    "\n",
    "# Compute the derivative using the decomposition above\n",
    "# First compute the single step partials\n",
    "df_du, df_dv = 2*(u + v), 2*(u + v)\n",
    "du_da, du_db, dv_da, dv_db = 2*(a + b), 2*(a + b), 2*(a - b), -2*(a - b)\n",
    "da_dw, db_dw = 2*(w + x + y + z), 2*(w + x - y - z)\n",
    "da_dx, db_dx = 2*(w + x + y + z), 2*(w + x - y - z)\n",
    "da_dy, db_dy = 2*(w + x + y + z), -2*(w + x - y - z)\n",
    "da_dz, db_dz = 2*(w + x + y + z), -2*(w + x - y - z)\n",
    "\n",
    "# Now compute how f changes when we change any value from output to input\n",
    "df_da, df_db = df_du*du_da + df_dv*dv_da, df_du*du_db + df_dv*dv_db\n",
    "df_dw, df_dx = df_da*da_dw + df_db*db_dw, df_da*da_dx + df_db*db_dx\n",
    "df_dy, df_dz = df_da*da_dy + df_db*db_dy, df_da*da_dz + df_db*db_dz\n",
    "\n",
    "print(f'df/dw at {w}, {x}, {y}, {z} is {df_dw}')\n",
    "print(f'df/dx at {w}, {x}, {y}, {z} is {df_dx}')\n",
    "print(f'df/dy at {w}, {x}, {y}, {z} is {df_dy}')\n",
    "print(f'df/dz at {w}, {x}, {y}, {z} is {df_dz}')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "origin_pos": 12
   },
   "source": [
    "The fact that we compute derivatives from $f$ back towards the inputs rather than from the inputs forward to the outputs (as we did in the first code snippet above) is what gives this algorithm its name: *backpropagation*.  Note that there are two steps:\n",
    "1. Compute the value of the function, and the single step partials from front to back.  While not done above, this can be combined into a single *forward pass*.\n",
    "2. Compute the gradient of $f$ from back to front.  We call this the *backwards pass*.\n",
    "\n",
    "This is precisely what every deep learning algorithm implements to allow the computation of the gradient of the loss with respect to every weight in the network at one pass.  It is an astonishing fact that we have such a decomposition.\n",
    "\n",
    "To see how to encapsulated this, let us take a quick look at this example.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "origin_pos": 15,
    "tab": [
     "tensorflow"
    ]
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "df/dw at [-1.], [0.], [-2.], [1.] is [-4096.]\n",
      "df/dx at [-1.], [0.], [-2.], [1.] is [-4096.]\n",
      "df/dy at [-1.], [0.], [-2.], [1.] is [-4096.]\n",
      "df/dz at [-1.], [0.], [-2.], [1.] is [-4096.]\n"
     ]
    }
   ],
   "source": [
    "# Initialize as ndarrays, then attach gradients\n",
    "w = tf.Variable(tf.constant([-1.]))\n",
    "x = tf.Variable(tf.constant([0.]))\n",
    "y = tf.Variable(tf.constant([-2.]))\n",
    "z = tf.Variable(tf.constant([1.]))\n",
    "# Do the computation like usual, tracking gradients\n",
    "with tf.GradientTape(persistent=True) as t:\n",
    "    a, b = (w + x + y + z)**2, (w + x - y - z)**2\n",
    "    u, v = (a + b)**2, (a - b)**2\n",
    "    f = (u + v)**2\n",
    "\n",
    "# Execute backward pass\n",
    "w_grad = t.gradient(f, w).numpy()\n",
    "x_grad = t.gradient(f, x).numpy()\n",
    "y_grad = t.gradient(f, y).numpy()\n",
    "z_grad = t.gradient(f, z).numpy()\n",
    "\n",
    "print(f'df/dw at {w.numpy()}, {x.numpy()}, {y.numpy()}, '\n",
    "      f'{z.numpy()} is {w_grad}')\n",
    "print(f'df/dx at {w.numpy()}, {x.numpy()}, {y.numpy()}, '\n",
    "      f'{z.numpy()} is {x_grad}')\n",
    "print(f'df/dy at {w.numpy()}, {x.numpy()}, {y.numpy()}, '\n",
    "      f'{z.numpy()} is {y_grad}')\n",
    "print(f'df/dz at {w.numpy()}, {x.numpy()}, {y.numpy()}, '\n",
    "      f'{z.numpy()} is {z_grad}')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "origin_pos": 16
   },
   "source": [
    "All of what we did above can be done automatically by calling `f.backwards()`.\n",
    "\n",
    "\n",
    "## Hessians\n",
    "As with single variable calculus, it is useful to consider higher-order derivatives in order to get a handle on how we can obtain a better approximation to a function than using the gradient alone.\n",
    "\n",
    "There is one immediate problem one encounters when working with higher order derivatives of functions of several variables, and that is there are a large number of them.  If we have a function $f(x_1, \\ldots, x_n)$ of $n$ variables, then we can take $n^{2}$ many second derivatives, namely for any choice of $i$ and $j$:\n",
    "\n",
    "$$\n",
    "\\frac{d^2f}{dx_idx_j} = \\frac{d}{dx_i}\\left(\\frac{d}{dx_j}f\\right).\n",
    "$$\n",
    "\n",
    "This is traditionally assembled into a matrix called the *Hessian*:\n",
    "\n",
    "$$\\mathbf{H}_f = \\begin{bmatrix} \\frac{d^2f}{dx_1dx_1} & \\cdots & \\frac{d^2f}{dx_1dx_n} \\\\ \\vdots & \\ddots & \\vdots \\\\ \\frac{d^2f}{dx_ndx_1} & \\cdots & \\frac{d^2f}{dx_ndx_n} \\\\ \\end{bmatrix}.$$\n",
    ":eqlabel:`eq_hess_def`\n",
    "\n",
    "Not every entry of this matrix is independent.  Indeed, we can show that as long as both *mixed partials* (partial derivatives with respect to more than one variable) exist and are continuous, we can say that for any $i$, and $j$,\n",
    "\n",
    "$$\n",
    "\\frac{d^2f}{dx_idx_j} = \\frac{d^2f}{dx_jdx_i}.\n",
    "$$\n",
    "\n",
    "This follows by considering first perturbing a function in the direction of $x_i$, and then perturbing it in $x_j$ and then comparing the result of that with what happens if we perturb first $x_j$ and then $x_i$, with the knowledge that both of these orders lead to the same final change in the output of $f$.\n",
    "\n",
    "As with single variables, we can use these derivatives to get a far better idea of how the function behaves near a point.  In particular, we can use it to find the best fitting quadratic near a point $\\mathbf{x}_0$, as we saw in a single variable.\n",
    "\n",
    "Let us see an example.  Suppose that $f(x_1, x_2) = a + b_1x_1 + b_2x_2 + c_{11}x_1^{2} + c_{12}x_1x_2 + c_{22}x_2^{2}$.  This is the general form for a quadratic in two variables.  If we look at the value of the function, its gradient, and its Hessian :eqref:`eq_hess_def`, all at the point zero:\n",
    "\n",
    "$$\n",
    "\\begin{aligned}\n",
    "f(0,0) & = a, \\\\\n",
    "\\nabla f (0,0) & = \\begin{bmatrix}b_1 \\\\ b_2\\end{bmatrix}, \\\\\n",
    "\\mathbf{H} f (0,0) & = \\begin{bmatrix}2 c_{11} & c_{12} \\\\ c_{12} & 2c_{22}\\end{bmatrix},\n",
    "\\end{aligned}\n",
    "$$\n",
    "\n",
    "we can get our original polynomial back by saying\n",
    "\n",
    "$$\n",
    "f(\\mathbf{x}) = f(0) + \\nabla f (0) \\cdot \\mathbf{x} + \\frac{1}{2}\\mathbf{x}^\\top \\mathbf{H} f (0) \\mathbf{x}.\n",
    "$$\n",
    "\n",
    "In general, if we computed this expansion any point $\\mathbf{x}_0$, we see that\n",
    "\n",
    "$$\n",
    "f(\\mathbf{x}) = f(\\mathbf{x}_0) + \\nabla f (\\mathbf{x}_0) \\cdot (\\mathbf{x}-\\mathbf{x}_0) + \\frac{1}{2}(\\mathbf{x}-\\mathbf{x}_0)^\\top \\mathbf{H} f (\\mathbf{x}_0) (\\mathbf{x}-\\mathbf{x}_0).\n",
    "$$\n",
    "\n",
    "This works for any dimensional input, and provides the best approximating quadratic to any function at a point.  To give an example, let us plot the function\n",
    "\n",
    "$$\n",
    "f(x, y) = xe^{-x^2-y^2}.\n",
    "$$\n",
    "\n",
    "One can compute that the gradient and Hessian are\n",
    "$$\n",
    "\\nabla f(x, y) = e^{-x^2-y^2}\\begin{pmatrix}1-2x^2 \\\\ -2xy\\end{pmatrix} \\; \\text{and} \\; \\mathbf{H}f(x, y) = e^{-x^2-y^2}\\begin{pmatrix} 4x^3 - 6x & 4x^2y - 2y \\\\ 4x^2y-2y &4xy^2-2x\\end{pmatrix}.\n",
    "$$\n",
    "\n",
    "And thus, with a little algebra, see that the approximating quadratic at $[-1,0]^\\top$ is\n",
    "\n",
    "$$\n",
    "f(x, y) \\approx e^{-1}\\left(-1 - (x+1) +(x+1)^2+y^2\\right).\n",
    "$$\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "origin_pos": 19,
    "tab": [
     "tensorflow"
    ]
   },
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n",
       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
       "  \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
       "<svg xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"160.3717pt\" height=\"154.869035pt\" viewBox=\"0 0 160.3717 154.869035\" xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\">\n",
       " <metadata>\n",
       "  <rdf:RDF xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n",
       "   <cc:Work>\n",
       "    <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n",
       "    <dc:date>2022-03-24T13:11:59.484799</dc:date>\n",
       "    <dc:format>image/svg+xml</dc:format>\n",
       "    <dc:creator>\n",
       "     <cc:Agent>\n",
       "      <dc:title>Matplotlib v3.5.1, https://matplotlib.org/</dc:title>\n",
       "     </cc:Agent>\n",
       "    </dc:creator>\n",
       "   </cc:Work>\n",
       "  </rdf:RDF>\n",
       " </metadata>\n",
       " <defs>\n",
       "  <style type=\"text/css\">*{stroke-linejoin: round; stroke-linecap: butt}</style>\n",
       " </defs>\n",
       " <g id=\"figure_1\">\n",
       "  <g id=\"patch_1\">\n",
       "   <path d=\"M 0 154.869035 \n",
       "L 160.3717 154.869035 \n",
       "L 160.3717 0 \n",
       "L 0 0 \n",
       "L 0 154.869035 \n",
       "z\n",
       "\" style=\"fill: none\"/>\n",
       "  </g>\n",
       "  <g id=\"patch_2\">\n",
       "   <path d=\"M 7.2 143.1 \n",
       "L 143.1 143.1 \n",
       "L 143.1 7.2 \n",
       "L 7.2 7.2 \n",
       "z\n",
       "\" style=\"fill: #ffffff\"/>\n",
       "  </g>\n",
       "  <g id=\"pane3d_1\">\n",
       "   <g id=\"patch_3\">\n",
       "    <path d=\"M 27.353771 103.562447 \n",
       "L 64.605967 72.180617 \n",
       "L 64.163131 26.629517 \n",
       "L 25.441683 55.710636 \n",
       "\" style=\"fill: #f2f2f2; opacity: 0.5; stroke: #f2f2f2; stroke-linejoin: miter\"/>\n",
       "   </g>\n",
       "  </g>\n",
       "  <g id=\"pane3d_2\">\n",
       "   <g id=\"patch_4\">\n",
       "    <path d=\"M 64.605967 72.180617 \n",
       "L 125.110191 89.748064 \n",
       "L 126.905674 42.889988 \n",
       "L 64.163131 26.629517 \n",
       "\" style=\"fill: #e6e6e6; opacity: 0.5; stroke: #e6e6e6; stroke-linejoin: miter\"/>\n",
       "   </g>\n",
       "  </g>\n",
       "  <g id=\"pane3d_3\">\n",
       "   <g id=\"patch_5\">\n",
       "    <path d=\"M 27.353771 103.562447 \n",
       "L 90.880681 123.895948 \n",
       "L 125.110191 89.748064 \n",
       "L 64.605967 72.180617 \n",
       "\" style=\"fill: #ececec; opacity: 0.5; stroke: #ececec; stroke-linejoin: miter\"/>\n",
       "   </g>\n",
       "  </g>\n",
       "  <g id=\"axis3d_1\">\n",
       "   <g id=\"line2d_1\">\n",
       "    <path d=\"M 27.353771 103.562447 \n",
       "L 90.880681 123.895948 \n",
       "\" style=\"fill: none; stroke: #000000; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "   </g>\n",
       "   <g id=\"text_1\">\n",
       "    <!-- x -->\n",
       "    <g transform=\"translate(41.918834 145.589348)scale(0.1 -0.1)\">\n",
       "     <defs>\n",
       "      <path id=\"DejaVuSans-78\" d=\"M 3513 3500 \n",
       "L 2247 1797 \n",
       "L 3578 0 \n",
       "L 2900 0 \n",
       "L 1881 1375 \n",
       "L 863 0 \n",
       "L 184 0 \n",
       "L 1544 1831 \n",
       "L 300 3500 \n",
       "L 978 3500 \n",
       "L 1906 2253 \n",
       "L 2834 3500 \n",
       "L 3513 3500 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#DejaVuSans-78\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"Line3DCollection_1\">\n",
       "    <path d=\"M 28.570929 103.952032 \n",
       "L 65.768725 72.518225 \n",
       "L 65.367148 26.941553 \n",
       "\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8\"/>\n",
       "    <path d=\"M 43.341325 108.679695 \n",
       "L 79.868006 76.611962 \n",
       "L 79.972193 30.726622 \n",
       "\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8\"/>\n",
       "    <path d=\"M 58.422054 113.506689 \n",
       "L 94.242643 80.785649 \n",
       "L 94.87289 34.588314 \n",
       "\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8\"/>\n",
       "    <path d=\"M 73.823 118.436177 \n",
       "L 108.900783 85.04165 \n",
       "L 110.078307 38.528977 \n",
       "\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8\"/>\n",
       "    <path d=\"M 89.554472 123.471459 \n",
       "L 123.850895 89.382427 \n",
       "L 125.597889 42.55106 \n",
       "\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8\"/>\n",
       "   </g>\n",
       "   <g id=\"xtick_1\">\n",
       "    <g id=\"line2d_2\">\n",
       "     <path d=\"M 28.890418 103.682049 \n",
       "L 27.93081 104.492961 \n",
       "\" style=\"fill: none; stroke: #000000; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "    </g>\n",
       "    <g id=\"text_2\">\n",
       "     <!-- −2 -->\n",
       "     <g transform=\"translate(14.961875 124.605841)scale(0.1 -0.1)\">\n",
       "      <defs>\n",
       "       <path id=\"DejaVuSans-2212\" d=\"M 678 2272 \n",
       "L 4684 2272 \n",
       "L 4684 1741 \n",
       "L 678 1741 \n",
       "L 678 2272 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "       <path id=\"DejaVuSans-32\" d=\"M 1228 531 \n",
       "L 3431 531 \n",
       "L 3431 0 \n",
       "L 469 0 \n",
       "L 469 531 \n",
       "Q 828 903 1448 1529 \n",
       "Q 2069 2156 2228 2338 \n",
       "Q 2531 2678 2651 2914 \n",
       "Q 2772 3150 2772 3378 \n",
       "Q 2772 3750 2511 3984 \n",
       "Q 2250 4219 1831 4219 \n",
       "Q 1534 4219 1204 4116 \n",
       "Q 875 4013 500 3803 \n",
       "L 500 4441 \n",
       "Q 881 4594 1212 4672 \n",
       "Q 1544 4750 1819 4750 \n",
       "Q 2544 4750 2975 4387 \n",
       "Q 3406 4025 3406 3419 \n",
       "Q 3406 3131 3298 2873 \n",
       "Q 3191 2616 2906 2266 \n",
       "Q 2828 2175 2409 1742 \n",
       "Q 1991 1309 1228 531 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "      </defs>\n",
       "      <use xlink:href=\"#DejaVuSans-2212\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-32\" x=\"83.789062\"/>\n",
       "     </g>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"xtick_2\">\n",
       "    <g id=\"line2d_3\">\n",
       "     <path d=\"M 43.655274 108.404071 \n",
       "L 42.712295 109.231937 \n",
       "\" style=\"fill: none; stroke: #000000; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "    </g>\n",
       "    <g id=\"text_3\">\n",
       "     <!-- −1 -->\n",
       "     <g transform=\"translate(29.757599 129.499052)scale(0.1 -0.1)\">\n",
       "      <defs>\n",
       "       <path id=\"DejaVuSans-31\" d=\"M 794 531 \n",
       "L 1825 531 \n",
       "L 1825 4091 \n",
       "L 703 3866 \n",
       "L 703 4441 \n",
       "L 1819 4666 \n",
       "L 2450 4666 \n",
       "L 2450 531 \n",
       "L 3481 531 \n",
       "L 3481 0 \n",
       "L 794 0 \n",
       "L 794 531 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "      </defs>\n",
       "      <use xlink:href=\"#DejaVuSans-2212\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-31\" x=\"83.789062\"/>\n",
       "     </g>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"xtick_3\">\n",
       "    <g id=\"line2d_4\">\n",
       "     <path d=\"M 58.730158 113.225245 \n",
       "L 57.804724 114.070602 \n",
       "\" style=\"fill: none; stroke: #000000; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "    </g>\n",
       "    <g id=\"text_4\">\n",
       "     <!-- 0 -->\n",
       "     <g transform=\"translate(49.055959 134.495709)scale(0.1 -0.1)\">\n",
       "      <defs>\n",
       "       <path id=\"DejaVuSans-30\" d=\"M 2034 4250 \n",
       "Q 1547 4250 1301 3770 \n",
       "Q 1056 3291 1056 2328 \n",
       "Q 1056 1369 1301 889 \n",
       "Q 1547 409 2034 409 \n",
       "Q 2525 409 2770 889 \n",
       "Q 3016 1369 3016 2328 \n",
       "Q 3016 3291 2770 3770 \n",
       "Q 2525 4250 2034 4250 \n",
       "z\n",
       "M 2034 4750 \n",
       "Q 2819 4750 3233 4129 \n",
       "Q 3647 3509 3647 2328 \n",
       "Q 3647 1150 3233 529 \n",
       "Q 2819 -91 2034 -91 \n",
       "Q 1250 -91 836 529 \n",
       "Q 422 1150 422 2328 \n",
       "Q 422 3509 836 4129 \n",
       "Q 1250 4750 2034 4750 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "      </defs>\n",
       "      <use xlink:href=\"#DejaVuSans-30\"/>\n",
       "     </g>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"xtick_4\">\n",
       "    <g id=\"line2d_5\">\n",
       "     <path d=\"M 74.124939 118.148728 \n",
       "L 73.218011 119.012135 \n",
       "\" style=\"fill: none; stroke: #000000; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "    </g>\n",
       "    <g id=\"text_5\">\n",
       "     <!-- 1 -->\n",
       "     <g transform=\"translate(64.487292 139.599127)scale(0.1 -0.1)\">\n",
       "      <use xlink:href=\"#DejaVuSans-31\"/>\n",
       "     </g>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"xtick_5\">\n",
       "    <g id=\"line2d_6\">\n",
       "     <path d=\"M 89.849908 123.177809 \n",
       "L 88.9625 124.059851 \n",
       "\" style=\"fill: none; stroke: #000000; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "    </g>\n",
       "    <g id=\"text_6\">\n",
       "     <!-- 2 -->\n",
       "     <g transform=\"translate(80.251899 144.812765)scale(0.1 -0.1)\">\n",
       "      <use xlink:href=\"#DejaVuSans-32\"/>\n",
       "     </g>\n",
       "    </g>\n",
       "   </g>\n",
       "  </g>\n",
       "  <g id=\"axis3d_2\">\n",
       "   <g id=\"line2d_7\">\n",
       "    <path d=\"M 125.110191 89.748064 \n",
       "L 90.880681 123.895948 \n",
       "\" style=\"fill: none; stroke: #000000; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "   </g>\n",
       "   <g id=\"text_7\">\n",
       "    <!-- y -->\n",
       "    <g transform=\"translate(128.140773 132.279403)scale(0.1 -0.1)\">\n",
       "     <defs>\n",
       "      <path id=\"DejaVuSans-79\" d=\"M 2059 -325 \n",
       "Q 1816 -950 1584 -1140 \n",
       "Q 1353 -1331 966 -1331 \n",
       "L 506 -1331 \n",
       "L 506 -850 \n",
       "L 844 -850 \n",
       "Q 1081 -850 1212 -737 \n",
       "Q 1344 -625 1503 -206 \n",
       "L 1606 56 \n",
       "L 191 3500 \n",
       "L 800 3500 \n",
       "L 1894 763 \n",
       "L 2988 3500 \n",
       "L 3597 3500 \n",
       "L 2059 -325 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#DejaVuSans-79\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"Line3DCollection_2\">\n",
       "    <path d=\"M 26.274498 55.085164 \n",
       "L 28.152905 102.889244 \n",
       "L 91.617193 123.161192 \n",
       "\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8\"/>\n",
       "    <path d=\"M 36.072005 47.726904 \n",
       "L 37.561031 94.963692 \n",
       "L 100.280741 114.518304 \n",
       "\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8\"/>\n",
       "    <path d=\"M 45.520605 40.630685 \n",
       "L 46.646101 87.310288 \n",
       "L 108.633983 106.184982 \n",
       "\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8\"/>\n",
       "    <path d=\"M 54.63861 33.782755 \n",
       "L 55.424474 79.91525 \n",
       "L 116.693299 98.144885 \n",
       "\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8\"/>\n",
       "    <path d=\"M 63.443072 27.170306 \n",
       "L 63.911421 72.765713 \n",
       "L 124.473932 90.382806 \n",
       "\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8\"/>\n",
       "   </g>\n",
       "   <g id=\"xtick_6\">\n",
       "    <g id=\"line2d_8\">\n",
       "     <path d=\"M 91.086983 122.991831 \n",
       "L 92.678752 123.500278 \n",
       "\" style=\"fill: none; stroke: #000000; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "    </g>\n",
       "    <g id=\"text_8\">\n",
       "     <!-- −2 -->\n",
       "     <g transform=\"translate(94.936434 141.897149)scale(0.1 -0.1)\">\n",
       "      <use xlink:href=\"#DejaVuSans-2212\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-32\" x=\"83.789062\"/>\n",
       "     </g>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"xtick_7\">\n",
       "    <g id=\"line2d_9\">\n",
       "     <path d=\"M 99.757156 114.355062 \n",
       "L 101.329014 114.845132 \n",
       "\" style=\"fill: none; stroke: #000000; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "    </g>\n",
       "    <g id=\"text_9\">\n",
       "     <!-- −1 -->\n",
       "     <g transform=\"translate(103.413135 133.042711)scale(0.1 -0.1)\">\n",
       "      <use xlink:href=\"#DejaVuSans-2212\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-31\" x=\"83.789062\"/>\n",
       "     </g>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"xtick_8\">\n",
       "    <g id=\"line2d_10\">\n",
       "     <path d=\"M 108.116894 106.027533 \n",
       "L 109.669232 106.500204 \n",
       "\" style=\"fill: none; stroke: #000000; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "    </g>\n",
       "    <g id=\"text_10\">\n",
       "     <!-- 0 -->\n",
       "     <g transform=\"translate(115.775782 124.505713)scale(0.1 -0.1)\">\n",
       "      <use xlink:href=\"#DejaVuSans-30\"/>\n",
       "     </g>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"xtick_9\">\n",
       "    <g id=\"line2d_11\">\n",
       "     <path d=\"M 116.182576 97.992927 \n",
       "L 117.715782 98.44911 \n",
       "\" style=\"fill: none; stroke: #000000; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "    </g>\n",
       "    <g id=\"text_11\">\n",
       "     <!-- 1 -->\n",
       "     <g transform=\"translate(123.660742 116.269385)scale(0.1 -0.1)\">\n",
       "      <use xlink:href=\"#DejaVuSans-31\"/>\n",
       "     </g>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"xtick_10\">\n",
       "    <g id=\"line2d_12\">\n",
       "     <path d=\"M 123.969449 90.236056 \n",
       "L 125.483907 90.676599 \n",
       "\" style=\"fill: none; stroke: #000000; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "    </g>\n",
       "    <g id=\"text_12\">\n",
       "     <!-- 2 -->\n",
       "     <g transform=\"translate(131.272802 108.318118)scale(0.1 -0.1)\">\n",
       "      <use xlink:href=\"#DejaVuSans-32\"/>\n",
       "     </g>\n",
       "    </g>\n",
       "   </g>\n",
       "  </g>\n",
       "  <g id=\"axis3d_3\">\n",
       "   <g id=\"line2d_13\">\n",
       "    <path d=\"M 125.110191 89.748064 \n",
       "L 126.905674 42.889988 \n",
       "\" style=\"fill: none; stroke: #000000; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "   </g>\n",
       "   <g id=\"Line3DCollection_3\">\n",
       "    <path d=\"M 125.144834 88.84396 \n",
       "L 64.59741 71.300448 \n",
       "L 27.31692 102.640229 \n",
       "\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8\"/>\n",
       "    <path d=\"M 125.564474 77.892293 \n",
       "L 64.493798 60.642726 \n",
       "L 26.870408 91.46583 \n",
       "\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8\"/>\n",
       "    <path d=\"M 125.991492 66.748088 \n",
       "L 64.388439 49.805237 \n",
       "L 26.415795 80.088702 \n",
       "\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8\"/>\n",
       "    <path d=\"M 126.426084 55.406222 \n",
       "L 64.281288 38.783393 \n",
       "L 25.952858 68.503275 \n",
       "\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8\"/>\n",
       "    <path d=\"M 126.868453 43.86139 \n",
       "L 64.172298 27.572451 \n",
       "L 25.481368 56.703777 \n",
       "\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8\"/>\n",
       "   </g>\n",
       "   <g id=\"xtick_11\">\n",
       "    <g id=\"line2d_14\">\n",
       "     <path d=\"M 124.640491 88.697827 \n",
       "L 126.154528 89.136517 \n",
       "\" style=\"fill: none; stroke: #000000; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "    </g>\n",
       "    <g id=\"text_13\">\n",
       "     <!-- −1.0 -->\n",
       "     <g transform=\"translate(128.338367 94.279774)scale(0.1 -0.1)\">\n",
       "      <defs>\n",
       "       <path id=\"DejaVuSans-2e\" d=\"M 684 794 \n",
       "L 1344 794 \n",
       "L 1344 0 \n",
       "L 684 0 \n",
       "L 684 794 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "      </defs>\n",
       "      <use xlink:href=\"#DejaVuSans-2212\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-31\" x=\"83.789062\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-2e\" x=\"147.412109\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-30\" x=\"179.199219\"/>\n",
       "     </g>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"xtick_12\">\n",
       "    <g id=\"line2d_15\">\n",
       "     <path d=\"M 125.055597 77.748559 \n",
       "L 126.583254 78.18005 \n",
       "\" style=\"fill: none; stroke: #000000; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "    </g>\n",
       "    <g id=\"text_14\">\n",
       "     <!-- −0.5 -->\n",
       "     <g transform=\"translate(128.888887 83.363694)scale(0.1 -0.1)\">\n",
       "      <defs>\n",
       "       <path id=\"DejaVuSans-35\" d=\"M 691 4666 \n",
       "L 3169 4666 \n",
       "L 3169 4134 \n",
       "L 1269 4134 \n",
       "L 1269 2991 \n",
       "Q 1406 3038 1543 3061 \n",
       "Q 1681 3084 1819 3084 \n",
       "Q 2600 3084 3056 2656 \n",
       "Q 3513 2228 3513 1497 \n",
       "Q 3513 744 3044 326 \n",
       "Q 2575 -91 1722 -91 \n",
       "Q 1428 -91 1123 -41 \n",
       "Q 819 9 494 109 \n",
       "L 494 744 \n",
       "Q 775 591 1075 516 \n",
       "Q 1375 441 1709 441 \n",
       "Q 2250 441 2565 725 \n",
       "Q 2881 1009 2881 1497 \n",
       "Q 2881 1984 2565 2268 \n",
       "Q 2250 2553 1709 2553 \n",
       "Q 1456 2553 1204 2497 \n",
       "Q 953 2441 691 2322 \n",
       "L 691 4666 \n",
       "z\n",
       "\" transform=\"scale(0.015625)\"/>\n",
       "      </defs>\n",
       "      <use xlink:href=\"#DejaVuSans-2212\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-30\" x=\"83.789062\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-2e\" x=\"147.412109\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-35\" x=\"179.199219\"/>\n",
       "     </g>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"xtick_13\">\n",
       "    <g id=\"line2d_16\">\n",
       "     <path d=\"M 125.477999 66.60686 \n",
       "L 127.019522 67.03083 \n",
       "\" style=\"fill: none; stroke: #000000; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "    </g>\n",
       "    <g id=\"text_15\">\n",
       "     <!-- 0.0 -->\n",
       "     <g transform=\"translate(133.638881 72.256662)scale(0.1 -0.1)\">\n",
       "      <use xlink:href=\"#DejaVuSans-30\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-2e\" x=\"63.623047\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-30\" x=\"95.410156\"/>\n",
       "     </g>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"xtick_14\">\n",
       "    <g id=\"line2d_17\">\n",
       "     <path d=\"M 125.90789 55.267612 \n",
       "L 127.463534 55.683725 \n",
       "\" style=\"fill: none; stroke: #000000; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "    </g>\n",
       "    <g id=\"text_16\">\n",
       "     <!-- 0.5 -->\n",
       "     <g transform=\"translate(134.208916 60.953623)scale(0.1 -0.1)\">\n",
       "      <use xlink:href=\"#DejaVuSans-30\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-2e\" x=\"63.623047\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-35\" x=\"95.410156\"/>\n",
       "     </g>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"xtick_15\">\n",
       "    <g id=\"line2d_18\">\n",
       "     <path d=\"M 126.345471 43.725515 \n",
       "L 127.915497 44.13342 \n",
       "\" style=\"fill: none; stroke: #000000; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "    </g>\n",
       "    <g id=\"text_17\">\n",
       "     <!-- 1.0 -->\n",
       "     <g transform=\"translate(134.789101 49.449344)scale(0.1 -0.1)\">\n",
       "      <use xlink:href=\"#DejaVuSans-31\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-2e\" x=\"63.623047\"/>\n",
       "      <use xlink:href=\"#DejaVuSans-30\" x=\"95.410156\"/>\n",
       "     </g>\n",
       "    </g>\n",
       "   </g>\n",
       "  </g>\n",
       "  <g id=\"axes_1\">\n",
       "   <g id=\"Line3DCollection_4\">\n",
       "    <path d=\"M 28.470214 79.828939 \n",
       "L 29.065397 80.011607 \n",
       "L 29.661088 80.194693 \n",
       "L 30.257284 80.378214 \n",
       "L 30.853989 80.562189 \n",
       "L 31.451205 80.746634 \n",
       "L 32.04893 80.931563 \n",
       "L 32.647164 81.116988 \n",
       "L 33.245909 81.302919 \n",
       "L 33.845168 81.48936 \n",
       "L 34.444936 81.676314 \n",
       "L 35.045217 81.863777 \n",
       "L 35.646007 82.05174 \n",
       "L 36.247308 82.240189 \n",
       "L 36.84912 82.429104 \n",
       "L 37.451441 82.618455 \n",
       "L 38.054273 82.808209 \n",
       "L 38.657613 82.998322 \n",
       "L 39.261458 83.188743 \n",
       "L 39.865807 83.379416 \n",
       "L 40.470661 83.570274 \n",
       "L 41.076017 83.761244 \n",
       "L 41.681876 83.952247 \n",
       "L 42.288232 84.143196 \n",
       "L 42.895088 84.334 \n",
       "L 43.502438 84.524564 \n",
       "L 44.110284 84.714789 \n",
       "L 44.718623 84.904574 \n",
       "L 45.327456 85.09382 \n",
       "L 45.936779 85.282426 \n",
       "L 46.546594 85.470298 \n",
       "L 47.156902 85.657346 \n",
       "L 47.767699 85.843484 \n",
       "L 48.378989 86.028639 \n",
       "L 48.990772 86.212746 \n",
       "L 49.603048 86.395753 \n",
       "L 50.215819 86.57762 \n",
       "L 50.829089 86.758326 \n",
       "L 51.442858 86.937863 \n",
       "L 52.05713 87.116239 \n",
       "L 52.671908 87.293483 \n",
       "L 53.287197 87.46964 \n",
       "L 53.902997 87.644771 \n",
       "L 54.519314 87.818958 \n",
       "L 55.136154 87.992296 \n",
       "L 55.753517 88.164896 \n",
       "L 56.371409 88.336885 \n",
       "L 56.989836 88.508399 \n",
       "L 57.608797 88.679586 \n",
       "L 58.2283 88.8506 \n",
       "L 58.848348 89.021602 \n",
       "L 59.468942 89.192755 \n",
       "L 60.090087 89.364222 \n",
       "L 60.711784 89.536164 \n",
       "L 61.334036 89.708737 \n",
       "L 61.956849 89.882091 \n",
       "L 62.580216 90.056363 \n",
       "L 63.204143 90.231681 \n",
       "L 63.828629 90.408158 \n",
       "L 64.453675 90.585893 \n",
       "L 65.079282 90.764968 \n",
       "L 65.705451 90.94545 \n",
       "L 66.332175 91.127384 \n",
       "L 66.959458 91.3108 \n",
       "L 67.587296 91.495712 \n",
       "L 68.21569 91.682113 \n",
       "L 68.844637 91.869983 \n",
       "L 69.474137 92.059285 \n",
       "L 70.104192 92.249968 \n",
       "L 70.734792 92.441969 \n",
       "L 71.36594 92.635214 \n",
       "L 71.997634 92.82962 \n",
       "L 72.629875 93.025098 \n",
       "L 73.26266 93.221551 \n",
       "L 73.895993 93.418882 \n",
       "L 74.529865 93.616988 \n",
       "L 75.16428 93.815768 \n",
       "L 75.799238 94.015125 \n",
       "L 76.434739 94.214961 \n",
       "L 77.070783 94.415184 \n",
       "L 77.70737 94.615707 \n",
       "L 78.344505 94.81645 \n",
       "L 78.982181 95.017337 \n",
       "L 79.620403 95.218301 \n",
       "L 80.259171 95.419283 \n",
       "L 80.898488 95.620233 \n",
       "L 81.538353 95.821105 \n",
       "L 82.178772 96.021865 \n",
       "L 82.819739 96.222482 \n",
       "L 83.461259 96.422935 \n",
       "L 84.103332 96.623208 \n",
       "L 84.745962 96.823292 \n",
       "L 85.389148 97.023184 \n",
       "L 86.032895 97.222886 \n",
       "L 86.677198 97.422399 \n",
       "L 87.322062 97.621735 \n",
       "L 87.967487 97.820904 \n",
       "L 88.613475 98.019922 \n",
       "L 89.260027 98.218804 \n",
       "L 89.907144 98.417568 \n",
       "L 90.55483 98.616234 \n",
       "\" clip-path=\"url(#pd88908de6b)\" style=\"fill: none; stroke: #1f77b4; stroke-width: 1.5\"/>\n",
       "    <path d=\"M 32.347334 76.777719 \n",
       "L 32.940066 76.965117 \n",
       "L 33.533322 77.153782 \n",
       "L 34.1271 77.343789 \n",
       "L 34.721404 77.535213 \n",
       "L 35.316235 77.728121 \n",
       "L 35.911592 77.922573 \n",
       "L 36.507477 78.118618 \n",
       "L 37.103888 78.316294 \n",
       "L 37.700827 78.515624 \n",
       "L 38.29829 78.716613 \n",
       "L 38.896277 78.919247 \n",
       "L 39.494783 79.123488 \n",
       "L 40.093806 79.329275 \n",
       "L 40.693342 79.53652 \n",
       "L 41.293387 79.745104 \n",
       "L 41.893937 79.954881 \n",
       "L 42.494984 80.165669 \n",
       "L 43.096521 80.377256 \n",
       "L 43.698542 80.589397 \n",
       "L 44.301041 80.801818 \n",
       "L 44.90401 81.014209 \n",
       "L 45.507443 81.226237 \n",
       "L 46.111329 81.437538 \n",
       "L 46.715665 81.647731 \n",
       "L 47.320439 81.856411 \n",
       "L 47.925647 82.063166 \n",
       "L 48.531283 82.267575 \n",
       "L 49.137344 82.469214 \n",
       "L 49.743822 82.667668 \n",
       "L 50.350716 82.862536 \n",
       "L 50.958025 83.053437 \n",
       "L 51.565745 83.240018 \n",
       "L 52.173879 83.421965 \n",
       "L 52.782432 83.599008 \n",
       "L 53.391403 83.770926 \n",
       "L 54.000799 83.937556 \n",
       "L 54.61063 84.098801 \n",
       "L 55.220899 84.254627 \n",
       "L 55.831618 84.405074 \n",
       "L 56.442797 84.550256 \n",
       "L 57.05445 84.69036 \n",
       "L 57.666586 84.825648 \n",
       "L 58.279218 84.956453 \n",
       "L 58.892363 85.083178 \n",
       "L 59.50603 85.206289 \n",
       "L 60.120234 85.326311 \n",
       "L 60.734989 85.44382 \n",
       "L 61.350305 85.559431 \n",
       "L 61.966195 85.673795 \n",
       "L 62.582671 85.787584 \n",
       "L 63.199738 85.901483 \n",
       "L 63.817408 86.016176 \n",
       "L 64.435686 86.13234 \n",
       "L 65.054577 86.25063 \n",
       "L 65.674088 86.371671 \n",
       "L 66.294215 86.496044 \n",
       "L 66.91496 86.624284 \n",
       "L 67.536324 86.756871 \n",
       "L 68.158303 86.894218 \n",
       "L 68.780894 87.036671 \n",
       "L 69.404096 87.184505 \n",
       "L 70.027894 87.337919 \n",
       "L 70.652287 87.497037 \n",
       "L 71.277267 87.661912 \n",
       "L 71.902826 87.832521 \n",
       "L 72.528956 88.008775 \n",
       "L 73.15565 88.190518 \n",
       "L 73.782903 88.377538 \n",
       "L 74.4107 88.569567 \n",
       "L 75.039038 88.766296 \n",
       "L 75.667911 88.967374 \n",
       "L 76.297312 89.172422 \n",
       "L 76.927237 89.381037 \n",
       "L 77.557685 89.592804 \n",
       "L 78.188645 89.807296 \n",
       "L 78.820119 90.024089 \n",
       "L 79.452104 90.242765 \n",
       "L 80.0846 90.462917 \n",
       "L 80.717606 90.684156 \n",
       "L 81.351123 90.906116 \n",
       "L 81.985156 91.128457 \n",
       "L 82.619699 91.350864 \n",
       "L 83.254758 91.573055 \n",
       "L 83.890336 91.79478 \n",
       "L 84.526435 92.015823 \n",
       "L 85.163059 92.235998 \n",
       "L 85.800215 92.455153 \n",
       "L 86.437898 92.673165 \n",
       "L 87.076116 92.889942 \n",
       "L 87.714873 93.105418 \n",
       "L 88.354171 93.319555 \n",
       "L 88.994013 93.532334 \n",
       "L 89.634408 93.743761 \n",
       "L 90.275348 93.953854 \n",
       "L 90.916842 94.16265 \n",
       "L 91.558891 94.370199 \n",
       "L 92.201498 94.576559 \n",
       "L 92.844664 94.781798 \n",
       "L 93.488392 94.98599 \n",
       "L 94.132686 95.189212 \n",
       "\" clip-path=\"url(#pd88908de6b)\" style=\"fill: none; stroke: #1f77b4; stroke-width: 1.5\"/>\n",
       "    <path d=\"M 36.171416 73.854136 \n",
       "L 36.762021 74.058688 \n",
       "L 37.353194 74.266794 \n",
       "L 37.944935 74.478688 \n",
       "L 38.537247 74.694593 \n",
       "L 39.130134 74.914713 \n",
       "L 39.723593 75.13923 \n",
       "L 40.317624 75.368293 \n",
       "L 40.912225 75.602018 \n",
       "L 41.507393 75.840472 \n",
       "L 42.103121 76.08367 \n",
       "L 42.699404 76.331566 \n",
       "L 43.296229 76.584046 \n",
       "L 43.893589 76.84092 \n",
       "L 44.49147 77.101918 \n",
       "L 45.089858 77.366678 \n",
       "L 45.68874 77.63475 \n",
       "L 46.288096 77.905584 \n",
       "L 46.887907 78.17853 \n",
       "L 47.488153 78.452844 \n",
       "L 48.088815 78.727683 \n",
       "L 48.689872 79.002112 \n",
       "L 49.291305 79.275109 \n",
       "L 49.893088 79.545572 \n",
       "L 50.495206 79.812335 \n",
       "L 51.097635 80.074175 \n",
       "L 51.700361 80.329831 \n",
       "L 52.303367 80.578024 \n",
       "L 52.906642 80.81747 \n",
       "L 53.510173 81.046904 \n",
       "L 54.113953 81.265106 \n",
       "L 54.717982 81.470918 \n",
       "L 55.322255 81.663271 \n",
       "L 55.926779 81.841206 \n",
       "L 56.531563 82.003899 \n",
       "L 57.136616 82.150681 \n",
       "L 57.741956 82.281053 \n",
       "L 58.347605 82.394711 \n",
       "L 58.953582 82.491556 \n",
       "L 59.559916 82.571701 \n",
       "L 60.166637 82.635486 \n",
       "L 60.773778 82.683476 \n",
       "L 61.381369 82.716459 \n",
       "L 61.989446 82.735444 \n",
       "L 62.598048 82.741651 \n",
       "L 63.207204 82.736492 \n",
       "L 63.816952 82.721559 \n",
       "L 64.427325 82.698598 \n",
       "L 65.038352 82.669484 \n",
       "L 65.65006 82.636195 \n",
       "L 66.262477 82.600778 \n",
       "L 66.875621 82.565318 \n",
       "L 67.48951 82.531908 \n",
       "L 68.104156 82.50261 \n",
       "L 68.719569 82.479425 \n",
       "L 69.335756 82.464264 \n",
       "L 69.952708 82.458913 \n",
       "L 70.570425 82.465011 \n",
       "L 71.188897 82.484023 \n",
       "L 71.808113 82.517222 \n",
       "L 72.428056 82.565672 \n",
       "L 73.048712 82.630218 \n",
       "L 73.670051 82.711475 \n",
       "L 74.292055 82.809831 \n",
       "L 74.9147 82.925445 \n",
       "L 75.537962 83.058255 \n",
       "L 76.161815 83.207986 \n",
       "L 76.786235 83.374169 \n",
       "L 77.411204 83.556152 \n",
       "L 78.036691 83.75312 \n",
       "L 78.66268 83.96412 \n",
       "L 79.289154 84.188083 \n",
       "L 79.916095 84.423846 \n",
       "L 80.543492 84.670177 \n",
       "L 81.171338 84.925799 \n",
       "L 81.799615 85.189409 \n",
       "L 82.428323 85.459709 \n",
       "L 83.057459 85.735417 \n",
       "L 83.687022 86.015289 \n",
       "L 84.317013 86.298137 \n",
       "L 84.947436 86.582837 \n",
       "L 85.578299 86.868348 \n",
       "L 86.209602 87.153712 \n",
       "L 86.841356 87.438066 \n",
       "L 87.47357 87.720648 \n",
       "L 88.106253 88.000794 \n",
       "L 88.739415 88.277939 \n",
       "L 89.373069 88.55162 \n",
       "L 90.007218 88.821461 \n",
       "L 90.641875 89.087182 \n",
       "L 91.27705 89.348585 \n",
       "L 91.912752 89.605549 \n",
       "L 92.548988 89.858022 \n",
       "L 93.185771 90.106016 \n",
       "L 93.823099 90.349593 \n",
       "L 94.460982 90.588865 \n",
       "L 95.099426 90.823983 \n",
       "L 95.738434 91.055126 \n",
       "L 96.378012 91.2825 \n",
       "L 97.018162 91.506329 \n",
       "L 97.65889 91.726849 \n",
       "\" clip-path=\"url(#pd88908de6b)\" style=\"fill: none; stroke: #1f77b4; stroke-width: 1.5\"/>\n",
       "    <path d=\"M 39.94358 71.080943 \n",
       "L 40.532361 71.318578 \n",
       "L 41.121778 71.563901 \n",
       "L 41.711831 71.817425 \n",
       "L 42.302527 72.079641 \n",
       "L 42.893867 72.351002 \n",
       "L 43.485845 72.631905 \n",
       "L 44.078461 72.922681 \n",
       "L 44.671708 73.223578 \n",
       "L 45.265576 73.534744 \n",
       "L 45.860051 73.856206 \n",
       "L 46.455118 74.187862 \n",
       "L 47.050756 74.529452 \n",
       "L 47.646943 74.880555 \n",
       "L 48.243652 75.240566 \n",
       "L 48.840855 75.608683 \n",
       "L 49.438519 75.983904 \n",
       "L 50.036609 76.365009 \n",
       "L 50.635084 76.750566 \n",
       "L 51.233908 77.138923 \n",
       "L 51.83304 77.528218 \n",
       "L 52.432439 77.916385 \n",
       "L 53.032066 78.301169 \n",
       "L 53.631879 78.680139 \n",
       "L 54.231843 79.050724 \n",
       "L 54.831919 79.41023 \n",
       "L 55.43208 79.755883 \n",
       "L 56.032297 80.084862 \n",
       "L 56.632551 80.394345 \n",
       "L 57.232824 80.681548 \n",
       "L 57.833109 80.943787 \n",
       "L 58.433405 81.178513 \n",
       "L 59.033717 81.383374 \n",
       "L 59.634059 81.556256 \n",
       "L 60.234455 81.695343 \n",
       "L 60.834933 81.799152 \n",
       "L 61.435531 81.866581 \n",
       "L 62.036296 81.896948 \n",
       "L 62.637275 81.890016 \n",
       "L 63.238527 81.846021 \n",
       "L 63.840114 81.76569 \n",
       "L 64.442103 81.650243 \n",
       "L 65.044558 81.501397 \n",
       "L 65.64755 81.321352 \n",
       "L 66.251149 81.11277 \n",
       "L 66.85542 80.878749 \n",
       "L 67.460428 80.622779 \n",
       "L 68.066235 80.348697 \n",
       "L 68.672893 80.060633 \n",
       "L 69.280452 79.762946 \n",
       "L 69.888954 79.460157 \n",
       "L 70.498428 79.156885 \n",
       "L 71.1089 78.857763 \n",
       "L 71.720385 78.56737 \n",
       "L 72.332888 78.290158 \n",
       "L 72.946409 78.030379 \n",
       "L 73.560927 77.792022 \n",
       "L 74.176425 77.578748 \n",
       "L 74.792872 77.393837 \n",
       "L 75.410234 77.240145 \n",
       "L 76.028467 77.120064 \n",
       "L 76.647528 77.035495 \n",
       "L 77.267359 76.987836 \n",
       "L 77.887909 76.977968 \n",
       "L 78.509124 77.006264 \n",
       "L 79.13095 77.072601 \n",
       "L 79.753332 77.176379 \n",
       "L 80.37622 77.31656 \n",
       "L 80.999569 77.491695 \n",
       "L 81.623327 77.699977 \n",
       "L 82.247459 77.93928 \n",
       "L 82.871932 78.207222 \n",
       "L 83.496715 78.501209 \n",
       "L 84.121788 78.818492 \n",
       "L 84.747138 79.156222 \n",
       "L 85.372746 79.511499 \n",
       "L 85.998612 79.881425 \n",
       "L 86.624735 80.263143 \n",
       "L 87.251122 80.653886 \n",
       "L 87.877782 81.051003 \n",
       "L 88.504729 81.451999 \n",
       "L 89.131984 81.854555 \n",
       "L 89.759559 82.256542 \n",
       "L 90.38748 82.65605 \n",
       "L 91.015769 83.051384 \n",
       "L 91.644451 83.441073 \n",
       "L 92.273549 83.823868 \n",
       "L 92.903092 84.198739 \n",
       "L 93.533095 84.564863 \n",
       "L 94.163584 84.921621 \n",
       "L 94.79458 85.268575 \n",
       "L 95.426104 85.605462 \n",
       "L 96.058171 85.932172 \n",
       "L 96.690802 86.248732 \n",
       "L 97.324003 86.555286 \n",
       "L 97.957789 86.852084 \n",
       "L 98.59217 87.139461 \n",
       "L 99.227155 87.417819 \n",
       "L 99.862749 87.687617 \n",
       "L 100.498958 87.94935 \n",
       "L 101.135787 88.203542 \n",
       "\" clip-path=\"url(#pd88908de6b)\" style=\"fill: none; stroke: #1f77b4; stroke-width: 1.5\"/>\n",
       "    <path d=\"M 43.661929 68.376275 \n",
       "L 44.24878 68.650895 \n",
       "L 44.836318 68.937777 \n",
       "L 45.424546 69.237746 \n",
       "L 46.013465 69.551587 \n",
       "L 46.603077 69.880022 \n",
       "L 47.193375 70.223686 \n",
       "L 47.78435 70.583108 \n",
       "L 48.375991 70.958679 \n",
       "L 48.968284 71.350631 \n",
       "L 49.561202 71.759002 \n",
       "L 50.154725 72.183619 \n",
       "L 50.748818 72.624061 \n",
       "L 51.343447 73.079641 \n",
       "L 51.938573 73.54938 \n",
       "L 52.534151 74.031986 \n",
       "L 53.130136 74.525841 \n",
       "L 53.726474 75.028985 \n",
       "L 54.32311 75.539111 \n",
       "L 54.919991 76.053571 \n",
       "L 55.51706 76.569374 \n",
       "L 56.11426 77.083208 \n",
       "L 56.71154 77.591459 \n",
       "L 57.308842 78.090238 \n",
       "L 57.906123 78.575432 \n",
       "L 58.503334 79.042731 \n",
       "L 59.100442 79.487703 \n",
       "L 59.697415 79.90584 \n",
       "L 60.294233 80.292637 \n",
       "L 60.890883 80.643653 \n",
       "L 61.487362 80.954598 \n",
       "L 62.083683 81.221405 \n",
       "L 62.679861 81.440314 \n",
       "L 63.27593 81.60795 \n",
       "L 63.871935 81.721399 \n",
       "L 64.467926 81.778288 \n",
       "L 65.06397 81.776838 \n",
       "L 65.66014 81.715935 \n",
       "L 66.256517 81.595181 \n",
       "L 66.85319 81.414919 \n",
       "L 67.450254 81.176276 \n",
       "L 68.047808 80.881165 \n",
       "L 68.64595 80.532291 \n",
       "L 69.244779 80.133131 \n",
       "L 69.844396 79.687903 \n",
       "L 70.444889 79.201529 \n",
       "L 71.046347 78.679562 \n",
       "L 71.648851 78.128121 \n",
       "L 72.252465 77.553804 \n",
       "L 72.857249 76.963589 \n",
       "L 73.46325 76.364726 \n",
       "L 74.070496 75.764632 \n",
       "L 74.679006 75.170766 \n",
       "L 75.288782 74.590511 \n",
       "L 75.899814 74.031058 \n",
       "L 76.51208 73.499286 \n",
       "L 77.125533 73.001668 \n",
       "L 77.740127 72.544145 \n",
       "L 78.3558 72.132061 \n",
       "L 78.972479 71.770068 \n",
       "L 79.590087 71.46208 \n",
       "L 80.208541 71.211213 \n",
       "L 80.827748 71.01977 \n",
       "L 81.447618 70.889213 \n",
       "L 82.068064 70.820176 \n",
       "L 82.688997 70.812489 \n",
       "L 83.310334 70.865204 \n",
       "L 83.931996 70.976654 \n",
       "L 84.553915 71.144507 \n",
       "L 85.176022 71.365838 \n",
       "L 85.798266 71.637212 \n",
       "L 86.420603 71.954769 \n",
       "L 87.042999 72.314303 \n",
       "L 87.665429 72.711363 \n",
       "L 88.287885 73.141331 \n",
       "L 88.910354 73.599508 \n",
       "L 89.532846 74.081197 \n",
       "L 90.155373 74.581776 \n",
       "L 90.777957 75.096762 \n",
       "L 91.400625 75.621873 \n",
       "L 92.023411 76.153073 \n",
       "L 92.646355 76.686617 \n",
       "L 93.269492 77.219073 \n",
       "L 93.892867 77.747356 \n",
       "L 94.516526 78.268739 \n",
       "L 95.140512 78.780853 \n",
       "L 95.76487 79.281691 \n",
       "L 96.389646 79.7696 \n",
       "L 97.014873 80.243261 \n",
       "L 97.640593 80.701682 \n",
       "L 98.266841 81.144168 \n",
       "L 98.893648 81.570301 \n",
       "L 99.521043 81.979911 \n",
       "L 100.149054 82.373048 \n",
       "L 100.777695 82.749951 \n",
       "L 101.406985 83.111028 \n",
       "L 102.03694 83.456821 \n",
       "L 102.667569 83.787985 \n",
       "L 103.29888 84.105257 \n",
       "L 103.930878 84.409441 \n",
       "L 104.563568 84.701381 \n",
       "\" clip-path=\"url(#pd88908de6b)\" style=\"fill: none; stroke: #1f77b4; stroke-width: 1.5\"/>\n",
       "    <path d=\"M 47.323363 65.565456 \n",
       "L 47.907643 65.855189 \n",
       "L 48.4926 66.15921 \n",
       "L 49.078233 66.478482 \n",
       "L 49.664543 66.813919 \n",
       "L 50.251528 67.166364 \n",
       "L 50.839176 67.536554 \n",
       "L 51.427479 67.925105 \n",
       "L 52.01642 68.33247 \n",
       "L 52.605982 68.758919 \n",
       "L 53.196135 69.20449 \n",
       "L 53.786853 69.668981 \n",
       "L 54.3781 70.151893 \n",
       "L 54.969837 70.652423 \n",
       "L 55.562021 71.169425 \n",
       "L 56.154607 71.701385 \n",
       "L 56.747544 72.246414 \n",
       "L 57.340777 72.802222 \n",
       "L 57.934252 73.366114 \n",
       "L 58.527912 73.934999 \n",
       "L 59.121703 74.505389 \n",
       "L 59.715569 75.073418 \n",
       "L 60.309462 75.634877 \n",
       "L 60.903329 76.185229 \n",
       "L 61.49713 76.719681 \n",
       "L 62.090827 77.233218 \n",
       "L 62.68439 77.720671 \n",
       "L 63.277801 78.176798 \n",
       "L 63.871051 78.596349 \n",
       "L 64.464136 78.974155 \n",
       "L 65.057071 79.305223 \n",
       "L 65.649879 79.584816 \n",
       "L 66.242593 79.808559 \n",
       "L 66.835263 79.972517 \n",
       "L 67.427949 80.073297 \n",
       "L 68.020716 80.108127 \n",
       "L 68.613648 80.07493 \n",
       "L 69.206834 79.9724 \n",
       "L 69.800367 79.800053 \n",
       "L 70.394351 79.558283 \n",
       "L 70.98889 79.248377 \n",
       "L 71.584095 78.872547 \n",
       "L 72.180067 78.433923 \n",
       "L 72.776914 77.936536 \n",
       "L 73.374735 77.385279 \n",
       "L 73.973619 76.78587 \n",
       "L 74.573651 76.144764 \n",
       "L 75.174904 75.469079 \n",
       "L 75.777432 74.766501 \n",
       "L 76.381283 74.04516 \n",
       "L 76.986486 73.313514 \n",
       "L 77.593052 72.58022 \n",
       "L 78.200978 71.853992 \n",
       "L 78.810243 71.143462 \n",
       "L 79.420813 70.457045 \n",
       "L 80.032638 69.802796 \n",
       "L 80.645646 69.188302 \n",
       "L 81.259761 68.620533 \n",
       "L 81.874895 68.105757 \n",
       "L 82.49095 67.649447 \n",
       "L 83.107821 67.256203 \n",
       "L 83.725404 66.929697 \n",
       "L 84.34358 66.672644 \n",
       "L 84.962243 66.486775 \n",
       "L 85.581287 66.372852 \n",
       "L 86.20061 66.330687 \n",
       "L 86.820118 66.359182 \n",
       "L 87.439724 66.456391 \n",
       "L 88.059358 66.61959 \n",
       "L 88.678947 66.845356 \n",
       "L 89.298444 67.129666 \n",
       "L 89.91781 67.467996 \n",
       "L 90.537019 67.855421 \n",
       "L 91.156056 68.286722 \n",
       "L 91.774926 68.75649 \n",
       "L 92.393631 69.259215 \n",
       "L 93.012195 69.7894 \n",
       "L 93.630649 70.341626 \n",
       "L 94.249033 70.910647 \n",
       "L 94.867391 71.491447 \n",
       "L 95.485777 72.079303 \n",
       "L 96.104248 72.669834 \n",
       "L 96.722856 73.259024 \n",
       "L 97.341664 73.843269 \n",
       "L 97.960733 74.41938 \n",
       "L 98.580122 74.984589 \n",
       "L 99.199889 75.536554 \n",
       "L 99.820091 76.073347 \n",
       "L 100.440773 76.593426 \n",
       "L 101.061985 77.09564 \n",
       "L 101.68377 77.579179 \n",
       "L 102.306167 78.043557 \n",
       "L 102.929207 78.48858 \n",
       "L 103.552924 78.914311 \n",
       "L 104.177333 79.321031 \n",
       "L 104.802455 79.709219 \n",
       "L 105.428306 80.079513 \n",
       "L 106.054895 80.432678 \n",
       "L 106.682228 80.76958 \n",
       "L 107.310307 81.091157 \n",
       "L 107.939137 81.398398 \n",
       "\" clip-path=\"url(#pd88908de6b)\" style=\"fill: none; stroke: #1f77b4; stroke-width: 1.5\"/>\n",
       "    <path d=\"M 50.928349 62.552891 \n",
       "L 51.509375 62.821827 \n",
       "L 52.091008 63.102905 \n",
       "L 52.673245 63.396942 \n",
       "L 53.256084 63.704717 \n",
       "L 53.839522 64.026944 \n",
       "L 54.423547 64.364254 \n",
       "L 55.008151 64.717169 \n",
       "L 55.59332 65.086077 \n",
       "L 56.179037 65.471208 \n",
       "L 56.765278 65.872601 \n",
       "L 57.352022 66.290084 \n",
       "L 57.939238 66.723239 \n",
       "L 58.526897 67.171387 \n",
       "L 59.114966 67.633559 \n",
       "L 59.703407 68.108473 \n",
       "L 60.292186 68.594529 \n",
       "L 60.88126 69.089784 \n",
       "L 61.470588 69.591952 \n",
       "L 62.060131 70.098411 \n",
       "L 62.649851 70.606198 \n",
       "L 63.239711 71.11203 \n",
       "L 63.829679 71.612329 \n",
       "L 64.41972 72.103242 \n",
       "L 65.009814 72.580691 \n",
       "L 65.599937 73.04041 \n",
       "L 66.190078 73.478004 \n",
       "L 66.780234 73.889011 \n",
       "L 67.370408 74.268964 \n",
       "L 67.960611 74.613463 \n",
       "L 68.550864 74.918258 \n",
       "L 69.141201 75.17932 \n",
       "L 69.731657 75.392924 \n",
       "L 70.322285 75.555725 \n",
       "L 70.913144 75.66484 \n",
       "L 71.504295 75.71791 \n",
       "L 72.095813 75.713183 \n",
       "L 72.687777 75.649551 \n",
       "L 73.280267 75.526621 \n",
       "L 73.87337 75.344736 \n",
       "L 74.467171 75.105012 \n",
       "L 75.061758 74.809348 \n",
       "L 75.65721 74.460424 \n",
       "L 76.253607 74.061687 \n",
       "L 76.851024 73.617319 \n",
       "L 77.449521 73.132196 \n",
       "L 78.049154 72.611821 \n",
       "L 78.64997 72.062258 \n",
       "L 79.251996 71.490044 \n",
       "L 79.855253 70.902091 \n",
       "L 80.459746 70.305583 \n",
       "L 81.065463 69.707866 \n",
       "L 81.672383 69.116329 \n",
       "L 82.280467 68.538283 \n",
       "L 82.889667 67.98085 \n",
       "L 83.499924 67.450843 \n",
       "L 84.111157 66.95467 \n",
       "L 84.723288 66.498216 \n",
       "L 85.336228 66.086768 \n",
       "L 85.949881 65.724935 \n",
       "L 86.56415 65.416589 \n",
       "L 87.178937 65.164814 \n",
       "L 87.794138 64.971888 \n",
       "L 88.409659 64.83926 \n",
       "L 89.025409 64.767556 \n",
       "L 89.641304 64.756603 \n",
       "L 90.257266 64.805465 \n",
       "L 90.873228 64.912487 \n",
       "L 91.489137 65.075361 \n",
       "L 92.10494 65.291191 \n",
       "L 92.720606 65.556574 \n",
       "L 93.336113 65.867686 \n",
       "L 93.95145 66.220365 \n",
       "L 94.566618 66.610202 \n",
       "L 95.181633 67.032624 \n",
       "L 95.796509 67.482976 \n",
       "L 96.411279 67.95661 \n",
       "L 97.025981 68.448947 \n",
       "L 97.640661 68.95555 \n",
       "L 98.255369 69.472176 \n",
       "L 98.870159 69.994829 \n",
       "L 99.485091 70.5198 \n",
       "L 100.100217 71.04369 \n",
       "L 100.715599 71.563445 \n",
       "L 101.331295 72.076364 \n",
       "L 101.947362 72.580097 \n",
       "L 102.563852 73.07266 \n",
       "L 103.180822 73.552415 \n",
       "L 103.798309 74.018055 \n",
       "L 104.416361 74.468596 \n",
       "L 105.035015 74.903352 \n",
       "L 105.654304 75.321907 \n",
       "L 106.274257 75.724092 \n",
       "L 106.894902 76.109958 \n",
       "L 107.516249 76.47974 \n",
       "L 108.138317 76.833843 \n",
       "L 108.761118 77.172803 \n",
       "L 109.384656 77.497269 \n",
       "L 110.008936 77.807971 \n",
       "L 110.633958 78.105705 \n",
       "L 111.259723 78.391307 \n",
       "\" clip-path=\"url(#pd88908de6b)\" style=\"fill: none; stroke: #1f77b4; stroke-width: 1.5\"/>\n",
       "    <path d=\"M 54.481753 59.437497 \n",
       "L 55.059353 59.664507 \n",
       "L 55.637481 59.899051 \n",
       "L 56.216132 60.141635 \n",
       "L 56.795305 60.392739 \n",
       "L 57.374998 60.652808 \n",
       "L 57.955201 60.922231 \n",
       "L 58.535909 61.201333 \n",
       "L 59.117113 61.490359 \n",
       "L 59.698803 61.789452 \n",
       "L 60.280964 62.09864 \n",
       "L 60.863585 62.417823 \n",
       "L 61.446645 62.746746 \n",
       "L 62.03013 63.084995 \n",
       "L 62.61402 63.431977 \n",
       "L 63.198296 63.786905 \n",
       "L 63.782939 64.148796 \n",
       "L 64.367926 64.516454 \n",
       "L 64.953236 64.888471 \n",
       "L 65.538849 65.263229 \n",
       "L 66.124747 65.638899 \n",
       "L 66.710913 66.013453 \n",
       "L 67.297333 66.384679 \n",
       "L 67.883993 66.750191 \n",
       "L 68.470888 67.107466 \n",
       "L 69.058009 67.453861 \n",
       "L 69.645357 67.78665 \n",
       "L 70.232938 68.103066 \n",
       "L 70.820762 68.400341 \n",
       "L 71.408842 68.675742 \n",
       "L 71.9972 68.926633 \n",
       "L 72.585862 69.150514 \n",
       "L 73.174857 69.345074 \n",
       "L 73.764222 69.508242 \n",
       "L 74.354 69.638235 \n",
       "L 74.944231 69.733596 \n",
       "L 75.534966 69.793247 \n",
       "L 76.126256 69.816517 \n",
       "L 76.718148 69.803175 \n",
       "L 77.310698 69.753456 \n",
       "L 77.903955 69.668071 \n",
       "L 78.497971 69.548222 \n",
       "L 79.092789 69.395594 \n",
       "L 79.688454 69.212348 \n",
       "L 80.285004 69.001097 \n",
       "L 80.882468 68.764884 \n",
       "L 81.480871 68.507133 \n",
       "L 82.080232 68.231611 \n",
       "L 82.680556 67.942373 \n",
       "L 83.281843 67.643695 \n",
       "L 83.884088 67.340015 \n",
       "L 84.487268 67.035864 \n",
       "L 85.091358 66.735788 \n",
       "L 85.696324 66.444278 \n",
       "L 86.302122 66.165702 \n",
       "L 86.908709 65.904229 \n",
       "L 87.516021 65.663773 \n",
       "L 88.124002 65.447922 \n",
       "L 88.732589 65.259895 \n",
       "L 89.341718 65.10249 \n",
       "L 89.951322 64.978051 \n",
       "L 90.561339 64.888442 \n",
       "L 91.171698 64.835034 \n",
       "L 91.782343 64.818687 \n",
       "L 92.393217 64.839768 \n",
       "L 93.004269 64.898153 \n",
       "L 93.615454 64.993256 \n",
       "L 94.226735 65.124055 \n",
       "L 94.838085 65.28913 \n",
       "L 95.449472 65.486706 \n",
       "L 96.060887 65.714701 \n",
       "L 96.672322 65.970776 \n",
       "L 97.283777 66.252386 \n",
       "L 97.89526 66.556838 \n",
       "L 98.50679 66.881336 \n",
       "L 99.11838 67.223036 \n",
       "L 99.73006 67.579094 \n",
       "L 100.341861 67.946711 \n",
       "L 100.953817 68.323169 \n",
       "L 101.565967 68.705871 \n",
       "L 102.17835 69.092369 \n",
       "L 102.79101 69.480388 \n",
       "L 103.403983 69.867841 \n",
       "L 104.017311 70.252852 \n",
       "L 104.631037 70.63376 \n",
       "L 105.245198 71.00912 \n",
       "L 105.85983 71.37771 \n",
       "L 106.474971 71.738517 \n",
       "L 107.090646 72.090734 \n",
       "L 107.706884 72.433753 \n",
       "L 108.323712 72.767145 \n",
       "L 108.94115 73.090653 \n",
       "L 109.559216 73.404166 \n",
       "L 110.177929 73.707713 \n",
       "L 110.797293 74.001434 \n",
       "L 111.41732 74.285574 \n",
       "L 112.038016 74.560462 \n",
       "L 112.659384 74.826493 \n",
       "L 113.281425 75.084115 \n",
       "L 113.904139 75.333815 \n",
       "L 114.527527 75.576107 \n",
       "\" clip-path=\"url(#pd88908de6b)\" style=\"fill: none; stroke: #1f77b4; stroke-width: 1.5\"/>\n",
       "    <path d=\"M 57.988307 56.391447 \n",
       "L 58.562771 56.581056 \n",
       "L 59.137712 56.774108 \n",
       "L 59.713126 56.970828 \n",
       "L 60.289012 57.171433 \n",
       "L 60.865372 57.376123 \n",
       "L 61.442198 57.585072 \n",
       "L 62.019489 57.798428 \n",
       "L 62.597241 58.016301 \n",
       "L 63.175451 58.238758 \n",
       "L 63.75411 58.465812 \n",
       "L 64.333215 58.69742 \n",
       "L 64.912757 58.933469 \n",
       "L 65.492731 59.173777 \n",
       "L 66.073128 59.418079 \n",
       "L 66.653942 59.666025 \n",
       "L 67.235167 59.917177 \n",
       "L 67.816792 60.170999 \n",
       "L 68.39881 60.42686 \n",
       "L 68.981215 60.684039 \n",
       "L 69.564001 60.941714 \n",
       "L 70.147164 61.198976 \n",
       "L 70.730702 61.454833 \n",
       "L 71.314608 61.708213 \n",
       "L 71.898886 61.957982 \n",
       "L 72.483533 62.202951 \n",
       "L 73.068556 62.441897 \n",
       "L 73.653958 62.673573 \n",
       "L 74.239751 62.896733 \n",
       "L 74.825941 63.110147 \n",
       "L 75.412542 63.312629 \n",
       "L 75.999571 63.503053 \n",
       "L 76.587041 63.68038 \n",
       "L 77.174972 63.843678 \n",
       "L 77.763388 63.992147 \n",
       "L 78.352306 64.125135 \n",
       "L 78.941752 64.242159 \n",
       "L 79.53175 64.342924 \n",
       "L 80.12232 64.427332 \n",
       "L 80.713487 64.495495 \n",
       "L 81.305274 64.547745 \n",
       "L 81.897703 64.584628 \n",
       "L 82.49079 64.606914 \n",
       "L 83.084552 64.615584 \n",
       "L 83.679007 64.611822 \n",
       "L 84.274159 64.597003 \n",
       "L 84.870019 64.572674 \n",
       "L 85.466591 64.540532 \n",
       "L 86.063871 64.502402 \n",
       "L 86.661855 64.460203 \n",
       "L 87.260535 64.415926 \n",
       "L 87.859896 64.3716 \n",
       "L 88.459921 64.329254 \n",
       "L 89.060591 64.290896 \n",
       "L 89.661882 64.258468 \n",
       "L 90.26377 64.233827 \n",
       "L 90.866219 64.21871 \n",
       "L 91.469204 64.214706 \n",
       "L 92.072692 64.22324 \n",
       "L 92.676652 64.245548 \n",
       "L 93.281052 64.282663 \n",
       "L 93.885866 64.335406 \n",
       "L 94.491055 64.404374 \n",
       "L 95.096597 64.489942 \n",
       "L 95.702467 64.592266 \n",
       "L 96.308642 64.711284 \n",
       "L 96.915105 64.84673 \n",
       "L 97.521839 64.998145 \n",
       "L 98.128837 65.164898 \n",
       "L 98.736084 65.346195 \n",
       "L 99.34358 65.541112 \n",
       "L 99.951324 65.748609 \n",
       "L 100.55932 65.967555 \n",
       "L 101.167576 66.196754 \n",
       "L 101.776105 66.434965 \n",
       "L 102.384911 66.680923 \n",
       "L 102.994015 66.933366 \n",
       "L 103.603434 67.191048 \n",
       "L 104.213186 67.452762 \n",
       "L 104.823291 67.717351 \n",
       "L 105.433771 67.983725 \n",
       "L 106.04465 68.250872 \n",
       "L 106.655941 68.51786 \n",
       "L 107.26767 68.783853 \n",
       "L 107.879856 69.048108 \n",
       "L 108.492518 69.309981 \n",
       "L 109.105675 69.568924 \n",
       "L 109.719347 69.824485 \n",
       "L 110.333541 70.0763 \n",
       "L 110.948274 70.324096 \n",
       "L 111.563559 70.567681 \n",
       "L 112.179406 70.806938 \n",
       "L 112.795822 71.041815 \n",
       "L 113.412819 71.272325 \n",
       "L 114.030394 71.498528 \n",
       "L 114.648556 71.720533 \n",
       "L 115.267306 71.938485 \n",
       "L 115.886646 72.152559 \n",
       "L 116.506576 72.362957 \n",
       "L 117.127096 72.569893 \n",
       "L 117.748208 72.773599 \n",
       "\" clip-path=\"url(#pd88908de6b)\" style=\"fill: none; stroke: #1f77b4; stroke-width: 1.5\"/>\n",
       "    <path d=\"M 61.449652 53.4911 \n",
       "L 62.021326 53.659298 \n",
       "L 62.593454 53.828699 \n",
       "L 63.166034 53.999375 \n",
       "L 63.739068 54.171397 \n",
       "L 64.312555 54.344831 \n",
       "L 64.886493 54.519734 \n",
       "L 65.460882 54.696152 \n",
       "L 66.035721 54.874124 \n",
       "L 66.611011 55.053671 \n",
       "L 67.186746 55.234796 \n",
       "L 67.76293 55.417488 \n",
       "L 68.339555 55.60171 \n",
       "L 68.916623 55.787402 \n",
       "L 69.494132 55.97448 \n",
       "L 70.07208 56.162829 \n",
       "L 70.650467 56.352308 \n",
       "L 71.22929 56.542743 \n",
       "L 71.808545 56.733929 \n",
       "L 72.388233 56.925631 \n",
       "L 72.968353 57.117583 \n",
       "L 73.548905 57.309489 \n",
       "L 74.12989 57.501027 \n",
       "L 74.711306 57.691847 \n",
       "L 75.293157 57.881581 \n",
       "L 75.875441 58.069842 \n",
       "L 76.458164 58.256229 \n",
       "L 77.041327 58.440339 \n",
       "L 77.624937 58.621765 \n",
       "L 78.208995 58.800106 \n",
       "L 78.793509 58.974975 \n",
       "L 79.378485 59.146007 \n",
       "L 79.963928 59.312861 \n",
       "L 80.549846 59.475235 \n",
       "L 81.136249 59.63287 \n",
       "L 81.723142 59.785551 \n",
       "L 82.310533 59.933124 \n",
       "L 82.898434 60.075494 \n",
       "L 83.486849 60.212628 \n",
       "L 84.075786 60.344566 \n",
       "L 84.665255 60.471417 \n",
       "L 85.255262 60.593361 \n",
       "L 85.845811 60.710651 \n",
       "L 86.436908 60.823606 \n",
       "L 87.028558 60.932617 \n",
       "L 87.620761 61.03813 \n",
       "L 88.21352 61.140652 \n",
       "L 88.806835 61.240736 \n",
       "L 89.400703 61.338976 \n",
       "L 89.995122 61.435997 \n",
       "L 90.590089 61.532448 \n",
       "L 91.185596 61.628986 \n",
       "L 91.781637 61.726272 \n",
       "L 92.378204 61.824955 \n",
       "L 92.975289 61.925667 \n",
       "L 93.572885 62.029008 \n",
       "L 94.170974 62.135539 \n",
       "L 94.76955 62.245775 \n",
       "L 95.368602 62.360175 \n",
       "L 95.968118 62.479139 \n",
       "L 96.568088 62.602999 \n",
       "L 97.168506 62.73202 \n",
       "L 97.769354 62.866393 \n",
       "L 98.370628 63.006238 \n",
       "L 98.97232 63.151604 \n",
       "L 99.574423 63.302471 \n",
       "L 100.176932 63.45875 \n",
       "L 100.779842 63.620294 \n",
       "L 101.383155 63.786898 \n",
       "L 101.986862 63.958303 \n",
       "L 102.590967 64.134212 \n",
       "L 103.19547 64.314287 \n",
       "L 103.800374 64.498163 \n",
       "L 104.405684 64.685453 \n",
       "L 105.011406 64.875756 \n",
       "L 105.61754 65.068662 \n",
       "L 106.224095 65.263763 \n",
       "L 106.831079 65.460655 \n",
       "L 107.438499 65.658949 \n",
       "L 108.046363 65.858269 \n",
       "L 108.654679 66.058263 \n",
       "L 109.263458 66.258603 \n",
       "L 109.872702 66.458985 \n",
       "L 110.482421 66.659141 \n",
       "L 111.092624 66.858827 \n",
       "L 111.703317 67.057837 \n",
       "L 112.314507 67.255991 \n",
       "L 112.926203 67.453143 \n",
       "L 113.538405 67.649175 \n",
       "L 114.151121 67.843998 \n",
       "L 114.764355 68.037548 \n",
       "L 115.37811 68.229789 \n",
       "L 115.992391 68.420703 \n",
       "L 116.607203 68.610295 \n",
       "L 117.222542 68.798582 \n",
       "L 117.838411 68.985601 \n",
       "L 118.454814 69.171399 \n",
       "L 119.071749 69.356033 \n",
       "L 119.689218 69.539567 \n",
       "L 120.307221 69.722071 \n",
       "L 120.925761 69.903622 \n",
       "\" clip-path=\"url(#pd88908de6b)\" style=\"fill: none; stroke: #1f77b4; stroke-width: 1.5\"/>\n",
       "    <path d=\"M 64.865625 50.710108 \n",
       "L 65.434699 50.869096 \n",
       "L 66.00422 51.028461 \n",
       "L 66.574185 51.18822 \n",
       "L 67.144595 51.348389 \n",
       "L 67.715452 51.508986 \n",
       "L 68.286754 51.670021 \n",
       "L 68.858502 51.831508 \n",
       "L 69.430696 51.993455 \n",
       "L 70.003339 52.155868 \n",
       "L 70.576426 52.318747 \n",
       "L 71.149961 52.48209 \n",
       "L 71.723941 52.645888 \n",
       "L 72.298368 52.810126 \n",
       "L 72.873241 52.974787 \n",
       "L 73.448561 53.139842 \n",
       "L 74.02433 53.305258 \n",
       "L 74.600545 53.470995 \n",
       "L 75.177206 53.637004 \n",
       "L 75.754314 53.80323 \n",
       "L 76.33187 53.96961 \n",
       "L 76.909874 54.136075 \n",
       "L 77.488328 54.302548 \n",
       "L 78.067231 54.468947 \n",
       "L 78.646585 54.635186 \n",
       "L 79.22639 54.801173 \n",
       "L 79.806647 54.966814 \n",
       "L 80.387358 55.132013 \n",
       "L 80.968527 55.296675 \n",
       "L 81.550152 55.460704 \n",
       "L 82.132237 55.624011 \n",
       "L 82.714784 55.786508 \n",
       "L 83.297794 55.948115 \n",
       "L 83.88127 56.108762 \n",
       "L 84.465216 56.268386 \n",
       "L 85.049631 56.426938 \n",
       "L 85.63452 56.584382 \n",
       "L 86.219886 56.740694 \n",
       "L 86.805729 56.895868 \n",
       "L 87.392051 57.049913 \n",
       "L 87.978857 57.202855 \n",
       "L 88.566148 57.354737 \n",
       "L 89.153923 57.505618 \n",
       "L 89.742185 57.655576 \n",
       "L 90.330938 57.804701 \n",
       "L 90.920178 57.9531 \n",
       "L 91.509907 58.100892 \n",
       "L 92.100128 58.248209 \n",
       "L 92.690836 58.39519 \n",
       "L 93.282033 58.541983 \n",
       "L 93.873719 58.688742 \n",
       "L 94.465889 58.83562 \n",
       "L 95.058544 58.982776 \n",
       "L 95.651683 59.13036 \n",
       "L 96.245302 59.278524 \n",
       "L 96.839403 59.427408 \n",
       "L 97.433977 59.577143 \n",
       "L 98.029025 59.727852 \n",
       "L 98.624544 59.879643 \n",
       "L 99.220532 60.03261 \n",
       "L 99.816987 60.18683 \n",
       "L 100.413911 60.342368 \n",
       "L 101.011294 60.499266 \n",
       "L 101.609138 60.657555 \n",
       "L 102.207442 60.817244 \n",
       "L 102.806204 60.978329 \n",
       "L 103.405424 61.140791 \n",
       "L 104.005102 61.304593 \n",
       "L 104.605241 61.469689 \n",
       "L 105.205833 61.636016 \n",
       "L 105.806884 61.803505 \n",
       "L 106.408395 61.972077 \n",
       "L 107.010365 62.141645 \n",
       "L 107.612798 62.312119 \n",
       "L 108.215698 62.483405 \n",
       "L 108.81906 62.655406 \n",
       "L 109.42289 62.828025 \n",
       "L 110.027191 63.001169 \n",
       "L 110.631964 63.174744 \n",
       "L 111.237212 63.348664 \n",
       "L 111.842938 63.522845 \n",
       "L 112.449148 63.697211 \n",
       "L 113.055837 63.871688 \n",
       "L 113.663012 64.046215 \n",
       "L 114.270674 64.220734 \n",
       "L 114.878826 64.395196 \n",
       "L 115.48747 64.56956 \n",
       "L 116.096612 64.743792 \n",
       "L 116.706246 64.917862 \n",
       "L 117.316377 65.09175 \n",
       "L 117.927007 65.265442 \n",
       "L 118.538138 65.438929 \n",
       "L 119.14977 65.612206 \n",
       "L 119.761909 65.785277 \n",
       "L 120.374547 65.958143 \n",
       "L 120.98769 66.130814 \n",
       "L 121.601338 66.303301 \n",
       "L 122.215492 66.475618 \n",
       "L 122.830152 66.64778 \n",
       "L 123.445319 66.819803 \n",
       "L 124.060996 66.991708 \n",
       "\" clip-path=\"url(#pd88908de6b)\" style=\"fill: none; stroke: #1f77b4; stroke-width: 1.5\"/>\n",
       "    <path d=\"M 28.470214 79.828939 \n",
       "L 28.86038 79.519501 \n",
       "L 29.249995 79.210897 \n",
       "L 29.63906 78.903172 \n",
       "L 30.027577 78.596369 \n",
       "L 30.41555 78.290535 \n",
       "L 30.802981 77.985722 \n",
       "L 31.189872 77.68198 \n",
       "L 31.576226 77.379363 \n",
       "L 31.962047 77.077924 \n",
       "L 32.347334 76.777719 \n",
       "L 32.732094 76.478801 \n",
       "L 33.116325 76.181226 \n",
       "L 33.500032 75.885042 \n",
       "L 33.883215 75.590299 \n",
       "L 34.265877 75.29704 \n",
       "L 34.64802 75.005305 \n",
       "L 35.029646 74.715125 \n",
       "L 35.410752 74.426528 \n",
       "L 35.791343 74.13953 \n",
       "L 36.171416 73.854136 \n",
       "L 36.550974 73.570344 \n",
       "L 36.930016 73.288135 \n",
       "L 37.30854 73.007482 \n",
       "L 37.686547 72.728341 \n",
       "L 38.064032 72.450654 \n",
       "L 38.440996 72.17435 \n",
       "L 38.817435 71.899337 \n",
       "L 39.193348 71.625514 \n",
       "L 39.568731 71.352761 \n",
       "L 39.94358 71.080943 \n",
       "L 40.317894 70.809912 \n",
       "L 40.691667 70.539508 \n",
       "L 41.064895 70.269555 \n",
       "L 41.437576 69.99987 \n",
       "L 41.809704 69.73026 \n",
       "L 42.181276 69.460527 \n",
       "L 42.552289 69.190466 \n",
       "L 42.922737 68.919873 \n",
       "L 43.292618 68.648543 \n",
       "L 43.661929 68.376275 \n",
       "L 44.030669 68.102873 \n",
       "L 44.398833 67.828152 \n",
       "L 44.76642 67.551937 \n",
       "L 45.13343 67.274068 \n",
       "L 45.499861 66.994401 \n",
       "L 45.865713 66.71281 \n",
       "L 46.230989 66.429191 \n",
       "L 46.595687 66.143461 \n",
       "L 46.95981 65.855561 \n",
       "L 47.323363 65.565456 \n",
       "L 47.686345 65.273137 \n",
       "L 48.048763 64.97862 \n",
       "L 48.410619 64.681944 \n",
       "L 48.771919 64.383173 \n",
       "L 49.132671 64.082395 \n",
       "L 49.492874 63.77972 \n",
       "L 49.852537 63.475277 \n",
       "L 50.211667 63.169214 \n",
       "L 50.570269 62.861693 \n",
       "L 50.928349 62.552891 \n",
       "L 51.285915 62.242993 \n",
       "L 51.642971 61.932199 \n",
       "L 51.999523 61.620708 \n",
       "L 52.355577 61.308721 \n",
       "L 52.71114 60.996444 \n",
       "L 53.066216 60.684077 \n",
       "L 53.420811 60.371815 \n",
       "L 53.774931 60.059845 \n",
       "L 54.128576 59.74835 \n",
       "L 54.481753 59.437497 \n",
       "L 54.834464 59.127443 \n",
       "L 55.186713 58.818329 \n",
       "L 55.538502 58.510283 \n",
       "L 55.889836 58.203418 \n",
       "L 56.240713 57.897833 \n",
       "L 56.591136 57.593611 \n",
       "L 56.941105 57.290816 \n",
       "L 57.290624 56.989501 \n",
       "L 57.639691 56.689704 \n",
       "L 57.988307 56.391447 \n",
       "L 58.336474 56.09474 \n",
       "L 58.684189 55.799586 \n",
       "L 59.031454 55.505971 \n",
       "L 59.378267 55.213874 \n",
       "L 59.724628 54.923267 \n",
       "L 60.070538 54.634111 \n",
       "L 60.415998 54.346365 \n",
       "L 60.761003 54.059982 \n",
       "L 61.105554 53.774912 \n",
       "L 61.449652 53.4911 \n",
       "L 61.793296 53.208491 \n",
       "L 62.136486 52.927029 \n",
       "L 62.479223 52.646656 \n",
       "L 62.821502 52.36732 \n",
       "L 63.163327 52.088963 \n",
       "L 63.504696 51.811534 \n",
       "L 63.845611 51.534981 \n",
       "L 64.18607 51.259256 \n",
       "L 64.526073 50.984314 \n",
       "L 64.865625 50.710108 \n",
       "\" clip-path=\"url(#pd88908de6b)\" style=\"fill: none; stroke: #1f77b4; stroke-width: 1.5\"/>\n",
       "    <path d=\"M 34.444936 81.676314 \n",
       "L 34.832579 81.370532 \n",
       "L 35.219698 81.066503 \n",
       "L 35.606294 80.764376 \n",
       "L 35.992373 80.464303 \n",
       "L 36.377943 80.166447 \n",
       "L 36.763005 79.870981 \n",
       "L 37.147565 79.578081 \n",
       "L 37.53163 79.287929 \n",
       "L 37.915204 79.00071 \n",
       "L 38.29829 78.716613 \n",
       "L 38.680895 78.435822 \n",
       "L 39.06302 78.158521 \n",
       "L 39.444671 77.884884 \n",
       "L 39.825851 77.615076 \n",
       "L 40.206562 77.349249 \n",
       "L 40.586806 77.087535 \n",
       "L 40.966585 76.830048 \n",
       "L 41.345897 76.576875 \n",
       "L 41.724743 76.328074 \n",
       "L 42.103121 76.08367 \n",
       "L 42.481028 75.843648 \n",
       "L 42.858463 75.607955 \n",
       "L 43.235417 75.376494 \n",
       "L 43.611887 75.14912 \n",
       "L 43.987864 74.925638 \n",
       "L 44.36334 74.705804 \n",
       "L 44.738308 74.48932 \n",
       "L 45.112757 74.275834 \n",
       "L 45.486675 74.064947 \n",
       "L 45.860051 73.856206 \n",
       "L 46.232873 73.64911 \n",
       "L 46.605128 73.443116 \n",
       "L 46.976802 73.237637 \n",
       "L 47.347884 73.032056 \n",
       "L 47.718358 72.825724 \n",
       "L 48.088213 72.617968 \n",
       "L 48.457437 72.408107 \n",
       "L 48.826017 72.195448 \n",
       "L 49.193942 71.979306 \n",
       "L 49.561202 71.759002 \n",
       "L 49.927791 71.533881 \n",
       "L 50.293698 71.303321 \n",
       "L 50.65892 71.066733 \n",
       "L 51.023452 70.82358 \n",
       "L 51.38729 70.57338 \n",
       "L 51.750435 70.315711 \n",
       "L 52.112889 70.050223 \n",
       "L 52.474653 69.776641 \n",
       "L 52.835732 69.494769 \n",
       "L 53.196135 69.20449 \n",
       "L 53.555866 68.905776 \n",
       "L 53.914937 68.59868 \n",
       "L 54.273359 68.283338 \n",
       "L 54.631144 67.95997 \n",
       "L 54.988308 67.628871 \n",
       "L 55.34486 67.290413 \n",
       "L 55.700818 66.945034 \n",
       "L 56.056196 66.593229 \n",
       "L 56.411011 66.235554 \n",
       "L 56.765278 65.872601 \n",
       "L 57.119014 65.505004 \n",
       "L 57.472232 65.133427 \n",
       "L 57.824947 64.758546 \n",
       "L 58.177174 64.381051 \n",
       "L 58.528926 64.001627 \n",
       "L 58.880215 63.620955 \n",
       "L 59.231054 63.239697 \n",
       "L 59.581454 62.858491 \n",
       "L 59.931421 62.477949 \n",
       "L 60.280964 62.09864 \n",
       "L 60.630091 61.721095 \n",
       "L 60.978807 61.345798 \n",
       "L 61.327118 60.973184 \n",
       "L 61.675028 60.603636 \n",
       "L 62.022537 60.237492 \n",
       "L 62.369647 59.875029 \n",
       "L 62.71636 59.516476 \n",
       "L 63.062675 59.162011 \n",
       "L 63.408592 58.811762 \n",
       "L 63.75411 58.465812 \n",
       "L 64.099227 58.124199 \n",
       "L 64.443939 57.786926 \n",
       "L 64.788245 57.453955 \n",
       "L 65.132141 57.125218 \n",
       "L 65.475624 56.800617 \n",
       "L 65.818692 56.480031 \n",
       "L 66.161343 56.163318 \n",
       "L 66.503571 55.850324 \n",
       "L 66.845373 55.540876 \n",
       "L 67.186746 55.234796 \n",
       "L 67.527689 54.931899 \n",
       "L 67.868199 54.631995 \n",
       "L 68.208275 54.334895 \n",
       "L 68.54791 54.040415 \n",
       "L 68.887105 53.748372 \n",
       "L 69.225858 53.458587 \n",
       "L 69.564168 53.17089 \n",
       "L 69.902033 52.885119 \n",
       "L 70.239452 52.60112 \n",
       "L 70.576426 52.318747 \n",
       "\" clip-path=\"url(#pd88908de6b)\" style=\"fill: none; stroke: #1f77b4; stroke-width: 1.5\"/>\n",
       "    <path d=\"M 40.470661 83.570274 \n",
       "L 40.855806 83.273466 \n",
       "L 41.240463 82.980109 \n",
       "L 41.624637 82.690542 \n",
       "L 42.008336 82.40512 \n",
       "L 42.391571 82.124221 \n",
       "L 42.774348 81.848239 \n",
       "L 43.156676 81.577583 \n",
       "L 43.538562 81.312675 \n",
       "L 43.920015 81.053942 \n",
       "L 44.301041 80.801818 \n",
       "L 44.681648 80.556728 \n",
       "L 45.06184 80.319094 \n",
       "L 45.441624 80.089318 \n",
       "L 45.821002 79.86778 \n",
       "L 46.199978 79.654828 \n",
       "L 46.578553 79.450768 \n",
       "L 46.956728 79.255859 \n",
       "L 47.334499 79.070301 \n",
       "L 47.711863 78.894224 \n",
       "L 48.088815 78.727683 \n",
       "L 48.465348 78.570646 \n",
       "L 48.841452 78.422985 \n",
       "L 49.217115 78.284475 \n",
       "L 49.592325 78.154778 \n",
       "L 49.967064 78.033446 \n",
       "L 50.341315 77.919911 \n",
       "L 50.71506 77.813486 \n",
       "L 51.088278 77.713365 \n",
       "L 51.460946 77.618623 \n",
       "L 51.83304 77.528218 \n",
       "L 52.204537 77.441001 \n",
       "L 52.57541 77.355721 \n",
       "L 52.945636 77.271035 \n",
       "L 53.315189 77.18552 \n",
       "L 53.684043 77.097692 \n",
       "L 54.052175 77.006013 \n",
       "L 54.419564 76.908915 \n",
       "L 54.786186 76.804821 \n",
       "L 55.152024 76.692155 \n",
       "L 55.51706 76.569374 \n",
       "L 55.881281 76.434981 \n",
       "L 56.244673 76.28755 \n",
       "L 56.60723 76.125743 \n",
       "L 56.968946 75.948332 \n",
       "L 57.329818 75.754219 \n",
       "L 57.689849 75.542444 \n",
       "L 58.049044 75.31221 \n",
       "L 58.407409 75.062891 \n",
       "L 58.764957 74.794037 \n",
       "L 59.121703 74.505389 \n",
       "L 59.477662 74.19688 \n",
       "L 59.832857 73.868632 \n",
       "L 60.187308 73.520958 \n",
       "L 60.54104 73.15436 \n",
       "L 60.894081 72.769512 \n",
       "L 61.246454 72.367263 \n",
       "L 61.59819 71.948609 \n",
       "L 61.949315 71.51469 \n",
       "L 62.29986 71.066765 \n",
       "L 62.649851 70.606198 \n",
       "L 62.99932 70.134433 \n",
       "L 63.348287 69.652989 \n",
       "L 63.696782 69.163415 \n",
       "L 64.044826 68.667287 \n",
       "L 64.392443 68.166182 \n",
       "L 64.739653 67.661658 \n",
       "L 65.086473 67.155237 \n",
       "L 65.432922 66.648382 \n",
       "L 65.779009 66.142498 \n",
       "L 66.124747 65.638899 \n",
       "L 66.470145 65.138803 \n",
       "L 66.815211 64.643326 \n",
       "L 67.15995 64.153476 \n",
       "L 67.504366 63.670137 \n",
       "L 67.848457 63.194085 \n",
       "L 68.192225 62.725967 \n",
       "L 68.535667 62.266313 \n",
       "L 68.87878 61.815536 \n",
       "L 69.22156 61.373938 \n",
       "L 69.564001 60.941714 \n",
       "L 69.906101 60.518957 \n",
       "L 70.247848 60.105675 \n",
       "L 70.589237 59.701788 \n",
       "L 70.930262 59.30714 \n",
       "L 71.270914 58.921512 \n",
       "L 71.611187 58.544629 \n",
       "L 71.951076 58.176166 \n",
       "L 72.29057 57.815768 \n",
       "L 72.629665 57.463044 \n",
       "L 72.968353 57.117583 \n",
       "L 73.30663 56.77896 \n",
       "L 73.644489 56.446744 \n",
       "L 73.981929 56.1205 \n",
       "L 74.31894 55.799803 \n",
       "L 74.655521 55.484232 \n",
       "L 74.991669 55.173379 \n",
       "L 75.327379 54.866853 \n",
       "L 75.662651 54.564282 \n",
       "L 75.997481 54.265312 \n",
       "L 76.33187 53.96961 \n",
       "\" clip-path=\"url(#pd88908de6b)\" style=\"fill: none; stroke: #1f77b4; stroke-width: 1.5\"/>\n",
       "    <path d=\"M 46.546594 85.470298 \n",
       "L 46.929034 85.180817 \n",
       "L 47.311 84.896251 \n",
       "L 47.6925 84.617102 \n",
       "L 48.073544 84.343899 \n",
       "L 48.454142 84.077203 \n",
       "L 48.8343 83.817602 \n",
       "L 49.214028 83.565704 \n",
       "L 49.593335 83.322135 \n",
       "L 49.972229 83.087532 \n",
       "L 50.350716 82.862536 \n",
       "L 50.728803 82.647782 \n",
       "L 51.106494 82.443895 \n",
       "L 51.483794 82.251471 \n",
       "L 51.860706 82.071075 \n",
       "L 52.23723 81.903219 \n",
       "L 52.613368 81.74836 \n",
       "L 52.989115 81.606878 \n",
       "L 53.364466 81.479067 \n",
       "L 53.739415 81.365117 \n",
       "L 54.113953 81.265106 \n",
       "L 54.488068 81.178981 \n",
       "L 54.861749 81.106553 \n",
       "L 55.234976 81.047478 \n",
       "L 55.607733 81.001251 \n",
       "L 55.979998 80.967202 \n",
       "L 56.351749 80.944483 \n",
       "L 56.722963 80.932072 \n",
       "L 57.093613 80.928764 \n",
       "L 57.46367 80.933185 \n",
       "L 57.833109 80.943787 \n",
       "L 58.2019 80.95886 \n",
       "L 58.570013 80.97655 \n",
       "L 58.93742 80.99486 \n",
       "L 59.304095 81.011686 \n",
       "L 59.670008 81.024824 \n",
       "L 60.035136 81.031999 \n",
       "L 60.399455 81.030892 \n",
       "L 60.762944 81.019166 \n",
       "L 61.125584 80.994495 \n",
       "L 61.487362 80.954598 \n",
       "L 61.848267 80.897265 \n",
       "L 62.208288 80.820389 \n",
       "L 62.567424 80.721997 \n",
       "L 62.925675 80.600278 \n",
       "L 63.283042 80.453611 \n",
       "L 63.639536 80.280585 \n",
       "L 63.99517 80.080024 \n",
       "L 64.349956 79.851003 \n",
       "L 64.703915 79.592864 \n",
       "L 65.057071 79.305223 \n",
       "L 65.409446 78.98798 \n",
       "L 65.761071 78.641318 \n",
       "L 66.111975 78.265699 \n",
       "L 66.462189 77.86186 \n",
       "L 66.811749 77.430797 \n",
       "L 67.160684 76.973761 \n",
       "L 67.50903 76.492223 \n",
       "L 67.85682 75.98786 \n",
       "L 68.204087 75.462535 \n",
       "L 68.550864 74.918258 \n",
       "L 68.897182 74.357167 \n",
       "L 69.243066 73.7815 \n",
       "L 69.588543 73.193551 \n",
       "L 69.933639 72.59565 \n",
       "L 70.278375 71.99013 \n",
       "L 70.622768 71.379299 \n",
       "L 70.966835 70.765411 \n",
       "L 71.310592 70.150639 \n",
       "L 71.654043 69.537063 \n",
       "L 71.9972 68.926633 \n",
       "L 72.340065 68.321161 \n",
       "L 72.682643 67.722309 \n",
       "L 73.024933 67.131571 \n",
       "L 73.366936 66.550269 \n",
       "L 73.708642 65.979556 \n",
       "L 74.05005 65.420399 \n",
       "L 74.391153 64.873591 \n",
       "L 74.731941 64.33975 \n",
       "L 75.072408 63.819331 \n",
       "L 75.412542 63.312629 \n",
       "L 75.752337 62.819786 \n",
       "L 76.091779 62.34082 \n",
       "L 76.430859 61.875614 \n",
       "L 76.769567 61.423941 \n",
       "L 77.107894 60.985481 \n",
       "L 77.44583 60.559826 \n",
       "L 77.78337 60.1465 \n",
       "L 78.1205 59.744973 \n",
       "L 78.457215 59.354668 \n",
       "L 78.793509 58.974975 \n",
       "L 79.129375 58.605266 \n",
       "L 79.464807 58.244899 \n",
       "L 79.799804 57.893231 \n",
       "L 80.134356 57.54963 \n",
       "L 80.468463 57.213469 \n",
       "L 80.802121 56.884145 \n",
       "L 81.135329 56.561076 \n",
       "L 81.468085 56.243709 \n",
       "L 81.800387 55.931518 \n",
       "L 82.132237 55.624011 \n",
       "\" clip-path=\"url(#pd88908de6b)\" style=\"fill: none; stroke: #1f77b4; stroke-width: 1.5\"/>\n",
       "    <path d=\"M 52.671908 87.293483 \n",
       "L 53.051209 86.995471 \n",
       "L 53.430006 86.701537 \n",
       "L 53.808301 86.412088 \n",
       "L 54.186101 86.127553 \n",
       "L 54.563413 85.848385 \n",
       "L 54.94024 85.575062 \n",
       "L 55.316587 85.308076 \n",
       "L 55.69246 85.047935 \n",
       "L 56.067863 84.795155 \n",
       "L 56.442797 84.550256 \n",
       "L 56.817269 84.313753 \n",
       "L 57.191278 84.086153 \n",
       "L 57.564825 83.86794 \n",
       "L 57.937913 83.659571 \n",
       "L 58.310539 83.461465 \n",
       "L 58.682702 83.273991 \n",
       "L 59.0544 83.097459 \n",
       "L 59.425625 82.932109 \n",
       "L 59.796373 82.778096 \n",
       "L 60.166637 82.635486 \n",
       "L 60.536407 82.504238 \n",
       "L 60.905676 82.384199 \n",
       "L 61.274429 82.275092 \n",
       "L 61.642656 82.176512 \n",
       "L 62.010341 82.087916 \n",
       "L 62.37747 82.008619 \n",
       "L 62.744028 81.937791 \n",
       "L 63.11 81.87446 \n",
       "L 63.475367 81.817511 \n",
       "L 63.840114 81.76569 \n",
       "L 64.204225 81.717609 \n",
       "L 64.567681 81.671765 \n",
       "L 64.93047 81.626539 \n",
       "L 65.292576 81.580218 \n",
       "L 65.653986 81.531017 \n",
       "L 66.014687 81.477085 \n",
       "L 66.374673 81.416538 \n",
       "L 66.733932 81.347476 \n",
       "L 67.09246 81.268008 \n",
       "L 67.450254 81.176276 \n",
       "L 67.807313 81.070484 \n",
       "L 68.163639 80.948918 \n",
       "L 68.519235 80.80997 \n",
       "L 68.874111 80.652166 \n",
       "L 69.228273 80.474186 \n",
       "L 69.581734 80.274881 \n",
       "L 69.93451 80.053291 \n",
       "L 70.286615 79.808665 \n",
       "L 70.638069 79.540464 \n",
       "L 70.98889 79.248377 \n",
       "L 71.3391 78.932323 \n",
       "L 71.68872 78.592449 \n",
       "L 72.037774 78.229133 \n",
       "L 72.386284 77.842975 \n",
       "L 72.734276 77.434785 \n",
       "L 73.081767 77.005583 \n",
       "L 73.428782 76.556567 \n",
       "L 73.775341 76.089103 \n",
       "L 74.121465 75.604705 \n",
       "L 74.467171 75.105012 \n",
       "L 74.812478 74.591763 \n",
       "L 75.157398 74.066777 \n",
       "L 75.501943 73.53192 \n",
       "L 75.846127 72.989087 \n",
       "L 76.189956 72.440175 \n",
       "L 76.533438 71.887057 \n",
       "L 76.876577 71.331565 \n",
       "L 77.219377 70.775461 \n",
       "L 77.561836 70.220436 \n",
       "L 77.903955 69.668071 \n",
       "L 78.24573 69.119836 \n",
       "L 78.587157 68.577076 \n",
       "L 78.928232 68.041003 \n",
       "L 79.26895 67.512686 \n",
       "L 79.609299 66.99306 \n",
       "L 79.949275 66.482906 \n",
       "L 80.288869 65.982864 \n",
       "L 80.628073 65.493435 \n",
       "L 80.966877 65.014983 \n",
       "L 81.305274 64.547745 \n",
       "L 81.643257 64.091835 \n",
       "L 81.980814 63.647265 \n",
       "L 82.317941 63.213937 \n",
       "L 82.654629 62.791668 \n",
       "L 82.990874 62.380193 \n",
       "L 83.326668 61.979183 \n",
       "L 83.662009 61.588248 \n",
       "L 83.996888 61.206959 \n",
       "L 84.331305 60.834847 \n",
       "L 84.665255 60.471417 \n",
       "L 84.998737 60.116158 \n",
       "L 85.331748 59.76855 \n",
       "L 85.664289 59.42807 \n",
       "L 85.996357 59.094206 \n",
       "L 86.327952 58.76645 \n",
       "L 86.659074 58.444312 \n",
       "L 86.989724 58.127321 \n",
       "L 87.319904 57.815026 \n",
       "L 87.649614 57.507005 \n",
       "L 87.978857 57.202855 \n",
       "\" clip-path=\"url(#pd88908de6b)\" style=\"fill: none; stroke: #1f77b4; stroke-width: 1.5\"/>\n",
       "    <path d=\"M 58.848348 89.021602 \n",
       "L 59.224268 88.696046 \n",
       "L 59.599633 88.370971 \n",
       "L 59.974441 88.046377 \n",
       "L 60.348696 87.722263 \n",
       "L 60.7224 87.398626 \n",
       "L 61.095551 87.075467 \n",
       "L 61.468153 86.752785 \n",
       "L 61.840206 86.430578 \n",
       "L 62.211712 86.108844 \n",
       "L 62.582671 85.787584 \n",
       "L 62.953085 85.466795 \n",
       "L 63.322955 85.146479 \n",
       "L 63.692282 84.826632 \n",
       "L 64.061068 84.507254 \n",
       "L 64.429313 84.188345 \n",
       "L 64.79702 83.869901 \n",
       "L 65.164189 83.551923 \n",
       "L 65.530821 83.234411 \n",
       "L 65.896916 82.917363 \n",
       "L 66.262477 82.600778 \n",
       "L 66.627505 82.284654 \n",
       "L 66.992002 81.968991 \n",
       "L 67.355967 81.653788 \n",
       "L 67.719403 81.339043 \n",
       "L 68.08231 81.024757 \n",
       "L 68.444689 80.710928 \n",
       "L 68.806541 80.397554 \n",
       "L 69.16787 80.084634 \n",
       "L 69.528673 79.772169 \n",
       "L 69.888954 79.460157 \n",
       "L 70.248713 79.148596 \n",
       "L 70.607951 78.837487 \n",
       "L 70.96667 78.526828 \n",
       "L 71.324871 78.216616 \n",
       "L 71.682554 77.906854 \n",
       "L 72.039721 77.597538 \n",
       "L 72.396374 77.288668 \n",
       "L 72.752512 76.980243 \n",
       "L 73.108137 76.672263 \n",
       "L 73.46325 76.364726 \n",
       "L 73.817854 76.05763 \n",
       "L 74.171947 75.750976 \n",
       "L 74.525532 75.444762 \n",
       "L 74.878611 75.138987 \n",
       "L 75.231182 74.833651 \n",
       "L 75.583249 74.528753 \n",
       "L 75.934812 74.22429 \n",
       "L 76.285871 73.920264 \n",
       "L 76.636429 73.616672 \n",
       "L 76.986486 73.313514 \n",
       "L 77.336043 73.010788 \n",
       "L 77.685102 72.708495 \n",
       "L 78.033662 72.406633 \n",
       "L 78.381727 72.1052 \n",
       "L 78.729297 71.804195 \n",
       "L 79.076372 71.50362 \n",
       "L 79.422953 71.203472 \n",
       "L 79.769041 70.90375 \n",
       "L 80.114639 70.604454 \n",
       "L 80.459746 70.305583 \n",
       "L 80.804366 70.007133 \n",
       "L 81.148496 69.709108 \n",
       "L 81.492138 69.411504 \n",
       "L 81.835295 69.114322 \n",
       "L 82.177967 68.81756 \n",
       "L 82.520155 68.521216 \n",
       "L 82.861859 68.225291 \n",
       "L 83.203084 67.929782 \n",
       "L 83.543826 67.634691 \n",
       "L 83.884088 67.340015 \n",
       "L 84.223871 67.045755 \n",
       "L 84.563176 66.751908 \n",
       "L 84.902004 66.458474 \n",
       "L 85.240359 66.165451 \n",
       "L 85.578236 65.87284 \n",
       "L 85.91564 65.58064 \n",
       "L 86.25257 65.288849 \n",
       "L 86.589029 64.997468 \n",
       "L 86.925017 64.706493 \n",
       "L 87.260535 64.415926 \n",
       "L 87.595586 64.125764 \n",
       "L 87.930167 63.836008 \n",
       "L 88.264282 63.546656 \n",
       "L 88.59793 63.257709 \n",
       "L 88.931113 62.969164 \n",
       "L 89.263832 62.68102 \n",
       "L 89.59609 62.393277 \n",
       "L 89.927884 62.105935 \n",
       "L 90.259217 61.818992 \n",
       "L 90.590089 61.532448 \n",
       "L 90.920503 61.246301 \n",
       "L 91.250458 60.960552 \n",
       "L 91.579958 60.675197 \n",
       "L 91.908999 60.390239 \n",
       "L 92.237585 60.105675 \n",
       "L 92.565717 59.821505 \n",
       "L 92.893394 59.537727 \n",
       "L 93.22062 59.254342 \n",
       "L 93.547394 58.971347 \n",
       "L 93.873719 58.688742 \n",
       "\" clip-path=\"url(#pd88908de6b)\" style=\"fill: none; stroke: #1f77b4; stroke-width: 1.5\"/>\n",
       "    <path d=\"M 65.079282 90.764968 \n",
       "L 65.451996 90.411681 \n",
       "L 65.824141 90.055254 \n",
       "L 66.195713 89.695278 \n",
       "L 66.566717 89.331315 \n",
       "L 66.937154 88.962903 \n",
       "L 67.307023 88.589561 \n",
       "L 67.676329 88.210788 \n",
       "L 68.045074 87.826067 \n",
       "L 68.413262 87.43487 \n",
       "L 68.780894 87.036671 \n",
       "L 69.147979 86.630939 \n",
       "L 69.514517 86.21716 \n",
       "L 69.880517 85.794833 \n",
       "L 70.245985 85.363488 \n",
       "L 70.610927 84.922689 \n",
       "L 70.975352 84.47205 \n",
       "L 71.339269 84.011244 \n",
       "L 71.702685 83.540015 \n",
       "L 72.065611 83.058185 \n",
       "L 72.428056 82.565672 \n",
       "L 72.790033 82.062495 \n",
       "L 73.151552 81.548787 \n",
       "L 73.512622 81.024809 \n",
       "L 73.873257 80.490947 \n",
       "L 74.233466 79.947732 \n",
       "L 74.593259 79.395836 \n",
       "L 74.952647 78.836079 \n",
       "L 75.31164 78.269428 \n",
       "L 75.670244 77.697003 \n",
       "L 76.028467 77.120064 \n",
       "L 76.386316 76.540007 \n",
       "L 76.743792 75.958363 \n",
       "L 77.100899 75.376776 \n",
       "L 77.457639 74.796989 \n",
       "L 77.814007 74.220839 \n",
       "L 78.170001 73.650221 \n",
       "L 78.525616 73.087078 \n",
       "L 78.880842 72.533372 \n",
       "L 79.23567 71.991063 \n",
       "L 79.590087 71.46208 \n",
       "L 79.94408 70.948291 \n",
       "L 80.297631 70.451489 \n",
       "L 80.650723 69.97335 \n",
       "L 81.003338 69.515417 \n",
       "L 81.355454 69.079079 \n",
       "L 81.707051 68.66554 \n",
       "L 82.058109 68.275804 \n",
       "L 82.408603 67.910668 \n",
       "L 82.758514 67.570692 \n",
       "L 83.107821 67.256203 \n",
       "L 83.456504 66.967288 \n",
       "L 83.804544 66.703786 \n",
       "L 84.151924 66.465295 \n",
       "L 84.49863 66.251184 \n",
       "L 84.84465 66.060587 \n",
       "L 85.189971 65.89244 \n",
       "L 85.534585 65.745477 \n",
       "L 85.878487 65.618261 \n",
       "L 86.221676 65.509204 \n",
       "L 86.56415 65.416589 \n",
       "L 86.905914 65.338597 \n",
       "L 87.24697 65.273337 \n",
       "L 87.587326 65.218868 \n",
       "L 87.926994 65.173223 \n",
       "L 88.265985 65.134441 \n",
       "L 88.604313 65.100592 \n",
       "L 88.941993 65.069791 \n",
       "L 89.279044 65.040228 \n",
       "L 89.61548 65.010187 \n",
       "L 89.951322 64.978051 \n",
       "L 90.286587 64.94233 \n",
       "L 90.621295 64.901665 \n",
       "L 90.955466 64.854834 \n",
       "L 91.289119 64.800763 \n",
       "L 91.622268 64.738526 \n",
       "L 91.954933 64.667344 \n",
       "L 92.287129 64.586588 \n",
       "L 92.618873 64.495768 \n",
       "L 92.950176 64.394534 \n",
       "L 93.281052 64.282663 \n",
       "L 93.611515 64.160054 \n",
       "L 93.941568 64.026719 \n",
       "L 94.271224 63.882766 \n",
       "L 94.600489 63.728396 \n",
       "L 94.929367 63.563886 \n",
       "L 95.257865 63.38958 \n",
       "L 95.585986 63.205877 \n",
       "L 95.913728 63.013223 \n",
       "L 96.241096 62.812096 \n",
       "L 96.568088 62.602999 \n",
       "L 96.894705 62.386452 \n",
       "L 97.220944 62.162982 \n",
       "L 97.546807 61.933114 \n",
       "L 97.872286 61.697373 \n",
       "L 98.197381 61.456267 \n",
       "L 98.522088 61.210292 \n",
       "L 98.846406 60.959921 \n",
       "L 99.17033 60.705607 \n",
       "L 99.493858 60.447777 \n",
       "L 99.816987 60.18683 \n",
       "\" clip-path=\"url(#pd88908de6b)\" style=\"fill: none; stroke: #1f77b4; stroke-width: 1.5\"/>\n",
       "    <path d=\"M 71.36594 92.635214 \n",
       "L 71.735678 92.27308 \n",
       "L 72.104866 91.906936 \n",
       "L 72.473506 91.536276 \n",
       "L 72.841601 91.160556 \n",
       "L 73.209158 90.779204 \n",
       "L 73.576179 90.391621 \n",
       "L 73.942671 89.997186 \n",
       "L 74.30864 89.595256 \n",
       "L 74.674094 89.185178 \n",
       "L 75.039038 88.766296 \n",
       "L 75.403483 88.337952 \n",
       "L 75.767436 87.899506 \n",
       "L 76.130907 87.450336 \n",
       "L 76.493908 86.989855 \n",
       "L 76.856448 86.517525 \n",
       "L 77.218542 86.032862 \n",
       "L 77.5802 85.535459 \n",
       "L 77.941433 85.024997 \n",
       "L 78.302256 84.501253 \n",
       "L 78.66268 83.96412 \n",
       "L 79.022719 83.413624 \n",
       "L 79.382386 82.849923 \n",
       "L 79.741691 82.273341 \n",
       "L 80.100647 81.684353 \n",
       "L 80.459261 81.083617 \n",
       "L 80.817542 80.471965 \n",
       "L 81.175499 79.850412 \n",
       "L 81.533137 79.220158 \n",
       "L 81.890456 78.582594 \n",
       "L 82.247459 77.93928 \n",
       "L 82.604145 77.291955 \n",
       "L 82.960507 76.642519 \n",
       "L 83.316539 75.993013 \n",
       "L 83.672231 75.345607 \n",
       "L 84.027567 74.702587 \n",
       "L 84.382534 74.06631 \n",
       "L 84.737111 73.439195 \n",
       "L 85.091275 72.823686 \n",
       "L 85.445003 72.222224 \n",
       "L 85.798266 71.637212 \n",
       "L 86.151037 71.070981 \n",
       "L 86.503283 70.525765 \n",
       "L 86.854972 70.003654 \n",
       "L 87.206073 69.506574 \n",
       "L 87.556549 69.036257 \n",
       "L 87.906368 68.594205 \n",
       "L 88.255499 68.181675 \n",
       "L 88.603908 67.799655 \n",
       "L 88.951565 67.44885 \n",
       "L 89.298444 67.129666 \n",
       "L 89.644518 66.842211 \n",
       "L 89.989766 66.586287 \n",
       "L 90.334169 66.361389 \n",
       "L 90.677712 66.16673 \n",
       "L 91.020386 66.001232 \n",
       "L 91.362182 65.863564 \n",
       "L 91.703097 65.752148 \n",
       "L 92.043135 65.665192 \n",
       "L 92.382301 65.600714 \n",
       "L 92.720606 65.556574 \n",
       "L 93.058065 65.530505 \n",
       "L 93.394693 65.520151 \n",
       "L 93.730512 65.52309 \n",
       "L 94.065546 65.536876 \n",
       "L 94.399823 65.559068 \n",
       "L 94.733371 65.587261 \n",
       "L 95.066219 65.619113 \n",
       "L 95.398401 65.652374 \n",
       "L 95.729946 65.684903 \n",
       "L 96.060887 65.714701 \n",
       "L 96.391257 65.739913 \n",
       "L 96.721086 65.75885 \n",
       "L 97.050406 65.77 \n",
       "L 97.379248 65.772028 \n",
       "L 97.707634 65.763787 \n",
       "L 98.035592 65.744315 \n",
       "L 98.363146 65.71283 \n",
       "L 98.690316 65.66873 \n",
       "L 99.017122 65.611581 \n",
       "L 99.34358 65.541112 \n",
       "L 99.669705 65.457199 \n",
       "L 99.995506 65.359859 \n",
       "L 100.320993 65.24923 \n",
       "L 100.646173 65.125564 \n",
       "L 100.971052 64.989207 \n",
       "L 101.295632 64.840589 \n",
       "L 101.619917 64.680206 \n",
       "L 101.943901 64.508613 \n",
       "L 102.267586 64.326407 \n",
       "L 102.590967 64.134212 \n",
       "L 102.914041 63.932674 \n",
       "L 103.236802 63.722448 \n",
       "L 103.559247 63.50419 \n",
       "L 103.881366 63.278548 \n",
       "L 104.203153 63.046156 \n",
       "L 104.524603 62.807628 \n",
       "L 104.845708 62.563553 \n",
       "L 105.16646 62.314493 \n",
       "L 105.486854 62.060979 \n",
       "L 105.806884 61.803505 \n",
       "\" clip-path=\"url(#pd88908de6b)\" style=\"fill: none; stroke: #1f77b4; stroke-width: 1.5\"/>\n",
       "    <path d=\"M 77.70737 94.615707 \n",
       "L 78.074085 94.260728 \n",
       "L 78.440267 93.903207 \n",
       "L 78.805919 93.5428 \n",
       "L 79.171047 93.179141 \n",
       "L 79.535656 92.811841 \n",
       "L 79.89975 92.440499 \n",
       "L 80.263337 92.064691 \n",
       "L 80.626423 91.683987 \n",
       "L 80.989016 91.297942 \n",
       "L 81.351123 90.906116 \n",
       "L 81.712753 90.508064 \n",
       "L 82.073913 90.103355 \n",
       "L 82.434612 89.691569 \n",
       "L 82.794861 89.272311 \n",
       "L 83.154669 88.845218 \n",
       "L 83.514047 88.409966 \n",
       "L 83.873003 87.966281 \n",
       "L 84.231546 87.513951 \n",
       "L 84.589688 87.052825 \n",
       "L 84.947436 86.582837 \n",
       "L 85.304801 86.104004 \n",
       "L 85.66179 85.616437 \n",
       "L 86.018409 85.120358 \n",
       "L 86.374667 84.61609 \n",
       "L 86.730565 84.104081 \n",
       "L 87.086107 83.584894 \n",
       "L 87.441296 83.059218 \n",
       "L 87.796133 82.527864 \n",
       "L 88.150611 81.991772 \n",
       "L 88.504729 81.451999 \n",
       "L 88.85848 80.909714 \n",
       "L 89.211854 80.3662 \n",
       "L 89.564839 79.822836 \n",
       "L 89.917422 79.28108 \n",
       "L 90.269586 78.742472 \n",
       "L 90.621314 78.208597 \n",
       "L 90.972584 77.68108 \n",
       "L 91.323373 77.161566 \n",
       "L 91.673657 76.651693 \n",
       "L 92.023411 76.153073 \n",
       "L 92.372608 75.66727 \n",
       "L 92.72122 75.195782 \n",
       "L 93.069218 74.740011 \n",
       "L 93.416575 74.301246 \n",
       "L 93.763263 73.880647 \n",
       "L 94.109254 73.479221 \n",
       "L 94.454525 73.097807 \n",
       "L 94.799049 72.73707 \n",
       "L 95.142806 72.397478 \n",
       "L 95.485777 72.079303 \n",
       "L 95.827943 71.782618 \n",
       "L 96.169291 71.507289 \n",
       "L 96.509812 71.252979 \n",
       "L 96.849498 71.01916 \n",
       "L 97.188348 70.80511 \n",
       "L 97.526359 70.609939 \n",
       "L 97.863536 70.432588 \n",
       "L 98.199888 70.271856 \n",
       "L 98.535424 70.126415 \n",
       "L 98.870159 69.994829 \n",
       "L 99.204113 69.875578 \n",
       "L 99.537301 69.76708 \n",
       "L 99.869749 69.667709 \n",
       "L 100.20148 69.575821 \n",
       "L 100.53252 69.489775 \n",
       "L 100.862897 69.407953 \n",
       "L 101.19264 69.328778 \n",
       "L 101.521779 69.250734 \n",
       "L 101.850339 69.172382 \n",
       "L 102.17835 69.092369 \n",
       "L 102.50584 69.009445 \n",
       "L 102.832838 68.922469 \n",
       "L 103.159367 68.830418 \n",
       "L 103.485454 68.732389 \n",
       "L 103.811118 68.627606 \n",
       "L 104.136382 68.515415 \n",
       "L 104.461264 68.395285 \n",
       "L 104.78578 68.266806 \n",
       "L 105.109945 68.129682 \n",
       "L 105.433771 67.983725 \n",
       "L 105.75727 67.828849 \n",
       "L 106.080446 67.665062 \n",
       "L 106.403308 67.492455 \n",
       "L 106.725859 67.311194 \n",
       "L 107.048102 67.121509 \n",
       "L 107.370037 66.923691 \n",
       "L 107.691667 66.71807 \n",
       "L 108.012985 66.505022 \n",
       "L 108.33399 66.284946 \n",
       "L 108.654679 66.058263 \n",
       "L 108.975046 65.825408 \n",
       "L 109.295087 65.586823 \n",
       "L 109.614798 65.342948 \n",
       "L 109.934169 65.094224 \n",
       "L 110.253195 64.841075 \n",
       "L 110.57187 64.583917 \n",
       "L 110.890187 64.323146 \n",
       "L 111.208142 64.059143 \n",
       "L 111.525727 63.792264 \n",
       "L 111.842938 63.522845 \n",
       "\" clip-path=\"url(#pd88908de6b)\" style=\"fill: none; stroke: #1f77b4; stroke-width: 1.5\"/>\n",
       "    <path d=\"M 84.103332 96.623208 \n",
       "L 84.466841 96.277105 \n",
       "L 84.829818 95.930182 \n",
       "L 85.192264 95.582288 \n",
       "L 85.554183 95.233265 \n",
       "L 85.91558 94.88294 \n",
       "L 86.276458 94.531139 \n",
       "L 86.636821 94.177677 \n",
       "L 86.996675 93.822365 \n",
       "L 87.356024 93.465009 \n",
       "L 87.714873 93.105418 \n",
       "L 88.073228 92.743396 \n",
       "L 88.431092 92.378757 \n",
       "L 88.788472 92.011316 \n",
       "L 89.145374 91.640902 \n",
       "L 89.501803 91.267357 \n",
       "L 89.857766 90.890539 \n",
       "L 90.213267 90.51033 \n",
       "L 90.568311 90.126639 \n",
       "L 90.922904 89.7394 \n",
       "L 91.27705 89.348585 \n",
       "L 91.630755 88.954203 \n",
       "L 91.984022 88.556302 \n",
       "L 92.336852 88.154981 \n",
       "L 92.689252 87.750381 \n",
       "L 93.041219 87.3427 \n",
       "L 93.392756 86.932183 \n",
       "L 93.743862 86.51913 \n",
       "L 94.094538 86.103896 \n",
       "L 94.444778 85.686891 \n",
       "L 94.79458 85.268575 \n",
       "L 95.143941 84.849457 \n",
       "L 95.492851 84.430094 \n",
       "L 95.841305 84.011087 \n",
       "L 96.189294 83.593066 \n",
       "L 96.536808 83.176702 \n",
       "L 96.883836 82.762682 \n",
       "L 97.230367 82.351708 \n",
       "L 97.576387 81.944494 \n",
       "L 97.921883 81.541748 \n",
       "L 98.266841 81.144168 \n",
       "L 98.611248 80.752429 \n",
       "L 98.955088 80.367178 \n",
       "L 99.298346 79.989021 \n",
       "L 99.64101 79.618513 \n",
       "L 99.983063 79.256155 \n",
       "L 100.324494 78.902382 \n",
       "L 100.665292 78.557553 \n",
       "L 101.005442 78.221957 \n",
       "L 101.344938 77.895793 \n",
       "L 101.68377 77.579179 \n",
       "L 102.021931 77.272146 \n",
       "L 102.359416 76.974634 \n",
       "L 102.696223 76.686501 \n",
       "L 103.03235 76.407515 \n",
       "L 103.3678 76.137364 \n",
       "L 103.702572 75.875665 \n",
       "L 104.036672 75.62196 \n",
       "L 104.370107 75.375731 \n",
       "L 104.702885 75.136401 \n",
       "L 105.035015 74.903352 \n",
       "L 105.366512 74.675922 \n",
       "L 105.697383 74.453431 \n",
       "L 106.027645 74.235172 \n",
       "L 106.357312 74.020431 \n",
       "L 106.6864 73.808499 \n",
       "L 107.014924 73.598672 \n",
       "L 107.342901 73.390266 \n",
       "L 107.670349 73.18262 \n",
       "L 107.99728 72.97511 \n",
       "L 108.323712 72.767145 \n",
       "L 108.649661 72.558182 \n",
       "L 108.97514 72.347723 \n",
       "L 109.300165 72.135319 \n",
       "L 109.62475 71.920577 \n",
       "L 109.948903 71.703156 \n",
       "L 110.272637 71.482771 \n",
       "L 110.595961 71.259187 \n",
       "L 110.918885 71.032224 \n",
       "L 111.241416 70.80175 \n",
       "L 111.563559 70.567681 \n",
       "L 111.885323 70.329977 \n",
       "L 112.206707 70.088641 \n",
       "L 112.527716 69.84371 \n",
       "L 112.848353 69.595254 \n",
       "L 113.168617 69.343373 \n",
       "L 113.488511 69.088189 \n",
       "L 113.808034 68.829847 \n",
       "L 114.127183 68.56851 \n",
       "L 114.445957 68.304349 \n",
       "L 114.764355 68.037548 \n",
       "L 115.082373 67.768295 \n",
       "L 115.40001 67.496782 \n",
       "L 115.717264 67.223198 \n",
       "L 116.034129 66.947737 \n",
       "L 116.350603 66.670583 \n",
       "L 116.666683 66.391916 \n",
       "L 116.982367 66.111908 \n",
       "L 117.29765 65.830725 \n",
       "L 117.61253 65.548521 \n",
       "L 117.927007 65.265442 \n",
       "\" clip-path=\"url(#pd88908de6b)\" style=\"fill: none; stroke: #1f77b4; stroke-width: 1.5\"/>\n",
       "    <path d=\"M 90.55483 98.616234 \n",
       "L 90.915011 98.273592 \n",
       "L 91.274655 97.93107 \n",
       "L 91.633762 97.588622 \n",
       "L 91.992334 97.2462 \n",
       "L 92.350376 96.903753 \n",
       "L 92.707887 96.561227 \n",
       "L 93.064871 96.218568 \n",
       "L 93.42133 95.875718 \n",
       "L 93.777268 95.532618 \n",
       "L 94.132686 95.189212 \n",
       "L 94.487588 94.845439 \n",
       "L 94.841975 94.501246 \n",
       "L 95.19585 94.156575 \n",
       "L 95.549217 93.811376 \n",
       "L 95.902079 93.465601 \n",
       "L 96.254438 93.119207 \n",
       "L 96.606296 92.772157 \n",
       "L 96.957655 92.424426 \n",
       "L 97.308519 92.075993 \n",
       "L 97.65889 91.726849 \n",
       "L 98.008769 91.376996 \n",
       "L 98.35816 91.026446 \n",
       "L 98.707062 90.675231 \n",
       "L 99.055479 90.323391 \n",
       "L 99.403409 89.970984 \n",
       "L 99.750854 89.618082 \n",
       "L 100.097815 89.264775 \n",
       "L 100.444292 88.911165 \n",
       "L 100.790283 88.557376 \n",
       "L 101.135787 88.203542 \n",
       "L 101.480805 87.849813 \n",
       "L 101.825332 87.496356 \n",
       "L 102.169367 87.143345 \n",
       "L 102.512908 86.790968 \n",
       "L 102.855951 86.439424 \n",
       "L 103.198492 86.088913 \n",
       "L 103.54053 85.739644 \n",
       "L 103.882057 85.391827 \n",
       "L 104.223071 85.045672 \n",
       "L 104.563568 84.701381 \n",
       "L 104.903543 84.359156 \n",
       "L 105.24299 84.019187 \n",
       "L 105.581907 83.681652 \n",
       "L 105.920289 83.346713 \n",
       "L 106.258131 83.01452 \n",
       "L 106.59543 82.685198 \n",
       "L 106.932184 82.358853 \n",
       "L 107.268387 82.03557 \n",
       "L 107.604038 81.715407 \n",
       "L 107.939137 81.398398 \n",
       "L 108.27368 81.084551 \n",
       "L 108.607667 80.773849 \n",
       "L 108.941099 80.466248 \n",
       "L 109.273977 80.161679 \n",
       "L 109.606303 79.860048 \n",
       "L 109.938076 79.561245 \n",
       "L 110.269301 79.265131 \n",
       "L 110.599981 78.971552 \n",
       "L 110.93012 78.680339 \n",
       "L 111.259723 78.391307 \n",
       "L 111.588797 78.104259 \n",
       "L 111.917343 77.818996 \n",
       "L 112.245369 77.535306 \n",
       "L 112.572881 77.252979 \n",
       "L 112.899886 76.971802 \n",
       "L 113.22639 76.691568 \n",
       "L 113.552399 76.412073 \n",
       "L 113.877922 76.133119 \n",
       "L 114.202962 75.854522 \n",
       "L 114.527527 75.576107 \n",
       "L 114.851622 75.297711 \n",
       "L 115.175254 75.019185 \n",
       "L 115.498428 74.740396 \n",
       "L 115.821152 74.461224 \n",
       "L 116.143425 74.181571 \n",
       "L 116.465255 73.901349 \n",
       "L 116.786644 73.620488 \n",
       "L 117.107598 73.338934 \n",
       "L 117.428118 73.056646 \n",
       "L 117.748208 72.773599 \n",
       "L 118.067872 72.489778 \n",
       "L 118.387107 72.205187 \n",
       "L 118.705918 71.919833 \n",
       "L 119.024305 71.633737 \n",
       "L 119.342269 71.346927 \n",
       "L 119.659811 71.05944 \n",
       "L 119.976932 70.771316 \n",
       "L 120.29363 70.482605 \n",
       "L 120.609907 70.193356 \n",
       "L 120.925761 69.903622 \n",
       "L 121.241193 69.61346 \n",
       "L 121.556202 69.322925 \n",
       "L 121.870789 69.032071 \n",
       "L 122.184951 68.740958 \n",
       "L 122.498689 68.449638 \n",
       "L 122.812002 68.158165 \n",
       "L 123.124889 67.866588 \n",
       "L 123.437351 67.574957 \n",
       "L 123.749386 67.283317 \n",
       "L 124.060996 66.991708 \n",
       "\" clip-path=\"url(#pd88908de6b)\" style=\"fill: none; stroke: #1f77b4; stroke-width: 1.5\"/>\n",
       "   </g>\n",
       "   <g id=\"Line3DCollection_5\">\n",
       "    <path d=\"M 28.513357 -1 \n",
       "L 29.198945 0.72069 \n",
       "L 29.886784 2.391318 \n",
       "L 30.571579 3.998699 \n",
       "L 31.253432 5.543184 \n",
       "L 31.932437 7.025087 \n",
       "L 32.608694 8.444707 \n",
       "L 33.282296 9.802334 \n",
       "L 33.95334 11.098232 \n",
       "L 34.621921 12.332663 \n",
       "L 35.288131 13.505851 \n",
       "L 35.952066 14.618017 \n",
       "L 36.613815 15.66937 \n",
       "L 37.273469 16.660079 \n",
       "L 37.931119 17.590317 \n",
       "L 38.586856 18.460224 \n",
       "L 39.24077 19.269958 \n",
       "L 39.892951 20.019619 \n",
       "L 40.543483 20.709312 \n",
       "L 41.19246 21.339124 \n",
       "L 41.839965 21.909117 \n",
       "L 42.486087 22.41935 \n",
       "L 43.130913 22.869859 \n",
       "L 43.774531 23.260665 \n",
       "L 44.417026 23.591771 \n",
       "L 45.058484 23.863165 \n",
       "L 45.698994 24.074814 \n",
       "L 46.338638 24.226682 \n",
       "L 46.977503 24.318698 \n",
       "L 47.615679 24.35079 \n",
       "L 48.253245 24.322857 \n",
       "L 48.890292 24.234801 \n",
       "L 49.526906 24.086483 \n",
       "L 50.16317 23.877764 \n",
       "L 50.799171 23.608482 \n",
       "L 51.434997 23.278461 \n",
       "L 52.070735 22.887498 \n",
       "L 52.70647 22.435386 \n",
       "L 53.342289 21.921896 \n",
       "L 53.978283 21.346785 \n",
       "L 54.614536 20.709768 \n",
       "L 55.251138 20.010581 \n",
       "L 55.88818 19.248908 \n",
       "L 56.525747 18.424433 \n",
       "L 57.163932 17.536824 \n",
       "L 57.802826 16.585704 \n",
       "L 58.442518 15.57071 \n",
       "L 59.083101 14.491433 \n",
       "L 59.724668 13.347467 \n",
       "L 60.367312 12.138361 \n",
       "L 61.011132 10.863656 \n",
       "L 61.656215 9.522877 \n",
       "L 62.302661 8.115534 \n",
       "L 62.950568 6.641079 \n",
       "L 63.600033 5.098984 \n",
       "L 64.251157 3.488662 \n",
       "L 64.904043 1.809533 \n",
       "L 65.558785 0.06098 \n",
       "L 65.94191 -1 \n",
       "\" clip-path=\"url(#pd88908de6b)\" style=\"fill: none; stroke: #800080; stroke-width: 1.5\"/>\n",
       "    <path d=\"M 30.136152 13.923719 \n",
       "L 30.820111 15.902395 \n",
       "L 31.500781 17.818445 \n",
       "L 32.178258 19.672282 \n",
       "L 32.852641 21.464322 \n",
       "L 33.524029 23.194938 \n",
       "L 34.192515 24.864511 \n",
       "L 34.858194 26.473372 \n",
       "L 35.521162 28.021874 \n",
       "L 36.181512 29.510328 \n",
       "L 36.839333 30.939027 \n",
       "L 37.49472 32.308262 \n",
       "L 38.147759 33.618299 \n",
       "L 38.798541 34.869386 \n",
       "L 39.447156 36.061764 \n",
       "L 40.093692 37.195645 \n",
       "L 40.738237 38.271241 \n",
       "L 41.380876 39.288736 \n",
       "L 42.021694 40.248297 \n",
       "L 42.660779 41.150089 \n",
       "L 43.298214 41.994246 \n",
       "L 43.934085 42.780899 \n",
       "L 44.568479 43.510163 \n",
       "L 45.201474 44.182124 \n",
       "L 45.833159 44.796873 \n",
       "L 46.463612 45.354468 \n",
       "L 47.092918 45.854964 \n",
       "L 47.72116 46.298395 \n",
       "L 48.348422 46.684778 \n",
       "L 48.974783 47.014125 \n",
       "L 49.600325 47.286421 \n",
       "L 50.225134 47.501645 \n",
       "L 50.849287 47.659752 \n",
       "L 51.472868 47.760692 \n",
       "L 52.09596 47.804395 \n",
       "L 52.718643 47.790769 \n",
       "L 53.340998 47.719719 \n",
       "L 53.963111 47.591124 \n",
       "L 54.58506 47.404855 \n",
       "L 55.206928 47.160764 \n",
       "L 55.8288 46.858688 \n",
       "L 56.450758 46.49844 \n",
       "L 57.072884 46.079834 \n",
       "L 57.695261 45.602657 \n",
       "L 58.317976 45.066667 \n",
       "L 58.94111 44.471636 \n",
       "L 59.564748 43.817292 \n",
       "L 60.188979 43.103362 \n",
       "L 60.813883 42.329544 \n",
       "L 61.439549 41.495532 \n",
       "L 62.066067 40.600985 \n",
       "L 62.693519 39.64556 \n",
       "L 63.321996 38.628893 \n",
       "L 63.951587 37.550588 \n",
       "L 64.582382 36.410254 \n",
       "L 65.214474 35.207449 \n",
       "L 65.84795 33.941745 \n",
       "L 66.482903 32.61267 \n",
       "L 67.119429 31.219752 \n",
       "L 67.757621 29.762475 \n",
       "L 68.397574 28.240326 \n",
       "L 69.039391 26.652736 \n",
       "L 69.68316 24.99916 \n",
       "L 70.328985 23.279009 \n",
       "L 70.976966 21.491657 \n",
       "L 71.627205 19.636482 \n",
       "L 72.279806 17.712811 \n",
       "L 72.934872 15.719973 \n",
       "L 73.592515 13.657229 \n",
       "L 74.252834 11.523873 \n",
       "L 74.915942 9.319153 \n",
       "L 75.581952 7.042264 \n",
       "L 76.250976 4.692397 \n",
       "L 76.923129 2.268711 \n",
       "L 77.598532 -0.229678 \n",
       "L 77.801668 -1 \n",
       "\" clip-path=\"url(#pd88908de6b)\" style=\"fill: none; stroke: #800080; stroke-width: 1.5\"/>\n",
       "    <path d=\"M 34.811957 31.492825 \n",
       "L 35.47622 33.41084 \n",
       "L 36.137504 35.268517 \n",
       "L 36.795901 37.066232 \n",
       "L 37.451504 38.804381 \n",
       "L 38.104407 40.483332 \n",
       "L 38.754698 42.103422 \n",
       "L 39.402467 43.664986 \n",
       "L 40.047804 45.168342 \n",
       "L 40.690798 46.613795 \n",
       "L 41.331533 48.001617 \n",
       "L 41.970099 49.332092 \n",
       "L 42.606578 50.605456 \n",
       "L 43.241057 51.821959 \n",
       "L 43.87362 52.981818 \n",
       "L 44.504351 54.085245 \n",
       "L 45.133335 55.132435 \n",
       "L 45.760653 56.123564 \n",
       "L 46.386385 57.05879 \n",
       "L 47.010613 57.938269 \n",
       "L 47.633421 58.762134 \n",
       "L 48.254888 59.530506 \n",
       "L 48.875096 60.243494 \n",
       "L 49.494122 60.901181 \n",
       "L 50.11205 61.503652 \n",
       "L 50.728955 62.050966 \n",
       "L 51.344918 62.543175 \n",
       "L 51.960019 62.98031 \n",
       "L 52.574338 63.362396 \n",
       "L 53.18795 63.689436 \n",
       "L 53.800937 63.961424 \n",
       "L 54.413377 64.178335 \n",
       "L 55.025348 64.340135 \n",
       "L 55.636928 64.446772 \n",
       "L 56.248198 64.498184 \n",
       "L 56.859234 64.494285 \n",
       "L 57.470116 64.434986 \n",
       "L 58.080925 64.320176 \n",
       "L 58.691737 64.149732 \n",
       "L 59.302633 63.923516 \n",
       "L 59.913692 63.641375 \n",
       "L 60.524996 63.30314 \n",
       "L 61.136622 62.908627 \n",
       "L 61.748652 62.45764 \n",
       "L 62.361169 61.949962 \n",
       "L 62.974252 61.385364 \n",
       "L 63.587983 60.763602 \n",
       "L 64.202447 60.084413 \n",
       "L 64.817723 59.347517 \n",
       "L 65.433896 58.552627 \n",
       "L 66.051054 57.699424 \n",
       "L 66.669276 56.787584 \n",
       "L 67.28865 55.816767 \n",
       "L 67.909263 54.786601 \n",
       "L 68.531201 53.696716 \n",
       "L 69.154557 52.546703 \n",
       "L 69.779411 51.336156 \n",
       "L 70.405857 50.064642 \n",
       "L 71.033986 48.731702 \n",
       "L 71.663889 47.336866 \n",
       "L 72.29566 45.879639 \n",
       "L 72.929395 44.359505 \n",
       "L 73.565183 42.775943 \n",
       "L 74.203124 41.128396 \n",
       "L 74.843315 39.416289 \n",
       "L 75.485855 37.639027 \n",
       "L 76.130844 35.795987 \n",
       "L 76.778384 33.886533 \n",
       "L 77.428583 31.909989 \n",
       "L 78.081537 29.865689 \n",
       "L 78.737357 27.752906 \n",
       "L 79.396151 25.570913 \n",
       "L 80.058029 23.318932 \n",
       "L 80.723103 20.996191 \n",
       "L 81.39149 18.601852 \n",
       "L 82.063298 16.135108 \n",
       "L 82.73865 13.595071 \n",
       "L 83.417663 10.98083 \n",
       "L 84.100462 8.291473 \n",
       "L 84.78717 5.526035 \n",
       "L 85.477915 2.68352 \n",
       "L 86.172829 -0.237102 \n",
       "L 86.350651 -1 \n",
       "\" clip-path=\"url(#pd88908de6b)\" style=\"fill: none; stroke: #800080; stroke-width: 1.5\"/>\n",
       "    <path d=\"M 39.120104 42.746424 \n",
       "L 39.768621 44.620035 \n",
       "L 40.414424 46.434942 \n",
       "L 41.057598 48.191505 \n",
       "L 41.698234 49.890107 \n",
       "L 42.336421 51.531095 \n",
       "L 42.972242 53.114795 \n",
       "L 43.605785 54.641529 \n",
       "L 44.237135 56.111602 \n",
       "L 44.866378 57.525303 \n",
       "L 45.493593 58.882898 \n",
       "L 46.118867 60.184651 \n",
       "L 46.742279 61.430799 \n",
       "L 47.363912 62.621573 \n",
       "L 47.983846 63.757189 \n",
       "L 48.602164 64.837846 \n",
       "L 49.218945 65.863732 \n",
       "L 49.834268 66.835016 \n",
       "L 50.448209 67.751851 \n",
       "L 51.06085 68.614385 \n",
       "L 51.672268 69.422748 \n",
       "L 52.282542 70.177055 \n",
       "L 52.89175 70.877411 \n",
       "L 53.499967 71.523899 \n",
       "L 54.107272 72.116598 \n",
       "L 54.713739 72.655567 \n",
       "L 55.319447 73.140854 \n",
       "L 55.924472 73.572492 \n",
       "L 56.528892 73.950505 \n",
       "L 57.13278 74.274895 \n",
       "L 57.736214 74.545659 \n",
       "L 58.339271 74.762774 \n",
       "L 58.942025 74.926206 \n",
       "L 59.544554 75.03591 \n",
       "L 60.146936 75.091821 \n",
       "L 60.749243 75.093864 \n",
       "L 61.351555 75.04195 \n",
       "L 61.953949 74.935976 \n",
       "L 62.556499 74.775825 \n",
       "L 63.159284 74.561366 \n",
       "L 63.762382 74.292452 \n",
       "L 64.365872 73.968921 \n",
       "L 64.969829 73.590603 \n",
       "L 65.574333 73.157305 \n",
       "L 66.179465 72.668824 \n",
       "L 66.785301 72.124943 \n",
       "L 67.391923 71.525426 \n",
       "L 67.999413 70.870023 \n",
       "L 68.607847 70.158472 \n",
       "L 69.217311 69.39049 \n",
       "L 69.827887 68.565781 \n",
       "L 70.439655 67.684034 \n",
       "L 71.0527 66.744923 \n",
       "L 71.667108 65.748099 \n",
       "L 72.282962 64.693201 \n",
       "L 72.900354 63.579846 \n",
       "L 73.519361 62.407645 \n",
       "L 74.140077 61.176182 \n",
       "L 74.762589 59.885025 \n",
       "L 75.386988 58.533722 \n",
       "L 76.013364 57.121806 \n",
       "L 76.641814 55.648781 \n",
       "L 77.272423 54.114152 \n",
       "L 77.905289 52.517388 \n",
       "L 78.540507 50.857943 \n",
       "L 79.178176 49.135248 \n",
       "L 79.818392 47.348715 \n",
       "L 80.461257 45.497731 \n",
       "L 81.106875 43.581656 \n",
       "L 81.755342 41.599848 \n",
       "L 82.406765 39.551634 \n",
       "L 83.061251 37.436307 \n",
       "L 83.718908 35.253145 \n",
       "L 84.379845 33.001382 \n",
       "L 85.044178 30.680246 \n",
       "L 85.712013 28.288962 \n",
       "L 86.383469 25.826687 \n",
       "L 87.058664 23.292554 \n",
       "L 87.737718 20.685697 \n",
       "L 88.420753 18.0052 \n",
       "L 89.107893 15.250114 \n",
       "L 89.799269 12.419458 \n",
       "L 90.495002 9.512262 \n",
       "L 91.19523 6.527482 \n",
       "L 91.900086 3.464031 \n",
       "L 92.609707 0.320825 \n",
       "L 92.90243 -1 \n",
       "\" clip-path=\"url(#pd88908de6b)\" style=\"fill: none; stroke: #800080; stroke-width: 1.5\"/>\n",
       "    <path d=\"M 43.134533 48.161781 \n",
       "L 43.770783 50.005401 \n",
       "L 44.404544 51.791378 \n",
       "L 45.035899 53.520076 \n",
       "L 45.664936 55.191851 \n",
       "L 46.291739 56.807051 \n",
       "L 46.916391 58.365986 \n",
       "L 47.538974 59.868973 \n",
       "L 48.159571 61.316302 \n",
       "L 48.778265 62.708259 \n",
       "L 49.395134 64.045099 \n",
       "L 50.010261 65.327081 \n",
       "L 50.623722 66.554434 \n",
       "L 51.235598 67.727382 \n",
       "L 51.845966 68.846133 \n",
       "L 52.454906 69.910882 \n",
       "L 53.062497 70.921812 \n",
       "L 53.668813 71.879086 \n",
       "L 54.273929 72.782855 \n",
       "L 54.877925 73.633262 \n",
       "L 55.480875 74.43043 \n",
       "L 56.082855 75.174476 \n",
       "L 56.683944 75.865497 \n",
       "L 57.284211 76.503579 \n",
       "L 57.883736 77.088797 \n",
       "L 58.482591 77.621205 \n",
       "L 59.080851 78.100855 \n",
       "L 59.678592 78.527778 \n",
       "L 60.275889 78.901995 \n",
       "L 60.872813 79.223511 \n",
       "L 61.469442 79.492322 \n",
       "L 62.06585 79.708407 \n",
       "L 62.66211 79.871734 \n",
       "L 63.258297 79.982257 \n",
       "L 63.854488 80.039916 \n",
       "L 64.450755 80.044637 \n",
       "L 65.047174 79.996336 \n",
       "L 65.643822 79.89491 \n",
       "L 66.240771 79.74025 \n",
       "L 66.8381 79.532226 \n",
       "L 67.435883 79.270698 \n",
       "L 68.034199 78.95551 \n",
       "L 68.633122 78.586494 \n",
       "L 69.23273 78.163466 \n",
       "L 69.833103 77.686229 \n",
       "L 70.434316 77.154573 \n",
       "L 71.036449 76.56827 \n",
       "L 71.639582 75.927077 \n",
       "L 72.243793 75.230742 \n",
       "L 72.849163 74.47899 \n",
       "L 73.455775 73.671535 \n",
       "L 74.063707 72.808078 \n",
       "L 74.673044 71.888299 \n",
       "L 75.283869 70.911863 \n",
       "L 75.896266 69.878422 \n",
       "L 76.510323 68.787603 \n",
       "L 77.126119 67.639031 \n",
       "L 77.743745 66.432304 \n",
       "L 78.363288 65.167003 \n",
       "L 78.984838 63.842691 \n",
       "L 79.608483 62.458917 \n",
       "L 80.234319 61.015199 \n",
       "L 80.86243 59.511061 \n",
       "L 81.492914 57.94599 \n",
       "L 82.125865 56.319454 \n",
       "L 82.761379 54.63091 \n",
       "L 83.399553 52.879782 \n",
       "L 84.040487 51.065479 \n",
       "L 84.684285 49.187387 \n",
       "L 85.33104 47.244885 \n",
       "L 85.98086 45.237321 \n",
       "L 86.63385 43.164008 \n",
       "L 87.290117 41.024246 \n",
       "L 87.949769 38.817311 \n",
       "L 88.612922 36.542443 \n",
       "L 89.27968 34.198897 \n",
       "L 89.950161 31.785862 \n",
       "L 90.624481 29.302499 \n",
       "L 91.302761 26.747974 \n",
       "L 91.985119 24.1214 \n",
       "L 92.671681 21.421869 \n",
       "L 93.362576 18.648422 \n",
       "L 94.057923 15.800131 \n",
       "L 94.757858 12.875988 \n",
       "L 95.462514 9.874949 \n",
       "L 96.172029 6.795961 \n",
       "L 96.88654 3.637926 \n",
       "L 97.606194 0.399684 \n",
       "L 97.911862 -1 \n",
       "\" clip-path=\"url(#pd88908de6b)\" style=\"fill: none; stroke: #800080; stroke-width: 1.5\"/>\n",
       "    <path d=\"M 46.917267 48.040505 \n",
       "L 47.54438 49.867327 \n",
       "L 48.169201 51.637059 \n",
       "L 48.791808 53.350054 \n",
       "L 49.412288 55.006666 \n",
       "L 50.030724 56.607233 \n",
       "L 50.647194 58.152061 \n",
       "L 51.261779 59.64146 \n",
       "L 51.874561 61.075716 \n",
       "L 52.485621 62.45511 \n",
       "L 53.095033 63.779892 \n",
       "L 53.702879 65.050315 \n",
       "L 54.309233 66.266605 \n",
       "L 54.914175 67.428983 \n",
       "L 55.517781 68.537652 \n",
       "L 56.120127 69.592804 \n",
       "L 56.721291 70.594618 \n",
       "L 57.321346 71.543254 \n",
       "L 57.920366 72.438862 \n",
       "L 58.518428 73.281579 \n",
       "L 59.115605 74.071531 \n",
       "L 59.711973 74.808827 \n",
       "L 60.307606 75.493567 \n",
       "L 60.902576 76.125832 \n",
       "L 61.49696 76.705697 \n",
       "L 62.090827 77.233218 \n",
       "L 62.684252 77.708441 \n",
       "L 63.27731 78.131398 \n",
       "L 63.870076 78.502111 \n",
       "L 64.462618 78.820585 \n",
       "L 65.055013 79.086815 \n",
       "L 65.647336 79.30078 \n",
       "L 66.239656 79.462449 \n",
       "L 66.832049 79.571777 \n",
       "L 67.424591 79.628705 \n",
       "L 68.017351 79.63316 \n",
       "L 68.610407 79.58506 \n",
       "L 69.203834 79.484304 \n",
       "L 69.797703 79.330783 \n",
       "L 70.392092 79.124372 \n",
       "L 70.987074 78.864931 \n",
       "L 71.582729 78.552308 \n",
       "L 72.179128 78.186338 \n",
       "L 72.77635 77.766842 \n",
       "L 73.374474 77.293623 \n",
       "L 73.973573 76.766477 \n",
       "L 74.573728 76.185179 \n",
       "L 75.175019 75.549491 \n",
       "L 75.777521 74.859166 \n",
       "L 76.381316 74.113934 \n",
       "L 76.986486 73.313514 \n",
       "L 77.59311 72.45761 \n",
       "L 78.201271 71.545912 \n",
       "L 78.811052 70.578089 \n",
       "L 79.422537 69.5538 \n",
       "L 80.035814 68.472677 \n",
       "L 80.65096 67.334354 \n",
       "L 81.268067 66.138436 \n",
       "L 81.887221 64.884512 \n",
       "L 82.508511 63.572154 \n",
       "L 83.132027 62.200916 \n",
       "L 83.757863 60.770329 \n",
       "L 84.386104 59.279923 \n",
       "L 85.016847 57.729198 \n",
       "L 85.650186 56.117629 \n",
       "L 86.286216 54.444684 \n",
       "L 86.925036 52.7098 \n",
       "L 87.566744 50.912398 \n",
       "L 88.211444 49.051869 \n",
       "L 88.859229 47.127615 \n",
       "L 89.510208 45.138985 \n",
       "L 90.164485 43.085315 \n",
       "L 90.822168 40.965914 \n",
       "L 91.483364 38.780074 \n",
       "L 92.148188 36.52705 \n",
       "L 92.816746 34.206114 \n",
       "L 93.489155 31.816464 \n",
       "L 94.165532 29.357288 \n",
       "L 94.845995 26.827761 \n",
       "L 95.530667 24.227017 \n",
       "L 96.21967 21.554168 \n",
       "L 96.913135 18.808272 \n",
       "L 97.611181 15.988422 \n",
       "L 98.313943 13.09363 \n",
       "L 99.021556 10.122871 \n",
       "L 99.734156 7.075122 \n",
       "L 100.451881 3.949305 \n",
       "L 101.17488 0.744285 \n",
       "L 101.561618 -1 \n",
       "\" clip-path=\"url(#pd88908de6b)\" style=\"fill: none; stroke: #800080; stroke-width: 1.5\"/>\n",
       "    <path d=\"M 50.52177 42.532748 \n",
       "L 51.142632 44.355267 \n",
       "L 51.761373 46.120761 \n",
       "L 52.378071 47.829576 \n",
       "L 52.992808 49.482067 \n",
       "L 53.605669 51.078567 \n",
       "L 54.216728 52.619383 \n",
       "L 54.826067 54.10482 \n",
       "L 55.433764 55.535164 \n",
       "L 56.0399 56.910693 \n",
       "L 56.644548 58.231655 \n",
       "L 57.247789 59.498301 \n",
       "L 57.849696 60.710857 \n",
       "L 58.450346 61.86954 \n",
       "L 59.049816 62.974554 \n",
       "L 59.64818 64.026088 \n",
       "L 60.245515 65.02432 \n",
       "L 60.841893 65.969409 \n",
       "L 61.437388 66.861503 \n",
       "L 62.032074 67.700739 \n",
       "L 62.626026 68.48724 \n",
       "L 63.219317 69.221117 \n",
       "L 63.812022 69.902467 \n",
       "L 64.40421 70.53137 \n",
       "L 64.995958 71.107902 \n",
       "L 65.587336 71.632116 \n",
       "L 66.178419 72.104059 \n",
       "L 66.769278 72.523762 \n",
       "L 67.359988 72.891247 \n",
       "L 67.95062 73.206518 \n",
       "L 68.541247 73.469569 \n",
       "L 69.131945 73.680381 \n",
       "L 69.722782 73.838919 \n",
       "L 70.313835 73.945142 \n",
       "L 70.905177 73.998988 \n",
       "L 71.49688 74.000386 \n",
       "L 72.08902 73.949253 \n",
       "L 72.681671 73.845488 \n",
       "L 73.274905 73.688983 \n",
       "L 73.868799 73.479612 \n",
       "L 74.463428 73.217237 \n",
       "L 75.058869 72.901706 \n",
       "L 75.655194 72.532854 \n",
       "L 76.252483 72.110502 \n",
       "L 76.850813 71.634455 \n",
       "L 77.450259 71.104509 \n",
       "L 78.0509 70.520441 \n",
       "L 78.652818 69.882012 \n",
       "L 79.256088 69.188978 \n",
       "L 79.860791 68.441068 \n",
       "L 80.467011 67.638003 \n",
       "L 81.074824 66.77949 \n",
       "L 81.684317 65.865218 \n",
       "L 82.29557 64.894859 \n",
       "L 82.908669 63.868072 \n",
       "L 83.523702 62.784492 \n",
       "L 84.140748 61.643756 \n",
       "L 84.759897 60.445468 \n",
       "L 85.381237 59.18922 \n",
       "L 86.004857 57.874585 \n",
       "L 86.630847 56.501124 \n",
       "L 87.259302 55.068365 \n",
       "L 87.890308 53.575842 \n",
       "L 88.523961 52.023058 \n",
       "L 89.160358 50.409491 \n",
       "L 89.799594 48.73461 \n",
       "L 90.441767 46.997858 \n",
       "L 91.086977 45.198657 \n",
       "L 91.735329 43.336401 \n",
       "L 92.386918 41.410497 \n",
       "L 93.041852 39.420296 \n",
       "L 93.700236 37.365136 \n",
       "L 94.362179 35.244338 \n",
       "L 95.027791 33.05719 \n",
       "L 95.697186 30.802953 \n",
       "L 96.370471 28.480905 \n",
       "L 97.047764 26.09025 \n",
       "L 97.729185 23.630174 \n",
       "L 98.414852 21.099863 \n",
       "L 99.104889 18.498457 \n",
       "L 99.79942 15.82507 \n",
       "L 100.498575 13.078769 \n",
       "L 101.202478 10.258651 \n",
       "L 101.911263 7.363735 \n",
       "L 102.625067 4.393001 \n",
       "L 103.344028 1.345436 \n",
       "L 103.88753 -1 \n",
       "\" clip-path=\"url(#pd88908de6b)\" style=\"fill: none; stroke: #800080; stroke-width: 1.5\"/>\n",
       "    <path d=\"M 53.99557 31.650327 \n",
       "L 54.612905 33.480792 \n",
       "L 55.22827 35.253813 \n",
       "L 55.841742 36.969739 \n",
       "L 56.453404 38.62893 \n",
       "L 57.063338 40.231715 \n",
       "L 57.671618 41.778404 \n",
       "L 58.278327 43.269309 \n",
       "L 58.88354 44.704711 \n",
       "L 59.487338 46.084889 \n",
       "L 60.089794 47.410096 \n",
       "L 60.690988 48.680582 \n",
       "L 61.290993 49.896572 \n",
       "L 61.889885 51.058286 \n",
       "L 62.48774 52.165927 \n",
       "L 63.084633 53.219687 \n",
       "L 63.68064 54.219743 \n",
       "L 64.275833 55.166254 \n",
       "L 64.870284 56.059368 \n",
       "L 65.464069 56.899224 \n",
       "L 66.057262 57.685944 \n",
       "L 66.649935 58.419639 \n",
       "L 67.242163 59.100406 \n",
       "L 67.834016 59.728325 \n",
       "L 68.425571 60.303471 \n",
       "L 69.016897 60.825898 \n",
       "L 69.608068 61.295652 \n",
       "L 70.199157 61.712763 \n",
       "L 70.790239 62.077253 \n",
       "L 71.381384 62.389125 \n",
       "L 71.972665 62.648373 \n",
       "L 72.564159 62.854975 \n",
       "L 73.155934 63.008899 \n",
       "L 73.748067 63.110099 \n",
       "L 74.340632 63.158514 \n",
       "L 74.9337 63.154071 \n",
       "L 75.527348 63.096685 \n",
       "L 76.121651 62.986256 \n",
       "L 76.71668 62.822672 \n",
       "L 77.312514 62.605807 \n",
       "L 77.909227 62.33552 \n",
       "L 78.506897 62.011658 \n",
       "L 79.105598 61.634054 \n",
       "L 79.705409 61.202527 \n",
       "L 80.306408 60.71688 \n",
       "L 80.908671 60.176907 \n",
       "L 81.512278 59.582383 \n",
       "L 82.11731 58.933065 \n",
       "L 82.723844 58.228707 \n",
       "L 83.331962 57.469038 \n",
       "L 83.941749 56.653772 \n",
       "L 84.553282 55.782617 \n",
       "L 85.166647 54.855257 \n",
       "L 85.781929 53.87136 \n",
       "L 86.399211 52.830585 \n",
       "L 87.018584 51.73256 \n",
       "L 87.640128 50.57692 \n",
       "L 88.263933 49.363268 \n",
       "L 88.89009 48.09119 \n",
       "L 89.518689 46.760255 \n",
       "L 90.14982 45.370018 \n",
       "L 90.783581 43.92001 \n",
       "L 91.420058 42.409753 \n",
       "L 92.059349 40.838752 \n",
       "L 92.701552 39.206474 \n",
       "L 93.346765 37.512391 \n",
       "L 93.995087 35.755932 \n",
       "L 94.64662 33.936523 \n",
       "L 95.301469 32.053548 \n",
       "L 95.959732 30.106408 \n",
       "L 96.621519 28.094457 \n",
       "L 97.286938 26.017018 \n",
       "L 97.956098 23.87341 \n",
       "L 98.62911 21.662916 \n",
       "L 99.306094 19.384789 \n",
       "L 99.987156 17.038294 \n",
       "L 100.672419 14.622643 \n",
       "L 101.362002 12.137008 \n",
       "L 102.056027 9.580577 \n",
       "L 102.754621 6.952467 \n",
       "L 103.457909 4.251788 \n",
       "L 104.166026 1.477609 \n",
       "L 104.78623 -1 \n",
       "\" clip-path=\"url(#pd88908de6b)\" style=\"fill: none; stroke: #800080; stroke-width: 1.5\"/>\n",
       "    <path d=\"M 57.382371 15.270709 \n",
       "L 57.998813 17.121536 \n",
       "L 58.61342 18.914018 \n",
       "L 59.226271 20.648504 \n",
       "L 59.837446 22.325357 \n",
       "L 60.447029 23.94492 \n",
       "L 61.055093 25.507504 \n",
       "L 61.66172 27.013419 \n",
       "L 62.266988 28.462959 \n",
       "L 62.870976 29.856406 \n",
       "L 63.473757 31.194012 \n",
       "L 64.075411 32.476039 \n",
       "L 64.676011 33.702706 \n",
       "L 65.275635 34.874244 \n",
       "L 65.874357 35.990853 \n",
       "L 66.472253 37.052729 \n",
       "L 67.069399 38.060053 \n",
       "L 67.665868 39.012987 \n",
       "L 68.261732 39.911676 \n",
       "L 68.857068 40.756264 \n",
       "L 69.451948 41.546875 \n",
       "L 70.046447 42.283619 \n",
       "L 70.64064 42.966597 \n",
       "L 71.234597 43.595886 \n",
       "L 71.828394 44.171562 \n",
       "L 72.422103 44.693679 \n",
       "L 73.015798 45.162285 \n",
       "L 73.609552 45.577408 \n",
       "L 74.203441 45.939069 \n",
       "L 74.797535 46.247269 \n",
       "L 75.391909 46.502003 \n",
       "L 75.98664 46.703247 \n",
       "L 76.581797 46.850966 \n",
       "L 77.177457 46.945112 \n",
       "L 77.773697 46.985623 \n",
       "L 78.370587 46.972425 \n",
       "L 78.968205 46.905427 \n",
       "L 79.566628 46.784527 \n",
       "L 80.165928 46.609612 \n",
       "L 80.766184 46.380549 \n",
       "L 81.367472 46.097195 \n",
       "L 81.969872 45.759393 \n",
       "L 82.573457 45.36697 \n",
       "L 83.178308 44.919742 \n",
       "L 83.784506 44.417508 \n",
       "L 84.392126 43.860053 \n",
       "L 85.001251 43.247149 \n",
       "L 85.611963 42.57855 \n",
       "L 86.22434 41.853997 \n",
       "L 86.838467 41.073221 \n",
       "L 87.454429 40.235923 \n",
       "L 88.072305 39.341804 \n",
       "L 88.692183 38.390545 \n",
       "L 89.314149 37.381801 \n",
       "L 89.938289 36.315227 \n",
       "L 90.564696 35.190443 \n",
       "L 91.19345 34.007072 \n",
       "L 91.824645 32.764711 \n",
       "L 92.458373 31.462933 \n",
       "L 93.094726 30.101301 \n",
       "L 93.733797 28.679357 \n",
       "L 94.375685 27.196621 \n",
       "L 95.02048 25.652611 \n",
       "L 95.668281 24.046809 \n",
       "L 96.319189 22.378683 \n",
       "L 96.973305 20.647681 \n",
       "L 97.630729 18.853231 \n",
       "L 98.291566 16.994735 \n",
       "L 98.955926 15.071567 \n",
       "L 99.623908 13.083124 \n",
       "L 100.295624 11.028731 \n",
       "L 100.971186 8.907701 \n",
       "L 101.650707 6.719336 \n",
       "L 102.334301 4.46291 \n",
       "L 103.022089 2.137652 \n",
       "L 103.714183 -0.257184 \n",
       "L 103.924058 -1 \n",
       "\" clip-path=\"url(#pd88908de6b)\" style=\"fill: none; stroke: #800080; stroke-width: 1.5\"/>\n",
       "    <path d=\"M 62.714944 -1 \n",
       "L 63.186611 0.312102 \n",
       "L 63.798409 1.959431 \n",
       "L 64.408816 3.548396 \n",
       "L 65.017911 5.079319 \n",
       "L 65.625773 6.552493 \n",
       "L 66.232483 7.968216 \n",
       "L 66.838114 9.326745 \n",
       "L 67.442748 10.628345 \n",
       "L 68.046457 11.873248 \n",
       "L 68.649319 13.061682 \n",
       "L 69.251412 14.193863 \n",
       "L 69.852811 15.26998 \n",
       "L 70.453592 16.290225 \n",
       "L 71.053831 17.254762 \n",
       "L 71.6536 18.16374 \n",
       "L 72.252975 19.017309 \n",
       "L 72.852033 19.815586 \n",
       "L 73.450847 20.558692 \n",
       "L 74.049494 21.246726 \n",
       "L 74.648045 21.879767 \n",
       "L 75.246578 22.457894 \n",
       "L 75.845164 22.98116 \n",
       "L 76.44388 23.449611 \n",
       "L 77.0428 23.863279 \n",
       "L 77.642001 24.222174 \n",
       "L 78.241555 24.526307 \n",
       "L 78.841538 24.775666 \n",
       "L 79.442027 24.97023 \n",
       "L 80.043095 25.109954 \n",
       "L 80.644819 25.19479 \n",
       "L 81.247277 25.224676 \n",
       "L 81.850542 25.199527 \n",
       "L 82.454692 25.119253 \n",
       "L 83.059807 24.983747 \n",
       "L 83.665961 24.792887 \n",
       "L 84.273233 24.546539 \n",
       "L 84.881702 24.244554 \n",
       "L 85.49145 23.886761 \n",
       "L 86.102552 23.47299 \n",
       "L 86.71509 23.003049 \n",
       "L 87.329147 22.476714 \n",
       "L 87.944801 21.893779 \n",
       "L 88.562137 21.253998 \n",
       "L 89.181239 20.55712 \n",
       "L 89.802187 19.802872 \n",
       "L 90.425069 18.990976 \n",
       "L 91.049971 18.121123 \n",
       "L 91.676976 17.193001 \n",
       "L 92.306174 16.206281 \n",
       "L 92.937653 15.160605 \n",
       "L 93.571502 14.055609 \n",
       "L 94.207817 12.890907 \n",
       "L 94.84668 11.666106 \n",
       "L 95.48819 10.380778 \n",
       "L 96.132439 9.034498 \n",
       "L 96.779523 7.626799 \n",
       "L 97.42954 6.157218 \n",
       "L 98.08259 4.625241 \n",
       "L 98.738766 3.030377 \n",
       "L 99.398173 1.372096 \n",
       "L 100.060913 -0.350167 \n",
       "L 100.303192 -1 \n",
       "\" clip-path=\"url(#pd88908de6b)\" style=\"fill: none; stroke: #800080; stroke-width: 1.5\"/>\n",
       "    <path clip-path=\"url(#pd88908de6b)\" style=\"fill: none; stroke: #800080; stroke-width: 1.5\"/>\n",
       "    <path d=\"M 26.899606 -1 \n",
       "L 27.117448 0.073611 \n",
       "L 27.632932 2.564549 \n",
       "L 28.143322 4.981218 \n",
       "L 28.648732 7.324574 \n",
       "L 29.14927 9.595526 \n",
       "L 29.645043 11.794961 \n",
       "L 30.136152 13.923719 \n",
       "L 30.6227 15.982634 \n",
       "L 31.104784 17.972488 \n",
       "L 31.582501 19.894062 \n",
       "L 32.055946 21.748109 \n",
       "L 32.525212 23.535337 \n",
       "L 32.99039 25.256447 \n",
       "L 33.451568 26.912119 \n",
       "L 33.908832 28.502983 \n",
       "L 34.362267 30.029685 \n",
       "L 34.811957 31.492825 \n",
       "L 35.257984 32.892979 \n",
       "L 35.70043 34.230722 \n",
       "L 36.139369 35.506587 \n",
       "L 36.574882 36.721093 \n",
       "L 37.007042 37.874746 \n",
       "L 37.435923 38.968027 \n",
       "L 37.861599 40.001399 \n",
       "L 38.284143 40.975312 \n",
       "L 38.703621 41.890184 \n",
       "L 39.120104 42.746424 \n",
       "L 39.533661 43.544428 \n",
       "L 39.944356 44.284566 \n",
       "L 40.352255 44.967192 \n",
       "L 40.757423 45.592651 \n",
       "L 41.159922 46.161259 \n",
       "L 41.559815 46.673329 \n",
       "L 41.957164 47.129149 \n",
       "L 42.352027 47.528995 \n",
       "L 42.744464 47.873124 \n",
       "L 43.134533 48.161781 \n",
       "L 43.522294 48.395197 \n",
       "L 43.9078 48.573583 \n",
       "L 44.291109 48.697141 \n",
       "L 44.672276 48.766053 \n",
       "L 45.051353 48.780492 \n",
       "L 45.428396 48.740608 \n",
       "L 45.803458 48.646549 \n",
       "L 46.176589 48.498439 \n",
       "L 46.547841 48.29639 \n",
       "L 46.917267 48.040505 \n",
       "L 47.284914 47.730868 \n",
       "L 47.650833 47.367553 \n",
       "L 48.015074 46.950616 \n",
       "L 48.377685 46.480102 \n",
       "L 48.738715 45.956043 \n",
       "L 49.098209 45.378457 \n",
       "L 49.456214 44.74735 \n",
       "L 49.812779 44.062715 \n",
       "L 50.167949 43.324524 \n",
       "L 50.52177 42.532748 \n",
       "L 50.874289 41.687328 \n",
       "L 51.225546 40.788216 \n",
       "L 51.57559 39.835328 \n",
       "L 51.924463 38.82858 \n",
       "L 52.27221 37.767867 \n",
       "L 52.618874 36.653076 \n",
       "L 52.964499 35.484075 \n",
       "L 53.30913 34.260718 \n",
       "L 53.652806 32.98286 \n",
       "L 53.99557 31.650327 \n",
       "L 54.337467 30.262937 \n",
       "L 54.678537 28.820491 \n",
       "L 55.018823 27.322777 \n",
       "L 55.358369 25.769569 \n",
       "L 55.697212 24.160639 \n",
       "L 56.035396 22.495727 \n",
       "L 56.372963 20.774566 \n",
       "L 56.709953 18.996875 \n",
       "L 57.046409 17.16236 \n",
       "L 57.382371 15.270709 \n",
       "L 57.717883 13.32158 \n",
       "L 58.052981 11.31466 \n",
       "L 58.387709 9.249587 \n",
       "L 58.722109 7.125975 \n",
       "L 59.05622 4.943453 \n",
       "L 59.390086 2.701599 \n",
       "L 59.723748 0.399999 \n",
       "L 59.921437 -1 \n",
       "\" clip-path=\"url(#pd88908de6b)\" style=\"fill: none; stroke: #800080; stroke-width: 1.5\"/>\n",
       "    <path d=\"M 31.932437 7.025087 \n",
       "L 32.444593 9.749019 \n",
       "L 32.95169 12.396449 \n",
       "L 33.453838 14.968399 \n",
       "L 33.95115 17.465877 \n",
       "L 34.443735 19.889858 \n",
       "L 34.931695 22.24127 \n",
       "L 35.415135 24.521022 \n",
       "L 35.894156 26.730001 \n",
       "L 36.368857 28.869065 \n",
       "L 36.839333 30.939027 \n",
       "L 37.30568 32.940695 \n",
       "L 37.767987 34.874833 \n",
       "L 38.226347 36.74219 \n",
       "L 38.680848 38.543498 \n",
       "L 39.131576 40.27944 \n",
       "L 39.578617 41.950704 \n",
       "L 40.022054 43.55794 \n",
       "L 40.461965 45.101764 \n",
       "L 40.898432 46.582795 \n",
       "L 41.331533 48.001617 \n",
       "L 41.761345 49.358797 \n",
       "L 42.187944 50.654878 \n",
       "L 42.611402 51.890387 \n",
       "L 43.031792 53.065825 \n",
       "L 43.449185 54.181677 \n",
       "L 43.86365 55.238415 \n",
       "L 44.275257 56.236483 \n",
       "L 44.684073 57.176315 \n",
       "L 45.090163 58.05832 \n",
       "L 45.493593 58.882898 \n",
       "L 45.894427 59.650424 \n",
       "L 46.292727 60.361259 \n",
       "L 46.688554 61.015748 \n",
       "L 47.081972 61.614221 \n",
       "L 47.473038 62.156988 \n",
       "L 47.861812 62.644347 \n",
       "L 48.248352 63.076581 \n",
       "L 48.632715 63.453952 \n",
       "L 49.014957 63.776713 \n",
       "L 49.395134 64.045099 \n",
       "L 49.773302 64.259334 \n",
       "L 50.149513 64.419618 \n",
       "L 50.52382 64.526149 \n",
       "L 50.896279 64.579102 \n",
       "L 51.266938 64.578641 \n",
       "L 51.63585 64.524916 \n",
       "L 52.003066 64.418063 \n",
       "L 52.368635 64.258205 \n",
       "L 52.732607 64.04545 \n",
       "L 53.095033 63.779892 \n",
       "L 53.455957 63.461615 \n",
       "L 53.81543 63.090686 \n",
       "L 54.173498 62.66716 \n",
       "L 54.530209 62.19108 \n",
       "L 54.885612 61.662472 \n",
       "L 55.239747 61.081356 \n",
       "L 55.592663 60.447733 \n",
       "L 55.944406 59.761593 \n",
       "L 56.295019 59.022912 \n",
       "L 56.644548 58.231655 \n",
       "L 56.993039 57.387766 \n",
       "L 57.340532 56.491194 \n",
       "L 57.687072 55.54186 \n",
       "L 58.032702 54.539673 \n",
       "L 58.377467 53.484535 \n",
       "L 58.721408 52.376329 \n",
       "L 59.064569 51.214931 \n",
       "L 59.406994 50.000192 \n",
       "L 59.748721 48.731971 \n",
       "L 60.089794 47.410096 \n",
       "L 60.430256 46.034386 \n",
       "L 60.770147 44.60465 \n",
       "L 61.109511 43.120678 \n",
       "L 61.44839 41.582241 \n",
       "L 61.786822 39.989122 \n",
       "L 62.12485 38.341067 \n",
       "L 62.462516 36.637813 \n",
       "L 62.799862 34.879079 \n",
       "L 63.136928 33.064582 \n",
       "L 63.473757 31.194012 \n",
       "L 63.810391 29.267043 \n",
       "L 64.146868 27.283361 \n",
       "L 64.483232 25.242607 \n",
       "L 64.819524 23.144414 \n",
       "L 65.155786 20.988404 \n",
       "L 65.49206 18.774184 \n",
       "L 65.828389 16.501329 \n",
       "L 66.164812 14.169444 \n",
       "L 66.501373 11.778068 \n",
       "L 66.838114 9.326745 \n",
       "L 67.175079 6.815003 \n",
       "L 67.512309 4.24234 \n",
       "L 67.84985 1.608235 \n",
       "L 68.176737 -1 \n",
       "\" clip-path=\"url(#pd88908de6b)\" style=\"fill: none; stroke: #800080; stroke-width: 1.5\"/>\n",
       "    <path d=\"M 38.586856 18.460224 \n",
       "L 39.077556 21.141932 \n",
       "L 39.563638 23.748117 \n",
       "L 40.045204 26.27979 \n",
       "L 40.522361 28.737942 \n",
       "L 40.99521 31.123532 \n",
       "L 41.463849 33.437473 \n",
       "L 41.928375 35.680661 \n",
       "L 42.388882 37.85396 \n",
       "L 42.845466 39.958225 \n",
       "L 43.298214 41.994246 \n",
       "L 43.747217 43.962823 \n",
       "L 44.19256 45.864706 \n",
       "L 44.634328 47.700634 \n",
       "L 45.072606 49.471319 \n",
       "L 45.507474 51.17744 \n",
       "L 45.939014 52.819672 \n",
       "L 46.367303 54.398654 \n",
       "L 46.792416 55.914993 \n",
       "L 47.214431 57.369292 \n",
       "L 47.633421 58.762134 \n",
       "L 48.049458 60.094067 \n",
       "L 48.462615 61.365635 \n",
       "L 48.87296 62.577344 \n",
       "L 49.280563 63.729697 \n",
       "L 49.685489 64.823167 \n",
       "L 50.087806 65.858216 \n",
       "L 50.487579 66.835283 \n",
       "L 50.884873 67.754795 \n",
       "L 51.279748 68.617153 \n",
       "L 51.672268 69.422748 \n",
       "L 52.062495 70.171952 \n",
       "L 52.450486 70.865118 \n",
       "L 52.836302 71.502584 \n",
       "L 53.220001 72.084675 \n",
       "L 53.601639 72.611697 \n",
       "L 53.981274 73.08394 \n",
       "L 54.358961 73.501683 \n",
       "L 54.734754 73.865184 \n",
       "L 55.108707 74.174689 \n",
       "L 55.480875 74.43043 \n",
       "L 55.85131 74.632626 \n",
       "L 56.220064 74.781475 \n",
       "L 56.587187 74.877168 \n",
       "L 56.952732 74.919879 \n",
       "L 57.316747 74.909767 \n",
       "L 57.679283 74.846981 \n",
       "L 58.040389 74.73165 \n",
       "L 58.400112 74.563897 \n",
       "L 58.758502 74.343827 \n",
       "L 59.115605 74.071531 \n",
       "L 59.471469 73.74709 \n",
       "L 59.826139 73.37057 \n",
       "L 60.179663 72.942026 \n",
       "L 60.532086 72.461495 \n",
       "L 60.883455 71.929003 \n",
       "L 61.233812 71.344571 \n",
       "L 61.583204 70.708195 \n",
       "L 61.931674 70.019867 \n",
       "L 62.279267 69.279561 \n",
       "L 62.626026 68.48724 \n",
       "L 62.971998 67.64285 \n",
       "L 63.317221 66.746338 \n",
       "L 63.66174 65.797624 \n",
       "L 64.005599 64.79662 \n",
       "L 64.348841 63.743226 \n",
       "L 64.691506 62.637326 \n",
       "L 65.033639 61.478795 \n",
       "L 65.375282 60.267486 \n",
       "L 65.716475 59.003259 \n",
       "L 66.057262 57.685944 \n",
       "L 66.397683 56.315361 \n",
       "L 66.737781 54.891316 \n",
       "L 67.077598 53.413605 \n",
       "L 67.417177 51.882002 \n",
       "L 67.756557 50.296289 \n",
       "L 68.09578 48.656213 \n",
       "L 68.434889 46.961515 \n",
       "L 68.773926 45.21192 \n",
       "L 69.112931 43.407141 \n",
       "L 69.451948 41.546875 \n",
       "L 69.79102 39.630796 \n",
       "L 70.130185 37.658598 \n",
       "L 70.469488 35.629921 \n",
       "L 70.80897 33.544404 \n",
       "L 71.148674 31.401672 \n",
       "L 71.488644 29.201336 \n",
       "L 71.828923 26.942979 \n",
       "L 72.169551 24.626201 \n",
       "L 72.510573 22.250553 \n",
       "L 72.852033 19.815586 \n",
       "L 73.193974 17.320821 \n",
       "L 73.536441 14.765778 \n",
       "L 73.879481 12.149933 \n",
       "L 74.223132 9.472795 \n",
       "L 74.567444 6.733809 \n",
       "L 74.912462 3.932427 \n",
       "L 75.25823 1.068063 \n",
       "L 75.503017 -1 \n",
       "\" clip-path=\"url(#pd88908de6b)\" style=\"fill: none; stroke: #800080; stroke-width: 1.5\"/>\n",
       "    <path d=\"M 45.058484 23.863165 \n",
       "L 45.530523 26.532943 \n",
       "L 45.998339 29.127402 \n",
       "L 46.462028 31.647535 \n",
       "L 46.92169 34.094336 \n",
       "L 47.377422 36.468763 \n",
       "L 47.829316 38.771721 \n",
       "L 48.277465 41.00412 \n",
       "L 48.721957 43.16681 \n",
       "L 49.162883 45.260645 \n",
       "L 49.600325 47.286421 \n",
       "L 50.034371 49.244929 \n",
       "L 50.4651 51.13692 \n",
       "L 50.892595 52.96313 \n",
       "L 51.316933 54.724276 \n",
       "L 51.738194 56.421028 \n",
       "L 52.156453 58.054063 \n",
       "L 52.571785 59.624018 \n",
       "L 52.984262 61.131498 \n",
       "L 53.393955 62.577107 \n",
       "L 53.800937 63.961424 \n",
       "L 54.205275 65.284996 \n",
       "L 54.607039 66.548367 \n",
       "L 55.006294 67.752042 \n",
       "L 55.403107 68.896522 \n",
       "L 55.79754 69.98228 \n",
       "L 56.189659 71.009775 \n",
       "L 56.579524 71.979446 \n",
       "L 56.967199 72.89172 \n",
       "L 57.352742 73.746993 \n",
       "L 57.736214 74.545659 \n",
       "L 58.117673 75.288087 \n",
       "L 58.497175 75.974629 \n",
       "L 58.874778 76.605623 \n",
       "L 59.25054 77.181393 \n",
       "L 59.624513 77.702242 \n",
       "L 59.996752 78.168462 \n",
       "L 60.367313 78.580328 \n",
       "L 60.736247 78.938098 \n",
       "L 61.103606 79.24202 \n",
       "L 61.469442 79.492322 \n",
       "L 61.833807 79.689222 \n",
       "L 62.196751 79.832919 \n",
       "L 62.558323 79.923602 \n",
       "L 62.918574 79.961445 \n",
       "L 63.277551 79.946606 \n",
       "L 63.635303 79.879231 \n",
       "L 63.991879 79.759452 \n",
       "L 64.347324 79.58739 \n",
       "L 64.701686 79.363146 \n",
       "L 65.055013 79.086815 \n",
       "L 65.407349 78.758476 \n",
       "L 65.75874 78.378194 \n",
       "L 66.109232 77.946021 \n",
       "L 66.45887 77.461996 \n",
       "L 66.8077 76.926144 \n",
       "L 67.155764 76.338485 \n",
       "L 67.503106 75.699016 \n",
       "L 67.849772 75.007726 \n",
       "L 68.195804 74.264589 \n",
       "L 68.541247 73.469569 \n",
       "L 68.886145 72.622611 \n",
       "L 69.230537 71.723659 \n",
       "L 69.574469 70.772636 \n",
       "L 69.917982 69.769451 \n",
       "L 70.26112 68.714004 \n",
       "L 70.603925 67.60618 \n",
       "L 70.94644 66.445853 \n",
       "L 71.288708 65.232874 \n",
       "L 71.630769 63.967105 \n",
       "L 71.972665 62.648373 \n",
       "L 72.31444 61.276498 \n",
       "L 72.656135 59.851289 \n",
       "L 72.997793 58.372538 \n",
       "L 73.339458 56.840019 \n",
       "L 73.681168 55.253515 \n",
       "L 74.022968 53.612773 \n",
       "L 74.364899 51.917532 \n",
       "L 74.707005 50.167517 \n",
       "L 75.049327 48.362442 \n",
       "L 75.391909 46.502003 \n",
       "L 75.734795 44.585873 \n",
       "L 76.078025 42.613745 \n",
       "L 76.421644 40.58526 \n",
       "L 76.765695 38.500058 \n",
       "L 77.110221 36.357762 \n",
       "L 77.455267 34.157984 \n",
       "L 77.800879 31.900301 \n",
       "L 78.147098 29.584324 \n",
       "L 78.493969 27.209596 \n",
       "L 78.841538 24.775666 \n",
       "L 79.189851 22.282062 \n",
       "L 79.538952 19.728298 \n",
       "L 79.888892 17.113851 \n",
       "L 80.23971 14.438227 \n",
       "L 80.591458 11.700884 \n",
       "L 80.944182 8.901252 \n",
       "L 81.297929 6.038762 \n",
       "L 81.65275 3.112819 \n",
       "L 82.008691 0.12281 \n",
       "L 82.139954 -1 \n",
       "\" clip-path=\"url(#pd88908de6b)\" style=\"fill: none; stroke: #800080; stroke-width: 1.5\"/>\n",
       "    <path d=\"M 51.434997 23.278461 \n",
       "L 51.890665 25.96647 \n",
       "L 52.342469 28.578556 \n",
       "L 52.790503 31.115745 \n",
       "L 53.234861 33.579025 \n",
       "L 53.675635 35.969373 \n",
       "L 54.112914 38.287707 \n",
       "L 54.546784 40.534946 \n",
       "L 54.977333 42.711957 \n",
       "L 55.404645 44.819604 \n",
       "L 55.8288 46.858688 \n",
       "L 56.24988 48.830016 \n",
       "L 56.667962 50.734351 \n",
       "L 57.083124 52.572431 \n",
       "L 57.495443 54.344983 \n",
       "L 57.904991 56.052693 \n",
       "L 58.311844 57.696244 \n",
       "L 58.716071 59.276273 \n",
       "L 59.117742 60.793402 \n",
       "L 59.516926 62.248242 \n",
       "L 59.913692 63.641375 \n",
       "L 60.308104 64.973357 \n",
       "L 60.700231 66.244739 \n",
       "L 61.090133 67.456032 \n",
       "L 61.477877 68.607744 \n",
       "L 61.863522 69.700351 \n",
       "L 62.24713 70.73432 \n",
       "L 62.628761 71.710096 \n",
       "L 63.008475 72.628109 \n",
       "L 63.386329 73.488762 \n",
       "L 63.762382 74.292452 \n",
       "L 64.13669 75.039553 \n",
       "L 64.509307 75.730422 \n",
       "L 64.880291 76.3654 \n",
       "L 65.249695 76.944815 \n",
       "L 65.617571 77.468975 \n",
       "L 65.983974 77.938174 \n",
       "L 66.348956 78.352691 \n",
       "L 66.712567 78.712787 \n",
       "L 67.074859 79.018712 \n",
       "L 67.435883 79.270698 \n",
       "L 67.795689 79.468965 \n",
       "L 68.154324 79.613714 \n",
       "L 68.511839 79.705137 \n",
       "L 68.868283 79.743409 \n",
       "L 69.223701 79.728691 \n",
       "L 69.578143 79.66113 \n",
       "L 69.931655 79.54086 \n",
       "L 70.284283 79.368002 \n",
       "L 70.636074 79.142661 \n",
       "L 70.987074 78.864931 \n",
       "L 71.337328 78.534891 \n",
       "L 71.686881 78.152609 \n",
       "L 72.035779 77.718137 \n",
       "L 72.384066 77.231516 \n",
       "L 72.731788 76.692768 \n",
       "L 73.078985 76.101914 \n",
       "L 73.425705 75.458952 \n",
       "L 73.771989 74.763872 \n",
       "L 74.117882 74.016646 \n",
       "L 74.463428 73.217237 \n",
       "L 74.808671 72.36559 \n",
       "L 75.15365 71.461651 \n",
       "L 75.498412 70.505339 \n",
       "L 75.842997 69.496563 \n",
       "L 76.18745 68.435221 \n",
       "L 76.531814 67.321198 \n",
       "L 76.87613 66.154366 \n",
       "L 77.220444 64.934575 \n",
       "L 77.564795 63.661684 \n",
       "L 77.909227 62.33552 \n",
       "L 78.253783 60.9559 \n",
       "L 78.598506 59.52263 \n",
       "L 78.943438 58.0355 \n",
       "L 79.288626 56.494283 \n",
       "L 79.634107 54.898758 \n",
       "L 79.979928 53.248669 \n",
       "L 80.326131 51.543752 \n",
       "L 80.67276 49.78373 \n",
       "L 81.01986 47.968314 \n",
       "L 81.367472 46.097195 \n",
       "L 81.715645 44.170042 \n",
       "L 82.064418 42.186545 \n",
       "L 82.413838 40.146343 \n",
       "L 82.76395 38.049069 \n",
       "L 83.114798 35.894345 \n",
       "L 83.46643 33.68177 \n",
       "L 83.818891 31.41093 \n",
       "L 84.172225 29.081419 \n",
       "L 84.52648 26.692776 \n",
       "L 84.881702 24.244554 \n",
       "L 85.237941 21.736267 \n",
       "L 85.595242 19.167422 \n",
       "L 85.953657 16.537497 \n",
       "L 86.31323 13.845991 \n",
       "L 86.674012 11.09235 \n",
       "L 87.036054 8.276 \n",
       "L 87.399405 5.396366 \n",
       "L 87.764116 2.452845 \n",
       "L 88.13024 -0.555183 \n",
       "L 88.183445 -1 \n",
       "\" clip-path=\"url(#pd88908de6b)\" style=\"fill: none; stroke: #800080; stroke-width: 1.5\"/>\n",
       "    <path d=\"M 57.802826 16.585704 \n",
       "L 58.243965 19.323283 \n",
       "L 58.681577 21.983522 \n",
       "L 59.115752 24.567457 \n",
       "L 59.546581 27.076125 \n",
       "L 59.974153 29.510525 \n",
       "L 60.39855 31.871603 \n",
       "L 60.819859 34.160305 \n",
       "L 61.238161 36.377517 \n",
       "L 61.653538 38.524139 \n",
       "L 62.066067 40.600985 \n",
       "L 62.475827 42.60889 \n",
       "L 62.882892 44.548634 \n",
       "L 63.287337 46.420986 \n",
       "L 63.689235 48.226684 \n",
       "L 64.088657 49.966436 \n",
       "L 64.485676 51.640943 \n",
       "L 64.880358 53.250868 \n",
       "L 65.27277 54.796841 \n",
       "L 65.662981 56.279493 \n",
       "L 66.051054 57.699424 \n",
       "L 66.437054 59.057203 \n",
       "L 66.821046 60.353399 \n",
       "L 67.20309 61.588534 \n",
       "L 67.583248 62.763131 \n",
       "L 67.961579 63.877682 \n",
       "L 68.338144 64.932664 \n",
       "L 68.712999 65.928535 \n",
       "L 69.086205 66.865735 \n",
       "L 69.457815 67.744681 \n",
       "L 69.827887 68.565781 \n",
       "L 70.196476 69.329417 \n",
       "L 70.563635 70.035958 \n",
       "L 70.929419 70.685752 \n",
       "L 71.293882 71.279139 \n",
       "L 71.657074 71.816433 \n",
       "L 72.019047 72.297935 \n",
       "L 72.379855 72.723936 \n",
       "L 72.739545 73.094701 \n",
       "L 73.098168 73.410488 \n",
       "L 73.455775 73.671535 \n",
       "L 73.812414 73.878069 \n",
       "L 74.168134 74.030296 \n",
       "L 74.522982 74.128414 \n",
       "L 74.877008 74.172602 \n",
       "L 75.230256 74.163026 \n",
       "L 75.582775 74.099839 \n",
       "L 75.934613 73.983177 \n",
       "L 76.285812 73.813165 \n",
       "L 76.636421 73.589912 \n",
       "L 76.986486 73.313514 \n",
       "L 77.336051 72.984054 \n",
       "L 77.68516 72.6016 \n",
       "L 78.03386 72.166208 \n",
       "L 78.382195 71.677919 \n",
       "L 78.73021 71.136758 \n",
       "L 79.077948 70.542747 \n",
       "L 79.425452 69.895885 \n",
       "L 79.772769 69.196158 \n",
       "L 80.11994 68.443544 \n",
       "L 80.467011 67.638003 \n",
       "L 80.814026 66.77948 \n",
       "L 81.161025 65.867919 \n",
       "L 81.508054 64.903237 \n",
       "L 81.855157 63.885345 \n",
       "L 82.202376 62.814138 \n",
       "L 82.549755 61.689497 \n",
       "L 82.897339 60.511292 \n",
       "L 83.245171 59.279371 \n",
       "L 83.593293 57.99359 \n",
       "L 83.941749 56.653772 \n",
       "L 84.290583 55.259731 \n",
       "L 84.63984 53.811268 \n",
       "L 84.989564 52.308171 \n",
       "L 85.3398 50.750205 \n",
       "L 85.690589 49.137145 \n",
       "L 86.041978 47.468729 \n",
       "L 86.394011 45.744692 \n",
       "L 86.746734 43.964744 \n",
       "L 87.100191 42.128593 \n",
       "L 87.454429 40.235923 \n",
       "L 87.809494 38.286395 \n",
       "L 88.16543 36.279694 \n",
       "L 88.522285 34.215449 \n",
       "L 88.880104 32.093281 \n",
       "L 89.238937 29.912811 \n",
       "L 89.59883 27.673628 \n",
       "L 89.959833 25.375302 \n",
       "L 90.32199 23.017418 \n",
       "L 90.685353 20.599515 \n",
       "L 91.049971 18.121123 \n",
       "L 91.415893 15.581751 \n",
       "L 91.783171 12.980891 \n",
       "L 92.151856 10.318015 \n",
       "L 92.521997 7.592601 \n",
       "L 92.893648 4.804088 \n",
       "L 93.266861 1.951889 \n",
       "L 93.641689 -0.964589 \n",
       "L 93.646161 -1 \n",
       "\" clip-path=\"url(#pd88908de6b)\" style=\"fill: none; stroke: #800080; stroke-width: 1.5\"/>\n",
       "    <path d=\"M 64.251157 3.488662 \n",
       "L 64.679189 6.309805 \n",
       "L 65.104019 9.051269 \n",
       "L 65.525734 11.714155 \n",
       "L 65.944421 14.299544 \n",
       "L 66.360166 16.80848 \n",
       "L 66.773049 19.241956 \n",
       "L 67.183153 21.600953 \n",
       "L 67.590557 23.886407 \n",
       "L 67.995339 26.099235 \n",
       "L 68.397574 28.240326 \n",
       "L 68.79734 30.31052 \n",
       "L 69.194705 32.310645 \n",
       "L 69.589745 34.241503 \n",
       "L 69.982529 36.103877 \n",
       "L 70.373127 37.898484 \n",
       "L 70.761607 39.626073 \n",
       "L 71.148036 41.28732 \n",
       "L 71.532477 42.882902 \n",
       "L 71.914997 44.413463 \n",
       "L 72.29566 45.879639 \n",
       "L 72.674526 47.28202 \n",
       "L 73.05166 48.621201 \n",
       "L 73.427119 49.897722 \n",
       "L 73.800965 51.112135 \n",
       "L 74.173254 52.264953 \n",
       "L 74.544046 53.356669 \n",
       "L 74.913397 54.387763 \n",
       "L 75.281364 55.358696 \n",
       "L 75.648001 56.269901 \n",
       "L 76.013364 57.121806 \n",
       "L 76.377508 57.914811 \n",
       "L 76.740484 58.649294 \n",
       "L 77.102345 59.325627 \n",
       "L 77.463145 59.944157 \n",
       "L 77.822934 60.505218 \n",
       "L 78.181763 61.009122 \n",
       "L 78.539683 61.456172 \n",
       "L 78.896743 61.846644 \n",
       "L 79.252994 62.18081 \n",
       "L 79.608483 62.458917 \n",
       "L 79.963261 62.681203 \n",
       "L 80.317374 62.847882 \n",
       "L 80.67087 62.959164 \n",
       "L 81.023798 63.015233 \n",
       "L 81.376203 63.016265 \n",
       "L 81.728133 62.962419 \n",
       "L 82.079635 62.853838 \n",
       "L 82.430754 62.690654 \n",
       "L 82.781536 62.472978 \n",
       "L 83.132027 62.200916 \n",
       "L 83.482272 61.874554 \n",
       "L 83.832317 61.493963 \n",
       "L 84.182206 61.059201 \n",
       "L 84.531985 60.570316 \n",
       "L 84.881701 60.027331 \n",
       "L 85.231394 59.430273 \n",
       "L 85.58111 58.77914 \n",
       "L 85.930895 58.073925 \n",
       "L 86.280792 57.314597 \n",
       "L 86.630847 56.501124 \n",
       "L 86.981105 55.633445 \n",
       "L 87.331607 54.711505 \n",
       "L 87.682399 53.735223 \n",
       "L 88.033527 52.704502 \n",
       "L 88.385033 51.619237 \n",
       "L 88.736963 50.479304 \n",
       "L 89.089362 49.284574 \n",
       "L 89.442276 48.034887 \n",
       "L 89.795746 46.730097 \n",
       "L 90.14982 45.370018 \n",
       "L 90.504542 43.954463 \n",
       "L 90.859958 42.483226 \n",
       "L 91.216114 40.956085 \n",
       "L 91.573057 39.3728 \n",
       "L 91.930829 37.733139 \n",
       "L 92.289479 36.036829 \n",
       "L 92.649054 34.283599 \n",
       "L 93.0096 32.473148 \n",
       "L 93.371165 30.605176 \n",
       "L 93.733797 28.679357 \n",
       "L 94.097545 26.695339 \n",
       "L 94.462453 24.652798 \n",
       "L 94.828574 22.551343 \n",
       "L 95.195955 20.390594 \n",
       "L 95.564646 18.170149 \n",
       "L 95.934699 15.889588 \n",
       "L 96.306165 13.548457 \n",
       "L 96.679091 11.146344 \n",
       "L 97.053532 8.68276 \n",
       "L 97.42954 6.157218 \n",
       "L 97.807167 3.569208 \n",
       "L 98.186467 0.918218 \n",
       "L 98.455721 -1 \n",
       "\" clip-path=\"url(#pd88908de6b)\" style=\"fill: none; stroke: #800080; stroke-width: 1.5\"/>\n",
       "    <path d=\"M 73.183498 -1 \n",
       "L 73.330408 -0.072858 \n",
       "L 73.730304 2.388942 \n",
       "L 74.127809 4.774231 \n",
       "L 74.522997 7.084001 \n",
       "L 74.915942 9.319153 \n",
       "L 75.306718 11.480631 \n",
       "L 75.695394 13.569274 \n",
       "L 76.08204 15.585947 \n",
       "L 76.466725 17.531471 \n",
       "L 76.849518 19.406635 \n",
       "L 77.230484 21.212204 \n",
       "L 77.609688 22.948923 \n",
       "L 77.987192 24.617491 \n",
       "L 78.363061 26.218596 \n",
       "L 78.737357 27.752906 \n",
       "L 79.110141 29.221054 \n",
       "L 79.481473 30.623673 \n",
       "L 79.851411 31.96134 \n",
       "L 80.220015 33.234622 \n",
       "L 80.587341 34.444083 \n",
       "L 80.953446 35.590236 \n",
       "L 81.318385 36.673587 \n",
       "L 81.682217 37.694634 \n",
       "L 82.044991 38.653835 \n",
       "L 82.406765 39.551634 \n",
       "L 82.767591 40.388469 \n",
       "L 83.127521 41.164729 \n",
       "L 83.486607 41.880813 \n",
       "L 83.844903 42.537093 \n",
       "L 84.202456 43.133918 \n",
       "L 84.559319 43.671621 \n",
       "L 84.915542 44.150525 \n",
       "L 85.271173 44.570921 \n",
       "L 85.626263 44.933098 \n",
       "L 85.98086 45.237321 \n",
       "L 86.335013 45.48384 \n",
       "L 86.688768 45.672885 \n",
       "L 87.042174 45.804677 \n",
       "L 87.395281 45.879412 \n",
       "L 87.748132 45.897282 \n",
       "L 88.100775 45.858449 \n",
       "L 88.453259 45.763072 \n",
       "L 88.805628 45.611289 \n",
       "L 89.157928 45.403226 \n",
       "L 89.510208 45.138985 \n",
       "L 89.862511 44.818666 \n",
       "L 90.214883 44.442343 \n",
       "L 90.567372 44.010083 \n",
       "L 90.920021 43.521936 \n",
       "L 91.272879 42.977934 \n",
       "L 91.625987 42.378094 \n",
       "L 91.979393 41.722429 \n",
       "L 92.333143 41.010925 \n",
       "L 92.68728 40.24356 \n",
       "L 93.041852 39.420296 \n",
       "L 93.396905 38.541074 \n",
       "L 93.752482 37.605839 \n",
       "L 94.10863 36.614505 \n",
       "L 94.465394 35.566969 \n",
       "L 94.822821 34.463132 \n",
       "L 95.180957 33.302861 \n",
       "L 95.539848 32.086023 \n",
       "L 95.899543 30.812452 \n",
       "L 96.260084 29.481995 \n",
       "L 96.621519 28.094457 \n",
       "L 96.983897 26.649645 \n",
       "L 97.347265 25.14735 \n",
       "L 97.711669 23.587331 \n",
       "L 98.077161 21.969348 \n",
       "L 98.443785 20.293151 \n",
       "L 98.811591 18.558456 \n",
       "L 99.180628 16.764983 \n",
       "L 99.550946 14.912423 \n",
       "L 99.922595 13.000453 \n",
       "L 100.295624 11.028731 \n",
       "L 100.670088 8.996894 \n",
       "L 101.046032 6.904599 \n",
       "L 101.423511 4.751441 \n",
       "L 101.802577 2.537027 \n",
       "L 102.183283 0.260931 \n",
       "L 102.389499 -1 \n",
       "\" clip-path=\"url(#pd88908de6b)\" style=\"fill: none; stroke: #800080; stroke-width: 1.5\"/>\n",
       "    <path d=\"M 84.664167 -1 \n",
       "L 84.739194 -0.642601 \n",
       "L 85.109191 1.055489 \n",
       "L 85.477915 2.68352 \n",
       "L 85.845426 4.242181 \n",
       "L 86.211783 5.732142 \n",
       "L 86.577044 7.154025 \n",
       "L 86.941266 8.508469 \n",
       "L 87.304505 9.796035 \n",
       "L 87.666818 11.017323 \n",
       "L 88.028258 12.172848 \n",
       "L 88.388883 13.263163 \n",
       "L 88.748743 14.288761 \n",
       "L 89.107893 15.250114 \n",
       "L 89.466386 16.147695 \n",
       "L 89.824273 16.981932 \n",
       "L 90.181606 17.753251 \n",
       "L 90.538438 18.462043 \n",
       "L 90.894817 19.108697 \n",
       "L 91.250795 19.693579 \n",
       "L 91.606421 20.217019 \n",
       "L 91.961745 20.679348 \n",
       "L 92.316815 21.080871 \n",
       "L 92.671681 21.421869 \n",
       "L 93.026392 21.702618 \n",
       "L 93.380995 21.923372 \n",
       "L 93.735539 22.084364 \n",
       "L 94.090072 22.185813 \n",
       "L 94.444639 22.22792 \n",
       "L 94.79929 22.210863 \n",
       "L 95.154072 22.134816 \n",
       "L 95.509031 21.99993 \n",
       "L 95.864215 21.806342 \n",
       "L 96.21967 21.554168 \n",
       "L 96.575443 21.243507 \n",
       "L 96.93158 20.874459 \n",
       "L 97.28813 20.447075 \n",
       "L 97.645137 19.96143 \n",
       "L 98.002651 19.417556 \n",
       "L 98.360714 18.815475 \n",
       "L 98.719376 18.155205 \n",
       "L 99.078683 17.436723 \n",
       "L 99.438682 16.660024 \n",
       "L 99.79942 15.82507 \n",
       "L 100.160946 14.93179 \n",
       "L 100.523303 13.98013 \n",
       "L 100.886541 12.970004 \n",
       "L 101.250708 11.901314 \n",
       "L 101.615851 10.773945 \n",
       "L 101.982019 9.587767 \n",
       "L 102.34926 8.342634 \n",
       "L 102.717624 7.038371 \n",
       "L 103.087157 5.674822 \n",
       "L 103.457909 4.251788 \n",
       "L 103.829931 2.769059 \n",
       "L 104.203271 1.226411 \n",
       "L 104.577982 -0.376403 \n",
       "L 104.719005 -1 \n",
       "\" clip-path=\"url(#pd88908de6b)\" style=\"fill: none; stroke: #800080; stroke-width: 1.5\"/>\n",
       "    <path clip-path=\"url(#pd88908de6b)\" style=\"fill: none; stroke: #800080; stroke-width: 1.5\"/>\n",
       "    <path clip-path=\"url(#pd88908de6b)\" style=\"fill: none; stroke: #800080; stroke-width: 1.5\"/>\n",
       "   </g>\n",
       "  </g>\n",
       " </g>\n",
       " <defs>\n",
       "  <clipPath id=\"pd88908de6b\">\n",
       "   <rect x=\"7.2\" y=\"7.2\" width=\"135.9\" height=\"135.9\"/>\n",
       "  </clipPath>\n",
       " </defs>\n",
       "</svg>\n"
      ],
      "text/plain": [
       "<Figure size 252x180 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Construct grid and compute function\n",
    "x, y = tf.meshgrid(tf.linspace(-2., 2., 101),\n",
    "                   tf.linspace(-2., 2., 101))\n",
    "\n",
    "z = x*tf.exp(- x**2 - y**2)\n",
    "\n",
    "# Compute approximating quadratic with gradient and Hessian at (1, 0)\n",
    "w = tf.exp(tf.constant([-1.]))*(-1 - (x + 1) + 2 * (x + 1)**2 + 2 * y**2)\n",
    "\n",
    "# Plot function\n",
    "ax = d2l.plt.figure().add_subplot(111, projection='3d')\n",
    "ax.plot_wireframe(x.numpy(), y.numpy(), z.numpy(),\n",
    "                  **{'rstride': 10, 'cstride': 10})\n",
    "ax.plot_wireframe(x.numpy(), y.numpy(), w.numpy(),\n",
    "                  **{'rstride': 10, 'cstride': 10}, color='purple')\n",
    "d2l.plt.xlabel('x')\n",
    "d2l.plt.ylabel('y')\n",
    "d2l.set_figsize()\n",
    "ax.set_xlim(-2, 2)\n",
    "ax.set_ylim(-2, 2)\n",
    "ax.set_zlim(-1, 1)\n",
    "ax.dist = 12"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "origin_pos": 20
   },
   "source": [
    "This forms the basis for Newton's Algorithm discussed in :numref:`sec_gd`, where we perform numerical optimization iteratively finding the best fitting quadratic, and then exactly minimizing that quadratic.\n",
    "\n",
    "## A Little Matrix Calculus\n",
    "Derivatives of functions involving matrices turn out to be particularly nice.  This section can become notationally heavy, so may be skipped in a first reading, but it is useful to know how derivatives of functions involving common matrix operations are often much cleaner than one might initially anticipate, particularly given how central matrix operations are to deep learning applications.\n",
    "\n",
    "Let us begin with an example.  Suppose that we have some fixed column vector $\\boldsymbol{\\beta}$, and we want to take the product function $f(\\mathbf{x}) = \\boldsymbol{\\beta}^\\top\\mathbf{x}$, and understand how the dot product changes when we change $\\mathbf{x}$.\n",
    "\n",
    "A bit of notation that will be useful when working with matrix derivatives in ML is called the *denominator layout matrix derivative* where we assemble our partial derivatives into the shape of whatever vector, matrix, or tensor is in the denominator of the differential.  In this case, we will write\n",
    "\n",
    "$$\n",
    "\\frac{df}{d\\mathbf{x}} = \\begin{bmatrix}\n",
    "\\frac{df}{dx_1} \\\\\n",
    "\\vdots \\\\\n",
    "\\frac{df}{dx_n}\n",
    "\\end{bmatrix},\n",
    "$$\n",
    "\n",
    "where we matched the shape of the column vector $\\mathbf{x}$.\n",
    "\n",
    "If we write out our function into components this is\n",
    "\n",
    "$$\n",
    "f(\\mathbf{x}) = \\sum_{i = 1}^{n} \\beta_ix_i = \\beta_1x_1 + \\cdots + \\beta_nx_n.\n",
    "$$\n",
    "\n",
    "If we now take the partial derivative with respect to say $\\beta_1$, note that everything is zero but the first term, which is just $x_1$ multiplied by $\\beta_1$, so we obtain that\n",
    "\n",
    "$$\n",
    "\\frac{df}{dx_1} = \\beta_1,\n",
    "$$\n",
    "\n",
    "or more generally that\n",
    "\n",
    "$$\n",
    "\\frac{df}{dx_i} = \\beta_i.\n",
    "$$\n",
    "\n",
    "We can now reassemble this into a matrix to see\n",
    "\n",
    "$$\n",
    "\\frac{df}{d\\mathbf{x}} = \\begin{bmatrix}\n",
    "\\frac{df}{dx_1} \\\\\n",
    "\\vdots \\\\\n",
    "\\frac{df}{dx_n}\n",
    "\\end{bmatrix} = \\begin{bmatrix}\n",
    "\\beta_1 \\\\\n",
    "\\vdots \\\\\n",
    "\\beta_n\n",
    "\\end{bmatrix} = \\boldsymbol{\\beta}.\n",
    "$$\n",
    "\n",
    "This illustrates a few factors about matrix calculus that we will often counter throughout this section:\n",
    "\n",
    "* First, The computations will get rather involved.\n",
    "* Second, The final results are much cleaner than the intermediate process, and will always look similar to the single variable case.  In this case, note that $\\frac{d}{dx}(bx) = b$ and $\\frac{d}{d\\mathbf{x}} (\\boldsymbol{\\beta}^\\top\\mathbf{x}) = \\boldsymbol{\\beta}$ are both similar.\n",
    "* Third, transposes can often appear seemingly from nowhere.  The core reason for this is the convention that we match the shape of the denominator, thus when we multiply matrices, we will need to take transposes to match back to the shape of the original term.\n",
    "\n",
    "To keep building intuition, let us try a computation that is a little harder.  Suppose that we have a column vector $\\mathbf{x}$, and a square matrix $A$ and we want to compute\n",
    "\n",
    "$$\\frac{d}{d\\mathbf{x}}(\\mathbf{x}^\\top A \\mathbf{x}).$$\n",
    ":eqlabel:`eq_mat_goal_1`\n",
    "\n",
    "To drive towards easier to manipulate notation, let us consider this problem using Einstein notation.  In this case we can write the function as\n",
    "\n",
    "$$\n",
    "\\mathbf{x}^\\top A \\mathbf{x} = x_ia_{ij}x_j.\n",
    "$$\n",
    "\n",
    "To compute our derivative, we need to understand for every $k$, what is the value of\n",
    "\n",
    "$$\n",
    "\\frac{d}{dx_k}(\\mathbf{x}^\\top A \\mathbf{x}) = \\frac{d}{dx_k}x_ia_{ij}x_j.\n",
    "$$\n",
    "\n",
    "By the product rule, this is\n",
    "\n",
    "$$\n",
    "\\frac{d}{dx_k}x_ia_{ij}x_j = \\frac{dx_i}{dx_k}a_{ij}x_j + x_ia_{ij}\\frac{dx_j}{dx_k}.\n",
    "$$\n",
    "\n",
    "For a term like $\\frac{dx_i}{dx_k}$, it is not hard to see that this is one when $i=k$ and zero otherwise.  This means that every term where $i$ and $k$ are different vanish from this sum, so the only terms that remain in that first sum are the ones where $i=k$.  The same reasoning holds for the second term where we need $j=k$.  This gives\n",
    "\n",
    "$$\n",
    "\\frac{d}{dx_k}x_ia_{ij}x_j = a_{kj}x_j + x_ia_{ik}.\n",
    "$$\n",
    "\n",
    "Now, the names of the indices in Einstein notation are arbitrary---the fact that $i$ and $j$ are different is immaterial to this computation at this point, so we can re-index so that they both use $i$ to see that\n",
    "\n",
    "$$\n",
    "\\frac{d}{dx_k}x_ia_{ij}x_j = a_{ki}x_i + x_ia_{ik} = (a_{ki} + a_{ik})x_i.\n",
    "$$\n",
    "\n",
    "Now, here is where we start to need some practice to go further.  Let us try and identify this outcome in terms of matrix operations.  $a_{ki} + a_{ik}$ is the $k, i$-th component of $\\mathbf{A} + \\mathbf{A}^\\top$.  This gives\n",
    "\n",
    "$$\n",
    "\\frac{d}{dx_k}x_ia_{ij}x_j = [\\mathbf{A} + \\mathbf{A}^\\top]_{ki}x_i.\n",
    "$$\n",
    "\n",
    "Similarly, this term is now the product of the matrix $\\mathbf{A} + \\mathbf{A}^\\top$ by the vector $\\mathbf{x}$, so we see that\n",
    "\n",
    "$$\n",
    "\\left[\\frac{d}{d\\mathbf{x}}(\\mathbf{x}^\\top A \\mathbf{x})\\right]_k = \\frac{d}{dx_k}x_ia_{ij}x_j = [(\\mathbf{A} + \\mathbf{A}^\\top)\\mathbf{x}]_k.\n",
    "$$\n",
    "\n",
    "Thus, we see that the $k$-th entry of the desired derivative from :eqref:`eq_mat_goal_1` is just the $k$-th entry of the vector on the right, and thus the two are the same.  Thus yields\n",
    "\n",
    "$$\n",
    "\\frac{d}{d\\mathbf{x}}(\\mathbf{x}^\\top A \\mathbf{x}) = (\\mathbf{A} + \\mathbf{A}^\\top)\\mathbf{x}.\n",
    "$$\n",
    "\n",
    "This required significantly more work than our last one, but the final result is small.  More than that, consider the following computation for traditional single variable derivatives:\n",
    "\n",
    "$$\n",
    "\\frac{d}{dx}(xax) = \\frac{dx}{dx}ax + xa\\frac{dx}{dx} = (a+a)x.\n",
    "$$\n",
    "\n",
    "Equivalently $\\frac{d}{dx}(ax^2) = 2ax = (a+a)x$.  Again, we get a result that looks rather like the single variable result but with a transpose tossed in.\n",
    "\n",
    "At this point, the pattern should be looking rather suspicious, so let us try to figure out why.  When we take matrix derivatives like this, let us first assume that the expression we get will be another matrix expression: an expression we can write it in terms of products and sums of matrices and their transposes.  If such an expression exists, it will need to be true for all matrices.  In particular, it will need to be true of $1 \\times 1$ matrices, in which case the matrix product is just the product of the numbers, the matrix sum is just the sum, and the transpose does nothing at all!  In other words, whatever expression we get *must* match the single variable expression.  This means that, with some practice, one can often guess matrix derivatives just by knowing what the associated single variable expression must look like!\n",
    "\n",
    "Let us try this out.  Suppose that $\\mathbf{X}$ is a $n \\times m$ matrix, $\\mathbf{U}$ is an $n \\times r$ and $\\mathbf{V}$ is an $r \\times m$.  Let us try to compute\n",
    "\n",
    "$$\\frac{d}{d\\mathbf{V}} \\|\\mathbf{X} - \\mathbf{U}\\mathbf{V}\\|_2^{2} = \\;?$$\n",
    ":eqlabel:`eq_mat_goal_2`\n",
    "\n",
    "This computation is important in an area called matrix factorization.  For us, however, it is just a derivative to compute.  Let us try to imaging what this would be for $1\\times1$ matrices.  In that case, we get the expression\n",
    "\n",
    "$$\n",
    "\\frac{d}{dv} (x-uv)^{2}= -2(x-uv)u,\n",
    "$$\n",
    "\n",
    "where, the derivative is rather standard.  If we try to convert this back into a matrix expression we get\n",
    "\n",
    "$$\n",
    "\\frac{d}{d\\mathbf{V}} \\|\\mathbf{X} - \\mathbf{U}\\mathbf{V}\\|_2^{2}= -2(\\mathbf{X} - \\mathbf{U}\\mathbf{V})\\mathbf{U}.\n",
    "$$\n",
    "\n",
    "However, if we look at this it does not quite work.  Recall that $\\mathbf{X}$ is $n \\times m$, as is $\\mathbf{U}\\mathbf{V}$, so the matrix $2(\\mathbf{X} - \\mathbf{U}\\mathbf{V})$ is $n \\times m$.  On the other hand $\\mathbf{U}$ is $n \\times r$, and we cannot multiply a $n \\times m$ and a $n \\times r$ matrix since the dimensions do not match!\n",
    "\n",
    "We want to get $\\frac{d}{d\\mathbf{V}}$, which is the same shape as $\\mathbf{V}$, which is $r \\times m$.  So somehow we need to take a $n \\times m$ matrix and a $n \\times r$ matrix, multiply them together (perhaps with some transposes) to get a $r \\times m$. We can do this by multiplying $U^\\top$ by $(\\mathbf{X} - \\mathbf{U}\\mathbf{V})$.  Thus, we can guess the solution to :eqref:`eq_mat_goal_2` is\n",
    "\n",
    "$$\n",
    "\\frac{d}{d\\mathbf{V}} \\|\\mathbf{X} - \\mathbf{U}\\mathbf{V}\\|_2^{2}= -2\\mathbf{U}^\\top(\\mathbf{X} - \\mathbf{U}\\mathbf{V}).\n",
    "$$\n",
    "\n",
    "To show that this works, we would be remiss to not provide a detailed computation.  If we already believe that this rule-of-thumb works, feel free to skip past this derivation.  To compute\n",
    "\n",
    "$$\n",
    "\\frac{d}{d\\mathbf{V}} \\|\\mathbf{X} - \\mathbf{U}\\mathbf{V}\\|_2^2,\n",
    "$$\n",
    "\n",
    "we must find for every $a$, and $b$\n",
    "\n",
    "$$\n",
    "\\frac{d}{dv_{ab}} \\|\\mathbf{X} - \\mathbf{U}\\mathbf{V}\\|_2^{2}= \\frac{d}{dv_{ab}} \\sum_{i, j}\\left(x_{ij} - \\sum_k u_{ik}v_{kj}\\right)^2.\n",
    "$$\n",
    "\n",
    "Recalling that all entries of $\\mathbf{X}$ and $\\mathbf{U}$ are constants as far as $\\frac{d}{dv_{ab}}$ is concerned, we may push the derivative inside the sum, and apply the chain rule to the square to get\n",
    "\n",
    "$$\n",
    "\\frac{d}{dv_{ab}} \\|\\mathbf{X} - \\mathbf{U}\\mathbf{V}\\|_2^{2}= \\sum_{i, j}2\\left(x_{ij} - \\sum_k u_{ik}v_{kj}\\right)\\left(-\\sum_k u_{ik}\\frac{dv_{kj}}{dv_{ab}} \\right).\n",
    "$$\n",
    "\n",
    "As in the previous derivation, we may note that $\\frac{dv_{kj}}{dv_{ab}}$ is only non-zero if the $k=a$ and $j=b$.  If either of those conditions do not hold, the term in the sum is zero, and we may freely discard it.  We see that\n",
    "\n",
    "$$\n",
    "\\frac{d}{dv_{ab}} \\|\\mathbf{X} - \\mathbf{U}\\mathbf{V}\\|_2^{2}= -2\\sum_{i}\\left(x_{ib} - \\sum_k u_{ik}v_{kb}\\right)u_{ia}.\n",
    "$$\n",
    "\n",
    "An important subtlety here is that the requirement that $k=a$ does not occur inside the inner sum since that $k$ is a dummy variable which we are summing over inside the inner term.  For a notationally cleaner example, consider why\n",
    "\n",
    "$$\n",
    "\\frac{d}{dx_1} \\left(\\sum_i x_i \\right)^{2}= 2\\left(\\sum_i x_i \\right).\n",
    "$$\n",
    "\n",
    "From this point, we may start identifying components of the sum.  First,\n",
    "\n",
    "$$\n",
    "\\sum_k u_{ik}v_{kb} = [\\mathbf{U}\\mathbf{V}]_{ib}.\n",
    "$$\n",
    "\n",
    "So the entire expression in the inside of the sum is\n",
    "\n",
    "$$\n",
    "x_{ib} - \\sum_k u_{ik}v_{kb} = [\\mathbf{X}-\\mathbf{U}\\mathbf{V}]_{ib}.\n",
    "$$\n",
    "\n",
    "This means we may now write our derivative as\n",
    "\n",
    "$$\n",
    "\\frac{d}{dv_{ab}} \\|\\mathbf{X} - \\mathbf{U}\\mathbf{V}\\|_2^{2}= -2\\sum_{i}[\\mathbf{X}-\\mathbf{U}\\mathbf{V}]_{ib}u_{ia}.\n",
    "$$\n",
    "\n",
    "We want this to look like the $a, b$ element of a matrix so we can use the technique as in the previous example to arrive at a matrix expression, which means that we need to exchange the order of the indices on $u_{ia}$.  If we notice that $u_{ia} = [\\mathbf{U}^\\top]_{ai}$, we can then write\n",
    "\n",
    "$$\n",
    "\\frac{d}{dv_{ab}} \\|\\mathbf{X} - \\mathbf{U}\\mathbf{V}\\|_2^{2}= -2\\sum_{i} [\\mathbf{U}^\\top]_{ai}[\\mathbf{X}-\\mathbf{U}\\mathbf{V}]_{ib}.\n",
    "$$\n",
    "\n",
    "This is a matrix product, and thus we can conclude that\n",
    "\n",
    "$$\n",
    "\\frac{d}{dv_{ab}} \\|\\mathbf{X} - \\mathbf{U}\\mathbf{V}\\|_2^{2}= -2[\\mathbf{U}^\\top(\\mathbf{X}-\\mathbf{U}\\mathbf{V})]_{ab}.\n",
    "$$\n",
    "\n",
    "and thus we may write the solution to :eqref:`eq_mat_goal_2`\n",
    "\n",
    "$$\n",
    "\\frac{d}{d\\mathbf{V}} \\|\\mathbf{X} - \\mathbf{U}\\mathbf{V}\\|_2^{2}= -2\\mathbf{U}^\\top(\\mathbf{X} - \\mathbf{U}\\mathbf{V}).\n",
    "$$\n",
    "\n",
    "This matches the solution we guessed above!\n",
    "\n",
    "It is reasonable to ask at this point, \"Why can I not just write down matrix versions of all the calculus rules I have learned?  It is clear this is still mechanical.  Why do we not just get it over with!\"  And indeed there are such rules and :cite:`Petersen.Pedersen.ea.2008` provides an excellent summary.  However, due to the plethora of ways matrix operations can be combined compared to single values, there are many more matrix derivative rules than single variable ones.  It is often the case that it is best to work with the indices, or leave it up to automatic differentiation when appropriate.\n",
    "\n",
    "## Summary\n",
    "\n",
    "* In higher dimensions, we can define gradients which serve the same purpose as derivatives in one dimension.  These allow us to see how a multi-variable function changes when we make an arbitrary small change to the inputs.\n",
    "* The backpropagation algorithm can be seen to be a method of organizing the multi-variable chain rule to allow for the efficient computation of many partial derivatives.\n",
    "* Matrix calculus allows us to write the derivatives of matrix expressions in concise ways.\n",
    "\n",
    "## Exercises\n",
    "1. Given a column vector $\\boldsymbol{\\beta}$, compute the derivatives of both $f(\\mathbf{x}) = \\boldsymbol{\\beta}^\\top\\mathbf{x}$ and $g(\\mathbf{x}) = \\mathbf{x}^\\top\\boldsymbol{\\beta}$.  Why do you get the same answer?\n",
    "2. Let $\\mathbf{v}$ be an $n$ dimension vector. What is $\\frac{\\partial}{\\partial\\mathbf{v}}\\|\\mathbf{v}\\|_2$?\n",
    "3. Let $L(x, y) = \\log(e^x + e^y)$.  Compute the gradient.  What is the sum of the components of the gradient?\n",
    "4. Let $f(x, y) = x^2y + xy^2$. Show that the only critical point is $(0,0)$. By considering $f(x, x)$, determine if $(0,0)$ is a maximum, minimum, or neither.\n",
    "5. Suppose that we are minimizing a function $f(\\mathbf{x}) = g(\\mathbf{x}) + h(\\mathbf{x})$.  How can we geometrically interpret the condition of $\\nabla f = 0$ in terms of $g$ and $h$?\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "origin_pos": 23,
    "tab": [
     "tensorflow"
    ]
   },
   "source": [
    "[Discussions](https://discuss.d2l.ai/t/1091)\n"
   ]
  }
 ],
 "metadata": {
  "language_info": {
   "name": "python"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}