{
 "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": 2,
    "tab": [
     "pytorch"
    ]
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'approximation: tensor([1.0819]), true Value: tensor([1.0821])'"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "%matplotlib inline\n",
    "import numpy as np\n",
    "import torch\n",
    "from IPython import display\n",
    "from mpl_toolkits import mplot3d\n",
    "from d2l import torch as d2l\n",
    "\n",
    "\n",
    "def f(x, y):\n",
    "    return torch.log(torch.exp(x) + torch.exp(y))\n",
    "def grad_f(x, y):\n",
    "    return torch.tensor([torch.exp(x) / (torch.exp(x) + torch.exp(y)),\n",
    "                     torch.exp(y) / (torch.exp(x) + torch.exp(y))])\n",
    "\n",
    "epsilon = torch.tensor([0.01, -0.03])\n",
    "grad_approx = f(torch.tensor([0.]), torch.log(\n",
    "    torch.tensor([2.]))) + epsilon.dot(\n",
    "    grad_f(torch.tensor([0.]), torch.log(torch.tensor(2.))))\n",
    "true_value = f(torch.tensor([0.]) + epsilon[0], torch.log(\n",
    "    torch.tensor([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": 6,
    "tab": [
     "pytorch"
    ]
   },
   "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-24T11:45:37.577896</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(#p83d4b80b7e)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_2\">\n",
       "      <defs>\n",
       "       <path id=\"m14ebea5dc8\" 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=\"#m14ebea5dc8\" 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.440337 143.1 \n",
       "L 93.440337 7.2 \n",
       "\" clip-path=\"url(#p83d4b80b7e)\" 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=\"#m14ebea5dc8\" x=\"93.440337\" 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.069243 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.020588 143.1 \n",
       "L 129.020588 7.2 \n",
       "\" clip-path=\"url(#p83d4b80b7e)\" 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=\"#m14ebea5dc8\" x=\"129.020588\" 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.839338 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.600839 143.1 \n",
       "L 164.600839 7.2 \n",
       "\" clip-path=\"url(#p83d4b80b7e)\" 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=\"#m14ebea5dc8\" x=\"164.600839\" 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.419589 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.181091 143.1 \n",
       "L 200.181091 7.2 \n",
       "\" clip-path=\"url(#p83d4b80b7e)\" 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=\"#m14ebea5dc8\" x=\"200.181091\" 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.999841 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.761342 143.1 \n",
       "L 235.761342 7.2 \n",
       "\" clip-path=\"url(#p83d4b80b7e)\" 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=\"#m14ebea5dc8\" x=\"235.761342\" 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.580092 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(#p83d4b80b7e)\" style=\"fill: none; stroke: #b0b0b0; stroke-width: 0.8; stroke-linecap: square\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_14\">\n",
       "      <defs>\n",
       "       <path id=\"m8b9f953339\" 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=\"#m8b9f953339\" 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(#p83d4b80b7e)\" 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=\"#m8b9f953339\" 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(#p83d4b80b7e)\" 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=\"#m8b9f953339\" 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.994898 23.924209 \n",
       "L 62.129716 33.372638 \n",
       "L 64.264529 41.789917 \n",
       "L 66.399346 49.241592 \n",
       "L 68.534159 55.791383 \n",
       "L 70.313174 60.605389 \n",
       "L 72.092185 64.871021 \n",
       "L 73.871196 68.622315 \n",
       "L 75.650211 71.892454 \n",
       "L 77.429226 74.713694 \n",
       "L 79.208233 77.11746 \n",
       "L 80.987248 79.134302 \n",
       "L 82.766259 80.793901 \n",
       "L 84.545274 82.12507 \n",
       "L 86.324285 83.155745 \n",
       "L 88.103295 83.913002 \n",
       "L 89.882311 84.423051 \n",
       "L 91.661326 84.711221 \n",
       "L 93.440339 84.801988 \n",
       "L 95.575152 84.683495 \n",
       "L 97.709967 84.353801 \n",
       "L 100.200584 83.751917 \n",
       "L 103.402806 82.720234 \n",
       "L 107.672438 81.070916 \n",
       "L 116.211697 77.694626 \n",
       "L 119.769723 76.55376 \n",
       "L 122.616143 75.849427 \n",
       "L 125.462563 75.373347 \n",
       "L 127.95318 75.170635 \n",
       "L 130.443798 75.187543 \n",
       "L 132.934416 75.439723 \n",
       "L 135.425033 75.939491 \n",
       "L 137.915651 76.695826 \n",
       "L 140.406268 77.714369 \n",
       "L 142.896885 78.997423 \n",
       "L 145.387504 80.543957 \n",
       "L 147.87812 82.349598 \n",
       "L 150.36874 84.406644 \n",
       "L 153.215159 87.05107 \n",
       "L 156.061581 89.9875 \n",
       "L 159.263802 93.605531 \n",
       "L 162.821826 97.959543 \n",
       "L 167.091454 103.539553 \n",
       "L 174.919111 114.237214 \n",
       "L 180.256152 121.339948 \n",
       "L 183.814174 125.71637 \n",
       "L 186.660595 128.885484 \n",
       "L 189.15121 131.341011 \n",
       "L 191.286028 133.15996 \n",
       "L 193.420841 134.671238 \n",
       "L 195.199856 135.664354 \n",
       "L 196.978871 136.387598 \n",
       "L 198.402075 136.753778 \n",
       "L 199.825288 136.915813 \n",
       "L 201.248497 136.859133 \n",
       "L 202.671706 136.568834 \n",
       "L 204.094915 136.029613 \n",
       "L 205.518123 135.225882 \n",
       "L 206.94134 134.141624 \n",
       "L 208.364549 132.760528 \n",
       "L 209.787758 131.065885 \n",
       "L 211.210966 129.04067 \n",
       "L 212.634175 126.667467 \n",
       "L 214.057384 123.928515 \n",
       "L 215.836403 119.962806 \n",
       "L 217.615414 115.361079 \n",
       "L 219.394425 110.086396 \n",
       "L 221.173436 104.100752 \n",
       "L 222.952455 97.365391 \n",
       "L 224.731466 89.840711 \n",
       "L 226.866279 79.712073 \n",
       "L 229.001092 68.316758 \n",
       "L 231.135905 55.581276 \n",
       "L 233.270727 41.430412 \n",
       "L 235.40554 25.787021 \n",
       "L 235.40554 25.787021 \n",
       "\" clip-path=\"url(#p83d4b80b7e)\" 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=\"p83d4b80b7e\">\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 = torch.arange(-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": [
     "pytorch"
    ]
   },
   "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": [
     "pytorch"
    ]
   },
   "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": 14,
    "tab": [
     "pytorch"
    ]
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "df/dw at -1.0, 0.0, -2.0, 1.0 is -4096.0\n",
      "df/dx at -1.0, 0.0, -2.0, 1.0 is -4096.0\n",
      "df/dy at -1.0, 0.0, -2.0, 1.0 is -4096.0\n",
      "df/dz at -1.0, 0.0, -2.0, 1.0 is -4096.0\n"
     ]
    }
   ],
   "source": [
    "# Initialize as ndarrays, then attach gradients\n",
    "w = torch.tensor([-1.], requires_grad=True)\n",
    "x = torch.tensor([0.], requires_grad=True)\n",
    "y = torch.tensor([-2.], requires_grad=True)\n",
    "z = torch.tensor([1.], requires_grad=True)\n",
    "# Do the computation like usual, tracking gradients\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",
    "f.backward()\n",
    "\n",
    "print(f'df/dw at {w.data.item()}, {x.data.item()}, {y.data.item()}, '\n",
    "      f'{z.data.item()} is {w.grad.data.item()}')\n",
    "print(f'df/dx at {w.data.item()}, {x.data.item()}, {y.data.item()}, '\n",
    "      f'{z.data.item()} is {x.grad.data.item()}')\n",
    "print(f'df/dy at {w.data.item()}, {x.data.item()}, {y.data.item()}, '\n",
    "      f'{z.data.item()} is {y.grad.data.item()}')\n",
    "print(f'df/dz at {w.data.item()}, {x.data.item()}, {y.data.item()}, '\n",
    "      f'{z.data.item()} is {z.grad.data.item()}')"
   ]
  },
  {
   "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": 18,
    "tab": [
     "pytorch"
    ]
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "/home/d2l-worker/miniconda3/envs/d2l-en-release-0/lib/python3.8/site-packages/torch/functional.py:568: UserWarning: torch.meshgrid: in an upcoming release, it will be required to pass the indexing argument. (Triggered internally at  ../aten/src/ATen/native/TensorShape.cpp:2228.)\n",
      "  return _VF.meshgrid(tensors, **kwargs)  # type: ignore[attr-defined]\n"
     ]
    },
    {
     "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-24T11:45:37.810781</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 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.962045 77.077925 \n",
       "L 32.347334 76.777719 \n",
       "L 32.732093 76.478802 \n",
       "L 33.116324 76.181227 \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.029644 74.715126 \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.064033 72.450654 \n",
       "L 38.440996 72.174349 \n",
       "L 38.817436 71.899337 \n",
       "L 39.193348 71.625514 \n",
       "L 39.568732 71.35276 \n",
       "L 39.943582 71.080942 \n",
       "L 40.317894 70.809912 \n",
       "L 40.691667 70.539508 \n",
       "L 41.064896 70.269555 \n",
       "L 41.437576 69.99987 \n",
       "L 41.809704 69.73026 \n",
       "L 42.181276 69.460527 \n",
       "L 42.552288 69.190466 \n",
       "L 42.922737 68.919873 \n",
       "L 43.292618 68.648543 \n",
       "L 43.66193 68.376274 \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.230988 66.429191 \n",
       "L 46.595687 66.143461 \n",
       "L 46.959811 65.855561 \n",
       "L 47.323362 65.565456 \n",
       "L 47.686345 65.273137 \n",
       "L 48.048763 64.97862 \n",
       "L 48.41062 64.681943 \n",
       "L 48.77192 64.383173 \n",
       "L 49.13267 64.082395 \n",
       "L 49.492874 63.77972 \n",
       "L 49.852538 63.475277 \n",
       "L 50.211668 63.169213 \n",
       "L 50.57027 62.861692 \n",
       "L 50.92835 62.55289 \n",
       "L 51.285915 62.242993 \n",
       "L 51.642971 61.932199 \n",
       "L 51.999523 61.620707 \n",
       "L 52.355578 61.308721 \n",
       "L 52.711142 60.996443 \n",
       "L 53.066218 60.684075 \n",
       "L 53.420813 60.371813 \n",
       "L 53.774931 60.059845 \n",
       "L 54.128577 59.74835 \n",
       "L 54.481754 59.437496 \n",
       "L 54.834465 59.127442 \n",
       "L 55.186714 58.818328 \n",
       "L 55.538504 58.510282 \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.290625 56.9895 \n",
       "L 57.639692 56.689703 \n",
       "L 57.988309 56.391445 \n",
       "L 58.336474 56.09474 \n",
       "L 58.68419 55.799585 \n",
       "L 59.031455 55.50597 \n",
       "L 59.378268 55.213874 \n",
       "L 59.72463 54.923265 \n",
       "L 60.07054 54.63411 \n",
       "L 60.415998 54.346365 \n",
       "L 60.761003 54.059982 \n",
       "L 61.105554 53.774912 \n",
       "L 61.449653 53.491099 \n",
       "L 61.793297 53.20849 \n",
       "L 62.136487 52.927028 \n",
       "L 62.479223 52.646656 \n",
       "L 62.821502 52.36732 \n",
       "L 63.163327 52.088963 \n",
       "L 63.504697 51.811533 \n",
       "L 63.845612 51.53498 \n",
       "L 64.186071 51.259256 \n",
       "L 64.526075 50.984312 \n",
       "L 64.865625 50.710108 \n",
       "\" clip-path=\"url(#p53818f802a)\" 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.915203 79.000711 \n",
       "L 38.29829 78.716613 \n",
       "L 38.680894 78.435823 \n",
       "L 39.063019 78.158522 \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.966584 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.363341 74.705804 \n",
       "L 44.738309 74.489319 \n",
       "L 45.112757 74.275834 \n",
       "L 45.486675 74.064947 \n",
       "L 45.860052 73.856205 \n",
       "L 46.232873 73.64911 \n",
       "L 46.605128 73.443116 \n",
       "L 46.976802 73.237637 \n",
       "L 47.347883 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.561203 71.759001 \n",
       "L 49.927791 71.533882 \n",
       "L 50.293698 71.303321 \n",
       "L 50.65892 71.066734 \n",
       "L 51.023451 70.82358 \n",
       "L 51.38729 70.57338 \n",
       "L 51.750436 70.315711 \n",
       "L 52.112889 70.050223 \n",
       "L 52.474653 69.776641 \n",
       "L 52.835733 69.494769 \n",
       "L 53.196134 69.204491 \n",
       "L 53.555866 68.905776 \n",
       "L 53.914938 68.598679 \n",
       "L 54.27336 68.283338 \n",
       "L 54.631145 67.95997 \n",
       "L 54.988307 67.628871 \n",
       "L 55.34486 67.290413 \n",
       "L 55.700818 66.945033 \n",
       "L 56.056197 66.593228 \n",
       "L 56.411012 66.235552 \n",
       "L 56.765279 65.872599 \n",
       "L 57.119014 65.505004 \n",
       "L 57.472232 65.133427 \n",
       "L 57.824947 64.758546 \n",
       "L 58.177175 64.381049 \n",
       "L 58.528927 64.001625 \n",
       "L 58.880217 63.620953 \n",
       "L 59.231056 63.239695 \n",
       "L 59.581454 62.858491 \n",
       "L 59.931421 62.477949 \n",
       "L 60.280965 62.098639 \n",
       "L 60.630092 61.721094 \n",
       "L 60.978809 61.345796 \n",
       "L 61.32712 60.973182 \n",
       "L 61.675028 60.603637 \n",
       "L 62.022537 60.237492 \n",
       "L 62.369647 59.875029 \n",
       "L 62.71636 59.516476 \n",
       "L 63.062676 59.16201 \n",
       "L 63.408593 58.811761 \n",
       "L 63.754112 58.46581 \n",
       "L 64.099227 58.124199 \n",
       "L 64.44394 57.786925 \n",
       "L 64.788246 57.453954 \n",
       "L 65.132142 57.125217 \n",
       "L 65.475626 56.800615 \n",
       "L 65.818694 56.480029 \n",
       "L 66.161343 56.163318 \n",
       "L 66.503571 55.850324 \n",
       "L 66.845373 55.540876 \n",
       "L 67.186747 55.234795 \n",
       "L 67.527691 54.931898 \n",
       "L 67.8682 54.631994 \n",
       "L 68.208275 54.334895 \n",
       "L 68.54791 54.040415 \n",
       "L 68.887105 53.748372 \n",
       "L 69.225859 53.458586 \n",
       "L 69.564169 53.170889 \n",
       "L 69.902034 52.885118 \n",
       "L 70.239454 52.601118 \n",
       "L 70.576426 52.318747 \n",
       "\" clip-path=\"url(#p53818f802a)\" 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.920014 81.053943 \n",
       "L 44.301041 80.801818 \n",
       "L 44.681647 80.556728 \n",
       "L 45.061839 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.956727 79.25586 \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.033445 \n",
       "L 50.341316 77.919911 \n",
       "L 50.715061 77.813486 \n",
       "L 51.088278 77.713365 \n",
       "L 51.460946 77.618622 \n",
       "L 51.833041 77.528218 \n",
       "L 52.204537 77.441001 \n",
       "L 52.57541 77.355721 \n",
       "L 52.945636 77.271035 \n",
       "L 53.315188 77.185521 \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.88128 76.434981 \n",
       "L 56.244673 76.28755 \n",
       "L 56.60723 76.125743 \n",
       "L 56.968946 75.948333 \n",
       "L 57.329818 75.754219 \n",
       "L 57.689849 75.542444 \n",
       "L 58.049043 75.31221 \n",
       "L 58.407409 75.062891 \n",
       "L 58.764957 74.794037 \n",
       "L 59.121702 74.50539 \n",
       "L 59.477662 74.19688 \n",
       "L 59.832857 73.868631 \n",
       "L 60.187308 73.520958 \n",
       "L 60.541041 73.154359 \n",
       "L 60.894081 72.769513 \n",
       "L 61.246455 72.367263 \n",
       "L 61.59819 71.948609 \n",
       "L 61.949316 71.514688 \n",
       "L 62.299861 71.066763 \n",
       "L 62.649853 70.606195 \n",
       "L 62.99932 70.134434 \n",
       "L 63.348287 69.652989 \n",
       "L 63.696782 69.163414 \n",
       "L 64.044827 68.667286 \n",
       "L 64.392445 68.16618 \n",
       "L 64.739655 67.661656 \n",
       "L 65.086475 67.155234 \n",
       "L 65.432922 66.648382 \n",
       "L 65.779009 66.142498 \n",
       "L 66.124748 65.638897 \n",
       "L 66.470146 65.138801 \n",
       "L 66.815212 64.643325 \n",
       "L 67.159952 64.153474 \n",
       "L 67.504366 63.670138 \n",
       "L 67.848457 63.194085 \n",
       "L 68.192225 62.725967 \n",
       "L 68.535667 62.266313 \n",
       "L 68.878781 61.815534 \n",
       "L 69.221561 61.373936 \n",
       "L 69.564003 60.941711 \n",
       "L 69.906101 60.518957 \n",
       "L 70.247849 60.105675 \n",
       "L 70.589238 59.701787 \n",
       "L 70.930263 59.307139 \n",
       "L 71.270916 58.92151 \n",
       "L 71.611189 58.544627 \n",
       "L 71.951076 58.176166 \n",
       "L 72.29057 57.815768 \n",
       "L 72.629665 57.463044 \n",
       "L 72.968354 57.117582 \n",
       "L 73.306631 56.778959 \n",
       "L 73.64449 56.446743 \n",
       "L 73.981929 56.1205 \n",
       "L 74.31894 55.799803 \n",
       "L 74.655521 55.484232 \n",
       "L 74.99167 55.173378 \n",
       "L 75.32738 54.866853 \n",
       "L 75.662652 54.564281 \n",
       "L 75.997483 54.26531 \n",
       "L 76.33187 53.96961 \n",
       "\" clip-path=\"url(#p53818f802a)\" style=\"fill: none; stroke: #1f77b4; stroke-width: 1.5\"/>\n",
       "    <path d=\"M 46.546596 85.470299 \n",
       "L 46.929036 85.180818 \n",
       "L 47.311002 84.896252 \n",
       "L 47.692502 84.617102 \n",
       "L 48.073546 84.343899 \n",
       "L 48.454144 84.077203 \n",
       "L 48.834302 83.817602 \n",
       "L 49.21403 83.565705 \n",
       "L 49.593337 83.322136 \n",
       "L 49.97223 83.087533 \n",
       "L 50.350717 82.862536 \n",
       "L 50.728803 82.647784 \n",
       "L 51.106495 82.443896 \n",
       "L 51.483796 82.251472 \n",
       "L 51.860708 82.071075 \n",
       "L 52.237232 81.90322 \n",
       "L 52.61337 81.748361 \n",
       "L 52.989116 81.606879 \n",
       "L 53.364468 81.479067 \n",
       "L 53.739417 81.365117 \n",
       "L 54.113955 81.265106 \n",
       "L 54.48807 81.178982 \n",
       "L 54.861751 81.106554 \n",
       "L 55.234978 81.047478 \n",
       "L 55.607735 81.001252 \n",
       "L 55.98 80.967202 \n",
       "L 56.351752 80.944484 \n",
       "L 56.722965 80.932072 \n",
       "L 57.093614 80.928765 \n",
       "L 57.463673 80.933186 \n",
       "L 57.833112 80.943787 \n",
       "L 58.201902 80.958861 \n",
       "L 58.570015 80.97655 \n",
       "L 58.937423 80.994861 \n",
       "L 59.304096 81.011686 \n",
       "L 59.67001 81.024824 \n",
       "L 60.035137 81.032 \n",
       "L 60.399456 81.030892 \n",
       "L 60.762945 81.019166 \n",
       "L 61.125586 80.994497 \n",
       "L 61.487364 80.954599 \n",
       "L 61.848268 80.897265 \n",
       "L 62.20829 80.820389 \n",
       "L 62.567426 80.721997 \n",
       "L 62.925676 80.600279 \n",
       "L 63.283044 80.453612 \n",
       "L 63.639539 80.280586 \n",
       "L 63.995171 80.080025 \n",
       "L 64.349957 79.851004 \n",
       "L 64.703917 79.592864 \n",
       "L 65.057072 79.305224 \n",
       "L 65.409448 78.987981 \n",
       "L 65.761073 78.641319 \n",
       "L 66.111977 78.265699 \n",
       "L 66.462192 77.861861 \n",
       "L 66.81175 77.4308 \n",
       "L 67.160686 76.973762 \n",
       "L 67.509032 76.492223 \n",
       "L 67.856823 75.98786 \n",
       "L 68.20409 75.462533 \n",
       "L 68.550867 74.918257 \n",
       "L 68.897183 74.357169 \n",
       "L 69.243067 73.781501 \n",
       "L 69.588546 73.19355 \n",
       "L 69.933642 72.595649 \n",
       "L 70.278378 71.990128 \n",
       "L 70.622771 71.379297 \n",
       "L 70.966839 70.765408 \n",
       "L 71.310594 70.150639 \n",
       "L 71.654046 69.537062 \n",
       "L 71.997202 68.926632 \n",
       "L 72.340068 68.32116 \n",
       "L 72.682646 67.722308 \n",
       "L 73.024937 67.131569 \n",
       "L 73.366937 66.55027 \n",
       "L 73.708644 65.979557 \n",
       "L 74.050052 65.4204 \n",
       "L 74.391154 64.873591 \n",
       "L 74.731944 64.339749 \n",
       "L 75.07241 63.819331 \n",
       "L 75.412546 63.312626 \n",
       "L 75.752339 62.819787 \n",
       "L 76.091781 62.340819 \n",
       "L 76.430861 61.875613 \n",
       "L 76.76957 61.42394 \n",
       "L 77.107898 60.985479 \n",
       "L 77.445834 60.559825 \n",
       "L 77.783372 60.1465 \n",
       "L 78.120502 59.744974 \n",
       "L 78.457217 59.354668 \n",
       "L 78.793512 58.974974 \n",
       "L 79.129377 58.605265 \n",
       "L 79.46481 58.244899 \n",
       "L 79.799805 57.893232 \n",
       "L 80.134358 57.54963 \n",
       "L 80.468465 57.21347 \n",
       "L 80.802124 56.884145 \n",
       "L 81.135332 56.561076 \n",
       "L 81.468088 56.243708 \n",
       "L 81.800391 55.931517 \n",
       "L 82.132238 55.624011 \n",
       "\" clip-path=\"url(#p53818f802a)\" style=\"fill: none; stroke: #1f77b4; stroke-width: 1.5\"/>\n",
       "    <path d=\"M 52.671909 87.293483 \n",
       "L 53.05121 86.995471 \n",
       "L 53.430007 86.701538 \n",
       "L 53.808302 86.412088 \n",
       "L 54.186102 86.127553 \n",
       "L 54.563414 85.848385 \n",
       "L 54.940241 85.575062 \n",
       "L 55.316588 85.308077 \n",
       "L 55.692461 85.047936 \n",
       "L 56.067862 84.795156 \n",
       "L 56.442798 84.550256 \n",
       "L 56.817269 84.313754 \n",
       "L 57.191277 84.086154 \n",
       "L 57.564826 83.86794 \n",
       "L 57.937914 83.659571 \n",
       "L 58.31054 83.461465 \n",
       "L 58.682703 83.273991 \n",
       "L 59.0544 83.09746 \n",
       "L 59.425626 82.932109 \n",
       "L 59.796374 82.778097 \n",
       "L 60.166638 82.635486 \n",
       "L 60.536408 82.504238 \n",
       "L 60.905677 82.384199 \n",
       "L 61.27443 82.275092 \n",
       "L 61.642657 82.176512 \n",
       "L 62.010342 82.087916 \n",
       "L 62.377472 82.008618 \n",
       "L 62.74403 81.937791 \n",
       "L 63.110001 81.87446 \n",
       "L 63.475369 81.817511 \n",
       "L 63.840116 81.765689 \n",
       "L 64.204226 81.717609 \n",
       "L 64.567682 81.671765 \n",
       "L 64.930471 81.626538 \n",
       "L 65.292576 81.580218 \n",
       "L 65.653986 81.531017 \n",
       "L 66.014688 81.477085 \n",
       "L 66.374673 81.416538 \n",
       "L 66.733933 81.347475 \n",
       "L 67.092461 81.268006 \n",
       "L 67.450255 81.176276 \n",
       "L 67.807314 81.070484 \n",
       "L 68.16364 80.948917 \n",
       "L 68.519237 80.809969 \n",
       "L 68.874111 80.652166 \n",
       "L 69.228274 80.474186 \n",
       "L 69.581736 80.274881 \n",
       "L 69.934511 80.053291 \n",
       "L 70.286616 79.808664 \n",
       "L 70.63807 79.540464 \n",
       "L 70.988891 79.248377 \n",
       "L 71.339101 78.932323 \n",
       "L 71.688722 78.592448 \n",
       "L 72.037776 78.229132 \n",
       "L 72.386286 77.842973 \n",
       "L 72.734276 77.434786 \n",
       "L 73.081768 77.005582 \n",
       "L 73.428783 76.556565 \n",
       "L 73.775343 76.089101 \n",
       "L 74.121467 75.604703 \n",
       "L 74.467173 75.10501 \n",
       "L 74.812479 74.591762 \n",
       "L 75.157398 74.066776 \n",
       "L 75.501945 73.531919 \n",
       "L 75.846129 72.989085 \n",
       "L 76.189958 72.440172 \n",
       "L 76.53344 71.887054 \n",
       "L 76.87658 71.331561 \n",
       "L 77.219378 70.775461 \n",
       "L 77.561838 70.220436 \n",
       "L 77.903957 69.66807 \n",
       "L 78.245731 69.119834 \n",
       "L 78.587159 68.577074 \n",
       "L 78.928234 68.041 \n",
       "L 79.26895 67.512687 \n",
       "L 79.6093 66.99306 \n",
       "L 79.949276 66.482906 \n",
       "L 80.28887 65.982865 \n",
       "L 80.628074 65.493433 \n",
       "L 80.966879 65.014981 \n",
       "L 81.305277 64.547742 \n",
       "L 81.643258 64.091835 \n",
       "L 81.980816 63.647264 \n",
       "L 82.317943 63.213936 \n",
       "L 82.654631 62.791666 \n",
       "L 82.990877 62.380191 \n",
       "L 83.326671 61.979181 \n",
       "L 83.66201 61.588248 \n",
       "L 83.996889 61.20696 \n",
       "L 84.331306 60.834847 \n",
       "L 84.665257 60.471416 \n",
       "L 84.998738 60.116157 \n",
       "L 85.33175 59.768549 \n",
       "L 85.66429 59.42807 \n",
       "L 85.996358 59.094206 \n",
       "L 86.327952 58.76645 \n",
       "L 86.659076 58.444311 \n",
       "L 86.989726 58.12732 \n",
       "L 87.319906 57.815026 \n",
       "L 87.649616 57.507003 \n",
       "L 87.978857 57.202855 \n",
       "\" clip-path=\"url(#p53818f802a)\" style=\"fill: none; stroke: #1f77b4; stroke-width: 1.5\"/>\n",
       "    <path d=\"M 58.848348 89.021602 \n",
       "L 59.224267 88.696046 \n",
       "L 59.599632 88.370971 \n",
       "L 59.97444 88.046377 \n",
       "L 60.348696 87.722262 \n",
       "L 60.722399 87.398625 \n",
       "L 61.095551 87.075467 \n",
       "L 61.468152 86.752785 \n",
       "L 61.840205 86.430577 \n",
       "L 62.21171 86.108845 \n",
       "L 62.58267 85.787584 \n",
       "L 62.953084 85.466796 \n",
       "L 63.322953 85.14648 \n",
       "L 63.692282 84.826632 \n",
       "L 64.061067 84.507254 \n",
       "L 64.429312 84.188345 \n",
       "L 64.797019 83.869901 \n",
       "L 65.164187 83.551924 \n",
       "L 65.53082 83.234411 \n",
       "L 65.896915 82.917363 \n",
       "L 66.262477 82.600778 \n",
       "L 66.627505 82.284654 \n",
       "L 66.992001 81.968991 \n",
       "L 67.355966 81.653788 \n",
       "L 67.719402 81.339043 \n",
       "L 68.082309 81.024757 \n",
       "L 68.444688 80.710927 \n",
       "L 68.806542 80.397553 \n",
       "L 69.167869 80.084635 \n",
       "L 69.528673 79.772169 \n",
       "L 69.888954 79.460157 \n",
       "L 70.248713 79.148597 \n",
       "L 70.607951 78.837487 \n",
       "L 70.96667 78.526828 \n",
       "L 71.32487 78.216617 \n",
       "L 71.682553 77.906854 \n",
       "L 72.03972 77.597539 \n",
       "L 72.396373 77.288669 \n",
       "L 72.752511 76.980244 \n",
       "L 73.108136 76.672263 \n",
       "L 73.46325 76.364726 \n",
       "L 73.817853 76.057631 \n",
       "L 74.171947 75.750977 \n",
       "L 74.525532 75.444763 \n",
       "L 74.87861 75.138988 \n",
       "L 75.231182 74.833652 \n",
       "L 75.583248 74.528754 \n",
       "L 75.934811 74.224291 \n",
       "L 76.285871 73.920265 \n",
       "L 76.636428 73.616673 \n",
       "L 76.986485 73.313515 \n",
       "L 77.336043 73.010789 \n",
       "L 77.685101 72.708496 \n",
       "L 78.033662 72.406633 \n",
       "L 78.381727 72.1052 \n",
       "L 78.729296 71.804197 \n",
       "L 79.076371 71.50362 \n",
       "L 79.422952 71.203472 \n",
       "L 79.769042 70.90375 \n",
       "L 80.114639 70.604454 \n",
       "L 80.459747 70.305582 \n",
       "L 80.804365 70.007134 \n",
       "L 81.148495 69.709108 \n",
       "L 81.492138 69.411505 \n",
       "L 81.835296 69.114322 \n",
       "L 82.177968 68.817559 \n",
       "L 82.520155 68.521215 \n",
       "L 82.861861 68.22529 \n",
       "L 83.203083 67.929782 \n",
       "L 83.543826 67.634691 \n",
       "L 83.884088 67.340015 \n",
       "L 84.223871 67.045754 \n",
       "L 84.563176 66.751907 \n",
       "L 84.902005 66.458473 \n",
       "L 85.240358 66.165451 \n",
       "L 85.578235 65.87284 \n",
       "L 85.915639 65.58064 \n",
       "L 86.25257 65.28885 \n",
       "L 86.58903 64.997467 \n",
       "L 86.925018 64.706493 \n",
       "L 87.260537 64.415925 \n",
       "L 87.595586 64.125764 \n",
       "L 87.930168 63.836007 \n",
       "L 88.264282 63.546656 \n",
       "L 88.59793 63.257708 \n",
       "L 88.931114 62.969162 \n",
       "L 89.263833 62.681019 \n",
       "L 89.596089 62.393276 \n",
       "L 89.927883 62.105934 \n",
       "L 90.259216 61.818992 \n",
       "L 90.59009 61.532447 \n",
       "L 90.920503 61.246301 \n",
       "L 91.250458 60.960551 \n",
       "L 91.579957 60.675197 \n",
       "L 91.908998 60.390238 \n",
       "L 92.237584 60.105675 \n",
       "L 92.565717 59.821504 \n",
       "L 92.893395 59.537726 \n",
       "L 93.22062 59.254341 \n",
       "L 93.547395 58.971345 \n",
       "L 93.873718 58.688741 \n",
       "\" clip-path=\"url(#p53818f802a)\" style=\"fill: none; stroke: #1f77b4; stroke-width: 1.5\"/>\n",
       "    <path d=\"M 65.079284 90.764969 \n",
       "L 65.451999 90.411682 \n",
       "L 65.824143 90.055255 \n",
       "L 66.195716 89.695279 \n",
       "L 66.56672 89.331316 \n",
       "L 66.937156 88.962904 \n",
       "L 67.307026 88.589562 \n",
       "L 67.676332 88.210789 \n",
       "L 68.045076 87.826067 \n",
       "L 68.413263 87.434872 \n",
       "L 68.780897 87.036671 \n",
       "L 69.14798 86.630941 \n",
       "L 69.514519 86.217162 \n",
       "L 69.88052 85.794834 \n",
       "L 70.245987 85.363488 \n",
       "L 70.61093 84.92269 \n",
       "L 70.975355 84.47205 \n",
       "L 71.339271 84.011246 \n",
       "L 71.702688 83.540015 \n",
       "L 72.065613 83.058186 \n",
       "L 72.428059 82.565672 \n",
       "L 72.790036 82.062496 \n",
       "L 73.151555 81.548788 \n",
       "L 73.512625 81.024809 \n",
       "L 73.87326 80.490947 \n",
       "L 74.233469 79.947731 \n",
       "L 74.593262 79.395835 \n",
       "L 74.952651 78.836077 \n",
       "L 75.311643 78.269427 \n",
       "L 75.670248 77.697002 \n",
       "L 76.028471 77.120061 \n",
       "L 76.386319 76.540007 \n",
       "L 76.743795 75.958362 \n",
       "L 77.100903 75.376774 \n",
       "L 77.457641 74.796989 \n",
       "L 77.81401 74.220838 \n",
       "L 78.170004 73.650221 \n",
       "L 78.525618 73.087077 \n",
       "L 78.880845 72.533371 \n",
       "L 79.235673 71.991063 \n",
       "L 79.59009 71.462078 \n",
       "L 79.944082 70.94829 \n",
       "L 80.297633 70.451488 \n",
       "L 80.650726 69.973348 \n",
       "L 81.00334 69.515416 \n",
       "L 81.355457 69.079077 \n",
       "L 81.707054 68.665537 \n",
       "L 82.058111 68.275803 \n",
       "L 82.408606 67.910666 \n",
       "L 82.758517 67.57069 \n",
       "L 83.107824 67.256202 \n",
       "L 83.456507 66.967287 \n",
       "L 83.804547 66.703784 \n",
       "L 84.151927 66.465294 \n",
       "L 84.498634 66.251181 \n",
       "L 84.844652 66.060586 \n",
       "L 85.189974 65.892439 \n",
       "L 85.534588 65.745476 \n",
       "L 85.878491 65.61826 \n",
       "L 86.22168 65.509202 \n",
       "L 86.564154 65.416586 \n",
       "L 86.905916 65.338596 \n",
       "L 87.246972 65.273336 \n",
       "L 87.58733 65.218866 \n",
       "L 87.926998 65.173221 \n",
       "L 88.265989 65.13444 \n",
       "L 88.604317 65.100591 \n",
       "L 88.941998 65.06979 \n",
       "L 89.279047 65.040228 \n",
       "L 89.615484 65.010186 \n",
       "L 89.951325 64.97805 \n",
       "L 90.286591 64.94233 \n",
       "L 90.621299 64.901664 \n",
       "L 90.95547 64.854834 \n",
       "L 91.289121 64.800763 \n",
       "L 91.622271 64.738526 \n",
       "L 91.954936 64.667345 \n",
       "L 92.287132 64.586588 \n",
       "L 92.618876 64.495768 \n",
       "L 92.95018 64.394534 \n",
       "L 93.281057 64.282663 \n",
       "L 93.611517 64.160055 \n",
       "L 93.941572 64.026719 \n",
       "L 94.271228 63.882766 \n",
       "L 94.600492 63.728396 \n",
       "L 94.929372 63.563886 \n",
       "L 95.257869 63.389579 \n",
       "L 95.585988 63.205877 \n",
       "L 95.913731 63.013224 \n",
       "L 96.241099 62.812097 \n",
       "L 96.568092 62.602999 \n",
       "L 96.894708 62.386452 \n",
       "L 97.220948 62.162982 \n",
       "L 97.546809 61.933114 \n",
       "L 97.872288 61.697373 \n",
       "L 98.197383 61.456268 \n",
       "L 98.522092 61.210292 \n",
       "L 98.84641 60.959921 \n",
       "L 99.170334 60.705607 \n",
       "L 99.493863 60.447776 \n",
       "L 99.81699 60.186831 \n",
       "\" clip-path=\"url(#p53818f802a)\" style=\"fill: none; stroke: #1f77b4; stroke-width: 1.5\"/>\n",
       "    <path d=\"M 71.365942 92.635215 \n",
       "L 71.73568 92.27308 \n",
       "L 72.104868 91.906937 \n",
       "L 72.473508 91.536277 \n",
       "L 72.841603 91.160557 \n",
       "L 73.20916 90.779204 \n",
       "L 73.576181 90.391622 \n",
       "L 73.942673 89.997186 \n",
       "L 74.308642 89.595257 \n",
       "L 74.674095 89.18518 \n",
       "L 75.03904 88.766297 \n",
       "L 75.403484 88.337954 \n",
       "L 75.767437 87.899507 \n",
       "L 76.130909 87.450336 \n",
       "L 76.49391 86.989856 \n",
       "L 76.85645 86.517526 \n",
       "L 77.218544 86.032863 \n",
       "L 77.580201 85.535461 \n",
       "L 77.941435 85.024997 \n",
       "L 78.302257 84.501253 \n",
       "L 78.662682 83.964121 \n",
       "L 79.022721 83.413624 \n",
       "L 79.382388 82.849924 \n",
       "L 79.741693 82.273341 \n",
       "L 80.100649 81.684354 \n",
       "L 80.459263 81.083617 \n",
       "L 80.817545 80.471965 \n",
       "L 81.175502 79.850411 \n",
       "L 81.533138 79.220159 \n",
       "L 81.890459 78.582594 \n",
       "L 82.247462 77.939279 \n",
       "L 82.604147 77.291956 \n",
       "L 82.960509 76.642518 \n",
       "L 83.316541 75.993012 \n",
       "L 83.672232 75.345609 \n",
       "L 84.027569 74.702588 \n",
       "L 84.382535 74.066311 \n",
       "L 84.737112 73.439196 \n",
       "L 85.091277 72.823687 \n",
       "L 85.445005 72.222225 \n",
       "L 85.798268 71.637212 \n",
       "L 86.151039 71.070983 \n",
       "L 86.503285 70.525766 \n",
       "L 86.854975 70.003654 \n",
       "L 87.206074 69.506576 \n",
       "L 87.556551 69.036257 \n",
       "L 87.906371 68.594205 \n",
       "L 88.255501 68.181675 \n",
       "L 88.60391 67.799655 \n",
       "L 88.951567 67.44885 \n",
       "L 89.298446 67.129667 \n",
       "L 89.64452 66.842212 \n",
       "L 89.989768 66.586286 \n",
       "L 90.334171 66.36139 \n",
       "L 90.677715 66.16673 \n",
       "L 91.020388 66.001233 \n",
       "L 91.362184 65.863565 \n",
       "L 91.7031 65.752149 \n",
       "L 92.043138 65.665193 \n",
       "L 92.382304 65.600715 \n",
       "L 92.720609 65.556574 \n",
       "L 93.058066 65.530507 \n",
       "L 93.394694 65.520152 \n",
       "L 93.730514 65.523091 \n",
       "L 94.065549 65.536877 \n",
       "L 94.399826 65.55907 \n",
       "L 94.733374 65.587262 \n",
       "L 95.066223 65.619114 \n",
       "L 95.398403 65.652374 \n",
       "L 95.729948 65.684904 \n",
       "L 96.06089 65.714702 \n",
       "L 96.391259 65.739914 \n",
       "L 96.721089 65.758851 \n",
       "L 97.05041 65.77 \n",
       "L 97.379249 65.772028 \n",
       "L 97.707635 65.763788 \n",
       "L 98.035594 65.744316 \n",
       "L 98.363147 65.712831 \n",
       "L 98.690319 65.66873 \n",
       "L 99.017125 65.611582 \n",
       "L 99.343583 65.541112 \n",
       "L 99.669707 65.4572 \n",
       "L 99.995508 65.359859 \n",
       "L 100.320995 65.249231 \n",
       "L 100.646176 65.125565 \n",
       "L 100.971056 64.989207 \n",
       "L 101.295636 64.840588 \n",
       "L 101.619919 64.680206 \n",
       "L 101.943903 64.508614 \n",
       "L 102.267587 64.326407 \n",
       "L 102.59097 64.134212 \n",
       "L 102.914043 63.932674 \n",
       "L 103.236805 63.722448 \n",
       "L 103.559249 63.50419 \n",
       "L 103.881368 63.278548 \n",
       "L 104.203155 63.046157 \n",
       "L 104.524606 62.807628 \n",
       "L 104.84571 62.563553 \n",
       "L 105.166463 62.314493 \n",
       "L 105.486858 62.060977 \n",
       "L 105.806886 61.803506 \n",
       "\" clip-path=\"url(#p53818f802a)\" style=\"fill: none; stroke: #1f77b4; stroke-width: 1.5\"/>\n",
       "    <path d=\"M 77.707374 94.615708 \n",
       "L 78.074089 94.260729 \n",
       "L 78.440271 93.903208 \n",
       "L 78.805923 93.542801 \n",
       "L 79.171051 93.179142 \n",
       "L 79.53566 92.811843 \n",
       "L 79.899754 92.4405 \n",
       "L 80.263341 92.064693 \n",
       "L 80.626427 91.683988 \n",
       "L 80.989019 91.297945 \n",
       "L 81.351127 90.906118 \n",
       "L 81.712756 90.508067 \n",
       "L 82.073915 90.103357 \n",
       "L 82.434616 89.69157 \n",
       "L 82.794865 89.272312 \n",
       "L 83.154673 88.84522 \n",
       "L 83.51405 88.409967 \n",
       "L 83.873005 87.966284 \n",
       "L 84.23155 87.513952 \n",
       "L 84.589691 87.052827 \n",
       "L 84.94744 86.582839 \n",
       "L 85.304804 86.104005 \n",
       "L 85.661794 85.616439 \n",
       "L 86.018413 85.120359 \n",
       "L 86.37467 84.616092 \n",
       "L 86.730569 84.104082 \n",
       "L 87.086112 83.584895 \n",
       "L 87.441301 83.059218 \n",
       "L 87.796136 82.527866 \n",
       "L 88.150616 81.991774 \n",
       "L 88.504734 81.451999 \n",
       "L 88.858484 80.909716 \n",
       "L 89.211857 80.366203 \n",
       "L 89.564843 79.822837 \n",
       "L 89.917426 79.281083 \n",
       "L 90.26959 78.742474 \n",
       "L 90.621317 78.208599 \n",
       "L 90.972587 77.681083 \n",
       "L 91.323377 77.161568 \n",
       "L 91.673661 76.651695 \n",
       "L 92.023415 76.153075 \n",
       "L 92.372612 75.667273 \n",
       "L 92.721223 75.195785 \n",
       "L 93.069222 74.740013 \n",
       "L 93.416579 74.301249 \n",
       "L 93.763267 73.88065 \n",
       "L 94.109258 73.479223 \n",
       "L 94.454529 73.097811 \n",
       "L 94.799053 72.737072 \n",
       "L 95.14281 72.39748 \n",
       "L 95.48578 72.079306 \n",
       "L 95.827946 71.782621 \n",
       "L 96.169295 71.507291 \n",
       "L 96.509816 71.252982 \n",
       "L 96.849503 71.019162 \n",
       "L 97.188351 70.805114 \n",
       "L 97.526363 70.609942 \n",
       "L 97.863541 70.432591 \n",
       "L 98.199892 70.271859 \n",
       "L 98.535429 70.126417 \n",
       "L 98.870164 69.994832 \n",
       "L 99.204116 69.875581 \n",
       "L 99.537305 69.767082 \n",
       "L 99.869753 69.667711 \n",
       "L 100.201484 69.575823 \n",
       "L 100.532525 69.489777 \n",
       "L 100.862902 69.407954 \n",
       "L 101.192646 69.32878 \n",
       "L 101.521782 69.250737 \n",
       "L 101.850343 69.172384 \n",
       "L 102.178354 69.092371 \n",
       "L 102.505845 69.009447 \n",
       "L 102.832842 68.922471 \n",
       "L 103.159372 68.83042 \n",
       "L 103.485457 68.732391 \n",
       "L 103.811122 68.627608 \n",
       "L 104.136386 68.515417 \n",
       "L 104.461267 68.395287 \n",
       "L 104.785784 68.266807 \n",
       "L 105.109949 68.129683 \n",
       "L 105.433777 67.983726 \n",
       "L 105.757274 67.828851 \n",
       "L 106.080451 67.665063 \n",
       "L 106.403313 67.492456 \n",
       "L 106.725864 67.311194 \n",
       "L 107.048108 67.12151 \n",
       "L 107.370043 66.923691 \n",
       "L 107.691671 66.718071 \n",
       "L 108.012989 66.505023 \n",
       "L 108.333994 66.284947 \n",
       "L 108.654684 66.058263 \n",
       "L 108.975051 65.825409 \n",
       "L 109.295092 65.586824 \n",
       "L 109.614802 65.34295 \n",
       "L 109.934172 65.094225 \n",
       "L 110.253198 64.841076 \n",
       "L 110.571874 64.583917 \n",
       "L 110.890192 64.323147 \n",
       "L 111.208146 64.059143 \n",
       "L 111.525732 63.792264 \n",
       "L 111.842942 63.522846 \n",
       "\" clip-path=\"url(#p53818f802a)\" style=\"fill: none; stroke: #1f77b4; stroke-width: 1.5\"/>\n",
       "    <path d=\"M 84.103334 96.623209 \n",
       "L 84.466843 96.277106 \n",
       "L 84.82982 95.930182 \n",
       "L 85.192265 95.582289 \n",
       "L 85.554184 95.233265 \n",
       "L 85.915582 94.88294 \n",
       "L 86.27646 94.531139 \n",
       "L 86.636823 94.177678 \n",
       "L 86.996677 93.822366 \n",
       "L 87.356025 93.465011 \n",
       "L 87.714875 93.105419 \n",
       "L 88.073229 92.743398 \n",
       "L 88.431093 92.378758 \n",
       "L 88.788474 92.011317 \n",
       "L 89.145376 91.640903 \n",
       "L 89.501805 91.267358 \n",
       "L 89.857768 90.89054 \n",
       "L 90.213268 90.510332 \n",
       "L 90.568313 90.12664 \n",
       "L 90.922906 89.739401 \n",
       "L 91.277052 89.348586 \n",
       "L 91.630756 88.954203 \n",
       "L 91.984023 88.556303 \n",
       "L 92.336854 88.154982 \n",
       "L 92.689254 87.750382 \n",
       "L 93.041221 87.3427 \n",
       "L 93.392758 86.932183 \n",
       "L 93.743865 86.51913 \n",
       "L 94.09454 86.103897 \n",
       "L 94.444781 85.686892 \n",
       "L 94.794583 85.268575 \n",
       "L 95.143943 84.849458 \n",
       "L 95.492853 84.430096 \n",
       "L 95.841307 84.011087 \n",
       "L 96.189295 83.593068 \n",
       "L 96.53681 83.176703 \n",
       "L 96.883837 82.762683 \n",
       "L 97.230368 82.35171 \n",
       "L 97.576389 81.944496 \n",
       "L 97.921885 81.541749 \n",
       "L 98.266843 81.144169 \n",
       "L 98.61125 80.752431 \n",
       "L 98.95509 80.36718 \n",
       "L 99.298348 79.989022 \n",
       "L 99.641011 79.618515 \n",
       "L 99.983065 79.256157 \n",
       "L 100.324496 78.902383 \n",
       "L 100.665293 78.557555 \n",
       "L 101.005444 78.221958 \n",
       "L 101.34494 77.895794 \n",
       "L 101.683772 77.579181 \n",
       "L 102.021933 77.272147 \n",
       "L 102.359418 76.974637 \n",
       "L 102.696226 76.686502 \n",
       "L 103.032353 76.407515 \n",
       "L 103.367801 76.137366 \n",
       "L 103.702574 75.875667 \n",
       "L 104.036674 75.621961 \n",
       "L 104.37011 75.375732 \n",
       "L 104.702888 75.136402 \n",
       "L 105.035018 74.903352 \n",
       "L 105.366513 74.675924 \n",
       "L 105.697385 74.453433 \n",
       "L 106.027647 74.235173 \n",
       "L 106.357315 74.020432 \n",
       "L 106.686403 73.8085 \n",
       "L 107.014927 73.598673 \n",
       "L 107.342905 73.390266 \n",
       "L 107.67035 73.182621 \n",
       "L 107.997282 72.97511 \n",
       "L 108.323715 72.767146 \n",
       "L 108.649663 72.558183 \n",
       "L 108.975143 72.347723 \n",
       "L 109.300168 72.135319 \n",
       "L 109.624751 71.920578 \n",
       "L 109.948905 71.703157 \n",
       "L 110.272638 71.482772 \n",
       "L 110.595963 71.259188 \n",
       "L 110.918888 71.032224 \n",
       "L 111.241418 70.80175 \n",
       "L 111.563563 70.56768 \n",
       "L 111.885325 70.329978 \n",
       "L 112.20671 70.088641 \n",
       "L 112.527719 69.84371 \n",
       "L 112.848356 69.595254 \n",
       "L 113.168621 69.343372 \n",
       "L 113.488515 69.088188 \n",
       "L 113.808036 68.829848 \n",
       "L 114.127185 68.568511 \n",
       "L 114.445959 68.30435 \n",
       "L 114.764357 68.037548 \n",
       "L 115.082376 67.768295 \n",
       "L 115.400013 67.496782 \n",
       "L 115.717266 67.223199 \n",
       "L 116.034131 66.947738 \n",
       "L 116.350605 66.670584 \n",
       "L 116.666686 66.391916 \n",
       "L 116.982369 66.111908 \n",
       "L 117.297653 65.830725 \n",
       "L 117.612534 65.54852 \n",
       "L 117.927009 65.265442 \n",
       "\" clip-path=\"url(#p53818f802a)\" 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.777267 95.532619 \n",
       "L 94.132686 95.189212 \n",
       "L 94.487587 94.84544 \n",
       "L 94.841974 94.501247 \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.606295 92.772158 \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.40341 89.970983 \n",
       "L 99.750855 89.618082 \n",
       "L 100.097816 89.264774 \n",
       "L 100.444292 88.911165 \n",
       "L 100.790283 88.557375 \n",
       "L 101.135788 88.203541 \n",
       "L 101.480805 87.849813 \n",
       "L 101.825332 87.496356 \n",
       "L 102.169367 87.143345 \n",
       "L 102.512908 86.790969 \n",
       "L 102.855951 86.439424 \n",
       "L 103.198492 86.088913 \n",
       "L 103.540529 85.739645 \n",
       "L 103.882057 85.391827 \n",
       "L 104.223071 85.045671 \n",
       "L 104.563568 84.701381 \n",
       "L 104.903543 84.359156 \n",
       "L 105.24299 84.019187 \n",
       "L 105.581908 83.681652 \n",
       "L 105.920289 83.346714 \n",
       "L 106.258131 83.01452 \n",
       "L 106.595431 82.685197 \n",
       "L 106.932183 82.358853 \n",
       "L 107.268387 82.03557 \n",
       "L 107.604039 81.715407 \n",
       "L 107.939137 81.398398 \n",
       "L 108.27368 81.084551 \n",
       "L 108.607668 80.773849 \n",
       "L 108.9411 80.466248 \n",
       "L 109.273978 80.161678 \n",
       "L 109.606302 79.860049 \n",
       "L 109.938076 79.561244 \n",
       "L 110.269302 79.26513 \n",
       "L 110.599982 78.971551 \n",
       "L 110.930121 78.680338 \n",
       "L 111.259725 78.391306 \n",
       "L 111.588797 78.10426 \n",
       "L 111.917343 77.818996 \n",
       "L 112.245369 77.535306 \n",
       "L 112.572882 77.252978 \n",
       "L 112.899887 76.971801 \n",
       "L 113.226391 76.691567 \n",
       "L 113.552401 76.412071 \n",
       "L 113.877922 76.133119 \n",
       "L 114.202963 75.854522 \n",
       "L 114.527528 75.576106 \n",
       "L 114.851623 75.29771 \n",
       "L 115.175255 75.019184 \n",
       "L 115.49843 74.740394 \n",
       "L 115.821151 74.461224 \n",
       "L 116.143425 74.181571 \n",
       "L 116.465255 73.901349 \n",
       "L 116.786644 73.620488 \n",
       "L 117.107599 73.338933 \n",
       "L 117.428119 73.056645 \n",
       "L 117.74821 72.773597 \n",
       "L 118.067872 72.489778 \n",
       "L 118.387108 72.205186 \n",
       "L 118.705919 71.919832 \n",
       "L 119.024306 71.633736 \n",
       "L 119.342271 71.346926 \n",
       "L 119.659812 71.059439 \n",
       "L 119.976932 70.771316 \n",
       "L 120.29363 70.482605 \n",
       "L 120.609907 70.193356 \n",
       "L 120.925762 69.903622 \n",
       "L 121.241194 69.613459 \n",
       "L 121.556203 69.322924 \n",
       "L 121.870789 69.032071 \n",
       "L 122.184951 68.740958 \n",
       "L 122.498689 68.449638 \n",
       "L 122.812003 68.158164 \n",
       "L 123.12489 67.866588 \n",
       "L 123.437351 67.574956 \n",
       "L 123.749388 67.283315 \n",
       "L 124.060996 66.991708 \n",
       "\" clip-path=\"url(#p53818f802a)\" style=\"fill: none; stroke: #1f77b4; stroke-width: 1.5\"/>\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.845166 81.48936 \n",
       "L 34.444936 81.676314 \n",
       "L 35.045215 81.863777 \n",
       "L 35.646005 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.657611 82.998321 \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.502439 84.524564 \n",
       "L 44.110284 84.714789 \n",
       "L 44.718624 84.904574 \n",
       "L 45.327456 85.09382 \n",
       "L 45.93678 85.282427 \n",
       "L 46.546596 85.470299 \n",
       "L 47.156902 85.657346 \n",
       "L 47.767699 85.843484 \n",
       "L 48.378989 86.028639 \n",
       "L 48.990771 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.057131 87.116239 \n",
       "L 52.671909 87.293483 \n",
       "L 53.287196 87.469639 \n",
       "L 53.902997 87.644771 \n",
       "L 54.519315 87.818958 \n",
       "L 55.136154 87.992296 \n",
       "L 55.753517 88.164896 \n",
       "L 56.37141 88.336885 \n",
       "L 56.989835 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.711785 89.536164 \n",
       "L 61.334038 89.708738 \n",
       "L 61.956847 89.882091 \n",
       "L 62.580217 90.056363 \n",
       "L 63.204144 90.231681 \n",
       "L 63.828631 90.408158 \n",
       "L 64.453678 90.585893 \n",
       "L 65.079284 90.764969 \n",
       "L 65.705451 90.94545 \n",
       "L 66.332175 91.127384 \n",
       "L 66.959458 91.310801 \n",
       "L 67.587298 91.495712 \n",
       "L 68.215693 91.682114 \n",
       "L 68.84464 91.869984 \n",
       "L 69.474141 92.059286 \n",
       "L 70.104192 92.249968 \n",
       "L 70.734793 92.441969 \n",
       "L 71.365942 92.635215 \n",
       "L 71.997636 92.829621 \n",
       "L 72.629877 93.025098 \n",
       "L 73.262663 93.221552 \n",
       "L 73.895992 93.418882 \n",
       "L 74.529865 93.616988 \n",
       "L 75.16428 93.815768 \n",
       "L 75.799238 94.015125 \n",
       "L 76.434741 94.214962 \n",
       "L 77.070785 94.415185 \n",
       "L 77.707374 94.615708 \n",
       "L 78.344505 94.81645 \n",
       "L 78.982183 95.017337 \n",
       "L 79.620405 95.218301 \n",
       "L 80.259173 95.419284 \n",
       "L 80.898492 95.620234 \n",
       "L 81.538357 95.821106 \n",
       "L 82.178772 96.021865 \n",
       "L 82.819739 96.222482 \n",
       "L 83.461259 96.422935 \n",
       "L 84.103334 96.623209 \n",
       "L 84.745964 96.823293 \n",
       "L 85.389149 97.023185 \n",
       "L 86.032895 97.222886 \n",
       "L 86.677198 97.422399 \n",
       "L 87.322062 97.621735 \n",
       "L 87.967489 97.820905 \n",
       "L 88.613477 98.019922 \n",
       "L 89.260029 98.218805 \n",
       "L 89.907148 98.417569 \n",
       "L 90.55483 98.616234 \n",
       "\" clip-path=\"url(#p53818f802a)\" 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.700826 78.515623 \n",
       "L 38.29829 78.716613 \n",
       "L 38.896275 78.919246 \n",
       "L 39.494781 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.494982 80.165668 \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.32044 81.856412 \n",
       "L 47.925648 82.063167 \n",
       "L 48.531285 82.267575 \n",
       "L 49.137344 82.469214 \n",
       "L 49.743823 82.667669 \n",
       "L 50.350717 82.862536 \n",
       "L 50.958025 83.053437 \n",
       "L 51.565745 83.240018 \n",
       "L 52.17388 83.421965 \n",
       "L 52.782431 83.599008 \n",
       "L 53.391403 83.770926 \n",
       "L 54.000799 83.937556 \n",
       "L 54.610629 84.098801 \n",
       "L 55.220899 84.254627 \n",
       "L 55.831619 84.405074 \n",
       "L 56.442798 84.550256 \n",
       "L 57.05445 84.69036 \n",
       "L 57.666586 84.825648 \n",
       "L 58.279219 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.58267 85.787584 \n",
       "L 63.199738 85.901483 \n",
       "L 63.817408 86.016176 \n",
       "L 64.435686 86.132341 \n",
       "L 65.054578 86.250631 \n",
       "L 65.674087 86.37167 \n",
       "L 66.294215 86.496044 \n",
       "L 66.914961 86.624285 \n",
       "L 67.536326 86.756872 \n",
       "L 68.158306 86.894218 \n",
       "L 68.780897 87.036671 \n",
       "L 69.404095 87.184505 \n",
       "L 70.027894 87.337919 \n",
       "L 70.652288 87.497038 \n",
       "L 71.277269 87.661913 \n",
       "L 71.902829 87.832522 \n",
       "L 72.528959 88.008775 \n",
       "L 73.155653 88.190519 \n",
       "L 73.782903 88.377538 \n",
       "L 74.410701 88.569568 \n",
       "L 75.03904 88.766297 \n",
       "L 75.667913 88.967375 \n",
       "L 76.297314 89.172423 \n",
       "L 76.92724 89.381038 \n",
       "L 77.557684 89.592804 \n",
       "L 78.188645 89.807296 \n",
       "L 78.820119 90.024089 \n",
       "L 79.452104 90.242765 \n",
       "L 80.084602 90.462917 \n",
       "L 80.717608 90.684157 \n",
       "L 81.351127 90.906118 \n",
       "L 81.985156 91.128457 \n",
       "L 82.619701 91.350864 \n",
       "L 83.25476 91.573056 \n",
       "L 83.890338 91.794781 \n",
       "L 84.526439 92.015824 \n",
       "L 85.163063 92.235999 \n",
       "L 85.800215 92.455153 \n",
       "L 86.437898 92.673165 \n",
       "L 87.076116 92.889942 \n",
       "L 87.714875 93.105419 \n",
       "L 88.354173 93.319555 \n",
       "L 88.994015 93.532335 \n",
       "L 89.634408 93.743761 \n",
       "L 90.275348 93.953854 \n",
       "L 90.916842 94.16265 \n",
       "L 91.558893 94.370199 \n",
       "L 92.2015 94.57656 \n",
       "L 92.844666 94.781799 \n",
       "L 93.488396 94.985991 \n",
       "L 94.132686 95.189212 \n",
       "\" clip-path=\"url(#p53818f802a)\" 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.507392 75.840471 \n",
       "L 42.103121 76.08367 \n",
       "L 42.699402 76.331565 \n",
       "L 43.296227 76.584045 \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.288094 77.905583 \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.097636 80.074175 \n",
       "L 51.700362 80.329832 \n",
       "L 52.303369 80.578025 \n",
       "L 52.906642 80.81747 \n",
       "L 53.510173 81.046904 \n",
       "L 54.113955 81.265106 \n",
       "L 54.717982 81.470918 \n",
       "L 55.322255 81.663271 \n",
       "L 55.92678 81.841206 \n",
       "L 56.531562 82.0039 \n",
       "L 57.136616 82.150681 \n",
       "L 57.741956 82.281053 \n",
       "L 58.347604 82.394711 \n",
       "L 58.953582 82.491556 \n",
       "L 59.559917 82.571701 \n",
       "L 60.166638 82.635486 \n",
       "L 60.773777 82.683476 \n",
       "L 61.381369 82.716459 \n",
       "L 61.989447 82.735444 \n",
       "L 62.598047 82.741651 \n",
       "L 63.207204 82.736492 \n",
       "L 63.816953 82.721559 \n",
       "L 64.427325 82.698598 \n",
       "L 65.038352 82.669484 \n",
       "L 65.650061 82.636195 \n",
       "L 66.262477 82.600778 \n",
       "L 66.875621 82.565318 \n",
       "L 67.48951 82.531908 \n",
       "L 68.104157 82.50261 \n",
       "L 68.719571 82.479425 \n",
       "L 69.335754 82.464264 \n",
       "L 69.952708 82.458913 \n",
       "L 70.570426 82.465011 \n",
       "L 71.188899 82.484023 \n",
       "L 71.808116 82.517222 \n",
       "L 72.428059 82.565672 \n",
       "L 73.048711 82.630217 \n",
       "L 73.670051 82.711475 \n",
       "L 74.292056 82.809831 \n",
       "L 74.914702 82.925445 \n",
       "L 75.537964 83.058256 \n",
       "L 76.161817 83.207987 \n",
       "L 76.786239 83.37417 \n",
       "L 77.411204 83.556152 \n",
       "L 78.036692 83.75312 \n",
       "L 78.662682 83.964121 \n",
       "L 79.289155 84.188084 \n",
       "L 79.916097 84.423847 \n",
       "L 80.543495 84.670178 \n",
       "L 81.171337 84.925798 \n",
       "L 81.799615 85.189409 \n",
       "L 82.428323 85.459709 \n",
       "L 83.057459 85.735417 \n",
       "L 83.687024 86.01529 \n",
       "L 84.317015 86.298137 \n",
       "L 84.94744 86.582839 \n",
       "L 85.578299 86.868349 \n",
       "L 86.209604 87.153712 \n",
       "L 86.841358 87.438067 \n",
       "L 87.473572 87.720649 \n",
       "L 88.106257 88.000795 \n",
       "L 88.739418 88.27794 \n",
       "L 89.373069 88.55162 \n",
       "L 90.007218 88.821461 \n",
       "L 90.641875 89.087182 \n",
       "L 91.277052 89.348586 \n",
       "L 91.912754 89.60555 \n",
       "L 92.54899 89.858022 \n",
       "L 93.185771 90.106016 \n",
       "L 93.823099 90.349593 \n",
       "L 94.460982 90.588865 \n",
       "L 95.099427 90.823983 \n",
       "L 95.738436 91.055126 \n",
       "L 96.378014 91.282501 \n",
       "L 97.018166 91.50633 \n",
       "L 97.65889 91.726849 \n",
       "\" clip-path=\"url(#p53818f802a)\" style=\"fill: none; stroke: #1f77b4; stroke-width: 1.5\"/>\n",
       "    <path d=\"M 39.943582 71.080942 \n",
       "L 40.532362 71.318577 \n",
       "L 41.121779 71.5639 \n",
       "L 41.711833 71.817424 \n",
       "L 42.302528 72.079641 \n",
       "L 42.893868 72.351002 \n",
       "L 43.485847 72.631904 \n",
       "L 44.078462 72.92268 \n",
       "L 44.671709 73.223577 \n",
       "L 45.265575 73.534742 \n",
       "L 45.860052 73.856205 \n",
       "L 46.455118 74.18786 \n",
       "L 47.050756 74.529451 \n",
       "L 47.646944 74.880555 \n",
       "L 48.243653 75.240566 \n",
       "L 48.840856 75.608683 \n",
       "L 49.43852 75.983904 \n",
       "L 50.036608 76.365008 \n",
       "L 50.635085 76.750565 \n",
       "L 51.233909 77.138923 \n",
       "L 51.833041 77.528218 \n",
       "L 52.43244 77.916384 \n",
       "L 53.032067 78.301168 \n",
       "L 53.63188 78.680138 \n",
       "L 54.231844 79.050724 \n",
       "L 54.831921 79.410231 \n",
       "L 55.432082 79.755883 \n",
       "L 56.0323 80.084863 \n",
       "L 56.632552 80.394345 \n",
       "L 57.232826 80.681548 \n",
       "L 57.833112 80.943787 \n",
       "L 58.433406 81.178513 \n",
       "L 59.033718 81.383373 \n",
       "L 59.634061 81.556257 \n",
       "L 60.234456 81.695343 \n",
       "L 60.834934 81.799152 \n",
       "L 61.435532 81.866582 \n",
       "L 62.036296 81.896948 \n",
       "L 62.637276 81.890016 \n",
       "L 63.238528 81.846021 \n",
       "L 63.840116 81.765689 \n",
       "L 64.442103 81.650242 \n",
       "L 65.044559 81.501397 \n",
       "L 65.647552 81.321351 \n",
       "L 66.25115 81.11277 \n",
       "L 66.855421 80.878749 \n",
       "L 67.46043 80.622779 \n",
       "L 68.066236 80.348697 \n",
       "L 68.672894 80.060632 \n",
       "L 69.280453 79.762944 \n",
       "L 69.888954 79.460157 \n",
       "L 70.498429 79.156884 \n",
       "L 71.108902 78.857762 \n",
       "L 71.720387 78.567368 \n",
       "L 72.332891 78.290156 \n",
       "L 72.946409 78.030377 \n",
       "L 73.560928 77.79202 \n",
       "L 74.176427 77.578746 \n",
       "L 74.792875 77.393835 \n",
       "L 75.410238 77.240143 \n",
       "L 76.028471 77.120061 \n",
       "L 76.647529 77.035493 \n",
       "L 77.26736 76.987834 \n",
       "L 77.887911 76.977967 \n",
       "L 78.509127 77.006262 \n",
       "L 79.130954 77.072599 \n",
       "L 79.753336 77.176378 \n",
       "L 80.376225 77.31656 \n",
       "L 80.99957 77.491694 \n",
       "L 81.623329 77.699975 \n",
       "L 82.247462 77.939279 \n",
       "L 82.871934 78.207222 \n",
       "L 83.496718 78.501207 \n",
       "L 84.121792 78.818491 \n",
       "L 84.747138 79.15622 \n",
       "L 85.372747 79.511497 \n",
       "L 85.998613 79.881423 \n",
       "L 86.624736 80.263142 \n",
       "L 87.251125 80.653885 \n",
       "L 87.877785 81.051002 \n",
       "L 88.504734 81.451999 \n",
       "L 89.131985 81.854553 \n",
       "L 89.759562 82.256542 \n",
       "L 90.387483 82.65605 \n",
       "L 91.015772 83.051384 \n",
       "L 91.644455 83.441074 \n",
       "L 92.273554 83.823868 \n",
       "L 92.903093 84.198738 \n",
       "L 93.533096 84.564862 \n",
       "L 94.163585 84.921619 \n",
       "L 94.794583 85.268575 \n",
       "L 95.426107 85.605462 \n",
       "L 96.058174 85.932172 \n",
       "L 96.690803 86.248731 \n",
       "L 97.324004 86.555285 \n",
       "L 97.95779 86.852083 \n",
       "L 98.592173 87.139461 \n",
       "L 99.227158 87.417819 \n",
       "L 99.862752 87.687617 \n",
       "L 100.498963 87.94935 \n",
       "L 101.135788 88.203541 \n",
       "\" clip-path=\"url(#p53818f802a)\" style=\"fill: none; stroke: #1f77b4; stroke-width: 1.5\"/>\n",
       "    <path d=\"M 43.66193 68.376274 \n",
       "L 44.24878 68.650895 \n",
       "L 44.836319 68.937777 \n",
       "L 45.424546 69.237746 \n",
       "L 46.013466 69.551586 \n",
       "L 46.603078 69.880022 \n",
       "L 47.193375 70.223686 \n",
       "L 47.78435 70.583108 \n",
       "L 48.375992 70.958678 \n",
       "L 48.968282 71.350629 \n",
       "L 49.561203 71.759001 \n",
       "L 50.154724 72.183617 \n",
       "L 50.748817 72.624059 \n",
       "L 51.343448 73.07964 \n",
       "L 51.938573 73.549379 \n",
       "L 52.534152 74.031985 \n",
       "L 53.130136 74.52584 \n",
       "L 53.726473 75.028983 \n",
       "L 54.323111 75.539111 \n",
       "L 54.919992 76.05357 \n",
       "L 55.51706 76.569374 \n",
       "L 56.114261 77.083208 \n",
       "L 56.71154 77.591459 \n",
       "L 57.308843 78.090239 \n",
       "L 57.906123 78.575431 \n",
       "L 58.503336 79.042731 \n",
       "L 59.100443 79.487702 \n",
       "L 59.697417 79.905841 \n",
       "L 60.294234 80.292638 \n",
       "L 60.890884 80.643654 \n",
       "L 61.487364 80.954599 \n",
       "L 62.083683 81.221405 \n",
       "L 62.679861 81.440315 \n",
       "L 63.275932 81.60795 \n",
       "L 63.871935 81.721399 \n",
       "L 64.467927 81.778287 \n",
       "L 65.06397 81.776837 \n",
       "L 65.66014 81.715936 \n",
       "L 66.256517 81.59518 \n",
       "L 66.853191 81.414918 \n",
       "L 67.450255 81.176276 \n",
       "L 68.047808 80.881165 \n",
       "L 68.64595 80.532291 \n",
       "L 69.244781 80.13313 \n",
       "L 69.844396 79.687903 \n",
       "L 70.44489 79.201529 \n",
       "L 71.046348 78.679562 \n",
       "L 71.648851 78.128121 \n",
       "L 72.252466 77.553804 \n",
       "L 72.85725 76.963588 \n",
       "L 73.46325 76.364726 \n",
       "L 74.070496 75.764632 \n",
       "L 74.679007 75.170765 \n",
       "L 75.288784 74.590509 \n",
       "L 75.899816 74.031056 \n",
       "L 76.512079 73.499287 \n",
       "L 77.125534 73.001666 \n",
       "L 77.740129 72.544144 \n",
       "L 78.355802 72.132058 \n",
       "L 78.972482 71.770066 \n",
       "L 79.59009 71.462078 \n",
       "L 80.208541 71.211213 \n",
       "L 80.827748 71.019769 \n",
       "L 81.44762 70.889211 \n",
       "L 82.068067 70.820176 \n",
       "L 82.689001 70.812488 \n",
       "L 83.310337 70.865205 \n",
       "L 83.932 70.976654 \n",
       "L 84.553916 71.144505 \n",
       "L 85.176023 71.365837 \n",
       "L 85.798268 71.637212 \n",
       "L 86.420605 71.954769 \n",
       "L 87.043001 72.314304 \n",
       "L 87.665433 72.711365 \n",
       "L 88.287885 73.141331 \n",
       "L 88.910355 73.599508 \n",
       "L 89.532846 74.081196 \n",
       "L 90.155373 74.581774 \n",
       "L 90.777959 75.096763 \n",
       "L 91.400628 75.621874 \n",
       "L 92.023415 76.153075 \n",
       "L 92.646356 76.686617 \n",
       "L 93.269494 77.219073 \n",
       "L 93.89287 77.747357 \n",
       "L 94.516528 78.26874 \n",
       "L 95.140516 78.780855 \n",
       "L 95.764874 79.281693 \n",
       "L 96.389647 79.7696 \n",
       "L 97.014874 80.243261 \n",
       "L 97.640594 80.701681 \n",
       "L 98.266843 81.144169 \n",
       "L 98.893651 81.570302 \n",
       "L 99.521046 81.979912 \n",
       "L 100.149055 82.373048 \n",
       "L 100.777695 82.749951 \n",
       "L 101.406986 83.111027 \n",
       "L 102.036942 83.456822 \n",
       "L 102.667571 83.787985 \n",
       "L 103.298882 84.105258 \n",
       "L 103.930882 84.409442 \n",
       "L 104.563568 84.701381 \n",
       "\" clip-path=\"url(#p53818f802a)\" style=\"fill: none; stroke: #1f77b4; stroke-width: 1.5\"/>\n",
       "    <path d=\"M 47.323362 65.565456 \n",
       "L 47.907642 65.855189 \n",
       "L 48.4926 66.159211 \n",
       "L 49.078233 66.478483 \n",
       "L 49.664543 66.81392 \n",
       "L 50.251527 67.166364 \n",
       "L 50.839176 67.536554 \n",
       "L 51.427479 67.925105 \n",
       "L 52.01642 68.332471 \n",
       "L 52.605979 68.758918 \n",
       "L 53.196134 69.204491 \n",
       "L 53.786851 69.66898 \n",
       "L 54.378097 70.151893 \n",
       "L 54.969836 70.652424 \n",
       "L 55.562021 71.169425 \n",
       "L 56.154606 71.701385 \n",
       "L 56.747543 72.246415 \n",
       "L 57.340775 72.80222 \n",
       "L 57.934251 73.366115 \n",
       "L 58.527912 73.934999 \n",
       "L 59.121702 74.50539 \n",
       "L 59.715569 75.073419 \n",
       "L 60.309462 75.634877 \n",
       "L 60.903328 76.18523 \n",
       "L 61.49713 76.719682 \n",
       "L 62.090827 77.233218 \n",
       "L 62.684391 77.720673 \n",
       "L 63.277803 78.1768 \n",
       "L 63.871051 78.59635 \n",
       "L 64.464137 78.974156 \n",
       "L 65.057072 79.305224 \n",
       "L 65.649879 79.584816 \n",
       "L 66.242593 79.808559 \n",
       "L 66.835264 79.972518 \n",
       "L 67.427947 80.073298 \n",
       "L 68.020716 80.108127 \n",
       "L 68.613648 80.07493 \n",
       "L 69.206833 79.9724 \n",
       "L 69.800367 79.800054 \n",
       "L 70.394351 79.558283 \n",
       "L 70.988891 79.248377 \n",
       "L 71.584094 78.872548 \n",
       "L 72.180067 78.433924 \n",
       "L 72.776914 77.936535 \n",
       "L 73.374734 77.38528 \n",
       "L 73.973619 76.78587 \n",
       "L 74.573652 76.144763 \n",
       "L 75.174903 75.46908 \n",
       "L 75.777432 74.766501 \n",
       "L 76.381283 74.04516 \n",
       "L 76.986485 73.313515 \n",
       "L 77.593052 72.580221 \n",
       "L 78.200978 71.853992 \n",
       "L 78.810244 71.143461 \n",
       "L 79.420814 70.457044 \n",
       "L 80.032636 69.802798 \n",
       "L 80.645646 69.188302 \n",
       "L 81.259762 68.620532 \n",
       "L 81.874897 68.105756 \n",
       "L 82.490952 67.649446 \n",
       "L 83.107824 67.256202 \n",
       "L 83.725403 66.929697 \n",
       "L 84.343579 66.672644 \n",
       "L 84.962244 66.486775 \n",
       "L 85.581289 66.372852 \n",
       "L 86.200613 66.330687 \n",
       "L 86.82012 66.359183 \n",
       "L 87.439728 66.456393 \n",
       "L 88.059357 66.619591 \n",
       "L 88.678948 66.845356 \n",
       "L 89.298446 67.129667 \n",
       "L 89.917811 67.467998 \n",
       "L 90.53702 67.855422 \n",
       "L 91.156059 68.286724 \n",
       "L 91.774925 68.756489 \n",
       "L 92.39363 69.259216 \n",
       "L 93.012194 69.7894 \n",
       "L 93.630649 70.341626 \n",
       "L 94.249034 70.910649 \n",
       "L 94.867393 71.491448 \n",
       "L 95.48578 72.079306 \n",
       "L 96.104247 72.669834 \n",
       "L 96.722857 73.259026 \n",
       "L 97.341665 73.843272 \n",
       "L 97.960735 74.419382 \n",
       "L 98.580125 74.984593 \n",
       "L 99.199892 75.536557 \n",
       "L 99.82009 76.073347 \n",
       "L 100.440772 76.593427 \n",
       "L 101.061984 77.095639 \n",
       "L 101.683772 77.579181 \n",
       "L 102.306168 78.043559 \n",
       "L 102.929209 78.488582 \n",
       "L 103.552924 78.914311 \n",
       "L 104.177332 79.321031 \n",
       "L 104.802455 79.709219 \n",
       "L 105.428307 80.079515 \n",
       "L 106.054896 80.43268 \n",
       "L 106.682229 80.769582 \n",
       "L 107.310311 81.091159 \n",
       "L 107.939137 81.398398 \n",
       "\" clip-path=\"url(#p53818f802a)\" style=\"fill: none; stroke: #1f77b4; stroke-width: 1.5\"/>\n",
       "    <path d=\"M 50.92835 62.55289 \n",
       "L 51.509376 62.821825 \n",
       "L 52.09101 63.102903 \n",
       "L 52.673246 63.396941 \n",
       "L 53.256085 63.704715 \n",
       "L 53.839523 64.026943 \n",
       "L 54.423549 64.364252 \n",
       "L 55.008153 64.717167 \n",
       "L 55.593321 65.086075 \n",
       "L 56.179036 65.471206 \n",
       "L 56.765279 65.872599 \n",
       "L 57.352022 66.290081 \n",
       "L 57.939238 66.723236 \n",
       "L 58.526899 67.171385 \n",
       "L 59.114967 67.633557 \n",
       "L 59.703409 68.108471 \n",
       "L 60.292187 68.594527 \n",
       "L 60.881259 69.08978 \n",
       "L 61.470589 69.59195 \n",
       "L 62.060133 70.098408 \n",
       "L 62.649853 70.606195 \n",
       "L 63.239713 71.112028 \n",
       "L 63.82968 71.612327 \n",
       "L 64.419722 72.10324 \n",
       "L 65.009815 72.580689 \n",
       "L 65.599939 73.040408 \n",
       "L 66.190081 73.478003 \n",
       "L 66.780237 73.88901 \n",
       "L 67.37041 74.268962 \n",
       "L 67.960613 74.613461 \n",
       "L 68.550867 74.918257 \n",
       "L 69.141202 75.179318 \n",
       "L 69.731659 75.392922 \n",
       "L 70.322288 75.555723 \n",
       "L 70.913144 75.664836 \n",
       "L 71.504296 75.717908 \n",
       "L 72.095814 75.71318 \n",
       "L 72.687778 75.64955 \n",
       "L 73.280269 75.526619 \n",
       "L 73.873372 75.344733 \n",
       "L 74.467173 75.10501 \n",
       "L 75.061759 74.809346 \n",
       "L 75.657211 74.460422 \n",
       "L 76.25361 74.061685 \n",
       "L 76.851025 73.617317 \n",
       "L 77.449522 73.132194 \n",
       "L 78.049157 72.611819 \n",
       "L 78.649971 72.062257 \n",
       "L 79.251998 71.490042 \n",
       "L 79.855255 70.902089 \n",
       "L 80.459747 70.305582 \n",
       "L 81.065464 69.707865 \n",
       "L 81.672385 69.116327 \n",
       "L 82.28047 68.538281 \n",
       "L 82.889671 67.980848 \n",
       "L 83.499924 67.450844 \n",
       "L 84.111159 66.954669 \n",
       "L 84.723291 66.498215 \n",
       "L 85.336231 66.086766 \n",
       "L 85.949885 65.724933 \n",
       "L 86.564154 65.416586 \n",
       "L 87.178938 65.164814 \n",
       "L 87.794139 64.971888 \n",
       "L 88.409661 64.839259 \n",
       "L 89.025413 64.767555 \n",
       "L 89.641308 64.756603 \n",
       "L 90.25727 64.805466 \n",
       "L 90.873233 64.912487 \n",
       "L 91.489138 65.07536 \n",
       "L 92.104942 65.291191 \n",
       "L 92.720609 65.556574 \n",
       "L 93.336116 65.867687 \n",
       "L 93.951453 66.220366 \n",
       "L 94.566623 66.610204 \n",
       "L 95.181634 67.032623 \n",
       "L 95.79651 67.482976 \n",
       "L 96.41128 67.95661 \n",
       "L 97.025983 68.448947 \n",
       "L 97.640665 68.955552 \n",
       "L 98.255373 69.472177 \n",
       "L 98.870164 69.994832 \n",
       "L 99.485093 70.5198 \n",
       "L 100.10022 71.043691 \n",
       "L 100.715602 71.563447 \n",
       "L 101.331298 72.076364 \n",
       "L 101.947367 72.5801 \n",
       "L 102.563858 73.072662 \n",
       "L 103.180823 73.552415 \n",
       "L 103.798311 74.018054 \n",
       "L 104.416363 74.468595 \n",
       "L 105.035018 74.903352 \n",
       "L 105.654308 75.321907 \n",
       "L 106.274261 75.724092 \n",
       "L 106.894903 76.109957 \n",
       "L 107.51625 76.479739 \n",
       "L 108.138319 76.833841 \n",
       "L 108.761121 77.172803 \n",
       "L 109.384659 77.497269 \n",
       "L 110.00894 77.807971 \n",
       "L 110.633963 78.105705 \n",
       "L 111.259725 78.391306 \n",
       "\" clip-path=\"url(#p53818f802a)\" style=\"fill: none; stroke: #1f77b4; stroke-width: 1.5\"/>\n",
       "    <path d=\"M 54.481754 59.437496 \n",
       "L 55.059354 59.664506 \n",
       "L 55.637482 59.89905 \n",
       "L 56.216133 60.141634 \n",
       "L 56.795306 60.392738 \n",
       "L 57.374999 60.652807 \n",
       "L 57.955202 60.92223 \n",
       "L 58.53591 61.201332 \n",
       "L 59.117114 61.490357 \n",
       "L 59.698802 61.78945 \n",
       "L 60.280965 62.098639 \n",
       "L 60.863584 62.417821 \n",
       "L 61.446644 62.746744 \n",
       "L 62.030131 63.084994 \n",
       "L 62.614021 63.431976 \n",
       "L 63.198297 63.786904 \n",
       "L 63.78294 64.148795 \n",
       "L 64.367926 64.516452 \n",
       "L 64.953237 64.88847 \n",
       "L 65.53885 65.263227 \n",
       "L 66.124748 65.638897 \n",
       "L 66.710914 66.013451 \n",
       "L 67.297334 66.384677 \n",
       "L 67.883994 66.750189 \n",
       "L 68.470889 67.107464 \n",
       "L 69.058011 67.453859 \n",
       "L 69.645359 67.786649 \n",
       "L 70.232941 68.103066 \n",
       "L 70.820764 68.40034 \n",
       "L 71.408844 68.67574 \n",
       "L 71.997202 68.926632 \n",
       "L 72.585863 69.150512 \n",
       "L 73.174858 69.345073 \n",
       "L 73.764224 69.508241 \n",
       "L 74.354 69.638233 \n",
       "L 74.944233 69.733594 \n",
       "L 75.534967 69.793245 \n",
       "L 76.126256 69.816515 \n",
       "L 76.718149 69.803173 \n",
       "L 77.310699 69.753454 \n",
       "L 77.903957 69.66807 \n",
       "L 78.497971 69.54822 \n",
       "L 79.09279 69.395592 \n",
       "L 79.688456 69.212346 \n",
       "L 80.285005 69.001096 \n",
       "L 80.882469 68.764882 \n",
       "L 81.480873 68.507132 \n",
       "L 82.080232 68.23161 \n",
       "L 82.680557 67.942372 \n",
       "L 83.281845 67.643694 \n",
       "L 83.884088 67.340015 \n",
       "L 84.487269 67.035863 \n",
       "L 85.091359 66.735787 \n",
       "L 85.696326 66.444277 \n",
       "L 86.302125 66.1657 \n",
       "L 86.908709 65.904229 \n",
       "L 87.516022 65.663772 \n",
       "L 88.124004 65.447922 \n",
       "L 88.732592 65.259895 \n",
       "L 89.341721 65.102489 \n",
       "L 89.951325 64.97805 \n",
       "L 90.561339 64.888443 \n",
       "L 91.171699 64.835034 \n",
       "L 91.782345 64.818687 \n",
       "L 92.393219 64.839768 \n",
       "L 93.004273 64.898154 \n",
       "L 93.615458 64.993256 \n",
       "L 94.22674 65.124056 \n",
       "L 94.838086 65.28913 \n",
       "L 95.449474 65.486706 \n",
       "L 96.06089 65.714702 \n",
       "L 96.672324 65.970777 \n",
       "L 97.283779 66.252387 \n",
       "L 97.895264 66.556839 \n",
       "L 98.50679 66.881336 \n",
       "L 99.118381 67.223036 \n",
       "L 99.730061 67.579094 \n",
       "L 100.341862 67.94671 \n",
       "L 100.95382 68.32317 \n",
       "L 101.56597 68.705872 \n",
       "L 102.178354 69.092371 \n",
       "L 102.791011 69.480388 \n",
       "L 103.403985 69.867842 \n",
       "L 104.017314 70.252853 \n",
       "L 104.63104 70.633761 \n",
       "L 105.245202 71.009122 \n",
       "L 105.859835 71.377711 \n",
       "L 106.474972 71.738517 \n",
       "L 107.090647 72.090733 \n",
       "L 107.706885 72.433752 \n",
       "L 108.323715 72.767146 \n",
       "L 108.941153 73.090653 \n",
       "L 109.559219 73.404166 \n",
       "L 110.17793 73.707712 \n",
       "L 110.797294 74.001433 \n",
       "L 111.417321 74.285573 \n",
       "L 112.038019 74.560462 \n",
       "L 112.659387 74.826493 \n",
       "L 113.281428 75.084115 \n",
       "L 113.904144 75.333815 \n",
       "L 114.527528 75.576106 \n",
       "\" clip-path=\"url(#p53818f802a)\" style=\"fill: none; stroke: #1f77b4; stroke-width: 1.5\"/>\n",
       "    <path d=\"M 57.988309 56.391445 \n",
       "L 58.562773 56.581055 \n",
       "L 59.137714 56.774106 \n",
       "L 59.713128 56.970826 \n",
       "L 60.289014 57.171431 \n",
       "L 60.865374 57.376121 \n",
       "L 61.4422 57.58507 \n",
       "L 62.019491 57.798426 \n",
       "L 62.597243 58.016299 \n",
       "L 63.175451 58.238755 \n",
       "L 63.754112 58.46581 \n",
       "L 64.333216 58.697417 \n",
       "L 64.912758 58.933466 \n",
       "L 65.492733 59.173775 \n",
       "L 66.073131 59.418077 \n",
       "L 66.653944 59.666023 \n",
       "L 67.235169 59.917175 \n",
       "L 67.816792 60.170995 \n",
       "L 68.398812 60.426858 \n",
       "L 68.981217 60.684036 \n",
       "L 69.564003 60.941711 \n",
       "L 70.147166 61.198973 \n",
       "L 70.730704 61.45483 \n",
       "L 71.31461 61.70821 \n",
       "L 71.898888 61.957979 \n",
       "L 72.483536 62.202949 \n",
       "L 73.068558 62.441895 \n",
       "L 73.653962 62.673571 \n",
       "L 74.239753 62.89673 \n",
       "L 74.825944 63.110145 \n",
       "L 75.412546 63.312626 \n",
       "L 75.999573 63.50305 \n",
       "L 76.587043 63.680377 \n",
       "L 77.174975 63.843676 \n",
       "L 77.763389 63.992144 \n",
       "L 78.352308 64.125132 \n",
       "L 78.941754 64.242156 \n",
       "L 79.531751 64.342921 \n",
       "L 80.122322 64.427329 \n",
       "L 80.713489 64.495493 \n",
       "L 81.305277 64.547742 \n",
       "L 81.897704 64.584626 \n",
       "L 82.490792 64.606912 \n",
       "L 83.084555 64.615582 \n",
       "L 83.679008 64.61182 \n",
       "L 84.274161 64.597001 \n",
       "L 84.870022 64.572672 \n",
       "L 85.466593 64.54053 \n",
       "L 86.063873 64.5024 \n",
       "L 86.661857 64.460201 \n",
       "L 87.260537 64.415925 \n",
       "L 87.859898 64.371598 \n",
       "L 88.459924 64.329253 \n",
       "L 89.060594 64.290894 \n",
       "L 89.661885 64.258467 \n",
       "L 90.26377 64.233826 \n",
       "L 90.866222 64.218708 \n",
       "L 91.469207 64.214705 \n",
       "L 92.072696 64.223239 \n",
       "L 92.676656 64.245547 \n",
       "L 93.281057 64.282663 \n",
       "L 93.885867 64.335405 \n",
       "L 94.491057 64.404373 \n",
       "L 95.0966 64.489942 \n",
       "L 95.702471 64.592265 \n",
       "L 96.308647 64.711284 \n",
       "L 96.91511 64.84673 \n",
       "L 97.521845 64.998146 \n",
       "L 98.128839 65.164897 \n",
       "L 98.736087 65.346195 \n",
       "L 99.343583 65.541112 \n",
       "L 99.951328 65.748608 \n",
       "L 100.559324 65.967555 \n",
       "L 101.167581 66.196754 \n",
       "L 101.776106 66.434964 \n",
       "L 102.384913 66.680923 \n",
       "L 102.994017 66.933365 \n",
       "L 103.603436 67.191047 \n",
       "L 104.21319 67.452762 \n",
       "L 104.823295 67.717351 \n",
       "L 105.433777 67.983726 \n",
       "L 106.044651 68.250871 \n",
       "L 106.655945 68.51786 \n",
       "L 107.267673 68.783853 \n",
       "L 107.87986 69.048108 \n",
       "L 108.492524 69.309982 \n",
       "L 109.105681 69.568924 \n",
       "L 109.719349 69.824484 \n",
       "L 110.333543 70.076298 \n",
       "L 110.948276 70.324094 \n",
       "L 111.563563 70.56768 \n",
       "L 112.179409 70.806937 \n",
       "L 112.795826 71.041814 \n",
       "L 113.412821 71.272324 \n",
       "L 114.030396 71.498527 \n",
       "L 114.648558 71.720531 \n",
       "L 115.267309 71.938484 \n",
       "L 115.88665 72.152558 \n",
       "L 116.50658 72.362955 \n",
       "L 117.127102 72.569893 \n",
       "L 117.74821 72.773597 \n",
       "\" clip-path=\"url(#p53818f802a)\" style=\"fill: none; stroke: #1f77b4; stroke-width: 1.5\"/>\n",
       "    <path d=\"M 61.449653 53.491099 \n",
       "L 62.021327 53.659298 \n",
       "L 62.593455 53.828698 \n",
       "L 63.166035 53.999374 \n",
       "L 63.739069 54.171396 \n",
       "L 64.312556 54.34483 \n",
       "L 64.886494 54.519733 \n",
       "L 65.460883 54.696151 \n",
       "L 66.035722 54.874123 \n",
       "L 66.61101 55.053669 \n",
       "L 67.186747 55.234795 \n",
       "L 67.762929 55.417487 \n",
       "L 68.339555 55.601709 \n",
       "L 68.916624 55.787401 \n",
       "L 69.494133 55.974479 \n",
       "L 70.072081 56.162828 \n",
       "L 70.650468 56.352307 \n",
       "L 71.229289 56.542741 \n",
       "L 71.808546 56.733928 \n",
       "L 72.388234 56.92563 \n",
       "L 72.968354 57.117582 \n",
       "L 73.548906 57.309488 \n",
       "L 74.129891 57.501026 \n",
       "L 74.711307 57.691846 \n",
       "L 75.293158 57.88158 \n",
       "L 75.875443 58.069841 \n",
       "L 76.458166 58.256229 \n",
       "L 77.04133 58.440339 \n",
       "L 77.624938 58.621764 \n",
       "L 78.208997 58.800105 \n",
       "L 78.793512 58.974974 \n",
       "L 79.378486 59.146005 \n",
       "L 79.963929 59.31286 \n",
       "L 80.549848 59.475235 \n",
       "L 81.136249 59.632868 \n",
       "L 81.723143 59.78555 \n",
       "L 82.310534 59.933123 \n",
       "L 82.898434 60.075492 \n",
       "L 83.48685 60.212627 \n",
       "L 84.075788 60.344565 \n",
       "L 84.665257 60.471416 \n",
       "L 85.255263 60.59336 \n",
       "L 85.845812 60.710649 \n",
       "L 86.43691 60.823605 \n",
       "L 87.028559 60.932615 \n",
       "L 87.620762 61.038129 \n",
       "L 88.213521 61.140651 \n",
       "L 88.806836 61.240735 \n",
       "L 89.400704 61.338975 \n",
       "L 89.995123 61.435996 \n",
       "L 90.59009 61.532447 \n",
       "L 91.185597 61.628985 \n",
       "L 91.781639 61.726271 \n",
       "L 92.378206 61.824955 \n",
       "L 92.975292 61.925666 \n",
       "L 93.572884 62.029007 \n",
       "L 94.170976 62.135538 \n",
       "L 94.769552 62.245774 \n",
       "L 95.368604 62.360175 \n",
       "L 95.968121 62.479139 \n",
       "L 96.568092 62.602999 \n",
       "L 97.168506 62.73202 \n",
       "L 97.769355 62.866393 \n",
       "L 98.37063 63.006238 \n",
       "L 98.972323 63.151604 \n",
       "L 99.574427 63.302471 \n",
       "L 100.176936 63.458751 \n",
       "L 100.779847 63.620295 \n",
       "L 101.383156 63.786897 \n",
       "L 101.986864 63.958303 \n",
       "L 102.59097 64.134212 \n",
       "L 103.195473 64.314287 \n",
       "L 103.800377 64.498163 \n",
       "L 104.405687 64.685453 \n",
       "L 105.011406 64.875755 \n",
       "L 105.617541 65.068661 \n",
       "L 106.224096 65.263762 \n",
       "L 106.83108 65.460655 \n",
       "L 107.438502 65.658949 \n",
       "L 108.046366 65.858269 \n",
       "L 108.654684 66.058263 \n",
       "L 109.263459 66.258602 \n",
       "L 109.872705 66.458985 \n",
       "L 110.482424 66.659141 \n",
       "L 111.092626 66.858827 \n",
       "L 111.703321 67.057837 \n",
       "L 112.314511 67.255991 \n",
       "L 112.926204 67.453143 \n",
       "L 113.538406 67.649174 \n",
       "L 114.151122 67.843997 \n",
       "L 114.764357 68.037548 \n",
       "L 115.378113 68.229789 \n",
       "L 115.992394 68.420703 \n",
       "L 116.607204 68.610294 \n",
       "L 117.222543 68.798581 \n",
       "L 117.838412 68.9856 \n",
       "L 118.454816 69.171399 \n",
       "L 119.071752 69.356032 \n",
       "L 119.689221 69.539566 \n",
       "L 120.307226 69.722072 \n",
       "L 120.925762 69.903622 \n",
       "\" clip-path=\"url(#p53818f802a)\" 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.003337 52.155868 \n",
       "L 70.576426 52.318747 \n",
       "L 71.149959 52.482089 \n",
       "L 71.72394 52.645887 \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.600543 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.226391 54.801173 \n",
       "L 79.806648 54.966814 \n",
       "L 80.38736 55.132013 \n",
       "L 80.968527 55.296675 \n",
       "L 81.550153 55.460705 \n",
       "L 82.132238 55.624011 \n",
       "L 82.714784 55.786508 \n",
       "L 83.297794 55.948115 \n",
       "L 83.881271 56.108762 \n",
       "L 84.465215 56.268386 \n",
       "L 85.049631 56.426938 \n",
       "L 85.63452 56.584382 \n",
       "L 86.219885 56.740694 \n",
       "L 86.805729 56.895868 \n",
       "L 87.392052 57.049913 \n",
       "L 87.978857 57.202855 \n",
       "L 88.566147 57.354737 \n",
       "L 89.153923 57.505618 \n",
       "L 89.742186 57.655576 \n",
       "L 90.330938 57.804701 \n",
       "L 90.920178 57.9531 \n",
       "L 91.509908 58.100892 \n",
       "L 92.100127 58.248209 \n",
       "L 92.690836 58.39519 \n",
       "L 93.282033 58.541983 \n",
       "L 93.873718 58.688741 \n",
       "L 94.465889 58.83562 \n",
       "L 95.058545 58.982776 \n",
       "L 95.651684 59.130361 \n",
       "L 96.245303 59.278524 \n",
       "L 96.839401 59.427407 \n",
       "L 97.433977 59.577143 \n",
       "L 98.029025 59.727852 \n",
       "L 98.624546 59.879643 \n",
       "L 99.220534 60.03261 \n",
       "L 99.81699 60.186831 \n",
       "L 100.413911 60.342368 \n",
       "L 101.011294 60.499266 \n",
       "L 101.609139 60.657555 \n",
       "L 102.207443 60.817244 \n",
       "L 102.806207 60.97833 \n",
       "L 103.405427 61.140792 \n",
       "L 104.005106 61.304594 \n",
       "L 104.605241 61.469689 \n",
       "L 105.205834 61.636016 \n",
       "L 105.806886 61.803506 \n",
       "L 106.408396 61.972077 \n",
       "L 107.010367 62.141646 \n",
       "L 107.612801 62.31212 \n",
       "L 108.215697 62.483405 \n",
       "L 108.81906 62.655406 \n",
       "L 109.42289 62.828025 \n",
       "L 110.027191 63.001169 \n",
       "L 110.631965 63.174745 \n",
       "L 111.237214 63.348665 \n",
       "L 111.842942 63.522846 \n",
       "L 112.449148 63.697211 \n",
       "L 113.055839 63.871689 \n",
       "L 113.663014 64.046215 \n",
       "L 114.270676 64.220735 \n",
       "L 114.87883 64.395197 \n",
       "L 115.487474 64.569561 \n",
       "L 116.096612 64.743792 \n",
       "L 116.706246 64.917862 \n",
       "L 117.316377 65.09175 \n",
       "L 117.927009 65.265442 \n",
       "L 118.53814 65.438929 \n",
       "L 119.149772 65.612207 \n",
       "L 119.761909 65.785277 \n",
       "L 120.374547 65.958143 \n",
       "L 120.98769 66.130814 \n",
       "L 121.60134 66.303301 \n",
       "L 122.215494 66.475618 \n",
       "L 122.830154 66.64778 \n",
       "L 123.445322 66.819804 \n",
       "L 124.060996 66.991708 \n",
       "\" clip-path=\"url(#p53818f802a)\" style=\"fill: none; stroke: #1f77b4; stroke-width: 1.5\"/>\n",
       "   </g>\n",
       "   <g id=\"Line3DCollection_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.645042 11.794962 \n",
       "L 30.136152 13.923719 \n",
       "L 30.622699 15.982629 \n",
       "L 31.104782 17.972483 \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.451567 26.912114 \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.874748 \n",
       "L 37.435924 38.968027 \n",
       "L 37.861601 40.001404 \n",
       "L 38.284143 40.975312 \n",
       "L 38.703622 41.890183 \n",
       "L 39.120105 42.746426 \n",
       "L 39.533661 43.544428 \n",
       "L 39.944356 44.284566 \n",
       "L 40.352255 44.967195 \n",
       "L 40.757423 45.592652 \n",
       "L 41.159922 46.161259 \n",
       "L 41.559815 46.673329 \n",
       "L 41.957163 47.12915 \n",
       "L 42.352027 47.528995 \n",
       "L 42.744464 47.873124 \n",
       "L 43.134534 48.161781 \n",
       "L 43.522294 48.395197 \n",
       "L 43.9078 48.573583 \n",
       "L 44.291109 48.697141 \n",
       "L 44.672275 48.766053 \n",
       "L 45.051353 48.780492 \n",
       "L 45.428397 48.740609 \n",
       "L 45.803458 48.646549 \n",
       "L 46.176589 48.498439 \n",
       "L 46.547841 48.29639 \n",
       "L 46.917266 48.040506 \n",
       "L 47.284914 47.730868 \n",
       "L 47.650834 47.367553 \n",
       "L 48.015075 46.950616 \n",
       "L 48.377686 46.480101 \n",
       "L 48.738714 45.956043 \n",
       "L 49.098209 45.378457 \n",
       "L 49.456215 44.74735 \n",
       "L 49.81278 44.062711 \n",
       "L 50.16795 43.324522 \n",
       "L 50.521771 42.532742 \n",
       "L 50.874288 41.687328 \n",
       "L 51.225546 40.788216 \n",
       "L 51.57559 39.835328 \n",
       "L 51.924464 38.828577 \n",
       "L 52.272211 37.767863 \n",
       "L 52.618876 36.653072 \n",
       "L 52.964501 35.484068 \n",
       "L 53.30913 34.260718 \n",
       "L 53.652806 32.982859 \n",
       "L 53.995571 31.650324 \n",
       "L 54.337468 30.262934 \n",
       "L 54.678538 28.820487 \n",
       "L 55.018825 27.322773 \n",
       "L 55.358369 25.76957 \n",
       "L 55.697212 24.160639 \n",
       "L 56.035396 22.495727 \n",
       "L 56.372963 20.774566 \n",
       "L 56.709954 18.996872 \n",
       "L 57.04641 17.162356 \n",
       "L 57.382373 15.270699 \n",
       "L 57.717883 13.32158 \n",
       "L 58.052982 11.314659 \n",
       "L 58.38771 9.24958 \n",
       "L 58.72211 7.125969 \n",
       "L 59.056222 4.94344 \n",
       "L 59.390088 2.701592 \n",
       "L 59.723748 0.399999 \n",
       "L 59.921437 -1 \n",
       "\" clip-path=\"url(#p53818f802a)\" 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.368856 28.869059 \n",
       "L 36.839333 30.939027 \n",
       "L 37.305678 32.94069 \n",
       "L 37.767986 34.874828 \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.022052 43.557932 \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.449186 54.181681 \n",
       "L 43.863651 55.238416 \n",
       "L 44.275258 56.236486 \n",
       "L 44.684073 57.176315 \n",
       "L 45.090164 58.058322 \n",
       "L 45.493594 58.8829 \n",
       "L 45.894427 59.650424 \n",
       "L 46.292727 60.361259 \n",
       "L 46.688555 61.015748 \n",
       "L 47.081972 61.61422 \n",
       "L 47.473038 62.156988 \n",
       "L 47.861812 62.644347 \n",
       "L 48.248352 63.07658 \n",
       "L 48.632715 63.453952 \n",
       "L 49.014957 63.776714 \n",
       "L 49.395135 64.0451 \n",
       "L 49.773302 64.259333 \n",
       "L 50.149513 64.419618 \n",
       "L 50.523821 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.418064 \n",
       "L 52.368635 64.258205 \n",
       "L 52.732608 64.04545 \n",
       "L 53.095032 63.779892 \n",
       "L 53.455957 63.461615 \n",
       "L 53.81543 63.090685 \n",
       "L 54.173499 62.66716 \n",
       "L 54.53021 62.191079 \n",
       "L 54.885611 61.662473 \n",
       "L 55.239747 61.081355 \n",
       "L 55.592664 60.447732 \n",
       "L 55.944407 59.761591 \n",
       "L 56.29502 59.022909 \n",
       "L 56.64455 58.231651 \n",
       "L 56.993039 57.387767 \n",
       "L 57.340532 56.491194 \n",
       "L 57.687072 55.541858 \n",
       "L 58.032703 54.53967 \n",
       "L 58.377469 53.48453 \n",
       "L 58.72141 52.376325 \n",
       "L 59.064571 51.214925 \n",
       "L 59.406994 50.000192 \n",
       "L 59.748722 48.731969 \n",
       "L 60.089795 47.410092 \n",
       "L 60.430257 46.034381 \n",
       "L 60.770148 44.604645 \n",
       "L 61.109512 43.12067 \n",
       "L 61.448389 41.582243 \n",
       "L 61.786822 39.989122 \n",
       "L 62.12485 38.341067 \n",
       "L 62.462516 36.637813 \n",
       "L 62.799863 34.879073 \n",
       "L 63.136929 33.064576 \n",
       "L 63.473759 31.194002 \n",
       "L 63.810391 29.267043 \n",
       "L 64.146869 27.283357 \n",
       "L 64.483233 25.242598 \n",
       "L 64.819525 23.144405 \n",
       "L 65.155788 20.988391 \n",
       "L 65.492062 18.774174 \n",
       "L 65.828389 16.501329 \n",
       "L 66.164812 14.169444 \n",
       "L 66.501373 11.778071 \n",
       "L 66.838115 9.326739 \n",
       "L 67.175079 6.814991 \n",
       "L 67.51231 4.242328 \n",
       "L 67.84985 1.608235 \n",
       "L 68.176737 -1 \n",
       "\" clip-path=\"url(#p53818f802a)\" 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.845465 39.95822 \n",
       "L 43.298214 41.994246 \n",
       "L 43.747216 43.962821 \n",
       "L 44.192558 45.864704 \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.367302 54.398647 \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.68549 64.823169 \n",
       "L 50.087807 65.858216 \n",
       "L 50.48758 66.835286 \n",
       "L 50.884873 67.754795 \n",
       "L 51.279749 68.617155 \n",
       "L 51.67227 69.42275 \n",
       "L 52.062495 70.171952 \n",
       "L 52.450486 70.865118 \n",
       "L 52.836303 71.502584 \n",
       "L 53.220001 72.084675 \n",
       "L 53.601639 72.611697 \n",
       "L 53.981274 73.08394 \n",
       "L 54.35896 73.501682 \n",
       "L 54.734754 73.865184 \n",
       "L 55.108708 74.174689 \n",
       "L 55.480876 74.430431 \n",
       "L 55.85131 74.632625 \n",
       "L 56.220064 74.781475 \n",
       "L 56.587188 74.877168 \n",
       "L 56.952732 74.919879 \n",
       "L 57.316747 74.909767 \n",
       "L 57.679283 74.84698 \n",
       "L 58.040389 74.73165 \n",
       "L 58.400112 74.563897 \n",
       "L 58.758502 74.343826 \n",
       "L 59.115605 74.071531 \n",
       "L 59.471469 73.74709 \n",
       "L 59.826139 73.37057 \n",
       "L 60.179663 72.942025 \n",
       "L 60.532087 72.461494 \n",
       "L 60.883455 71.929004 \n",
       "L 61.233813 71.34457 \n",
       "L 61.583204 70.708194 \n",
       "L 61.931675 70.019865 \n",
       "L 62.279268 69.279558 \n",
       "L 62.626028 68.487236 \n",
       "L 62.971998 67.642851 \n",
       "L 63.317221 66.746338 \n",
       "L 63.661741 65.797623 \n",
       "L 64.0056 64.796618 \n",
       "L 64.348842 63.743221 \n",
       "L 64.691508 62.637321 \n",
       "L 65.033641 61.478788 \n",
       "L 65.375282 60.267486 \n",
       "L 65.716476 59.003258 \n",
       "L 66.057263 57.68594 \n",
       "L 66.397684 56.315356 \n",
       "L 66.737782 54.891311 \n",
       "L 67.077599 53.413599 \n",
       "L 67.417177 51.882003 \n",
       "L 67.756557 50.296289 \n",
       "L 68.09578 48.656213 \n",
       "L 68.434889 46.961515 \n",
       "L 68.773927 45.211915 \n",
       "L 69.112932 43.407136 \n",
       "L 69.45195 41.546865 \n",
       "L 69.79102 39.630796 \n",
       "L 70.130186 37.658594 \n",
       "L 70.469489 35.629912 \n",
       "L 70.808971 33.544395 \n",
       "L 71.148676 31.401659 \n",
       "L 71.488646 29.201327 \n",
       "L 71.828923 26.942979 \n",
       "L 72.169551 24.626201 \n",
       "L 72.510573 22.250556 \n",
       "L 72.852034 19.815577 \n",
       "L 73.193975 17.320815 \n",
       "L 73.536442 14.765769 \n",
       "L 73.879481 12.149933 \n",
       "L 74.223132 9.472795 \n",
       "L 74.567444 6.733809 \n",
       "L 74.912463 3.932415 \n",
       "L 75.258231 1.06805 \n",
       "L 75.503017 -1 \n",
       "\" clip-path=\"url(#p53818f802a)\" style=\"fill: none; stroke: #800080; stroke-width: 1.5\"/>\n",
       "    <path d=\"M 45.058486 23.863166 \n",
       "L 45.530525 26.532943 \n",
       "L 45.99834 29.127403 \n",
       "L 46.46203 31.647536 \n",
       "L 46.921692 34.094337 \n",
       "L 47.377424 36.468763 \n",
       "L 47.829318 38.771721 \n",
       "L 48.277466 41.004121 \n",
       "L 48.721959 43.166811 \n",
       "L 49.162884 45.260643 \n",
       "L 49.600327 47.286421 \n",
       "L 50.034372 49.244925 \n",
       "L 50.465101 51.136919 \n",
       "L 50.892596 52.96313 \n",
       "L 51.316935 54.724276 \n",
       "L 51.738195 56.421029 \n",
       "L 52.156455 58.054063 \n",
       "L 52.571786 59.624011 \n",
       "L 52.984263 61.131498 \n",
       "L 53.393957 62.577108 \n",
       "L 53.800938 63.961424 \n",
       "L 54.205277 65.284996 \n",
       "L 54.607041 66.548367 \n",
       "L 55.006296 67.752043 \n",
       "L 55.403109 68.896523 \n",
       "L 55.797543 69.982282 \n",
       "L 56.189661 71.009776 \n",
       "L 56.579527 71.97945 \n",
       "L 56.967201 72.89172 \n",
       "L 57.352745 73.746995 \n",
       "L 57.736216 74.545662 \n",
       "L 58.117674 75.288087 \n",
       "L 58.497177 75.97463 \n",
       "L 58.874781 76.605624 \n",
       "L 59.250541 77.181393 \n",
       "L 59.624515 77.702243 \n",
       "L 59.996754 78.168462 \n",
       "L 60.367315 78.580328 \n",
       "L 60.736248 78.938099 \n",
       "L 61.103608 79.24202 \n",
       "L 61.469444 79.492323 \n",
       "L 61.833809 79.689222 \n",
       "L 62.196753 79.83292 \n",
       "L 62.558325 79.923603 \n",
       "L 62.918576 79.961446 \n",
       "L 63.277553 79.946606 \n",
       "L 63.635305 79.879231 \n",
       "L 63.99188 79.759453 \n",
       "L 64.347326 79.58739 \n",
       "L 64.701688 79.363146 \n",
       "L 65.055015 79.086816 \n",
       "L 65.407351 78.758477 \n",
       "L 65.758742 78.378194 \n",
       "L 66.109234 77.946019 \n",
       "L 66.458872 77.461995 \n",
       "L 66.807701 76.926146 \n",
       "L 67.155766 76.338485 \n",
       "L 67.503109 75.699016 \n",
       "L 67.849775 75.007724 \n",
       "L 68.195808 74.264587 \n",
       "L 68.54125 73.469566 \n",
       "L 68.886146 72.622611 \n",
       "L 69.230539 71.72366 \n",
       "L 69.574471 70.772635 \n",
       "L 69.917985 69.769449 \n",
       "L 70.261124 68.714 \n",
       "L 70.603929 67.606176 \n",
       "L 70.946444 66.445847 \n",
       "L 71.28871 65.232875 \n",
       "L 71.630771 63.967104 \n",
       "L 71.972668 62.648369 \n",
       "L 72.314443 61.276494 \n",
       "L 72.656138 59.851285 \n",
       "L 72.997797 58.372532 \n",
       "L 73.33946 56.840021 \n",
       "L 73.68117 55.253516 \n",
       "L 74.02297 53.612773 \n",
       "L 74.364901 51.917532 \n",
       "L 74.707007 50.167513 \n",
       "L 75.04933 48.362437 \n",
       "L 75.391913 46.501994 \n",
       "L 75.734797 44.585874 \n",
       "L 76.078028 42.613741 \n",
       "L 76.421647 40.585252 \n",
       "L 76.765698 38.500049 \n",
       "L 77.110225 36.35775 \n",
       "L 77.455271 34.157974 \n",
       "L 77.800881 31.900302 \n",
       "L 78.147099 29.584325 \n",
       "L 78.493971 27.209599 \n",
       "L 78.841541 24.77566 \n",
       "L 79.189853 22.282053 \n",
       "L 79.538955 19.728289 \n",
       "L 79.888893 17.113851 \n",
       "L 80.239712 14.438228 \n",
       "L 80.59146 11.700884 \n",
       "L 80.944185 8.901246 \n",
       "L 81.297932 6.038756 \n",
       "L 81.652753 3.112813 \n",
       "L 82.008695 0.122792 \n",
       "L 82.139956 -1 \n",
       "\" clip-path=\"url(#p53818f802a)\" style=\"fill: none; stroke: #800080; stroke-width: 1.5\"/>\n",
       "    <path d=\"M 51.434998 23.278461 \n",
       "L 51.890666 25.96647 \n",
       "L 52.34247 28.578557 \n",
       "L 52.790504 31.115745 \n",
       "L 53.234862 33.579025 \n",
       "L 53.675636 35.969373 \n",
       "L 54.112915 38.287707 \n",
       "L 54.546785 40.534946 \n",
       "L 54.977334 42.711957 \n",
       "L 55.404645 44.8196 \n",
       "L 55.828801 46.858688 \n",
       "L 56.24988 48.830014 \n",
       "L 56.667962 50.734346 \n",
       "L 57.083125 52.572431 \n",
       "L 57.495444 54.344984 \n",
       "L 57.904992 56.052693 \n",
       "L 58.311845 57.696244 \n",
       "L 58.716071 59.276267 \n",
       "L 59.117743 60.793401 \n",
       "L 59.516927 62.248242 \n",
       "L 59.913693 63.641375 \n",
       "L 60.308105 64.973356 \n",
       "L 60.700232 66.244739 \n",
       "L 61.090134 67.456032 \n",
       "L 61.477878 68.607743 \n",
       "L 61.863523 69.700352 \n",
       "L 62.247131 70.73432 \n",
       "L 62.628763 71.710099 \n",
       "L 63.008476 72.628108 \n",
       "L 63.386331 73.488763 \n",
       "L 63.762384 74.292453 \n",
       "L 64.136691 75.039552 \n",
       "L 64.509308 75.730421 \n",
       "L 64.880292 76.3654 \n",
       "L 65.249695 76.944814 \n",
       "L 65.617572 77.468975 \n",
       "L 65.983974 77.938173 \n",
       "L 66.348956 78.35269 \n",
       "L 66.712568 78.712787 \n",
       "L 67.07486 79.018711 \n",
       "L 67.435884 79.270698 \n",
       "L 67.795689 79.468964 \n",
       "L 68.154325 79.613713 \n",
       "L 68.511841 79.705136 \n",
       "L 68.868284 79.743408 \n",
       "L 69.223702 79.72869 \n",
       "L 69.578144 79.661129 \n",
       "L 69.931656 79.54086 \n",
       "L 70.284284 79.368001 \n",
       "L 70.636075 79.142661 \n",
       "L 70.987075 78.864931 \n",
       "L 71.337329 78.534891 \n",
       "L 71.686883 78.152609 \n",
       "L 72.03578 77.718136 \n",
       "L 72.384067 77.231514 \n",
       "L 72.731788 76.692768 \n",
       "L 73.078987 76.101913 \n",
       "L 73.425706 75.458951 \n",
       "L 73.771991 74.763869 \n",
       "L 74.117884 74.016642 \n",
       "L 74.46343 73.217233 \n",
       "L 74.808671 72.36559 \n",
       "L 75.153651 71.461651 \n",
       "L 75.498413 70.505336 \n",
       "L 75.842999 69.496559 \n",
       "L 76.187453 68.435216 \n",
       "L 76.531816 67.321193 \n",
       "L 76.876133 66.154359 \n",
       "L 77.220445 64.934575 \n",
       "L 77.564796 63.661682 \n",
       "L 77.909229 62.335515 \n",
       "L 78.253785 60.955894 \n",
       "L 78.598508 59.522624 \n",
       "L 78.943441 58.035494 \n",
       "L 79.288626 56.494284 \n",
       "L 79.634108 54.898758 \n",
       "L 79.979929 53.248668 \n",
       "L 80.326132 51.543752 \n",
       "L 80.672762 49.783726 \n",
       "L 81.019861 47.968309 \n",
       "L 81.367475 46.097185 \n",
       "L 81.715646 44.170043 \n",
       "L 82.06442 42.186538 \n",
       "L 82.41384 40.146335 \n",
       "L 82.763952 38.049063 \n",
       "L 83.114801 35.894329 \n",
       "L 83.466432 33.68176 \n",
       "L 83.818892 31.41093 \n",
       "L 84.172226 29.081419 \n",
       "L 84.52648 26.692782 \n",
       "L 84.881704 24.244545 \n",
       "L 85.237943 21.736258 \n",
       "L 85.595244 19.167413 \n",
       "L 85.953658 16.537497 \n",
       "L 86.313231 13.845991 \n",
       "L 86.674013 11.09235 \n",
       "L 87.036056 8.275994 \n",
       "L 87.399407 5.396359 \n",
       "L 87.764118 2.452833 \n",
       "L 88.130243 -0.555202 \n",
       "L 88.183446 -1 \n",
       "\" clip-path=\"url(#p53818f802a)\" style=\"fill: none; stroke: #800080; stroke-width: 1.5\"/>\n",
       "    <path d=\"M 57.802825 16.585703 \n",
       "L 58.243964 19.323289 \n",
       "L 58.681576 21.983522 \n",
       "L 59.115752 24.567457 \n",
       "L 59.54658 27.076125 \n",
       "L 59.974152 29.510525 \n",
       "L 60.398549 31.871602 \n",
       "L 60.819858 34.160311 \n",
       "L 61.23816 36.377523 \n",
       "L 61.653536 38.52414 \n",
       "L 62.066066 40.600988 \n",
       "L 62.475825 42.608891 \n",
       "L 62.88289 44.548634 \n",
       "L 63.287336 46.420985 \n",
       "L 63.689234 48.226687 \n",
       "L 64.088657 49.966439 \n",
       "L 64.485675 51.640946 \n",
       "L 64.880356 53.250863 \n",
       "L 65.27277 54.796844 \n",
       "L 65.66298 56.279495 \n",
       "L 66.051053 57.699424 \n",
       "L 66.437054 59.057205 \n",
       "L 66.821046 60.3534 \n",
       "L 67.203089 61.588535 \n",
       "L 67.583248 62.763133 \n",
       "L 67.961579 63.877685 \n",
       "L 68.338144 64.932666 \n",
       "L 68.713 65.928539 \n",
       "L 69.086204 66.865738 \n",
       "L 69.457815 67.744685 \n",
       "L 69.827887 68.565785 \n",
       "L 70.196475 69.329419 \n",
       "L 70.563635 70.035959 \n",
       "L 70.929419 70.685755 \n",
       "L 71.293881 71.27914 \n",
       "L 71.657073 71.816434 \n",
       "L 72.019046 72.297937 \n",
       "L 72.379853 72.723937 \n",
       "L 72.739544 73.094703 \n",
       "L 73.098168 73.41049 \n",
       "L 73.455774 73.671537 \n",
       "L 73.812413 73.87807 \n",
       "L 74.168133 74.030298 \n",
       "L 74.522982 74.128416 \n",
       "L 74.877007 74.172604 \n",
       "L 75.230255 74.163028 \n",
       "L 75.582775 74.099841 \n",
       "L 75.934612 73.983179 \n",
       "L 76.285812 73.813167 \n",
       "L 76.636421 73.589913 \n",
       "L 76.986485 73.313516 \n",
       "L 77.33605 72.984055 \n",
       "L 77.68516 72.601601 \n",
       "L 78.03386 72.166209 \n",
       "L 78.382195 71.677919 \n",
       "L 78.730209 71.136761 \n",
       "L 79.077947 70.542749 \n",
       "L 79.425452 69.895885 \n",
       "L 79.772769 69.196158 \n",
       "L 80.119941 68.443543 \n",
       "L 80.467011 67.638001 \n",
       "L 80.814025 66.779482 \n",
       "L 81.161024 65.86792 \n",
       "L 81.508054 64.903238 \n",
       "L 81.855157 63.885344 \n",
       "L 82.202377 62.814134 \n",
       "L 82.549756 61.689493 \n",
       "L 82.89734 60.511287 \n",
       "L 83.24517 59.279373 \n",
       "L 83.593292 57.993591 \n",
       "L 83.941749 56.65377 \n",
       "L 84.290584 55.259728 \n",
       "L 84.639841 53.811266 \n",
       "L 84.989565 52.308166 \n",
       "L 85.339799 50.750208 \n",
       "L 85.690588 49.137146 \n",
       "L 86.041977 47.468732 \n",
       "L 86.39401 45.744693 \n",
       "L 86.746734 43.964741 \n",
       "L 87.100191 42.128589 \n",
       "L 87.45443 40.235913 \n",
       "L 87.809494 38.286398 \n",
       "L 88.165431 36.27969 \n",
       "L 88.522285 34.215442 \n",
       "L 88.880105 32.093277 \n",
       "L 89.238938 29.9128 \n",
       "L 89.598831 27.67362 \n",
       "L 89.959832 25.375301 \n",
       "L 90.321989 23.017418 \n",
       "L 90.685352 20.599523 \n",
       "L 91.049971 18.121117 \n",
       "L 91.415894 15.581742 \n",
       "L 91.783171 12.98089 \n",
       "L 92.151855 10.31802 \n",
       "L 92.521997 7.592601 \n",
       "L 92.893647 4.804088 \n",
       "L 93.266861 1.951882 \n",
       "L 93.641689 -0.964596 \n",
       "L 93.64616 -1 \n",
       "\" clip-path=\"url(#p53818f802a)\" style=\"fill: none; stroke: #800080; stroke-width: 1.5\"/>\n",
       "    <path d=\"M 64.25116 3.488656 \n",
       "L 64.679192 6.309793 \n",
       "L 65.104022 9.051263 \n",
       "L 65.525737 11.71415 \n",
       "L 65.944424 14.299539 \n",
       "L 66.360169 16.808474 \n",
       "L 66.773052 19.241945 \n",
       "L 67.183156 21.600942 \n",
       "L 67.590559 23.886389 \n",
       "L 67.995341 26.099224 \n",
       "L 68.397577 28.240308 \n",
       "L 68.797341 30.310503 \n",
       "L 69.194707 32.310634 \n",
       "L 69.589748 34.241497 \n",
       "L 69.982532 36.10386 \n",
       "L 70.373129 37.898473 \n",
       "L 70.76161 39.626058 \n",
       "L 71.148037 41.287304 \n",
       "L 71.53248 42.882889 \n",
       "L 71.915 44.413455 \n",
       "L 72.295663 45.879631 \n",
       "L 72.674529 47.282013 \n",
       "L 73.051663 48.62119 \n",
       "L 73.427122 49.897714 \n",
       "L 73.800968 51.112128 \n",
       "L 74.173257 52.264944 \n",
       "L 74.544049 53.356658 \n",
       "L 74.9134 54.387757 \n",
       "L 75.281367 55.358688 \n",
       "L 75.648005 56.269896 \n",
       "L 76.013368 57.1218 \n",
       "L 76.377511 57.9148 \n",
       "L 76.740487 58.649286 \n",
       "L 77.102348 59.325619 \n",
       "L 77.463148 59.944149 \n",
       "L 77.822937 60.505209 \n",
       "L 78.181765 61.009113 \n",
       "L 78.539685 61.45616 \n",
       "L 78.896746 61.846635 \n",
       "L 79.252997 62.180799 \n",
       "L 79.608486 62.458909 \n",
       "L 79.963263 62.681193 \n",
       "L 80.317376 62.847873 \n",
       "L 80.670873 62.959154 \n",
       "L 81.023801 63.015224 \n",
       "L 81.376206 63.016256 \n",
       "L 81.728136 62.96241 \n",
       "L 82.079638 62.853828 \n",
       "L 82.430757 62.690643 \n",
       "L 82.781539 62.472969 \n",
       "L 83.13203 62.200908 \n",
       "L 83.482275 61.874545 \n",
       "L 83.83232 61.493952 \n",
       "L 84.18221 61.05919 \n",
       "L 84.531989 60.570305 \n",
       "L 84.881703 60.027324 \n",
       "L 85.231397 59.430264 \n",
       "L 85.581114 58.779131 \n",
       "L 85.930899 58.073913 \n",
       "L 86.280796 57.314586 \n",
       "L 86.630851 56.501111 \n",
       "L 86.981108 55.633435 \n",
       "L 87.33161 54.711497 \n",
       "L 87.682403 53.735211 \n",
       "L 88.03353 52.704489 \n",
       "L 88.385037 51.619221 \n",
       "L 88.736968 50.479291 \n",
       "L 89.089367 49.284558 \n",
       "L 89.442279 48.03488 \n",
       "L 89.79575 46.730086 \n",
       "L 90.149824 45.370007 \n",
       "L 90.504546 43.954452 \n",
       "L 90.859962 42.483212 \n",
       "L 91.216118 40.956068 \n",
       "L 91.573059 39.37279 \n",
       "L 91.930832 37.733128 \n",
       "L 92.289482 36.036821 \n",
       "L 92.649057 34.283588 \n",
       "L 93.009604 32.473136 \n",
       "L 93.371169 30.605164 \n",
       "L 93.733802 28.67934 \n",
       "L 94.097548 26.695331 \n",
       "L 94.462457 24.652784 \n",
       "L 94.828578 22.551326 \n",
       "L 95.195959 20.390577 \n",
       "L 95.564652 18.170126 \n",
       "L 95.934704 15.889564 \n",
       "L 96.306168 13.548452 \n",
       "L 96.679094 11.146339 \n",
       "L 97.053535 8.682755 \n",
       "L 97.429544 6.157195 \n",
       "L 97.807171 3.56919 \n",
       "L 98.186472 0.918195 \n",
       "L 98.455722 -1 \n",
       "\" clip-path=\"url(#p53818f802a)\" style=\"fill: none; stroke: #800080; stroke-width: 1.5\"/>\n",
       "    <path d=\"M 73.183501 -1 \n",
       "L 73.33041 -0.07287 \n",
       "L 73.730306 2.388943 \n",
       "L 74.127811 4.774231 \n",
       "L 74.522998 7.083996 \n",
       "L 74.915944 9.319148 \n",
       "L 75.306719 11.480613 \n",
       "L 75.695395 13.569269 \n",
       "L 76.082042 15.585942 \n",
       "L 76.466727 17.531465 \n",
       "L 76.84952 19.40663 \n",
       "L 77.230486 21.212205 \n",
       "L 77.609688 22.948912 \n",
       "L 77.987194 24.617479 \n",
       "L 78.363063 26.21859 \n",
       "L 78.737359 27.7529 \n",
       "L 79.110143 29.221055 \n",
       "L 79.481475 30.623668 \n",
       "L 79.851413 31.961334 \n",
       "L 80.220017 33.234617 \n",
       "L 80.587343 34.444071 \n",
       "L 80.953448 35.59023 \n",
       "L 81.318388 36.673587 \n",
       "L 81.682218 37.694632 \n",
       "L 82.044994 38.653832 \n",
       "L 82.406768 39.551634 \n",
       "L 82.767593 40.388461 \n",
       "L 83.127523 41.164724 \n",
       "L 83.48661 41.88081 \n",
       "L 83.844904 42.537086 \n",
       "L 84.202458 43.13391 \n",
       "L 84.559321 43.671616 \n",
       "L 84.915544 44.150517 \n",
       "L 85.271175 44.570913 \n",
       "L 85.626265 44.933092 \n",
       "L 85.980862 45.237315 \n",
       "L 86.335014 45.483832 \n",
       "L 86.68877 45.672877 \n",
       "L 87.042177 45.804671 \n",
       "L 87.395282 45.879407 \n",
       "L 87.748134 45.897274 \n",
       "L 88.100777 45.858444 \n",
       "L 88.453261 45.763067 \n",
       "L 88.80563 45.611284 \n",
       "L 89.157931 45.40322 \n",
       "L 89.51021 45.13898 \n",
       "L 89.862513 44.818661 \n",
       "L 90.214886 44.442338 \n",
       "L 90.567374 44.010078 \n",
       "L 90.920024 43.52193 \n",
       "L 91.27288 42.977926 \n",
       "L 91.62599 42.378088 \n",
       "L 91.979396 41.722424 \n",
       "L 92.333146 41.010916 \n",
       "L 92.687283 40.243551 \n",
       "L 93.041855 39.420287 \n",
       "L 93.396907 38.541069 \n",
       "L 93.752484 37.605831 \n",
       "L 94.108632 36.614496 \n",
       "L 94.465397 35.566963 \n",
       "L 94.822825 34.463122 \n",
       "L 95.180961 33.302851 \n",
       "L 95.539852 32.086013 \n",
       "L 95.899545 30.812447 \n",
       "L 96.260086 29.481987 \n",
       "L 96.621522 28.094448 \n",
       "L 96.9839 26.649639 \n",
       "L 97.347268 25.147338 \n",
       "L 97.711673 23.587319 \n",
       "L 98.077163 21.969343 \n",
       "L 98.443787 20.29314 \n",
       "L 98.811593 18.55845 \n",
       "L 99.18063 16.764978 \n",
       "L 99.550949 14.912411 \n",
       "L 99.922598 13.000435 \n",
       "L 100.295628 11.028712 \n",
       "L 100.67009 8.996888 \n",
       "L 101.046035 6.904587 \n",
       "L 101.423514 4.751429 \n",
       "L 101.80258 2.537015 \n",
       "L 102.183288 0.260906 \n",
       "L 102.3895 -1 \n",
       "\" clip-path=\"url(#p53818f802a)\" style=\"fill: none; stroke: #800080; stroke-width: 1.5\"/>\n",
       "    <path d=\"M 84.664175 -1 \n",
       "L 84.739198 -0.642619 \n",
       "L 85.109195 1.055471 \n",
       "L 85.477919 2.683502 \n",
       "L 85.84543 4.242163 \n",
       "L 86.211788 5.732124 \n",
       "L 86.577048 7.154007 \n",
       "L 86.941271 8.508451 \n",
       "L 87.30451 9.796017 \n",
       "L 87.666822 11.017305 \n",
       "L 88.028263 12.172842 \n",
       "L 88.388887 13.263146 \n",
       "L 88.748747 14.288743 \n",
       "L 89.107898 15.250102 \n",
       "L 89.46639 16.147678 \n",
       "L 89.824277 16.981915 \n",
       "L 90.181611 17.753233 \n",
       "L 90.538442 18.462026 \n",
       "L 90.894821 19.10868 \n",
       "L 91.250799 19.693562 \n",
       "L 91.606425 20.217002 \n",
       "L 91.961749 20.679331 \n",
       "L 92.316819 21.080854 \n",
       "L 92.671686 21.421852 \n",
       "L 93.026396 21.702602 \n",
       "L 93.381 21.923355 \n",
       "L 93.735543 22.084347 \n",
       "L 94.090075 22.185796 \n",
       "L 94.444643 22.227903 \n",
       "L 94.799295 22.210846 \n",
       "L 95.154076 22.134799 \n",
       "L 95.509035 21.999913 \n",
       "L 95.864219 21.806324 \n",
       "L 96.219674 21.554151 \n",
       "L 96.575447 21.24349 \n",
       "L 96.931585 20.874435 \n",
       "L 97.288134 20.447058 \n",
       "L 97.645142 19.961412 \n",
       "L 98.002654 19.41754 \n",
       "L 98.360719 18.815457 \n",
       "L 98.719381 18.155182 \n",
       "L 99.078688 17.436705 \n",
       "L 99.438687 16.660006 \n",
       "L 99.799425 15.825046 \n",
       "L 100.16095 14.931773 \n",
       "L 100.523307 13.980113 \n",
       "L 100.886546 12.969987 \n",
       "L 101.250713 11.901296 \n",
       "L 101.615857 10.773921 \n",
       "L 101.982025 9.587743 \n",
       "L 102.349266 8.342609 \n",
       "L 102.717628 7.038354 \n",
       "L 103.087162 5.674805 \n",
       "L 103.457914 4.251764 \n",
       "L 103.829936 2.769035 \n",
       "L 104.203277 1.226381 \n",
       "L 104.577987 -0.376421 \n",
       "L 104.719006 -1 \n",
       "\" clip-path=\"url(#p53818f802a)\" style=\"fill: none; stroke: #800080; stroke-width: 1.5\"/>\n",
       "    <path clip-path=\"url(#p53818f802a)\" style=\"fill: none; stroke: #800080; stroke-width: 1.5\"/>\n",
       "    <path clip-path=\"url(#p53818f802a)\" style=\"fill: none; stroke: #800080; stroke-width: 1.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.25343 5.543184 \n",
       "L 31.932437 7.025087 \n",
       "L 32.608692 8.4447 \n",
       "L 33.282294 9.802327 \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.613813 15.669363 \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.839966 21.909117 \n",
       "L 42.486088 22.41935 \n",
       "L 43.130915 22.869866 \n",
       "L 43.774531 23.260665 \n",
       "L 44.417027 23.591772 \n",
       "L 45.058486 23.863166 \n",
       "L 45.698994 24.074814 \n",
       "L 46.338638 24.226682 \n",
       "L 46.977504 24.318698 \n",
       "L 47.615678 24.350789 \n",
       "L 48.253245 24.322857 \n",
       "L 48.890292 24.234801 \n",
       "L 49.526905 24.086483 \n",
       "L 50.16317 23.877764 \n",
       "L 50.799172 23.608482 \n",
       "L 51.434998 23.278461 \n",
       "L 52.070735 22.887498 \n",
       "L 52.70647 22.435386 \n",
       "L 53.34229 21.921896 \n",
       "L 53.978283 21.346785 \n",
       "L 54.614536 20.709768 \n",
       "L 55.251139 20.010581 \n",
       "L 55.888179 19.248908 \n",
       "L 56.525747 18.424433 \n",
       "L 57.163932 17.536825 \n",
       "L 57.802825 16.585703 \n",
       "L 58.442518 15.57071 \n",
       "L 59.083101 14.491433 \n",
       "L 59.724669 13.347467 \n",
       "L 60.367314 12.138355 \n",
       "L 61.011131 10.863656 \n",
       "L 61.656215 9.522877 \n",
       "L 62.302662 8.115534 \n",
       "L 62.95057 6.641073 \n",
       "L 63.600036 5.098978 \n",
       "L 64.25116 3.488656 \n",
       "L 64.904042 1.809533 \n",
       "L 65.558785 0.06098 \n",
       "L 65.941911 -1 \n",
       "\" clip-path=\"url(#p53818f802a)\" 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.18151 29.510322 \n",
       "L 36.839333 30.939027 \n",
       "L 37.494718 32.308262 \n",
       "L 38.147757 33.618298 \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.380874 39.28873 \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.463613 45.354468 \n",
       "L 47.092919 45.854964 \n",
       "L 47.721162 46.298396 \n",
       "L 48.348422 46.684778 \n",
       "L 48.974784 47.014125 \n",
       "L 49.600327 47.286421 \n",
       "L 50.225134 47.501645 \n",
       "L 50.849287 47.659752 \n",
       "L 51.472869 47.760693 \n",
       "L 52.09596 47.804394 \n",
       "L 52.718643 47.790769 \n",
       "L 53.340998 47.719719 \n",
       "L 53.96311 47.591124 \n",
       "L 54.58506 47.404855 \n",
       "L 55.206929 47.160764 \n",
       "L 55.828801 46.858688 \n",
       "L 56.450758 46.49844 \n",
       "L 57.072884 46.079834 \n",
       "L 57.695262 45.602657 \n",
       "L 58.317976 45.066667 \n",
       "L 58.94111 44.471636 \n",
       "L 59.564749 43.817293 \n",
       "L 60.188978 43.103362 \n",
       "L 60.813883 42.329544 \n",
       "L 61.43955 41.495529 \n",
       "L 62.066066 40.600988 \n",
       "L 62.693519 39.64556 \n",
       "L 63.321996 38.628893 \n",
       "L 63.951588 37.550588 \n",
       "L 64.582383 36.410248 \n",
       "L 65.214473 35.207448 \n",
       "L 65.84795 33.941746 \n",
       "L 66.482904 32.612671 \n",
       "L 67.119431 31.219746 \n",
       "L 67.757623 29.762469 \n",
       "L 68.397577 28.240308 \n",
       "L 69.03939 26.652736 \n",
       "L 69.68316 24.99916 \n",
       "L 70.328986 23.279009 \n",
       "L 70.976968 21.491652 \n",
       "L 71.627208 19.636464 \n",
       "L 72.279809 17.7128 \n",
       "L 72.934876 15.719955 \n",
       "L 73.592515 13.657229 \n",
       "L 74.252835 11.523873 \n",
       "L 74.915944 9.319148 \n",
       "L 75.581954 7.042258 \n",
       "L 76.250978 4.692398 \n",
       "L 76.923132 2.268699 \n",
       "L 77.598531 -0.229678 \n",
       "L 77.801667 -1 \n",
       "\" clip-path=\"url(#p53818f802a)\" 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.690796 46.613791 \n",
       "L 41.331533 48.001617 \n",
       "L 41.970097 49.332088 \n",
       "L 42.606576 50.605452 \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.760651 56.123561 \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.728956 62.050966 \n",
       "L 51.344919 62.543174 \n",
       "L 51.960021 62.980312 \n",
       "L 52.574338 63.362396 \n",
       "L 53.187951 63.689438 \n",
       "L 53.800938 63.961424 \n",
       "L 54.413377 64.178335 \n",
       "L 55.025348 64.340135 \n",
       "L 55.636929 64.446773 \n",
       "L 56.248197 64.498182 \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.913693 63.641375 \n",
       "L 60.524995 63.30314 \n",
       "L 61.136622 62.908627 \n",
       "L 61.748653 62.45764 \n",
       "L 62.361169 61.949961 \n",
       "L 62.974252 61.385364 \n",
       "L 63.587983 60.763602 \n",
       "L 64.202446 60.084412 \n",
       "L 64.817723 59.347517 \n",
       "L 65.433897 58.552625 \n",
       "L 66.051053 57.699424 \n",
       "L 66.669276 56.787584 \n",
       "L 67.288651 55.816767 \n",
       "L 67.909264 54.786601 \n",
       "L 68.531203 53.696713 \n",
       "L 69.154555 52.546705 \n",
       "L 69.779411 51.336156 \n",
       "L 70.405858 50.064642 \n",
       "L 71.033988 48.731697 \n",
       "L 71.663891 47.336861 \n",
       "L 72.295663 45.879631 \n",
       "L 72.929395 44.359505 \n",
       "L 73.565183 42.775943 \n",
       "L 74.203125 41.128396 \n",
       "L 74.843317 39.416284 \n",
       "L 75.485857 37.639018 \n",
       "L 76.130847 35.795976 \n",
       "L 76.778388 33.886516 \n",
       "L 77.428583 31.909989 \n",
       "L 78.081538 29.86569 \n",
       "L 78.737359 27.7529 \n",
       "L 79.396153 25.570902 \n",
       "L 80.058031 23.318926 \n",
       "L 80.723106 20.996179 \n",
       "L 81.391489 18.601852 \n",
       "L 82.063298 16.135108 \n",
       "L 82.73865 13.595071 \n",
       "L 83.417663 10.98083 \n",
       "L 84.100464 8.291473 \n",
       "L 84.787172 5.526036 \n",
       "L 85.477919 2.683502 \n",
       "L 86.172829 -0.237102 \n",
       "L 86.350651 -1 \n",
       "\" clip-path=\"url(#p53818f802a)\" style=\"fill: none; stroke: #800080; stroke-width: 1.5\"/>\n",
       "    <path d=\"M 39.120105 42.746426 \n",
       "L 39.768622 44.620039 \n",
       "L 40.414425 46.434944 \n",
       "L 41.057599 48.191508 \n",
       "L 41.698235 49.89011 \n",
       "L 42.336422 51.531098 \n",
       "L 42.972244 53.114796 \n",
       "L 43.605787 54.641532 \n",
       "L 44.237136 56.111604 \n",
       "L 44.866377 57.5253 \n",
       "L 45.493594 58.8829 \n",
       "L 46.118866 60.18465 \n",
       "L 46.742278 61.430797 \n",
       "L 47.363913 62.621576 \n",
       "L 47.983848 63.757191 \n",
       "L 48.602165 64.837848 \n",
       "L 49.218946 65.863735 \n",
       "L 49.834267 66.835014 \n",
       "L 50.44821 67.751853 \n",
       "L 51.060851 68.614388 \n",
       "L 51.67227 69.42275 \n",
       "L 52.282543 70.177058 \n",
       "L 52.891751 70.877413 \n",
       "L 53.499968 71.523901 \n",
       "L 54.107273 72.1166 \n",
       "L 54.713741 72.655569 \n",
       "L 55.319449 73.140855 \n",
       "L 55.924475 73.572496 \n",
       "L 56.528893 73.950507 \n",
       "L 57.132782 74.274898 \n",
       "L 57.736216 74.545662 \n",
       "L 58.339272 74.762776 \n",
       "L 58.942027 74.926209 \n",
       "L 59.544556 75.035911 \n",
       "L 60.146936 75.091821 \n",
       "L 60.749244 75.093866 \n",
       "L 61.351556 75.041952 \n",
       "L 61.953949 74.935979 \n",
       "L 62.5565 74.775828 \n",
       "L 63.159285 74.561368 \n",
       "L 63.762384 74.292453 \n",
       "L 64.365872 73.968923 \n",
       "L 64.96983 73.590605 \n",
       "L 65.574335 73.157308 \n",
       "L 66.179466 72.668826 \n",
       "L 66.785302 72.124945 \n",
       "L 67.391925 71.525427 \n",
       "L 67.999413 70.870025 \n",
       "L 68.607848 70.158474 \n",
       "L 69.217312 69.390491 \n",
       "L 69.827887 68.565785 \n",
       "L 70.439656 67.684037 \n",
       "L 71.052702 66.744926 \n",
       "L 71.66711 65.748101 \n",
       "L 72.282965 64.693201 \n",
       "L 72.900353 63.57985 \n",
       "L 73.519363 62.407646 \n",
       "L 74.140079 61.176185 \n",
       "L 74.762592 59.885025 \n",
       "L 75.386991 58.533722 \n",
       "L 76.013368 57.1218 \n",
       "L 76.641815 55.648785 \n",
       "L 77.272424 54.114154 \n",
       "L 77.905291 52.517393 \n",
       "L 78.54051 50.857942 \n",
       "L 79.17818 49.135239 \n",
       "L 79.818396 47.348706 \n",
       "L 80.461262 45.497716 \n",
       "L 81.106876 43.581655 \n",
       "L 81.755344 41.599851 \n",
       "L 82.406768 39.551634 \n",
       "L 83.061254 37.436307 \n",
       "L 83.718911 35.253138 \n",
       "L 84.379849 33.001376 \n",
       "L 85.044178 30.680251 \n",
       "L 85.712014 28.288962 \n",
       "L 86.383471 25.826687 \n",
       "L 87.058666 23.292553 \n",
       "L 87.737721 20.685703 \n",
       "L 88.420756 18.005206 \n",
       "L 89.107898 15.250102 \n",
       "L 89.79927 12.419463 \n",
       "L 90.495006 9.51225 \n",
       "L 91.195233 6.527463 \n",
       "L 91.900089 3.464018 \n",
       "L 92.609712 0.320819 \n",
       "L 92.902432 -1 \n",
       "\" clip-path=\"url(#p53818f802a)\" style=\"fill: none; stroke: #800080; stroke-width: 1.5\"/>\n",
       "    <path d=\"M 43.134534 48.161781 \n",
       "L 43.770783 50.0054 \n",
       "L 44.404545 51.791379 \n",
       "L 45.0359 53.520076 \n",
       "L 45.664936 55.191852 \n",
       "L 46.29174 56.807052 \n",
       "L 46.916391 58.365987 \n",
       "L 47.538974 59.868974 \n",
       "L 48.159571 61.316303 \n",
       "L 48.778264 62.708256 \n",
       "L 49.395135 64.0451 \n",
       "L 50.01026 65.327078 \n",
       "L 50.623721 66.55443 \n",
       "L 51.235598 67.727382 \n",
       "L 51.845967 68.846133 \n",
       "L 52.454907 69.910882 \n",
       "L 53.062497 70.921812 \n",
       "L 53.668812 71.879084 \n",
       "L 54.27393 72.782856 \n",
       "L 54.877925 73.633262 \n",
       "L 55.480876 74.430431 \n",
       "L 56.082856 75.174476 \n",
       "L 56.683944 75.865498 \n",
       "L 57.284212 76.503579 \n",
       "L 57.883737 77.088796 \n",
       "L 58.482592 77.621206 \n",
       "L 59.080853 78.100855 \n",
       "L 59.678594 78.527779 \n",
       "L 60.275889 78.901995 \n",
       "L 60.872815 79.223512 \n",
       "L 61.469444 79.492323 \n",
       "L 62.065851 79.708408 \n",
       "L 62.662111 79.871734 \n",
       "L 63.258299 79.982256 \n",
       "L 63.854488 80.039915 \n",
       "L 64.450755 80.044637 \n",
       "L 65.047174 79.996336 \n",
       "L 65.643821 79.894912 \n",
       "L 66.240772 79.740251 \n",
       "L 66.8381 79.532227 \n",
       "L 67.435884 79.270698 \n",
       "L 68.034199 78.95551 \n",
       "L 68.633122 78.586494 \n",
       "L 69.232732 78.163467 \n",
       "L 69.833104 77.686229 \n",
       "L 70.434317 77.154573 \n",
       "L 71.03645 76.568269 \n",
       "L 71.639582 75.927077 \n",
       "L 72.243793 75.230742 \n",
       "L 72.849164 74.47899 \n",
       "L 73.455774 73.671537 \n",
       "L 74.063707 72.808078 \n",
       "L 74.673045 71.8883 \n",
       "L 75.28387 70.911864 \n",
       "L 75.896268 69.878419 \n",
       "L 76.510322 68.787604 \n",
       "L 77.12612 67.639032 \n",
       "L 77.743747 66.432304 \n",
       "L 78.363291 65.166999 \n",
       "L 78.984841 63.842689 \n",
       "L 79.608486 62.458909 \n",
       "L 80.234319 61.015199 \n",
       "L 80.862431 59.51106 \n",
       "L 81.492915 57.94599 \n",
       "L 82.125867 56.31945 \n",
       "L 82.761382 54.630901 \n",
       "L 83.399557 52.879774 \n",
       "L 84.040492 51.065468 \n",
       "L 84.684285 49.187389 \n",
       "L 85.331041 47.244888 \n",
       "L 85.980862 45.237315 \n",
       "L 86.633852 43.164 \n",
       "L 87.290119 41.024238 \n",
       "L 87.949773 38.8173 \n",
       "L 88.612922 36.542443 \n",
       "L 89.27968 34.198897 \n",
       "L 89.950161 31.785862 \n",
       "L 90.624482 29.302499 \n",
       "L 91.302763 26.747974 \n",
       "L 91.985122 24.1214 \n",
       "L 92.671686 21.421852 \n",
       "L 93.362576 18.648422 \n",
       "L 94.057926 15.800119 \n",
       "L 94.757861 12.875963 \n",
       "L 95.462517 9.874931 \n",
       "L 96.172033 6.795943 \n",
       "L 96.886545 3.637895 \n",
       "L 97.606195 0.399684 \n",
       "L 97.911862 -1 \n",
       "\" clip-path=\"url(#p53818f802a)\" style=\"fill: none; stroke: #800080; stroke-width: 1.5\"/>\n",
       "    <path d=\"M 46.917266 48.040506 \n",
       "L 47.54438 49.867327 \n",
       "L 48.1692 51.637059 \n",
       "L 48.791808 53.350054 \n",
       "L 49.412288 55.006666 \n",
       "L 50.030724 56.607233 \n",
       "L 50.647193 58.152061 \n",
       "L 51.261779 59.64146 \n",
       "L 51.874561 61.075717 \n",
       "L 52.485618 62.455106 \n",
       "L 53.095032 63.779892 \n",
       "L 53.702877 65.050312 \n",
       "L 54.309231 66.266602 \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.321344 71.543252 \n",
       "L 57.920366 72.438862 \n",
       "L 58.518428 73.28158 \n",
       "L 59.115605 74.071531 \n",
       "L 59.711973 74.808827 \n",
       "L 60.307606 75.493568 \n",
       "L 60.902576 76.125832 \n",
       "L 61.496959 76.705698 \n",
       "L 62.090827 77.233218 \n",
       "L 62.684253 77.708441 \n",
       "L 63.277312 78.1314 \n",
       "L 63.870075 78.502112 \n",
       "L 64.462619 78.820587 \n",
       "L 65.055015 79.086816 \n",
       "L 65.647335 79.300781 \n",
       "L 66.239655 79.462449 \n",
       "L 66.832049 79.571777 \n",
       "L 67.424589 79.628704 \n",
       "L 68.017351 79.633161 \n",
       "L 68.610407 79.58506 \n",
       "L 69.203833 79.484306 \n",
       "L 69.797703 79.330784 \n",
       "L 70.392092 79.124372 \n",
       "L 70.987075 78.864931 \n",
       "L 71.582728 78.552308 \n",
       "L 72.179128 78.186339 \n",
       "L 72.776351 77.766842 \n",
       "L 73.374473 77.293623 \n",
       "L 73.973573 76.766477 \n",
       "L 74.573728 76.185178 \n",
       "L 75.175018 75.549491 \n",
       "L 75.77752 74.859167 \n",
       "L 76.381316 74.113934 \n",
       "L 76.986485 73.313516 \n",
       "L 77.59311 72.457611 \n",
       "L 78.201272 71.545913 \n",
       "L 78.811053 70.57809 \n",
       "L 79.422538 69.553797 \n",
       "L 80.035812 68.472679 \n",
       "L 80.65096 67.334355 \n",
       "L 81.268067 66.138437 \n",
       "L 81.887222 64.884509 \n",
       "L 82.508513 63.57215 \n",
       "L 83.13203 62.200908 \n",
       "L 83.757863 60.770329 \n",
       "L 84.386104 59.279924 \n",
       "L 85.016848 57.729199 \n",
       "L 85.650187 56.117626 \n",
       "L 86.286219 54.444674 \n",
       "L 86.925039 52.70979 \n",
       "L 87.566747 50.912385 \n",
       "L 88.211443 49.051869 \n",
       "L 88.85923 47.127616 \n",
       "L 89.51021 45.13898 \n",
       "L 90.164487 43.085307 \n",
       "L 90.822169 40.965907 \n",
       "L 91.483366 38.780064 \n",
       "L 92.148187 36.52705 \n",
       "L 92.816745 34.206115 \n",
       "L 93.489154 31.816464 \n",
       "L 94.165531 29.357289 \n",
       "L 94.845997 26.827762 \n",
       "L 95.530669 24.227018 \n",
       "L 96.219674 21.554151 \n",
       "L 96.913134 18.808272 \n",
       "L 97.611183 15.988405 \n",
       "L 98.313945 13.093607 \n",
       "L 99.021558 10.122853 \n",
       "L 99.73416 7.075105 \n",
       "L 100.451885 3.949276 \n",
       "L 101.174879 0.744285 \n",
       "L 101.561617 -1 \n",
       "\" clip-path=\"url(#p53818f802a)\" style=\"fill: none; stroke: #800080; stroke-width: 1.5\"/>\n",
       "    <path d=\"M 50.521771 42.532742 \n",
       "L 51.142634 44.355263 \n",
       "L 51.761375 46.120757 \n",
       "L 52.378072 47.829572 \n",
       "L 52.99281 49.482063 \n",
       "L 53.60567 51.078564 \n",
       "L 54.216729 52.619379 \n",
       "L 54.826068 54.104817 \n",
       "L 55.433766 55.535161 \n",
       "L 56.0399 56.910685 \n",
       "L 56.64455 58.231651 \n",
       "L 57.247789 59.498295 \n",
       "L 57.849696 60.71085 \n",
       "L 58.450348 61.869537 \n",
       "L 59.049817 62.974551 \n",
       "L 59.648181 64.026084 \n",
       "L 60.245516 65.024316 \n",
       "L 60.841893 65.969403 \n",
       "L 61.437389 66.861499 \n",
       "L 62.032076 67.700735 \n",
       "L 62.626028 68.487236 \n",
       "L 63.219318 69.221113 \n",
       "L 63.812023 69.902463 \n",
       "L 64.404212 70.531367 \n",
       "L 64.99596 71.107898 \n",
       "L 65.587339 71.632113 \n",
       "L 66.178421 72.104055 \n",
       "L 66.769281 72.52376 \n",
       "L 67.35999 72.891244 \n",
       "L 67.950622 73.206516 \n",
       "L 68.54125 73.469566 \n",
       "L 69.131946 73.680377 \n",
       "L 69.722784 73.838916 \n",
       "L 70.313837 73.945138 \n",
       "L 70.905178 73.998984 \n",
       "L 71.496882 74.000383 \n",
       "L 72.089021 73.949249 \n",
       "L 72.681672 73.845485 \n",
       "L 73.274907 73.68898 \n",
       "L 73.868801 73.479609 \n",
       "L 74.46343 73.217233 \n",
       "L 75.05887 72.901702 \n",
       "L 75.655196 72.53285 \n",
       "L 76.252485 72.110498 \n",
       "L 76.850814 71.634451 \n",
       "L 77.45026 71.104505 \n",
       "L 78.050902 70.520435 \n",
       "L 78.652819 69.882008 \n",
       "L 79.256089 69.188974 \n",
       "L 79.860793 68.441064 \n",
       "L 80.467011 67.638001 \n",
       "L 81.074826 66.779487 \n",
       "L 81.684319 65.865215 \n",
       "L 82.295573 64.894856 \n",
       "L 82.908672 63.868065 \n",
       "L 83.523703 62.784491 \n",
       "L 84.14075 61.643753 \n",
       "L 84.759899 60.445464 \n",
       "L 85.38124 59.189213 \n",
       "L 86.004861 57.874579 \n",
       "L 86.630851 56.501111 \n",
       "L 87.259303 55.06836 \n",
       "L 87.890309 53.575837 \n",
       "L 88.523964 52.023053 \n",
       "L 89.160361 50.409482 \n",
       "L 89.799598 48.734598 \n",
       "L 90.441771 46.997846 \n",
       "L 91.086983 45.198639 \n",
       "L 91.735331 43.3364 \n",
       "L 92.386921 41.410493 \n",
       "L 93.041855 39.420287 \n",
       "L 93.70024 37.365126 \n",
       "L 94.362183 35.244326 \n",
       "L 95.027795 33.057175 \n",
       "L 95.697187 30.802949 \n",
       "L 96.370472 28.480898 \n",
       "L 97.047766 26.090243 \n",
       "L 97.729187 23.630167 \n",
       "L 98.414856 21.099857 \n",
       "L 99.104893 18.49845 \n",
       "L 99.799425 15.825046 \n",
       "L 100.498577 13.078761 \n",
       "L 101.202482 10.258632 \n",
       "L 101.911267 7.363704 \n",
       "L 102.625071 4.392982 \n",
       "L 103.344033 1.345417 \n",
       "L 103.887529 -1 \n",
       "\" clip-path=\"url(#p53818f802a)\" style=\"fill: none; stroke: #800080; stroke-width: 1.5\"/>\n",
       "    <path d=\"M 53.995571 31.650324 \n",
       "L 54.612906 33.480786 \n",
       "L 55.228271 35.253809 \n",
       "L 55.841743 36.969734 \n",
       "L 56.453405 38.628925 \n",
       "L 57.063339 40.23171 \n",
       "L 57.67162 41.778402 \n",
       "L 58.278328 43.269304 \n",
       "L 58.883541 44.704707 \n",
       "L 59.487337 46.084881 \n",
       "L 60.089795 47.410092 \n",
       "L 60.690988 48.680574 \n",
       "L 61.290992 49.896564 \n",
       "L 61.889886 51.058282 \n",
       "L 62.487741 52.165924 \n",
       "L 63.084634 53.219683 \n",
       "L 63.680641 54.219739 \n",
       "L 64.275832 55.166247 \n",
       "L 64.870285 56.059364 \n",
       "L 65.46407 56.89922 \n",
       "L 66.057263 57.68594 \n",
       "L 66.649936 58.419635 \n",
       "L 67.242164 59.100402 \n",
       "L 67.834017 59.728321 \n",
       "L 68.425572 60.303467 \n",
       "L 69.016899 60.825894 \n",
       "L 69.60807 61.295647 \n",
       "L 70.19916 61.712761 \n",
       "L 70.79024 62.077249 \n",
       "L 71.381386 62.389122 \n",
       "L 71.972668 62.648369 \n",
       "L 72.56416 62.854971 \n",
       "L 73.155935 63.008895 \n",
       "L 73.748069 63.110094 \n",
       "L 74.340632 63.158508 \n",
       "L 74.933701 63.154067 \n",
       "L 75.527349 63.096681 \n",
       "L 76.121651 62.986253 \n",
       "L 76.716681 62.822668 \n",
       "L 77.312515 62.605803 \n",
       "L 77.909229 62.335515 \n",
       "L 78.506898 62.011654 \n",
       "L 79.105599 61.63405 \n",
       "L 79.705411 61.202523 \n",
       "L 80.306409 60.716876 \n",
       "L 80.908672 60.176903 \n",
       "L 81.512279 59.582377 \n",
       "L 82.11731 58.933061 \n",
       "L 82.723845 58.228703 \n",
       "L 83.331964 57.469033 \n",
       "L 83.941749 56.65377 \n",
       "L 84.553283 55.782612 \n",
       "L 85.166649 54.855252 \n",
       "L 85.781931 53.871357 \n",
       "L 86.399214 52.830576 \n",
       "L 87.018584 51.732557 \n",
       "L 87.640129 50.576918 \n",
       "L 88.263935 49.363264 \n",
       "L 88.890093 48.091182 \n",
       "L 89.518692 46.760248 \n",
       "L 90.149824 45.370007 \n",
       "L 90.783581 43.920004 \n",
       "L 91.420059 42.40975 \n",
       "L 92.059351 40.838746 \n",
       "L 92.701555 39.206465 \n",
       "L 93.346769 37.512377 \n",
       "L 93.995091 35.755921 \n",
       "L 94.646625 33.936506 \n",
       "L 95.30147 32.053548 \n",
       "L 95.959735 30.106405 \n",
       "L 96.621522 28.094448 \n",
       "L 97.286941 26.017008 \n",
       "L 97.956101 23.873398 \n",
       "L 98.629115 21.662899 \n",
       "L 99.306094 19.384782 \n",
       "L 99.987157 17.038293 \n",
       "L 100.67242 14.622643 \n",
       "L 101.362003 12.137008 \n",
       "L 102.05603 9.58057 \n",
       "L 102.754624 6.95246 \n",
       "L 103.457914 4.251764 \n",
       "L 104.166027 1.477602 \n",
       "L 104.786229 -1 \n",
       "\" clip-path=\"url(#p53818f802a)\" style=\"fill: none; stroke: #800080; stroke-width: 1.5\"/>\n",
       "    <path d=\"M 57.382373 15.270699 \n",
       "L 57.998815 17.121526 \n",
       "L 58.613422 18.914008 \n",
       "L 59.226273 20.648494 \n",
       "L 59.837448 22.325347 \n",
       "L 60.447031 23.94491 \n",
       "L 61.055095 25.507494 \n",
       "L 61.661722 27.013409 \n",
       "L 62.26699 28.462949 \n",
       "L 62.870976 29.856393 \n",
       "L 63.473759 31.194002 \n",
       "L 64.075412 32.476026 \n",
       "L 64.676012 33.702693 \n",
       "L 65.275637 34.874234 \n",
       "L 65.874359 35.990843 \n",
       "L 66.472255 37.052719 \n",
       "L 67.069401 38.060043 \n",
       "L 67.665868 39.012973 \n",
       "L 68.261734 39.911666 \n",
       "L 68.85707 40.756255 \n",
       "L 69.45195 41.546865 \n",
       "L 70.046449 42.28361 \n",
       "L 70.640642 42.966589 \n",
       "L 71.234599 43.595876 \n",
       "L 71.828397 44.171552 \n",
       "L 72.422106 44.69367 \n",
       "L 73.015801 45.162275 \n",
       "L 73.609556 45.5774 \n",
       "L 74.203443 45.939059 \n",
       "L 74.797538 46.247261 \n",
       "L 75.391913 46.501994 \n",
       "L 75.986642 46.703237 \n",
       "L 76.581799 46.850956 \n",
       "L 77.17746 46.945102 \n",
       "L 77.773698 46.985613 \n",
       "L 78.370589 46.972415 \n",
       "L 78.968207 46.905417 \n",
       "L 79.566629 46.784518 \n",
       "L 80.16593 46.609602 \n",
       "L 80.766187 46.380539 \n",
       "L 81.367475 46.097185 \n",
       "L 81.969874 45.759383 \n",
       "L 82.573459 45.36696 \n",
       "L 83.178311 44.919733 \n",
       "L 83.784508 44.417498 \n",
       "L 84.392128 43.860043 \n",
       "L 85.001254 43.247139 \n",
       "L 85.611965 42.57854 \n",
       "L 86.224343 41.853987 \n",
       "L 86.83847 41.073208 \n",
       "L 87.45443 40.235913 \n",
       "L 88.072307 39.341794 \n",
       "L 88.692186 38.390535 \n",
       "L 89.314152 37.381791 \n",
       "L 89.938293 36.315215 \n",
       "L 90.564696 35.190436 \n",
       "L 91.193452 34.007062 \n",
       "L 91.824648 32.764701 \n",
       "L 92.458377 31.462917 \n",
       "L 93.09473 30.101286 \n",
       "L 93.733802 28.67934 \n",
       "L 94.375687 27.196611 \n",
       "L 95.020482 25.652601 \n",
       "L 95.668284 24.046799 \n",
       "L 96.319194 22.378668 \n",
       "L 96.97331 20.647663 \n",
       "L 97.630734 18.853207 \n",
       "L 98.291573 16.994706 \n",
       "L 98.955928 15.07156 \n",
       "L 99.623911 13.083117 \n",
       "L 100.295628 11.028712 \n",
       "L 100.971191 8.907682 \n",
       "L 101.650711 6.719317 \n",
       "L 102.334306 4.462885 \n",
       "L 103.022091 2.137639 \n",
       "L 103.714185 -0.257192 \n",
       "L 103.924058 -1 \n",
       "\" clip-path=\"url(#p53818f802a)\" style=\"fill: none; stroke: #800080; stroke-width: 1.5\"/>\n",
       "    <path d=\"M 62.714949 -1 \n",
       "L 63.186612 0.312096 \n",
       "L 63.79841 1.959419 \n",
       "L 64.408817 3.54839 \n",
       "L 65.017912 5.079307 \n",
       "L 65.625774 6.552487 \n",
       "L 66.232482 7.968204 \n",
       "L 66.838115 9.326739 \n",
       "L 67.442747 10.628335 \n",
       "L 68.046456 11.873239 \n",
       "L 68.64932 13.061673 \n",
       "L 69.251413 14.193854 \n",
       "L 69.852812 15.269971 \n",
       "L 70.453593 16.290215 \n",
       "L 71.05383 17.254746 \n",
       "L 71.653601 18.163731 \n",
       "L 72.252976 19.0173 \n",
       "L 72.852034 19.815577 \n",
       "L 73.450848 20.558682 \n",
       "L 74.049495 21.246717 \n",
       "L 74.648046 21.879758 \n",
       "L 75.246579 22.457885 \n",
       "L 75.845166 22.981151 \n",
       "L 76.443882 23.449602 \n",
       "L 77.042803 23.86327 \n",
       "L 77.642003 24.222165 \n",
       "L 78.241557 24.526301 \n",
       "L 78.841541 24.77566 \n",
       "L 79.442028 24.970221 \n",
       "L 80.043096 25.109944 \n",
       "L 80.644821 25.194781 \n",
       "L 81.247277 25.224666 \n",
       "L 81.850543 25.199518 \n",
       "L 82.454693 25.119244 \n",
       "L 83.059808 24.983737 \n",
       "L 83.665962 24.792878 \n",
       "L 84.273235 24.54653 \n",
       "L 84.881704 24.244545 \n",
       "L 85.49145 23.886752 \n",
       "L 86.102553 23.472981 \n",
       "L 86.715092 23.00304 \n",
       "L 87.329147 22.476705 \n",
       "L 87.944802 21.89377 \n",
       "L 88.562139 21.253989 \n",
       "L 89.181239 20.55711 \n",
       "L 89.802188 19.802863 \n",
       "L 90.42507 18.990964 \n",
       "L 91.049971 18.121117 \n",
       "L 91.676977 17.192992 \n",
       "L 92.306176 16.206271 \n",
       "L 92.937655 15.160593 \n",
       "L 93.571505 14.055598 \n",
       "L 94.207817 12.8909 \n",
       "L 94.846682 11.6661 \n",
       "L 95.488192 10.380772 \n",
       "L 96.132442 9.034486 \n",
       "L 96.779527 7.626787 \n",
       "L 97.429544 6.157195 \n",
       "L 98.082591 4.625234 \n",
       "L 98.738768 3.030371 \n",
       "L 99.398175 1.372089 \n",
       "L 100.060916 -0.350179 \n",
       "L 100.303189 -1 \n",
       "\" clip-path=\"url(#p53818f802a)\" style=\"fill: none; stroke: #800080; stroke-width: 1.5\"/>\n",
       "    <path clip-path=\"url(#p53818f802a)\" style=\"fill: none; stroke: #800080; stroke-width: 1.5\"/>\n",
       "   </g>\n",
       "  </g>\n",
       " </g>\n",
       " <defs>\n",
       "  <clipPath id=\"p53818f802a\">\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 = torch.meshgrid(torch.linspace(-2, 2, 101),\n",
    "                   torch.linspace(-2, 2, 101))\n",
    "\n",
    "z = x*torch.exp(- x**2 - y**2)\n",
    "\n",
    "# Compute approximating quadratic with gradient and Hessian at (1, 0)\n",
    "w = torch.exp(torch.tensor([-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": 22,
    "tab": [
     "pytorch"
    ]
   },
   "source": [
    "[Discussions](https://discuss.d2l.ai/t/1090)\n"
   ]
  }
 ],
 "metadata": {
  "language_info": {
   "name": "python"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}