diff options
Diffstat (limited to 'www/image-format-vs-repo-size.ipynb')
| -rw-r--r-- | www/image-format-vs-repo-size.ipynb | 1719 |
1 files changed, 1719 insertions, 0 deletions
diff --git a/www/image-format-vs-repo-size.ipynb b/www/image-format-vs-repo-size.ipynb new file mode 100644 index 0000000..47aaa58 --- /dev/null +++ b/www/image-format-vs-repo-size.ipynb @@ -0,0 +1,1719 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Image Format vs Fossil Repository Size\n", + "\n", + "## Prerequisites\n", + "\n", + "This notebook was originally developed with standalone [JupyterLab] and Python 2 but was later moved to JupyterLab under [Anaconda] with Python 3. Backporting to Python 2 may require manual adjustment. Getting it running under stock JupyterLab or plain-old-Jupyter should be straightforward for one familiar with the tools. We will assume you're following in my footsteps, using Anaconda.\n", + "\n", + "One of the reasons we switched to Anaconda is that it comes with all but one of this notebook's prerequisites, that last remaining one of which you install so:\n", + "\n", + " $ pip install wand\n", + "\n", + "That should be done in a shell where \"`pip`\" is the version that came with Anaconda. Otherwise, the package will likely end up in some *other* Python package tree, which Anaconda's Python kernel may not be smart enough to find on its own.\n", + "\n", + "Note that you do *not* use `conda` for this: as of this writing, [Wand] is not available in a form that installs via `conda`.\n", + "\n", + "This notebook was written and tested on a macOS system where `/tmp` exists. Other platforms may require adjustments to the scripts below.\n", + "\n", + "[Anaconda]: https://www.anaconda.com/distribution/\n", + "[JupyterLab]: https://github.com/jupyterlab/\n", + "[Wand]: http://wand-py.org/\n", + "\n", + "\n", + "## Running\n", + "\n", + "The next cell generates the test repositories. This takes about 3 seconds to run on my machine. If you have to uncomment the \"`sleep`\" call in the inner loop, this will go up to about 45 seconds.\n", + "\n", + "The next cell produces the bar chart from the collected data, all but instantaneously.\n", + "\n", + "This split allows you to generate the expensive experimental data in a single pass, then play as many games as you like with the generated data.\n", + "\n", + "\n", + "## Discussion\n", + "\n", + "That is kept in [a separate document](image-format-vs-repo-size.md) so we can share that document with Fossil's Markdown renderer." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Created test directory /tmp/image-format-vs-repo-size\n", + "Created ../test-jpeg.fossil for format JPEG.\n", + "Created ../test-bmp.fossil for format BMP.\n", + "Created ../test-tiff.fossil for format TIFF.\n", + "Created ../test-png.fossil for format PNG.\n", + "Experiment completed in 3.0627901554107666 seconds.\n" + ] + } + ], + "source": [ + "import os\n", + "import random\n", + "import subprocess\n", + "import time\n", + "\n", + "from wand.color import Color\n", + "from wand.drawing import Drawing\n", + "from wand.image import Image\n", + "\n", + "import pandas as pd\n", + "\n", + "size = 256\n", + "iterations = 10\n", + "start = time.time()\n", + "repo_sizes = []\n", + "fossil = '/usr/local/bin/fossil'\n", + "\n", + "if not os.path.isfile(fossil): raise RuntimeError(\"No such executable \" + fossil)\n", + "if not os.access(fossil, os.X_OK): raise RuntimeError(\"Cannot execute \" + fossil)\n", + "\n", + "tdir = os.path.join('/tmp', 'image-format-vs-repo-size')\n", + "if not os.path.isdir(tdir): os.mkdir(tdir, 0o700)\n", + "print(\"Created test directory \" + tdir)\n", + " \n", + "formats = ['JPEG', 'BMP', 'TIFF', 'PNG']\n", + "for f in formats:\n", + " ext = f.lower()\n", + " wdir = os.path.join(tdir, 'work-' + ext)\n", + " if not os.path.isdir(wdir): os.mkdir(wdir, 0o700)\n", + " os.chdir(wdir)\n", + " repo = '../test-' + ext + '.fossil'\n", + " ifn = 'test.' + ext\n", + " ipath = os.path.join(wdir, ifn)\n", + " rs = []\n", + " \n", + " def add_repo_size():\n", + " rs.append(os.path.getsize(repo) / 1024.0 / 1024.0)\n", + " \n", + " def set_repo_page_size(n):\n", + " subprocess.run([\n", + " fossil,\n", + " 'rebuild',\n", + " '--compress',\n", + " '--pagesize',\n", + " str(n),\n", + " '--vacuum'\n", + " ])\n", + "\n", + " try:\n", + " # Create test repo\n", + " subprocess.run([fossil, 'init', repo])\n", + " subprocess.run([fossil, 'open', repo])\n", + " subprocess.run([fossil, 'set', 'binary-glob', \"*.{0}\".format(ext)])\n", + " set_repo_page_size(512) # minimum\n", + " add_repo_size()\n", + " set_repo_page_size(8192) # default\n", + " print(\"Created \" + repo + \" for format \" + f + \".\")\n", + "\n", + " # Create test image and add it to the repo\n", + " img = Image(width = size, height = size, depth = 8,\n", + " background = 'white')\n", + " img.alpha_channel = 'remove'\n", + " img.evaluate('gaussiannoise', 1.0)\n", + " img.save(filename = ipath)\n", + " subprocess.run([fossil, 'add', ifn])\n", + " subprocess.run([fossil, 'ci', '-m', 'initial'])\n", + " #print(\"Added initial \" + f + \" image.\")\n", + " add_repo_size()\n", + "\n", + " # Change a random pixel to a random RGB value and check it in\n", + " # $iterations times.\n", + " for i in range(iterations - 1):\n", + " with Drawing() as draw:\n", + " x = random.randint(0, size - 1)\n", + " y = random.randint(0, size - 1)\n", + "\n", + " r = random.randint(0, 255)\n", + " g = random.randint(0, 255)\n", + " b = random.randint(0, 255)\n", + " \n", + " draw.fill_color = Color('rgb({0},{1},{2})'.format(\n", + " r, g, b\n", + " ))\n", + " draw.color(x, y, 'point')\n", + " draw(img)\n", + " img.save(filename = ipath)\n", + " \n", + " # You might need to uncomment the next line if you find that\n", + " # the repo size doesn't change as expected. In some versions\n", + " # of Wand (or is it the ImageMagick underneath?) we have seen\n", + " # what appear to be asynchronous saves, with a zero-length file\n", + " # here if you don't wait for the save to complete.\n", + " #time.sleep(1.0)\n", + " \n", + " subprocess.run([fossil, 'ci', '-m', '\"change {0} step {1}'.format(\n", + " f, i\n", + " )])\n", + " add_repo_size()\n", + " \n", + " # Repo complete for this format\n", + " repo_sizes.append(pd.Series(rs, name=f))\n", + "\n", + " finally:\n", + " if os.path.exists(ipath): os.remove(ipath)\n", + " if os.path.exists(tdir):\n", + " if os.path.isfile(repo):\n", + " subprocess.run([fossil, 'close', '-f'])\n", + " os.unlink(repo)\n", + " os.chdir(tdir);\n", + " os.rmdir(wdir)\n", + " if os.path.exists(repo): os.remove(repo)\n", + " \n", + "print(\"Experiment completed in \" + str(time.time() - start) + \" seconds.\")" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "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", + "<!-- Created with matplotlib (https://matplotlib.org/) -->\n", + "<svg height=\"265.243125pt\" version=\"1.1\" viewBox=\"0 0 385.78125 265.243125\" width=\"385.78125pt\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n", + " <defs>\n", + " <style type=\"text/css\">\n", + "*{stroke-linecap:butt;stroke-linejoin:round;}\n", + " </style>\n", + " </defs>\n", + " <g id=\"figure_1\">\n", + " <g id=\"patch_1\">\n", + " <path d=\"M 0 265.243125 \n", + "L 385.78125 265.243125 \n", + "L 385.78125 0 \n", + "L 0 0 \n", + "z\n", + "\" style=\"fill:none;\"/>\n", + " </g>\n", + " <g id=\"axes_1\">\n", + " <g id=\"patch_2\">\n", + " <path d=\"M 43.78125 224.64 \n", + "L 378.58125 224.64 \n", + "L 378.58125 7.2 \n", + "L 43.78125 7.2 \n", + "z\n", + "\" style=\"fill:#ffffff;\"/>\n", + " </g>\n", + " <g id=\"patch_3\">\n", + " <path clip-path=\"url(#p70301a0bed)\" d=\"M 51.907464 224.64 \n", + "L 58.408434 224.64 \n", + "L 58.408434 138.354286 \n", + "L 51.907464 138.354286 \n", + "z\n", + "\" style=\"fill:#3b4cc0;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;\"/>\n", + " </g>\n", + " <g id=\"patch_4\">\n", + " <path clip-path=\"url(#p70301a0bed)\" d=\"M 84.412318 224.64 \n", + "L 90.913289 224.64 \n", + "L 90.913289 126.849524 \n", + "L 84.412318 126.849524 \n", + "z\n", + "\" style=\"fill:#3b4cc0;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;\"/>\n", + " </g>\n", + " <g id=\"patch_5\">\n", + " <path clip-path=\"url(#p70301a0bed)\" d=\"M 116.917172 224.64 \n", + "L 123.418143 224.64 \n", + "L 123.418143 118.220952 \n", + "L 116.917172 118.220952 \n", + "z\n", + "\" style=\"fill:#3b4cc0;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;\"/>\n", + " </g>\n", + " <g id=\"patch_6\">\n", + " <path clip-path=\"url(#p70301a0bed)\" d=\"M 149.422027 224.64 \n", + "L 155.922998 224.64 \n", + "L 155.922998 112.468571 \n", + "L 149.422027 112.468571 \n", + "z\n", + "\" style=\"fill:#3b4cc0;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;\"/>\n", + " </g>\n", + " <g id=\"patch_7\">\n", + " <path clip-path=\"url(#p70301a0bed)\" d=\"M 181.926881 224.64 \n", + "L 188.427852 224.64 \n", + "L 188.427852 109.592381 \n", + "L 181.926881 109.592381 \n", + "z\n", + "\" style=\"fill:#3b4cc0;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;\"/>\n", + " </g>\n", + " <g id=\"patch_8\">\n", + " <path clip-path=\"url(#p70301a0bed)\" d=\"M 214.431735 224.64 \n", + "L 220.932706 224.64 \n", + "L 220.932706 103.84 \n", + "L 214.431735 103.84 \n", + "z\n", + "\" style=\"fill:#3b4cc0;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;\"/>\n", + " </g>\n", + " <g id=\"patch_9\">\n", + " <path clip-path=\"url(#p70301a0bed)\" d=\"M 246.93659 224.64 \n", + "L 253.437561 224.64 \n", + "L 253.437561 98.087619 \n", + "L 246.93659 98.087619 \n", + "z\n", + "\" style=\"fill:#3b4cc0;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;\"/>\n", + " </g>\n", + " <g id=\"patch_10\">\n", + " <path clip-path=\"url(#p70301a0bed)\" d=\"M 279.441444 224.64 \n", + "L 285.942415 224.64 \n", + "L 285.942415 98.087619 \n", + "L 279.441444 98.087619 \n", + "z\n", + "\" style=\"fill:#3b4cc0;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;\"/>\n", + " </g>\n", + " <g id=\"patch_11\">\n", + " <path clip-path=\"url(#p70301a0bed)\" d=\"M 311.946299 224.64 \n", + "L 318.447269 224.64 \n", + "L 318.447269 82.268571 \n", + "L 311.946299 82.268571 \n", + "z\n", + "\" style=\"fill:#3b4cc0;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;\"/>\n", + " </g>\n", + " <g id=\"patch_12\">\n", + " <path clip-path=\"url(#p70301a0bed)\" d=\"M 344.451153 224.64 \n", + "L 350.952124 224.64 \n", + "L 350.952124 77.954286 \n", + "L 344.451153 77.954286 \n", + "z\n", + "\" style=\"fill:#3b4cc0;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;\"/>\n", + " </g>\n", + " <g id=\"patch_13\">\n", + " <path clip-path=\"url(#p70301a0bed)\" d=\"M 58.408434 224.64 \n", + "L 64.909405 224.64 \n", + "L 64.909405 125.411429 \n", + "L 58.408434 125.411429 \n", + "z\n", + "\" style=\"fill:#aac7fd;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;\"/>\n", + " </g>\n", + " <g id=\"patch_14\">\n", + " <path clip-path=\"url(#p70301a0bed)\" d=\"M 90.913289 224.64 \n", + "L 97.41426 224.64 \n", + "L 97.41426 105.278095 \n", + "L 90.913289 105.278095 \n", + "z\n", + "\" style=\"fill:#aac7fd;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;\"/>\n", + " </g>\n", + " <g id=\"patch_15\">\n", + " <path clip-path=\"url(#p70301a0bed)\" d=\"M 123.418143 224.64 \n", + "L 129.919114 224.64 \n", + "L 129.919114 105.278095 \n", + "L 123.418143 105.278095 \n", + "z\n", + "\" style=\"fill:#aac7fd;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;\"/>\n", + " </g>\n", + " <g id=\"patch_16\">\n", + " <path clip-path=\"url(#p70301a0bed)\" d=\"M 155.922998 224.64 \n", + "L 162.423968 224.64 \n", + "L 162.423968 105.278095 \n", + "L 155.922998 105.278095 \n", + "z\n", + "\" style=\"fill:#aac7fd;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;\"/>\n", + " </g>\n", + " <g id=\"patch_17\">\n", + " <path clip-path=\"url(#p70301a0bed)\" d=\"M 188.427852 224.64 \n", + "L 194.928823 224.64 \n", + "L 194.928823 105.278095 \n", + "L 188.427852 105.278095 \n", + "z\n", + "\" style=\"fill:#aac7fd;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;\"/>\n", + " </g>\n", + " <g id=\"patch_18\">\n", + " <path clip-path=\"url(#p70301a0bed)\" d=\"M 220.932706 224.64 \n", + "L 227.433677 224.64 \n", + "L 227.433677 105.278095 \n", + "L 220.932706 105.278095 \n", + "z\n", + "\" style=\"fill:#aac7fd;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;\"/>\n", + " </g>\n", + " <g id=\"patch_19\">\n", + " <path clip-path=\"url(#p70301a0bed)\" d=\"M 253.437561 224.64 \n", + "L 259.938532 224.64 \n", + "L 259.938532 105.278095 \n", + "L 253.437561 105.278095 \n", + "z\n", + "\" style=\"fill:#aac7fd;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;\"/>\n", + " </g>\n", + " <g id=\"patch_20\">\n", + " <path clip-path=\"url(#p70301a0bed)\" d=\"M 285.942415 224.64 \n", + "L 292.443386 224.64 \n", + "L 292.443386 105.278095 \n", + "L 285.942415 105.278095 \n", + "z\n", + "\" style=\"fill:#aac7fd;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;\"/>\n", + " </g>\n", + " <g id=\"patch_21\">\n", + " <path clip-path=\"url(#p70301a0bed)\" d=\"M 318.447269 224.64 \n", + "L 324.94824 224.64 \n", + "L 324.94824 105.278095 \n", + "L 318.447269 105.278095 \n", + "z\n", + "\" style=\"fill:#aac7fd;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;\"/>\n", + " </g>\n", + " <g id=\"patch_22\">\n", + " <path clip-path=\"url(#p70301a0bed)\" d=\"M 350.952124 224.64 \n", + "L 357.453095 224.64 \n", + "L 357.453095 105.278095 \n", + "L 350.952124 105.278095 \n", + "z\n", + "\" style=\"fill:#aac7fd;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;\"/>\n", + " </g>\n", + " <g id=\"patch_23\">\n", + " <path clip-path=\"url(#p70301a0bed)\" d=\"M 64.909405 224.64 \n", + "L 71.410376 224.64 \n", + "L 71.410376 128.287619 \n", + "L 64.909405 128.287619 \n", + "z\n", + "\" style=\"fill:#f7b89c;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;\"/>\n", + " </g>\n", + " <g id=\"patch_24\">\n", + " <path clip-path=\"url(#p70301a0bed)\" d=\"M 97.41426 224.64 \n", + "L 103.915231 224.64 \n", + "L 103.915231 108.154286 \n", + "L 97.41426 108.154286 \n", + "z\n", + "\" style=\"fill:#f7b89c;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;\"/>\n", + " </g>\n", + " <g id=\"patch_25\">\n", + " <path clip-path=\"url(#p70301a0bed)\" d=\"M 129.919114 224.64 \n", + "L 136.420085 224.64 \n", + "L 136.420085 108.154286 \n", + "L 129.919114 108.154286 \n", + "z\n", + "\" style=\"fill:#f7b89c;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;\"/>\n", + " </g>\n", + " <g id=\"patch_26\">\n", + " <path clip-path=\"url(#p70301a0bed)\" d=\"M 162.423968 224.64 \n", + "L 168.924939 224.64 \n", + "L 168.924939 108.154286 \n", + "L 162.423968 108.154286 \n", + "z\n", + "\" style=\"fill:#f7b89c;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;\"/>\n", + " </g>\n", + " <g id=\"patch_27\">\n", + " <path clip-path=\"url(#p70301a0bed)\" d=\"M 194.928823 224.64 \n", + "L 201.429794 224.64 \n", + "L 201.429794 108.154286 \n", + "L 194.928823 108.154286 \n", + "z\n", + "\" style=\"fill:#f7b89c;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;\"/>\n", + " </g>\n", + " <g id=\"patch_28\">\n", + " <path clip-path=\"url(#p70301a0bed)\" d=\"M 227.433677 224.64 \n", + "L 233.934648 224.64 \n", + "L 233.934648 108.154286 \n", + "L 227.433677 108.154286 \n", + "z\n", + "\" style=\"fill:#f7b89c;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;\"/>\n", + " </g>\n", + " <g id=\"patch_29\">\n", + " <path clip-path=\"url(#p70301a0bed)\" d=\"M 259.938532 224.64 \n", + "L 266.439502 224.64 \n", + "L 266.439502 108.154286 \n", + "L 259.938532 108.154286 \n", + "z\n", + "\" style=\"fill:#f7b89c;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;\"/>\n", + " </g>\n", + " <g id=\"patch_30\">\n", + " <path clip-path=\"url(#p70301a0bed)\" d=\"M 292.443386 224.64 \n", + "L 298.944357 224.64 \n", + "L 298.944357 108.154286 \n", + "L 292.443386 108.154286 \n", + "z\n", + "\" style=\"fill:#f7b89c;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;\"/>\n", + " </g>\n", + " <g id=\"patch_31\">\n", + " <path clip-path=\"url(#p70301a0bed)\" d=\"M 324.94824 224.64 \n", + "L 331.449211 224.64 \n", + "L 331.449211 108.154286 \n", + "L 324.94824 108.154286 \n", + "z\n", + "\" style=\"fill:#f7b89c;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;\"/>\n", + " </g>\n", + " <g id=\"patch_32\">\n", + " <path clip-path=\"url(#p70301a0bed)\" d=\"M 357.453095 224.64 \n", + "L 363.954066 224.64 \n", + "L 363.954066 108.154286 \n", + "L 357.453095 108.154286 \n", + "z\n", + "\" style=\"fill:#f7b89c;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;\"/>\n", + " </g>\n", + " <g id=\"patch_33\">\n", + " <path clip-path=\"url(#p70301a0bed)\" d=\"M 71.410376 224.64 \n", + "L 77.911347 224.64 \n", + "L 77.911347 129.725714 \n", + "L 71.410376 129.725714 \n", + "z\n", + "\" style=\"fill:#b40426;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;\"/>\n", + " </g>\n", + " <g id=\"patch_34\">\n", + " <path clip-path=\"url(#p70301a0bed)\" d=\"M 103.915231 224.64 \n", + "L 110.416201 224.64 \n", + "L 110.416201 111.030476 \n", + "L 103.915231 111.030476 \n", + "z\n", + "\" style=\"fill:#b40426;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;\"/>\n", + " </g>\n", + " <g id=\"patch_35\">\n", + " <path clip-path=\"url(#p70301a0bed)\" d=\"M 136.420085 224.64 \n", + "L 142.921056 224.64 \n", + "L 142.921056 80.830476 \n", + "L 136.420085 80.830476 \n", + "z\n", + "\" style=\"fill:#b40426;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;\"/>\n", + " </g>\n", + " <g id=\"patch_36\">\n", + " <path clip-path=\"url(#p70301a0bed)\" d=\"M 168.924939 224.64 \n", + "L 175.42591 224.64 \n", + "L 175.42591 75.078095 \n", + "L 168.924939 75.078095 \n", + "z\n", + "\" style=\"fill:#b40426;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;\"/>\n", + " </g>\n", + " <g id=\"patch_37\">\n", + " <path clip-path=\"url(#p70301a0bed)\" d=\"M 201.429794 224.64 \n", + "L 207.930765 224.64 \n", + "L 207.930765 70.76381 \n", + "L 201.429794 70.76381 \n", + "z\n", + "\" style=\"fill:#b40426;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;\"/>\n", + " </g>\n", + " <g id=\"patch_38\">\n", + " <path clip-path=\"url(#p70301a0bed)\" d=\"M 233.934648 224.64 \n", + "L 240.435619 224.64 \n", + "L 240.435619 56.382857 \n", + "L 233.934648 56.382857 \n", + "z\n", + "\" style=\"fill:#b40426;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;\"/>\n", + " </g>\n", + " <g id=\"patch_39\">\n", + " <path clip-path=\"url(#p70301a0bed)\" d=\"M 266.439502 224.64 \n", + "L 272.940473 224.64 \n", + "L 272.940473 40.56381 \n", + "L 266.439502 40.56381 \n", + "z\n", + "\" style=\"fill:#b40426;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;\"/>\n", + " </g>\n", + " <g id=\"patch_40\">\n", + " <path clip-path=\"url(#p70301a0bed)\" d=\"M 298.944357 224.64 \n", + "L 305.445328 224.64 \n", + "L 305.445328 30.497143 \n", + "L 298.944357 30.497143 \n", + "z\n", + "\" style=\"fill:#b40426;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;\"/>\n", + " </g>\n", + " <g id=\"patch_41\">\n", + " <path clip-path=\"url(#p70301a0bed)\" d=\"M 331.449211 224.64 \n", + "L 337.950182 224.64 \n", + "L 337.950182 26.182857 \n", + "L 331.449211 26.182857 \n", + "z\n", + "\" style=\"fill:#b40426;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;\"/>\n", + " </g>\n", + " <g id=\"patch_42\">\n", + " <path clip-path=\"url(#p70301a0bed)\" d=\"M 363.954066 224.64 \n", + "L 370.455036 224.64 \n", + "L 370.455036 17.554286 \n", + "L 363.954066 17.554286 \n", + "z\n", + "\" style=\"fill:#b40426;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;\"/>\n", + " </g>\n", + " <g id=\"matplotlib.axis_1\">\n", + " <g id=\"xtick_1\">\n", + " <g id=\"line2d_1\">\n", + " <defs>\n", + " <path d=\"M 0 0 \n", + "L 0 3.5 \n", + "\" id=\"m639e59548b\" style=\"stroke:#000000;stroke-width:0.8;\"/>\n", + " </defs>\n", + " <g>\n", + " <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"64.909405\" xlink:href=\"#m639e59548b\" y=\"224.64\"/>\n", + " </g>\n", + " </g>\n", + " <g id=\"text_1\">\n", + " <!-- 1 -->\n", + " <defs>\n", + " <path d=\"M 12.40625 8.296875 \n", + "L 28.515625 8.296875 \n", + "L 28.515625 63.921875 \n", + "L 10.984375 60.40625 \n", + "L 10.984375 69.390625 \n", + "L 28.421875 72.90625 \n", + "L 38.28125 72.90625 \n", + "L 38.28125 8.296875 \n", + "L 54.390625 8.296875 \n", + "L 54.390625 0 \n", + "L 12.40625 0 \n", + "z\n", + "\" id=\"DejaVuSans-49\"/>\n", + " </defs>\n", + " <g transform=\"translate(67.66878 238.0025)rotate(-90)scale(0.1 -0.1)\">\n", + " <use xlink:href=\"#DejaVuSans-49\"/>\n", + " </g>\n", + " </g>\n", + " </g>\n", + " <g id=\"xtick_2\">\n", + " <g id=\"line2d_2\">\n", + " <g>\n", + " <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"97.41426\" xlink:href=\"#m639e59548b\" y=\"224.64\"/>\n", + " </g>\n", + " </g>\n", + " <g id=\"text_2\">\n", + " <!-- 2 -->\n", + " <defs>\n", + " <path d=\"M 19.1875 8.296875 \n", + "L 53.609375 8.296875 \n", + "L 53.609375 0 \n", + "L 7.328125 0 \n", + "L 7.328125 8.296875 \n", + "Q 12.9375 14.109375 22.625 23.890625 \n", + "Q 32.328125 33.6875 34.8125 36.53125 \n", + "Q 39.546875 41.84375 41.421875 45.53125 \n", + "Q 43.3125 49.21875 43.3125 52.78125 \n", + "Q 43.3125 58.59375 39.234375 62.25 \n", + "Q 35.15625 65.921875 28.609375 65.921875 \n", + "Q 23.96875 65.921875 18.8125 64.3125 \n", + "Q 13.671875 62.703125 7.8125 59.421875 \n", + "L 7.8125 69.390625 \n", + "Q 13.765625 71.78125 18.9375 73 \n", + "Q 24.125 74.21875 28.421875 74.21875 \n", + "Q 39.75 74.21875 46.484375 68.546875 \n", + "Q 53.21875 62.890625 53.21875 53.421875 \n", + "Q 53.21875 48.921875 51.53125 44.890625 \n", + "Q 49.859375 40.875 45.40625 35.40625 \n", + "Q 44.1875 33.984375 37.640625 27.21875 \n", + "Q 31.109375 20.453125 19.1875 8.296875 \n", + "z\n", + "\" id=\"DejaVuSans-50\"/>\n", + " </defs>\n", + " <g transform=\"translate(100.173635 238.0025)rotate(-90)scale(0.1 -0.1)\">\n", + " <use xlink:href=\"#DejaVuSans-50\"/>\n", + " </g>\n", + " </g>\n", + " </g>\n", + " <g id=\"xtick_3\">\n", + " <g id=\"line2d_3\">\n", + " <g>\n", + " <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"129.919114\" xlink:href=\"#m639e59548b\" y=\"224.64\"/>\n", + " </g>\n", + " </g>\n", + " <g id=\"text_3\">\n", + " <!-- 3 -->\n", + " <defs>\n", + " <path d=\"M 40.578125 39.3125 \n", + "Q 47.65625 37.796875 51.625 33 \n", + "Q 55.609375 28.21875 55.609375 21.1875 \n", + "Q 55.609375 10.40625 48.1875 4.484375 \n", + "Q 40.765625 -1.421875 27.09375 -1.421875 \n", + "Q 22.515625 -1.421875 17.65625 -0.515625 \n", + "Q 12.796875 0.390625 7.625 2.203125 \n", + "L 7.625 11.71875 \n", + "Q 11.71875 9.328125 16.59375 8.109375 \n", + "Q 21.484375 6.890625 26.8125 6.890625 \n", + "Q 36.078125 6.890625 40.9375 10.546875 \n", + "Q 45.796875 14.203125 45.796875 21.1875 \n", + "Q 45.796875 27.640625 41.28125 31.265625 \n", + "Q 36.765625 34.90625 28.71875 34.90625 \n", + "L 20.21875 34.90625 \n", + "L 20.21875 43.015625 \n", + "L 29.109375 43.015625 \n", + "Q 36.375 43.015625 40.234375 45.921875 \n", + "Q 44.09375 48.828125 44.09375 54.296875 \n", + "Q 44.09375 59.90625 40.109375 62.90625 \n", + "Q 36.140625 65.921875 28.71875 65.921875 \n", + "Q 24.65625 65.921875 20.015625 65.03125 \n", + "Q 15.375 64.15625 9.8125 62.3125 \n", + "L 9.8125 71.09375 \n", + "Q 15.4375 72.65625 20.34375 73.4375 \n", + "Q 25.25 74.21875 29.59375 74.21875 \n", + "Q 40.828125 74.21875 47.359375 69.109375 \n", + "Q 53.90625 64.015625 53.90625 55.328125 \n", + "Q 53.90625 49.265625 50.4375 45.09375 \n", + "Q 46.96875 40.921875 40.578125 39.3125 \n", + "z\n", + "\" id=\"DejaVuSans-51\"/>\n", + " </defs>\n", + " <g transform=\"translate(132.678489 238.0025)rotate(-90)scale(0.1 -0.1)\">\n", + " <use xlink:href=\"#DejaVuSans-51\"/>\n", + " </g>\n", + " </g>\n", + " </g>\n", + " <g id=\"xtick_4\">\n", + " <g id=\"line2d_4\">\n", + " <g>\n", + " <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"162.423968\" xlink:href=\"#m639e59548b\" y=\"224.64\"/>\n", + " </g>\n", + " </g>\n", + " <g id=\"text_4\">\n", + " <!-- 4 -->\n", + " <defs>\n", + " <path d=\"M 37.796875 64.3125 \n", + "L 12.890625 25.390625 \n", + "L 37.796875 25.390625 \n", + "z\n", + "M 35.203125 72.90625 \n", + "L 47.609375 72.90625 \n", + "L 47.609375 25.390625 \n", + "L 58.015625 25.390625 \n", + "L 58.015625 17.1875 \n", + "L 47.609375 17.1875 \n", + "L 47.609375 0 \n", + "L 37.796875 0 \n", + "L 37.796875 17.1875 \n", + "L 4.890625 17.1875 \n", + "L 4.890625 26.703125 \n", + "z\n", + "\" id=\"DejaVuSans-52\"/>\n", + " </defs>\n", + " <g transform=\"translate(165.183343 238.0025)rotate(-90)scale(0.1 -0.1)\">\n", + " <use xlink:href=\"#DejaVuSans-52\"/>\n", + " </g>\n", + " </g>\n", + " </g>\n", + " <g id=\"xtick_5\">\n", + " <g id=\"line2d_5\">\n", + " <g>\n", + " <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"194.928823\" xlink:href=\"#m639e59548b\" y=\"224.64\"/>\n", + " </g>\n", + " </g>\n", + " <g id=\"text_5\">\n", + " <!-- 5 -->\n", + " <defs>\n", + " <path d=\"M 10.796875 72.90625 \n", + "L 49.515625 72.90625 \n", + "L 49.515625 64.59375 \n", + "L 19.828125 64.59375 \n", + "L 19.828125 46.734375 \n", + "Q 21.96875 47.46875 24.109375 47.828125 \n", + "Q 26.265625 48.1875 28.421875 48.1875 \n", + "Q 40.625 48.1875 47.75 41.5 \n", + "Q 54.890625 34.8125 54.890625 23.390625 \n", + "Q 54.890625 11.625 47.5625 5.09375 \n", + "Q 40.234375 -1.421875 26.90625 -1.421875 \n", + "Q 22.3125 -1.421875 17.546875 -0.640625 \n", + "Q 12.796875 0.140625 7.71875 1.703125 \n", + "L 7.71875 11.625 \n", + "Q 12.109375 9.234375 16.796875 8.0625 \n", + "Q 21.484375 6.890625 26.703125 6.890625 \n", + "Q 35.15625 6.890625 40.078125 11.328125 \n", + "Q 45.015625 15.765625 45.015625 23.390625 \n", + "Q 45.015625 31 40.078125 35.4375 \n", + "Q 35.15625 39.890625 26.703125 39.890625 \n", + "Q 22.75 39.890625 18.8125 39.015625 \n", + "Q 14.890625 38.140625 10.796875 36.28125 \n", + "z\n", + "\" id=\"DejaVuSans-53\"/>\n", + " </defs>\n", + " <g transform=\"translate(197.688198 238.0025)rotate(-90)scale(0.1 -0.1)\">\n", + " <use xlink:href=\"#DejaVuSans-53\"/>\n", + " </g>\n", + " </g>\n", + " </g>\n", + " <g id=\"xtick_6\">\n", + " <g id=\"line2d_6\">\n", + " <g>\n", + " <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"227.433677\" xlink:href=\"#m639e59548b\" y=\"224.64\"/>\n", + " </g>\n", + " </g>\n", + " <g id=\"text_6\">\n", + " <!-- 6 -->\n", + " <defs>\n", + " <path d=\"M 33.015625 40.375 \n", + "Q 26.375 40.375 22.484375 35.828125 \n", + "Q 18.609375 31.296875 18.609375 23.390625 \n", + "Q 18.609375 15.53125 22.484375 10.953125 \n", + "Q 26.375 6.390625 33.015625 6.390625 \n", + "Q 39.65625 6.390625 43.53125 10.953125 \n", + "Q 47.40625 15.53125 47.40625 23.390625 \n", + "Q 47.40625 31.296875 43.53125 35.828125 \n", + "Q 39.65625 40.375 33.015625 40.375 \n", + "z\n", + "M 52.59375 71.296875 \n", + "L 52.59375 62.3125 \n", + "Q 48.875 64.0625 45.09375 64.984375 \n", + "Q 41.3125 65.921875 37.59375 65.921875 \n", + "Q 27.828125 65.921875 22.671875 59.328125 \n", + "Q 17.53125 52.734375 16.796875 39.40625 \n", + "Q 19.671875 43.65625 24.015625 45.921875 \n", + "Q 28.375 48.1875 33.59375 48.1875 \n", + "Q 44.578125 48.1875 50.953125 41.515625 \n", + "Q 57.328125 34.859375 57.328125 23.390625 \n", + "Q 57.328125 12.15625 50.6875 5.359375 \n", + "Q 44.046875 -1.421875 33.015625 -1.421875 \n", + "Q 20.359375 -1.421875 13.671875 8.265625 \n", + "Q 6.984375 17.96875 6.984375 36.375 \n", + "Q 6.984375 53.65625 15.1875 63.9375 \n", + "Q 23.390625 74.21875 37.203125 74.21875 \n", + "Q 40.921875 74.21875 44.703125 73.484375 \n", + "Q 48.484375 72.75 52.59375 71.296875 \n", + "z\n", + "\" id=\"DejaVuSans-54\"/>\n", + " </defs>\n", + " <g transform=\"translate(230.193052 238.0025)rotate(-90)scale(0.1 -0.1)\">\n", + " <use xlink:href=\"#DejaVuSans-54\"/>\n", + " </g>\n", + " </g>\n", + " </g>\n", + " <g id=\"xtick_7\">\n", + " <g id=\"line2d_7\">\n", + " <g>\n", + " <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"259.938532\" xlink:href=\"#m639e59548b\" y=\"224.64\"/>\n", + " </g>\n", + " </g>\n", + " <g id=\"text_7\">\n", + " <!-- 7 -->\n", + " <defs>\n", + " <path d=\"M 8.203125 72.90625 \n", + "L 55.078125 72.90625 \n", + "L 55.078125 68.703125 \n", + "L 28.609375 0 \n", + "L 18.3125 0 \n", + "L 43.21875 64.59375 \n", + "L 8.203125 64.59375 \n", + "z\n", + "\" id=\"DejaVuSans-55\"/>\n", + " </defs>\n", + " <g transform=\"translate(262.697907 238.0025)rotate(-90)scale(0.1 -0.1)\">\n", + " <use xlink:href=\"#DejaVuSans-55\"/>\n", + " </g>\n", + " </g>\n", + " </g>\n", + " <g id=\"xtick_8\">\n", + " <g id=\"line2d_8\">\n", + " <g>\n", + " <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"292.443386\" xlink:href=\"#m639e59548b\" y=\"224.64\"/>\n", + " </g>\n", + " </g>\n", + " <g id=\"text_8\">\n", + " <!-- 8 -->\n", + " <defs>\n", + " <path d=\"M 31.78125 34.625 \n", + "Q 24.75 34.625 20.71875 30.859375 \n", + "Q 16.703125 27.09375 16.703125 20.515625 \n", + "Q 16.703125 13.921875 20.71875 10.15625 \n", + "Q 24.75 6.390625 31.78125 6.390625 \n", + "Q 38.8125 6.390625 42.859375 10.171875 \n", + "Q 46.921875 13.96875 46.921875 20.515625 \n", + "Q 46.921875 27.09375 42.890625 30.859375 \n", + "Q 38.875 34.625 31.78125 34.625 \n", + "z\n", + "M 21.921875 38.8125 \n", + "Q 15.578125 40.375 12.03125 44.71875 \n", + "Q 8.5 49.078125 8.5 55.328125 \n", + "Q 8.5 64.0625 14.71875 69.140625 \n", + "Q 20.953125 74.21875 31.78125 74.21875 \n", + "Q 42.671875 74.21875 48.875 69.140625 \n", + "Q 55.078125 64.0625 55.078125 55.328125 \n", + "Q 55.078125 49.078125 51.53125 44.71875 \n", + "Q 48 40.375 41.703125 38.8125 \n", + "Q 48.828125 37.15625 52.796875 32.3125 \n", + "Q 56.78125 27.484375 56.78125 20.515625 \n", + "Q 56.78125 9.90625 50.3125 4.234375 \n", + "Q 43.84375 -1.421875 31.78125 -1.421875 \n", + "Q 19.734375 -1.421875 13.25 4.234375 \n", + "Q 6.78125 9.90625 6.78125 20.515625 \n", + "Q 6.78125 27.484375 10.78125 32.3125 \n", + "Q 14.796875 37.15625 21.921875 38.8125 \n", + "z\n", + "M 18.3125 54.390625 \n", + "Q 18.3125 48.734375 21.84375 45.5625 \n", + "Q 25.390625 42.390625 31.78125 42.390625 \n", + "Q 38.140625 42.390625 41.71875 45.5625 \n", + "Q 45.3125 48.734375 45.3125 54.390625 \n", + "Q 45.3125 60.0625 41.71875 63.234375 \n", + "Q 38.140625 66.40625 31.78125 66.40625 \n", + "Q 25.390625 66.40625 21.84375 63.234375 \n", + "Q 18.3125 60.0625 18.3125 54.390625 \n", + "z\n", + "\" id=\"DejaVuSans-56\"/>\n", + " </defs>\n", + " <g transform=\"translate(295.202761 238.0025)rotate(-90)scale(0.1 -0.1)\">\n", + " <use xlink:href=\"#DejaVuSans-56\"/>\n", + " </g>\n", + " </g>\n", + " </g>\n", + " <g id=\"xtick_9\">\n", + " <g id=\"line2d_9\">\n", + " <g>\n", + " <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"324.94824\" xlink:href=\"#m639e59548b\" y=\"224.64\"/>\n", + " </g>\n", + " </g>\n", + " <g id=\"text_9\">\n", + " <!-- 9 -->\n", + " <defs>\n", + " <path d=\"M 10.984375 1.515625 \n", + "L 10.984375 10.5 \n", + "Q 14.703125 8.734375 18.5 7.8125 \n", + "Q 22.3125 6.890625 25.984375 6.890625 \n", + "Q 35.75 6.890625 40.890625 13.453125 \n", + "Q 46.046875 20.015625 46.78125 33.40625 \n", + "Q 43.953125 29.203125 39.59375 26.953125 \n", + "Q 35.25 24.703125 29.984375 24.703125 \n", + "Q 19.046875 24.703125 12.671875 31.3125 \n", + "Q 6.296875 37.9375 6.296875 49.421875 \n", + "Q 6.296875 60.640625 12.9375 67.421875 \n", + "Q 19.578125 74.21875 30.609375 74.21875 \n", + "Q 43.265625 74.21875 49.921875 64.515625 \n", + "Q 56.59375 54.828125 56.59375 36.375 \n", + "Q 56.59375 19.140625 48.40625 8.859375 \n", + "Q 40.234375 -1.421875 26.421875 -1.421875 \n", + "Q 22.703125 -1.421875 18.890625 -0.6875 \n", + "Q 15.09375 0.046875 10.984375 1.515625 \n", + "z\n", + "M 30.609375 32.421875 \n", + "Q 37.25 32.421875 41.125 36.953125 \n", + "Q 45.015625 41.5 45.015625 49.421875 \n", + "Q 45.015625 57.28125 41.125 61.84375 \n", + "Q 37.25 66.40625 30.609375 66.40625 \n", + "Q 23.96875 66.40625 20.09375 61.84375 \n", + "Q 16.21875 57.28125 16.21875 49.421875 \n", + "Q 16.21875 41.5 20.09375 36.953125 \n", + "Q 23.96875 32.421875 30.609375 32.421875 \n", + "z\n", + "\" id=\"DejaVuSans-57\"/>\n", + " </defs>\n", + " <g transform=\"translate(327.707615 238.0025)rotate(-90)scale(0.1 -0.1)\">\n", + " <use xlink:href=\"#DejaVuSans-57\"/>\n", + " </g>\n", + " </g>\n", + " </g>\n", + " <g id=\"xtick_10\">\n", + " <g id=\"line2d_10\">\n", + " <g>\n", + " <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"357.453095\" xlink:href=\"#m639e59548b\" y=\"224.64\"/>\n", + " </g>\n", + " </g>\n", + " <g id=\"text_10\">\n", + " <!-- 10 -->\n", + " <defs>\n", + " <path d=\"M 31.78125 66.40625 \n", + "Q 24.171875 66.40625 20.328125 58.90625 \n", + "Q 16.5 51.421875 16.5 36.375 \n", + "Q 16.5 21.390625 20.328125 13.890625 \n", + "Q 24.171875 6.390625 31.78125 6.390625 \n", + "Q 39.453125 6.390625 43.28125 13.890625 \n", + "Q 47.125 21.390625 47.125 36.375 \n", + "Q 47.125 51.421875 43.28125 58.90625 \n", + "Q 39.453125 66.40625 31.78125 66.40625 \n", + "z\n", + "M 31.78125 74.21875 \n", + "Q 44.046875 74.21875 50.515625 64.515625 \n", + "Q 56.984375 54.828125 56.984375 36.375 \n", + "Q 56.984375 17.96875 50.515625 8.265625 \n", + "Q 44.046875 -1.421875 31.78125 -1.421875 \n", + "Q 19.53125 -1.421875 13.0625 8.265625 \n", + "Q 6.59375 17.96875 6.59375 36.375 \n", + "Q 6.59375 54.828125 13.0625 64.515625 \n", + "Q 19.53125 74.21875 31.78125 74.21875 \n", + "z\n", + "\" id=\"DejaVuSans-48\"/>\n", + " </defs>\n", + " <g transform=\"translate(360.21247 244.365)rotate(-90)scale(0.1 -0.1)\">\n", + " <use xlink:href=\"#DejaVuSans-49\"/>\n", + " <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n", + " </g>\n", + " </g>\n", + " </g>\n", + " <g id=\"text_11\">\n", + " <!-- Checkin index -->\n", + " <defs>\n", + " <path d=\"M 64.40625 67.28125 \n", + "L 64.40625 56.890625 \n", + "Q 59.421875 61.53125 53.78125 63.8125 \n", + "Q 48.140625 66.109375 41.796875 66.109375 \n", + "Q 29.296875 66.109375 22.65625 58.46875 \n", + "Q 16.015625 50.828125 16.015625 36.375 \n", + "Q 16.015625 21.96875 22.65625 14.328125 \n", + "Q 29.296875 6.6875 41.796875 6.6875 \n", + "Q 48.140625 6.6875 53.78125 8.984375 \n", + "Q 59.421875 11.28125 64.40625 15.921875 \n", + "L 64.40625 5.609375 \n", + "Q 59.234375 2.09375 53.4375 0.328125 \n", + "Q 47.65625 -1.421875 41.21875 -1.421875 \n", + "Q 24.65625 -1.421875 15.125 8.703125 \n", + "Q 5.609375 18.84375 5.609375 36.375 \n", + "Q 5.609375 53.953125 15.125 64.078125 \n", + "Q 24.65625 74.21875 41.21875 74.21875 \n", + "Q 47.75 74.21875 53.53125 72.484375 \n", + "Q 59.328125 70.75 64.40625 67.28125 \n", + "z\n", + "\" id=\"DejaVuSans-67\"/>\n", + " <path d=\"M 54.890625 33.015625 \n", + "L 54.890625 0 \n", + "L 45.90625 0 \n", + "L 45.90625 32.71875 \n", + "Q 45.90625 40.484375 42.875 44.328125 \n", + "Q 39.84375 48.1875 33.796875 48.1875 \n", + "Q 26.515625 48.1875 22.3125 43.546875 \n", + "Q 18.109375 38.921875 18.109375 30.90625 \n", + "L 18.109375 0 \n", + "L 9.078125 0 \n", + "L 9.078125 75.984375 \n", + "L 18.109375 75.984375 \n", + "L 18.109375 46.1875 \n", + "Q 21.34375 51.125 25.703125 53.5625 \n", + "Q 30.078125 56 35.796875 56 \n", + "Q 45.21875 56 50.046875 50.171875 \n", + "Q 54.890625 44.34375 54.890625 33.015625 \n", + "z\n", + "\" id=\"DejaVuSans-104\"/>\n", + " <path d=\"M 56.203125 29.59375 \n", + "L 56.203125 25.203125 \n", + "L 14.890625 25.203125 \n", + "Q 15.484375 15.921875 20.484375 11.0625 \n", + "Q 25.484375 6.203125 34.421875 6.203125 \n", + "Q 39.59375 6.203125 44.453125 7.46875 \n", + "Q 49.3125 8.734375 54.109375 11.28125 \n", + "L 54.109375 2.78125 \n", + "Q 49.265625 0.734375 44.1875 -0.34375 \n", + "Q 39.109375 -1.421875 33.890625 -1.421875 \n", + "Q 20.796875 -1.421875 13.15625 6.1875 \n", + "Q 5.515625 13.8125 5.515625 26.8125 \n", + "Q 5.515625 40.234375 12.765625 48.109375 \n", + "Q 20.015625 56 32.328125 56 \n", + "Q 43.359375 56 49.78125 48.890625 \n", + "Q 56.203125 41.796875 56.203125 29.59375 \n", + "z\n", + "M 47.21875 32.234375 \n", + "Q 47.125 39.59375 43.09375 43.984375 \n", + "Q 39.0625 48.390625 32.421875 48.390625 \n", + "Q 24.90625 48.390625 20.390625 44.140625 \n", + "Q 15.875 39.890625 15.1875 32.171875 \n", + "z\n", + "\" id=\"DejaVuSans-101\"/>\n", + " <path d=\"M 48.78125 52.59375 \n", + "L 48.78125 44.1875 \n", + "Q 44.96875 46.296875 41.140625 47.34375 \n", + "Q 37.3125 48.390625 33.40625 48.390625 \n", + "Q 24.65625 48.390625 19.8125 42.84375 \n", + "Q 14.984375 37.3125 14.984375 27.296875 \n", + "Q 14.984375 17.28125 19.8125 11.734375 \n", + "Q 24.65625 6.203125 33.40625 6.203125 \n", + "Q 37.3125 6.203125 41.140625 7.25 \n", + "Q 44.96875 8.296875 48.78125 10.40625 \n", + "L 48.78125 2.09375 \n", + "Q 45.015625 0.34375 40.984375 -0.53125 \n", + "Q 36.96875 -1.421875 32.421875 -1.421875 \n", + "Q 20.0625 -1.421875 12.78125 6.34375 \n", + "Q 5.515625 14.109375 5.515625 27.296875 \n", + "Q 5.515625 40.671875 12.859375 48.328125 \n", + "Q 20.21875 56 33.015625 56 \n", + "Q 37.15625 56 41.109375 55.140625 \n", + "Q 45.0625 54.296875 48.78125 52.59375 \n", + "z\n", + "\" id=\"DejaVuSans-99\"/>\n", + " <path d=\"M 9.078125 75.984375 \n", + "L 18.109375 75.984375 \n", + "L 18.109375 31.109375 \n", + "L 44.921875 54.6875 \n", + "L 56.390625 54.6875 \n", + "L 27.390625 29.109375 \n", + "L 57.625 0 \n", + "L 45.90625 0 \n", + "L 18.109375 26.703125 \n", + "L 18.109375 0 \n", + "L 9.078125 0 \n", + "z\n", + "\" id=\"DejaVuSans-107\"/>\n", + " <path d=\"M 9.421875 54.6875 \n", + "L 18.40625 54.6875 \n", + "L 18.40625 0 \n", + "L 9.421875 0 \n", + "z\n", + "M 9.421875 75.984375 \n", + "L 18.40625 75.984375 \n", + "L 18.40625 64.59375 \n", + "L 9.421875 64.59375 \n", + "z\n", + "\" id=\"DejaVuSans-105\"/>\n", + " <path d=\"M 54.890625 33.015625 \n", + "L 54.890625 0 \n", + "L 45.90625 0 \n", + "L 45.90625 32.71875 \n", + "Q 45.90625 40.484375 42.875 44.328125 \n", + "Q 39.84375 48.1875 33.796875 48.1875 \n", + "Q 26.515625 48.1875 22.3125 43.546875 \n", + "Q 18.109375 38.921875 18.109375 30.90625 \n", + "L 18.109375 0 \n", + "L 9.078125 0 \n", + "L 9.078125 54.6875 \n", + "L 18.109375 54.6875 \n", + "L 18.109375 46.1875 \n", + "Q 21.34375 51.125 25.703125 53.5625 \n", + "Q 30.078125 56 35.796875 56 \n", + "Q 45.21875 56 50.046875 50.171875 \n", + "Q 54.890625 44.34375 54.890625 33.015625 \n", + "z\n", + "\" id=\"DejaVuSans-110\"/>\n", + " <path id=\"DejaVuSans-32\"/>\n", + " <path d=\"M 45.40625 46.390625 \n", + "L 45.40625 75.984375 \n", + "L 54.390625 75.984375 \n", + "L 54.390625 0 \n", + "L 45.40625 0 \n", + "L 45.40625 8.203125 \n", + "Q 42.578125 3.328125 38.25 0.953125 \n", + "Q 33.9375 -1.421875 27.875 -1.421875 \n", + "Q 17.96875 -1.421875 11.734375 6.484375 \n", + "Q 5.515625 14.40625 5.515625 27.296875 \n", + "Q 5.515625 40.1875 11.734375 48.09375 \n", + "Q 17.96875 56 27.875 56 \n", + "Q 33.9375 56 38.25 53.625 \n", + "Q 42.578125 51.265625 45.40625 46.390625 \n", + "z\n", + "M 14.796875 27.296875 \n", + "Q 14.796875 17.390625 18.875 11.75 \n", + "Q 22.953125 6.109375 30.078125 6.109375 \n", + "Q 37.203125 6.109375 41.296875 11.75 \n", + "Q 45.40625 17.390625 45.40625 27.296875 \n", + "Q 45.40625 37.203125 41.296875 42.84375 \n", + "Q 37.203125 48.484375 30.078125 48.484375 \n", + "Q 22.953125 48.484375 18.875 42.84375 \n", + "Q 14.796875 37.203125 14.796875 27.296875 \n", + "z\n", + "\" id=\"DejaVuSans-100\"/>\n", + " <path d=\"M 54.890625 54.6875 \n", + "L 35.109375 28.078125 \n", + "L 55.90625 0 \n", + "L 45.3125 0 \n", + "L 29.390625 21.484375 \n", + "L 13.484375 0 \n", + "L 2.875 0 \n", + "L 24.125 28.609375 \n", + "L 4.6875 54.6875 \n", + "L 15.28125 54.6875 \n", + "L 29.78125 35.203125 \n", + "L 44.28125 54.6875 \n", + "z\n", + "\" id=\"DejaVuSans-120\"/>\n", + " </defs>\n", + " <g transform=\"translate(175.885938 255.963437)scale(0.1 -0.1)\">\n", + " <use xlink:href=\"#DejaVuSans-67\"/>\n", + " <use x=\"69.824219\" xlink:href=\"#DejaVuSans-104\"/>\n", + " <use x=\"133.203125\" xlink:href=\"#DejaVuSans-101\"/>\n", + " <use x=\"194.726562\" xlink:href=\"#DejaVuSans-99\"/>\n", + " <use x=\"249.707031\" xlink:href=\"#DejaVuSans-107\"/>\n", + " <use x=\"307.617188\" xlink:href=\"#DejaVuSans-105\"/>\n", + " <use x=\"335.400391\" xlink:href=\"#DejaVuSans-110\"/>\n", + " <use x=\"398.779297\" xlink:href=\"#DejaVuSans-32\"/>\n", + " <use x=\"430.566406\" xlink:href=\"#DejaVuSans-105\"/>\n", + " <use x=\"458.349609\" xlink:href=\"#DejaVuSans-110\"/>\n", + " <use x=\"521.728516\" xlink:href=\"#DejaVuSans-100\"/>\n", + " <use x=\"585.205078\" xlink:href=\"#DejaVuSans-101\"/>\n", + " <use x=\"646.712891\" xlink:href=\"#DejaVuSans-120\"/>\n", + " </g>\n", + " </g>\n", + " </g>\n", + " <g id=\"matplotlib.axis_2\">\n", + " <g id=\"ytick_1\">\n", + " <g id=\"line2d_11\">\n", + " <defs>\n", + " <path d=\"M 0 0 \n", + "L -3.5 0 \n", + "\" id=\"m7e5aed6441\" style=\"stroke:#000000;stroke-width:0.8;\"/>\n", + " </defs>\n", + " <g>\n", + " <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"43.78125\" xlink:href=\"#m7e5aed6441\" y=\"224.64\"/>\n", + " </g>\n", + " </g>\n", + " <g id=\"text_12\">\n", + " <!-- 0.0 -->\n", + " <defs>\n", + " <path d=\"M 10.6875 12.40625 \n", + "L 21 12.40625 \n", + "L 21 0 \n", + "L 10.6875 0 \n", + "z\n", + "\" id=\"DejaVuSans-46\"/>\n", + " </defs>\n", + " <g transform=\"translate(20.878125 228.439219)scale(0.1 -0.1)\">\n", + " <use xlink:href=\"#DejaVuSans-48\"/>\n", + " <use x=\"63.623047\" xlink:href=\"#DejaVuSans-46\"/>\n", + " <use x=\"95.410156\" xlink:href=\"#DejaVuSans-48\"/>\n", + " </g>\n", + " </g>\n", + " </g>\n", + " <g id=\"ytick_2\">\n", + " <g id=\"line2d_12\">\n", + " <g>\n", + " <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"43.78125\" xlink:href=\"#m7e5aed6441\" y=\"187.824762\"/>\n", + " </g>\n", + " </g>\n", + " <g id=\"text_13\">\n", + " <!-- 0.2 -->\n", + " <g transform=\"translate(20.878125 191.623981)scale(0.1 -0.1)\">\n", + " <use xlink:href=\"#DejaVuSans-48\"/>\n", + " <use x=\"63.623047\" xlink:href=\"#DejaVuSans-46\"/>\n", + " <use x=\"95.410156\" xlink:href=\"#DejaVuSans-50\"/>\n", + " </g>\n", + " </g>\n", + " </g>\n", + " <g id=\"ytick_3\">\n", + " <g id=\"line2d_13\">\n", + " <g>\n", + " <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"43.78125\" xlink:href=\"#m7e5aed6441\" y=\"151.009524\"/>\n", + " </g>\n", + " </g>\n", + " <g id=\"text_14\">\n", + " <!-- 0.4 -->\n", + " <g transform=\"translate(20.878125 154.808743)scale(0.1 -0.1)\">\n", + " <use xlink:href=\"#DejaVuSans-48\"/>\n", + " <use x=\"63.623047\" xlink:href=\"#DejaVuSans-46\"/>\n", + " <use x=\"95.410156\" xlink:href=\"#DejaVuSans-52\"/>\n", + " </g>\n", + " </g>\n", + " </g>\n", + " <g id=\"ytick_4\">\n", + " <g id=\"line2d_14\">\n", + " <g>\n", + " <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"43.78125\" xlink:href=\"#m7e5aed6441\" y=\"114.194286\"/>\n", + " </g>\n", + " </g>\n", + " <g id=\"text_15\">\n", + " <!-- 0.6 -->\n", + " <g transform=\"translate(20.878125 117.993504)scale(0.1 -0.1)\">\n", + " <use xlink:href=\"#DejaVuSans-48\"/>\n", + " <use x=\"63.623047\" xlink:href=\"#DejaVuSans-46\"/>\n", + " <use x=\"95.410156\" xlink:href=\"#DejaVuSans-54\"/>\n", + " </g>\n", + " </g>\n", + " </g>\n", + " <g id=\"ytick_5\">\n", + " <g id=\"line2d_15\">\n", + " <g>\n", + " <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"43.78125\" xlink:href=\"#m7e5aed6441\" y=\"77.379048\"/>\n", + " </g>\n", + " </g>\n", + " <g id=\"text_16\">\n", + " <!-- 0.8 -->\n", + " <g transform=\"translate(20.878125 81.178266)scale(0.1 -0.1)\">\n", + " <use xlink:href=\"#DejaVuSans-48\"/>\n", + " <use x=\"63.623047\" xlink:href=\"#DejaVuSans-46\"/>\n", + " <use x=\"95.410156\" xlink:href=\"#DejaVuSans-56\"/>\n", + " </g>\n", + " </g>\n", + " </g>\n", + " <g id=\"ytick_6\">\n", + " <g id=\"line2d_16\">\n", + " <g>\n", + " <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"43.78125\" xlink:href=\"#m7e5aed6441\" y=\"40.56381\"/>\n", + " </g>\n", + " </g>\n", + " <g id=\"text_17\">\n", + " <!-- 1.0 -->\n", + " <g transform=\"translate(20.878125 44.363028)scale(0.1 -0.1)\">\n", + " <use xlink:href=\"#DejaVuSans-49\"/>\n", + " <use x=\"63.623047\" xlink:href=\"#DejaVuSans-46\"/>\n", + " <use x=\"95.410156\" xlink:href=\"#DejaVuSans-48\"/>\n", + " </g>\n", + " </g>\n", + " </g>\n", + " <g id=\"text_18\">\n", + " <!-- Repo size (MiB) -->\n", + " <defs>\n", + " <path d=\"M 44.390625 34.1875 \n", + "Q 47.5625 33.109375 50.5625 29.59375 \n", + "Q 53.5625 26.078125 56.59375 19.921875 \n", + "L 66.609375 0 \n", + "L 56 0 \n", + "L 46.6875 18.703125 \n", + "Q 43.0625 26.03125 39.671875 28.421875 \n", + "Q 36.28125 30.8125 30.421875 30.8125 \n", + "L 19.671875 30.8125 \n", + "L 19.671875 0 \n", + "L 9.8125 0 \n", + "L 9.8125 72.90625 \n", + "L 32.078125 72.90625 \n", + "Q 44.578125 72.90625 50.734375 67.671875 \n", + "Q 56.890625 62.453125 56.890625 51.90625 \n", + "Q 56.890625 45.015625 53.6875 40.46875 \n", + "Q 50.484375 35.9375 44.390625 34.1875 \n", + "z\n", + "M 19.671875 64.796875 \n", + "L 19.671875 38.921875 \n", + "L 32.078125 38.921875 \n", + "Q 39.203125 38.921875 42.84375 42.21875 \n", + "Q 46.484375 45.515625 46.484375 51.90625 \n", + "Q 46.484375 58.296875 42.84375 61.546875 \n", + "Q 39.203125 64.796875 32.078125 64.796875 \n", + "z\n", + "\" id=\"DejaVuSans-82\"/>\n", + " <path d=\"M 18.109375 8.203125 \n", + "L 18.109375 -20.796875 \n", + "L 9.078125 -20.796875 \n", + "L 9.078125 54.6875 \n", + "L 18.109375 54.6875 \n", + "L 18.109375 46.390625 \n", + "Q 20.953125 51.265625 25.265625 53.625 \n", + "Q 29.59375 56 35.59375 56 \n", + "Q 45.5625 56 51.78125 48.09375 \n", + "Q 58.015625 40.1875 58.015625 27.296875 \n", + "Q 58.015625 14.40625 51.78125 6.484375 \n", + "Q 45.5625 -1.421875 35.59375 -1.421875 \n", + "Q 29.59375 -1.421875 25.265625 0.953125 \n", + "Q 20.953125 3.328125 18.109375 8.203125 \n", + "z\n", + "M 48.6875 27.296875 \n", + "Q 48.6875 37.203125 44.609375 42.84375 \n", + "Q 40.53125 48.484375 33.40625 48.484375 \n", + "Q 26.265625 48.484375 22.1875 42.84375 \n", + "Q 18.109375 37.203125 18.109375 27.296875 \n", + "Q 18.109375 17.390625 22.1875 11.75 \n", + "Q 26.265625 6.109375 33.40625 6.109375 \n", + "Q 40.53125 6.109375 44.609375 11.75 \n", + "Q 48.6875 17.390625 48.6875 27.296875 \n", + "z\n", + "\" id=\"DejaVuSans-112\"/>\n", + " <path d=\"M 30.609375 48.390625 \n", + "Q 23.390625 48.390625 19.1875 42.75 \n", + "Q 14.984375 37.109375 14.984375 27.296875 \n", + "Q 14.984375 17.484375 19.15625 11.84375 \n", + "Q 23.34375 6.203125 30.609375 6.203125 \n", + "Q 37.796875 6.203125 41.984375 11.859375 \n", + "Q 46.1875 17.53125 46.1875 27.296875 \n", + "Q 46.1875 37.015625 41.984375 42.703125 \n", + "Q 37.796875 48.390625 30.609375 48.390625 \n", + "z\n", + "M 30.609375 56 \n", + "Q 42.328125 56 49.015625 48.375 \n", + "Q 55.71875 40.765625 55.71875 27.296875 \n", + "Q 55.71875 13.875 49.015625 6.21875 \n", + "Q 42.328125 -1.421875 30.609375 -1.421875 \n", + "Q 18.84375 -1.421875 12.171875 6.21875 \n", + "Q 5.515625 13.875 5.515625 27.296875 \n", + "Q 5.515625 40.765625 12.171875 48.375 \n", + "Q 18.84375 56 30.609375 56 \n", + "z\n", + "\" id=\"DejaVuSans-111\"/>\n", + " <path d=\"M 44.28125 53.078125 \n", + "L 44.28125 44.578125 \n", + "Q 40.484375 46.53125 36.375 47.5 \n", + "Q 32.28125 48.484375 27.875 48.484375 \n", + "Q 21.1875 48.484375 17.84375 46.4375 \n", + "Q 14.5 44.390625 14.5 40.28125 \n", + "Q 14.5 37.15625 16.890625 35.375 \n", + "Q 19.28125 33.59375 26.515625 31.984375 \n", + "L 29.59375 31.296875 \n", + "Q 39.15625 29.25 43.1875 25.515625 \n", + "Q 47.21875 21.78125 47.21875 15.09375 \n", + "Q 47.21875 7.46875 41.1875 3.015625 \n", + "Q 35.15625 -1.421875 24.609375 -1.421875 \n", + "Q 20.21875 -1.421875 15.453125 -0.5625 \n", + "Q 10.6875 0.296875 5.421875 2 \n", + "L 5.421875 11.28125 \n", + "Q 10.40625 8.6875 15.234375 7.390625 \n", + "Q 20.0625 6.109375 24.8125 6.109375 \n", + "Q 31.15625 6.109375 34.5625 8.28125 \n", + "Q 37.984375 10.453125 37.984375 14.40625 \n", + "Q 37.984375 18.0625 35.515625 20.015625 \n", + "Q 33.0625 21.96875 24.703125 23.78125 \n", + "L 21.578125 24.515625 \n", + "Q 13.234375 26.265625 9.515625 29.90625 \n", + "Q 5.8125 33.546875 5.8125 39.890625 \n", + "Q 5.8125 47.609375 11.28125 51.796875 \n", + "Q 16.75 56 26.8125 56 \n", + "Q 31.78125 56 36.171875 55.265625 \n", + "Q 40.578125 54.546875 44.28125 53.078125 \n", + "z\n", + "\" id=\"DejaVuSans-115\"/>\n", + " <path d=\"M 5.515625 54.6875 \n", + "L 48.1875 54.6875 \n", + "L 48.1875 46.484375 \n", + "L 14.40625 7.171875 \n", + "L 48.1875 7.171875 \n", + "L 48.1875 0 \n", + "L 4.296875 0 \n", + "L 4.296875 8.203125 \n", + "L 38.09375 47.515625 \n", + "L 5.515625 47.515625 \n", + "z\n", + "\" id=\"DejaVuSans-122\"/>\n", + " <path d=\"M 31 75.875 \n", + "Q 24.46875 64.65625 21.28125 53.65625 \n", + "Q 18.109375 42.671875 18.109375 31.390625 \n", + "Q 18.109375 20.125 21.3125 9.0625 \n", + "Q 24.515625 -2 31 -13.1875 \n", + "L 23.1875 -13.1875 \n", + "Q 15.875 -1.703125 12.234375 9.375 \n", + "Q 8.59375 20.453125 8.59375 31.390625 \n", + "Q 8.59375 42.28125 12.203125 53.3125 \n", + "Q 15.828125 64.359375 23.1875 75.875 \n", + "z\n", + "\" id=\"DejaVuSans-40\"/>\n", + " <path d=\"M 9.8125 72.90625 \n", + "L 24.515625 72.90625 \n", + "L 43.109375 23.296875 \n", + "L 61.8125 72.90625 \n", + "L 76.515625 72.90625 \n", + "L 76.515625 0 \n", + "L 66.890625 0 \n", + "L 66.890625 64.015625 \n", + "L 48.09375 14.015625 \n", + "L 38.1875 14.015625 \n", + "L 19.390625 64.015625 \n", + "L 19.390625 0 \n", + "L 9.8125 0 \n", + "z\n", + "\" id=\"DejaVuSans-77\"/>\n", + " <path d=\"M 19.671875 34.8125 \n", + "L 19.671875 8.109375 \n", + "L 35.5 8.109375 \n", + "Q 43.453125 8.109375 47.28125 11.40625 \n", + "Q 51.125 14.703125 51.125 21.484375 \n", + "Q 51.125 28.328125 47.28125 31.5625 \n", + "Q 43.453125 34.8125 35.5 34.8125 \n", + "z\n", + "M 19.671875 64.796875 \n", + "L 19.671875 42.828125 \n", + "L 34.28125 42.828125 \n", + "Q 41.5 42.828125 45.03125 45.53125 \n", + "Q 48.578125 48.25 48.578125 53.8125 \n", + "Q 48.578125 59.328125 45.03125 62.0625 \n", + "Q 41.5 64.796875 34.28125 64.796875 \n", + "z\n", + "M 9.8125 72.90625 \n", + "L 35.015625 72.90625 \n", + "Q 46.296875 72.90625 52.390625 68.21875 \n", + "Q 58.5 63.53125 58.5 54.890625 \n", + "Q 58.5 48.1875 55.375 44.234375 \n", + "Q 52.25 40.28125 46.1875 39.3125 \n", + "Q 53.46875 37.75 57.5 32.78125 \n", + "Q 61.53125 27.828125 61.53125 20.40625 \n", + "Q 61.53125 10.640625 54.890625 5.3125 \n", + "Q 48.25 0 35.984375 0 \n", + "L 9.8125 0 \n", + "z\n", + "\" id=\"DejaVuSans-66\"/>\n", + " <path d=\"M 8.015625 75.875 \n", + "L 15.828125 75.875 \n", + "Q 23.140625 64.359375 26.78125 53.3125 \n", + "Q 30.421875 42.28125 30.421875 31.390625 \n", + "Q 30.421875 20.453125 26.78125 9.375 \n", + "Q 23.140625 -1.703125 15.828125 -13.1875 \n", + "L 8.015625 -13.1875 \n", + "Q 14.5 -2 17.703125 9.0625 \n", + "Q 20.90625 20.125 20.90625 31.390625 \n", + "Q 20.90625 42.671875 17.703125 53.65625 \n", + "Q 14.5 64.65625 8.015625 75.875 \n", + "z\n", + "\" id=\"DejaVuSans-41\"/>\n", + " </defs>\n", + " <g transform=\"translate(14.798438 154.609062)rotate(-90)scale(0.1 -0.1)\">\n", + " <use xlink:href=\"#DejaVuSans-82\"/>\n", + " <use x=\"69.419922\" xlink:href=\"#DejaVuSans-101\"/>\n", + " <use x=\"130.943359\" xlink:href=\"#DejaVuSans-112\"/>\n", + " <use x=\"194.419922\" xlink:href=\"#DejaVuSans-111\"/>\n", + " <use x=\"255.601562\" xlink:href=\"#DejaVuSans-32\"/>\n", + " <use x=\"287.388672\" xlink:href=\"#DejaVuSans-115\"/>\n", + " <use x=\"339.488281\" xlink:href=\"#DejaVuSans-105\"/>\n", + " <use x=\"367.271484\" xlink:href=\"#DejaVuSans-122\"/>\n", + " <use x=\"419.761719\" xlink:href=\"#DejaVuSans-101\"/>\n", + " <use x=\"481.285156\" xlink:href=\"#DejaVuSans-32\"/>\n", + " <use x=\"513.072266\" xlink:href=\"#DejaVuSans-40\"/>\n", + " <use x=\"552.085938\" xlink:href=\"#DejaVuSans-77\"/>\n", + " <use x=\"638.365234\" xlink:href=\"#DejaVuSans-105\"/>\n", + " <use x=\"666.148438\" xlink:href=\"#DejaVuSans-66\"/>\n", + " <use x=\"734.751953\" xlink:href=\"#DejaVuSans-41\"/>\n", + " </g>\n", + " </g>\n", + " </g>\n", + " <g id=\"patch_43\">\n", + " <path d=\"M 43.78125 224.64 \n", + "L 43.78125 7.2 \n", + "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n", + " </g>\n", + " <g id=\"patch_44\">\n", + " <path d=\"M 378.58125 224.64 \n", + "L 378.58125 7.2 \n", + "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n", + " </g>\n", + " <g id=\"patch_45\">\n", + " <path d=\"M 43.78125 224.64 \n", + "L 378.58125 224.64 \n", + "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n", + " </g>\n", + " <g id=\"patch_46\">\n", + " <path d=\"M 43.78125 7.2 \n", + "L 378.58125 7.2 \n", + "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n", + " </g>\n", + " <g id=\"legend_1\">\n", + " <g id=\"patch_47\">\n", + " <path d=\"M 50.78125 73.9125 \n", + "L 105.828125 73.9125 \n", + "Q 107.828125 73.9125 107.828125 71.9125 \n", + "L 107.828125 14.2 \n", + "Q 107.828125 12.2 105.828125 12.2 \n", + "L 50.78125 12.2 \n", + "Q 48.78125 12.2 48.78125 14.2 \n", + "L 48.78125 71.9125 \n", + "Q 48.78125 73.9125 50.78125 73.9125 \n", + "z\n", + "\" style=\"fill:#ffffff;opacity:0.8;stroke:#cccccc;stroke-linejoin:miter;\"/>\n", + " </g>\n", + " <g id=\"patch_48\">\n", + " <path d=\"M 52.78125 23.798437 \n", + "L 72.78125 23.798437 \n", + "L 72.78125 16.798437 \n", + "L 52.78125 16.798437 \n", + "z\n", + "\" style=\"fill:#3b4cc0;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;\"/>\n", + " </g>\n", + " <g id=\"text_19\">\n", + " <!-- JPEG -->\n", + " <defs>\n", + " <path d=\"M 9.8125 72.90625 \n", + "L 19.671875 72.90625 \n", + "L 19.671875 5.078125 \n", + "Q 19.671875 -8.109375 14.671875 -14.0625 \n", + "Q 9.671875 -20.015625 -1.421875 -20.015625 \n", + "L -5.171875 -20.015625 \n", + "L -5.171875 -11.71875 \n", + "L -2.09375 -11.71875 \n", + "Q 4.4375 -11.71875 7.125 -8.046875 \n", + "Q 9.8125 -4.390625 9.8125 5.078125 \n", + "z\n", + "\" id=\"DejaVuSans-74\"/>\n", + " <path d=\"M 19.671875 64.796875 \n", + "L 19.671875 37.40625 \n", + "L 32.078125 37.40625 \n", + "Q 38.96875 37.40625 42.71875 40.96875 \n", + "Q 46.484375 44.53125 46.484375 51.125 \n", + "Q 46.484375 57.671875 42.71875 61.234375 \n", + "Q 38.96875 64.796875 32.078125 64.796875 \n", + "z\n", + "M 9.8125 72.90625 \n", + "L 32.078125 72.90625 \n", + "Q 44.34375 72.90625 50.609375 67.359375 \n", + "Q 56.890625 61.8125 56.890625 51.125 \n", + "Q 56.890625 40.328125 50.609375 34.8125 \n", + "Q 44.34375 29.296875 32.078125 29.296875 \n", + "L 19.671875 29.296875 \n", + "L 19.671875 0 \n", + "L 9.8125 0 \n", + "z\n", + "\" id=\"DejaVuSans-80\"/>\n", + " <path d=\"M 9.8125 72.90625 \n", + "L 55.90625 72.90625 \n", + "L 55.90625 64.59375 \n", + "L 19.671875 64.59375 \n", + "L 19.671875 43.015625 \n", + "L 54.390625 43.015625 \n", + "L 54.390625 34.71875 \n", + "L 19.671875 34.71875 \n", + "L 19.671875 8.296875 \n", + "L 56.78125 8.296875 \n", + "L 56.78125 0 \n", + "L 9.8125 0 \n", + "z\n", + "\" id=\"DejaVuSans-69\"/>\n", + " <path d=\"M 59.515625 10.40625 \n", + "L 59.515625 29.984375 \n", + "L 43.40625 29.984375 \n", + "L 43.40625 38.09375 \n", + "L 69.28125 38.09375 \n", + "L 69.28125 6.78125 \n", + "Q 63.578125 2.734375 56.6875 0.65625 \n", + "Q 49.8125 -1.421875 42 -1.421875 \n", + "Q 24.90625 -1.421875 15.25 8.5625 \n", + "Q 5.609375 18.5625 5.609375 36.375 \n", + "Q 5.609375 54.25 15.25 64.234375 \n", + "Q 24.90625 74.21875 42 74.21875 \n", + "Q 49.125 74.21875 55.546875 72.453125 \n", + "Q 61.96875 70.703125 67.390625 67.28125 \n", + "L 67.390625 56.78125 \n", + "Q 61.921875 61.421875 55.765625 63.765625 \n", + "Q 49.609375 66.109375 42.828125 66.109375 \n", + "Q 29.4375 66.109375 22.71875 58.640625 \n", + "Q 16.015625 51.171875 16.015625 36.375 \n", + "Q 16.015625 21.625 22.71875 14.15625 \n", + "Q 29.4375 6.6875 42.828125 6.6875 \n", + "Q 48.046875 6.6875 52.140625 7.59375 \n", + "Q 56.25 8.5 59.515625 10.40625 \n", + "z\n", + "\" id=\"DejaVuSans-71\"/>\n", + " </defs>\n", + " <g transform=\"translate(80.78125 23.798437)scale(0.1 -0.1)\">\n", + " <use xlink:href=\"#DejaVuSans-74\"/>\n", + " <use x=\"29.492188\" xlink:href=\"#DejaVuSans-80\"/>\n", + " <use x=\"89.794922\" xlink:href=\"#DejaVuSans-69\"/>\n", + " <use x=\"152.978516\" xlink:href=\"#DejaVuSans-71\"/>\n", + " </g>\n", + " </g>\n", + " <g id=\"patch_49\">\n", + " <path d=\"M 52.78125 38.476562 \n", + "L 72.78125 38.476562 \n", + "L 72.78125 31.476562 \n", + "L 52.78125 31.476562 \n", + "z\n", + "\" style=\"fill:#aac7fd;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;\"/>\n", + " </g>\n", + " <g id=\"text_20\">\n", + " <!-- BMP -->\n", + " <g transform=\"translate(80.78125 38.476562)scale(0.1 -0.1)\">\n", + " <use xlink:href=\"#DejaVuSans-66\"/>\n", + " <use x=\"68.603516\" xlink:href=\"#DejaVuSans-77\"/>\n", + " <use x=\"154.882812\" xlink:href=\"#DejaVuSans-80\"/>\n", + " </g>\n", + " </g>\n", + " <g id=\"patch_50\">\n", + " <path d=\"M 52.78125 53.154687 \n", + "L 72.78125 53.154687 \n", + "L 72.78125 46.154687 \n", + "L 52.78125 46.154687 \n", + "z\n", + "\" style=\"fill:#f7b89c;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;\"/>\n", + " </g>\n", + " <g id=\"text_21\">\n", + " <!-- TIFF -->\n", + " <defs>\n", + " <path d=\"M -0.296875 72.90625 \n", + "L 61.375 72.90625 \n", + "L 61.375 64.59375 \n", + "L 35.5 64.59375 \n", + "L 35.5 0 \n", + "L 25.59375 0 \n", + "L 25.59375 64.59375 \n", + "L -0.296875 64.59375 \n", + "z\n", + "\" id=\"DejaVuSans-84\"/>\n", + " <path d=\"M 9.8125 72.90625 \n", + "L 19.671875 72.90625 \n", + "L 19.671875 0 \n", + "L 9.8125 0 \n", + "z\n", + "\" id=\"DejaVuSans-73\"/>\n", + " <path d=\"M 9.8125 72.90625 \n", + "L 51.703125 72.90625 \n", + "L 51.703125 64.59375 \n", + "L 19.671875 64.59375 \n", + "L 19.671875 43.109375 \n", + "L 48.578125 43.109375 \n", + "L 48.578125 34.8125 \n", + "L 19.671875 34.8125 \n", + "L 19.671875 0 \n", + "L 9.8125 0 \n", + "z\n", + "\" id=\"DejaVuSans-70\"/>\n", + " </defs>\n", + " <g transform=\"translate(80.78125 53.154687)scale(0.1 -0.1)\">\n", + " <use xlink:href=\"#DejaVuSans-84\"/>\n", + " <use x=\"61.083984\" xlink:href=\"#DejaVuSans-73\"/>\n", + " <use x=\"90.576172\" xlink:href=\"#DejaVuSans-70\"/>\n", + " <use x=\"148.095703\" xlink:href=\"#DejaVuSans-70\"/>\n", + " </g>\n", + " </g>\n", + " <g id=\"patch_51\">\n", + " <path d=\"M 52.78125 67.832812 \n", + "L 72.78125 67.832812 \n", + "L 72.78125 60.832812 \n", + "L 52.78125 60.832812 \n", + "z\n", + "\" style=\"fill:#b40426;stroke:#ffffff;stroke-linejoin:miter;stroke-width:2;\"/>\n", + " </g>\n", + " <g id=\"text_22\">\n", + " <!-- PNG -->\n", + " <defs>\n", + " <path d=\"M 9.8125 72.90625 \n", + "L 23.09375 72.90625 \n", + "L 55.421875 11.921875 \n", + "L 55.421875 72.90625 \n", + "L 64.984375 72.90625 \n", + "L 64.984375 0 \n", + "L 51.703125 0 \n", + "L 19.390625 60.984375 \n", + "L 19.390625 0 \n", + "L 9.8125 0 \n", + "z\n", + "\" id=\"DejaVuSans-78\"/>\n", + " </defs>\n", + " <g transform=\"translate(80.78125 67.832812)scale(0.1 -0.1)\">\n", + " <use xlink:href=\"#DejaVuSans-80\"/>\n", + " <use x=\"60.302734\" xlink:href=\"#DejaVuSans-78\"/>\n", + " <use x=\"135.107422\" xlink:href=\"#DejaVuSans-71\"/>\n", + " </g>\n", + " </g>\n", + " </g>\n", + " </g>\n", + " </g>\n", + " <defs>\n", + " <clipPath id=\"p70301a0bed\">\n", + " <rect height=\"217.44\" width=\"334.8\" x=\"43.78125\" y=\"7.2\"/>\n", + " </clipPath>\n", + " </defs>\n", + "</svg>\n" + ], + "text/plain": [ + "<Figure size 432x288 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "%config InlineBackend.figure_formats = ['svg']\n", + "\n", + "import matplotlib as mpl\n", + "import matplotlib.pyplot as plt\n", + "import pandas as pd\n", + "\n", + "os.chdir(tdir)\n", + "\n", + "# Merge per-format test data into a single DataFrame without the first\n", + "# first row, being the boring initial empty repo state.\n", + "data = pd.concat(repo_sizes, axis=1).drop(range(1))\n", + "\n", + "mpl.rcParams['figure.figsize'] = (6, 4)\n", + "ax = data.plot(kind = 'bar', colormap = 'coolwarm',\n", + " grid = False, width = 0.8,\n", + " edgecolor = 'white', linewidth = 2)\n", + "ax.axes.set_xlabel('Checkin index')\n", + "ax.axes.set_ylabel('Repo size (MiB)')\n", + "plt.savefig('image-format-vs-repo-size.svg', transparent=True)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} |
