summaryrefslogtreecommitdiff
path: root/www/image-format-vs-repo-size.ipynb
diff options
context:
space:
mode:
authorcashmere <cashmere@autistici.org>2026-09-04 09:05:24 +0200
committercashmere <cashmere@autistici.org>2026-09-04 09:05:24 +0200
commit4f49b16079b27d7ce633619e4cddfdf2bffbc952 (patch)
treec296c1e7f3c3e2f6859c6d3a1b1b208779b89679 /www/image-format-vs-repo-size.ipynb
downloadrelic-4f49b16079b27d7ce633619e4cddfdf2bffbc952.tar.gz
initial commitHEADmaster
Diffstat (limited to 'www/image-format-vs-repo-size.ipynb')
-rw-r--r--www/image-format-vs-repo-size.ipynb1719
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
+}