[
  {
    "path": ".github/workflows/deploy.yml",
    "content": "name: ci \non:\n  push:\n    branches:\n      - main\npermissions:\n  contents: write\njobs:\n  deploy:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v3\n      - uses: actions/setup-python@v4\n        with:\n          python-version: 3.x\n      - uses: actions/cache@v2\n        with:\n          key: ${{ github.ref }}\n          path: .cache\n      - run: |\n          pip install -e . \n          pip install mkdocs-material \n          pip install \"mkdocstrings[python]\"\n      - run: mkdocs gh-deploy --force"
  },
  {
    "path": ".github/workflows/publish.yml",
    "content": "name: Build distribution\non: [push, pull_request, workflow_dispatch]\n\njobs:\n  deploy:\n    runs-on: ubuntu-latest\n\n    steps:\n      - name: Checkout source\n        uses: actions/checkout@v3\n\n      - name: Set up Python\n        uses: actions/setup-python@v4\n        with:\n          python-version: \"3.x\"\n\n      - name: Install build dependencies\n        run: |\n          pip install --upgrade pip\n          pip install --upgrade build wheel setuptools\n\n      - name: Build distributions\n        run: python -m build\n\n      - name: Publish package to PyPI\n        if: github.repository == 'julkaar9/pynimate' && github.event_name =='push' && startsWith(github.ref, 'refs/tags')\n        uses: pypa/gh-action-pypi-publish@release/v1\n        with:\n          password: ${{ secrets.PYPI_API_TOKEN }}\n"
  },
  {
    "path": ".github/workflows/tests.yml",
    "content": "name: Tests\n\non:\n  push:\n    branches: [ main, dev ]\n  pull_request:\n    branches: [ main, dev ]\n\npermissions:\n  contents: read\n\njobs:\n  test:\n\n    runs-on: ubuntu-latest\n    strategy:\n      matrix:\n        python-version: [\"3.9\", \"3.10\", \"3.11\"]\n\n    steps:\n      - uses: actions/checkout@v3\n      - name: Set up Python ${{ matrix.python-version }}\n        uses: actions/setup-python@v4\n        with:\n          python-version: ${{ matrix.python-version }}\n      - name: Install dependencies\n        run: |\n          python -m pip install --upgrade pip\n          pip install flake8 pytest\n          if [ -f requirements.txt ]; then pip install -r requirements.txt; fi\n          pip install -e . \n      - name: Lint with flake8\n        run: | \n          flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics\n          flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics\n      - name: Test with pytest\n        run: |\n          pytest"
  },
  {
    "path": ".gitignore",
    "content": "legacy/*\n\nexamples/data/ccodes.csv\nexamples/data/cn_dict.csv \nexamples/data/data2.csv\nexamples/data/mapdata.csv \nexamples/test.py\nexamples/example4.py\n# Byte-compiled / optimized / DLL files\n__pycache__/\n*.py[cod]\n*$py.class\n\n# C extensions\n*.so\n.vscode/\n# Distribution / packaging\n.Python\nbuild/\ndevelop-eggs/\ndist/\ndownloads/\neggs/\n.eggs/\nlib/\nlib64/\nparts/\nsdist/\nvar/\nwheels/\npip-wheel-metadata/\nshare/python-wheels/\n*.egg-info/\n.installed.cfg\n*.egg\nMANIFEST\n\n# PyInstaller\n#  Usually these files are written by a python script from a template\n#  before PyInstaller builds the exe, so as to inject date/other infos into it.\n*.manifest\n*.spec\n\n# Installer logs\npip-log.txt\npip-delete-this-directory.txt\n\n# Unit test / coverage reports\nhtmlcov/\n.tox/\n.nox/\n.coverage\n.coverage.*\n.cache\nnosetests.xml\ncoverage.xml\n*.cover\n*.py,cover\n.hypothesis/\n.pytest_cache/\n\n# Translations\n*.mo\n*.pot\n\n# Django stuff:\n*.log\nlocal_settings.py\ndb.sqlite3\ndb.sqlite3-journal\n\n# Sphinx documentation\ndocs/_build/\n\n# PyBuilder\ntarget/\n\n# Jupyter Notebook\n.ipynb_checkpoints\n\n# IPython\nprofile_default/\nipython_config.py\n\n# pyenv\n.python-version\n\n# pipenv\n#   According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.\n#   However, in case of collaboration, if having platform-specific dependencies or dependencies\n#   having no cross-platform support, pipenv may install dependencies that don't work, or not\n#   install all needed dependencies.\n#Pipfile.lock\n\n# PEP 582; used by e.g. github.com/David-OConnor/pyflow\n__pypackages__/\n\n# Celery stuff\ncelerybeat-schedule\ncelerybeat.pid\n\n# SageMath parsed files\n*.sage.py\n\n# Environments\n.env\n.venv\nenv/\nvenv/\nENV/\nenv.bak/\nvenv.bak/\n\n# Spyder project settings\n.spyderproject\n.spyproject\n\n# Rope project settings\n.ropeproject\n\n# mkdocs documentation\n/site\n\n# mypy\n.mypy_cache/\n.dmypy.json\ndmypy.json\n\n# Pyre type checker\n.pyre/\n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2022 Md Julkarnaeen\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "MANIFEST.in",
    "content": "include README.md"
  },
  {
    "path": "README.md",
    "content": "![](https://github.com/julkaar9/pynimate/blob/gh-pages/assets/pynimate_logo2.png)\n\n# Pynimate\n\n[![PyPI](https://img.shields.io/pypi/v/pynimate?color=orange)](https://pypi.org/project/pynimate/)\n[![Downloads](https://static.pepy.tech/personalized-badge/pynimate?period=total&units=international_system&left_color=grey&right_color=red&left_text=Downloads)](https://pepy.tech/project/pynimate) \n![Tests](https://github.com/julkaar9/pynimate/actions/workflows/tests.yml/badge.svg)\n[![License](https://img.shields.io/pypi/l/pynimate?color=green)](https://github.com/julkaar9/pynimate/blob/main/LICENSE)\n[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)  \n\nPython package for statistical data animations.\n![](https://github.com/julkaar9/pynimate/blob/main/docs/assets/example3.gif)\n![](https://github.com/julkaar9/pynimate/blob/main/docs/assets/lineplot_dark2.gif)\n\n## Installation\n### with pip\nPynimate is avaialbe at [pypi](https://pypi.org/project/pynimate/)\n``` sh\npip install pynimate\n```\n\n## How to use\nPynimate expects pandas dataframe formatted in this manner:  \nWhere the time column is set to index.\n```python\ntime, col1, col2, col3\n2012   1     2     1\n2013   1     1     2\n2014   2     1.5   3\n2015   2.5   2     3.5\n```\n## Bar Chart Example\n```python\nimport pandas as pd\nfrom matplotlib import pyplot as plt\n\nimport pynimate as nim\n\ndf = pd.DataFrame(\n    {\n        \"time\": [\"1960-01-01\", \"1961-01-01\", \"1962-01-01\"],\n        \"Afghanistan\": [1, 2, 3],\n        \"Angola\": [2, 3, 4],\n        \"Albania\": [1, 2, 5],\n        \"USA\": [5, 3, 4],\n        \"Argentina\": [1, 4, 5],\n    }\n).set_index(\"time\")\n\ncnv = nim.Canvas()\nbar = nim.Barhplot.from_df(df, \"%Y-%m-%d\", \"2d\")\nbar.set_time(callback=lambda i, datafier: datafier.data.index[i].year)\ncnv.add_plot(bar)\ncnv.animate()\nplt.show()\n``` \n## Documentation\nThe official documentation : https://julkaar9.github.io/pynimate/\n\n## License\n[MIT License (MIT)](LICENSE)"
  },
  {
    "path": "docs/guide/dark_mode.md",
    "content": "# Creating a dark themed bar chart race\n## The data\nWe will use the previous data for this animation\n\n```py\ndf = pd.DataFrame(\n    {\n        \"time\": [\"1960-01-01\", \"1961-01-01\", \"1962-01-01\"],\n        \"Afghanistan\": [1, 2, 3],\n        \"Angola\": [2, 3, 4],\n        \"Albania\": [1, 2, 5],\n        \"USA\": [5, 3, 4],\n        \"Argentina\": [1, 4, 5],\n    }\n).set_index(\"time\")\n```\n\n## Additional variables\nThere might be situations where we would like to show additional information for each column or date. \nFor instance in the previous data we would like to show continents of each country.  \nIn such cases use a Dataframe containing the additional variables in this format.\n```python \ncolumns,       continents\n\"Afghanistan\",  \"Asia\"\n\"Angola\",       \"Africa\"\n\"Albania\",      \"Europe\"\n\"USA\",          \"N America\"\n\"Argentina\"     \"S America\" \n```\nThis is a column-wise data where the index is the columns of the original data\n```python\ncol_var = pd.DataFrame(\n    {\n        \"columns\": [\"Afghanistan\", \"Angola\", \"Albania\", \"USA\", \"Argentina\"],\n        \"continent\": [\"Asia\", \"Africa\", \"Europe\", \"N America\", \"S America\"],\n    }\n).set_index(\"columns\")\n```\nSimilarly we can use a row-wise data where the index is same as the original data.\n```py\n    time           leap-year var2   ...\n    \"1960-01-01\"   \"yes\"     0\n    \"1961-01-01\"   \"no\"      3\n    \"1962-01-01\"   \"no\"      0\n\n```\nuse the `dfr.add_var(col_var=col_var)` module to add these dataframes.  \n\n## post_update\n`post_update(self, i)` is a function that runs for every frame.  It is very useful for extending \nthe basic animation. In this example we will use `post_update` to annotate continent names on bars. \n\n```py\ndef post_update(self, i):\n    # annotates continents next to bars\n    for ind, (bar, x, y) in enumerate(\n        zip(self.bar_attr.top_cols, self.bar_attr.bar_length, self.bar_attr.bar_rank)\n    ):\n        self.ax.text(\n            x - 0.3,\n            y,\n            self.dfr.col_var.loc[bar, \"continent\"],\n            ha=\"right\",\n            color=\"k\",\n            size=12,\n            zorder=ind,\n        )\n```\n## Changing colors\nAll the text colors are set to white and the background color is made dark blue (\"#001219\"). \n```py\n...\nbar.set_title(\"Sample Title\", color=\"w\", weight=600)\nbar.set_xlabel(\"xlabel\", color=\"w\")\n...\n``` \nWe have also manually set colors for each bar.\n```py\nbar_cols = {\n    \"Afghanistan\": \"#2a9d8f\",\n    \"Angola\": \"#e9c46a\",\n    \"Albania\": \"#e76f51\",\n    \"USA\": \"#a7c957\",\n    \"Argentina\": \"#e5989b\",\n}\n```\n## The final code\n```py\nimport os\n\nimport matplotlib as mpl\nimport numpy as np\nimport pandas as pd\nfrom matplotlib import pyplot as plt\n\nimport pynimate as nim\n\ndir_path = os.path.dirname(os.path.realpath(__file__))\n\nmpl.rcParams[\"axes.facecolor\"] = \"#001219\"\n# Turning off the spines\nfor side in [\"left\", \"right\", \"top\", \"bottom\"]:\n    mpl.rcParams[f\"axes.spines.{side}\"] = False\n\ndef post_update(self, i):\n    # annotates continents next to bars\n    for ind, (bar, x, y) in enumerate(\n        zip(self.bar_attr.top_cols, self.bar_attr.bar_length, self.bar_attr.bar_rank)\n    ):\n        self.ax.text(\n            x - 0.3,\n            y,\n            self.dfr.col_var.loc[bar, \"continent\"],\n            ha=\"right\",\n            color=\"k\",\n            size=12,\n            zorder=ind,\n        )\n\ndf = pd.read_csv(dir_path + \"/data/sample.csv\").set_index(\"time\")\ncol_var = pd.DataFrame(\n    {\n        \"columns\": [\"Afghanistan\", \"Angola\", \"Albania\", \"USA\", \"Argentina\"],\n        \"continent\": [\"Asia\", \"Africa\", \"Europe\", \"N America\", \"S America\"],\n    }\n).set_index(\"columns\")\n\nbar_cols = {\n    \"Afghanistan\": \"#2a9d8f\",\n    \"Angola\": \"#e9c46a\",\n    \"Albania\": \"#e76f51\",\n    \"USA\": \"#a7c957\",\n    \"Argentina\": \"#e5989b\",\n}\n\ncnv = nim.Canvas(figsize=(12.8, 7.2), facecolor=\"#001219\")\n\ndfr = nim.BarDatafier(df, \"%Y-%m-%d\", \"3d\")\ndfr.add_var(col_var=col_var)\n\nbar = nim.Barhplot(dfr, post_update=post_update, rounded_edges=True, grid=False)\n\nbar.set_column_colors(bar_cols)\nbar.set_title(\"Sample Title\", color=\"w\", weight=600)\nbar.set_xlabel(\"xlabel\", color=\"w\")\nbar.set_time(\n    callback=lambda i, datafier: datafier.data.index[i].strftime(\"%b, %Y\"), color=\"w\"\n)\nbar.set_text(\n    \"sum\",\n    callback=lambda i, datafier: f\"Total :{np.round(datafier.data.iloc[i].sum(), 2)}\",\n    size=20,\n    x=0.72,\n    y=0.20,\n    color=\"w\",\n)\nbar.set_bar_annots(color=\"w\", size=13)\nbar.set_xticks(colors=\"w\", length=0, labelsize=13)\nbar.set_yticks(colors=\"w\", labelsize=13)\nbar.set_bar_border_props(\n    edge_color=\"black\", pad=0.1, mutation_aspect=1, radius=0.2, mutation_scale=0.6\n)\ncnv.add_plot(bar)\ncnv.animate()\nplt.show()\n```\n## Result!\n![](../assets/example3.gif)"
  },
  {
    "path": "docs/guide/lineplot_darkmode.md",
    "content": "# Creating a dark themed Animated Line plot\n## The data\nWe will be using [Covid 19 data from kaggle by 'SRK and Devakumar K. P'](https://www.kaggle.com/datasets/sudalairajkumar/covid19-in-india?select=covid_19_india.csv). You can use the already cleaned data from examples/data/Covid_IN.\n\n|date      |cases|cured|\n|----------|-----|-----|\n|2020-03-28|185.0|13.0 |\n|2020-03-29|115.0|16.0 |\n|2020-03-30|181.0|6.0  |\n|2020-03-31|154.0|22.0 |\n|2020-04-01|475.0|20.0 |\n|2020-04-02|235.0|12.0 |\n|2020-04-03|401.0|10.0 |\n\n## Theming\nLet us setup the colors for the lineplot. We will be using `#001219` as the canvas color.\n```python \n#Customizing matplotlib\n\nimport matplotlib as mpl\nfor side in [\"left\", \"right\", \"top\", \"bottom\"]:\n    mpl.rcParams[f\"axes.spines.{side}\"] = False\nmpl.rcParams[\"figure.facecolor\"] = \"#001219\"\nmpl.rcParams[\"axes.facecolor\"] = \"#001219\"\nmpl.rcParams[\"savefig.facecolor\"] = \"#001219\"\n```\nWe will also set all text colors to white.   \n\n## post_update\n`post_update(self, i)` is a function that runs for every frame.  It is very useful for extending \nthe basic animation. In this example we will use `post_update` to format the xtick labels.   \n`human_readable` converts large numbers to human readable format.\n\n```py\ndef post(self, i):\n    self.ax.yaxis.set_major_formatter(\n        tick.FuncFormatter(lambda x, pos: human_readable(x))\n    )\n```\n## Customizing line styles\nUse `.set_column_linestyles()` to set linestyles. We will set 'cases' to solid and 'cured' to dashed.\n```py\n#Linestyle defaults to solid\nplot.set_column_linestyles({\"cured\": \"dashed\"})\n``` \n \n## The final code\n```py\nimport os\n\nimport matplotlib as mpl\nimport matplotlib.pyplot as plt\nimport matplotlib.ticker as tick\nimport pandas as pd\n\nimport pynimate as nim\nfrom pynimate.utils import human_readable\n\nfor side in [\"left\", \"right\", \"top\", \"bottom\"]:\n    mpl.rcParams[f\"axes.spines.{side}\"] = False\nmpl.rcParams[\"figure.facecolor\"] = \"#001219\"\nmpl.rcParams[\"axes.facecolor\"] = \"#001219\"\nmpl.rcParams[\"savefig.facecolor\"] = \"#001219\"\n\ndir_path = os.path.dirname(os.path.realpath(__file__))\n\n\ndef post(self, i):\n    self.ax.yaxis.set_major_formatter(\n        tick.FuncFormatter(lambda x, pos: human_readable(x))\n    )\n\n\ndf = pd.read_csv(dir_path + \"/data/covid_IN.csv\").set_index(\"time\")\ncnv = nim.Canvas()\ndfr = nim.LineDatafier(df, \"%Y-%m-%d\", \"12h\")\nplot = nim.Lineplot(\n    dfr,\n    post_update=post,\n    palettes=[\"Set3\"],\n    scatter_markers=False,\n    legend=True,\n    fixed_ylim=True,\n    grid=False,\n)\nplot.set_column_linestyles({\"cured\": \"dashed\"})\nplot.set_title(\"Covid cases India(2021)\", y=1.05, color=\"w\", weight=600)\nplot.set_xlabel(\"xlabel\", color=\"w\")\nplot.set_time(\n    callback=lambda i, datafier: datafier.data.index[i].strftime(\"%d %b, %Y\"),\n    color=\"w\",\n    size=15,\n)\nplot.set_line_annots(lambda col, val: f\"({human_readable(val)})\", color=\"w\")\nplot.set_legend(labelcolor=\"w\")\nplot.set_text(\n    \"sum\",\n    callback=lambda i, datafier: f\"Total cases :{human_readable(datafier.data.cases.iloc[:i+1].sum() )}\",\n    size=10,\n    x=0.8,\n    y=0.20,\n    color=\"w\",\n)\nplot.set_xticks(colors=\"w\", length=0, labelsize=10)\nplot.set_yticks(colors=\"w\", labelsize=10)\ncnv.add_plot(plot)\ncnv.animate()\ncnv.save(\"lineplot_dark\", 24)\nplt.show()\n```\n(note: this gif has gone through some size and frame reduction, so you should get a better looking animation)\n## Result!\n![](../assets/lineplot_dark.gif)"
  },
  {
    "path": "docs/guide/starter.md",
    "content": "# Welcome to pynimate\nPynimate is a python package for statistical data animations.\n\n## Installation\n### with pip\n\nYou can install pynimate using [`pip`][pip]\n  [pip]: https://pypi.org/project/pynimate/\n``` sh\npip install pynimate\n```\n\n## Import\nPynimate is generally imported as `nim` and this convention is followed throughout the documentation.\n``` python\nimport pynimate as nim\n```\n\n## Canvas\nThe Canvas class is used as a base for the animations, it handles the matplotlib figure, subplots\nas well as creating and saving animations.\n\n## Basic Animations\nWe will go through some basic data animations using pynimate.\n\n## Bar Chart Race\nCreate a Bar Chart Race using the `Barhplot` module.\n\nPandas is a dependency and used for data manipulation, your data have to be a pandas `DataFrame`.\nThe data needs to be in the following format,  \nwhere the time column is set to index.\n```python\ntime, col1, col2, col3\n2012   1     2     1\n2013   1     1     2\n2014   2     1.5   3\n2015   2.5   2     3.5\n```\n### Pandas setup\nUse pandas to import your data and set the time column as index.\n```python \nimport pandas as pd\ndf = pd.read_csv('data.csv').set_index('time')\n```\n\nHere is a sample data that we will work with.\n```py\n\ndf = pd.DataFrame(\n    {\n        \"time\": [\"1960-01-01\", \"1961-01-01\", \"1962-01-01\"],\n        \"Afghanistan\": [1, 2, 3],\n        \"Angola\": [2, 3, 4],\n        \"Albania\": [1, 2, 5],\n        \"USA\": [5, 3, 4],\n        \"Argentina\": [1, 4, 5],\n    }\n).set_index(\"time\")\n```\n\n### Datafiers\nDatafiers or Data Modifiers are helper modules that handles the data preparation part.  \nThe dafafier for Barhplot is BarDatafier\n### Barhplot\nBarhplot can be initialized in two different ways  \neither by passing the BarDatafier\n```py\ndfr = nim.BarDatafier(df, \"%Y-%m-%d\", \"2d\")  \nbar = nim.Barhplot(dfr)\n```\nor by passing the pandas dataframe directly\n```py  \nbar = nim.Barhplot.from_df(df, \"%Y-%m-%d\", \"2d\")\n```\nIn both case there are three required arguments.  \n\n`data`: The data to be plotted and animated.  \n`time_format`: The date-time format of the data index. In our case it is `\"%Y-%m-%d\"`.  \n`ip_freq`: The interpolation frequency. Most data in their original form are not suitable for animations, Why?\nLets understand the absolute basics of these animations. Consider this data:  \n```python\ntime, col1, col2\n2012   1     3  \n2013   2     2   \n2014   3     1\n```\nThis will yield three bar plots, one for each row. Now a typical video is of 24 fps, i.e every second consists of 24 frames.\nor in our case each second should consist of 24 images of static plots.  \nSo if we were to plot this, the video would be 3/24 second long.  \n\nThis is where interpolation(Linear) comes to play, if we were to interpolate the data quarterly,  \nThe new data will be\n```py\n   time     col1  col2\n2012-01-01  1.00  3.00\n2012-04-01  1.25  2.75\n2012-07-01  1.50  2.50\n2012-10-01  1.75  2.25\n2013-01-01  2.00  2.00\n2013-04-01  2.25  1.75\n2013-07-01  2.50  1.50\n2013-10-01  2.75  1.25\n2014-01-01  3.00  1.00\n```  \nNow we have 9 rows, so our video will be 9/24 seconds long.\n\nIn general you will be plotting a much larger data, so your video will be much larger.  \nThe interpolation is mostly used to make the video smooth.  \n\nYou might wonder whether this interpolation will misrepresent the plot. Considering there is no way to\nknow what the original values are between the actual intervals.  \n\nThat is something for the user to decide. If your data is large enough, you wont need interpolation.\nIn such case set `ip_freq = None`.\n\nNow that the fundamentals are discussed, use Barplot to create the animation.  \n```py\n# import matplotlib if you wish to see the animation in gui\nimport pandas as pd\nfrom matplotlib import pyplot as plt\n\nimport pynimate as nim\n\ndf = pd.DataFrame(\n    {\n        \"time\": [\"1960-01-01\", \"1961-01-01\", \"1962-01-01\"],\n        \"Afghanistan\": [1, 2, 3],\n        \"Angola\": [2, 3, 4],\n        \"Albania\": [1, 2, 5],\n        \"USA\": [5, 3, 4],\n        \"Argentina\": [1, 4, 5],\n    }\n).set_index(\"time\")\n\ncnv = nim.Canvas()\n# Interpolation frequency is 2 days\nbar = nim.Barhplot.from_df(df, \"%Y-%m-%d\", \"2d\")\n# use set_time to draw the datetime in the canvas\n# here we are using a callback that returns datetime formatted in month, year\nbar.set_time(callback=lambda i, datafier: datafier.data.index[i].strftime(\"%b, %Y\"))\n# add the bar plot to the canvas\ncnv.add_plot(bar)\ncnv.animate()\nplt.show()\n```\n\n### Save the animation\nUse `Canvas.save()` to save the animation.\n#### As GIF\nMatplotlib uses pillow under the hood to save gifs, however you can use writer of your choice.\n```py\ncnv.save(\"file\", 24, \"gif\")\n```\n\n#### As mp4\n\n`ffmpeg` is a standard writer for saving as mp4\n```py\npip install ffmpeg-python\n```\nor \n```py\nconda install ffmpeg\n```\nUse `Canvas.save()` to save the animation\n```py\ncnv.save(\"file\", 24 ,\"mp4\")\n```\n\n## Result!\n![](../assets/example1.gif)\n"
  },
  {
    "path": "docs/index.md",
    "content": "![](assets/pynimate_logo2.png)\n\n# Pynimate\n[![PyPI](https://img.shields.io/pypi/v/pynimate?color=orange)](https://pypi.org/project/pynimate/)\n[![Downloads](https://static.pepy.tech/personalized-badge/pynimate?period=total&units=international_system&left_color=grey&right_color=red&left_text=Downloads)](https://pepy.tech/project/pynimate) \n![Tests](https://github.com/julkaar9/pynimate/actions/workflows/tests.yml/badge.svg)\n[![License](https://img.shields.io/pypi/l/pynimate?color=green)](https://github.com/julkaar9/pynimate/blob/main/LICENSE)\n[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)  \n\nPython package for statistical data animations.\n\n## Installation\n### with pip\n\nYou can install pynimate using [`pip`][pip]\n  [pip]: https://pypi.org/project/pynimate/\n``` sh\npip install pynimate\n```\n\n## How to use\nPynimate expects pandas dataframe formatted in this manner:  \nWhere the time column is set to index.\n```python\ntime, col1, col2, col3\n2012   1     2     1\n2013   1     1     2\n2014   2     1.5   3\n2015   2.5   2     3.5\n```\n## Bar Chart Example\n```python\nimport pandas as pd\nfrom matplotlib import pyplot as plt\n\nimport pynimate as nim\n\ndf = pd.DataFrame(\n    {\n        \"time\": [\"1960-01-01\", \"1961-01-01\", \"1962-01-01\"],\n        \"Afghanistan\": [1, 2, 3],\n        \"Angola\": [2, 3, 4],\n        \"Albania\": [1, 2, 5],\n        \"USA\": [5, 3, 4],\n        \"Argentina\": [1, 4, 5],\n    }\n).set_index(\"time\")\n\ncnv = nim.Canvas()\nbar = nim.Barhplot.from_df(df, \"%Y-%m-%d\", \"2d\")\nbar.set_time(callback=lambda i, datafier: datafier.data.index[i].strftime(\"%b, %Y\"))\ncnv.add_plot(bar)\ncnv.animate()\nplt.show()\n```\n\n![](assets/example1.gif)"
  },
  {
    "path": "docs/reference/barhplot.md",
    "content": "# Barhplot\nSee Baseplot for inherited modules.\n## Barhplot\n::: pynimate.barhplot.Barhplot\n    handler: python\n    options:\n      docstring_style: numpy\n      merge_init_into_class: true\n      members:\n        - from_df\n        - get_ith_bar_attrs\n        - set_xylim\n        - set_barh\n        - set_bar_annots\n        - set_bar_border_props\n      show_root_heading: false\n      show_source: false"
  },
  {
    "path": "docs/reference/barplot.md",
    "content": "# Barplot\n*Barplot is deprecated, use barhplot instead.*\n## Barplot\n::: pynimate.bar.Barplot\n    handler: python\n    options:\n      docstring_style: numpy\n      merge_init_into_class: true\n      members:\n        - add_var\n        - set_bar_color \n        - getTopXY\n        - set_xylim\n        - set_title\n        - set_xlabel\n        - set_time\n        - set_text\n        - remove_text\n        - set_bar_border_props\n        - set_barh\n        - set_xticks\n        - set_yticks\n        - set_grid\n        - set_bar_annots\n        - add_extras\n      show_root_heading: false\n      show_source: false"
  },
  {
    "path": "docs/reference/baseplot.md",
    "content": "# Baseplot\n## Baseplot\n::: pynimate.baseplot.Baseplot\n    handler: python\n    options:\n      docstring_style: numpy\n      merge_init_into_class: true\n      members:\n        - from_df\n        - generate_column_colors\n        - set_column_colors \n        - set_xylim \n        - set_title\n        - set_xlabel \n        - set_time\n        - set_text\n        - remove_text\n        - set_xticks\n        - set_yticks\n        - set_grid\n      show_root_heading: false\n      show_source: false"
  },
  {
    "path": "docs/reference/canvas.md",
    "content": "# Canvas\n## Canvas\n::: pynimate.canvas.Canvas\n    handler: python\n    options:\n      docstring_style: numpy\n      merge_init_into_class: true\n      members:\n        - add_plot\n        - animate\n        - save\n      show_root_heading: false\n      show_source: false"
  },
  {
    "path": "docs/reference/datafiers/bar_datafier.md",
    "content": "# BarDatafier \n## BarDatafier\n::: pynimate.datafier.BarDatafier\n    handler: python\n    options:\n      docstring_style: numpy\n      merge_init_into_class: true\n      members:\n        - get_data_ranks\n        - get_top_cols\n      show_root_heading: false\n      show_source: false"
  },
  {
    "path": "docs/reference/datafiers/base_datafier.md",
    "content": "# BaseDatafier \n## BaseDatafier\n::: pynimate.datafier.BaseDatafier\n    handler: python\n    options:\n      docstring_style: numpy\n      merge_init_into_class: true\n      members:\n        - add_var\n        - interpolate_even\n        - interpolate_data\n      show_root_heading: false\n      show_source: false"
  },
  {
    "path": "docs/reference/datafiers/datafier.md",
    "content": "# Datafier\n*Datafier is deprecated, use plot specific datafiers instead.*\n## Datafier\n::: pynimate.datafier.Datafier\n    handler: python\n    options:\n      docstring_style: numpy\n      merge_init_into_class: true\n      members:\n        - add_var\n        - interpolate_even\n        - get_prepared_data\n        - get_top_cols\n        - get_bar_colors\n      show_root_heading: false\n      show_source: false"
  },
  {
    "path": "docs/reference/datafiers/line_datafier.md",
    "content": "# LineDatafier \n## LineDatafier\n::: pynimate.datafier.LineDatafier\n    handler: python\n    options:\n      docstring_style: numpy\n      merge_init_into_class: true\n      members: \n        - prepare_data\n      show_root_heading: false\n      show_source: false"
  },
  {
    "path": "docs/reference/lineplot.md",
    "content": "# Lineplot\nSee Baseplot for inherited modules.\n## Lineplot\n::: pynimate.lineplot.Lineplot\n    handler: python\n    options:\n      docstring_style: numpy\n      merge_init_into_class: true\n      members:\n        - from_df\n        - set_column_linestyles\n        - set_line\n        - set_line_annots\n        - set_line_head\n        - set_marker\n        - set_legend \n      show_root_heading: false\n      show_source: false"
  },
  {
    "path": "docs/reference/utils.md",
    "content": "# Helper Functions\n## Utils\n::: pynimate.utils\n    handler: python\n    options:\n      docstring_style: numpy\n      members:\n        - human_readable \n      show_root_heading: false\n      show_source: false"
  },
  {
    "path": "examples/__init__.py",
    "content": ""
  },
  {
    "path": "examples/data/covid_IN.csv",
    "content": "time,cases,cured\n2020-01-30,,0.0\n2020-01-31,0.0,0.0\n2020-02-01,1.0,0.0\n2020-02-02,1.0,0.0\n2020-02-03,0.0,0.0\n2020-02-04,0.0,0.0\n2020-02-05,0.0,0.0\n2020-02-06,0.0,0.0\n2020-02-07,0.0,0.0\n2020-02-08,0.0,0.0\n2020-02-09,0.0,0.0\n2020-02-10,0.0,0.0\n2020-02-11,0.0,0.0\n2020-02-12,0.0,0.0\n2020-02-13,0.0,0.0\n2020-02-14,0.0,0.0\n2020-02-15,0.0,0.0\n2020-02-16,0.0,0.0\n2020-02-17,0.0,0.0\n2020-02-18,0.0,0.0\n2020-02-19,0.0,0.0\n2020-02-20,0.0,0.0\n2020-02-21,0.0,0.0\n2020-02-22,0.0,0.0\n2020-02-23,0.0,0.0\n2020-02-24,0.0,0.0\n2020-02-25,0.0,0.0\n2020-02-26,0.0,0.0\n2020-02-27,0.0,0.0\n2020-02-28,0.0,0.0\n2020-02-29,0.0,0.0\n2020-03-01,0.0,0.0\n2020-03-02,2.0,0.0\n2020-03-03,1.0,3.0\n2020-03-04,22.0,0.0\n2020-03-05,2.0,0.0\n2020-03-06,1.0,0.0\n2020-03-07,3.0,0.0\n2020-03-08,5.0,0.0\n2020-03-09,7.0,0.0\n2020-03-10,12.0,0.0\n2020-03-11,2.0,0.0\n2020-03-12,14.0,0.0\n2020-03-13,7.0,0.0\n2020-03-14,3.0,7.0\n2020-03-15,26.0,6.5\n2020-03-16,4.0,0.0\n2020-03-17,23.0,1.0\n2020-03-18,14.0,0.0\n2020-03-19,22.0,6.0\n2020-03-20,50.0,3.0\n2020-03-21,60.0,0.0\n2020-03-22,77.0,1.0\n2020-03-23,73.0,0.0\n2020-03-24,86.0,16.0\n2020-03-25,87.0,3.0\n2020-03-26,88.0,2.0\n2020-03-27,30.0,22.0\n2020-03-28,185.0,13.0\n2020-03-29,115.0,16.0\n2020-03-30,181.0,6.0\n2020-03-31,154.0,22.0\n2020-04-01,475.0,20.0\n2020-04-02,235.0,12.0\n2020-04-03,401.0,10.0\n2020-04-04,602.0,50.0\n2020-04-05,505.0,62.0\n2020-04-06,704.0,44.0\n2020-04-07,508.0,34.0\n2020-04-08,485.0,58.0\n2020-04-09,591.0,67.0\n2020-04-10,896.0,38.0\n2020-04-11,768.0,137.0\n2020-04-12,918.0,112.0\n2020-04-13,905.0,215.0\n2020-04-14,1463.0,210.0\n2020-04-15,1118.0,154.0\n2020-04-16,826.0,171.0\n2020-04-17,1076.0,252.0\n2020-04-18,957.0,248.0\n2020-04-19,1324.0,287.0\n2020-04-20,1540.0,540.0\n2020-04-21,1329.0,418.0\n2020-04-22,1486.0,700.0\n2020-04-23,1229.0,365.0\n2020-04-24,1752.0,489.0\n2020-04-25,1441.0,396.0\n2020-04-26,1712.0,704.0\n2020-04-27,1555.0,448.0\n2020-04-28,1674.0,665.0\n2020-04-29,1875.0,770.0\n2020-04-30,1621.0,576.0\n2020-05-01,1642.0,692.0\n2020-05-02,2185.0,886.0\n2020-05-03,2967.0,936.0\n2020-05-04,2712.0,875.0\n2020-05-05,3875.0,1399.0\n2020-05-06,2680.0,1022.0\n2020-05-07,3561.0,1084.0\n2020-05-08,3390.0,1273.0\n2020-05-09,3320.0,1307.0\n2020-05-10,3277.0,1511.0\n2020-05-11,4213.0,1559.0\n2020-05-12,3604.0,1538.0\n2020-05-13,3525.0,1931.0\n2020-05-14,3722.0,1849.0\n2020-05-15,3967.0,1685.0\n2020-05-16,3740.0,2233.0\n2020-05-17,4927.0,3956.0\n2020-05-18,5122.0,2715.0\n2020-05-19,4566.0,2350.0\n2020-05-20,5329.0,3124.0\n2020-05-21,5302.0,3002.0\n2020-05-22,5871.0,3234.0\n2020-05-23,6375.0,3250.0\n2020-05-24,6328.0,2657.0\n2020-05-25,6673.0,3280.0\n2020-05-26,6207.0,2770.0\n2020-05-27,5344.0,3935.0\n2020-05-28,6247.0,3266.0\n2020-05-29,7125.0,3414.0\n2020-05-30,7594.0,11264.0\n2020-05-31,7932.0,4614.0\n2020-06-01,8253.0,4835.0\n2020-06-02,7387.0,3708.0\n2020-06-03,8200.0,4776.0\n2020-06-04,8944.0,3804.0\n2020-06-05,9724.0,5355.0\n2020-06-06,9305.0,4611.0\n2020-06-07,9558.0,5220.0\n2020-06-08,9399.0,4802.0\n2020-06-09,10373.0,5120.0\n2020-06-10,9561.0,5991.0\n2020-06-11,10290.0,5823.0\n2020-06-12,11574.0,6166.0\n2020-06-13,11789.0,7135.0\n2020-06-14,12477.0,8049.0\n2020-06-15,11966.0,7419.0\n2020-06-16,9955.0,10215.0\n2020-06-17,10385.0,6922.0\n2020-06-18,12451.0,7390.0\n2020-06-19,13362.0,10386.0\n2020-06-20,14178.0,9120.0\n2020-06-21,15551.0,13925.0\n2020-06-22,16116.0,9440.0\n2020-06-23,14750.0,10994.0\n2020-06-24,15842.0,10495.0\n2020-06-25,16570.0,13012.0\n2020-06-26,17666.0,13940.0\n2020-06-27,18652.0,10244.0\n2020-06-28,20090.0,13832.0\n2020-06-29,20013.0,12010.0\n2020-06-30,18803.0,13099.0\n2020-07-01,18742.0,13157.0\n2020-07-02,19231.0,11881.0\n2020-07-03,21704.0,20032.0\n2020-07-04,23803.0,14335.0\n2020-07-05,25220.0,14856.0\n2020-07-06,23964.0,15350.0\n2020-07-07,22131.0,15515.0\n2020-07-08,22768.0,16883.0\n2020-07-09,25512.0,19547.0\n2020-07-10,26730.0,19138.0\n2020-07-11,27859.0,19870.0\n2020-07-12,29029.0,19235.0\n2020-07-13,29367.0,18850.0\n2020-07-14,28677.0,17989.0\n2020-07-15,30084.0,20572.0\n2020-07-16,32934.0,20783.0\n2020-07-17,35710.0,22942.0\n2020-07-18,35252.0,17994.0\n2020-07-19,39065.0,23672.0\n2020-07-20,40425.0,22664.0\n2020-07-21,37148.0,24491.0\n2020-07-22,37724.0,28472.0\n2020-07-23,45720.0,29557.0\n2020-07-24,49310.0,34602.0\n2020-07-25,48916.0,32223.0\n2020-07-26,48661.0,36145.0\n2020-07-27,49931.0,31991.0\n2020-07-28,47703.0,35175.0\n2020-07-29,48513.0,35286.0\n2020-07-30,52123.0,32553.0\n2020-07-31,55078.0,37223.0\n2020-08-01,57118.0,36569.0\n2020-08-02,54735.0,51255.0\n2020-08-03,52972.0,40574.0\n2020-08-04,52050.0,44306.0\n2020-08-05,52509.0,51706.0\n2020-08-06,56282.0,46121.0\n2020-08-07,62538.0,49769.0\n2020-08-08,61537.0,48900.0\n2020-08-09,64399.0,53879.0\n2020-08-10,62064.0,54859.0\n2020-08-11,53601.0,47746.0\n2020-08-12,60963.0,56110.0\n2020-08-13,66999.0,56383.0\n2020-08-14,64553.0,55573.0\n2020-08-15,65002.0,57381.0\n2020-08-16,63490.0,53322.0\n2020-08-17,57981.0,57584.0\n2020-08-18,55079.0,57937.0\n2020-08-19,64531.0,60091.0\n2020-08-20,69652.0,58794.0\n2020-08-21,68898.0,62282.0\n2020-08-22,69878.0,63631.0\n2020-08-23,69239.0,57989.0\n2020-08-24,61408.0,57469.0\n2020-08-25,60975.0,66550.0\n2020-08-26,67151.0,63173.0\n2020-08-27,75760.0,56013.0\n2020-08-28,77266.0,60177.0\n2020-08-29,76472.0,65050.0\n2020-08-30,78761.0,64935.0\n2020-08-31,78512.0,60868.0\n2020-09-01,69921.0,65081.0\n2020-09-02,78357.0,62026.0\n2020-09-03,83883.0,68584.0\n2020-09-04,83341.0,66659.0\n2020-09-05,86432.0,70072.0\n2020-09-06,90632.0,73642.0\n2020-09-07,90802.0,69564.0\n2020-09-08,75809.0,73521.0\n2020-09-09,89706.0,74894.0\n2020-09-10,95735.0,72939.0\n2020-09-11,96551.0,70880.0\n2020-09-12,97570.0,81533.0\n2020-09-13,94372.0,78399.0\n2020-09-14,92071.0,77512.0\n2020-09-15,83809.0,79292.0\n2020-09-16,90123.0,82961.0\n2020-09-17,97894.0,82719.0\n2020-09-18,96424.0,87472.0\n2020-09-19,93337.0,95880.0\n2020-09-20,92605.0,94612.0\n2020-09-21,86961.0,93356.0\n2020-09-22,75083.0,101468.0\n2020-09-23,83347.0,89746.0\n2020-09-24,86508.0,87374.0\n2020-09-25,86052.0,81177.0\n2020-09-26,85362.0,93420.0\n2020-09-27,88600.0,92043.0\n2020-09-28,82170.0,74893.0\n2020-09-29,70589.0,84877.0\n2020-09-30,80472.0,86428.0\n2020-10-01,86821.0,85376.0\n2020-10-02,81484.0,78877.0\n2020-10-03,79476.0,75628.0\n2020-10-04,75829.0,82260.0\n2020-10-05,74442.0,76737.0\n2020-10-06,61267.0,75787.0\n2020-10-07,72049.0,82203.0\n2020-10-08,78524.0,83011.0\n2020-10-09,70496.0,78365.0\n2020-10-10,73272.0,82753.0\n2020-10-11,74383.0,89154.0\n2020-10-12,66732.0,71559.0\n2020-10-13,55342.0,77760.0\n2020-10-14,63509.0,74632.0\n2020-10-15,67708.0,81514.0\n2020-10-16,63371.0,70338.0\n2020-10-17,62212.0,70816.0\n2020-10-18,61871.0,72614.0\n2020-10-19,55722.0,66399.0\n2020-10-20,46790.0,69720.0\n2020-10-21,54044.0,61775.0\n2020-10-22,55839.0,79415.0\n2020-10-23,54366.0,73979.0\n2020-10-24,53370.0,67549.0\n2020-10-25,50129.0,62077.0\n2020-10-26,45148.0,59105.0\n2020-10-27,36470.0,63842.0\n2020-10-28,43893.0,58439.0\n2020-10-29,49881.0,56480.0\n2020-10-30,48648.0,57386.0\n2020-10-31,48268.0,59454.0\n2020-11-01,46963.0,58684.0\n2020-11-02,45231.0,53285.0\n2020-11-03,38310.0,58323.0\n2020-11-04,46253.0,53357.0\n2020-11-05,50210.0,55331.0\n2020-11-06,47638.0,54157.0\n2020-11-07,50356.0,53920.0\n2020-11-08,45674.0,49082.0\n2020-11-09,45903.0,48405.0\n2020-11-10,38073.0,46084.0\n2020-11-11,44281.0,50326.0\n2020-11-12,47905.0,52718.0\n2020-11-13,44879.0,49079.0\n2020-11-14,44684.0,47992.0\n2020-11-15,41100.0,42156.0\n2020-11-16,30548.0,43851.0\n2020-11-17,29163.0,40791.0\n2020-11-18,38617.0,44739.0\n2020-11-19,45576.0,48493.0\n2020-11-20,45882.0,44807.0\n2020-11-21,46232.0,49715.0\n2020-11-22,45209.0,43493.0\n2020-11-23,44059.0,41024.0\n2020-11-24,37975.0,42314.0\n2020-11-25,44376.0,37816.0\n2020-11-26,44489.0,36367.0\n2020-11-27,43082.0,39379.0\n2020-11-28,41322.0,41452.0\n2020-11-29,41810.0,42298.0\n2020-11-30,38772.0,45333.0\n2020-12-01,31118.0,41985.0\n2020-12-02,36604.0,43062.0\n2020-12-03,35551.0,40726.0\n2020-12-04,36595.0,42916.0\n2020-12-05,36652.0,42533.0\n2020-12-06,36011.0,41970.0\n2020-12-07,32981.0,39109.0\n2020-12-08,26567.0,39045.0\n2020-12-09,32080.0,36635.0\n2020-12-10,31521.0,37725.0\n2020-12-11,29398.0,37528.0\n2020-12-12,30006.0,33494.0\n2020-12-13,30254.0,33136.0\n2020-12-14,27071.0,30695.0\n2020-12-15,22004.0,34477.0\n2020-12-16,26443.0,33813.0\n2020-12-17,24010.0,33291.0\n2020-12-18,22890.0,31087.0\n2020-12-19,25152.0,29885.0\n2020-12-20,26624.0,29690.0\n2020-12-21,26921.0,25709.0\n2020-12-22,10186.0,30376.0\n2020-12-23,30736.0,26895.0\n2020-12-24,24712.0,29791.0\n2020-12-25,23067.0,24661.0\n2020-12-26,22273.0,22274.0\n2020-12-27,18732.0,21430.0\n2020-12-28,20021.0,21131.0\n2020-12-29,16432.0,24900.0\n2020-12-30,20549.0,26572.0\n2020-12-31,21822.0,26139.0\n2021-01-01,20035.0,23181.0\n2021-01-02,19079.0,22926.0\n2021-01-03,18177.0,20923.0\n2021-01-04,16504.0,19557.0\n2021-01-05,16375.0,29091.0\n2021-01-06,18088.0,21314.0\n2021-01-07,20346.0,19587.0\n2021-01-08,18139.0,20539.0\n2021-01-09,18222.0,19253.0\n2021-01-10,18645.0,19299.0\n2021-01-11,16311.0,16959.0\n2021-01-12,12584.0,18385.0\n2021-01-13,15968.0,17817.0\n2021-01-14,16946.0,17652.0\n2021-01-15,15590.0,15975.0\n2021-01-16,15158.0,16977.0\n2021-01-17,15144.0,17170.0\n2021-01-18,13788.0,14457.0\n2021-01-19,10064.0,17411.0\n2021-01-20,13823.0,16988.0\n2021-01-21,15223.0,19965.0\n2021-01-22,14545.0,18002.0\n2021-01-23,14256.0,17130.0\n2021-01-24,14849.0,15948.0\n2021-01-25,7648.0,13298.0\n2021-01-26,14657.0,15901.0\n2021-01-27,12689.0,13320.0\n2021-01-28,11666.0,14301.0\n2021-01-29,18855.0,20746.0\n2021-01-30,13083.0,14808.0\n2021-01-31,13052.0,13965.0\n2021-02-01,10448.0,11858.0\n2021-02-02,9614.0,13423.0\n2021-02-03,11039.0,14225.0\n2021-02-04,12899.0,17824.0\n2021-02-05,12408.0,15853.0\n2021-02-06,11713.0,14488.0\n2021-02-07,12059.0,11805.0\n2021-02-08,11831.0,11904.0\n2021-02-09,9110.0,14016.0\n2021-02-10,11067.0,13087.0\n2021-02-11,9096.0,11764.0\n2021-02-12,13136.0,15858.0\n2021-02-13,12143.0,11395.0\n2021-02-14,12194.0,11106.0\n2021-02-15,11649.0,9489.0\n2021-02-16,9121.0,11805.0\n2021-02-17,11610.0,11833.0\n2021-02-18,7159.0,11987.0\n2021-02-19,18915.0,10896.0\n2021-02-20,13993.0,10307.0\n2021-02-21,14264.0,11667.0\n2021-02-22,14199.0,9695.0\n2021-02-23,10584.0,13255.0\n2021-02-24,26214.0,14037.0\n2021-02-25,4266.0,11799.0\n2021-02-26,16577.0,12179.0\n2021-02-27,16488.0,12771.0\n2021-02-28,16752.0,11718.0\n2021-03-01,14418.0,11288.0\n2021-03-02,13378.0,12464.0\n2021-03-03,4078.0,13123.0\n2021-03-04,28318.0,14031.0\n2021-03-05,16838.0,13819.0\n2021-03-06,18327.0,14234.0\n2021-03-07,18711.0,14392.0\n2021-03-08,18599.0,14278.0\n2021-03-09,1474.0,16596.0\n2021-03-10,31835.0,20652.0\n2021-03-11,0.0,12917.0\n2021-03-12,22854.0,18100.0\n2021-03-13,48167.0,35114.0\n2021-03-14,25320.0,16637.0\n2021-03-15,26291.0,17455.0\n2021-03-16,24492.0,20191.0\n2021-03-17,28903.0,17741.0\n2021-03-18,35871.0,17741.0\n2021-03-19,39726.0,20654.0\n2021-03-20,40953.0,23653.0\n2021-03-21,43846.0,22956.0\n2021-03-22,46951.0,21180.0\n2021-03-23,40715.0,29785.0\n2021-03-24,47262.0,23907.0\n2021-03-25,53476.0,26490.0\n2021-03-26,59118.0,32987.0\n2021-03-27,62258.0,30386.0\n2021-03-28,62714.0,28739.0\n2021-03-29,68020.0,32231.0\n2021-03-30,56211.0,37028.0\n2021-03-31,53480.0,41280.0\n2021-04-01,76806.0,40382.0\n2021-04-02,76990.0,50356.0\n2021-04-03,89129.0,44202.0\n2021-04-04,93249.0,60048.0\n2021-04-05,103558.0,52847.0\n2021-04-06,96982.0,50143.0\n2021-04-07,115736.0,59856.0\n2021-04-08,126789.0,59258.0\n2021-04-09,131968.0,61899.0\n2021-04-10,145384.0,77567.0\n2021-04-11,152879.0,90584.0\n2021-04-12,168912.0,75086.0\n2021-04-13,161736.0,97168.0\n2021-04-14,184372.0,82339.0\n2021-04-15,200739.0,93528.0\n2021-04-16,217353.0,118302.0\n2021-04-17,234692.0,123354.0\n2021-04-18,261500.0,138423.0\n2021-04-19,273810.0,144178.0\n2021-04-20,259170.0,154761.0\n2021-04-21,295041.0,167457.0\n2021-04-22,314835.0,178841.0\n2021-04-23,332730.0,193279.0\n2021-04-24,346786.0,219838.0\n2021-04-25,349691.0,217113.0\n2021-04-26,352991.0,219272.0\n2021-04-27,323144.0,251827.0\n2021-04-28,360960.0,261162.0\n2021-04-29,379257.0,269507.0\n2021-04-30,386452.0,297540.0\n2021-05-01,401993.0,299988.0\n2021-05-02,392488.0,307865.0\n2021-05-03,368147.0,300732.0\n2021-05-04,357229.0,320289.0\n2021-05-05,382315.0,338439.0\n2021-05-06,412262.0,329113.0\n2021-05-07,414188.0,331507.0\n2021-05-08,401078.0,318609.0\n2021-05-09,403738.0,386444.0\n2021-05-10,366161.0,353818.0\n2021-05-11,329942.0,356082.0\n2021-05-12,348421.0,355338.0\n2021-05-13,362727.0,352181.0\n2021-05-14,343144.0,344776.0\n2021-05-15,326098.0,353299.0\n2021-05-16,311170.0,362437.0\n2021-05-17,281386.0,378741.0\n2021-05-18,263533.0,422436.0\n2021-05-19,267334.0,389851.0\n2021-05-20,276110.0,369077.0\n2021-05-21,259551.0,357295.0\n2021-05-22,257299.0,357630.0\n2021-05-23,240842.0,355102.0\n2021-05-24,222315.0,302544.0\n2021-05-25,196427.0,326850.0\n2021-05-26,208921.0,295955.0\n2021-05-27,211298.0,283135.0\n2021-05-28,186364.0,259459.0\n2021-05-29,173790.0,284601.0\n2021-05-30,165553.0,276309.0\n2021-05-31,152734.0,238022.0\n2021-06-01,127510.0,255287.0\n2021-06-02,132788.0,231456.0\n2021-06-03,134154.0,211499.0\n2021-06-04,132364.0,207071.0\n2021-06-05,120529.0,197894.0\n2021-06-06,114460.0,189232.0\n2021-06-07,100636.0,174399.0\n2021-06-08,86498.0,182282.0\n2021-06-09,92596.0,162664.0\n2021-06-10,94052.0,151367.0\n2021-06-11,91702.0,134580.0\n2021-06-12,84332.0,121311.0\n2021-06-13,80834.0,132062.0\n2021-06-14,70421.0,119501.0\n2021-06-15,60471.0,117525.0\n2021-06-16,62224.0,107628.0\n2021-06-17,67208.0,103570.0\n2021-06-18,62480.0,88977.0\n2021-06-19,60753.0,97743.0\n2021-06-20,58419.0,87619.0\n2021-06-21,53256.0,78190.0\n2021-06-22,42640.0,81839.0\n2021-06-23,50848.0,68817.0\n2021-06-24,54069.0,68885.0\n2021-06-25,51667.0,64527.0\n2021-06-26,48698.0,64818.0\n2021-06-27,50040.0,57944.0\n2021-06-28,46148.0,58578.0\n2021-06-29,37566.0,56994.0\n2021-06-30,45951.0,60729.0\n2021-07-01,48786.0,61588.0\n2021-07-02,46617.0,59384.0\n2021-07-03,44111.0,57477.0\n2021-07-04,43071.0,52299.0\n2021-07-05,39796.0,42352.0\n2021-07-06,34703.0,51864.0\n2021-07-07,43733.0,47240.0\n2021-07-08,45892.0,44291.0\n2021-07-09,43393.0,44459.0\n2021-07-10,42766.0,45254.0\n2021-07-11,41506.0,41526.0\n2021-07-12,37154.0,39649.0\n2021-07-13,32906.0,49007.0\n2021-07-14,38792.0,41000.0\n2021-07-15,41806.0,39130.0\n2021-07-16,38949.0,40026.0\n2021-07-17,38079.0,43916.0\n2021-07-18,41157.0,42004.0\n2021-07-19,38164.0,38660.0\n2021-07-20,30093.0,45254.0\n2021-07-21,42015.0,36977.0\n2021-07-22,41383.0,38652.0\n2021-07-23,35342.0,38740.0\n2021-07-24,39097.0,35087.0\n2021-07-25,39742.0,39972.0\n2021-07-26,39361.0,35968.0\n2021-07-27,29689.0,42363.0\n2021-07-28,43654.0,41678.0\n2021-07-29,43509.0,38465.0\n2021-07-30,44230.0,42360.0\n2021-07-31,41649.0,37291.0\n2021-08-01,41831.0,39258.0\n2021-08-02,40134.0,36946.0\n2021-08-03,30549.0,38887.0\n2021-08-04,42625.0,36668.0\n2021-08-05,42982.0,41726.0\n2021-08-06,44643.0,41096.0\n2021-08-07,38628.0,40017.0\n2021-08-08,39070.0,43910.0\n2021-08-09,35499.0,39686.0\n"
  },
  {
    "path": "examples/data/data.csv",
    "content": "time,Abby Johnson,Abdul Aziz Al Ghurair,Abigail Johnson,Akira Mori,Alain & Gerard Wertheimer,Alain &#38; Gerard Wertheimer,Alain Wertheimer,Alberto Bailleres,Alberto Bailleres Gonzalez,Alejandro Santo Domingo Davila,Alexander Abramov,Alexei Kuzmichev,Alexey Mordashov,Alice Walton,Aliko Dangote,Alisher Usmanov,Alwaleed Al Saud,Amancio Ortega,Amos Hostetter,Ananda Krishnan,Andrey Melnichenko,Anil Ambani,Ann Walton Kroenke,Anne Cox Chambers,Antonia Johnson,Antonio Ermirio de Moraes,August von Finck,Azim Premji,Beate Heister & Karl Albrecht Jr.,Bernard Arnault,Bernard Ecclestone,Bernard Marcus,Berthold & Theo Jr. Albrecht,Bill Gates,Birgit Rausing,Budi Hartono,Carl Cook,Carl Icahn,Carlos Alberto Sicupira,Carlos Slim,Carlos Slim Helu,Charlene de Carvalho-Heineken,Charles Bronfman,Charles Butt,Charles Ergen,Charles Koch,Charles Schwab,Charoen Sirivadhanabhakdi,Cheng Yu-tung,Christoph Henkel,Christy Walton,Colin Huang,Craig McCaw,Curt Engelhorn,Dan Duncan,David & Simon Reuben,David &#38; Simon Reuben,David Geffen,David Koch,David Sainsbury,David Tepper,David Thomson,Dhanin Chearavanont,Dieter Schwarz,Dietrich Mateschitz,Dilip Shanghvi,Dirce Navarro De Camargo,Dmitry Rybolovlev,Donald Bren,Donald Newhouse,Edgar Bronfman,Edward Johnson,Eike Batista,Eitaro Itoyama,Elaine Marshall,Eli Broad,Eliodoro,Eliodoro Matte,Elon Musk,Elon R Musk,Emmanuel Besnier,Enrique Banuelos,Eric Schmidt,Erivan Haub,Ernesto Bertarelli,Ferit Sahenk,Forrest Mars,Francois Pinault,Francoise Bettencourt Meyers,Galen Weston,Gautam Adani,Gennady Timchenko,Georg Schaeffler,George Kaiser,George Lucas,George Soros,Georgina Rinehart,Gerald Cavendish Grosvenor,Gerard Wertheimer,German Khan,German Larrea Mota Velasco,Gina Rinehart,Giorgio Armani,Giovanni Ferrero,Gordon Moore,Gunter Herz,Gustavo Cisneros,Hans Rausing,Hansjorg Wyss,Harold Hamm,Hasso Plattner,He Xiangjian,Heinz Hermann Thiele,Henry Cheng,Henry Hillman,Henry Ross Perot Sr,Henry Sy,Hinduja family,Horst Paulmann,Hubert Burda,Hui Ka Yan,Igor Zyuzin,Ingvar Kamprad,Iris Fontbona,Iskander Makhmudov,Jack Ma,Jack Taylor,Jacqueline Mars,James,James Goodnight,James Ratcliffe,James Simons,Jean-Claude Decaux,Jeff Bezos,Jeffrey Skoll,Jeronimo Arango,Jim Pattison,Jim Ratcliffe,Jim Simons,Jim Walton,Johanna Quandt,John Fredriksen,John Mars,John Menard Jr,John Paulson,Jon Huntsman,Jorge Paulo Lemann,Joseph Lau,Joseph Safra,Julia Flesher Koch,Ka-shing Li,Karl Albrecht,Karl-Heinz Kipp,Kazuo Okada,Kirk Kerkorian,Kjeld Kirk Kristiansen,Klaus-Michael Kuehne,Klaus-Michael Kuhne,Kumar Birla,Kun-Hee Lee,Kunio Busujima,Kushal Pal Singh,Kwok Thomas & Raymond,Kwok family,Lakshmi Mittal,Larry Ellison,Larry Page,Laurene Powell Jobs,Lawrence Ellison,Lee Bass,Lee Kun Hee,Lee Kun-Hee,Lee Man Tat,Lee Shau Kee,Lei Jun,Len Blavatnik,Leonard Blavatnik,Leonard Lauder,Leonardo Del Vecchio,Leonardo del Vecchio,Leonid Mikhelson,Lester Crown,Li Hejun,Li Ka-Shing,Li Ka-shing,Li Shufu,Liliane Bettencourt,Lorenzo Mendoza,Luciano Benetton,Lui Che Woo,Luis Carlos Sarmiento,Lukas Walton,Ma Huateng,MacKenzie Bezos,Marcel Herrmann Telles,Maria Franca Fissolo,Maria-Elisabeth & Georg Schaeffler,Maria-Elisabeth &#38; Georg Schaeffler,Mark Zuckerberg,Martin Ebner,Masatoshi Ito,Masayoshi Son,Mehmet Emin Karamehmet,Michael Bloomberg,Michael Dell,Michael Hartono,Michael Kadoorie,Michael Otto,Michele Ferrero,Micky Arison,Mikhail Fridman,Mikhail Prokhorov,Miuccia Prada,Mohamed Bin Issa Al Jaber,Mohammed Al Amoudi,Mukesh Ambani,Naguib Sawiris,Nassef Sawiris,Nasser Al-Kharafi,Nicky Oppenheimer,Nikolai Tsvetkov,Nobutada Saji,Oleg Deripaska,Onsi Sawiris,Pallonji Mistry,Patrick Drahi,Patrick Soon-Shiong,Paul Allen,Petr Kellner,Phil Knight,Philip &#38; Cristina Green,Philip Anschutz,Pierre Omidyar,Pony Ma,Prince Alwaleed Bin Talal Alsaud,R. Budi Hartono,Rahmi Koc,Ramesh Chandra,Ray Dalio,Reinhold Wurth,Ricardo Salinas,Ricardo Salinas Pliego,Richard Kinder,Riley Bechtel,Rinat Akhmetov,Rob Walton,Robert E \\Ted\\ Turner,Robert Kuok,Robin Li,Rolf Gerling,Roman Abramovich,Ronald Perelman,Rupert Murdoch,S. Robson Walton,Sammy Ofer,Samuel Newhouse,Savitri Jindal,Serge Dassault,Sergey Brin,Shari Arison,Shashi & Ravi Ruia,Shashi &#38; Ravi Ruia,Shau Kee Lee,Sheldon Adelson,Shiv Nadar,Sid Bass,Silvio Berlusconi,Spiro Latsis,Stefan Persson,Stefan Quandt,Stefano Pessina,Stephan Schmidheiny,Stephen Bechtel,Stephen Ross,Steve Ballmer,Steve Cohen,Steve Schwarzman,Sulaiman Al Rajhi,Suleiman Kerimov,Sumner Redstone,Sun Piaoyang,Sunil Mittal,Susanne Klatten,Tadashi Yanai,Takemitsu Takizaki,Theo Albrecht,\"Theo Albrecht, Jr.\",Thomas & Raymond Kwok,Thomas Peterffy,Thomas Pritzker,Ty Warner,Uday Kotak,Vagit Alekperov,Viktor Rashnikov,Viktor Vekselberg,Vladimir Lisin,Vladimir Potanin,Vladimir Yevtushenkov,Walter Haefner,Wang Jianlin,Wang Wei,Wang Wenyin,Warren Buffett,William Cook,William Ding,William Wrigley,Yang Huiyan,Yoshitaka Fukuda,Yu-tung Cheng,Zhang Zhidong,Zong Qinghou\n2001,,,9.1,,,5.0,,,,,,,,18.5,,,,6.6,3.3,,,,3.4,11.7,,3.5,5.0,6.9,,10.7,,,,58.7,9.0,,,3.7,,,10.8,,3.4,,8.8,,6.3,,,5.6,,,3.5,5.4,,,,3.4,,4.7,,,,,,,,,4.0,5.0,3.3,4.6,,3.3,,5.8,,,,,,,,4.0,10.5,,9.0,6.3,,4.0,,,,,,6.0,,6.5,,,,,,,5.4,4.8,5.3,7.7,,,5.4,,,,,3.8,,,,,,,13.0,,,,,9.0,4.4,5.7,,,,,,,,,,18.8,17.8,,9.0,,,3.8,,,,,12.6,,,3.5,6.4,,,,,,,,,11.5,,,,,26.0,4.3,,,,,,,,3.8,6.6,,,,,,,,15.6,4.5,5.5,,,,,,,,,,,3.3,4.5,5.6,3.7,4.5,10.5,,3.4,5.0,,4.1,,,,,,,,,6.0,4.5,,,,,,,,30.4,,4.3,,15.3,4.5,,20.0,,,,,3.5,,,,,,,8.8,3.7,,4.7,,,7.8,18.6,,5.0,,4.9,,3.7,,,5.9,,,3.8,10.3,4.6,5.3,,,3.5,,,16.6,,,,,12.6,,,,4.8,,,,,,5.5,4.0,,,,,,,,5.3,,,,32.3,,,,12.608092,,,,\n2002,,,8.6,3.4,,4.3,,,,,,,,20.5,,,,9.1,,,,,,10.1,,3.6,4.8,6.4,,7.0,3.0,3.0,,52.8,10.7,,,5.0,,,11.5,4.3,,,6.2,3.1,4.1,,,,,,,5.6,,,,4.0,3.1,4.3,,,,,,,,,4.0,5.0,3.0,4.3,,3.1,,5.2,,,,,,,,3.8,8.4,,9.0,3.1,,4.2,,,,,3.0,6.9,,6.7,,,,,,,6.1,,5.0,7.7,,,4.4,,,,3.0,3.9,,,,,,,13.4,,,,,9.0,4.1,4.8,,,,,,3.7,,,,20.8,18.4,,9.0,,,3.8,,,,,10.0,,3.4,,5.8,,,,,,,,,9.2,,,,,23.5,,,,,,,,,,6.6,,,3.4,,,,,14.9,4.4,4.9,,,,,,,,,,,,,,4.0,4.4,11.1,,3.1,6.5,,3.6,,,,,,,,,5.7,3.3,,,,,,,,25.2,,5.7,,5.1,4.6,,20.0,,,,,3.1,,,,3.0,,,3.8,4.1,,4.3,3.0,,5.7,20.5,,5.0,,4.9,,3.3,,,5.2,,,,7.2,3.4,5.6,,,3.1,3.0,,14.8,,,,,8.1,,,,,,,,,,5.0,4.0,,,,,,,,5.0,,,,35.0,,,3.4,,,,,\n2003,,,8.2,4.1,,4.5,,,,,,,,16.5,,,,10.3,,,,,,10.3,3.6,,5.6,5.9,,6.7,3.2,,,40.7,12.9,,,5.8,,,7.4,3.7,,,5.9,4.0,,,,,,,,5.7,,,,3.8,4.0,3.0,,,,,,,,,4.0,7.7,,4.1,,4.1,,3.9,,,,,,,,3.8,4.7,,10.0,2.8,,6.2,,,,,3.0,7.0,,7.5,,,,,,,,,4.0,7.7,,,2.9,,,,2.9,3.7,,,,2.9,,,13.0,,,,3.0,10.0,3.5,3.1,,,,,,3.4,,,,16.5,3.4,,10.0,,,,,,,,7.8,,4.1,,3.4,,,,,2.8,,,,6.6,,,,,16.6,,,,,,,,,,5.6,,,2.8,,,,,14.5,4.3,4.6,,,,,,,,,3.8,,,,,,4.8,9.8,,3.3,5.5,3.5,3.2,4.3,,,,,2.8,,,5.1,3.2,,,,,,,,20.1,,4.2,,4.9,5.0,,17.7,,,,,,,,,3.2,,,,3.4,,3.0,5.7,,5.5,16.5,,7.7,,3.2,,,,,3.7,,,,5.9,3.3,6.7,4.3,,,3.2,,11.1,,,,,8.0,,,5.3,,,,,,,7.6,6.0,,,,,,,,,,,,30.5,3.2,,3.5,12.608092,,,,\n2004,,,9.8,,,5.6,,,,,,,,20.0,,,,9.2,,,,,,11.2,5.2,,6.8,6.7,,12.2,,,,46.6,9.3,,,7.6,,,13.9,4.6,,,9.1,4.0,,,,,,,,5.9,,,,4.0,4.0,4.0,,,,,,,,,4.0,7.7,,4.9,,4.9,,5.8,,,,,,,,4.5,7.4,,10.4,4.7,,7.7,,,,,,7.0,,8.7,,,,,,,5.5,,4.6,8.0,,,5.4,,,,,3.8,,,,,,,18.5,,,,,10.4,3.8,,,,,5.1,4.4,4.0,4.6,,,20.0,5.3,,10.4,,,,,,,,12.4,23.0,4.6,,6.0,,,,,,4.2,,,11.4,6.2,,,,18.7,,,,,,,,,,6.9,,,,,,,,18.8,4.1,4.5,,,,,,,,,6.1,,,,,,4.9,13.0,,3.9,8.0,,5.9,5.6,4.8,,,,6.0,,,8.4,4.4,,,,,,,,21.0,,7.1,5.0,5.2,8.5,,21.5,,,,,4.4,,,,,,,,4.2,,,10.6,3.8,7.8,20.0,,7.7,,6.4,,4.6,,,6.3,,,,10.0,4.4,8.6,6.5,,,,,12.4,,,,,8.9,,,8.1,,,,,,,7.6,6.0,,,,,3.8,4.9,,4.5,,,,42.9,,,,,4.4,,,\n2005,,,12.0,,,4.8,,,,,,,4.8,18.0,,,,12.6,,,,,,11.7,5.4,,6.3,9.3,,17.0,,,,46.5,7.6,,,7.8,,,23.8,4.9,,,7.2,,,,,,,,,6.0,,,,4.4,,,,,,,,,,,,7.0,,6.0,,4.9,,6.1,,,,,,,,,5.8,4.7,10.4,5.9,,9.9,,,,,,7.2,,5.6,,,,,4.5,,,,5.0,8.2,,,5.0,,,,,,,,,,,,23.0,,,,,10.4,4.4,,,,5.4,,5.0,,4.8,,,18.2,5.4,,10.4,,,,,,,,13.0,18.5,4.8,,8.9,,,,,,4.7,,,10.9,25.0,,7.2,,18.4,,,,,,,,,,8.5,,,,,,,,17.2,,9.9,,,,,,,,,6.3,,,,,,5.0,16.0,,4.7,8.3,8.5,6.5,7.0,,,,,7.0,,,9.0,6.0,,,5.5,5.2,,,,21.0,,8.2,6.3,5.8,9.9,,23.7,,4.9,,,7.2,,,,,,,,5.0,,,13.3,4.9,7.8,18.3,,7.0,,7.8,7.2,5.5,,,9.3,15.6,,,12.0,7.5,11.2,6.7,,,,,12.1,,,5.6,,8.8,,,8.2,,,,,,,,5.0,,,,5.0,7.0,4.4,,,,,,44.0,,,,,5.6,,,\n2006,,6.9,12.5,,,7.5,,,,,,,7.6,15.7,,,,14.8,,,,5.7,,12.4,,,7.0,13.3,,21.5,,,,50.0,8.6,,,8.7,,,30.0,5.0,,,6.7,12.0,,,,,15.9,,,6.1,,,,,12.0,,,,,,,,,,5.7,7.5,,6.7,,,,5.9,,,,,,,,,7.1,,10.0,7.0,,8.4,,,,,,7.2,,6.0,,6.1,,,,,,,5.0,8.5,,,6.4,,,,,,,,,,,,28.0,,,,6.0,10.0,5.5,,,,,,,,,,,15.9,6.1,,10.0,,,,,,,,18.8,17.0,,,8.7,,,,,6.6,5.2,,,11.6,23.5,,12.8,,16.0,,,,,,,,5.0,,10.0,,,,,,,,16.0,,,,,,,,,,,6.8,,,,,,5.1,17.1,,,10.4,10.0,6.1,9.7,6.4,,,6.9,8.5,,,12.4,,5.2,,7.8,,,,,22.0,,7.3,7.0,6.4,10.1,,20.0,,,,,7.5,,,,,,,,,,,18.2,6.1,6.5,15.8,,7.5,,8.5,12.9,5.2,,,11.0,16.1,,,11.0,9.1,12.3,6.6,,,,,13.6,,,11.0,7.1,7.7,,,8.1,,,,,,,,,,11.0,,10.0,10.7,6.4,6.3,,,,,42.0,,,,,,5.1,,\n2007,,8.0,13.0,,,10.0,,,,,,,11.2,16.6,,,,24.0,,,,18.2,,12.6,,,8.4,17.1,,26.0,,,,56.0,11.0,,,13.0,,,49.0,7.2,,,10.0,12.0,,,,,16.7,,,,,,,,12.0,,,22.0,,,,,,,8.5,7.3,,7.5,,,,,,,,,,7.7,,,8.8,,10.5,14.5,,7.9,,,,8.5,,8.5,,11.0,,8.0,,,,,,,,9.0,,,,,,,,,,,,,,,33.0,,8.0,,13.9,10.5,,,,,,,,,,,,16.8,,7.0,10.5,,,,,,,,23.0,20.0,,,15.0,,,,8.0,,,10.0,,15.0,32.0,,16.6,,21.5,,,,,,,,7.2,,11.5,,,,,,,,20.7,,,,,,,,,,,8.7,,,,,,,15.8,,,13.3,10.0,,12.6,13.5,,,8.0,20.1,10.0,,11.5,,8.4,,13.3,,,,,18.0,,9.5,7.0,7.9,8.8,,20.3,,,,,9.0,,,,,,,,7.0,,,18.7,7.0,9.0,16.7,,7.3,,10.0,16.6,,,8.0,17.0,26.5,,,11.8,11.0,18.4,7.6,,,,,15.0,,,7.4,14.4,8.0,,9.5,9.6,,,,,,,,,,12.4,7.0,10.4,14.3,13.5,9.1,,,,,52.0,,,,,,,,\n2008,,8.9,15.0,,,12.9,,9.8,,,11.5,10.8,21.2,19.0,,9.3,,20.2,,,,42.0,,12.6,,10.0,9.2,12.7,,25.5,,,,58.0,14.0,,,14.0,,,60.0,,,,9.5,17.0,,,,,19.2,,,,,,,,17.0,,,18.9,,,,,,12.8,13.0,8.5,,10.0,,,,,,,,,,,,,10.3,,14.0,16.9,,,9.3,,,11.0,,9.0,,14.0,,13.9,,,,,,,,10.0,,,,,,,,,,,,,,10.0,31.0,10.0,11.9,,14.0,14.0,,8.7,,,,,,,,,,19.2,,,14.0,,,,,,8.8,,26.5,27.0,,,16.0,,,,10.2,,,30.0,,19.9,45.0,25.0,18.6,,,,,,,,,,,,10.0,,,,,,,,22.9,,,,,,,,,,,,,,,,,11.5,16.4,,,18.2,11.0,,20.8,19.5,,,9.0,43.0,12.7,11.0,14.0,,,,28.0,9.1,,,,16.0,9.3,10.4,,,,,21.0,,,9.6,,,,,,,,,,9.0,,,23.5,9.5,,19.2,,,,9.9,18.7,,,15.0,19.0,26.0,,,9.4,11.0,17.7,,,,,,15.0,,,,17.5,,,11.8,13.2,,,,,,,,,,13.0,10.4,11.2,20.3,19.3,10.0,,,,,62.0,,,,,,,,\n2009,,7.8,10.0,,,8.0,,5.7,,,,,,17.6,,,,18.3,,7.0,,10.1,,9.0,4.8,,6.7,5.7,,16.5,,,,40.0,9.9,,,9.0,,,35.0,,,,,14.0,,,,,17.6,,,6.3,,,5.0,,14.0,,,13.0,,,,,,,12.0,,,7.0,7.5,,,5.2,,5.9,,,,,,5.4,8.2,,9.0,7.6,,5.0,,,,9.0,,11.0,,11.0,,,,,,,,,,10.0,5.7,,,,,,,,,,,,,,22.0,6.0,,,9.5,9.0,,6.1,,8.0,,6.8,,,,,,17.8,,,9.0,,6.0,,5.3,,7.0,,16.2,21.5,5.2,,5.0,,,,,,5.2,5.0,,10.5,19.3,22.5,12.0,,,,,,,,,,,,6.3,,,,,,,,13.4,,,,,,,,,,,,,,,,,16.0,12.3,,,13.2,9.5,,6.3,9.5,,7.0,9.0,19.5,,,8.1,5.0,,,,,,,5.5,10.5,6.0,8.2,4.8,5.0,,,13.3,,,,,5.2,,,,,,,,7.0,,,8.5,10.0,,17.6,,,,5.4,12.0,,,5.6,9.0,,,,6.5,,14.5,,,,,,11.0,5.5,,6.2,,,,7.7,10.0,6.0,,,,,,,,,7.8,,,5.2,,,,,,,37.0,,,,,,,,\n2010,,,11.5,,7.5,,,,8.3,,,,9.9,20.6,,,,25.0,,7.6,,13.7,,10.0,,,7.3,17.0,,27.5,,,,53.0,13.0,,,10.5,,,53.5,,,,,17.5,,,,,22.5,,,,9.0,7.5,,,17.5,,,19.0,,,,,,8.6,12.0,,,8.0,27.0,,,,8.1,,,,,,,,10.0,,11.0,8.7,,,,,,10.0,,14.0,,12.0,,8.2,9.7,,,,,,,10.0,,,,,,,,,,,,,,,23.0,11.0,8.5,,,11.0,,,,8.5,,12.3,,,,,,20.7,,7.7,11.0,,12.0,,11.5,,10.0,,,23.5,,,,,,,7.9,,,9.0,17.0,,28.7,28.0,17.5,,,,,7.2,,18.5,,7.5,,,10.5,,,,,,21.0,,20.0,,,,,,,,,,,,,,,,,18.0,13.5,,,18.7,17.0,,12.7,13.4,,7.5,10.0,29.0,,,8.7,,,7.5,10.7,,,,,13.5,7.6,10.2,,,,,19.4,,,,,,,10.1,,,,,,14.5,,,11.2,11.0,,19.8,,,12.2,7.6,17.5,,13.0,,,9.3,,,9.0,,22.4,,,,,,14.5,,,,,,,7.8,11.1,7.6,,16.7,,,,,,,10.6,9.8,,15.8,10.3,7.5,,,,,47.0,,,,,,,,\n2011,,,11.3,,,,,,11.9,,,,18.5,21.2,13.8,17.7,,31.0,,9.5,,,,13.4,,,,16.8,,41.0,,,14.4,56.0,14.0,,,12.5,,,74.0,,,,,22.0,,,,,26.5,,,,,,,,22.0,,,23.0,,,,,,9.5,12.0,,,,30.0,,,,10.4,,,,,,,,10.0,,10.0,11.5,,,10.0,,,9.8,,14.5,9.0,13.0,,9.6,16.0,,,,,,,10.0,,,,,,,,,,,10.5,,,,,19.2,9.9,,,10.0,,,,10.6,,18.1,,,,,,21.3,9.8,10.7,10.0,,16.0,,13.3,,11.4,,,25.5,,,,,,10.0,9.2,,,,20.0,,31.1,39.5,19.8,,,,,,,19.0,,10.1,,,11.0,,9.1,,,,26.0,,23.5,,,,10.5,,,,,,9.8,,13.5,,,,,18.1,14.6,,,16.6,18.0,,15.1,18.0,,,12.3,27.0,,,10.4,,,,16.8,,,,,13.0,9.2,12.7,,,,,19.6,,,,,,,,,,16.0,,,12.5,9.4,,13.4,12.0,,21.0,10.3,,13.2,9.3,19.8,,15.8,,,23.3,,,,,24.5,10.7,,,,,14.5,,,,,,,,14.6,,,,,,,,,,13.9,11.2,13.0,24.0,17.8,,,,,,50.0,,,,,,,,\n2012,,,10.3,,,,,,16.5,9.5,,,15.3,23.3,11.2,18.1,,37.5,,9.9,10.8,,,12.5,,12.2,,15.9,,41.0,,,,61.0,14.0,,,14.0,,,69.0,,,,,25.0,,,16.0,,25.3,,,,,,,,25.0,,,17.5,,,,,,,12.0,,,,30.0,,,,,10.2,,,,,,,10.6,,13.8,13.0,,,,9.1,,10.0,,20.0,18.0,11.0,,,14.2,,,,,,,10.0,,11.0,,,,,,,,,9.3,,,,,17.8,,,10.4,13.8,,,,10.7,,18.4,,,,,,23.7,10.0,11.3,13.8,,12.5,,12.0,,13.8,,,25.4,,,,,9.8,,,,,,,,20.7,36.0,18.7,9.0,,,,,,18.0,,11.9,,,11.5,,11.9,,,,25.5,,24.0,,,,12.4,,,,,,,,17.5,,,,,22.0,15.9,,,17.6,19.0,,13.4,13.2,,,12.5,22.3,,,,,,,,,9.7,,,14.2,,14.4,,,,,18.0,,,,10.0,,,17.4,,,16.0,,,12.4,10.2,,12.1,12.0,,23.1,,,10.9,9.9,18.7,,,,,24.9,,,,,26.0,11.2,,,,,15.7,,,,,,,,13.0,10.0,,17.8,,18.3,,,,,13.5,,12.4,15.9,14.5,,,,,,44.0,,,,,,,,\n2013,,,12.7,,,,,,18.2,11.7,,,12.8,26.3,16.1,17.6,,57.0,,11.7,14.4,,,12.0,,12.7,,11.2,,29.0,,,,67.0,,,,20.0,,,73.0,11.0,,,,34.0,,11.7,16.0,,28.2,,,,,,,,34.0,,,20.3,14.3,19.5,,,11.5,,13.0,,,,10.6,,,,,,,,,,,,11.0,,17.0,15.0,,,,14.1,,,,19.2,17.0,11.4,,,16.7,,,,,,,11.0,,11.3,,,,,,,13.2,,,,,,,17.4,,,11.0,17.0,,,,11.7,,25.2,,,,,,26.7,,11.5,17.0,,11.2,,17.8,,15.9,,,26.0,,,,,,,,,,,,,16.5,43.0,23.0,10.7,,,,13.0,,20.3,,16.0,,,15.3,,15.4,,,,31.0,,30.0,,,10.7,13.9,,,,,,,,13.3,,,,,27.0,15.3,,,14.2,20.4,,16.5,13.0,12.4,,13.5,21.5,,,,,,,,,,,,15.0,,14.4,,,,,20.0,,,,12.5,,,,,,15.4,,,12.5,,,,12.2,11.2,26.1,,,,13.0,22.8,,,,,26.5,,,,,28.0,11.9,,,,,15.2,,,,,,,,14.3,13.3,,18.9,,20.0,,,,,14.8,,15.1,14.1,14.3,,,,,,53.5,,,,,,,,11.6\n2014,,,17.3,,,,,,12.4,,,,,34.3,25.0,18.6,,64.0,,,11.4,,,15.5,,,,15.3,,33.5,,,,76.0,,,,24.5,,,72.0,,,,15.0,40.0,,,16.2,,36.7,,,,,11.5,,,40.0,,,22.6,11.4,21.1,,12.8,,,14.4,,,,,,,,,,,,,,,,12.0,,20.0,15.5,,,,15.3,14.3,,,23.0,,13.0,,11.3,14.7,17.7,,,,,,12.0,,14.6,,,,,,,11.4,,,,,,,15.5,,,12.8,20.0,,,,12.5,,32.0,,,,,,34.7,12.8,13.6,20.0,,13.5,,19.7,,16.0,,,25.0,,,,,,,,,,,,,16.7,48.0,32.3,14.0,,,,,,19.6,,18.7,,,19.2,,15.6,,,,31.0,,34.5,,,22.0,14.2,,13.4,,,,,,28.5,,,18.4,,33.0,17.5,,,18.4,26.5,,17.6,,,,15.3,18.6,,,,,,,,,12.8,,,15.9,,18.4,,,,,20.4,,,,14.4,,,,,,12.5,,,11.5,12.1,,,14.0,13.5,34.2,,,,14.0,31.8,,,,,38.0,,,,,34.4,14.9,,,,,19.3,,,,,,,,17.4,17.9,,19.3,,12.6,,,,,13.6,,17.2,16.6,12.6,,,15.1,,,58.2,,,,,,,,11.6\n2015,,,13.4,,,,,,,,,,13.0,39.4,14.7,14.4,,64.5,,,,,,17.0,,,,19.1,21.3,37.2,,,,79.2,,,,23.5,,,77.1,,,12.3,20.1,42.9,,13.2,14.4,,41.7,,,,,13.7,,,42.9,,,25.5,13.6,19.4,,20.0,,,15.2,,,,,,,,,,,,,,,,,,26.6,14.9,,,,,26.9,,,24.2,,12.6,,,13.9,12.3,,,,,,12.5,,12.2,,,,,,,14.2,14.5,,,,,,13.5,,22.7,12.5,26.6,,,,14.0,,34.8,,,,,,40.6,13.9,,26.6,,,,25.0,,17.3,,,,,,,,,,,,,,,,13.5,54.3,29.7,19.5,,,,,,24.8,13.2,20.2,,,20.4,,,,21.1,,33.3,,40.1,,,13.5,13.4,,16.1,,13.0,23.4,,,33.4,,,14.1,,35.5,19.2,,,18.1,,,14.6,,,,,21.0,,,,,,,,,16.3,16.0,12.2,17.5,,21.5,,,,,22.6,,,,15.4,,,,12.0,,,,,,15.3,,,14.5,13.9,39.1,,,,15.3,29.2,,,,,31.4,14.8,,,,24.5,15.6,12.1,,,,21.5,,,,,,,,16.8,20.2,,19.0,,15.9,,,,,12.2,,14.2,,15.4,,,24.2,,,72.7,,,,,,,,\n2016,,,13.1,,,,11.0,,,,,,10.9,32.3,15.4,12.5,,67.0,,,,,,,,,,15.0,25.9,34.0,,,,75.0,,,,17.0,11.3,,50.0,12.3,,,12.2,39.6,,10.7,14.5,,,,,,,14.4,,,39.6,,11.4,23.8,,16.4,13.2,16.7,,,15.1,,,,,,,,,,10.7,,,,10.2,,,,23.4,11.5,,,,11.4,18.1,,,24.9,,13.0,11.0,,,,,,,,,12.5,,,,,11.7,,,,12.9,14.5,,,,,,,,20.5,,23.4,,,,15.5,,45.2,,,,,,33.6,,,23.4,,,,27.8,13.1,17.2,,,,,,,13.1,,,,,,,,,,43.6,35.2,16.7,,,,,,21.5,,15.3,,,18.7,,14.4,,,,27.1,,36.1,,,,,10.4,16.6,,13.0,22.1,,,44.6,,,11.7,,40.0,19.8,,,15.4,,,13.3,,,,,19.3,,,,,,,,,12.5,,11.9,17.5,10.6,24.4,,,,,17.3,,,,15.6,,,,,,,,,,11.0,,,12.1,10.6,31.9,,,,14.7,34.4,,,,,25.2,11.1,,,,20.8,15.6,13.4,,,12.0,23.5,12.7,,,,,,,18.5,14.6,,20.3,,13.0,11.1,,,,,,10.5,,12.1,,,28.7,,,60.8,,,,,,,,\n2017,,,14.4,,,,,,,,,,17.5,33.8,,15.2,,71.3,,,13.2,,,,,,,14.9,27.2,41.5,,,,86.0,,,,16.6,12.5,,54.5,12.6,,,18.3,48.3,,15.8,,,,,,,,15.3,,,48.3,,,27.2,,17.0,13.4,13.7,,,15.2,,,,,,,,,,13.9,,,,,,,,,15.7,,,,16.0,20.7,,,25.2,,,,,13.8,15.0,,,,,,12.5,,13.3,,,13.1,,,,12.7,15.4,,,,,,13.7,,28.3,,27.0,,,,18.0,,72.8,,,,,,34.0,,,27.0,,,,29.2,15.0,20.5,,,,,,,21.1,12.4,,,,,,,,16.4,52.2,40.7,20.0,,,,15.1,,24.4,,20.0,,,17.9,,18.4,,,,31.2,,39.5,,,,,,24.9,,14.8,25.2,,,56.0,,,21.2,,47.5,20.4,,,,,,14.4,,,,,23.2,,,,,,,,,14.3,13.0,,19.9,,26.2,,12.5,,,18.7,,,,16.8,,,,,,,,,,13.3,,,12.5,13.1,34.1,,,,16.1,39.8,,,,,30.4,,,,,19.6,18.3,13.9,,,,30.0,13.0,,,,,,,20.4,15.9,,18.8,,15.0,13.8,,,,14.5,,,16.1,14.3,,,31.3,15.9,14.0,75.6,,17.3,,,,,,\n2018,,,15.9,,,,,,,,,,18.7,46.0,14.1,,,70.0,,,15.5,,,,,,,18.8,29.8,72.0,,,,90.0,,,,16.8,,,67.1,15.8,,,,60.0,,17.9,,,,,,,,15.5,,,60.0,,,25.0,14.9,20.9,23.0,,,,16.3,,,,,,,,,,19.9,,14.7,,,,,,,27.0,42.2,,,16.0,25.3,,,,,,,,17.3,17.4,,23.0,,,,,,,,20.1,,,,,20.0,19.5,,,30.3,,,16.3,,39.0,,23.6,,,16.4,20.0,,112.0,,,,,,46.4,,,23.6,,,,27.4,16.7,23.5,,,,,,,,15.3,,,,,,,,18.5,58.5,48.8,18.8,,,,18.6,,30.3,,20.2,,,21.2,,18.0,,,,34.9,15.3,,,,20.1,,15.9,45.3,,,,,,71.0,,,22.7,,50.0,22.7,16.7,,,,,15.1,,,,,40.1,,,,,,,,,17.8,,,21.7,15.5,29.6,,,,,,17.4,,,17.7,,,,,,,,,14.8,,,,,15.0,46.2,,,,22.6,47.5,,,,,38.5,14.6,,,,16.8,22.0,,,,,38.4,,,,,,,,25.0,19.5,17.5,,20.2,16.5,20.3,,,,16.4,,14.4,19.1,15.9,,,30.0,18.2,,84.0,,17.4,,21.9,,,15.6,\n2019,16.5,,,,,,27.6,,,,,,18.5,52.2,15.3,15.8,14.5,68.3,,,14.5,,,,,,,20.0,,97.3,,,,108.0,,15.8,15.9,20.7,,57.5,,15.7,,,,60.8,,20.5,,,,21.2,,,,,,,,,,,,25.3,,,,,16.2,15.0,,,,,21.0,,,,,25.8,,,14.7,,17.2,,,37.3,58.2,,,18.2,,,,,,,27.6,,,15.8,,30.2,,,,,,,14.8,19.3,16.5,16.4,,,,,,,26.7,,,15.0,,41.6,,42.0,,,,,,111.0,,,,18.7,20.7,53.1,,,42.0,16.5,,,22.6,,18.1,60.8,,,,,,,16.9,,,,,,,,,59.5,61.1,23.7,,,17.7,,15.9,24.3,,25.6,,20.6,,24.7,23.9,,,28.2,,,,,,16.9,,18.5,,35.7,,,,,73.5,,,13.9,,,31.1,14.8,,,,,,,,,,56.9,,,,,,,,,22.4,,,,,35.1,,,,33.2,,,,,16.6,,14.0,,,,,53.3,,16.2,,,15.3,,,,,,,,59.3,,,,,35.0,16.1,,,,20.3,16.3,,,,,53.1,,17.7,,,,13.7,,19.7,31.7,18.8,,,,15.4,,,13.9,20.4,,14.2,19.2,26.3,,,14.8,,,83.8,,17.1,,23.7,,,13.8,\n"
  },
  {
    "path": "examples/data/map.csv",
    "content": "time,Afghanistan,Angola,Albania,United Arab Emirates,Argentina,Armenia,Australia,Austria,Azerbaijan,Burundi,Belgium,Benin,Burkina Faso,Bangladesh,Bulgaria,Bahamas,Bosnia and Herzegovina,Belarus,Belize,Bolivia,Brazil,Brunei Darussalam,Bhutan,Botswana,Central African Republic,Canada,Switzerland,Chile,China,Cote d'Ivoire,Cameroon,\"Congo, Dem. Rep.\",\"Congo, Rep.\",Colombia,Costa Rica,Cuba,Cyprus,Czech Republic,Germany,Djibouti,Denmark,Dominican Republic,Algeria,Ecuador,Egypt,Eritrea,Spain,Estonia,Ethiopia,Finland,Fiji,France,Gabon,United Kingdom,Georgia,Ghana,Guinea,Gambia,Guinea-Bissau,Equatorial Guinea,Greece,Greenland,Guatemala,Guyana,Honduras,Croatia,Haiti,Hungary,Indonesia,India,Ireland,Iran,Iraq,Iceland,Israel,Italy,Jamaica,Jordan,Japan,Kazakhstan,Kenya,Kyrgyz Republic,Cambodia,South Korea,Kuwait,Lao PDR,Lebanon,Liberia,Libya,Sri Lanka,Lesotho,Lithuania,Luxembourg,Latvia,Morocco,Moldova,Madagascar,Mexico,North Macedonia,Mali,Myanmar,Montenegro,Mongolia,Mozambique,Mauritania,Malawi,Malaysia,Namibia,New Caledonia,Niger,Nigeria,Nicaragua,Netherlands,Norway,Nepal,New Zealand,Oman,Pakistan,Panama,Peru,Philippines,Papua New Guinea,Poland,Puerto Rico,North Korea,Portugal,Paraguay,West Bank and Gaza,Qatar,Romania,Russian Federation,Rwanda,Saudi Arabia,Sudan,Senegal,Solomon Islands,Sierra Leone,El Salvador,Somalia,Serbia,South Sudan,Suriname,Slovak Republic,Slovenia,Sweden,Eswatini,Syrian Arab Republic,Chad,Togo,Thailand,Tajikistan,Turkmenistan,Timor-Leste,Trinidad and Tobago,Tunisia,Turkey,Tanzania,Uganda,Ukraine,Uruguay,USA,Uzbekistan,Venezuela,Vietnam,Vanuatu,\"Yemen, Rep.\",South Africa,Zambia,Zimbabwe\n1960,,,,,,,459760073.6,91559097.96,,,383220247.4,1301005.322,1268378.23,,,,,,,,382729752.1,,,,,1702442711.0,200093758.2,126791042.6,,,,,,75960813.87,0.0,,,,2884517772.0,,161137605.4,38300000.0,,22400000.0,,,232839815.9,,15335262.65,89557618.81,,3881219690.0,,4587798165.0,,20821777.35,,,,,170327798.1,,12084076.43,,3920000.0,,,,,681765681.8,25800590.11,98679867.99,118726952.5,0.0,190277777.8,1009308856.0,,56139977.54,480555555.6,,,,,275643564.4,,,22906905.2,,5571997.771,16653016.65,,,5260312.876,,41596762.37,,1604193.589,84000000.0,,,89512589.51,,,,,,51286741.89,,,,23379990.65,,454719432.1,148119940.8,,101219676.1,,208845208.8,,49085687.49,123821340.0,,3550000000.0,,,105157457.3,7088541.594,,,740833333.3,,,140888888.9,18667432.51,,,,4384473.695,,,,,,,526848900.4,,90223463.69,,,62825161.22,,,,,15952380.95,468810916.2,,,,,45380000000.0,,234357740.4,,,,69999972.0,,\n1961,,,,,,,470960075.4,91029854.62,,,391218827.4,2173203.947,1643154.204,,,,,,,4935417.964,342339720.8,,,,,1677820881.0,237368366.9,160930923.5,,,,,,97313432.84,0.0,,,,3266495653.0,,170837712.9,36300000.0,,18700000.0,,,239348772.1,,18555265.31,105350974.8,,4131003787.0,,4747398101.0,,27454210.3,,,,,167762365.8,,12084076.43,,3830000.0,,,,,748388248.4,27564733.02,105940594.1,125481949.8,0.0,241805555.6,1062907313.0,,55509977.8,492361111.1,,,,,157061350.1,,,27837147.81,,7167997.133,17083517.08,,,5800866.499,,48275957.47,,8482781.25,86400000.0,,3922368.099,85617085.62,,,,,,42466728.95,,,,28279988.69,,551530519.8,165059934.0,,96678751.22,,210105210.1,,63020431.3,128712871.3,,4025000000.0,,,171194666.8,7187461.316,,,794666666.7,,,71555555.56,20505456.63,,,1930599.228,4441787.077,3160000.0,,,,,,564736401.6,,90223463.69,,326999.9185,58741404.86,,,,,18571428.57,301330376.9,,,,,47808000000.0,,114632682.9,,,,113749954.5,,\n1962,,,,,305162407.2,,489440078.3,100026991.4,,8420000.0,422220787.9,2734537.618,4901760.716,,,,,,,5195618.571,387449035.5,,,,,1671313753.0,273728261.2,162626224.4,,8766845.976,,,,153596253.4,0.0,,,,4308248214.0,,224550248.0,38000000.0,,18300000.0,249697766.8,,308791693.5,,20185391.65,154403280.6,,4493323590.0,,5005697998.0,,27944464.05,,,,,170034222.7,,11954140.13,,3830000.0,,,,,1065436065.0,29163487.53,109900990.1,135064946.0,0.0,210604174.5,1222013656.0,,60409975.84,538194444.4,,,,,186153846.2,,,40876824.5,,16687993.32,15849765.85,,,7099970.149,,53848540.36,,9179552.203,99200000.0,,4342608.994,90704340.7,,,,,,43773397.53,,,,38639984.54,,603866851.7,191939923.2,,96323106.14,,200340200.3,,66368381.8,82889601.24,,4375000000.0,,,199785222.2,8276810.921,,,902000000.0,,,84222222.22,24842044.8,,,1983799.206,6218501.908,3700000.0,,,,,,636258725.2,,149593495.9,,714244.9003,80303734.18,,,,,14285714.29,330376940.1,,727985.4403,,,52381000000.0,,203900682.8,,,,186199925.5,,\n1963,,,,,242219771.2,,553280088.5,125959915.1,,1012000.0,444601321.5,2963071.799,5281287.753,,,,,,,6404292.358,441999606.2,,,,,1610091701.0,294995369.3,152917455.4,,8064779.443,,58217821.78,,170000000.0,0.0,,,,4981004024.0,,239028020.3,39000000.0,66436300.15,17100000.0,335799697.8,,316520311.1,,27289522.51,128576498.4,,4628060852.0,,5196797921.0,,31096095.34,,,,,179495712.8,,14812738.85,,3820000.0,,,,,1795449295.0,30210947.39,128712871.3,163218934.7,0.0,259250864.2,1463283724.0,,61879975.25,629861111.1,,1861999.255,,,185384615.4,,,33900603.43,,18675992.53,13917763.92,,,6962653.392,,74893933.2,,8956747.538,112000000.0,,4375224.475,100322350.3,,,,,,60760089.11,,,,45499981.8,,637373073.3,205099918.0,,100042547.6,,219660219.7,,97315436.24,94235401.82,,4950000000.0,,,199087891.6,9208934.811,,,904833333.3,,,113777777.8,28144744.4,,,2155999.138,6103875.145,4480000.0,,,,,,697922566.5,,,,1134619.78,85501269.8,,,,,15238095.24,350000000.0,,2729945.401,,,52295000000.0,,245397307.8,,,,188999924.4,,\n1964,,,,,245740498.0,,655760104.9,164594679.0,,1162000.0,497059226.9,3803662.454,5358593.135,,,,,,,,354227857.1,,,,,1657457283.0,329525835.0,149950377.7,,11190603.48,,49818181.82,,190000000.0,0.0,,,,4888248899.0,,255387903.0,42500000.0,99856999.91,20600000.0,448499596.4,,386820000.7,,36140000.0,139910553.9,,4917956554.0,,5508997796.0,,33302237.24,,,,,188207553.1,,12993630.57,,5850000.0,,,,,1986654487.0,36054670.79,155445544.6,185198925.9,0.0,278584261.9,1586666708.0,,61879975.25,718055555.6,,5879997.648,,,137481470.4,,,38065368.32,,21475991.41,13938763.94,,,9278159.213,,69993222.0,,9455019.789,120000000.0,,5174939.905,97912597.91,,,,,,84606790.76,,,,54319978.27,,735383641.4,219799912.1,,123402030.6,,257880257.9,,120432513.0,93605898.71,,5200000000.0,,,224400993.0,9815376.859,,,949166666.7,,,123555555.6,41872487.08,,,2353399.059,5724173.991,5420000.0,,,,,,758619889.8,,112041884.8,,3383300.616,87235576.92,,,,,17478991.6,380897803.7,,5487890.242,,,51213000000.0,,200459770.1,,,,271599891.4,,\n1965,,,,,252407602.9,,787360126.0,142895702.0,,2153481.481,500722082.8,3994923.713,3509330.33,,,,,,,,632869026.5,,,,,1574704540.0,343475228.4,168215772.4,,12902909.89,,78909090.91,,185202864.0,0.0,,,,4978559240.0,,285791224.7,40200000.0,105528391.4,23800000.0,515199536.3,,439425746.0,,42900000.0,149572371.7,,5124506743.0,,5791097684.0,,35578415.39,10492201.74,,,,209674799.6,,18580891.72,,6250000.0,,,,,2125989626.0,39086791.42,200000000.0,225742909.7,0.0,313917713.1,1719942315.0,,62929974.83,821388888.9,,9897996.041,,,132131636.1,,,44598531.83,2700000.0,29119988.35,14474264.47,,,9520198.149,,63175700.38,,10710827.9,119200000.0,,4647822.379,107241857.2,,,,,1771001.771,118580173.9,,,,65939973.62,,749993912.4,265579893.8,,126982427.6,,439635439.6,,132736763.6,93114395.13,,5525000000.0,,,232350562.0,11679624.64,,,1034000000.0,,,177777777.8,56375646.18,,,2505998.998,6483576.298,5170000.0,,,,,,844543330.0,,118062827.2,,3362428.13,94266826.92,,,,,12761904.76,422676991.2,,10737785.24,,,51827000000.0,,227272727.3,,,,289449884.2,,15600000.0\n1966,,,,,279225436.3,,986720157.9,167770139.0,,2286857.143,563377895.4,3724387.206,3907553.79,,,,,,,,718216574.6,,,,,1614422827.0,378234372.7,186697964.8,,13269401.41,,78363636.36,,172592592.6,0.0,,,,5063637742.0,,301137663.3,37200000.0,104515642.9,22900000.0,481849566.3,,560943076.5,,43420000.0,152916847.1,,5414601741.0,,5984997606.0,,47344505.52,13895077.98,,,,238979294.9,,19100636.94,,6500000.0,,,,,1661154906.0,38314978.9,256105610.6,234996906.0,0.0,375501251.7,1904604599.0,,76089969.56,932430555.6,,13047994.78,,,176901786.3,,,51425377.31,2800000.0,58519976.59,15282765.28,,,9923596.376,,67938085.05,,11342782.95,130400000.0,,4636149.757,105456855.5,,,,,1848001.848,148633551.3,,,,55719977.71,,770691796.3,272579891.0,,148221481.3,,549675549.7,,145041014.2,109615384.6,,5975000000.0,,,257175532.1,13588794.05,,,1076000000.0,,,300444444.4,50315910.4,,,2539598.984,6591038.889,6500000.0,,,,,,906980385.5,,102356020.9,,2889961.657,105540865.4,,,,,13714285.71,442035398.2,,14265714.69,,,63572000000.0,,238636363.6,,,,324449870.2,,16950000.0\n1967,,,,,251930719.1,,1197840192.0,176767275.8,,2376000.0,607918707.2,3910553.209,3695106.93,,,,,,,,746139163.6,,,,,1775500366.0,383265301.5,182705341.3,,14711322.31,,45907648.68,,178541885.0,0.0,,,,5352122317.0,,323292901.4,35800000.0,99249350.83,25300000.0,508299542.5,,545917155.9,,37000000.0,146661680.3,,5856108417.0,3008117.853,6200583812.0,,,,,,,313035616.3,,21179617.83,,6800000.0,,,,,1487733333.0,39693241.93,331023102.3,234541906.2,0.0,605514168.1,1928786564.0,,104719958.1,1039027778.0,,15987993.6,,,218100895.7,,35544791.67,57730955.03,3050000.0,79519968.19,15711432.16,,,8229323.824,,70348918.78,,12112471.79,133600000.0,,5081280.157,102039102.0,,,,,2133370.892,143406877.0,,,,239959904.0,,883921396.7,293579882.6,,149591230.9,,478275478.3,,243980653.5,129487179.5,,6275000000.0,,,333045103.3,14936443.05,,,1123833333.0,,,336222222.2,52268811.03,,,2883153.573,6777307.379,7530000.0,,,,,,921961412.7,,118586387.4,,3105678.432,126346153.8,,,,,15428571.43,508407079.6,14629994.15,16841663.17,,,75448000000.0,,270454545.5,,,,373099850.8,,19000000.0\n1968,,,,,337142857.1,,1321600211.0,182059709.2,,2590857.143,646381114.5,4293821.825,3760628.522,,,,,,,11583123.79,755307566.7,,,,,1797265817.0,373889479.6,173781024.3,,15305071.4,,50479041.92,,141184847.8,0.0,,,,4827481334.0,,345466666.7,37300000.0,99249350.83,29300000.0,648599416.3,,668753624.8,,34660000.0,150060024.0,,6129940876.0,2989113.97,5563195549.0,,44271216.36,14178651.0,,,,366771882.7,,20400000.0,,7050000.0,,,150166666.7,,1586866667.0,37141485.43,437293729.4,291437883.4,0.0,690001971.4,1991165044.0,,127749948.9,1168194444.0,,16365993.45,,,278696524.4,,35461875.0,65572316.45,3050000.0,95479961.81,14305226.32,,,7479003.122,,90900288.31,,13044200.39,148800000.0,,5251146.164,104590604.6,,,,,1881000.752,148306884.2,,,,369039852.4,6891062.971,905836803.3,321999871.2,,135520021.7,,492555492.6,,113178294.6,153846153.8,,7225000000.0,,,371893392.1,16621004.29,,,1255833333.0,,,338666666.7,57725445.15,,,2658001.063,6619695.579,8340000.0,,,,,,941001815.1,,190052356.0,,3288025.367,154639423.1,,,,5087500.0,17523809.52,570685840.7,16239993.5,19942601.15,,,80732000000.0,,272727272.7,,,,399699840.1,,30600000.0\n1969,,,,,442857142.9,,1314880210.0,193173819.4,,3337142.857,675078864.4,4015987.013,4023680.475,,,,,,,12254609.23,816622811.0,,,,,1770108751.0,409105981.1,179980922.7,,16156269.59,,72455089.82,,131638962.8,0.0,,,,5471706536.0,,352000000.0,35600000.0,99249350.83,39700000.0,888949199.9,,805713226.3,,34420000.0,140291965.8,,5909705121.0,4350652.598,5544595564.0,,49026817.67,14705286.61,,,,425403589.9,,17600000.0,,7200000.0,,,173333333.3,,1691433333.0,41630596.27,566006600.7,375997849.6,0.0,872002491.4,2003805617.0,,125859949.7,1335416667.0,,15749993.7,,,347028223.8,,36133958.33,65138973.39,3050000.0,143079942.8,15863429.19,,,7817857.633,,84972008.64,,13014516.19,180000000.0,,5673928.012,114418614.4,,,,,1959000.784,143733544.1,,,,684459726.2,6988120.196,1017240120.0,350279859.9,,147560023.6,,552720552.7,,128940568.5,189230769.2,,7975000000.0,,,374919807.0,17856349.21,,,1380000000.0,,,429333333.3,87018954.62,,,3297601.319,7508052.995,9000000.0,,,,,,1017260076.0,,194502617.8,,3435130.654,184903846.2,,,,5262500.0,16952380.95,596792035.4,20089991.96,22861542.77,,,81443000000.0,,263636363.6,,,,425599829.8,,42350000.0\n1970,2939585.501,,,,445713893.9,,1277360204.0,199524739.5,,,747755088.9,4099087.202,4185916.94,,,,,,,16787135.93,1026234374.0,,,,,1889157918.0,436090053.6,388383950.3,,17727738.12,20339866.07,102395209.6,13100436.68,162662459.1,0.0,,,,6167271406.0,,395600000.0,35900000.0,98844251.44,30700000.0,1092499017.0,,859146961.8,,34540000.0,152891345.2,413396.8127,5882387677.0,4638155.158,6074395140.0,,46918664.51,15069880.49,,,,473596990.5,,32300000.0,,9900000.0,,,223333333.3,,1832966667.0,50986848.32,620132013.2,401050839.6,0.0,1259646456.0,2216771793.0,,109759956.1,1575347222.0,,17023993.19,,,386403740.4,68739972.5,38045833.33,64546127.54,3550000.0,242479903.0,21042038.72,,,8310003.469,,88924195.09,,12134982.78,176800000.0,,6150439.756,122781872.8,,,,,2055000.822,199593626.1,,,,662339735.1,8346921.345,1079942533.0,388359844.7,5185185.185,171920027.5,,635250635.3,,218087855.3,155055171.2,,8525000000.0,,,436103595.4,19316666.67,,,1542000000.0,,,471555555.6,108271108.6,,,3986401.595,7135516.014,11200000.0,,,,,,1118164544.0,,199738219.9,,3650466.891,217223557.7,,,,6200000.0,22476190.48,564858542.6,29539988.18,26627467.45,,,79846000000.0,,272727272.7,,,,417899832.8,,45950000.0\n1971,,,,,519719484.2,,1331754789.0,209277606.7,,2628571.429,828721558.4,4285361.496,4343468.092,,,,,,,15863843.46,1075071453.0,,,,,2077659711.0,511387689.4,651589862.9,,23968971.08,21501256.56,101796407.2,13749473.41,263898574.6,0.0,,,,7255896950.0,,430225386.9,36600000.0,99946261.07,29700000.0,1266148860.0,,900614349.2,,36134238.09,177615098.1,535616.7685,6300175574.0,5498336.699,6723936533.0,,41139332.3,26327764.42,,,,515997642.0,,22200000.0,,11400000.0,,,225670995.1,,2255256983.0,63486922.17,402310231.0,426263340.2,0.0,1270657787.0,2648079366.0,,108639956.5,1896540416.0,,22077991.17,,,460899849.3,73434840.97,39061458.33,66920095.55,4050000.0,243035871.6,32258064.52,,,9047009.782,,111288010.2,,12755677.36,191200000.0,,6323435.839,127758749.5,,,,,2343860.95,228027756.5,,,,639259541.9,8443978.57,1249389090.0,428293444.8,5891358.025,180841169.8,29065079.3,739410739.4,,247286821.7,161310133.7,,9452062887.0,,,518294924.4,20750000.0,,,1618333333.0,,,587274311.7,109994256.2,,,3770637.41,8516583.63,11400000.0,,,,,,1238804427.0,,176963350.8,,4183674.952,262656250.0,,,,8620776.959,24860541.92,570873159.5,42559982.98,52687946.24,,,74862000000.0,,352272727.3,,,,485866527.2,,49850000.0\n1972,,,,,766000000.0,,1484443745.0,249425547.4,,3600000.0,1026588091.0,4904216.992,4947862.936,,,,,,,20700640.94,1195501488.0,,,,,2233737031.0,601426981.7,745661188.8,,31742504.8,24894059.39,94011976.05,12744615.68,170587589.6,0.0,,,,9006765501.0,,487244020.6,39500000.0,109942841.3,37300000.0,1066049041.0,,1256164586.0,,41043478.26,220831905.3,787703.1062,7531246912.0,6673861.634,7860461050.0,,30202525.76,31711404.23,,,,573692101.5,,24000000.0,,15449922.75,,,231632283.7,,2497244706.0,84039646.65,371947194.7,466113288.1,0.0,1461373750.0,3289362465.0,,129359948.3,2567519428.0,,29735988.11,,,531950093.4,90743549.91,20254568.13,106204437.0,4050000.0,202768227.1,30283133.9,,,11731387.88,,140446991.6,,16129256.25,242400000.0,,8332407.51,117181275.2,,,,,2697870.896,251103009.0,,,,904095638.4,10967466.42,1522236183.0,491632831.2,6503703.704,206172013.2,54524419.38,478207381.8,,276485788.1,196259386.0,,10054347826.0,,,593121489.2,28851587.3,,,1824593128.0,,,930574823.6,107983917.3,,,4234610.668,11140612.1,13200000.0,,,,,,1458082236.0,,260209424.1,,5126414.525,284086538.5,,,,9121523.151,31650677.14,703957597.2,53689677.86,64944701.11,,51429281.91,77639000000.0,,404651162.8,,,,492386546.2,,58450000.0\n1973,3341271.551,,,,1294000000.0,,1855729307.0,328898821.4,,5923067.599,1296519775.0,6698401.446,6079259.183,48606800.13,,,,,,21129139.97,1512670977.0,,,,,2363060955.0,764969998.4,1005919720.0,,28713844.11,31636823.71,102395209.6,19426710.16,173879934.0,0.0,,,,11938703823.0,,581866269.9,42000000.0,136757097.8,49200000.0,1243856105.0,,1521319435.0,,48433591.42,276967793.9,931727.0694,9496156577.0,9421730.099,8448664898.0,,41052242.84,36058910.7,,,,674802452.2,,23400000.0,5032808.212,15950000.0,,,263447030.8,,2529921054.0,98307831.83,480857166.9,665185289.0,0.0,2574504910.0,3638240139.0,,150652370.4,3374561100.0,,37319917.16,,,544785374.6,136560430.5,21220297.97,103815507.2,3750000.0,298307480.0,25146427.18,,,15421205.92,,185783993.8,,20346496.12,300800000.0,,10974072.3,152452317.5,,,,,4711557.475,296726189.3,,,,1020223592.0,10433752.95,1917119276.0,607891665.2,7152747.935,246331493.0,89826506.52,477624634.2,,364341085.3,301201252.8,,12059701493.0,,,682681692.2,30915873.02,,,545381021.8,,9365839.708,1565589936.0,113153360.1,,,5022404.825,12475644.13,16100000.0,,,,,,1702215353.0,,388674557.0,,6873376.434,312408499.1,,,,8944886.23,38188218.1,861625441.7,77916010.24,64872640.27,,112465598.2,78358000000.0,,420930232.6,,,,752926325.6,,86900000.0\n1974,3581366.351,,,,1626000000.0,,2127274763.0,422543505.8,,7682539.683,1482318436.0,6447726.47,6269084.564,72298235.04,,,,,,39766636.07,1790114213.0,,,,,2809465529.0,888478644.0,1103190481.0,,41129183.02,34625371.31,189221556.9,24137429.63,194904101.8,0.0,,,,13773713249.0,,732087483.0,57600000.0,260168630.0,74800000.0,1852779425.0,,1968178718.0,,74758454.11,308807797.1,1353022.08,9954624929.0,10494173.37,9346449845.0,,64121526.39,,,,,1049955703.0,,28400000.0,11136757.59,16900000.0,,,308005578.3,698192771.1,2895415720.0,111205418.9,3877862663.0,1427457784.0,0.0,3475602770.0,3890003394.0,,163307378.0,3962157887.0,,46763683.97,,,852963864.0,384614072.6,,179142179.6,4550000.0,431682379.0,28417847.61,,,18227348.89,,241889161.2,,25882465.36,407200000.0,,11632496.21,159999341.9,,,,,5304902.622,397163356.3,,,,1351141235.0,14995341.25,2285358296.0,710867536.4,8446969.697,291444123.1,255573248.4,609191919.2,,454780361.8,521518532.3,,13162650602.0,,,988203732.2,31434126.98,,,565500000.0,,7786746.398,,111430212.5,,,6779970.098,13350320.28,21400000.0,,,,,,1855084673.0,,537380924.3,,8097048.254,363887784.6,,,,8584035.885,46505447.78,1136704698.0,120044738.2,80157512.31,,187557473.6,85906000000.0,,602325581.4,,,,1102318401.0,,118550000.0\n1975,4203664.569,,,,798359535.2,,2268707674.0,546724394.0,,8533333.333,1927662478.0,7857666.124,18062366.73,80830559.47,,,,,,58304466.42,2141126693.0,,,,,3180915490.0,1032046117.0,486720076.9,,45886157.16,46770377.91,173652694.6,33493068.55,227942151.2,0.0,,,,15278274626.0,,931928334.6,65900000.0,332252159.2,102000000.0,1926890602.0,,2108232941.0,,125072463.8,433161415.7,2056253.749,13030408263.0,16844521.8,11543753775.0,,78825105.71,,,,,1433217345.0,,44900000.0,32436379.69,21400000.0,,,366147086.5,1063855422.0,3323646801.0,154362392.7,5951043742.0,1590171817.0,0.0,3758315381.0,4217069829.0,,180742482.6,4534902135.0,,54090933.23,,,1030991736.0,,,165944100.3,5500000.0,287788252.7,30478781.02,,,22704189.64,,413326127.9,,30189630.07,504800000.0,,19130897.33,138923723.2,,,,,9362342.027,440725547.0,,,7330399.929,3028584797.0,18537929.96,2814545011.0,912771143.3,10529138.04,292259947.4,523306311.5,771161616.2,,710909865.5,,7933048.215,14337349398.0,,,778693990.9,43488888.89,,,635500000.0,,9319735.189,,119471568.1,,,6526389.844,15652099.64,23100000.0,,,,,,2232315959.0,,887837837.8,,11114584.74,416034898.2,,,,10703751.5,75323106.3,2284986255.0,138323476.0,86567896.18,,156541418.6,88400000000.0,,711627907.0,,,,1431695127.0,,148600000.0\n1976,5393251.216,,,,2050248959.0,,2441084025.0,581408727.3,,9971014.493,2109619988.0,7160493.827,19531282.7,105287729.1,,,,,,66776055.56,2576476982.0,,,,,3581805735.0,1228176857.0,599806958.7,,52462858.34,48470391.3,120795356.0,34337727.56,229146910.6,0.0,,,,15457151068.0,,945240876.0,76200000.0,480640373.5,117000000.0,2201613068.0,,2521013875.0,,128043478.3,416956433.4,2751430.02,13304260893.0,20117179.33,10766652890.0,,88961005.06,,,,,1559887280.0,,55500000.0,34000000.0,23700000.0,,,382438611.4,1275301205.0,3294910612.0,152839849.3,7186307294.0,1761176240.0,0.0,3648665017.0,3844185965.0,27445027.45,294593397.9,5008396504.0,,75910048.12,,,1708677686.0,,,173074847.0,6400000.0,326295131.6,23669757.49,2291375.573,,25496422.66,,577239433.3,,33040454.15,531576968.5,,21761874.87,155142207.5,,,,,9205803.654,439885582.5,,,8181627.956,2644426038.0,25234878.48,2898055461.0,977362861.3,11876000.0,271671526.2,589099594.7,833181818.2,,778394355.4,714759968.1,21985174.2,15572289157.0,,,623403324.0,46757936.51,,,691500000.0,,10297663.29,,179207352.1,,,6020631.897,20531871.89,26300000.0,,,,,,2345444903.0,,945058881.2,,14233103.16,531909157.3,,,,12613977.4,83960118.94,2534775215.0,136687529.9,101074621.0,,133232399.7,91013000000.0,,593023255.8,,,,1677275419.0,,199800000.0\n1977,6127288.063,,,,2058223942.0,,2500485127.0,686893244.3,,13955555.56,2496513862.0,10147346.14,22903777.27,128522908.8,,,,,,73254329.6,2499644658.0,,,5650505.962,,3752174526.0,1226534416.0,924042756.7,,51449039.4,55167290.78,161471103.3,36633018.56,280082338.8,0.0,,,,17304663483.0,,1063101451.0,86500000.0,471669448.0,205000000.0,2751058001.0,,2808847050.0,,135048309.2,461856960.1,3651464.946,15041676195.0,28927873.66,11583506608.0,,121717795.7,,,,,1838775321.0,,75200000.0,24274509.8,31800000.0,,,419914698.7,1468674699.0,3477080945.0,171725706.0,7617207960.0,2007693506.0,0.0,3180556220.0,4556493518.0,30580030.58,262704735.1,6157312577.0,,147766705.0,,,2237603306.0,748518665.9,,126427193.6,7750000.0,479647087.8,28081232.26,2780125.695,,28710697.24,,731455472.0,,43959890.67,437692985.8,,26050146.53,169293678.2,,,39135467.92,,13625117.4,637879477.3,,,11010257.25,3138198948.0,35231772.65,3704801157.0,1114680192.0,13208000.0,307431743.8,514837869.1,913585858.6,,1031640130.0,754442226.1,22276752.32,17379518072.0,,,576875736.5,55486507.94,,,717000000.0,,16062942.55,11584767351.0,216538485.8,,,7064980.375,28588099.64,31700000.0,,,,,,2560335056.0,5390626.348,998216560.5,,21108759.36,688722114.1,,,,15364583.33,121692505.0,2765773072.0,190729876.6,131916696.9,,160545078.5,101000000000.0,,748837209.3,,,,2073738018.0,,285350000.0\n1978,,343271609.1,,,3103989947.0,,2816316206.0,877450655.2,,17033333.33,3166647025.0,8552841.493,32372283.48,134871031.7,,,,,,97672439.47,2690623102.0,,,14305862.29,,3969158477.0,1668885136.0,1036145035.0,,86764810.15,71436168.33,214951896.0,37960435.35,360663621.1,0.0,,,,21416956348.0,45014.37647,1322665932.0,103000000.0,627852442.1,164000000.0,2485279987.0,,3470695273.0,,178212560.4,506869453.0,7239265.398,18873052740.0,,14217505105.0,,101354226.4,85228280.98,,,,2118929495.0,,71700000.0,17333333.33,43100000.0,,,538098139.6,1627662342.0,3975819130.0,217465500.0,8113739881.0,1986021658.0,0.0,3117508058.0,5540992658.0,,304948875.3,8657135933.0,,239475870.0,,,3190082645.0,738039577.8,,252760229.7,8900000.0,729941800.6,21946485.42,4013501.003,,36648101.37,,772559382.0,,52181427.4,518287192.6,,31020668.63,183429289.3,,,76333333.33,,25570521.9,607070689.6,,,14774701.32,3022642270.0,44549266.25,4226968876.0,1307453860.0,14867263.94,388573502.3,574334105.4,1031868687.0,,665178542.9,622746329.0,27421800.61,10292598967.0,,,622564542.5,69522222.22,,,834413568.5,,14393007.32,13404087588.0,175916407.9,,,8118123.472,34987046.26,81400000.0,,,,,,2873317738.0,8259877.065,1213503185.0,,22733718.58,942007071.2,,,,18312500.0,148496651.6,2727882976.0,421677764.0,151699852.8,,185943655.8,109000000000.0,,827906976.7,,,,2067988017.0,,347750000.0\n1979,,504712881.9,,,5057062803.0,,3100685079.0,1049972515.0,,20000000.0,3631580468.0,17562828.48,32032417.9,136251932.9,,,,,,119737096.1,2829161200.0,,,24355619.03,,4084145738.0,1945005774.0,1312899709.0,,102735025.1,88354754.09,190944707.6,52566260.19,467687274.7,0.0,,,,24777567445.0,45014.37647,1529188589.0,120000000.0,711681247.4,186000000.0,1152855496.0,,4910953932.0,,276328502.4,642602892.8,9572320.678,22667912461.0,56881751.77,18373780394.0,,66362988.08,71021091.75,,,,2424261939.0,,90200000.0,17176470.59,49550000.0,,,621170386.2,1552431166.0,4589738352.0,290141008.5,4993779939.0,2371712821.0,0.0,3394518704.0,6904107163.0,,399556492.3,9173587661.0,,291024720.0,,,3543388430.0,881077990.8,,346311001.5,9400000.0,853569148.6,28073183.58,5370993.429,,42364311.06,,896353802.0,,81891303.63,679663588.4,,36197478.4,190866354.1,,,78000000.0,,43029681.3,778636837.2,,,17482911.97,3070825338.0,32278195.0,5038015817.0,1453771374.0,17300000.0,436892310.9,584105385.1,1181818182.0,,520650234.3,874273979.8,30150739.65,1936746988.0,,,701973945.7,63530158.73,,,860000000.0,,19633017.15,17616726771.0,239999813.6,94390801.14,,10785547.37,54644241.99,87700000.0,,,,,,3368143352.0,10183559.48,1581656051.0,,22498848.26,1199048431.0,,,,27218750.0,160900650.0,3001142306.0,375458521.9,206806783.0,,279396248.9,122000000000.0,,925581395.3,,,,2160867340.0,,441150000.0\n1980,,497359449.2,,,6477389013.0,,3657867290.0,1152895906.0,,27763333.33,3958575327.0,23617947.75,35360658.84,167255351.2,,,,,,159008134.9,2259307479.0,,,31844060.6,,4744402251.0,1996765550.0,1787179487.0,,118473116.2,99867474.44,152183675.0,57416698.22,611248236.6,0.0,,,,26692620067.0,1817455.45,1617653843.0,105000000.0,890174464.8,209000000.0,1361426627.0,,5508356433.0,,359323671.5,873508619.5,10367191.75,26427190947.0,68629307.08,25363413472.0,,120610364.9,60309243.02,,,,2275580289.0,,103760000.0,21882352.94,57000000.0,,,740802218.1,2114454046.0,5420809519.0,362511166.6,4874889400.0,2976492818.0,0.0,4120814786.0,7915696626.0,,416212133.9,9711741591.0,,271691156.2,,,3980692489.0,950805965.3,,503476314.8,12750000.0,1074139253.0,30811520.22,11639193.97,,52422325.29,,1117955622.0,,90402004.94,810422203.8,,38337750.85,202083467.2,,,92283380.97,,53134112.22,1035886222.0,,,17039000.38,3029915085.0,47159888.99,5269306825.0,1668684529.0,20083333.33,676939260.5,883757961.8,1429292929.0,,948572813.3,879326573.0,38795968.68,1506218239.0,,,867810131.0,89326190.48,,616740088.1,755555555.6,,23552267.56,20724493047.0,228000000.0,96502271.87,,15907791.96,62055971.53,95500000.0,,,,,,3791756609.0,13135761.89,2253248408.0,,24763347.22,1373227227.0,,,,36927083.33,194096119.6,2671976286.0,232291721.3,398813536.5,,477266464.6,138000000000.0,,1002325581.0,,,,2661671165.0,,442750000.0\n1981,,618891637.1,,,5882767126.0,,4323644157.0,969372327.1,,29995555.56,3385176171.0,17186114.21,33915894.76,174106138.7,,,,,2079250.0,238715537.6,2517859757.0,,,31162681.75,,5141128191.0,1810878508.0,2292307692.0,,92002752.72,120247597.8,71671583.96,63535260.98,638643433.3,0.0,,,,23094364442.0,5351084.002,1446085210.0,125000000.0,806569334.6,234000000.0,1817140261.0,,4977748533.0,,366980676.3,790880895.3,11361681.76,23867080426.0,88322642.61,24100707136.0,,195559792.2,52510728.9,,,,2578400684.0,,162640000.0,22400000.0,60500000.0,,,757701599.6,2654105930.0,5879007036.0,327043451.1,8121567621.0,4086497762.0,0.0,4700103232.0,7387713298.0,44922028.49,438818156.8,10851176225.0,,241171594.4,,,4463839960.0,1042021630.0,,373214770.0,26350000.0,557334522.3,27684625.66,12392766.95,,46185938.88,,975581462.8,,86482746.69,1284948561.0,,31648946.94,205288116.6,,,99294190.87,,38506688.83,1446539243.0,,,13984418.41,2135475014.0,71927312.7,4527100427.0,1649618173.0,21959582.69,660354444.4,1133468442.0,1737373737.0,,994511245.1,982322001.6,38248532.25,1567860808.0,,,843539896.8,131942063.5,,1059505495.0,915333333.3,,28682783.33,24399927864.0,203987417.2,86843238.35,,15788111.47,78352569.4,134000000.0,,,,,,3490216138.0,12379584.3,2437707006.0,,22525953.98,1415853972.0,,,,35166666.67,228835732.4,2814869761.0,331019097.0,108146878.4,,709699535.8,170000000000.0,,1009302326.0,,,,3011979548.0,,389700000.0\n1982,,668493883.3,,,2279872697.0,,4459544582.0,995369996.9,,36665555.56,2891774968.0,16554779.89,32866107.13,184674562.5,,,,,2576875.0,123726843.5,3031328924.0,,,23551463.59,,6017321456.0,1928314953.0,2160747854.0,,86425689.12,131616586.4,147162426.6,72427162.01,667866120.9,0.0,,,,22349480132.0,29608206.12,1400430126.0,126000000.0,932452707.7,229000000.0,2307139561.0,,4956242441.0,,387367149.8,844911290.5,14939154.85,22522681678.0,88555899.77,24785700685.0,,170273456.3,52266833.59,,9407751.857,,2638652976.0,,176590000.0,24710000.0,67000000.0,,,750740503.1,2741068094.0,6302107956.0,342048872.7,9703525315.0,,0.0,4518481889.0,8062597403.0,53608918.73,465258786.0,10193936012.0,,243721560.5,,,4646524886.0,1285119360.0,,246651755.1,43350000.0,709332450.6,25974668.7,14965648.08,,41434171.49,,959485440.9,,,858130162.7,,29518633.26,195419415.6,,,102992610.5,,26977480.08,1438303667.0,,,12781263.88,1651914513.0,,4829535607.0,1697544015.0,25491173.23,608767756.5,1261580776.0,1852711543.0,,1268695337.0,964637002.3,,2122035928.0,,,803004962.0,208026190.5,,1467252747.0,989333333.3,,28175370.73,27095797466.0,172214638.2,73072311.52,,14128284.83,94372953.74,83900000.0,,,,,,2980130869.0,11074579.58,2726878981.0,,18541962.11,1507634749.0,,,,,328600426.3,2754732303.0,366761862.8,87488449.89,,599135224.1,214000000000.0,,1523255814.0,,,,2744699858.0,,437450000.0\n1983,,778628250.6,,,2848053181.0,,4511671066.0,991995097.5,,34369644.2,2671831608.0,17765951.31,29317755.98,231804492.5,,,,,2899750.0,89973482.6,2082669251.0,,,24454614.24,,6947104072.0,1946035043.0,1497684301.0,,76251882.88,129898757.7,78919799.79,,859813605.6,0.0,,,,22127066321.0,30902369.44,1374960497.0,126000000.0,952430671.6,200000000.0,3004281422.0,,4770965313.0,,408405797.1,905188931.5,15102947.83,21653641575.0,86599171.8,23631058396.0,,71148287.35,,727666.8802,18064755.2,,2195463586.0,,184250000.0,22100000.0,70000000.0,,,700708442.0,2047257950.0,6830768698.0,310258091.7,10550357293.0,,0.0,4265358582.0,8409527116.0,50162507.37,484742989.8,11429317256.0,,208691732.7,,,4714159753.0,1425498410.0,,492472676.6,38750000.0,,45952585.36,14069652.63,,41151224.44,,628153423.0,,,778556797.2,,26767016.74,192169991.5,,,116316977.5,,22217303.96,1342380183.0,,,12354815.18,1627393327.0,,4256634367.0,1698789946.0,29081758.93,567555469.4,1457006369.0,1985972402.0,,927159637.2,800165576.3,,2195521573.0,,,692947642.5,221221334.9,,905192307.7,888319702.0,,28024671.7,21872720536.0,230769230.8,70617688.27,,10236934.65,124526263.3,83900000.0,,,,,,2629021887.0,11735930.35,2733503185.0,39363259.91,16398734.08,1583036595.0,,,,,383489474.3,2469375535.0,332950425.4,93723596.47,,274611790.9,214000000000.0,,2006976744.0,,,,3052688269.0,,431750000.0\n1984,,1066247744.0,,,2527749815.0,,4925319433.0,949715291.7,,29938434.04,2407447484.0,21237787.7,26968328.69,244337571.5,,,,,3256125.0,144680785.7,2013151758.0,97366249.74,,26109660.57,,7349795764.0,1807905757.0,1462262953.0,,70164798.82,127243641.8,53403541.41,49423627.5,889730898.6,0.0,,,,20124939008.0,31133068.12,1259583261.0,139000000.0,929290821.3,193000000.0,3742137511.0,,4851949869.0,,423019323.7,826070181.3,15601330.13,20212344345.0,80328270.29,22732895544.0,,44624487.03,,846805.02,6465128.712,,1994286405.0,,207480000.0,20740845.14,81000000.0,,,641103030.3,2002310077.0,6956682449.0,284275226.2,9926303622.0,,0.0,4214300331.0,8296144788.0,25153444.25,457778991.6,12225078098.0,,175004683.0,,,4759446931.0,1465909168.0,,474574917.6,24950000.0,,55750799.98,12285803.37,,38661575.09,,512454401.2,,55059872.19,1155945373.0,,25402957.27,188720829.3,,,136654509.1,,18839590.2,1273659777.0,,,10632625.18,1210916250.0,,3977294580.0,1554623805.0,29211271.37,530331804.6,1580789642.0,2114435830.0,,666310916.2,513453143.1,,2313670081.0,,,628464842.1,172997512.4,,874862637.4,731196135.4,,25460676.62,22672050990.0,355384615.4,65136844.13,,9920516.345,235932384.3,89200000.0,,,,,,2668524384.0,9116913.399,3394904459.0,40049707.41,15692619.64,1698837534.0,,,,,249474468.8,2190052307.0,293025202.4,75215039.12,,221851277.3,231000000000.0,,1325415047.0,,,,2770152107.0,81624098.96,360650000.0\n1985,,1146467010.0,,,2027221261.0,,4386859326.0,1036872489.0,,32220298.12,2428223977.0,19810222.52,27106616.84,224948007.1,,,,,3263000.0,131208000.2,2687049984.0,101752153.3,,20997913.35,,7460563318.0,1966928897.0,1137635211.0,,69565043.19,116190293.9,40371344.17,55646692.47,716735061.0,0.0,,30737332.91,,19921872405.0,31391900.79,1259295610.0,61042019.4,953299653.9,284000000.0,4203565423.0,,5077574145.0,,429444444.4,911349660.9,14008928.96,20780557604.0,95489724.28,23281158966.0,,63162776.66,,1244263.419,4652567.483,,1927083076.0,,224420000.0,38971271.33,94000000.0,,,1025550984.0,1923319347.0,7567024020.0,301495819.0,10706415945.0,,0.0,4004517114.0,8253390533.0,18714379.26,501742160.3,13087751954.0,,145781732.1,,,4883795775.0,1379869860.0,,227203508.6,25150000.0,,188947302.5,10667797.39,,38112966.56,,692472049.7,,50869844.15,1241863652.0,,29826627.16,196758644.7,,,148214364.3,41058571.71,19811238.44,1076905728.0,,,10877815.44,1091662993.0,,3884181822.0,1796625192.0,30532050.16,529191398.5,1617713053.0,2143969262.0,,666976464.5,609330746.5,34289370.3,2140789170.0,,,653587081.2,158363306.1,,1528873626.0,2050007584.0,,27250728.43,17656965219.0,205293356.8,64966400.53,,6281702.97,250433594.3,44300000.0,,,,,,2795295633.0,6646662.948,3510318471.0,37839750.88,18879809.82,1629594718.0,,,,,215938722.3,2365977436.0,345976202.3,104818309.0,,203645853.9,258000000000.0,,820000000.0,,,,2117406345.0,53190811.69,309300000.0\n1986,,1156494418.0,,,2449545721.0,,4606710028.0,1475426089.0,,34607737.52,3404311038.0,26277338.54,51180170.14,248796417.2,,,,,,92869207.22,2758186568.0,110162485.9,,34310908.18,,7780136740.0,2565428146.0,1114393822.0,,96559112.46,145411861.2,67436312.94,,679498200.9,0.0,,48729244.32,,27690811161.0,30604149.2,1647882398.0,82290924.24,1127103217.0,207000000.0,4727136104.0,,6270618789.0,,439202898.6,1223271001.0,14591259.37,28454938061.0,136006884.1,27216844988.0,,51650922.76,,1046935.943,6128820.138,,1998816951.0,,140853333.3,27829660.94,105500000.0,,,765838789.8,1734616704.0,9539363086.0,409081178.2,11741433342.0,,0.0,4386224325.0,11941809156.0,23522088.13,625775075.3,19457334441.0,,181255662.3,,,5325292074.0,1295617612.0,,148293323.7,24350000.0,,172743269.3,13369627.53,,53459034.31,,728545632.7,,50566283.23,817296611.7,,37539055.06,231843369.6,,,170669991.0,42460504.2,24743830.16,894074625.0,,,14412109.52,516893509.3,,5351016847.0,2168162775.0,31053048.07,691134040.0,1305689797.0,2282625019.0,,867538985.5,593798594.1,37450561.76,2173578189.0,,,935754339.7,191435349.3,,,2307873265.0,,34889469.11,,260000000.0,85476428.36,,7227148.725,163311245.6,34900000.0,,,,,,3577484916.0,7341260.29,3678980892.0,48800771.57,30011030.71,1635667271.0,,,,,206793454.6,2769409588.0,260704018.6,131071428.6,,242349802.6,281000000000.0,,1004536497.0,,,,2497888430.0,61629720.93,342200000.0\n1987,,1487398890.0,,,2485659656.0,,5057135655.0,1737112605.0,,30784856.43,4162992929.0,35602937.41,50712557.85,288311839.7,,,,,,103362387.2,4323674770.0,104464429.9,,73826342.81,,8694447168.0,3020406521.0,1166781370.0,,122780223.4,163128000.9,28297227.67,100513414.3,721331206.4,0.0,,199500731.1,,34135226422.0,30817967.49,2141274092.0,59327500.29,1196971384.0,207000000.0,4805707420.0,,7921508651.0,,476618357.5,1462231547.0,25131445.66,34858734928.0,,31231666522.0,,43338474.86,,1392344.227,3883662.224,,2399225050.0,,124028000.0,10619291.23,122500000.0,,,823921397.5,1347598625.0,10877406164.0,435378990.4,15263376570.0,,0.0,5995553855.0,15653065895.0,25325014.99,647050307.4,23642290700.0,,249810082.3,,,6040845305.0,1336740077.0,,36999768.47,22250000.0,,226699541.9,18111226.26,,73150597.31,,815386106.1,,36662411.21,813391574.4,,44254118.46,203653743.5,,,83582418.11,43720551.23,21643561.49,1334714483.0,,,13662211.31,201691218.2,,6542917225.0,2753415610.0,33928833.32,925756538.6,1139141743.0,2500172426.0,103800000.0,1455232303.0,652382133.2,42383569.1,1765484773.0,,,1130608394.0,116922830.9,,865412087.9,2272446246.0,,36093359.48,14460266667.0,310333333.3,99871230.5,,4585444.665,176891743.8,28500000.0,,,,,,4469563626.0,8349582.275,3650191083.0,34271986.48,43412292.0,1698687546.0,,,,,194409783.5,2889593497.0,161608082.1,130971749.2,,223924938.6,288000000000.0,,765517241.4,1315597882.0,,,3595968625.0,66915490.04,392600000.0\n1988,,1469382980.0,,,2696341658.0,,5836347868.0,1713954577.0,,34255493.43,4097149308.0,36931589.27,57186887.27,331995586.6,,,,,,92916951.67,5874167753.0,178392184.5,,93747094.76,,9897335684.0,3276156632.0,999951022.8,,128102253.5,154370685.7,214939929.1,,862374404.2,0.0,,243815864.4,,35096843456.0,31059919.76,2320423440.0,47296368.76,1028611425.0,198000000.0,4453565066.0,,8900414227.0,,614855072.5,1704330620.0,24673835.53,36104962946.0,,34304125087.0,,22760424.65,,2161462.759,,,2749556829.0,,146588384.4,11020000.0,132000000.0,,1972400.0,1027508668.0,1356706413.0,11346419153.0,453486447.0,18889008563.0,,0.0,7694798541.0,17403664790.0,30932577.82,587776388.5,28216102753.0,,250942407.5,,,7732395676.0,1704123944.0,,39317743.08,25000000.0,,165486625.5,16956458.63,,86015559.6,,917269144.8,,32904438.55,981914645.6,,48011066.05,255256828.5,,,63852700.4,42983864.11,20167493.07,855741986.7,,,,271106046.5,,6728811707.0,2894745726.0,35789121.14,961838312.4,1148894668.0,2721723240.0,102900000.0,736618231.5,931561008.2,46294747.84,1783781524.0,,,1347837652.0,178435818.2,,982554945.1,2524357529.0,,36626347.16,13354666667.0,369333333.3,105288603.6,,9011475.022,178963345.2,49500000.0,,,,,,4917620754.0,8720150.255,3722802548.0,77892079.18,43089092.42,1809003357.0,,,,,232920340.8,2663901290.0,124833697.7,140904123.0,,259967029.9,293000000000.0,,1096551724.0,1305814502.0,,,4263086823.0,86740656.33,407050000.0\n1989,,1948559396.0,,,1440922190.0,,6300015815.0,1623488055.0,,37903281.72,3880733006.0,28525930.38,66816506.17,378796135.2,2071428571.0,,,,4355375.0,101690872.4,8761486966.0,186129028.9,,102798415.8,,10747134689.0,3082038963.0,988934423.2,11403453020.0,129676998.7,146869357.5,67494749.1,,865205662.8,0.0,,244995663.3,,33604161248.0,31088053.75,2183667160.0,53517350.16,854300945.3,189000000.0,3516344801.0,,9302930296.0,,781521739.1,1766586166.0,29083211.42,35317062940.0,,33498698405.0,,22626966.33,,2722988.351,4434725.155,,2560254614.0,,151627061.3,6023830.213,138000000.0,,2231550.0,812646128.2,1409556738.0,10589796925.0,434222056.0,16301812932.0,,0.0,6270727555.0,17675486539.0,40933809.6,382891036.2,27966353542.0,,228606149.0,,,9468974884.0,2076390756.0,,,,,125682787.2,22610459.53,,75962325.96,,990555090.2,,30247467.94,1153375828.0,,46080349.08,550194633.8,,,79069105.59,38879724.51,22781135.85,1019255475.0,,,,170705511.3,,6399237699.0,2932580201.0,36331136.35,959602906.4,1171521456.0,2580142638.0,101900000.0,862654199.4,954928761.0,53074242.22,1493906252.0,,,1456535413.0,98142356.71,,848461538.5,2572110229.0,,41622478.13,12749866667.0,,99602517.81,,14394912.13,213029679.7,8560000.0,,,,,,5032977192.0,8731526.53,1483652561.0,56424917.24,41861019.16,1939693409.0,,,,,234062029.6,3373741563.0,105316752.3,139821239.7,,297821236.4,304000000000.0,,1196251553.0,458562483.9,,,4181886467.0,167587250.3,408600000.0\n1990,,1751153152.0,,,2050907629.0,,6704213698.0,1972701682.0,,39602347.38,4644324241.0,32817291.98,84465502.36,373023439.0,794520547.9,,,,4768750.0,137065127.5,9236296955.0,231168587.6,,156250839.8,,11414631847.0,4056408189.0,1031475584.0,10085081567.0,143973702.1,180577745.9,45933813.55,,889979074.5,0.0,,411409063.3,,42318768301.0,31116187.73,2649889473.0,47798904.44,904269155.2,202000000.0,2260645161.0,,11695038645.0,,785048309.2,2141300984.0,30542031.59,42589868779.0,,38943795645.0,,27612553.5,,3464911.112,,,3193376484.0,,132196105.0,3589328.49,67120949.03,,2670400.0,847389246.9,1613975396.0,10537035450.0,594006010.4,16474401698.0,,0.0,7375654517.0,20734625579.0,38609944.56,322429005.4,28800451682.0,,246456438.6,,29090909.09,10110714871.0,8961536461.0,,214361038.7,,,187023405.7,24165932.32,,96691368.64,,1069720492.0,,37948124.18,1327241698.0,,52155069.51,814025583.1,,,84598999.67,40181617.44,24312172.03,1125007856.0,,,,277297783.5,1142475980.0,7420849636.0,3394869435.0,37929191.13,1057749672.0,1447919376.0,2810101624.0,73100000.0,777066944.8,951481870.0,68691099.48,1540736842.0,,,1875087897.0,112234255.7,,790796703.3,1739025771.0,,95132735.43,16355466667.0,1177777778.0,118215709.0,,12387253.54,163886690.4,,,,,,,6169504240.0,14223211.66,1641781737.0,34341542.25,50748351.79,2214017705.0,,,,,247855881.5,5315413395.0,87154458.21,107006214.2,,328351062.0,306000000000.0,,737870454.7,511970136.4,,807070715.5,4364458204.0,139324047.3,416300000.0\n1991,,1031247788.0,,,2858778842.0,,7023509067.0,1994055546.0,,42751758.83,4624500746.0,,69505542.22,381720110.1,232176386.6,,,,4732875.0,143643960.1,6694665295.0,245434285.5,,172269188.2,21598187.92,11338503299.0,4016764413.0,1038039494.0,9953641758.0,144168701.9,178198343.2,43891987.21,,911467589.2,0.0,,418387368.7,,39516328623.0,31774522.99,2671946671.0,33894298.95,565098062.6,209000000.0,1345757343.0,,11680263754.0,,529033816.4,2200991549.0,32482582.88,42702599011.0,,42074283749.0,,41427184.18,71764178.4,3996271.673,,,3146899035.0,,119310860.5,2031374.373,47398089.41,,2623227.387,722549153.4,1697029205.0,8622473881.0,624932658.1,17549594830.0,,0.0,10548894781.0,21585706772.0,31891976.66,433271745.1,32785415754.0,,191908506.3,,43294683.66,10956524348.0,12924377966.0,,229469731.0,25000000.0,,277389023.8,22308171.45,,107736089.1,,1148445710.0,,34707087.44,1599507028.0,,,942677085.2,,110838314.6,71803523.25,39440703.49,23704121.2,1571959986.0,144767719.8,,,243705781.0,67668345.5,7246192325.0,3287551636.0,35431485.71,989033810.0,1254811443.0,3067123794.0,78600000.0,697734627.8,913219741.9,52642141.66,1721995821.0,,,2115383815.0,197613496.8,,895631868.1,1377194085.0,,105333802.1,16355466667.0,1365798115.0,110014994.3,,23179749.72,145127188.6,,,,,,,6219460369.0,16006837.31,2893808463.0,,45904568.12,2598337174.0,,,,,260431030.7,5670666520.0,108141651.9,73561599.98,,268628014.6,280000000000.0,,983721953.4,427617814.1,,1028217917.0,3874415135.0,86247306.22,376050000.0\n1992,,794138821.2,31559657.48,,3254455192.0,,6882091580.0,2139925322.0,11070110.7,38986476.43,4131298112.0,,71116618.56,427723625.0,255770911.5,,,,5292125.0,141441910.3,4993804467.0,251692787.5,,177986045.6,23185438.17,10788803124.0,4138043834.0,1168858391.0,12420300875.0,156797334.3,183796639.1,85527294.36,125617699.1,1102357227.0,0.0,,630127106.0,,41965836693.0,33625739.22,2837745377.0,63127240.84,1053301643.0,211000000.0,1415819974.0,,12250195430.0,,255343443.4,2075955550.0,30539125.34,45123086054.0,,40774938835.0,,41663996.04,55654040.29,3501687.892,,,3623052915.0,,153753024.3,3625349.994,,782003661.3,1743605.937,812017967.2,1887635966.0,8083231410.0,674035044.5,19732558015.0,,0.0,8262053674.0,22177090390.0,47192327.63,367745484.8,35999123576.0,,156036602.0,,62293735.89,11614665196.0,6316012045.0,102292611.3,442786331.1,22650000.0,,326765473.6,24237292.3,,123217456.2,,1228526553.0,,23102633.36,2000064622.0,,,1370457677.0,,33041891.2,59605412.17,39378674.16,25238116.38,1766520896.0,124561274.3,,,173657679.3,47200000.0,7904561273.0,3803684930.0,37607537.89,870398917.2,1517165150.0,3388776373.0,78800000.0,904617805.0,1078843704.0,58569676.66,1881935067.0,,,2532649406.0,169556285.2,,,831620409.6,,88570170.0,15360266667.0,183718440.7,109772868.1,,26661754.52,134193736.7,,,,,,281422738.5,6418628291.0,20976434.16,2976570156.0,35324074.77,49113686.85,2961769836.0,1037058.642,,,,289677115.2,6157947273.0,96907036.42,52331345.97,,366965197.8,305000000000.0,,992932485.0,332970309.4,,1306900026.0,3677406461.0,97756279.98,296350000.0\n1993,,1774397877.0,39289843.43,,3368550452.0,9829763.866,6733829290.0,2115115267.0,77519379.84,36267402.59,3746042851.0,,60526975.63,471044672.3,282674243.3,,,,6130375.0,109897118.0,7099899155.0,233941291.9,,185671482.9,19144450.37,10268822622.0,3611212626.0,1291053676.0,12577165930.0,148635238.4,168175220.6,469173805.5,109477580.1,1529432893.0,0.0,,268277271.6,815585466.9,37215052110.0,31065546.56,2682011246.0,95993941.21,1276911083.0,276000000.0,1526165392.0,107737649.2,10041511353.0,13146559.88,163850000.0,1615424809.0,32041095.62,42590872342.0,,34085881363.0,,41004328.58,43956503.99,2556388.668,,,3364413330.0,,144445075.4,4436526.474,40592869.13,1168936759.0,1649639.306,735860385.6,1933304585.0,8253542581.0,597723765.6,1448177703.0,,0.0,8758471677.0,18242013901.0,44542579.54,391137488.4,41353936222.0,,105704527.3,,44626255.11,12377424873.0,2980065532.0,107643979.1,452979280.6,30450000.0,,354785171.2,22140684.39,20769763.77,108089199.8,17691507.97,1251786538.0,,37830790.82,2327305641.0,,44497338.99,2061809624.0,,14057102.96,59366482.2,30155786.96,25728062.72,1923398172.0,70155520.33,,,289231103.9,40210589.62,7054868962.0,3175583193.0,37041837.42,866788074.6,1439921977.0,3308760745.0,95200000.0,956586465.0,1173017500.0,68596992.16,2123378416.0,,,2192208142.0,157930499.3,,,722451519.7,7766720078.0,89436136.36,16451200000.0,257981093.9,119937986.2,,23339131.11,116470035.6,,,,,266899036.6,230303671.6,5011158320.0,23724347.71,1426095238.0,39200036.73,50147794.73,3156299863.0,23498175.22,,,22644876.75,276167134.9,7075086940.0,58725701.62,62636650.43,152233866.5,418919639.0,298000000000.0,,1287954761.0,297716380.0,,1535457656.0,3254313379.0,51128294.49,249800000.0\n1994,,594991178.7,49649504.93,,3754724687.0,,7459696582.0,2227560550.0,43942747.06,41909745.03,3944101813.0,,30259093.49,547417522.2,241993434.8,,,,7899375.0,134595240.4,10591499118.0,261876080.2,,170433762.3,10689745.23,9577377640.0,3899275421.0,1466048832.0,10050586559.0,84071649.21,94517340.44,,,2005122888.0,0.0,,298469126.9,938252776.6,36330284517.0,30711058.34,2718790042.0,100956679.7,1334911648.0,291000000.0,1714409786.0,80198311.21,10092671257.0,25135735.38,148691674.3,1756338984.0,33665273.34,44392512323.0,,34493524143.0,,37823250.83,45871747.51,2316899.696,2016728.765,2379301.339,3587244914.0,,153011545.4,5485552.101,,1625222365.0,1599966.755,757131989.3,2239731575.0,8880551226.0,633699379.1,1703171536.0,,0.0,8780366219.0,18062459082.0,34218503.95,407863026.7,45285594083.0,106926893.0,117331482.6,12086953.61,107258619.0,13519265763.0,3296055513.0,116105380.4,637473438.6,39300000.0,,437032405.1,25853328.83,21062271.38,126000012.1,33900348.04,1365250019.0,,27580945.67,2888815805.0,,29898866.18,2801966892.0,,16393641.22,72864691.92,29488165.08,17060803.08,2120597807.0,56958995.16,,17471024.22,319694489.9,35401494.6,7137373801.0,3403291213.0,39252998.63,979531817.0,1520091027.0,3320617929.0,101000000.0,1111161731.0,1392199022.0,83255878.34,2251923178.0,,,2173634730.0,161100272.3,,,936686222.5,13547871733.0,40510575.39,14279733333.0,226167004.5,66146738.59,,26495551.69,109334519.6,,,,,299993419.1,237949504.1,5154504230.0,25804044.16,1636299776.0,22153979.16,25396024.89,3611133201.0,14182891.53,79583333.33,,24202817.59,297068854.7,5293173966.0,58375569.77,104127847.9,919044682.1,450443306.0,288000000000.0,86929824.56,939683231.4,431345012.2,,2353269332.0,3478582291.0,62869469.99,247900000.0\n1995,,233843714.9,50907521.78,,3801950488.0,52228583.82,7665878446.0,2557834494.0,66159968.91,42108929.88,4449014835.0,,36862814.24,620095155.9,311147105.6,,,179081676.9,8052875.0,140760862.8,14318919608.0,285738475.2,,165873977.8,13014176.16,9176903908.0,4645360982.0,1827997369.0,12606229599.0,,113575532.7,,,2619338187.0,0.0,,298833385.5,1065352459.0,41158705095.0,29608206.12,3117966146.0,84449968.38,1234655192.0,475000000.0,1948876986.0,124996349.9,11439906271.0,36343487.58,122460147.5,1908986807.0,34700248.16,47768110000.0,,34247823782.0,,49054322.26,,2886551.708,2211919.911,3447875.179,4179913247.0,,158348657.5,5691560.614,,2060388930.0,2478871.189,612184817.1,2478753541.0,9754464630.0,702039703.1,2501544190.0,,0.0,8976693112.0,17185853004.0,35298829.61,299838515.5,49961673237.0,177686628.4,149096438.3,26712568.96,123101153.5,16085095679.0,3692435533.0,103704532.2,746264054.1,,,763663963.7,34373285.47,30453612.5,142256814.9,43560331.06,1437898701.0,13345789.4,27170664.12,1712924668.0,,40468959.11,3932079181.0,,21281148.79,33465088.27,31987855.25,11047717.5,2444098387.0,68236520.19,,18431407.12,639406630.6,35119851.46,8011539559.0,3508040839.0,39766584.51,1146415728.0,1513849155.0,3665932427.0,96600000.0,1413463629.0,1700402497.0,56405488.19,2719362634.0,,,2670121572.0,206926409.3,,,983140541.4,12741629470.0,56449336.72,13200266667.0,138756425.7,80915880.66,,25023304.59,111636298.9,,,,,629622682.6,334655022.9,5729770498.0,28769619.72,957899818.9,20034138.17,30852572.78,3849025896.0,5803400.646,135612612.6,,,342902458.4,6606245815.0,85513656.09,127002622.5,1046793431.0,523862025.5,279000000000.0,112678421.5,1198810237.0,,,805892377.9,3292446562.0,55265536.34,262900000.0\n1996,,159741933.5,45713356.11,,3379138770.0,52410268.55,8202776517.0,2457903049.0,71606841.24,50893980.78,4241865968.0,,37141874.14,638958844.8,213616356.3,,,182805614.6,7965875.0,146963017.8,14073226545.0,328359479.2,,140560134.8,12196218.57,8615884471.0,4239447901.0,1904105834.0,14563240390.0,102660140.1,116936303.6,89269879.98,,4318552316.0,0.0,,448075909.3,1123923831.0,38989886649.0,24527208.38,3086224945.0,107001292.2,1452431008.0,419000000.0,2115742979.0,152271808.6,11294316855.0,41436607.71,126454733.2,2021797095.0,32851136.61,46403438584.0,,34490949485.0,67706683.56,44417812.62,,3929706.231,1897743.657,,4613167577.0,,141370462.9,5558340.16,,1938698897.0,,585271901.8,2874845238.0,9904672736.0,750987245.8,3550986964.0,,0.0,9601957420.0,20793128832.0,41791263.91,417489421.7,44047104680.0,241771205.9,170804816.3,28276956.35,113563610.9,16408665267.0,3241385529.0,78445466.01,735631013.6,,,767105591.7,28347308.31,42260000.0,141495421.6,38154934.56,1447128689.0,15354611.16,49442905.51,2063965155.0,130636725.9,39683160.27,4675441102.0,,21608196.89,36037790.98,37887510.75,20152203.02,2420963934.0,66463535.19,,17398035.78,701412878.6,31533400.51,7829004728.0,3537003416.0,39547026.04,1238271987.0,1437191157.0,3547799671.0,101200000.0,1396469289.0,1879303176.0,78744873.28,3083416787.0,,,2600849533.0,202012224.8,,,874451238.9,15826340652.0,73658822.76,13340000000.0,106332797.7,79774881.15,,18592815.28,110830676.2,,,,,641559871.1,329972648.3,6203436943.0,26486561.92,995089040.9,24826410.61,,3938047248.0,13458544.84,48549386.5,,,397469509.2,7512090796.0,101038489.5,135393564.5,1464905136.0,575652014.7,271000000000.0,172211545.7,733197556.0,,,416008632.4,2591787131.0,37835913.57,291650000.0\n1997,,456780475.0,29825492.0,3335766741.0,3340670335.0,64062121.19,7936884917.0,2164802343.0,92086691.97,61870123.83,3684095389.0,,38549246.23,681915124.0,244369396.2,,,249384139.4,9395000.0,180200446.9,13934266552.0,369070790.2,,160507675.1,,7945140183.0,3498218851.0,2120702608.0,16104915232.0,93525611.26,118711118.8,83825040.92,,2988711261.0,0.0,,534141188.7,988324331.8,33217573925.0,26552855.32,2804317083.0,150664189.8,1752395278.0,499000000.0,2267650314.0,92756319.41,9865892241.0,53031652.18,225417105.1,1947002590.0,30962540.18,41308251985.0,,35674878363.0,44007707.13,45483310.22,44370189.81,4176388.698,1817811.122,,4573516492.0,,132112832.6,,,1797184681.0,,695972460.9,3231358571.0,11464883390.0,765305513.3,4642384616.0,,0.0,9693753398.0,20156102258.0,54854608.88,444287729.2,40634840608.0,236752278.4,175834896.9,31158797.7,103419601.2,14848484530.0,2454268845.0,67064556.58,678164279.5,,1251990817.0,698792770.9,28700335.94,75611000.0,134075768.0,37988313.15,1400949501.0,17410750.98,52544736.69,2394152398.0,83254172.21,40262546.07,4780529108.0,,18692594.36,42014622.82,41599441.57,26407487.14,2089087477.0,83659580.38,,17304328.31,818784525.3,30270700.5,6839136799.0,3253032488.0,42587851.99,1180888907.0,1482054616.0,3320238863.0,118000000.0,1178753608.0,1576447115.0,79556597.15,3192276377.0,,,2388687811.0,167982106.9,,,1074785782.0,17577353181.0,77272576.53,18126666667.0,97731859.32,70800402.28,,9490749.703,112211743.8,,914364967.9,,,499529506.7,290785271.8,5203218383.0,25662115.12,1046927961.0,16619008.38,,3264802658.0,19050989.36,106190591.1,,,358166577.8,7791986304.0,118603807.7,139615977.7,2068583952.0,575206289.5,276000000000.0,217747190.7,1541033864.0,,,397073042.4,2414137710.0,43362495.25,311400000.0\n1998,,170278292.6,33638047.44,4010347175.0,3398699350.0,66757573.06,7107542891.0,2159796003.0,107262858.6,58736036.23,3664288413.0,,39494738.56,701585600.4,320389011.3,,,227586087.3,,228677000.4,14357357047.0,293977055.4,,181051047.4,,7748607984.0,3494250971.0,2112373123.0,17527989869.0,,137245911.5,26629667.19,,3389806738.0,0.0,,483748645.1,1166099773.0,33146457057.0,26704778.84,2846065338.0,159053096.3,1910962052.0,549000000.0,2372048406.0,263001685.7,10333417234.0,59919847.48,458549925.4,1959708814.0,22598926.93,40041139680.0,,36866288852.0,41084456.98,57453085.66,45034483.32,4049572.023,2900235.951,,4824257169.0,,139804367.7,,,1427264827.0,,618464380.0,972702125.1,11920610818.0,742402153.2,5479362942.0,,0.0,9145784898.0,20825125352.0,47640218.88,496473906.9,37849012643.0,242646223.1,171964013.3,26092304.3,83323986.09,10457957529.0,2282153592.0,33350210.56,693871897.5,,1443621758.0,733435634.7,27807021.35,138175000.0,143139739.1,42180166.5,1444959716.0,10613141.68,50446576.25,2480943604.0,78991291.13,41020286.4,5873097951.0,,19920839.93,49264817.34,25610687.83,14474120.37,1158657313.0,78912428.46,,22035691.04,1149684730.0,26271274.53,6836084823.0,3324939365.0,42273075.89,969356349.5,1318205462.0,3218881738.0,104000000.0,1141808874.0,1225561281.0,49720532.99,3491022616.0,,,2335597096.0,139262988.0,,,1254227893.0,7955730401.0,87091837.06,20861600000.0,259957570.1,75090854.85,,,110830676.2,,642122263.4,,,397592215.7,301139822.2,5132285182.0,25731330.54,1096039533.0,16103004.99,,2110239752.0,22613230.32,87510040.16,,,365849374.7,8781048158.0,134276958.1,154712531.5,1405161785.0,573248407.6,274000000000.0,,1450963992.0,,,384502730.3,1905656009.0,,306000000.0\n1999,,1066588789.0,42784205.21,4233083730.0,3461730865.0,68234148.57,7770250653.0,2124379546.0,120262174.0,50571188.26,3598447520.0,17843134.39,41741175.48,737412573.6,357224539.6,,,165903848.9,,176744242.1,9866973919.0,258413177.9,,169578756.2,,8210778540.0,3146822887.0,2043134812.0,21027341242.0,,144704636.5,149277860.3,,3247296766.0,0.0,,289970367.0,1205931870.0,32604005638.0,26779052.56,2784881254.0,175000467.8,1826496570.0,296000000.0,2447978794.0,272856734.6,11113722490.0,73800541.32,703704869.5,1653905119.0,23811699.72,38897240331.0,,36453353008.0,25882678.36,59277760.9,55211186.39,3519056.437,,,5012285642.0,,123754165.2,,,1035949008.0,,702942491.1,1135147005.0,13895562461.0,741508607.8,6650285144.0,,0.0,8645271101.0,21016456910.0,45131071.75,511988716.5,43122898505.0,143905357.1,151917777.4,23133179.47,88172003.48,12095186824.0,2286352512.0,15382947.39,829663624.8,,1153487088.0,631014150.1,34078186.69,106450000.0,140758789.2,56568626.39,1207516610.0,5990984.994,45036442.92,2908141919.0,66236920.45,43852596.8,6950081056.0,,18021861.88,56516191.65,31959678.11,14402979.49,1663289474.0,105765957.2,,23550468.65,491671368.6,26927929.68,7026433290.0,3309198286.0,47484957.37,970306042.0,1340442133.0,3080764514.0,111600000.0,992217726.3,1341016654.0,35678026.43,3226555351.0,,,2406493740.0,116553254.9,,,955337577.0,6469035211.0,80852363.58,18320000000.0,429617897.4,78285006.15,,,114743701.1,,737469450.8,,,327169170.9,274841827.8,5148727432.0,25853264.11,1127632857.0,20951796.25,,2056847122.0,15126152.26,111923076.9,,,357013395.4,9951788874.0,128497943.6,159704570.3,941788284.1,574285890.7,281000000000.0,250071736.0,1408064716.0,,,395252957.3,1738036625.0,56113432.89,263400000.0\n2000,,583621333.6,45362503.39,5875833901.0,3266633317.0,68052142.07,7273760313.0,1925557398.0,119575651.7,42321552.22,3190805233.0,14496275.16,36658539.05,740798160.0,351343204.9,,,140326204.7,7116125.0,173245422.5,11344032535.0,244205202.0,,184718394.6,,8299385231.0,2800146846.0,2103460610.0,22929764607.0,,123034343.9,132883821.7,,3027922793.0,0.0,,281160374.3,1157294085.0,28149990787.0,26025061.75,2392510831.0,246810843.7,1881163649.0,266000000.0,2627698334.0,230670129.9,10273779252.0,78313308.56,617541613.6,1558135250.0,32039537.35,33814262023.0,91295212.2,35254814799.0,18824291.43,50882608.24,45967931.21,3323532.172,9531360.608,,4564522446.0,,157848092.8,12585649.29,52462396.89,659775033.3,,715857664.8,1129542840.0,14287514241.0,694674774.3,8327053824.0,,0.0,9407761463.0,19878720932.0,43566232.49,529337094.5,45509673827.0,143527541.1,165584735.2,25794155.81,81025841.31,13801107024.0,2697075596.0,13717664.6,930016583.7,,1085534665.0,822127365.6,30555503.52,140400000.0,128192371.5,69990683.36,859151483.2,5090797.96,47210934.61,3323124172.0,69828947.91,43681247.68,9030564409.0,,24265559.55,55361458.44,37878312.26,11727501.44,1533157895.0,92397796.49,,20084946.68,368644109.5,30825265.68,5971807629.0,2922343510.0,51358135.31,858414919.5,1577243173.0,2973072722.0,0.0,912005730.7,1303077685.0,33606981.63,3146106713.0,,,2204256495.0,110248167.2,,,935569610.3,9228204144.0,61329857.12,19964266667.0,587267572.3,62361652.64,,23310804.35,110370320.3,,337080608.4,,,342322768.9,222391556.8,4789440137.0,24471060.53,897044908.7,21349034.24,,1881009454.0,10353281.16,,,,332389762.7,9993730197.0,135055952.6,141303025.9,1136716646.0,555968792.4,302000000000.0,115375384.6,1788322080.0,,,473664032.5,1891725013.0,,346300000.0\n2001,,404299140.0,53232045.16,5797957794.0,3183591796.0,66247626.46,7043145895.0,1788798311.0,131963660.1,53230373.11,3036035472.0,13112535.62,36832965.23,705481695.2,406003542.8,,,177697841.7,7454662.5,184397571.0,10930231568.0,217667939.2,,210322093.6,,8375571425.0,2763655325.0,1893098224.0,27875387284.0,,124301708.4,,54445943.53,3264438192.0,0.0,,327627160.3,1182519922.0,27425257940.0,26048131.62,2525225825.0,305900328.0,2091627274.0,384000000.0,2834256230.0,166550245.4,10222074075.0,93818539.9,349808276.5,1479270879.0,32811655.82,33276659717.0,90036137.23,35331927360.0,23829967.87,32352140.5,87718398.82,2454230.2,6183163.515,,4428103552.0,,196765577.5,14371052.9,62951976.58,629464103.8,,845055673.8,919022697.8,14600642346.0,767778364.4,10378791766.0,,0.0,9607416508.0,19519381482.0,46374382.29,528926645.6,40757967234.0,221486206.5,195365005.5,22212067.21,70846940.89,12941850828.0,2685735278.0,12574570.78,958540630.2,,819747993.6,675016502.0,23390729.43,166875000.0,160284919.2,86966741.1,1470317615.0,5961865.823,65037565.45,3540226539.0,226303002.3,44881650.23,9464417217.0,,23124715.31,50619215.98,51852489.35,12681914.7,1934473684.0,96757182.45,,24828146.93,570632287.8,28193450.44,6200391943.0,2965973987.0,64701738.38,796636889.1,1819895969.0,2842046790.0,0.0,904235449.1,1122103992.0,25230765.6,3630645595.0,,,2324811411.0,91298893.93,,,985657655.7,11683151345.0,56885903.13,21026666667.0,388091317.4,68891286.82,,29911134.61,150651459.1,,494069226.5,,,393996598.3,271488790.4,4128046006.0,19665055.21,1022526578.0,26192330.83,,1724799637.0,12468225.56,,,13945440.72,335647906.8,7216051045.0,150728196.3,136157342.5,1088575173.0,523008311.4,313000000000.0,59760610.47,1911400137.0,,,540101498.8,1802262236.0,,286700000.0\n2002,,438686245.4,58649352.5,5354118448.0,1114172483.0,64106405.65,7946766202.0,1881746741.0,139894091.9,44910067.05,3147146017.0,26000447.64,42468449.96,681816161.7,455950466.5,,241025517.6,204364237.4,7829937.5,160437935.8,9664561903.0,226182431.5,,223549258.8,10681962.96,8495399281.0,2882696762.0,1779553138.0,32137735649.0,,145626610.5,,70704230.2,3347522602.0,0.0,,242483491.0,1494390397.0,29333207849.0,33250994.54,2694082493.0,271663317.2,2100602521.0,505000000.0,2902768425.0,150764425.2,10270839019.0,122069530.7,288932333.5,1611406522.0,30914304.27,36403933933.0,94693165.45,39659529123.0,33975807.04,36975481.34,98084865.17,2259285.664,6363093.769,,4734177215.0,,158368119.3,16652243.46,63602176.06,733680739.1,,1079154824.0,1369857129.0,14749667252.0,811255940.9,3243891033.0,,0.0,10090890495.0,21610059762.0,56898147.1,521861777.2,39333708170.0,245956719.4,213894508.0,25933378.39,65182716.1,14101703315.0,2821521878.0,11435617.47,907462686.6,,452513614.8,571657950.2,19559896.4,181481441.2,153404545.7,147224840.2,1474874326.0,6978372.204,57743396.83,3479509029.0,106309576.7,49355225.63,11000356816.0,,25282128.41,53509586.96,36281137.41,14815169.79,2237894737.0,87992258.58,,20660327.01,896913201.4,34831910.07,6728153969.0,4065868548.0,85405885.72,865788853.0,1868465540.0,3273401893.0,0.0,839613251.8,1199121767.0,17020861.47,3776173214.0,,,2602230483.0,69892741.29,,760989011.0,1056136062.0,13943825063.0,51118614.12,18501866667.0,484607263.0,74361395.03,,27133961.88,161700000.0,,678511699.8,,,440059286.0,326959522.8,4354573015.0,18338440.52,1102912157.0,34290403.85,,1812993336.0,25577668.2,,,19492116.74,345424236.7,9050377182.0,140753561.8,142191594.1,1176355738.0,344263066.3,357000000000.0,45914432.99,1071363969.0,,,737366548.0,1766082898.0,,677000000.0\n2003,,670021164.4,76142881.76,5834717495.0,1374873734.0,76587998.89,9926649415.0,2381962769.0,176552162.3,43413201.31,3875697772.0,34544046.8,50757054.37,719442956.9,569054077.5,,202282838.9,231563860.4,8552225.0,173431324.8,8392905884.0,243373245.0,,301014357.8,15018926.36,9958245602.0,3270337504.0,2067983998.0,35126306608.0,213007570.5,188499655.9,78708031.88,93776668.96,3278369503.0,0.0,296933962.3,288427605.8,1885706689.0,35055088179.0,41763775.81,3199158428.0,155802495.6,2206395762.0,739000000.0,2383914898.0,181583669.0,12880532801.0,171411923.9,278673159.9,2475059743.0,37296898.08,45916973841.0,108396421.2,46942962291.0,42647402.88,53244020.29,84133949.31,1997861.937,7505161.734,,5035585542.0,,178771794.0,16345330.57,82195176.79,709399147.2,,1401561253.0,2134746704.0,16333986643.0,965199981.0,3717068450.0,,0.0,10827490776.0,26824213292.0,54845871.82,611847672.8,42486177361.0,317564315.1,245938663.8,32603112.03,67525224.43,15847047272.0,3130746413.0,11013340.9,923383084.6,,541401766.5,541695589.6,27363759.54,210822413.2,198637975.5,189144251.4,1819230070.0,8246742.537,72517018.89,3245342478.0,115827201.7,66758430.83,24189109503.0,,24333211.23,59771342.55,62449150.29,13118825.85,2881578947.0,129449089.5,,24604267.03,587461887.3,35307124.98,8356338470.0,4517514992.0,102934146.2,1132832007.0,1969310793.0,3722814794.0,0.0,891253913.4,1301286084.0,19307132.13,4150261759.0,,,3109812942.0,63511880.06,,784615384.6,1250327559.0,16973739085.0,45196268.98,18747466667.0,398110221.7,96856503.79,,28467933.59,126600000.0,,730567122.9,,,624508454.6,416906753.7,5305640404.0,31927690.93,1436210734.0,40949759.12,28831211.29,1891520588.0,34788346.39,,,33736557.0,407385561.1,10277901778.0,125254713.9,152379921.8,1427984751.0,269526777.2,415000000000.0,54133695.46,987890177.7,841930159.4,,807313244.1,2574176278.0,,194800000.0\n2004,125111557.5,817533582.2,100922358.4,6816882233.0,1465809188.0,98070488.2,11995219710.0,2679282065.0,228249631.6,44872377.15,4262663513.0,41780478.34,65684242.41,770641160.3,650748201.7,,200100307.3,314314017.8,9486150.0,168881603.1,9780111585.0,199381149.3,,314038897.1,15103589.92,11336489831.0,3503819863.0,2687320866.0,40352713136.0,250811588.4,221107924.7,137637805.5,124298437.4,4056896991.0,0.0,62047619.05,338474566.3,2042085931.0,38007611456.0,37355742.99,3578832460.0,152878466.8,2802224794.0,710000000.0,2369743586.0,,15262458637.0,204968180.2,311038749.0,2892938124.0,46798811.28,53007021661.0,125121856.6,53970302831.0,70419742.78,56353842.99,81018570.1,1931395.5,,,6267468787.0,,114893349.3,22132238.74,60561786.64,730867004.5,,1532612234.0,2428947795.0,20238566527.0,1101860647.0,5243621133.0,613724869.6,0.0,11127065294.0,30261076655.0,54533132.23,586741890.0,45339809415.0,426441724.6,259807840.7,37238358.12,69218798.63,17829864143.0,3450118765.0,11496967.52,954560530.7,3182000.0,685073220.1,619305492.4,31386955.1,270841799.8,234676202.7,229353322.5,1937523822.0,9378005.953,54471710.03,3129009392.0,135256294.8,77420331.83,29853914083.0,,27749093.06,77630605.86,,21965738.58,2823157895.0,166997177.9,,31611724.73,639990066.8,32628065.16,9377114724.0,4887380337.0,130650327.9,1285163189.0,2230689207.0,4128195489.0,0.0,922046074.5,1243221348.0,24421729.44,4778627749.0,,,3719431562.0,84466986.26,,772362637.4,1530183904.0,20955413571.0,41215761.05,20910400000.0,1240766949.0,107553687.9,,22961537.04,128000000.0,,739172065.1,,,711290428.0,493153892.9,5514710385.0,42695547.31,1388544983.0,50540901.22,31719621.04,1866937328.0,45110098.94,,,75889150.48,444651416.7,10920773882.0,127567862.8,196015853.7,1685034159.0,279301971.5,465000000000.0,,1448715983.0,915089546.6,,735485127.9,3099065125.0,98349404.04,256100000.0\n2005,122727193.1,1365055399.0,110140852.7,6604220558.0,1699579152.0,140738102.7,13237798499.0,2686166244.0,304521477.7,49557129.38,4228224643.0,44706029.56,73843342.16,773677668.2,699433973.1,,173304847.7,452684068.3,10710962.5,169262316.4,13588619736.0,248588079.8,,283835745.1,15396194.65,12988132964.0,3484636759.0,3100391591.0,45918881613.0,249872978.1,223084623.1,165205060.9,100916074.5,4914190182.0,0.0,78557142.86,380875028.8,2439538514.0,38054021788.0,44847260.59,3468452920.0,272200481.1,2924820167.0,954000000.0,2659439714.0,,15997724220.0,265961745.8,342066638.7,2999391049.0,43111350.29,52908769835.0,118111430.5,55151564188.0,214071430.1,64196566.4,,2985085.073,12116374.83,,7028428593.0,,104467679.9,18506566.6,62589274.81,799160901.2,,1596087843.0,2146270791.0,23072312925.0,1144978361.0,6796744965.0,1120278533.0,0.0,10919173621.0,29737642392.0,59329776.32,603667136.8,44300613330.0,591985249.8,316799485.4,39718288.7,70959071.47,22159512557.0,3509417808.0,11965988.44,962520729.7,8025000.0,690930769.3,644211825.1,33619893.92,303819006.4,243744714.7,272551115.8,2031131381.0,11960379.69,54018162.48,3621523413.0,127003654.4,86450742.04,32954262251.0,60811819.13,29797967.23,62247951.09,66659636.65,38213561.9,3120337779.0,192072120.8,,32798198.18,674208144.8,34123573.95,9566980053.0,4884904928.0,159326023.8,1389770959.0,2739011704.0,4587117425.0,0.0,1203039421.0,1372702435.0,30464707.68,5896404861.0,,,4039322489.0,77468937.97,,887500000.0,1975975151.0,27336977274.0,44996351.89,25392038601.0,1164995936.0,124403755.3,,23552130.23,132900000.0,,629500942.8,,,823313455.4,514172799.5,5518466926.0,59471673.9,1450324657.0,55491517.97,33238035.29,1984492828.0,,,8230000.0,97752858.93,468464580.0,12081156314.0,139493591.3,216667041.1,2405492582.0,347323784.9,503000000000.0,,2665390597.0,1026426801.0,,815627464.0,3566963815.0,139509353.6,131400000.0\n2006,131346231.3,1970309115.0,140983900.7,7165418652.0,1847553130.0,188189116.4,14239779513.0,2640185362.0,717111853.6,44717502.04,4307895341.0,46786130.93,72632867.33,829682794.8,750992451.6,,178375570.1,631831238.1,12283037.5,179525489.2,16404867307.0,293436463.5,,272934274.8,,14809892803.0,3328973394.0,3855358069.0,55337487669.0,267360247.9,256927843.3,205102086.6,126569641.8,5326664238.0,0.0,76587443.95,387703672.0,2449963710.0,38092382653.0,49515814.11,3896730668.0,259240325.1,3093978245.0,950000000.0,2952520159.0,,17252217613.0,315179053.3,345687017.0,3128517474.0,54067168.06,54516076830.0,130237717.3,57482975674.0,404172025.9,75732607.93,,2786319.244,,,7607186182.0,,130546929.2,19176973.64,75595918.54,849431034.7,,1410071771.0,2611875117.0,23951927958.0,1190379117.0,8751474767.0,1236081013.0,0.0,11558970817.0,29633022263.0,72645523.01,701551481.0,41552592886.0,793027147.5,375807203.2,47207036.73,75881313.59,25177237741.0,3597816498.0,13410565.06,1008955224.0,3925000.0,614356296.2,791491040.7,35224579.31,351605788.8,247133192.2,367825490.4,2134594876.0,16449497.76,53914017.64,4082501468.0,126008876.7,96004895.87,,62347815.51,39189624.48,57439135.78,81906180.19,31090549.5,3266197406.0,199559185.1,,,776148058.3,37285145.13,10217765740.0,5011748967.0,157247689.5,1463950819.0,3022626788.0,4969197611.0,0.0,1291060140.0,1607271267.0,31307966.36,6619413759.0,,,4066783668.0,106557406.1,,1065741758.0,2251493425.0,34517781619.0,54557648.04,29580507343.0,1647839194.0,148555145.4,,28022458.48,142100000.0,,705062714.3,551454504.4,,911370626.8,608833753.4,5577203266.0,58520575.05,1435215692.0,222991451.4,,2441917005.0,,,17105000.0,115560463.1,497212664.0,13363298981.0,147417924.8,218533948.5,2986475248.0,392798690.7,528000000000.0,,3630088496.0,1286528867.0,,822130536.1,3506139658.0,205852231.6,161700000.0\n2007,219580214.3,2032432883.0,194840309.2,8460993873.0,2296448242.0,280108688.3,17186440962.0,3499817967.0,946599792.1,46308706.22,5163979974.0,,107816728.5,953464223.6,1032154228.0,,195049685.1,746943264.0,13759075.0,221280687.8,20485758015.0,323137150.8,,306451402.7,19112519.74,17417139931.0,3524746536.0,4022478104.0,68011562228.0,323619193.5,296698917.3,205217223.0,168079588.2,6775762767.0,0.0,83365638.77,405176368.5,2707677752.0,42551851943.0,34518711.91,4175652589.0,274775680.8,3945815125.0,1310000000.0,3306908257.0,,20065668635.0,444197516.0,360140308.6,3296557750.0,75576918.3,60594986847.0,,65986089657.0,931750564.2,126077789.0,,4547026.14,,196314371.7,8533090258.0,,135925872.8,24971954.12,95924340.17,978853732.1,,1776464117.0,3348758342.0,28254773450.0,1372225370.0,9330901882.0,1989948747.0,0.0,12128941564.0,31982431792.0,83511942.1,1032440056.0,40530045688.0,1359776099.0,494684896.7,50909587.1,79015425.88,27726129585.0,4115736734.0,14838865.54,1152238806.0,3486000.0,639137046.2,1054816810.0,39834671.56,442004493.3,286051368.8,481492627.1,2408350250.0,22718473.79,81936943.67,4779835655.0,162567237.1,110376888.0,,64190474.63,56561859.19,68625364.26,,33599605.59,3970537327.0,228174673.6,,,971321378.6,39472043.8,11480377424.0,5875288100.0,169575397.1,1713995943.0,3244603381.0,5342575138.0,0.0,1332655376.0,2014371029.0,39287099.33,8589136364.0,,,4366184075.0,132393616.2,,1562225275.0,2607689942.0,43534994996.0,55580440.8,35469513009.0,2427072595.0,192807975.5,,29076876.18,165600000.0,,971570564.6,587966866.7,,1139194488.0,692654912.6,6386221162.0,61877516.72,1599033723.0,389135909.6,,3522634436.0,,,23735000.0,124750514.8,490650558.8,15319161863.0,166215543.3,252119246.4,4096039604.0,416045332.5,557000000000.0,,4351560317.0,1784217422.0,,1050499364.0,3525684244.0,232278664.4,\n2008,240532594.6,3163591147.0,255677957.8,11571681416.0,2788980205.0,395994365.4,18633092318.0,3746731607.0,1607799226.0,43856319.95,6295821584.0,64724601.11,116999586.9,1030020018.0,1038051933.0,,233292390.7,883027522.9,18717737.5,327194708.2,24452903036.0,361989034.5,,332400254.3,31511483.79,19342058405.0,4098459038.0,4641877576.0,86362099113.0,368910574.9,346586125.7,159998426.6,207724344.3,9051130502.0,0.0,89057268.72,453803054.2,2918695853.0,48081444318.0,36274835.28,4788030121.0,333538881.6,5172336907.0,1646000000.0,3779880350.0,,22227721830.0,505779818.3,388187596.7,3958118334.0,53585658.62,66009448127.0,,65619450480.0,1090160251.0,113668160.2,,17163533.46,,292754658.8,10574138499.0,,166494048.3,30520593.42,132428400.6,1295957074.0,,1867877499.0,3232202215.0,33002376727.0,1582890834.0,11081950209.0,3116304020.0,0.0,14191949919.0,36839989746.0,130699170.7,1358383580.0,46361468280.0,1540810813.0,580011940.7,61124321.93,82630723.43,26072410508.0,4430342077.0,16267888.96,1169485904.0,3907000.0,1100068652.0,1511363007.0,27350681.86,541390194.6,236720167.1,581752272.9,2944958473.0,36845650.5,103271539.5,4939665939.0,172658158.9,142919351.1,,85106382.98,66749871.33,83709455.73,123323383.8,44464251.4,4411795565.0,266250021.2,,53630486.48,1615533211.0,42659728.78,12374848940.0,6370921986.0,187069695.8,1661242822.0,3462483745.0,5226678787.0,0.0,1503663891.0,2270904919.0,39332022.27,9349421394.0,,,4812099462.0,168154857.4,,2317500000.0,3000404945.0,56183785393.0,67660359.62,38222933333.0,3228000000.0,216870289.5,,23645736.56,173000000.0,,1111631538.0,896390706.9,,1411710285.0,829384406.9,6024791006.0,66657830.2,1732416848.0,611426848.7,57009189.27,4465994062.0,52467120.6,,23651000.0,139098455.7,578911487.3,17127313222.0,194000300.9,311856269.3,4811019855.0,567703932.8,621000000000.0,,5660456451.0,2137625597.0,,1196411766.0,3285925081.0,278055135.8,\n2009,251869514.8,3311193245.0,182736862.5,13836351259.0,2981852290.0,359499343.5,18960138513.0,3334754940.0,1472909977.0,,5620670063.0,,127333296.6,1258791157.0,963254164.0,,242471357.8,675426505.1,17267537.5,345777777.8,25648809911.0,349759722.8,,330147278.7,35992384.36,18936226052.0,4055544323.0,3902221588.0,106000000000.0,420059044.5,343265154.0,122378011.0,,9033202673.0,0.0,92462555.07,471352781.1,2718559513.0,47470073335.0,,4337355690.0,320855289.2,5280588156.0,1949000000.0,4017404478.0,,20178274985.0,434340865.2,339627768.0,3940584835.0,51285722.32,66884028879.0,,57914627858.0,603655214.9,118290743.9,,7095299.575,13744583.7,371927587.9,10641348183.0,,147410544.1,31055650.89,156802557.3,1129098496.0,,1475818169.0,3304459138.0,38722154392.0,1415725373.0,12584623339.0,3237179487.0,0.0,14030376087.0,34054481324.0,114808331.8,1568309859.0,51465158208.0,1271890276.0,578071672.4,67213747.35,136589738.0,24575661939.0,4208871206.0,13973614.53,1426202322.0,7193000.0,,1522232372.0,47399768.93,404826028.7,222959826.9,363809251.1,3055069442.0,24906387.27,70985221.42,4855514856.0,158716661.5,144434608.4,,76683387.91,37633746.0,84302809.4,114824329.4,58797381.82,3964817705.0,299516030.2,,53000300.73,1504486172.0,41721772.9,12131812076.0,6195603602.0,209703502.0,1623013593.0,3367490247.0,5274564971.0,0.0,1848562930.0,2115785124.0,52048171.78,7903812008.0,,,4949690419.0,168486261.9,,1948351648.0,2225144540.0,51532116798.0,75278486.05,41267200000.0,3180483010.0,214824243.0,,26405564.66,189900000.0,,974288479.2,609898632.6,,1350294439.0,798868642.2,5062962024.0,75911617.99,2181974581.0,738903737.1,55130817.09,4799654668.0,47529274.32,,36481000.0,138523710.2,564775933.7,16352301844.0,219476865.3,293527670.7,3452467130.0,577056008.5,669000000000.0,,4055379599.0,2401450914.0,,1420775264.0,3592687702.0,220962285.8,\n2010,298146852.5,3500794836.0,185893242.0,17504697073.0,3475348407.0,395011507.8,23217692816.0,3218351224.0,1476608734.0,,5244720513.0,,123700474.7,1624625086.0,893467534.0,,219915489.5,767699285.9,15337250.0,327413146.1,34002944470.0,390719540.0,,348672725.3,51585274.5,19315688825.0,4115407849.0,4894081125.0,116000000000.0,387692140.0,354054397.8,183682097.5,218390920.6,10422054494.0,0.0,94277533.04,477587428.6,2497902955.0,46255521194.0,,4503492127.0,354856781.4,5671309117.0,2094000000.0,4407286453.0,,19710785450.0,332231196.9,303617033.1,3717180505.0,50408953.71,61781748108.0,268738503.9,58082848795.0,454178215.2,122480468.5,,,17129808.17,,8163619387.0,,169798840.1,31075055.49,170186979.7,1015876654.0,,1350820413.0,4663365759.0,46090445657.0,1274228688.0,13561272454.0,3752905983.0,0.0,14605298604.0,32020819951.0,115571396.0,1557887324.0,54655450735.0,1501815344.0,622049847.8,77237992.31,167857928.0,28175181219.0,4335204653.0,15356402.95,1585406302.0,8458000.0,,1532026109.0,70661037.37,326320918.7,274135432.5,259672124.2,3160804832.0,18335718.27,56922892.89,5897198481.0,130021469.1,146786545.7,,75094861.9,54855717.51,99189931.71,,49984217.91,3854285351.0,396539101.4,,66889841.44,1990099669.0,44272442.92,11220523280.0,6498659038.0,254950072.1,1930748002.0,3671391417.0,5974613176.0,0.0,2178945723.0,2438189569.0,46335624.37,8790170132.0,,,4718924038.0,204605254.8,,1876758242.0,2086220460.0,58720227609.0,74514417.29,45244533333.0,,195732892.9,,25062278.63,201000000.0,,872339631.7,650910667.8,,1137680536.0,772085107.5,5885935800.0,102032175.0,2346021283.0,615817007.5,56832843.04,4962419956.0,53756933.71,,26389000.0,143063064.8,571189045.7,17939370512.0,282725098.8,608685868.6,3729503859.0,755659469.7,698000000000.0,,3991194835.0,2672286425.0,,1448153377.0,4188168092.0,280187778.6,98293000.0\n2011,325807003.7,3639496374.0,197006789.2,19181756297.0,4051930105.0,390871433.9,26597198655.0,3409721209.0,3080084996.0,,5499370964.0,,138850860.2,1801539802.0,829031753.5,,211878260.6,756277351.3,15416250.0,403568566.1,36936209896.0,415371529.0,,363324481.2,49874328.73,21393720864.0,4973863849.0,5686752070.0,138000000000.0,357330259.0,347477885.7,238787546.6,,10306578506.0,0.0,93744493.39,479735318.4,2474313259.0,48140347951.0,,4518590127.0,348559830.1,8652237040.0,2453700000.0,4463974191.0,,19695435494.0,389237580.9,332441772.4,4099505807.0,60785527.47,64600927220.0,265965337.6,60270435687.0,468779626.8,234327479.6,,,17519804.35,,7128608267.0,,197433150.7,32416747.54,200358405.9,1106464042.0,,1472069832.0,5838026186.0,49633815794.0,1300331547.0,14277667361.0,4278632479.0,0.0,16343210462.0,33828804971.0,133638559.8,1594788732.0,60762213841.0,1803970782.0,646678106.7,86423386.41,192159418.5,30991707946.0,5393526319.0,19009820.6,1626533997.0,13271000.0,,1751910641.0,58169320.75,344605215.4,256962415.8,296834929.2,3342698956.0,22966963.69,71989808.01,6471388439.0,132461994.8,161062674.6,,79376663.82,87157848.16,118871183.0,,52804842.99,4692483660.0,443591424.5,,83947561.38,2384936022.0,51453111.13,11647934608.0,7232260585.0,284518851.1,2080091009.0,5000715215.0,6954787511.0,0.0,2355167834.0,2701492158.0,64193136.14,9455422988.0,,,4904393519.0,285106240.8,,,2379871482.0,70237523951.0,75383928.56,48530933333.0,,230190350.7,,25476183.91,220700000.0,,986958193.7,1052721970.0,,1064842811.0,665679671.4,6324747364.0,106629408.9,2494887483.0,609706993.1,59018874.0,5512983861.0,71342116.79,,20530000.0,146080695.2,715239597.1,17304881561.0,307473984.2,607135070.9,3684691424.0,824833542.2,711000000000.0,,3577531587.0,2686520590.0,,1612254443.0,4594154078.0,309113764.2,198438000.0\n2012,238583385.4,4144634851.0,183204695.7,19024098026.0,4563217859.0,380571678.9,26216580848.0,3187227449.0,3246122613.0,58966662.28,5168997834.0,78223091.04,147729698.9,1823425076.0,807529319.0,,197344650.2,817069894.1,15219125.0,499870043.4,33987005074.0,411261473.9,,326874161.7,42746025.19,20452107111.0,4592165378.0,5466101782.0,157000000000.0,407596534.1,354447463.1,332493979.4,,11706271913.0,0.0,126872246.7,414496321.4,2220610395.0,46470870905.0,,4422458084.0,396187178.6,9326287144.0,2589776000.0,4557748767.0,,18860623363.0,436852911.6,366539017.7,3943239958.0,59221516.41,60035153811.0,278143957.1,58495656721.0,491982529.4,337260972.7,168913357.5,11173079.86,24491750.68,,5914988423.0,,224366543.6,33542606.6,212341274.3,955320163.6,,1322277703.0,6531097955.0,47216920048.0,1157531730.0,16493963287.0,4141066054.0,0.0,15567095862.0,29781008205.0,137635505.7,1472816901.0,60011530195.0,2177543205.0,840072590.0,107529842.9,217305727.7,31951760810.0,5941536637.0,20327157.66,1757213930.0,15179000.0,2987413408.0,1474902628.0,53240145.82,328631681.6,237503049.8,255740342.6,3402700836.0,23870072.82,68636017.8,6978776719.0,119410402.5,148865779.9,2969236076.0,67712201.3,113622769.9,139100553.3,142299912.3,46155953.69,4507252007.0,412163503.6,,148865779.9,2316478200.0,70132969.8,10364720787.0,7143962183.0,256686839.5,2094946041.0,9250650195.0,7478971082.0,0.0,2857983382.0,2898685257.0,110623185.3,8986838792.0,,,4137254045.0,320909756.6,,,2102886223.0,81469399931.0,79793910.09,56497866667.0,,196661489.0,,29758934.08,224300000.0,,853622633.2,988225988.7,,1020180035.0,543496416.5,6243671605.0,90639795.27,,,62931049.68,5491915221.0,76260471.83,,33388000.0,168762442.5,681225950.6,17958240406.0,359739418.8,351838247.0,4136888486.0,924640335.6,685000000000.0,,5114847100.0,3360860380.0,,1618840127.0,4489590096.0,346301423.1,318272000.0\n2013,217194107.1,6090751702.0,180015508.8,23561061947.0,5137974301.0,444551859.5,24825262589.0,3229065841.0,3367574161.0,60859500.09,5263164883.0,86003157.64,166136345.2,2047989071.0,899584003.5,,197617188.8,971107820.3,17778875.0,564409840.8,32874787231.0,412094279.8,,306438573.6,47923245.08,18515731210.0,5032883664.0,5529879481.0,180000000000.0,430003643.4,392840660.7,374475561.3,367057323.3,12503812627.0,0.0,119383259.9,384925361.0,2148784401.0,45930540563.0,,4216647585.0,383380254.1,10161588239.0,2735825000.0,4359834244.0,,17242959322.0,479314460.8,345064165.8,4161139945.0,58108276.9,62417099178.0,282163387.6,56861759588.0,441878927.0,254997057.4,196818705.6,10378890.69,21710792.65,,5655183036.0,,249757853.4,35163485.79,294917779.4,956952644.1,51595.84748,1280050962.0,8384028601.0,47403528801.0,1195763444.0,11997186984.0,7780188679.0,0.0,17319707976.0,29957445905.0,128431323.0,1444929577.0,49023932407.0,2551124375.0,860560896.1,119000613.9,243470109.9,34311220715.0,5698067233.0,22677720.33,1935718241.0,15111500.0,3964690154.0,1600841410.0,47941183.17,354862149.7,258655906.2,283568932.7,4065552317.0,26710522.13,71877874.49,7837613530.0,126506348.7,153833697.7,2366989085.0,64836243.08,103464069.9,157892114.4,144215483.5,62925520.09,4915722759.0,389958736.7,,106064286.3,2418760171.0,74532010.94,10226260325.0,7391829787.0,281038425.7,2134105838.0,8766319896.0,7645455529.0,0.0,3305451871.0,3377027861.0,105100890.6,9275711727.0,,,4724102082.0,371215575.4,,,2452512981.0,88352896464.0,82480715.58,67020000000.0,,236737916.0,,31684939.41,237500000.0,26050000.0,919809908.3,981983050.8,,967923107.9,506742932.1,6528737467.0,86040376.76,,726459396.0,72419237.31,5901296947.0,,,31683000.0,211176025.9,759358881.2,18662574078.0,443379945.5,300075573.4,4386463155.0,1045084368.0,640000000000.0,,6199698500.0,3727249276.0,,1648750524.0,4118208483.0,381345802.1,356700000.0\n2014,268227074.2,6841864484.0,178120368.0,22755071477.0,4979442724.0,457807021.8,25783708714.0,3305159256.0,3427179917.0,62177294.74,5191509381.0,92990706.19,177166954.9,2355991525.0,835716950.6,,190380454.6,1010827014.0,19916875.0,625885094.1,32659614241.0,527785231.7,,346281450.3,38407006.26,17853720278.0,4612776715.0,5102779356.0,201000000000.0,521260479.6,401529079.8,341224738.6,704893662.2,11845957098.0,0.0,125638766.5,357806840.0,2022883295.0,46102673010.0,,4056861511.0,437572091.1,9724379972.0,2786519000.0,5085120542.0,,17178549315.0,512119045.1,414476025.8,3985508352.0,46079423.53,63613569143.0,208124753.5,59182858554.0,415642426.2,252653419.0,196945589.8,14599956.87,21470829.16,166540254.6,5531285909.0,,245672981.8,39280999.18,314071900.2,906625906.4,53511.5951,1209801890.0,6929255301.0,50914108341.0,1192733691.0,9901105170.0,6921269719.0,0.0,18485829607.0,27701034335.0,121309728.7,1548873239.0,46881244398.0,2306464574.0,819044152.8,127970989.4,277969040.2,37552328673.0,5832249789.0,,2270065960.0,14531000.0,3755658598.0,1914586604.0,47693200.77,426900271.7,279019013.1,295728965.3,4048610929.0,27565618.85,69676703.34,8663381606.0,124185105.7,218118382.3,2372895303.0,67544018.04,105102478.6,173752180.8,144844330.7,49454513.58,4919244942.0,537453813.3,,145600356.0,2357665891.0,81391931.09,10332602878.0,7334073604.0,328115662.2,2274148859.0,8213524057.0,8654930762.0,0.0,3217579346.0,3103128266.0,112375527.6,10345153575.0,,,4111548064.0,398370979.3,,,2691470287.0,84696504653.0,90937755.73,80762400000.0,,239893611.6,,48810630.79,233900000.0,60258000.0,913368512.8,1301525424.0,,997703821.8,486194870.4,6555518064.0,81355330.93,,392382917.2,83080003.64,5729784358.0,104280654.0,,29624000.0,188885941.7,908357287.6,17772167745.0,507287182.6,325662842.0,4033331370.0,1034500559.0,610000000000.0,,1554727108.0,4255721581.0,,1714830844.0,3892469155.0,443604396.0,368100000.0\n2015,199518614.8,3608299115.0,132350667.6,,5482616701.0,447379807.5,24045569111.0,2665409782.0,2943396693.0,66164584.44,4202062770.0,90896085.89,147934736.7,2815281641.0,660847880.3,,162215681.9,723659955.0,19717625.0,575524224.9,24617701683.0,424022039.2,,383739877.5,26703863.39,17937641895.0,4521076909.0,4630772774.0,214000000000.0,569671147.2,353815199.9,491276856.5,,9127165375.0,0.0,118370044.1,327891760.0,1779887189.0,39812576245.0,,3364047774.0,458007157.5,10412714003.0,2597510000.0,5475490833.0,,15188853150.0,463568814.5,442551536.5,3399134967.0,42418008.45,55342131529.0,170374503.3,53862185493.0,299514176.3,190515191.5,221414232.3,14288131.91,17036943.11,,4818121326.0,,252455480.6,46447838.13,356259475.5,753544947.7,73562.29689,1132476292.0,7639095193.0,51295483754.0,997005656.0,10588769671.0,9604231011.0,0.0,16969432086.0,22180845070.0,123854135.7,1614929577.0,42106103306.0,2046197674.0,843667802.8,117003250.6,325188062.3,36570769323.0,5735132890.0,,2239416094.0,14799000.0,,2057866407.0,44025926.25,471221026.9,276145059.3,282688255.5,3268363376.0,23051814.59,58932847.76,7739521462.0,99983659.56,309170682.2,2552370442.0,56891427.3,101705866.0,119657390.7,132931217.7,40793415.43,4532069852.0,518231065.4,,,2065557663.0,98932947.15,8667849617.0,5815228175.0,323797729.6,1943757736.0,7533550065.0,9483482373.0,0.0,3312214570.0,3335552977.0,99840642.68,10212785781.0,,,3565420872.0,386538864.3,,,2580594158.0,66418708184.0,103563214.7,87185866667.0,2279621640.0,214827965.2,,39226514.27,247700000.0,46614000.0,724151880.2,1151920377.0,,985915493.0,400771875.3,5387123174.0,73527854.06,,220982331.6,69977174.74,5724812311.0,95763184.88,,36959000.0,202106905.5,979494041.9,15880927524.0,517075761.8,306140404.6,3616896001.0,969906845.5,596000000000.0,,320539158.0,4562632501.0,,,3488867948.0,372447569.8,376677000.0\n2016,185878310.1,2764054937.0,130853162.6,,4509647660.0,431396218.6,26382947050.0,2885947386.0,1396969108.0,66462843.08,4314102067.0,79581568.05,149467363.2,3239738758.0,755406457.6,,157912010.6,597207572.1,21712887.5,552381263.9,24224746901.0,403366488.7,,514463449.2,26832998.82,17782775543.0,4571348247.0,4796010962.0,216000000000.0,602538731.2,387437830.9,395733745.2,501812144.9,8675980823.0,0.0,123656387.7,295355010.0,1954935000.0,41579494874.0,,3592727944.0,479722172.8,10217081700.0,2513200000.0,4513022527.0,,14014439635.0,497653404.3,490177248.5,3415008250.0,42649282.3,57358414419.0,202815390.7,48118943518.0,315194446.3,161751874.3,161856744.5,,,18233154.2,4963484464.0,,290912704.0,51562130.82,363272338.5,702005705.9,64514.31661,1288676093.0,7385408685.0,56637622641.0,1001610418.0,12263957415.0,5970383698.0,0.0,14783814748.0,25033027895.0,137649061.8,1768309859.0,46471287714.0,1281103432.0,933103002.5,115645311.8,382100547.3,36885283430.0,6446742131.0,,2606456908.0,14712000.0,,1741456650.0,41489543.36,635448102.4,260729679.6,406859305.4,3327031890.0,29656360.86,59394995.92,6019769275.0,101492863.4,362398902.2,2455784120.0,61714551.61,96365298.28,112203469.3,136064876.0,35748121.99,4169374001.0,425388449.6,,166192292.3,1723204266.0,85073598.44,9115240932.0,5997385048.0,356495278.6,2093352062.0,7935955787.0,9973768059.0,0.0,2536072335.0,4357991313.0,79051319.31,9164190587.0,,,3569059626.0,343232340.6,,,2644159836.0,69245309461.0,107278618.7,63672800000.0,2748511976.0,304764264.2,,37414732.17,247600000.0,47706000.0,710397717.1,135338143.6,,1003048084.0,449177539.1,5427549191.0,72447621.01,,309567431.7,82019690.41,5876294938.0,,,26217000.0,216276660.0,987734705.2,17853980850.0,544218297.9,318551679.3,3423286811.0,988223629.6,600000000000.0,,218154892.9,5017401787.0,,,3169756001.0,299504759.9,358065000.0\n2017,191407113.2,3062872914.0,144382688.7,,5459643672.0,443610413.3,27691112417.0,3138359204.0,1528859592.0,63908678.43,4484652582.0,116142782.4,191065838.8,3594007980.0,824187016.9,,164638050.3,631145399.2,23456750.0,574070189.6,29283050314.0,346706804.4,,522430455.5,27516264.18,21343371455.0,4628401509.0,5370018135.0,228000000000.0,501578732.2,408157575.1,295236074.3,371937055.1,10018029818.0,0.0,122552919.0,357380920.8,2077722061.0,45381722042.0,,3764033344.0,533077263.1,10073364021.0,2462700000.0,2765588434.0,,16043533257.0,537440226.9,503158174.3,3429968212.0,45705790.34,60417498822.0,267430770.8,46433303401.0,308227183.5,189129841.5,199317873.4,,,,5093788906.0,,275014798.5,59724939.47,398460128.4,784300763.1,73613.49246,1463013911.0,8178144377.0,64559435281.0,1025063447.0,13931196490.0,7416385135.0,0.0,15581608422.0,26447892915.0,143545555.4,1939718310.0,45387031802.0,1390619095.0,1015384782.0,121515805.4,463810835.2,39170682136.0,6764636914.0,,2441074857.0,15334000.0,,1866534439.0,52594810.37,812108700.0,357671613.7,509390110.7,3461461531.0,30629080.99,66906090.19,5781437375.0,111826544.2,458709424.7,2221961060.0,65734886.38,82755201.79,128320232.4,143769318.6,47416537.07,3494832257.0,457882191.3,,200183930.0,1621218176.0,86725444.84,9580685498.0,6465750412.0,404705219.5,2328156653.0,6802665800.0,11461253917.0,0.0,2665785313.0,3755351173.0,71907641.56,9870680628.0,,,3646515110.0,348179657.5,,,3622068492.0,66527303992.0,115716812.4,70400000000.0,4382998817.0,305441261.6,,39577826.0,260900000.0,60406000.0,801700087.2,72388104.57,,1049074347.0,473796757.2,5526592999.0,88678493.74,,219081031.4,88414114.92,6305880241.0,,,25442000.0,202766994.3,858949581.3,17824007487.0,611215551.9,346762883.8,3647565178.0,1165710349.0,606000000000.0,,464821762.6,5073853534.0,,,3638936588.0,339664531.4,340522000.0\n2018,198086263.3,1983613748.0,180488725.1,,4144991771.0,608854649.9,26711834225.0,3367460383.0,1708941176.0,65436595.26,4959692173.0,90212425.99,312467611.0,3894695211.0,1095591047.0,,221131597.1,715166688.7,23083112.5,618842083.1,27766427104.0,346588691.0,,529481042.0,30951301.32,21620598712.0,4795847181.0,5570724563.0,250000000000.0,607848217.9,429892180.6,295348364.6,292260465.3,10602860967.0,0.0,,381879772.9,2710017583.0,49470627811.0,,4228194254.0,602522387.0,9583724288.0,2549400000.0,3109997892.0,,18248291491.0,618486125.4,496621069.7,3849013845.0,48412174.69,63799676593.0,261217395.1,49997192521.0,316508368.1,218444253.6,209150578.3,11487224.94,,,5227152013.0,,278420891.5,59809426.6,410414895.1,889523365.3,79690.88817,1642338440.0,7437197348.0,66510289108.0,1207582357.0,13194151137.0,6317977150.0,0.0,15946788601.0,27807513898.0,207772685.8,1957746479.0,46617954864.0,1613589333.0,1097458153.0,121163619.9,543205183.3,43069973343.0,7296266526.0,,2775557816.0,15786500.0,,1681433577.0,51064347.75,1030416770.0,419372654.8,679862611.1,3696856945.0,33957719.1,73258425.24,6567509336.0,117383985.5,495165301.0,2030465547.0,83806050.31,96067489.86,145206801.9,159013353.0,58369173.44,3469828207.0,451546508.8,,229639906.1,2043051719.0,81593932.69,11242755804.0,7067073381.0,398521544.9,2262928312.0,6710013004.0,11375525626.0,0.0,2708912280.0,3769741011.0,60592819.14,11596155291.0,,,4247842971.0,386556389.6,,,4608673550.0,61387546980.0,118959174.0,67554666667.0,1047878720.0,346772974.6,,29622478.1,266460000.0,61556000.0,904323391.5,59353054.3,,1280643981.0,529496122.7,5755367603.0,87787078.57,,232930989.8,104378994.6,6829203403.0,,,20610000.0,169332467.8,844227367.1,18967113031.0,675475234.1,408367566.7,4750219044.0,1168130814.0,649000000000.0,,,5500000000.0,,,3639879165.0,378025431.0,420364000.0\n"
  },
  {
    "path": "examples/data/sample.csv",
    "content": "time,Afghanistan,Angola,Albania,USA,Argentina\n1960-01-01,1.0,2.0,1.0,5.0,1.0\n1961-01-01,2.0,3.0,2.0,3.0,4.0\n1962-01-01,3.0,4.0,5.0,2.0,5.0\n"
  },
  {
    "path": "examples/example1.py",
    "content": "import pandas as pd\nfrom matplotlib import pyplot as plt\n\nimport pynimate as nim\n\ndf = pd.DataFrame(\n    {\n        \"time\": [\"1960-01-01\", \"1961-01-01\", \"1962-01-01\"],\n        \"Afghanistan\": [1, 2, 3],\n        \"Angola\": [2, 3, 4],\n        \"Albania\": [1, 2, 5],\n        \"USA\": [5, 3, 4],\n        \"Argentina\": [1, 4, 5],\n    }\n).set_index(\"time\")\n\ncnv = nim.Canvas()\nbar = nim.Barhplot.from_df(df, \"%Y-%m-%d\", \"2d\")\nbar.set_time(callback=lambda i, datafier: datafier.data.index[i].strftime(\"%b, %Y\"))\ncnv.add_plot(bar)\ncnv.animate()\n# cnv.save(\"example1\", 24, \"gif\")\nplt.show()\n"
  },
  {
    "path": "examples/example2.py",
    "content": "import os\n\nimport matplotlib as mpl\nimport matplotlib.ticker as tick\nimport pandas as pd\nfrom matplotlib import pyplot as plt\n\nimport pynimate as nim\nfrom pynimate.utils import human_readable\n\ndir_path = os.path.dirname(os.path.realpath(__file__))\n\nfor side in [\"left\", \"right\", \"top\", \"bottom\"]:\n    mpl.rcParams[f\"axes.spines.{side}\"] = False\n\n\ndef post(self, i):\n    self.ax.xaxis.set_major_formatter(\n        tick.FuncFormatter(lambda x, pos: human_readable(x))\n    )\n\n\ndf = pd.read_csv(dir_path + \"/data/map.csv\").set_index(\"time\")\ncnv = nim.Canvas()\ndfx = pd.DataFrame(\n    {\n        \"time\": [\"2012\", \"2013\", \"2014\"],\n        \"col1\": [1, 2, 3],\n        \"col2\": [3, 2, 1],\n    }\n).set_index(\"time\")\nbar = nim.Barhplot.from_df(df, \"%Y\", \"MS\", post_update=post, grid=False)\nbar.set_title(\"Top 10 Richest Person in the World (yearly)\")\nbar.set_xlabel(\"Net Worth in Billion USD\")\nbar.set_time(callback=lambda i, dfr: dfr.data.index[i].year)\nbar.set_bar_annots(text_callback=human_readable)\n\ncnv.add_plot(bar)\ncnv.animate()\nplt.show()\n# cnv.save(\"example1\", 24, \"gif\")\n"
  },
  {
    "path": "examples/example3.py",
    "content": "import os\n\nimport matplotlib as mpl\nimport numpy as np\nimport pandas as pd\nfrom matplotlib import pyplot as plt\n\nimport pynimate as nim\n\ndir_path = os.path.dirname(os.path.realpath(__file__))\n\nmpl.rcParams[\"axes.facecolor\"] = \"#001219\"\nfor side in [\"left\", \"right\", \"top\", \"bottom\"]:\n    mpl.rcParams[f\"axes.spines.{side}\"] = False\n\n\ndef post_update(self, i):\n    # annotates continents next to bars\n    for ind, (bar, x, y) in enumerate(\n        zip(self.bar_attr.top_cols, self.bar_attr.bar_length, self.bar_attr.bar_rank)\n    ):\n        self.ax.text(\n            x - 0.3,\n            y,\n            self.dfr.col_var.loc[bar, \"continent\"],\n            ha=\"right\",\n            color=\"k\",\n            size=12,\n            zorder=ind,\n        )\n\n\ndf = pd.read_csv(dir_path + \"/data/sample.csv\").set_index(\"time\")\ncol_var = pd.DataFrame(\n    {\n        \"columns\": [\"Afghanistan\", \"Angola\", \"Albania\", \"USA\", \"Argentina\"],\n        \"continent\": [\"Asia\", \"Africa\", \"Europe\", \"N America\", \"S America\"],\n    }\n).set_index(\"columns\")\nbar_cols = {\n    \"Afghanistan\": \"#2a9d8f\",\n    \"Angola\": \"#e9c46a\",\n    \"Albania\": \"#e76f51\",\n    \"USA\": \"#a7c957\",\n    \"Argentina\": \"#e5989b\",\n}\n\ncnv = nim.Canvas(figsize=(12.8, 7.2), facecolor=\"#001219\")\n\ndfr = nim.BarDatafier(df, \"%Y-%m-%d\", \"3d\")\ndfr.add_var(col_var=col_var)\n\nbar = nim.Barhplot(dfr, post_update=post_update, rounded_edges=True, grid=False)\n\nbar.set_column_colors(bar_cols)\nbar.set_title(\"Sample Title\", color=\"w\", weight=600)\nbar.set_xlabel(\"xlabel\", color=\"w\")\nbar.set_time(\n    callback=lambda i, datafier: datafier.data.index[i].strftime(\"%b, %Y\"), color=\"w\"\n)\nbar.set_text(\n    \"sum\",\n    callback=lambda i, datafier: f\"Total :{np.round(datafier.data.iloc[i].sum(), 2)}\",\n    size=20,\n    x=0.72,\n    y=0.20,\n    color=\"w\",\n)\nbar.set_bar_annots(color=\"w\", size=13)\nbar.set_xticks(colors=\"w\", length=0, labelsize=13)\nbar.set_yticks(colors=\"w\", labelsize=13)\nbar.set_bar_border_props(\n    edge_color=\"black\", pad=0.1, mutation_aspect=1, radius=0.2, mutation_scale=0.6\n)\ncnv.add_plot(bar)\ncnv.animate()\n# plt.show()\ncnv.save(\n    \"example3\",\n    24,\n)\n"
  },
  {
    "path": "examples/lineplot_dark1.py",
    "content": "import os\n\nimport matplotlib as mpl\nimport matplotlib.pyplot as plt\nimport matplotlib.ticker as tick\nimport pandas as pd\n\nimport pynimate as nim\nfrom pynimate.utils import human_readable\n\nfor side in [\"left\", \"right\", \"top\", \"bottom\"]:\n    mpl.rcParams[f\"axes.spines.{side}\"] = False\nmpl.rcParams[\"figure.facecolor\"] = \"#001219\"\nmpl.rcParams[\"axes.facecolor\"] = \"#001219\"\nmpl.rcParams[\"savefig.facecolor\"] = \"#001219\"\n\ndir_path = os.path.dirname(os.path.realpath(__file__))\n\n\ndef post(self, i):\n    self.ax.yaxis.set_major_formatter(\n        tick.FuncFormatter(lambda x, pos: human_readable(x))\n    )\n\n\ndf = pd.read_csv(dir_path + \"/data/covid_IN.csv\").set_index(\"time\")\ndf = df[\"2020-05-01\":\"2021-01-01\"]\ncnv = nim.Canvas()\ndfr = nim.LineDatafier(df, \"%Y-%m-%d\", \"12h\")\nplot = nim.Lineplot(\n    dfr,\n    post_update=post,\n    palettes=[\"Set3\"],\n    scatter_markers=False,\n    legend=True,\n    fixed_ylim=True,\n    grid=False,\n)\nplot.set_column_linestyles({\"cured\": \"dashed\"})\nplot.set_title(\"Covid cases India(2020)\", y=1.05, color=\"w\", weight=600)\nplot.set_xlabel(\"date\", color=\"w\", size=11)\nplot.set_time(\n    callback=lambda i, datafier: datafier.data.index[i].strftime(\"%d %b, %Y\"),\n    color=\"w\",\n    size=13,\n)\nplot.set_line_annots(lambda col, val: f\"({human_readable(val)})\", color=\"w\")\nplot.set_legend(labelcolor=\"w\")\nplot.set_text(\n    \"sum\",\n    callback=lambda i, datafier: f\"Total cases :{human_readable(datafier.data.cases.iloc[:i+1].sum() )}\",\n    size=10,\n    x=0.84,\n    y=0.20,\n    color=\"w\",\n)\nplot.set_xticks(colors=\"w\", length=0, labelsize=10)\nplot.set_yticks(colors=\"w\", labelsize=10)\ncnv.add_plot(plot)\ncnv.animate(interval=20)\ncnv.save(\"lineplot_dark\", 24)\nplt.show()\n"
  },
  {
    "path": "examples/lineplot_ex1.py",
    "content": "import os\n\nimport matplotlib as mpl\nimport matplotlib.pyplot as plt\nimport pandas as pd\n\nimport pynimate as nim\n\nfor side in [\"left\", \"right\", \"top\", \"bottom\"]:\n    mpl.rcParams[f\"axes.spines.{side}\"] = False\n\ndir_path = os.path.dirname(os.path.realpath(__file__))\n\n\ndf = pd.read_csv(dir_path + \"/data/map.csv\").set_index(\"time\")\ndf = df.drop(columns=[\"USA\"]).iloc[:, :8]\n\ncnv = nim.Canvas()\nplot = nim.Lineplot.from_df(\n    df, \"%Y\", \"6MS\", palettes=[\"Dark2\"], legend=False, grid=False\n)\nplot.set_time(callback=lambda i, datafier: datafier.data.index[i].year)\nplot.set_column_linestyles({\"Albania\": \"dashed\"})\ncnv.add_plot(plot)\nprint(plot.column_linestyles)\ncnv.animate()\n# cnv.save(\"tt\", 24)\nplt.show()\n"
  },
  {
    "path": "mkdocs.yml",
    "content": "# Project information\nsite_name: Pynimate\nsite_url: https://julkaar9.github.io/\nsite_author: julkar9\nsite_description: >-\n  Pynimate is a python package for statistical data analysis\n\n# Repository\nrepo_name: julkaar9/pynimate\nrepo_url: https://github.com/julkaar9/pynimate\n\n# Copyright\ncopyright: Copyright &copy; 2023 Md Julkarnaeen\n\ntheme:\n  name: material\n  logo: assets/pynimate_logo.png\n  favicon: assets/favicon.png\n  features: \n    - content.code.annotate \n    - content.tooltips \n    - navigation.indexes \n    - navigation.sections\n    - navigation.tabs \n    - navigation.top\n    - navigation.tracking \n    - toc.follow\n  palette:\n    - scheme: default\n      primary: white\n      accent: teal\n      toggle:\n        icon: material/weather-night\n        name: Switch to dark mode\n    - scheme: slate\n      primary: black\n      accent: teal\n      toggle:\n        icon: material/weather-sunny\n        name: Switch to light mode\n  icon:\n    repo: fontawesome/brands/github\n\nnav:\n  - Home:\n    - Home: index.md \n    - Getting started: guide/starter.md\n  - User Guide:\n    - BarChart Dark Mode: guide/dark_mode.md \n    - Lineplot Dark Mode: guide/lineplot_darkmode.md \n  - Api Reference:\n    - Animators:\n      - Canvas: reference/canvas.md\n      - Baseplot: reference/baseplot.md\n      - Barhplot: reference/barhplot.md\n      - Lineplot: reference/lineplot.md\n      - Barplot: reference/barplot.md\n    - Data Modifiers:\n      - BaseDatafier: reference/datafiers/base_datafier.md\n      - BarDatafier: reference/datafiers/bar_datafier.md\n      - LineDatafier: reference/datafiers/line_datafier.md\n      - Datafier: reference/datafiers/datafier.md\n    - Utils: reference/utils.md\n# Customization\nextra:\n  # analytics:\n  #   provider: google\n  #   property: !ENV GOOGLE_ANALYTICS_KEY\n  social:\n    - icon: fontawesome/brands/github\n      link: https://github.com/julkaar9/pynimate\n    - icon: fontawesome/brands/python\n      link: https://pypi.org/project/pynimate/\n\nmarkdown_extensions:\n  - pymdownx.highlight:\n      anchor_linenums: true\n  - pymdownx.inlinehilite\n  - pymdownx.snippets\n  - pymdownx.superfences\n  \nplugins:\n- mkdocstrings\n- search"
  },
  {
    "path": "pyproject.toml",
    "content": "# pyproject.toml\n\n[build-system]\nrequires      = [\"setuptools>=61.0.0\", \"wheel\"]\nbuild-backend = \"setuptools.build_meta\"\n\n[tool.setuptools.packages.find]\nwhere = [\"src\"]\n\n[project]\nname = \"pynimate\"\nversion = \"1.3.0\"\ndescription = \"Python package for statistical data animations\"\nreadme = \"README.md\"\nauthors = [{ name = \"julkar9\", email = \"julkar9dev@gmail.com\" }]\nlicense = { text = \"MIT License (MIT)\" }\nclassifiers = [\n    \"License :: OSI Approved :: MIT License\",\n    \"Programming Language :: Python\",\n    \"Programming Language :: Python :: 3\",\n    \"Programming Language :: Python :: 3.9\",\n    \"Programming Language :: Python :: 3.10\",\n    \"Operating System :: OS Independent\",\n    \"Topic :: Software Development :: Libraries :: Application Frameworks\",\n    \"Topic :: Software Development :: Libraries :: Python Modules\",\n]\nkeywords = [\"animations\", \"framework\", \"data\", \"plots\"]\ndependencies = [\n    \"numpy\",\n    \"pandas\",\n    \"matplotlib\",\n    \"seaborn\",\n]\nrequires-python = \">=3.9\"\n\n[project.optional-dependencies]\ndev = [\"black\", \"isort\",\"mkdocs-material\", \"pip-tools\", \"pytest\", \"mkdocstrings[python]\"]\n\n[project.urls]\nHomepage = \"https://github.com/julkaar9/pynimate\"\nDocumentation = \"https://julkaar9.github.io/pynimate/\"\n\n "
  },
  {
    "path": "requirements.txt",
    "content": "#\n# This file is autogenerated by pip-compile with python 3.9\n# To update, run:\n#\n#    pip-compile --extra=dev pyproject.toml\n#\nblack==23.3.0\n    # via pynimate (pyproject.toml)\nbuild==0.10.0\n    # via pip-tools\ncertifi==2022.12.7\n    # via requests\ncharset-normalizer==3.1.0\n    # via requests\nclick==8.1.3\n    # via\n    #   black\n    #   mkdocs\n    #   pip-tools\ncolorama==0.4.6\n    # via\n    #   build\n    #   click\n    #   griffe\n    #   mkdocs\n    #   mkdocs-material\n    #   pytest\ncontourpy==1.0.6\n    # via matplotlib\ncycler==0.11.0\n    # via matplotlib\nexceptiongroup==1.1.1\n    # via pytest\nfonttools==4.38.0\n    # via matplotlib\nghp-import==2.1.0\n    # via mkdocs\ngriffe==0.27.0\n    # via mkdocstrings-python\nidna==3.4\n    # via requests\nimportlib-metadata==6.4.1\n    # via\n    #   markdown\n    #   mkdocs\niniconfig==2.0.0\n    # via pytest\nisort==5.12.0\n    # via pynimate (pyproject.toml)\njinja2==3.1.2\n    # via\n    #   mkdocs\n    #   mkdocs-material\n    #   mkdocstrings\nkiwisolver==1.4.4\n    # via matplotlib\nmarkdown==3.3.7\n    # via\n    #   mkdocs\n    #   mkdocs-autorefs\n    #   mkdocs-material\n    #   mkdocstrings\n    #   pymdown-extensions\nmarkupsafe==2.1.2\n    # via\n    #   jinja2\n    #   mkdocstrings\nmatplotlib==3.6.2\n    # via\n    #   pynimate (pyproject.toml)\n    #   seaborn\nmergedeep==1.3.4\n    # via mkdocs\nmkdocs==1.4.2\n    # via\n    #   mkdocs-autorefs\n    #   mkdocs-material\n    #   mkdocstrings\nmkdocs-autorefs==0.4.1\n    # via mkdocstrings\nmkdocs-material==9.1.6\n    # via pynimate (pyproject.toml)\nmkdocs-material-extensions==1.1.1\n    # via mkdocs-material\nmkdocstrings[python]==0.21.2\n    # via\n    #   mkdocstrings-python\n    #   pynimate (pyproject.toml)\nmkdocstrings-python==0.9.0\n    # via mkdocstrings\nmypy-extensions==1.0.0\n    # via black\nnumpy==1.23.4\n    # via\n    #   contourpy\n    #   matplotlib\n    #   pandas\n    #   pynimate (pyproject.toml)\n    #   seaborn\npackaging==23.1\n    # via\n    #   black\n    #   build\n    #   matplotlib\n    #   mkdocs\n    #   pytest\npandas==1.5.1\n    # via\n    #   pynimate (pyproject.toml)\n    #   seaborn\npathspec==0.11.1\n    # via black\npillow==9.3.0\n    # via matplotlib\npip-tools==6.13.0\n    # via pynimate (pyproject.toml)\nplatformdirs==3.2.0\n    # via black\npluggy==1.0.0\n    # via pytest\npygments==2.15.0\n    # via mkdocs-material\npymdown-extensions==9.11\n    # via\n    #   mkdocs-material\n    #   mkdocstrings\npyparsing==3.0.9\n    # via matplotlib\npyproject-hooks==1.0.0\n    # via build\npytest==7.3.1\n    # via pynimate (pyproject.toml)\npython-dateutil==2.8.2\n    # via\n    #   ghp-import\n    #   matplotlib\n    #   pandas\npytz==2022.6\n    # via pandas\npyyaml==6.0\n    # via\n    #   mkdocs\n    #   pymdown-extensions\n    #   pyyaml-env-tag\npyyaml-env-tag==0.1\n    # via mkdocs\nregex==2023.3.23\n    # via mkdocs-material\nrequests==2.28.2\n    # via mkdocs-material\nseaborn==0.12.1\n    # via pynimate (pyproject.toml)\nsix==1.16.0\n    # via python-dateutil\ntomli==2.0.1\n    # via\n    #   black\n    #   build\n    #   pyproject-hooks\n    #   pytest\ntyping-extensions==4.5.0\n    # via\n    #   black\n    #   mkdocstrings\nurllib3==1.26.15\n    # via requests\nwatchdog==3.0.0\n    # via mkdocs\nwheel==0.40.0\n    # via pip-tools\nzipp==3.15.0\n    # via importlib-metadata\n\n# The following packages are considered to be unsafe in a requirements file:\n# pip\n# setuptools\n"
  },
  {
    "path": "setup.py",
    "content": "# setup.py\n\nfrom setuptools import setup\n\nsetup()"
  },
  {
    "path": "src/pynimate/__init__.py",
    "content": "\"\"\"\nPynimate\n=====\nPython package for statistical data animations.\n\nAvailable Plots\n---------------\nBarhplot\n    Horizontal Bar Chart Race module\nLineplot\n    Module for Lineplot animations\n\nBarhplot Example\n---------------\n\nIt is assumed `pynimate` is imported as `nim`.\n>>> import pynimate as nim \n>>> import pandas as pd\n>>> df = pd.read_csv(\"sample.csv\").set_index(\"time\")\n>>> nim.Canvas()\n>>> bar = nim.Barhplot.from_df(df, '%Y-%m-%d', 'MS')\n>>> bar.set_time(callback=lambda i, datafier: datafier.data.index[i].year)\n>>> bar.set_bar_annots(text_callback=human_readable)\n>>> cnv.add_plot(bar)\n>>> cnv.animate()\n>>> cnv.save('sample', fps=24)\n\"\"\"\n\n__version__ = \"1.3.0\"\n\nfrom .bar import Barplot\nfrom .barhplot import Barhplot\nfrom .baseplot import Baseplot\nfrom .canvas import Canvas\nfrom .datafier import BarDatafier, BaseDatafier, Datafier, LineDatafier\nfrom .lineplot import Lineplot\n"
  },
  {
    "path": "src/pynimate/__init__.pyi",
    "content": "from pynimate.bar import Barplot\nfrom pynimate.barhplot import Barhplot\nfrom pynimate.baseplot import Baseplot\nfrom pynimate.canvas import Canvas\nfrom pynimate.datafier import BarDatafier, BaseDatafier, Datafier, LineDatafier\nfrom pynimate.lineplot import Lineplot\n\n__all__ = [\n    \"Canvas\",\n    \"Barplot\",\n    \"Datafier\",\n    \"Baseplot\",\n    \"Barhplot\",\n    \"Lineplot\",\n    \"BaseDatafier\",\n    \"BarDatafier\",\n    \"LineDatafier\",\n]\n"
  },
  {
    "path": "src/pynimate/bar.py",
    "content": "import warnings\nfrom types import SimpleNamespace\nfrom typing import Callable, Union\n\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport pandas as pd\nfrom matplotlib.patches import FancyBboxPatch\n\nfrom pynimate.datafier import Datafier\n\n\nclass Barplot:\n    def __init__(\n        self,\n        data: pd.DataFrame,\n        time_format: str,\n        ip_freq: str,\n        ip_frac: float = 0.5,\n        n_bars: int = 10,\n        palettes: list[str] = [\"viridis\"],\n        post_update: Callable[\n            [plt.Axes, int, pd.DataFrame, pd.DataFrame, SimpleNamespace], None\n        ] = None,\n        annot_bars: bool = True,\n        fixed_xlim: bool = True,\n        xticks: bool = True,\n        yticks: bool = True,\n        grid: bool = True,\n        rounded_edges: bool = False,\n    ) -> None:\n        \"\"\"\n        Barplot is deprecated, use Barhplot instead\n\n        BarChartRace module that requires a valid time index.The data\n        should be in this format where time is set to index\n            ```\n                Example:\n                >>> time  col1 col2 col3 ...\n                >>> 2012   1    0    2\n                >>> 2013   2    3    1\n            ```\n        Parameters\n        ----------\n        data : pd.DataFrame\n            The data to be prepared\n        time_format : str\n            Index datetime format\n        ip_freq : str\n            Interpolation frequency\n        ip_frac : float, optional\n            Interpolation fraction (check end of docstring), by default 0.5\n        n_bars : int, optional\n            Number of bars to be visible on the plot, by default 10 or less\n        palettes : list[str], optional\n            List of color palettes to generate bar colors, by default [\"viridis\"]\n        post_update : Callable[[plt.Axes, int, Datafier, SimpleNamespace], None], optional\n            callback function for additional customization, by default None\n        annot_bars : bool, optional\n            Sets bar annotations, by default True\n        fixed_xlim : bool, optional\n            If False xlim will gradually change in every frame, by default True\n        xticks : bool, optional\n            Sets xticks, by default True\n        yticks : bool, optional\n            Sets yticks, by default True\n        grid : bool, optional\n             Sets xgrid, by default True\n        rounded_edges : bool, optional\n             Sets rounded bar edges, by default False\n\n        post_update args:\n        ```\n            plt.Axes: The matplotlib Axes used for the barplot\n            int: Current animation frame or dataframe row\n            Datafier: The underlying datafier instance\n            SimpleNamespace: Contains the following attributes -\n                bar_rank, bar_length, top_bars, bar_colors\n\n        example:\n\n        >>> def post_update(ax, i, datafier, bar_attr):\n        >>>     # sets log scale for x-axis\n        >>>     ax.set_xscale(\"log\")\n        ```\n        ip_frac description:\n        ```\n            ip_frac is the percentage of NaN values to be linearly\n            interpolated for column ranks\n\n            Consider this example\n            >>>               a    b\n            >>> date\n            >>> 2021-11-13  1.0  4.0\n            >>> 2021-11-14  NaN  NaN\n            >>> 2021-11-15  NaN  NaN\n            >>> 2021-11-16  NaN  NaN\n            >>> 2021-11-17  NaN  NaN\n            >>> 2021-11-18  2.0  6.0\n\n            with ip_frac set to 0.5, 50% of NaN's will be linearly\n            interpolated while the rest will back filled.\n\n            >>>              a      b\n            >>> 2021-11-13  1.00  4.00  << original value --------\n            >>> 2021-11-14  1.33  4.67                            |\n            >>> 2021-11-15  1.67  5.33                            |  50% linearly\n            >>> 2021-11-16  2.00  6.00  <- linear interpolation   |  interpolated\n            >>> 2021-11-17  2.00  6.00      upto here             |  rest are filled.\n            >>> 2021-11-18  2.00  6.00  << original value---------\n\n            This adds some stability in the barChartRace\n            and reduces constantly shaking of bars.\n        ```\n        \"\"\"\n        warnings.warn(\n            \"Barplot is deprecated, use Barhplot instead.\", DeprecationWarning\n        )\n        self.n_bars = min(n_bars, len(data.columns))\n        self.datafier = Datafier(data, time_format, ip_freq, ip_frac, n_bars, palettes)\n\n        self.post_update = post_update or (lambda *args: None)\n\n        self.time_range = list(self.datafier.data.index)\n        self.length = len(self.time_range)\n\n        self.annot_bars = annot_bars\n        self.fixed_xlim = fixed_xlim\n        self.xticks = xticks\n        self.yticks = yticks\n        self.grid = grid\n        self.rounded_edges = rounded_edges\n\n        fig, self.ax = plt.subplots()\n        plt.close(fig)\n\n        self.text_collection = {}\n        self.extra_callbacks = {}\n\n        self.set_xylim()\n        self.set_barh()\n        self.set_bar_border_props()\n        self.set_xticks()\n        self.set_yticks()\n        self.set_grid()\n        self.set_bar_annots()\n\n        self.set_time()\n\n    def add_var(self, row_var: pd.DataFrame = None, col_var: pd.DataFrame = None):\n        \"\"\"Adds additional variables to the data, both row and column wise.\\n\n        Row wise data format: The index should be equal to that of the actual data\n        ```\n            time  leap_year col2   ...\n            2012    yes      0\n            2013    no       3\n\n        ```\n        Column wise data format: The index should be equal to the columns of the actual data.\n        ```\n            index  continent   col2 ...\n            ind    Asia         0\n            usa    N America    3\n            jap    Asia         2\n        ```\n        Parameters\n        ----------\n        row_var : pd.DataFrame, optional\n            Dataframe containing variables related to time, by default None\n        col_var : pd.DataFrame, optional\n            Dataframe containing variables related to columns, by default None\n        \"\"\"\n        self.datafier.add_var(row_var, col_var)\n\n    def set_bar_color(self, colors: Union[list, dict[str, str]]):\n        \"\"\"If colors is a list, length of colors should be equal to no of `datafier.bar_colors`.\n        If it is a dict, all columns of `datafier.top_cols` should be mapped to a color\n\n        Parameters\n        ----------\n        colors : Union[list, dict[str, str]]\n            list of colors or dict of column to color mapping\n        \"\"\"\n        assert len(colors) == len(\n            self.datafier.bar_colors\n        ), \"Number of colors does not match number of columns\"\n\n        if isinstance(colors, list):\n            self.datafier.bar_colors = {\n                k: v2 for v2, (k, v1) in zip(colors, self.datafier.bar_colors.items())\n            }\n        elif isinstance(colors, dict):\n            assert (\n                colors.keys() == self.datafier.bar_colors.keys()\n            ), \"All columns of datafier.top_cols are not present.\"\n            self.datafier.bar_colors = colors\n        else:\n            ValueError(\"colors must be list or dict\")\n\n    def set_axes(self, ax: plt.Axes) -> None:\n        \"\"\"Sets the Axes of this plot\n\n        Parameters\n        ----------\n        ax : plt.Axes\n            Axes of this plot\n        \"\"\"\n        self.ax = ax\n\n    def set_xylim(\n        self,\n        xlim: list[float] = [],\n        ylim: list[float] = [],\n    ) -> None:\n        \"\"\"Sets xlim and ylim\n\n        Parameters\n        ----------\n        xlim : list[float], optional\n            x axis limits in this format [min, max], by default [min, max + 5]\n        ylim : list[float], optional\n            y axis limits in this format [min, max], by default [0.5, n_bars + 0.6]\n        \"\"\"\n        if xlim != None:\n            assert (\n                len(xlim) == 2 or len(xlim) == 0\n            ), \"xlim is incorrect (correct format - [minLim, maxLim])\"\n        # closes the previous figure window\n        # if hasattr(self, \"fig\"):\n        #     plt.close(self.fig)\n\n        if xlim != None:\n            if xlim == []:\n                self.total_max = self.datafier.data.max().max()\n                xlim = [None, self.total_max + 5]\n            self.xlim = xlim\n            # self.ax.set_xlim(xlim)\n        if ylim == []:\n            ylim = [0.5, self.n_bars + 0.6]\n        self.ylim = ylim\n\n    def getTopXY(self, i: int) -> SimpleNamespace:\n        \"\"\"Prepares top n_bar columns and their respective attributes such as position, length, colors.\n        Not meant to be used outside animation update\n\n        Parameters\n        ----------\n        i : int\n            Animation frame index\n\n        Returns\n        -------\n        SimpleNamespace\n            Bar rank, length. Top columns and their respective colors\n        \"\"\"\n\n        bar_rank = self.datafier.df_ranks.iloc[i].values\n        top_filt = (bar_rank >= 1) & (bar_rank <= self.n_bars)\n        bar_rank = bar_rank[top_filt]\n        bar_length = self.datafier.data.iloc[i].values[top_filt]\n        cols = self.datafier.data.columns[top_filt]\n        colors = [self.datafier.bar_colors[column] for column in cols]\n        return SimpleNamespace(\n            bar_rank=bar_rank, bar_length=bar_length, top_bars=cols, bar_colors=colors\n        )\n\n    def set_title(\n        self,\n        title: str,\n        x: float = 0,\n        y: float = 1.01,\n        size: float = 13,\n        color: str = \"#777777\",\n        **kwargs,\n    ) -> None:\n        \"\"\"Sets the plot title and additional `kwargs` are passed to plt.text(**kwargs)\n\n        Parameters\n        ----------\n        title : str\n            Title text\n        x : float, optional\n            x coordinate of the text, by default 0\n        y : float, optional\n            y coordinate, by default 1.01\n        size : float, optional\n            text size, by default 13\n        color : str, optional\n            text color, by default \"#777777\"\n        \"\"\"\n        self.text_collection[\"title\"] = (\n            None,\n            {\n                **{\n                    \"x\": x,\n                    \"y\": y,\n                    \"s\": title,\n                    \"color\": color,\n                    \"size\": size,\n                },\n                **kwargs,\n            },\n        )\n\n    def set_xlabel(\n        self,\n        text: str,\n        x: float = 0.43,\n        y: float = -0.09,\n        size: float = 13,\n        color: str = \"#777777\",\n        **kwargs,\n    ) -> None:\n        \"\"\"Sets the plot xlabel and additional `kwargs` are passed to plt.text(**kwargs)\n\n        Parameters\n        ----------\n        text : str\n            The xlabel text\n        x : float, optional\n             X coordinate of the text, by default 0.43\n        y : float, optional\n            Y coordinate, by default -0.09\n        size : float, optional\n            Text size, by default 13\n        color : str, optional\n            Text color, by default \"#777777\"\n        \"\"\"\n        self.text_collection[\"xlabel\"] = (\n            None,\n            {\n                **{\n                    \"x\": x,\n                    \"y\": y,\n                    \"s\": text,\n                    \"color\": color,\n                    \"size\": size,\n                },\n                **kwargs,\n            },\n        )\n\n    def set_time(\n        self,\n        callback: Callable[\n            [int, Datafier], str\n        ] = lambda i, datafier: datafier.data.index[i],\n        x: float = 0.97,\n        y: float = 0.27,\n        size: float = 46,\n        weight: float = 800,\n        ha=\"right\",\n        color: str = \"#777777\",\n        **kwargs,\n    ) -> None:\n        \"\"\"Annotates the time in the plot and additional `kwargs` are passed to plt.text(**kwargs)\n\n        Parameters\n        ----------\n        callback : Callable[ [int, pd.DataFrame], str ], optional\n            Callback function to customize the time text, by default `lambda i, datafier: datafier.data.index[i]`\n        x : float, optional\n            x coordinate of the text, by default 0.97\n        y : float, optional\n            y coordinate of the text, by default 0.27\n        size : float, optional\n            text size, by default 46\n        weight : float, optional\n            text weight, by default 800\n        ha : str, optional\n            horizontal alignment, by default \"right\"\n        color : str, optional\n            text color, by default \"#777777\"\n\n        callback args:\n        ```\n            i: Animation frame / data row index\n            datafier: The datafier instance,\n                access the data using datafier.data\n        ```\n        \"\"\"\n        self.text_collection[\"time\"] = (\n            callback,\n            {\n                **{\n                    \"x\": x,\n                    \"y\": y,\n                    \"color\": color,\n                    \"size\": size,\n                    \"weight\": weight,\n                    \"ha\": ha,\n                },\n                **kwargs,\n            },\n        )\n\n    def set_text(\n        self,\n        key: str,\n        text: str = None,\n        callback: Callable[[int, Datafier], str] = None,\n        x: float = 0,\n        y: str = 0,\n        size: float = 13,\n        color: str = \"#777777\",\n        **kwargs,\n    ):\n        \"\"\"General function to add custom texts in the plot. Either text or callback should be passd but not both.\n\n        Parameters\n        ----------\n        key : str\n            Unique identifier for each texts, note: These keys, title, xlabel, time, are reserved.\n              overwrite them if you wish to use callbacks instead of texts in title or xlabel\n        text : str, optional\n            The text to be added in the plot, by default None\n        callback : Callable[[int, pd.DataFrame], str], optional\n            Callback function to customize the text, by default None\n        x : float, optional\n            X coordinate of the text, by default 0\n        y : str, optional\n            Y coordinate of the text, by default 0\n        size : float, optional\n            Text size, by default 13\n        color : str, optional\n            Text color, by default \"#777777\"\n\n        Callback args:\n        ```\n            args:\n            i: Animation frame / data row index\n            datafier: The datafier instance\n\n            Example:\n            >>> lambda i, datafier: datafier.data.index[i]\n        ```\n        \"\"\"\n        assert text or callback, \"Both text and callback cannot be None\"\n        self.text_collection[key] = (\n            callback,\n            {\n                **{\n                    \"x\": x,\n                    \"y\": y,\n                    \"s\": text,\n                    \"color\": color,\n                    \"size\": size,\n                },\n                **kwargs,\n            },\n        )\n        if callback:\n            self.text_collection[key][1].pop(\"s\")\n\n    def remove_text(self, keys: list[str]):\n        \"\"\"Removes texts by key\n\n        Parameters\n        ----------\n        keys : list[str]\n            List of keys to be removed\n        \"\"\"\n        for key in keys:\n            self.text_collection.pop(key)\n\n    def set_bar_border_props(\n        self,\n        edge_color: str = \"k\",\n        radius: float = 0.5,\n        pad: float = -0.0040,\n        mutation_aspect: float = 0.2,\n        **kwargs,\n    ) -> None:\n        \"\"\"Sets bar border properties. Additional `kwargs` are passed to FancyBboxPatch.\n        See https://matplotlib.org/3.1.0/api/_as_gen/matplotlib.patches.FancyBboxPatch.html\n\n        Parameters\n        ----------\n        edge_color : str, optional\n            Bar edge color, by default \"k\"\n        radius : float, optional\n            Bar border radius, by default 0.5\n        pad : float, optional\n            See above link, by default -0.0040\n        mutation_aspect : float, optional\n            See above link, by default 0.2\n        \"\"\"\n        self.bar_border_props = {\n            \"edge_color\": edge_color,\n            \"radius\": radius,\n            \"pad\": pad,\n            \"mutation_aspect\": mutation_aspect,\n            \"kwargs\": kwargs,\n        }\n\n    def _get_rounded_eges(\n        self,\n    ) -> None:\n        \"\"\"Creates bar border properties.\n        See https://matplotlib.org/3.1.0/api/_as_gen/matplotlib.patches.FancyBboxPatch.html\n        \"\"\"\n        border = self.bar_border_props\n        self.new_patches = []\n\n        for patch in reversed(self.ax.patches):\n            bb = patch.get_bbox()\n            color = patch.get_facecolor()\n            p_bbox = FancyBboxPatch(\n                (bb.xmin, bb.ymin),\n                abs(bb.width),\n                abs(bb.height),\n                boxstyle=f\"round,pad={border['pad']}\"\n                + (\n                    f\",rounding_size={border['radius']}\"\n                    if border[\"radius\"] != None\n                    else \"\"\n                ),\n                ec=border[\"edge_color\"],\n                fc=color,\n                mutation_aspect=border[\"mutation_aspect\"],\n                **border[\"kwargs\"],\n            )\n            patch.remove()\n            self.new_patches.append(p_bbox)\n\n    def set_barh(self, bar_height: float = 0.86, **kwargs):\n        \"\"\"Sets barh properties, addition `kwargs` are passed to ax.barh(**kwargs)\n\n        Parameters\n        ----------\n        bar_height : float, optional\n            Height of the bars (Note this is horizontal barplot), by default 0.86\n        \"\"\"\n        self.barh_props = {**kwargs}\n        self.barh_props[\"height\"] = bar_height\n\n    def set_xticks(\n        self, axis: str = \"x\", colors: str = \"#777777\", labelsize: float = 12, **kwargs\n    ):\n        \"\"\"Sets xtick properties, additional `kwargs` are passed to ax.tick_params(**.kwargs)\n\n        Parameters\n        ----------\n        axis : str, optional\n            Defines tick axis, by default \"x\"\n        colors : str, optional\n            Sets tick color, by default \"#777777\"\n        labelsize : float, optional\n            Sets tick size, by default 12\n        \"\"\"\n        self.xtick_props = {\n            \"axis\": axis,\n            \"colors\": colors,\n            \"labelsize\": labelsize,\n            **kwargs,\n        }\n\n    def set_yticks(\n        self, axis: str = \"y\", colors: str = \"#777777\", labelsize: float = 10, **kwargs\n    ):\n        \"\"\"Sets ytick properties, additional `kwargs` are passed to ax.tick_params(**kwargs)\n\n        Parameters\n        ----------\n        axis : str, optional\n            Defines tick axis, by default \"y\"\n        colors : str, optional\n            Sets tick color, by default \"#777777\"\n        labelsize : float, optional\n            Sets tick size, by default 10\n        \"\"\"\n        self.ytick_props = {\n            \"axis\": axis,\n            \"colors\": colors,\n            \"labelsize\": labelsize,\n            **kwargs,\n        }\n\n    def set_grid(\n        self,\n        which: str = \"major\",\n        axis: str = \"x\",\n        linestyle: str = \"-\",\n        grid_behind: bool = True,\n        **kwargs,\n    ) -> None:\n        \"\"\"Sets the plots grid, additional `kwargs` are passed to ax.grid(**kwargs)\n\n        Parameters\n        ----------\n        which : str, optional\n            The grid lines to apply the changes on, by default \"major\"\n        axis : str, optional\n            Sets the axis of the grid, by default \"x\"\n        linestyle : str, optional\n            Grids line style, by default \"-\"\n        grid_behind : bool, optional\n            Sets the grid behind the bars, by default True\n        \"\"\"\n        self.grid_behind = grid_behind\n        self.grid_props = {\n            \"which\": which,\n            \"axis\": axis,\n            \"linestyle\": linestyle,\n            **kwargs,\n        }\n\n    def set_bar_annots(\n        self,\n        text_callback: Callable[[float], Union[str, float]] = lambda val: np.round(\n            val, 2\n        ),\n        xoffset: float = 0.1,\n        yoffset: float = -0.1,\n        ha: str = \"left\",\n        **kwargs,\n    ) -> None:\n        \"\"\"Sets bar annotation properties, additional kwargs are passed to `ax.text(**kwargs)`.\n        (Note these annotations are the texts near the bars)\n\n        Parameters\n        ----------\n        text_callback : Callable[[float], Union[str, float]], optional\n            Callback function for customizing the text, by default lambda val:np.round(val, 2)\n        xoffset : float, optional\n            X offset relative to bar length, by default 0.1\n        yoffset : float, optional\n             Y offset relative to bar height, by default -0.1\n        ha : str, optional\n            Horizontal alignment, by default \"left\"\n        \"\"\"\n        self.bar_annot_props = {\n            \"callback\": text_callback,\n            \"xoffset\": xoffset,\n            \"yoffset\": yoffset,\n            \"ha\": ha,\n            \"kwargs\": kwargs,\n        }\n\n    def add_extras(\n        self,\n        key: str,\n        callback: list[\n            Callable[\n                [plt.Axes, int, Datafier, SimpleNamespace],\n                None,\n            ]\n        ],\n    ):\n        \"\"\"Adds extra callback functions for additional customizations\n\n        Parameters\n        ----------\n        key : str\n            Unique identifier for each callback function\n        callback : list[Callable[[plt.Axes, int, pd.DataFrame, pd.DataFrame], None]]\n            Callback function for additional customization\n\n        Callback args:\n        ```\n            plt.Axes: The matplotlib Axes used for the barplot\n            int: Current animation frame / dataframe row\n            Datafier: The underlying datafier instance\n            SimpleNamespace: Contains the following attributes -\n            bar_rank, bar_length, top_bars, bar_colors\n\n            Example:\n            >>> lambda ax, *args: ax.set_xcale(\"log)\n        ```\n        \"\"\"\n        self.extra_callbacks[key] = callback\n\n    def init(self) -> None:\n        \"\"\"FuncAnimation init\"\"\"\n        bar_attr = self.getTopXY(0)\n        self.ax.set_axisbelow(self.grid_behind)\n        self.ax.barh(\n            bar_attr.bar_rank,\n            bar_attr.bar_length,\n            tick_label=bar_attr.top_bars,\n            **self.barh_props,\n        )\n\n    def update(self, i: int) -> None:\n        \"\"\"FuncAnimation update\n\n        Parameters\n        ----------\n        i : int\n            Animation frame\n        \"\"\"\n        self.ax.clear()\n\n        if self.fixed_xlim:\n            self.ax.set_xlim(self.xlim)\n        self.ax.set_ylim(self.ylim)\n\n        bar_attr = self.getTopXY(i)\n\n        self.ax.barh(\n            bar_attr.bar_rank,\n            bar_attr.bar_length,\n            tick_label=bar_attr.top_bars,\n            color=bar_attr.bar_colors,\n            **self.barh_props,\n        )\n\n        if self.annot_bars:\n            for x, y in zip(\n                bar_attr.bar_length,\n                bar_attr.bar_rank,\n            ):\n                self.ax.text(\n                    x + self.bar_annot_props[\"xoffset\"],\n                    y + self.bar_annot_props[\"yoffset\"],\n                    self.bar_annot_props[\"callback\"](x),\n                    ha=self.bar_annot_props[\"ha\"],\n                    **self.bar_annot_props[\"kwargs\"],\n                )\n\n        if self.xticks:\n            self.ax.tick_params(**self.xtick_props)\n\n        if self.yticks:\n            self.ax.tick_params(**self.ytick_props)\n\n        if self.grid:\n            self.ax.grid(**self.grid_props)\n\n        for k, v in self.text_collection.items():\n            if v[0]:\n                self.ax.text(\n                    s=v[0](i, self.datafier),\n                    transform=self.ax.transAxes,\n                    **v[1],\n                )\n            else:\n                self.ax.text(\n                    **v[1],\n                    transform=self.ax.transAxes,\n                )\n\n        for k, v in self.extra_callbacks.items():\n            v(self.ax, i, self.datafier, bar_attr)\n\n        self.post_update(self.ax, i, self.datafier, bar_attr)\n\n        if self.rounded_edges:\n            self._get_rounded_eges()\n            for patch in self.new_patches:\n                self.ax.add_patch(patch)\n"
  },
  {
    "path": "src/pynimate/barhplot.py",
    "content": "from types import SimpleNamespace\nfrom typing import Callable, Union\n\nimport numpy as np\nimport pandas as pd\nfrom matplotlib.patches import FancyBboxPatch\n\nfrom pynimate.baseplot import Baseplot\nfrom pynimate.datafier import BarDatafier\n\n\nclass Barhplot(Baseplot):\n    def __init__(\n        self,\n        datafier: BarDatafier,\n        palettes: list[str] = [\"viridis\"],\n        post_update: Callable[[__qualname__, int], None] = lambda self, i: None,\n        annot_bars: bool = True,\n        rounded_edges: bool = False,\n        fixed_xlim: bool = True,\n        xticks: bool = True,\n        yticks: bool = True,\n        grid: bool = True,\n    ) -> None:\n        \"\"\"Bar Chart animation module that requires a valid time index.The data\n        should be in this format where time is set to index\n            ```\n                Example:\n                >>> time  col1 col2 col3 ...\n                >>> 2012   1    0    2\n                >>> 2013   2    3    1\n            ```\n        Parameters\n        ----------\n        datafier : BarDatafier\n            The datafier instance\n        palettes : list[str], optional\n            List of color palettes to generate bar colors, by default [\"viridis\"]\n        post_update : Callable[[Barhplot, i], None], optional\n            callback function for additional customization, by default lambda self, i: None\n        annot_bars : bool, optional\n            Sets bar annotations, by default True\n        fixed_xlim : bool, optional\n            If False xlim will gradually change in every frame, by default True\n        xticks : bool, optional\n            Sets xticks, by default True\n        yticks : bool, optional\n            Sets yticks, by default True\n        grid : bool, optional\n             Sets xgrid, by default True\n        rounded_edges : bool, optional\n             Sets rounded bar edges, by default False\n\n        post_update args\n        ```\n        self: Baseplot instance\n        i: Frame index\n\n        example:\n\n        >>> def post_update(self, i):\n        >>>     # sets log scale for x-axis\n        >>>     self.ax.set_xscale(\"log\")\n\n        ```\n        \"\"\"\n        super().__init__(\n            datafier, palettes, post_update, fixed_xlim, True, xticks, yticks, grid\n        )\n        self.annot_bars = annot_bars\n        self.rounded_edges = rounded_edges\n\n        self.set_barh()\n        self.set_bar_border_props()\n        self.set_bar_annots()\n\n    @classmethod\n    def from_df(\n        cls,\n        data: pd.DataFrame,\n        time_format: str,\n        ip_freq: str,\n        palettes: list[str] = [\"viridis\"],\n        post_update: Callable[[__qualname__, int], None] = lambda self, i: None,\n        annot_bars: bool = True,\n        rounded_edges: bool = False,\n        fixed_xlim=True,\n        xticks=True,\n        yticks=True,\n        grid=True,\n    ):\n        return cls(\n            BarDatafier(data, time_format, ip_freq),\n            palettes,\n            post_update,\n            annot_bars,\n            rounded_edges,\n            fixed_xlim,\n            xticks,\n            yticks,\n            grid,\n        )\n\n    def set_xylim(\n        self,\n        xlim: list[float] = [],\n        ylim: list[float] = [],\n        xoffset: float = 5,\n        yoffset: float = 0.6,\n    ) -> None:\n        \"\"\"Sets xlim and ylim.\n\n        Parameters\n        ----------\n        xlim : list[float], optional\n            x axis limits in this format [min, max], by default [min, max + xoffset]\n        ylim : list[float], optional\n            y axis limits in this format [min, max], by default [0.5, n_bars + yoffset]\n        xoffset : float, optional\n            additional offset value for x axis max, by default 5\n        yoffset : float, optional\n            additional offset value for y axis max, by default 0.6\n        \"\"\"\n        super().set_xylim(xlim, ylim)\n\n        if xlim == []:\n            self.total_max = self.datafier.data.max().max()\n            xlim = [None, self.total_max + xoffset]\n        self.xlim = xlim\n\n        if ylim == []:\n            ylim = [0.5, self.dfr.n_bars + yoffset]\n        self.ylim = ylim\n\n    def get_ith_bar_attrs(self, i: int) -> SimpleNamespace:\n        \"\"\"Prepares ith top columns and their respective attributes such as position, length, colors.\n        Not meant to be used outside animation update.\n\n        Parameters\n        ----------\n        i : int\n            Animation frame index\n\n        Returns\n        -------\n        SimpleNamespace\n            bar_rank, bar_length, top_cols, column_colors\n        \"\"\"\n\n        bar_rank = self.dfr.df_ranks.iloc[i].values\n        top_cols = (bar_rank >= 1) & (bar_rank <= self.dfr.n_bars)\n        bar_rank = bar_rank[top_cols]\n        bar_length = self.dfr.data.iloc[i].values[top_cols]\n        cols = self.dfr.data.columns[top_cols]\n        colors = [self.column_colors[column] for column in cols]\n        return SimpleNamespace(\n            bar_rank=bar_rank,\n            bar_length=bar_length,\n            top_cols=cols,\n            column_colors=colors,\n        )\n\n    def _get_rounded_eges(\n        self,\n    ) -> None:\n        \"\"\"Creates bar border properties.\n        See https://matplotlib.org/3.1.0/api/_as_gen/matplotlib.patches.FancyBboxPatch.html\n        \"\"\"\n        border = self.bar_border_props\n        self.new_patches = []\n\n        for patch in reversed(self.ax.patches):\n            bb = patch.get_bbox()\n            color = patch.get_facecolor()\n            zorder = patch.zorder\n            p_bbox = FancyBboxPatch(\n                (bb.xmin, bb.ymin),\n                abs(bb.width),\n                abs(bb.height),\n                boxstyle=f\"round,pad={border['pad']}\"\n                + (\n                    f\",rounding_size={border['radius']}\"\n                    if border[\"radius\"] != None\n                    else \"\"\n                ),\n                ec=border[\"edge_color\"],\n                fc=color,\n                mutation_aspect=border[\"mutation_aspect\"],\n                zorder=zorder,\n                **border[\"kwargs\"],\n            )\n            patch.remove()\n            self.new_patches.append(p_bbox)\n\n    def set_barh(self, bar_height: float = 0.86, **kwargs):\n        \"\"\"Sets barh properties, addition kwargs are passed to `ax.barh(**kwargs)`\n\n        Parameters\n        ----------\n        bar_height : float, optional\n            Height of the bars (Note this is horizontal barplot), by default 0.86\n        \"\"\"\n        self.barh_props = {\"height\": bar_height, **kwargs}\n\n    def set_bar_annots(\n        self,\n        text_callback: Callable[[float], Union[str, float]] = lambda val: np.round(\n            val, 2\n        ),\n        xoffset: float = 0.1,\n        yoffset: float = -0.1,\n        ha: str = \"left\",\n        **kwargs,\n    ) -> None:\n        \"\"\"Sets bar annotation properties, additional kwargs are passed to `ax.text(**kwargs)`.\n        (Note these annotations are the texts near the bars)\n\n        Parameters\n        ----------\n        text_callback : Callable[[float], Union[str, float]], optional\n            Callback function for customizing the text, by default lambda val:np.round(val, 2)\n        xoffset : float, optional\n            X offset relative to bar length, by default 0.1\n        yoffset : float, optional\n             Y offset relative to bar height, by default -0.1\n        ha : str, optional\n            Horizontal alignment, by default \"left\"\n        \"\"\"\n        self.bar_annot_props = {\n            \"callback\": text_callback,\n            \"xoffset\": xoffset,\n            \"yoffset\": yoffset,\n            \"ha\": ha,\n            \"kwargs\": kwargs,\n        }\n\n    def set_bar_border_props(\n        self,\n        edge_color: str = \"k\",\n        radius: float = 0.5,\n        pad: float = -0.0040,\n        mutation_aspect: float = 0.2,\n        **kwargs,\n    ) -> None:\n        \"\"\"Sets bar border properties. Additional kwargs are passed to `FancyBboxPatch`.\n        See https://matplotlib.org/3.1.0/api/_as_gen/matplotlib.patches.FancyBboxPatch.html\n\n        Parameters\n        ----------\n        edge_color : str, optional\n            Bar edge color, by default \"k\"\n        radius : float, optional\n            Bar border radius, by default 0.5\n        pad : float, optional\n            See above link, by default -0.0040\n        mutation_aspect : float, optional\n            See above link, by default 0.2\n        \"\"\"\n        self.bar_border_props = {\n            \"edge_color\": edge_color,\n            \"radius\": radius,\n            \"pad\": pad,\n            \"mutation_aspect\": mutation_aspect,\n            \"kwargs\": kwargs,\n        }\n\n    def update(self, i: int) -> None:\n        \"\"\"FuncAnimation update\n\n        Parameters\n        ----------\n        i : int\n            Animation frame\n        \"\"\"\n        self.ax.clear()\n\n        self.bar_attr = self.get_ith_bar_attrs(i)\n\n        self.ax.barh(\n            self.bar_attr.bar_rank,\n            self.bar_attr.bar_length,\n            tick_label=self.bar_attr.top_cols,\n            color=self.bar_attr.column_colors,\n            **self.barh_props,\n        )\n        if self.annot_bars:\n            for ind, (x, y) in enumerate(\n                zip(self.bar_attr.bar_length, self.bar_attr.bar_rank)\n            ):\n                self.ax.text(\n                    x + self.bar_annot_props[\"xoffset\"],\n                    y + self.bar_annot_props[\"yoffset\"],\n                    self.bar_annot_props[\"callback\"](x),\n                    ha=self.bar_annot_props[\"ha\"],\n                    **self.bar_annot_props[\"kwargs\"],\n                    zorder=ind,\n                )\n\n        if self.rounded_edges:\n            self._get_rounded_eges()\n            for patch in self.new_patches[::-1]:\n                self.ax.add_patch(patch)\n\n        for ind, patch in enumerate(self.ax.patches):\n            patch.set_zorder(ind)\n\n        super().update(i)\n"
  },
  {
    "path": "src/pynimate/baseplot.py",
    "content": "from typing import Callable, Union\n\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport pandas as pd\nimport seaborn as sns\n\nfrom pynimate.datafier import BaseDatafier\n\n\nclass Baseplot:\n    def __init__(\n        self,\n        datafier: BaseDatafier,\n        palettes: list[str] = [\"viridis\"],\n        post_update: Callable[[__qualname__, int], None] = lambda self, i: None,\n        fixed_xlim=True,\n        fixed_ylim=True,\n        xticks=True,\n        yticks=True,\n        grid=True,\n    ) -> None:\n        \"\"\"General Chart animation module that requires a valid time index.The data\n        should be in this format where time is set to index\n            ```\n                Example:\n                >>> time  col1 col2 col3 ...\n                >>> 2012   1    0    2\n                >>> 2013   2    3    1\n            ```\n        Parameters\n        ----------\n        datafier : BaseDatafier\n            The datafier instance\n        palettes : list[str], optional\n            List of color palettes to generate bar colors, by default [\"viridis\"]\n        post_update : Callable[[Baseplot, i], None], optional\n            callback function for additional customization, by default lambda self, i: None\n        fixed_xlim : bool, optional\n            If False xlim will gradually change in every frame, by default True\n        fixed_ylim : bool, optional\n            If False ylim will gradually change in every frame, by default True\n        xticks : bool, optional\n            Sets xticks, by default True\n        yticks : bool, optional\n            Sets yticks, by default True\n        grid : bool, optional\n             Sets xgrid, by default True\n\n        post_update args\n        ```\n            self: Baseplot instance\n            i: Frame index\n\n        example:\n\n        >>> def post_update(self, i):\n        >>>     # sets log scale for x-axis\n        >>>     self.ax.set_xscale(\"log\")\n\n        ```\n        \"\"\"\n        self.datafier = self.dfr = datafier\n\n        self.time_range = list(self.datafier.data.index)\n        self.length = len(self.time_range)\n\n        self.palettes = palettes\n        self.column_colors = self.generate_column_colors()\n\n        self.text_collection = {}\n        self.post_update = post_update\n        self.fixed_xlim = fixed_xlim\n        self.fixed_ylim = fixed_ylim\n        self.xticks = xticks\n        self.yticks = yticks\n        self.grid = grid\n        self.set_xylim()\n        self.set_xticks()\n        self.set_yticks()\n        self.set_grid()\n\n    @classmethod\n    def from_df(\n        cls,\n        data: pd.DataFrame,\n        time_format: str,\n        ip_freq: str,\n        palettes: list[str] = [\"viridis\"],\n        post_update: Callable[[__qualname__, int], None] = lambda self, i: None,\n        fixed_xlim=True,\n        fixed_ylim=True,\n        xticks=True,\n        yticks=True,\n        grid=True,\n    ):\n        return cls(\n            BaseDatafier(data, time_format, ip_freq),\n            palettes,\n            post_update,\n            fixed_ylim,\n            fixed_xlim,\n            xticks,\n            yticks,\n            grid,\n        )\n\n    def generate_column_colors(self) -> dict[str, str]:\n        \"\"\"Generates column colors based on the given color palettes.\n\n        Returns\n        -------\n        dict[str, str]\n            dict containing column to color mapping\n        \"\"\"\n        all_colors = []\n        for palette in self.palettes:\n            all_colors.extend(\n                list(\n                    sns.color_palette(\n                        palette,\n                        int(\n                            np.ceil(\n                                len(self.dfr.colorable_columns) / len(self.palettes)\n                            )\n                        ),\n                    )\n                )\n            )\n\n        return {\n            column: color\n            for column, color in zip(self.dfr.colorable_columns, all_colors)\n        }\n\n    def set_column_decorations(\n        self,\n        new_decorations: Union[str, list[str], dict[str, str]],\n        old_decorations: dict[str, str],\n    ) -> dict[str, str]:\n        decorations = {}\n        if isinstance(new_decorations, str):\n            decorations = {k: new_decorations for (k, _) in old_decorations.items()}\n\n        elif isinstance(new_decorations, dict):\n            decorations = old_decorations\n            for key in new_decorations:\n                if key not in old_decorations.keys():\n                    raise ValueError(f\"Invalid column name found {key}\")\n            else:\n                decorations.update(new_decorations)\n\n        elif isinstance(new_decorations, list):\n            assert len(new_decorations) == len(\n                old_decorations\n            ), \"Number of colors does not match number of columns\"\n\n            decorations = {\n                k: v2 for v2, (k, _) in zip(new_decorations, old_decorations.items())\n            }\n        else:\n            raise TypeError(\"colors must be str, list or dict\")\n\n        return decorations\n\n    def set_column_colors(self, colors: Union[str, list[str], dict[str, str]]) -> None:\n        \"\"\"Sets column colors. If colors is a list, length of colors should be equal\n        to `len(column_colors)`\n\n        Parameters\n        ----------\n        colors : Union[str, list[str], dict[str, str]]\n            Single color str or list of colors or dict of column to color mapping\n        \"\"\"\n        self.column_colors = self.set_column_decorations(colors, self.column_colors)\n\n    # def set_column_colors(self, colors: Union[str, list[str], dict[str, str]]) -> None:\n    #     \"\"\"Sets column colors. If colors is a list, length of colors should be equal\n    #     to `len(column_colors)`\n\n    #     Parameters\n    #     ----------\n    #     colors : Union[str, list[str], dict[str, str]]\n    #         Single colors str or list of colors or dict of column to color mapping\n    #     \"\"\"\n\n    #     if isinstance(colors, str):\n    #         self.column_colors = {k: colors for (k, _) in self.column_colors.items()}\n\n    #     elif isinstance(colors, dict):\n    #         for key in colors:\n    #             if key not in self.column_colors.keys():\n    #                 raise ValueError(f\"Invalid column name found {key}\")\n    #         else:\n    #             self.column_colors.update(colors)\n\n    #     elif isinstance(colors, list):\n    #         assert len(colors) == len(\n    #             self.column_colors\n    #         ), \"Number of colors does not match number of columns\"\n\n    #         self.column_colors = {\n    #             k: v2 for v2, (k, _) in zip(colors, self.column_colors.items())\n    #         }\n\n    #     else:\n    #         raise TypeError(\"colors must be str, list or dict\")\n\n    def set_xylim(self, xlim: list[float] = [], ylim: list[float] = []):\n        \"\"\"Sets xlim and ylim\n\n        Parameters\n        ----------\n        xlim : list[float], optional\n            x axis limits in this format [min, max], by default [min date, max date]\n        ylim : list[float], optional\n            y axis limits in this format [min, max], by default [min y val, max y val]\n        \"\"\"\n\n        assert (\n            len(xlim) == 2 or len(xlim) == 0\n        ), \"xlim is incorrect (correct format - [minLim, maxLim])\"\n        assert (\n            len(ylim) == 2 or len(ylim) == 0\n        ), \"ylim is incorrect (correct format - [minLim, maxLim])\"\n\n        if xlim == []:\n            self.max_date = self.datafier.data.index.max()\n            xlim = [None, self.max_date]\n        self.xlim = xlim\n\n        if ylim == []:\n            self.total_max = self.datafier.data.max().max()\n            ylim = [None, self.total_max]\n        self.ylim = ylim\n\n    def set_axes(self, ax: plt.Axes) -> None:\n        \"\"\"Sets the Axes of this plot\n\n        Parameters\n        ----------\n        ax : plt.Axes\n            Axes of this plot\n        \"\"\"\n        self.ax = ax\n\n    def set_title(\n        self,\n        title: str,\n        x: float = 0,\n        y: float = 1.01,\n        size: float = 13,\n        color: str = \"#777777\",\n        **kwargs,\n    ) -> None:\n        \"\"\"Sets the plot title and additional kwargs are passed to `plt.text(**kwargs)`\n\n        Parameters\n        ----------\n        title : str\n            Title text\n        x : float, optional\n            x coordinate of the text, by default 0\n        y : float, optional\n            y coordinate, by default 1.01\n        size : float, optional\n            text size, by default 13\n        color : str, optional\n            text color, by default \"#777777\"\n        \"\"\"\n        self.text_collection[\"title\"] = (\n            None,\n            {\n                **{\n                    \"x\": x,\n                    \"y\": y,\n                    \"s\": title,\n                    \"color\": color,\n                    \"size\": size,\n                },\n                **kwargs,\n            },\n        )\n\n    def set_xlabel(\n        self,\n        text: str,\n        x: float = 0.43,\n        y: float = -0.09,\n        size: float = 13,\n        color: str = \"#777777\",\n        **kwargs,\n    ) -> None:\n        \"\"\"Sets the plot xlabel and additional kwargs are passed to `plt.text(**kwargs)`\n\n        Parameters\n        ----------\n        text : str\n            The xlabel text\n        x : float, optional\n             X coordinate of the text, by default 0.43\n        y : float, optional\n            Y coordinate, by default -0.09\n        size : float, optional\n            Text size, by default 13\n        color : str, optional\n            Text color, by default \"#777777\"\n        \"\"\"\n        self.text_collection[\"xlabel\"] = (\n            None,\n            {\n                **{\n                    \"x\": x,\n                    \"y\": y,\n                    \"s\": text,\n                    \"color\": color,\n                    \"size\": size,\n                },\n                **kwargs,\n            },\n        )\n\n    def set_time(\n        self,\n        callback: Callable[\n            [int, BaseDatafier], str\n        ] = lambda i, datafier: datafier.data.index[i],\n        x: float = 0.97,\n        y: float = 0.27,\n        size: float = 46,\n        weight: float = 800,\n        ha=\"right\",\n        color: str = \"#777777\",\n        **kwargs,\n    ) -> None:\n        \"\"\"Annotates the time in the plot and additional kwargs are passed to `plt.text(**kwargs)`\n\n        Parameters\n        ----------\n        callback : Callable[ [int, BaseDatafier], str ], optional\n            Callback function to customize the time text, by default `lambda i, datafier: datafier.data.index[i]`\n        x : float, optional\n            x coordinate of the text, by default 0.97\n        y : float, optional\n            y coordinate of the text, by default 0.27\n        size : float, optional\n            text size, by default 46\n        weight : float, optional\n            text weight, by default 800\n        ha : str, optional\n            horizontal alignment, by default \"right\"\n        color : str, optional\n            text color, by default \"#777777\"\n\n        callback args:\n        ```\n            i: Animation frame / data row index\n            datafier: The datafier instance,\n                access the data using datafier.data\n        ```\n        \"\"\"\n        self.text_collection[\"time\"] = (\n            callback,\n            {\n                **{\n                    \"x\": x,\n                    \"y\": y,\n                    \"color\": color,\n                    \"size\": size,\n                    \"weight\": weight,\n                    \"ha\": ha,\n                },\n                **kwargs,\n            },\n        )\n\n    def set_text(\n        self,\n        key: str,\n        text: str = None,\n        callback: Callable[[int, BaseDatafier], str] = None,\n        x: float = 0,\n        y: str = 0,\n        size: float = 13,\n        color: str = \"#777777\",\n        **kwargs,\n    ):\n        \"\"\"General function to add custom texts in the plot. Either text or callback should be passd but not both.\n\n        Parameters\n        ----------\n        key : str\n            Unique identifier for each texts, note: These keys, title, xlabel, time, are reserved.\n              overwrite them if you wish to use callbacks instead of texts in title or xlabel\n        text : str, optional\n            The text to be added in the plot, by default None\n        callback : Callable[[int, pd.DataFrame], str], optional\n            Callback function to customize the text, by default None\n        x : float, optional\n            X coordinate of the text, by default 0\n        y : str, optional\n            Y coordinate of the text, by default 0\n        size : float, optional\n            Text size, by default 13\n        color : str, optional\n            Text color, by default \"#777777\"\n\n        Callback args:\n        ```\n            args:\n            i: Animation frame / data row index\n            datafier: The datafier instance\n\n            Example:\n            >>> lambda i, datafier: datafier.data.index[i]\n        ```\n        \"\"\"\n        assert text or callback, \"Both text and callback cannot be None\"\n        self.text_collection[key] = (\n            callback,\n            {\n                **{\n                    \"x\": x,\n                    \"y\": y,\n                    \"s\": text,\n                    \"color\": color,\n                    \"size\": size,\n                },\n                **kwargs,\n            },\n        )\n        if callback:\n            self.text_collection[key][1].pop(\"s\")\n\n    def remove_text(self, keys: Union[str, list[str]]):\n        \"\"\"Removes texts by key\n\n        Parameters\n        ----------\n        keys : list[str]\n            key or List of keys to be removed\n        \"\"\"\n        if isinstance(keys, str):\n            keys = [keys]\n\n        print(self.text_collection)\n        for key in keys:\n            self.text_collection.pop(key)\n\n    def set_xticks(\n        self, axis: str = \"x\", colors: str = \"#777777\", labelsize: float = 12, **kwargs\n    ):\n        \"\"\"Sets xtick properties, additional kwargs are passed to `ax.tick_params(**kwargs)`\n\n        Parameters\n        ----------\n        axis : str, optional\n            Defines tick axis, by default \"x\"\n        colors : str, optional\n            Sets tick color, by default \"#777777\"\n        labelsize : float, optional\n            Sets tick size, by default 12\n        \"\"\"\n        self.xtick_props = {\n            \"axis\": axis,\n            \"colors\": colors,\n            \"labelsize\": labelsize,\n            **kwargs,\n        }\n\n    def set_yticks(\n        self, axis: str = \"y\", colors: str = \"#777777\", labelsize: float = 10, **kwargs\n    ):\n        \"\"\"Sets ytick properties, additional kwargs are passed to `ax.tick_params(**kwargs)`\n\n        Parameters\n        ----------\n        axis : str, optional\n            Defines tick axis, by default \"y\"\n        colors : str, optional\n            Sets tick color, by default \"#777777\"\n        labelsize : float, optional\n            Sets tick size, by default 10\n        \"\"\"\n        self.ytick_props = {\n            \"axis\": axis,\n            \"colors\": colors,\n            \"labelsize\": labelsize,\n            **kwargs,\n        }\n\n    def set_grid(\n        self,\n        which: str = \"major\",\n        axis: str = \"x\",\n        linestyle: str = \"-\",\n        grid_behind: bool = True,\n        **kwargs,\n    ) -> None:\n        \"\"\"Sets the plots grid, additional kwargs are passed to `ax.grid(**kwargs)`\n\n        Parameters\n        ----------\n        which : str, optional\n            The grid lines to apply the changes on, by default \"major\"\n        axis : str, optional\n            Sets the axis of the grid, by default \"x\"\n        linestyle : str, optional\n            Grids line style, by default \"-\"\n        grid_behind : bool, optional\n            Sets the grid behind the plot, by default True\n        \"\"\"\n        self.grid_behind = grid_behind\n        self.grid_props = {\n            \"which\": which,\n            \"axis\": axis,\n            \"linestyle\": linestyle,\n            **kwargs,\n        }\n\n    def update(self, i):\n        if self.fixed_xlim:\n            self.ax.set_xlim(self.xlim)\n        if self.fixed_ylim:\n            self.ax.set_ylim(self.ylim)\n\n        if self.xticks:\n            self.ax.tick_params(**self.xtick_props)\n        if self.yticks:\n            self.ax.tick_params(**self.ytick_props)\n\n        if self.grid:\n            self.ax.grid(**self.grid_props)\n\n        self.ax.set_axisbelow(self.grid_behind)\n\n        self.post_update(self, i)\n        for v in self.text_collection.values():\n            callback, props_dict = v[0], v[1]\n            if callback:\n                self.ax.text(\n                    s=callback(i, self.datafier),\n                    transform=self.ax.transAxes,\n                    **props_dict,\n                )\n            else:\n                self.ax.text(\n                    **props_dict,\n                    transform=self.ax.transAxes,\n                )\n"
  },
  {
    "path": "src/pynimate/canvas.py",
    "content": "from typing import Callable\n\nimport matplotlib.animation as animation\nimport matplotlib.pyplot as plt\nimport numpy as np\n\n\nclass Canvas:\n    def __init__(\n        self,\n        nrows: int = 1,\n        ncols: int = 1,\n        figsize: tuple[int, int] = (12.8, 7.2),\n        post_update: Callable[[plt.Figure, list[list[plt.Axes]]], None] = None,\n        **kwargs,\n    ) -> None:\n        \"\"\"Creates the matplotlib figure, subplots and additional figure properties.\n        Also creates and saves the animation.\n\n        Parameters\n        ----------\n        nrows : int, optional\n            Number of rows of the subplot grid, by default 1\n        ncols : int, optional\n            Number of columns of the subplot grid, by default 1\n        figsize : tuple[int, int], optional\n            Width, height in inches, by default (16, 9)\n        post_update : Callable[[plt.Figure, list[list[plt.Axes]]], None], optional\n            callback function for additional figure customization, by default None\n\n        post_update args:\n        ```\n            plt.Figure: Matplotlib figure\n            list[list[plt.Axes]]]: Subplot Axes\n        ```\n        \"\"\"\n        self.post_update = post_update or (lambda *args: None)\n        self.fig, self.ax = plt.subplots(nrows, ncols, figsize=figsize, **kwargs)\n\n        if nrows == 1 and ncols == 1:\n            self.ax = np.array([[self.ax]])\n        elif nrows == 1:\n            self.ax = np.array([self.ax])\n        self.plots = []\n        self.length = 0\n\n    def add_plot(self, plot, index: tuple[int, int] = (0, 0)) -> __qualname__:\n        \"\"\"Adds the plot to be animated with its ax index (for multiple subplots)\n\n        Parameters\n        ----------\n        plot : Plot_like\n            Plot to be animated\n        index : tuple[int, int], optional\n            Subplot index, by default (0, 0)\n\n        Returns\n        -------\n        Canvas\n            Returns the canvas instance\n        \"\"\"\n        plot.set_axes(self.ax[index])\n        self.length = max(self.length, plot.length)\n        self.plots.append(plot)\n        return self\n\n    # def _init(self) -> None:\n    #     for plot in self.plots:\n    #         plot.init()\n\n    def _update(self, i: int) -> None:\n        self.post_update(self.fig, self.ax)\n        for plot in self.plots:\n            plot.update(min(plot.length - 1, i))\n\n    def animate(\n        self,\n        frames_callback: Callable[[int], any] = lambda length: length,\n        interval: int = 50,\n        **kwargs,\n    ) -> None:\n        \"\"\"Main module to create the animation, additional `kwargs` are passed to animation.FuncAnimation(**kwargs)\n\n        Parameters\n        ----------\n        frames_callback : int, optional\n            Passed to funcAnimation frames, by default lambda length: length\n        interval : int, optional\n            Interval between each frame. Defaults to 50ms, by default 50\n\n        \"\"\"\n        self.ani = animation.FuncAnimation(\n            self.fig,\n            self._update,\n            frames=frames_callback(self.length),\n            interval=interval,\n            blit=False,\n            **kwargs,\n        )\n        return self.ani\n\n    def save(self, filename: str, fps: int, extension: str = \"gif\", **kwargs):\n        \"\"\"Saves the current animation\n\n        Parameters\n        ----------\n        filename : str\n            Filename\n        fps : int\n            Video fps / frames per second\n        extension : str, optional\n            File extension, by default \"gif\"\n        \"\"\"\n        self.ani.save(f\"{filename}.{extension}\", fps=fps, **kwargs)\n"
  },
  {
    "path": "src/pynimate/datafier.py",
    "content": "import warnings\n\nimport numpy as np\nimport pandas as pd\nimport seaborn as sns\n\n\nclass Datafier:\n    def __init__(\n        self,\n        data: pd.DataFrame,\n        time_format: str,\n        ip_freq: str,\n        ip_frac: float = 0.5,\n        n_bars: int = 10,\n        palettes: list[str] = [\"viridis\"],\n    ) -> None:\n        \"\"\"\n        Datafier is deprecated, use plot specific datafiers instead.\n\n        Contains data preparation modules, which includes interpolation, rank generation, color_generation.\n        data should be in this format where time is set to index\n        ```\n            Example:\n            >>> time  col1 col2 col3 ...\n            >>> 2012   1    0    2\n            >>> 2013   2    3    1\n        ```\n        Parameters\n        ----------\n        data : pd.DataFrame\n            The data to be prepared, should be in this format where time is set to index\n        time_format : str\n            Index datetime format\n        ip_freq : str\n            Interpolation frequency\n        ip_frac : float, optional\n            Rank interpolation fraction (check end of docstring), by default 0.5\n        n_bars : int, optional\n            Number of bars to be visible on the plot, by default 10 or less\n        palettes : list[str], optional\n            List of color palettes to generate bar colors, by default [\"viridis\"]\n\n        ```\n            ip_frac is the percentage of NaN values to be linearly\n            interpolated for column ranks\n\n            Consider this example\n            >>>               a    b\n            >>> date\n            >>> 2021-11-13  1.0  4.0\n            >>> 2021-11-14  NaN  NaN\n            >>> 2021-11-15  NaN  NaN\n            >>> 2021-11-16  NaN  NaN\n            >>> 2021-11-17  NaN  NaN\n            >>> 2021-11-18  2.0  6.0\n\n            with ip_frac set to 0.5, 50% of NaN's will be linearly\n            interpolated while the rest will back filled.\n\n            >>>              a      b\n            >>> 2021-11-13  1.00  4.00  << original value --------\n            >>> 2021-11-14  1.33  4.67                            |\n            >>> 2021-11-15  1.67  5.33                            |  50% linearly\n            >>> 2021-11-16  2.00  6.00  <- linear interpolation   |  interpolated\n            >>> 2021-11-17  2.00  6.00      upto here             |  rest are filled.\n            >>> 2021-11-18  2.00  6.00  << original value---------\n\n            This adds some stability in the barChartRace\n            and reduces constantly shaking of bars.\n\n        ```\n\n        \"\"\"\n        warnings.warn(\n            \"Datafier is deprecated, use plot specific datafiers instead.\",\n            DeprecationWarning,\n        )\n        self.raw_data = data\n        self.ip_freq = ip_freq\n        self.ip_frac = ip_frac\n        self.n_bars = min(n_bars, len(self.raw_data.columns))\n        self.palettes = palettes\n        self.raw_data.index = pd.to_datetime(self.raw_data.index, format=time_format)\n        self.data, self.df_ranks = self.get_prepared_data(self.raw_data, self.ip_frac)\n        self.top_cols = self.get_top_cols()\n        self.bar_colors = self.get_bar_colors()\n\n    def add_var(self, row_var: pd.DataFrame = None, col_var: pd.DataFrame = None):\n        \"\"\"Adds additional variables to the data, both row and column wise.\\n\n        Row wise data format: The index should be equal to that of the actual data.\n        ```\n            time  leap_year col2   ...\n            2012    yes      0\n            2013    no       3\n\n        ```\n        Column wise data format: The index should be equal to the columns of the actual data.\n        ```\n            index  continent   col2 ...\n            ind    Asia         0\n            usa    N America    3\n            jap    Asia         2\n        ```\n        Parameters\n        ----------\n        row_var : pd.DataFrame, optional\n            Dataframe containing variables related to time, by default None\n        col_var : pd.DataFrame, optional\n            Dataframe containing variables related to columns, by default None\n        \"\"\"\n        self.row_var = self.interpolateEven(row_var, self.ip_freq) if row_var else None\n        self.col_var = col_var\n\n    def interpolate(\n        self, data: pd.DataFrame, freq: str, method: str = \"linear\"\n    ) -> pd.DataFrame:\n        num_cols = data.select_dtypes(\"number\").columns\n        num_data = data[num_cols]\n        # num_data = num_data.T\n        num_data.index = pd.to_datetime(num_data.index)\n        new_ind = pd.date_range(num_data.index.min(), num_data.index.max(), freq=freq)\n        num_data = num_data.reindex(new_ind).interpolate(method=method)\n        data = data[data.select_dtypes(exclude=\"number\").columns].join(\n            num_data, how=\"right\"\n        )\n        return data\n\n    def interpolate_even(\n        self, data: pd.DataFrame, freq: str, method: str = \"linear\"\n    ) -> pd.DataFrame:\n        \"\"\"Interpolates the given dataframe according to the frequency\n\n        Parameters\n        ----------\n        data : pd.DataFrame\n            Dataframe contaning the data\n        freq : str\n            Interpolation frequency\n        method : str, optional\n            Interpolation method, by default \"linear\"\n\n        Returns\n        -------\n        pd.DataFrame\n            Interpolated dataframe\n        \"\"\"\n        ncols = data.select_dtypes(\"number\").columns\n        num_data = data[ncols]\n        if freq != None:\n            new_ind = pd.date_range(\n                num_data.index.min(), num_data.index.max(), freq=freq\n            )\n            new_ser = pd.Series(\n                [0] * len(new_ind), index=new_ind, name=\"new_ind\"\n            ).to_frame()\n            num_data = (\n                new_ser.join(num_data, how=\"outer\").drop(\"new_ind\", axis=1).sort_index()\n            )\n        num_data = num_data.interpolate(method=method)\n        data = data[data.select_dtypes(exclude=\"number\").columns].join(\n            num_data, how=\"right\"\n        )\n        data[data.select_dtypes(exclude=\"number\").columns] = (\n            data[data.select_dtypes(exclude=\"number\").columns]\n            .fillna(method=\"bfill\")\n            .fillna(method=\"ffill\")\n        )\n        return data\n\n    def get_prepared_data(\n        self, data: pd.DataFrame, ip_frac: float = 0.5\n    ) -> tuple[pd.DataFrame, pd.DataFrame]:\n        \"\"\"Creates interpolated data and column ranks\n\n        Parameters\n        ----------\n        data : pd.DataFrame\n            Dataframe containing the data\n        ip_frac : float, optional\n            Interpolation fraction, by default 0.5\n\n        Returns\n        -------\n        tuple[pd.DataFrame, pd.DataFrame]\n            Tuple containing the following data\n            ```\n                pd.DataFrame: Interpolated data values\n                pd.DataFrame: Interpolated column ranks\n            ```\n        \"\"\"\n\n        df_ranks = data.rank(axis=1, method=\"first\", ascending=False).clip(\n            upper=self.n_bars + 1\n        )\n\n        df_ranks = self.n_bars + 1 - df_ranks\n        data.replace(np.nan, 0, inplace=True)\n        df_ranks.replace(np.nan, -1, inplace=True)\n        data = self.interpolate_even(data, freq=self.ip_freq)\n        df_ranks = df_ranks.reindex(data.index)\n        # calculate the no of nans in each interval\n        # see https://stackoverflow.com/questions/69951782/pandas-interpolate-with-condition\n        if ip_frac != 0:\n            t = df_ranks.iloc[:, 0]\n            # total length\n            x = len(t)\n            # no of nans\n            z = t.isna().sum()\n            # no of non-nans\n            y = x - z\n            # no of nans in each interval\n            w = z / (y - 1)\n            if w * ip_frac > 0:\n                df_ranks = df_ranks.interpolate(\n                    method=\"bfill\", limit=int(np.ceil(w * ip_frac))\n                )\n        df_ranks = df_ranks.interpolate()\n        return (data, df_ranks)\n\n    def get_top_cols(self) -> list[int]:\n        \"\"\"Selects columns where column_rank < n_bars in any timestamp\n\n        Returns\n        -------\n        list[int]\n            List of columns that will appear in the animation at least once\n        \"\"\"\n        top_cols = self.df_ranks.max(axis=0)\n        top_cols = top_cols[top_cols >= 1]\n        return list(top_cols.index)\n\n    def get_bar_colors(self) -> dict[str, str]:\n        \"\"\"Generates bar (column) colors based on the given color palettes\n\n        Returns\n        -------\n        dict[str, str]\n            dict containing column to color mapping\n        \"\"\"\n        all_colors = []\n        for palette in self.palettes:\n            all_colors.extend(\n                list(\n                    sns.color_palette(\n                        palette, int(np.ceil(len(self.top_cols) / len(self.palettes)))\n                    )\n                )\n            )\n\n        return {column: color for column, color in zip(self.top_cols, all_colors)}\n\n\nclass BaseDatafier:\n    def __init__(\n        self,\n        data: pd.DataFrame,\n        time_format: str,\n        ip_freq: str,\n        ip_method: str = \"linear\",\n    ) -> None:\n        \"\"\"Contains data preparation modules, which includes interpolation.\n        data should be in this format where time is set to index\n        ```\n            Example:\n            >>> time  col1 col2 col3 ...\n            >>> 2012   1    0    2\n            >>> 2013   2    3    1\n        ```\n        Parameters\n        ----------\n        data : pd.DataFrame\n            The data to be prepared, should be in this format where time is set to index\n        time_format : str\n            Index datetime format\n        ip_freq : str\n            Interpolation frequency\n        \"\"\"\n        self.raw_data = data\n        self.ip_freq = ip_freq\n        self.ip_method = ip_method\n        self.colorable_columns = self.raw_data.columns\n        self.raw_data.index = pd.to_datetime(self.raw_data.index, format=time_format)\n        self.expanded = self.data = self.raw_data\n        self.data = self.interpolate_data()\n\n    def add_var(self, row_var: pd.DataFrame = None, col_var: pd.DataFrame = None):\n        \"\"\"Adds additional variables to the data, both row and column wise.\\n\n        Row wise data format: The index should be equal to that of the actual data.\n        ```\n            time  leap_year col2   ...\n            2012    yes      0\n            2013    no       3\n\n        ```\n        Column wise data format: The index should be equal to the columns of the actual data.\n        ```\n            index  continent   col2 ...\n            ind    Asia         0\n            usa    N America    3\n            jap    Asia         2\n        ```\n        Parameters\n        ----------\n        row_var : pd.DataFrame, optional\n            Dataframe containing variables related to time, by default None\n        col_var : pd.DataFrame, optional\n            Dataframe containing variables related to columns, by default None\n        \"\"\"\n        self.row_var = self.interpolate_even(row_var, self.ip_freq) if row_var else None\n        self.col_var = col_var\n\n    def interpolate_even(\n        self, data: pd.DataFrame, freq: str, method: str = \"linear\"\n    ) -> pd.DataFrame:\n        \"\"\"Interpolates the given dataframe according to the frequency\n\n        Parameters\n        ----------\n        data : pd.DataFrame\n            Dataframe containing the data\n        freq : str\n            Interpolation frequency\n        method : str, optional\n            Interpolation method, by default \"linear\"\n\n        Returns\n        -------\n        pd.DataFrame\n            Interpolated dataframe\n        \"\"\"\n        ncols = data.select_dtypes(\"number\").columns\n        num_data = data[ncols]\n        if freq != None:\n            new_ind = pd.date_range(\n                num_data.index.min(), num_data.index.max(), freq=freq\n            )\n            new_ser = pd.Series(\n                [0] * len(new_ind), index=new_ind, name=\"new_ind\"\n            ).to_frame()\n            num_data = (\n                new_ser.join(num_data, how=\"outer\").drop(\"new_ind\", axis=1).sort_index()\n            )\n            self.expanded = (\n                new_ser.join(self.expanded, how=\"outer\")\n                .drop(\"new_ind\", axis=1)\n                .sort_index()\n            )\n        num_data = num_data.interpolate(method=method)\n        obCols = data.select_dtypes(exclude=\"number\").columns\n        data = data[obCols].join(num_data, how=\"right\")\n        data[obCols] = data[obCols].fillna(method=\"bfill\").fillna(method=\"ffill\")\n        return data\n\n    def interpolate_data(self) -> pd.DataFrame:\n        \"\"\"Interpolates the raw data\n\n        Returns\n        -------\n        pd.DataFrame\n            Interpolated data\n        \"\"\"\n        return self.interpolate_even(self.data, self.ip_freq)\n\n\nclass BarDatafier(BaseDatafier):\n    def __init__(\n        self,\n        data: pd.DataFrame,\n        time_format: str,\n        ip_freq: str,\n        ip_frac: float = 0.1,\n        n_bars: int = 10,\n        ip_method: str = \"linear\",\n        ip_fill_method=\"bfill\",\n    ) -> None:\n        \"\"\"Contains data preparation modules, which includes interpolation, rank generation.\n        data should be in this format where time is set to index\n        ```\n            Example:\n            >>> time  col1 col2 col3 ...\n            >>> 2012   1    0    2\n            >>> 2013   2    3    1\n        ```\n\n        Parameters\n        ----------\n        data : pd.DataFrame\n            The data to be prepared, should be in this format where time is set to index\n        time_format : str\n            Index datetime format\n        ip_freq : str\n            Interpolation frequency\n        ip_frac : float, optional\n            Rank interpolation fraction (check end of docstring), by default 0.5\n        n_bars : int, optional\n            Number of bars to be visible on the plot, by default 10 or less\n        ip_method : str, optional\n            Interpolation Method, by default \"linear\"\n        ip_fill_method : str, optional\n            fill method for ip_frac, by default \"bfill\"\n\n\n        ip_frac is the percentage of NaN values to be linearly\n        interpolated for column ranks\n\n        ```\n\n            Consider this example\n            >>>               a    b\n            >>> date\n            >>> 2021-11-13  1.0  4.0\n            >>> 2021-11-14  NaN  NaN\n            >>> 2021-11-15  NaN  NaN\n            >>> 2021-11-16  NaN  NaN\n            >>> 2021-11-17  NaN  NaN\n            >>> 2021-11-18  2.0  6.0\n        ```\n        with ip_frac set to 0.5, 50% of NaN's will be interpolated\n        by ip_method while the rest will be filled by ip_fill_method.\n        The example uses bfill, if ffill is used the filling will happen\n        before interpolation.\n        ```\n            >>>              a      b\n            >>> 2021-11-13  1.00  4.00  << original value --------\n            >>> 2021-11-14  1.33  4.67                            |\n            >>> 2021-11-15  1.67  5.33                            |  50% interpolated\n            >>> 2021-11-16  2.00  6.00  <- linear interpolation   |  by ip_method\n            >>> 2021-11-17  2.00  6.00      upto here             |  rest are filled\n            >>> 2021-11-18  2.00  6.00  << original value---------   by ip_fill_method\n        ```\n        This adds stability in the barChartRace\n        and reduces constant shaking of bars.\n        \"\"\"\n        super().__init__(data, time_format, ip_freq, ip_method)\n        self.ip_frac = ip_frac\n        self.ip_fill_method = ip_fill_method\n        self.n_bars = min(n_bars, len(self.raw_data.columns))\n        self.df_ranks = self.get_data_ranks(self.ip_frac)\n        self.top_cols = self.colorable_columns = self.get_top_cols()\n\n    def interpolate_data(self) -> pd.DataFrame:\n        self.data = self.data.replace(np.nan, 0)\n        return super().interpolate_data()\n\n    def get_data_ranks(self, ip_frac: float = 0.1) -> pd.DataFrame:\n        \"\"\"Creates column ranks and interpolates them.\n\n        Parameters\n        ----------\n        ip_frac : float, optional\n            pct of NaNs to interpolate by 'self.method' rest will be backfilled, by default 0.1\n\n        Returns\n        -------\n        pd.DataFrame\n            Interpolated column ranks\n        \"\"\"\n\n        df_ranks = self.raw_data.rank(axis=1, method=\"first\", ascending=False).clip(\n            upper=self.n_bars + 1\n        )\n\n        df_ranks = self.n_bars + 1 - df_ranks\n        df_ranks.replace(np.nan, -1, inplace=True)\n\n        df_ranks = df_ranks.reindex(self.data.index)\n        # calculate the no of nans in each interval\n        # see https://stackoverflow.com/questions/69951782/pandas-interpolate-with-condition\n        if ip_frac != 0:\n            t = df_ranks.iloc[:, 0]\n            # total length\n            x = len(t)\n            # no of nans\n            z = t.isna().sum()\n            # no of non-nans\n            y = x - z\n            # no of nans in each interval\n            w = z / (y - 1)\n            if w * ip_frac > 0:\n                df_ranks = df_ranks.interpolate(\n                    method=self.ip_fill_method, limit=int(np.ceil(w * ip_frac))\n                )\n        df_ranks = df_ranks.interpolate()\n        return df_ranks\n\n    def get_top_cols(self) -> list[str]:\n        \"\"\"Selects columns where column_rank < n_bars in any timestamp\n\n        Returns\n        -------\n        list[str]\n            List of columns that will appear in the animation at least once\n        \"\"\"\n        top_cols = self.df_ranks.max(axis=0)\n        top_cols = top_cols[top_cols >= 1]\n        return list(top_cols.index)\n\n\nclass LineDatafier(BaseDatafier):\n    def __init__(\n        self, data, time_format: str, ip_freq: str, ip_method: str = \"linear\"\n    ) -> None:\n        \"\"\"Contains data preparation modules, which includes interpolation.\n        data should be in this format where time is set to index\n        ```\n            Example:\n            >>> time  col1 col2 col3 ...\n            >>> 2012   1    0    2\n            >>> 2013   2    3    1\n        ```\n        Parameters\n        ----------\n        data : pd.DataFrame\n            The data to be prepared, should be in this format where time is set to index\n        time_format : str\n            Index datetime format\n        ip_freq : str\n            Interpolation frequency\n        \"\"\"\n        super().__init__(data, time_format, ip_freq, ip_method)\n        self.data = self.prepare_data()\n\n    def prepare_data(self) -> pd.DataFrame:\n        \"\"\"Creates interpolated data\n\n        Returns\n        -------\n        pd.DataFrame\n            Interpolated data values\n        \"\"\"\n        return self.interpolate_even(self.raw_data, self.ip_freq, self.ip_method)\n"
  },
  {
    "path": "src/pynimate/lineplot.py",
    "content": "from typing import Callable, Union\n\nimport matplotlib.dates as mdates\nimport pandas as pd\n\nfrom pynimate.baseplot import Baseplot\nfrom pynimate.datafier import LineDatafier\nfrom pynimate.utils import human_readable\n\n\nclass Lineplot(Baseplot):\n    def __init__(\n        self,\n        datafier: LineDatafier,\n        palettes: list[str] = [\"viridis\"],\n        post_update: Callable[[__qualname__, int], None] = lambda self, i: None,\n        line_annots: bool = True,\n        legend: bool = True,\n        scatter_markers: bool = True,\n        line_head: bool = True,\n        fixed_xlim: bool = True,\n        fixed_ylim: bool = False,\n        xticks: bool = True,\n        yticks: bool = True,\n        grid: bool = True,\n    ) -> None:\n        \"\"\"Lineplot animation module that requires a valid time index.The data\n        should be in this format where time is set to index\n            ```\n                Example:\n                >>> time  col1 col2 col3 ...\n                >>> 2012   1    0    2\n                >>> 2013   2    3    1\n            ```\n\n        Parameters\n        ----------\n        datafier : LineDatafier\n            The datafier instance\n        palettes : list[str], optional\n            List of color palettes to generate line / marker colors, by default [\"viridis\"]\n        post_update : Callable[[__qualname__, int], None], optional\n            callback function for additional customization, by default lambda self, i: None\n        line_annots : bool, optional\n            Sets line annotations leading the lines, by default True\n        legend : bool, optional\n            Sets plot legend, by default True\n        scatter_markers : bool, optional\n            Enables line markers / Scatterplot, by default True\n        line_head : bool, optional\n            Enables markers leading every line, by default True\n        fixed_xlim : bool, optional\n            If False xlim will gradually change in every frame, by default True\n        fixed_ylim : bool, optional\n            If False ylim will gradually change in every frame, by default False\n        xticks : bool, optional\n            Sets xticks, by default True\n        yticks : bool, optional\n            Sets yticks, by default True\n        grid : bool, optional\n            Sets xgrid, by default True\n        \"\"\"\n        super().__init__(\n            datafier,\n            palettes,\n            post_update,\n            fixed_xlim,\n            fixed_ylim,\n            xticks,\n            yticks,\n            grid,\n        )\n        self.line_annots = line_annots\n        self.legend = legend\n        self.line_head = line_head\n        self.scatter_markers = scatter_markers\n        self.column_linestyles = {col: \"solid\" for col in self.column_colors.keys()}\n        self.set_line()\n        self.set_line_annots()\n        self.set_line_head()\n        self.set_marker()\n        self.set_legend()\n\n    @classmethod\n    def from_df(\n        cls,\n        data: pd.DataFrame,\n        time_format: str,\n        ip_freq: str,\n        palettes: list[str] = [\"viridis\"],\n        post_update: Callable[[__qualname__, int], None] = lambda self, i: None,\n        line_annots: bool = True,\n        legend: bool = True,\n        scatter_markers: bool = True,\n        line_head: bool = True,\n        fixed_xlim: bool = True,\n        fixed_ylim: bool = False,\n        xticks: bool = True,\n        yticks: bool = True,\n        grid: bool = True,\n    ):\n        return cls(\n            LineDatafier(data, time_format, ip_freq),\n            palettes,\n            post_update,\n            line_annots,\n            legend,\n            scatter_markers,\n            line_head,\n            fixed_xlim,\n            fixed_ylim,\n            xticks,\n            yticks,\n            grid,\n        )\n\n    def set_xylim(self, xlim: list[float] = [], ylim: list[float] = []):\n        \"\"\"Sets xlim and ylim\n\n        Parameters\n        ----------\n        xlim : list[float], optional\n            x axis limits in this format [min, max], by default [min date, max date]\n        ylim : list[float], optional\n            y axis limits in this format [min, max], by default [min y val, max y val]\n        \"\"\"\n        super().set_xylim(xlim, ylim)\n        if xlim == []:\n            self.max_date = self.datafier.data.index.max()\n            self.min_date = self.datafier.data.index.min()\n            xlim = [self.min_date, self.max_date]\n        self.xlim = xlim\n        if ylim == []:\n            self.total_max = self.datafier.data.max().max()\n            self.total_min = self.datafier.data.min().min()\n            ylim = [self.total_min, self.total_max]\n        self.ylim = ylim\n\n    def set_column_linestyles(\n        self, linestyles: Union[str, list[str], dict[str, str]]\n    ) -> None:\n        \"\"\"Sets column linestyles. If linestyles is a list, length of linestyles should be equal\n        to `len(self.column_linestyles)`\n\n        Parameters\n        ----------\n        linestyles : Union[str, list[str], dict[str, str]]\n            Single linestyle str or list of linestyles or dict of column to linestyle mapping\n        \"\"\"\n        self.column_linestyles = self.set_column_decorations(\n            linestyles, self.column_linestyles\n        )\n\n    def set_line(self, **kwargs) -> None:\n        \"\"\"Sets line properties, addition kwargs are passed to `ax.plot(**kwargs)`\"\"\"\n        assert (\n            \"linestyle\" not in kwargs\n        ), \"Use 'set_column_linestyle()' for linestyle customization\"\n\n        self.line_props = kwargs\n\n    def set_line_annots(\n        self,\n        callback: Callable[\n            [str, float], str\n        ] = lambda col, val: f\"{col}({human_readable(val)})\",\n        size: float = 10,\n        **kwargs,\n    ) -> None:\n        \"\"\"Sets line annotation properties, additional kwargs are passed to `ax.text(**kwargs)`.\n        (Note these annotations are the texts leading the lines)\n\n        Parameters\n        ----------\n        callback : Callable[ [str, float], str ], optional\n            Callback function for customizing the text, by default lambda col, val: f\"{col}({human_readable(val)})\"\n        size : float, optional\n            Text size, by default 10\n        \"\"\"\n        kwargs = {\"size\": size, **kwargs}\n        self.line_annot_props = {\"callback\": callback, \"kwargs\": kwargs}\n\n    def set_line_head(self, edgecolors: Union[str, list[str]] = \"k\", **kwargs) -> None:\n        \"\"\"Sets the line head(leading marker) properites, additional kwargs are passed to `ax.scatter(**kwargs)`\n\n        Parameters\n        ----------\n        edgecolors : Union[str, list[str]], optional\n            Edge color of the point, by default \"k\"\n        \"\"\"\n        self.line_head_props = {\"edgecolors\": edgecolors, **kwargs}\n\n    def set_marker(self, **kwargs) -> None:\n        \"\"\"Sets the line marker (scatterplot) properties, kwargs are passed to `ax.scatter(**kwargs)`\"\"\"\n        self.marker_props = kwargs\n\n    def set_legend(self, **kwargs) -> None:\n        \"\"\"Sets legend properties, kwargs are passed to `ax.legend(**kwargs)`\"\"\"\n        self.legend_props = kwargs\n\n    def update(self, i) -> None:\n        self.ax.clear()\n        for col in self.dfr.data.columns:\n            self.X, self.Y = self.dfr.data.index, self.dfr.data[col]\n            self.Y_og = self.dfr.expanded[col]\n            self.ax.plot(\n                self.X[: i + 1],\n                self.Y[: i + 1],\n                color=self.column_colors[col],\n                linestyle=self.column_linestyles[col],\n                label=col,\n                **self.line_props,\n            )\n            if self.scatter_markers:\n                self.ax.scatter(\n                    self.X[:i],\n                    self.Y_og[:i],\n                    color=self.column_colors[col],\n                    **self.marker_props,\n                )\n\n            if self.line_annots:\n                self.annot = self.ax.annotate(\n                    self.line_annot_props[\"callback\"](col, self.Y[i]),\n                    (mdates.date2num(self.X[i]), self.Y[i]),\n                    **self.line_annot_props[\"kwargs\"],\n                )\n\n            if self.legend:\n                self.ax.legend(**self.legend_props)\n\n            if self.line_head:\n                self.ax.scatter(\n                    self.X[i : i + 1],\n                    self.Y[i : i + 1],\n                    color=self.column_colors[col],\n                    **self.line_head_props,\n                )\n        super().update(i)\n"
  },
  {
    "path": "src/pynimate/utils.py",
    "content": "from typing import Union\n\nimport numpy as np\n\n\ndef human_readable(num: Union[float, int], precision: int = 2, *args) -> str:\n    \"\"\"Converts large numeric values(>10^3) into human readable strings.\n    `ie. 1000 -> 1k`,\n    `1000000 -> 1M`, etc.\n\n    Parameters\n    ----------\n    num : Union[float, int]\n        Numeric value\n    precision : int, optional\n        Rounding precision, by default 2\n\n    Returns\n    -------\n    str\n        Human readable numeric string\n    \"\"\"\n    if num == np.nan:\n        return \"\"\n    magnitude = 0\n    while abs(num) >= 1000:\n        magnitude += 1\n        num /= 1000.0\n    return f'{np.round(num, precision)}{[\"\", \"K\", \"M\", \"B\", \"T\", \"Q\"][magnitude]}'\n"
  },
  {
    "path": "tests/__init__.py",
    "content": "import sys\nsys.path.append('.')"
  },
  {
    "path": "tests/conftest.py",
    "content": "import os\n\nimport pandas as pd\nimport pytest\n\nfrom pynimate.datafier import BarDatafier, BaseDatafier, LineDatafier\n\ndir_path = os.path.dirname(os.path.realpath(__file__))\n\n\n@pytest.fixture\ndef sample_data1() -> pd.DataFrame:\n    return pd.DataFrame(\n        {\n            \"time\": [\"1960-01-01\", \"1961-01-01\", \"1962-01-01\"],\n            \"Afghanistan\": [1, 2, 3],\n            \"Angola\": [2, 3, 4],\n            \"Albania\": [1, 2, 5],\n            \"USA\": [5, 3, 4],\n            \"Argentina\": [1, 4, 5],\n        }\n    ).set_index(\"time\")\n\n\n@pytest.fixture\ndef sample_data2() -> pd.DataFrame:\n    return pd.DataFrame(\n        {\n            \"time\": [\"2012\", \"2013\", \"2014\"],\n            \"col1\": [1, 2, 3],\n            \"col2\": [3, 2, 1],\n        }\n    ).set_index(\"time\")\n\n\n@pytest.fixture\ndef sample_data1_basedfr(sample_data1) -> BaseDatafier:\n    return BaseDatafier(sample_data1, \"%Y-%m-%d\", \"3MS\")\n\n\n@pytest.fixture\ndef sample_data1_bardfr(sample_data1) -> BarDatafier:\n    return BarDatafier(sample_data1, \"%Y-%m-%d\", \"3MS\")\n\n\n@pytest.fixture\ndef sample_data1_linedfr(sample_data1) -> BarDatafier:\n    return LineDatafier(sample_data1, \"%Y-%m-%d\", \"3MS\")\n\n\n@pytest.fixture\ndef map_data() -> pd.DataFrame:\n    map_data = pd.read_csv(dir_path + \"/data/map.csv\").set_index(\"time\")\n    return map_data\n"
  },
  {
    "path": "tests/data/map.csv",
    "content": "time,Afghanistan,Angola,Albania,United Arab Emirates,Argentina,Armenia,Australia,Austria,Azerbaijan,Burundi,Belgium,Benin,Burkina Faso,Bangladesh,Bulgaria,Bahamas,Bosnia and Herzegovina,Belarus,Belize,Bolivia,Brazil,Brunei Darussalam,Bhutan,Botswana,Central African Republic,Canada,Switzerland,Chile,China,Cote d'Ivoire,Cameroon,\"Congo, Dem. Rep.\",\"Congo, Rep.\",Colombia,Costa Rica,Cuba,Cyprus,Czech Republic,Germany,Djibouti,Denmark,Dominican Republic,Algeria,Ecuador,Egypt,Eritrea,Spain,Estonia,Ethiopia,Finland,Fiji,France,Gabon,United Kingdom,Georgia,Ghana,Guinea,Gambia,Guinea-Bissau,Equatorial Guinea,Greece,Greenland,Guatemala,Guyana,Honduras,Croatia,Haiti,Hungary,Indonesia,India,Ireland,Iran,Iraq,Iceland,Israel,Italy,Jamaica,Jordan,Japan,Kazakhstan,Kenya,Kyrgyz Republic,Cambodia,South Korea,Kuwait,Lao PDR,Lebanon,Liberia,Libya,Sri Lanka,Lesotho,Lithuania,Luxembourg,Latvia,Morocco,Moldova,Madagascar,Mexico,North Macedonia,Mali,Myanmar,Montenegro,Mongolia,Mozambique,Mauritania,Malawi,Malaysia,Namibia,New Caledonia,Niger,Nigeria,Nicaragua,Netherlands,Norway,Nepal,New Zealand,Oman,Pakistan,Panama,Peru,Philippines,Papua New Guinea,Poland,Puerto Rico,North Korea,Portugal,Paraguay,West Bank and Gaza,Qatar,Romania,Russian Federation,Rwanda,Saudi Arabia,Sudan,Senegal,Solomon Islands,Sierra Leone,El Salvador,Somalia,Serbia,South Sudan,Suriname,Slovak Republic,Slovenia,Sweden,Eswatini,Syrian Arab Republic,Chad,Togo,Thailand,Tajikistan,Turkmenistan,Timor-Leste,Trinidad and Tobago,Tunisia,Turkey,Tanzania,Uganda,Ukraine,Uruguay,USA,Uzbekistan,Venezuela,Vietnam,Vanuatu,\"Yemen, Rep.\",South Africa,Zambia,Zimbabwe\n1960,,,,,,,459760073.6,91559097.96,,,383220247.4,1301005.322,1268378.23,,,,,,,,382729752.1,,,,,1702442711.0,200093758.2,126791042.6,,,,,,75960813.87,0.0,,,,2884517772.0,,161137605.4,38300000.0,,22400000.0,,,232839815.9,,15335262.65,89557618.81,,3881219690.0,,4587798165.0,,20821777.35,,,,,170327798.1,,12084076.43,,3920000.0,,,,,681765681.8,25800590.11,98679867.99,118726952.5,0.0,190277777.8,1009308856.0,,56139977.54,480555555.6,,,,,275643564.4,,,22906905.2,,5571997.771,16653016.65,,,5260312.876,,41596762.37,,1604193.589,84000000.0,,,89512589.51,,,,,,51286741.89,,,,23379990.65,,454719432.1,148119940.8,,101219676.1,,208845208.8,,49085687.49,123821340.0,,3550000000.0,,,105157457.3,7088541.594,,,740833333.3,,,140888888.9,18667432.51,,,,4384473.695,,,,,,,526848900.4,,90223463.69,,,62825161.22,,,,,15952380.95,468810916.2,,,,,45380000000.0,,234357740.4,,,,69999972.0,,\n1961,,,,,,,470960075.4,91029854.62,,,391218827.4,2173203.947,1643154.204,,,,,,,4935417.964,342339720.8,,,,,1677820881.0,237368366.9,160930923.5,,,,,,97313432.84,0.0,,,,3266495653.0,,170837712.9,36300000.0,,18700000.0,,,239348772.1,,18555265.31,105350974.8,,4131003787.0,,4747398101.0,,27454210.3,,,,,167762365.8,,12084076.43,,3830000.0,,,,,748388248.4,27564733.02,105940594.1,125481949.8,0.0,241805555.6,1062907313.0,,55509977.8,492361111.1,,,,,157061350.1,,,27837147.81,,7167997.133,17083517.08,,,5800866.499,,48275957.47,,8482781.25,86400000.0,,3922368.099,85617085.62,,,,,,42466728.95,,,,28279988.69,,551530519.8,165059934.0,,96678751.22,,210105210.1,,63020431.3,128712871.3,,4025000000.0,,,171194666.8,7187461.316,,,794666666.7,,,71555555.56,20505456.63,,,1930599.228,4441787.077,3160000.0,,,,,,564736401.6,,90223463.69,,326999.9185,58741404.86,,,,,18571428.57,301330376.9,,,,,47808000000.0,,114632682.9,,,,113749954.5,,\n1962,,,,,305162407.2,,489440078.3,100026991.4,,8420000.0,422220787.9,2734537.618,4901760.716,,,,,,,5195618.571,387449035.5,,,,,1671313753.0,273728261.2,162626224.4,,8766845.976,,,,153596253.4,0.0,,,,4308248214.0,,224550248.0,38000000.0,,18300000.0,249697766.8,,308791693.5,,20185391.65,154403280.6,,4493323590.0,,5005697998.0,,27944464.05,,,,,170034222.7,,11954140.13,,3830000.0,,,,,1065436065.0,29163487.53,109900990.1,135064946.0,0.0,210604174.5,1222013656.0,,60409975.84,538194444.4,,,,,186153846.2,,,40876824.5,,16687993.32,15849765.85,,,7099970.149,,53848540.36,,9179552.203,99200000.0,,4342608.994,90704340.7,,,,,,43773397.53,,,,38639984.54,,603866851.7,191939923.2,,96323106.14,,200340200.3,,66368381.8,82889601.24,,4375000000.0,,,199785222.2,8276810.921,,,902000000.0,,,84222222.22,24842044.8,,,1983799.206,6218501.908,3700000.0,,,,,,636258725.2,,149593495.9,,714244.9003,80303734.18,,,,,14285714.29,330376940.1,,727985.4403,,,52381000000.0,,203900682.8,,,,186199925.5,,\n1963,,,,,242219771.2,,553280088.5,125959915.1,,1012000.0,444601321.5,2963071.799,5281287.753,,,,,,,6404292.358,441999606.2,,,,,1610091701.0,294995369.3,152917455.4,,8064779.443,,58217821.78,,170000000.0,0.0,,,,4981004024.0,,239028020.3,39000000.0,66436300.15,17100000.0,335799697.8,,316520311.1,,27289522.51,128576498.4,,4628060852.0,,5196797921.0,,31096095.34,,,,,179495712.8,,14812738.85,,3820000.0,,,,,1795449295.0,30210947.39,128712871.3,163218934.7,0.0,259250864.2,1463283724.0,,61879975.25,629861111.1,,1861999.255,,,185384615.4,,,33900603.43,,18675992.53,13917763.92,,,6962653.392,,74893933.2,,8956747.538,112000000.0,,4375224.475,100322350.3,,,,,,60760089.11,,,,45499981.8,,637373073.3,205099918.0,,100042547.6,,219660219.7,,97315436.24,94235401.82,,4950000000.0,,,199087891.6,9208934.811,,,904833333.3,,,113777777.8,28144744.4,,,2155999.138,6103875.145,4480000.0,,,,,,697922566.5,,,,1134619.78,85501269.8,,,,,15238095.24,350000000.0,,2729945.401,,,52295000000.0,,245397307.8,,,,188999924.4,,\n1964,,,,,245740498.0,,655760104.9,164594679.0,,1162000.0,497059226.9,3803662.454,5358593.135,,,,,,,,354227857.1,,,,,1657457283.0,329525835.0,149950377.7,,11190603.48,,49818181.82,,190000000.0,0.0,,,,4888248899.0,,255387903.0,42500000.0,99856999.91,20600000.0,448499596.4,,386820000.7,,36140000.0,139910553.9,,4917956554.0,,5508997796.0,,33302237.24,,,,,188207553.1,,12993630.57,,5850000.0,,,,,1986654487.0,36054670.79,155445544.6,185198925.9,0.0,278584261.9,1586666708.0,,61879975.25,718055555.6,,5879997.648,,,137481470.4,,,38065368.32,,21475991.41,13938763.94,,,9278159.213,,69993222.0,,9455019.789,120000000.0,,5174939.905,97912597.91,,,,,,84606790.76,,,,54319978.27,,735383641.4,219799912.1,,123402030.6,,257880257.9,,120432513.0,93605898.71,,5200000000.0,,,224400993.0,9815376.859,,,949166666.7,,,123555555.6,41872487.08,,,2353399.059,5724173.991,5420000.0,,,,,,758619889.8,,112041884.8,,3383300.616,87235576.92,,,,,17478991.6,380897803.7,,5487890.242,,,51213000000.0,,200459770.1,,,,271599891.4,,\n1965,,,,,252407602.9,,787360126.0,142895702.0,,2153481.481,500722082.8,3994923.713,3509330.33,,,,,,,,632869026.5,,,,,1574704540.0,343475228.4,168215772.4,,12902909.89,,78909090.91,,185202864.0,0.0,,,,4978559240.0,,285791224.7,40200000.0,105528391.4,23800000.0,515199536.3,,439425746.0,,42900000.0,149572371.7,,5124506743.0,,5791097684.0,,35578415.39,10492201.74,,,,209674799.6,,18580891.72,,6250000.0,,,,,2125989626.0,39086791.42,200000000.0,225742909.7,0.0,313917713.1,1719942315.0,,62929974.83,821388888.9,,9897996.041,,,132131636.1,,,44598531.83,2700000.0,29119988.35,14474264.47,,,9520198.149,,63175700.38,,10710827.9,119200000.0,,4647822.379,107241857.2,,,,,1771001.771,118580173.9,,,,65939973.62,,749993912.4,265579893.8,,126982427.6,,439635439.6,,132736763.6,93114395.13,,5525000000.0,,,232350562.0,11679624.64,,,1034000000.0,,,177777777.8,56375646.18,,,2505998.998,6483576.298,5170000.0,,,,,,844543330.0,,118062827.2,,3362428.13,94266826.92,,,,,12761904.76,422676991.2,,10737785.24,,,51827000000.0,,227272727.3,,,,289449884.2,,15600000.0\n1966,,,,,279225436.3,,986720157.9,167770139.0,,2286857.143,563377895.4,3724387.206,3907553.79,,,,,,,,718216574.6,,,,,1614422827.0,378234372.7,186697964.8,,13269401.41,,78363636.36,,172592592.6,0.0,,,,5063637742.0,,301137663.3,37200000.0,104515642.9,22900000.0,481849566.3,,560943076.5,,43420000.0,152916847.1,,5414601741.0,,5984997606.0,,47344505.52,13895077.98,,,,238979294.9,,19100636.94,,6500000.0,,,,,1661154906.0,38314978.9,256105610.6,234996906.0,0.0,375501251.7,1904604599.0,,76089969.56,932430555.6,,13047994.78,,,176901786.3,,,51425377.31,2800000.0,58519976.59,15282765.28,,,9923596.376,,67938085.05,,11342782.95,130400000.0,,4636149.757,105456855.5,,,,,1848001.848,148633551.3,,,,55719977.71,,770691796.3,272579891.0,,148221481.3,,549675549.7,,145041014.2,109615384.6,,5975000000.0,,,257175532.1,13588794.05,,,1076000000.0,,,300444444.4,50315910.4,,,2539598.984,6591038.889,6500000.0,,,,,,906980385.5,,102356020.9,,2889961.657,105540865.4,,,,,13714285.71,442035398.2,,14265714.69,,,63572000000.0,,238636363.6,,,,324449870.2,,16950000.0\n1967,,,,,251930719.1,,1197840192.0,176767275.8,,2376000.0,607918707.2,3910553.209,3695106.93,,,,,,,,746139163.6,,,,,1775500366.0,383265301.5,182705341.3,,14711322.31,,45907648.68,,178541885.0,0.0,,,,5352122317.0,,323292901.4,35800000.0,99249350.83,25300000.0,508299542.5,,545917155.9,,37000000.0,146661680.3,,5856108417.0,3008117.853,6200583812.0,,,,,,,313035616.3,,21179617.83,,6800000.0,,,,,1487733333.0,39693241.93,331023102.3,234541906.2,0.0,605514168.1,1928786564.0,,104719958.1,1039027778.0,,15987993.6,,,218100895.7,,35544791.67,57730955.03,3050000.0,79519968.19,15711432.16,,,8229323.824,,70348918.78,,12112471.79,133600000.0,,5081280.157,102039102.0,,,,,2133370.892,143406877.0,,,,239959904.0,,883921396.7,293579882.6,,149591230.9,,478275478.3,,243980653.5,129487179.5,,6275000000.0,,,333045103.3,14936443.05,,,1123833333.0,,,336222222.2,52268811.03,,,2883153.573,6777307.379,7530000.0,,,,,,921961412.7,,118586387.4,,3105678.432,126346153.8,,,,,15428571.43,508407079.6,14629994.15,16841663.17,,,75448000000.0,,270454545.5,,,,373099850.8,,19000000.0\n1968,,,,,337142857.1,,1321600211.0,182059709.2,,2590857.143,646381114.5,4293821.825,3760628.522,,,,,,,11583123.79,755307566.7,,,,,1797265817.0,373889479.6,173781024.3,,15305071.4,,50479041.92,,141184847.8,0.0,,,,4827481334.0,,345466666.7,37300000.0,99249350.83,29300000.0,648599416.3,,668753624.8,,34660000.0,150060024.0,,6129940876.0,2989113.97,5563195549.0,,44271216.36,14178651.0,,,,366771882.7,,20400000.0,,7050000.0,,,150166666.7,,1586866667.0,37141485.43,437293729.4,291437883.4,0.0,690001971.4,1991165044.0,,127749948.9,1168194444.0,,16365993.45,,,278696524.4,,35461875.0,65572316.45,3050000.0,95479961.81,14305226.32,,,7479003.122,,90900288.31,,13044200.39,148800000.0,,5251146.164,104590604.6,,,,,1881000.752,148306884.2,,,,369039852.4,6891062.971,905836803.3,321999871.2,,135520021.7,,492555492.6,,113178294.6,153846153.8,,7225000000.0,,,371893392.1,16621004.29,,,1255833333.0,,,338666666.7,57725445.15,,,2658001.063,6619695.579,8340000.0,,,,,,941001815.1,,190052356.0,,3288025.367,154639423.1,,,,5087500.0,17523809.52,570685840.7,16239993.5,19942601.15,,,80732000000.0,,272727272.7,,,,399699840.1,,30600000.0\n1969,,,,,442857142.9,,1314880210.0,193173819.4,,3337142.857,675078864.4,4015987.013,4023680.475,,,,,,,12254609.23,816622811.0,,,,,1770108751.0,409105981.1,179980922.7,,16156269.59,,72455089.82,,131638962.8,0.0,,,,5471706536.0,,352000000.0,35600000.0,99249350.83,39700000.0,888949199.9,,805713226.3,,34420000.0,140291965.8,,5909705121.0,4350652.598,5544595564.0,,49026817.67,14705286.61,,,,425403589.9,,17600000.0,,7200000.0,,,173333333.3,,1691433333.0,41630596.27,566006600.7,375997849.6,0.0,872002491.4,2003805617.0,,125859949.7,1335416667.0,,15749993.7,,,347028223.8,,36133958.33,65138973.39,3050000.0,143079942.8,15863429.19,,,7817857.633,,84972008.64,,13014516.19,180000000.0,,5673928.012,114418614.4,,,,,1959000.784,143733544.1,,,,684459726.2,6988120.196,1017240120.0,350279859.9,,147560023.6,,552720552.7,,128940568.5,189230769.2,,7975000000.0,,,374919807.0,17856349.21,,,1380000000.0,,,429333333.3,87018954.62,,,3297601.319,7508052.995,9000000.0,,,,,,1017260076.0,,194502617.8,,3435130.654,184903846.2,,,,5262500.0,16952380.95,596792035.4,20089991.96,22861542.77,,,81443000000.0,,263636363.6,,,,425599829.8,,42350000.0\n1970,2939585.501,,,,445713893.9,,1277360204.0,199524739.5,,,747755088.9,4099087.202,4185916.94,,,,,,,16787135.93,1026234374.0,,,,,1889157918.0,436090053.6,388383950.3,,17727738.12,20339866.07,102395209.6,13100436.68,162662459.1,0.0,,,,6167271406.0,,395600000.0,35900000.0,98844251.44,30700000.0,1092499017.0,,859146961.8,,34540000.0,152891345.2,413396.8127,5882387677.0,4638155.158,6074395140.0,,46918664.51,15069880.49,,,,473596990.5,,32300000.0,,9900000.0,,,223333333.3,,1832966667.0,50986848.32,620132013.2,401050839.6,0.0,1259646456.0,2216771793.0,,109759956.1,1575347222.0,,17023993.19,,,386403740.4,68739972.5,38045833.33,64546127.54,3550000.0,242479903.0,21042038.72,,,8310003.469,,88924195.09,,12134982.78,176800000.0,,6150439.756,122781872.8,,,,,2055000.822,199593626.1,,,,662339735.1,8346921.345,1079942533.0,388359844.7,5185185.185,171920027.5,,635250635.3,,218087855.3,155055171.2,,8525000000.0,,,436103595.4,19316666.67,,,1542000000.0,,,471555555.6,108271108.6,,,3986401.595,7135516.014,11200000.0,,,,,,1118164544.0,,199738219.9,,3650466.891,217223557.7,,,,6200000.0,22476190.48,564858542.6,29539988.18,26627467.45,,,79846000000.0,,272727272.7,,,,417899832.8,,45950000.0\n1971,,,,,519719484.2,,1331754789.0,209277606.7,,2628571.429,828721558.4,4285361.496,4343468.092,,,,,,,15863843.46,1075071453.0,,,,,2077659711.0,511387689.4,651589862.9,,23968971.08,21501256.56,101796407.2,13749473.41,263898574.6,0.0,,,,7255896950.0,,430225386.9,36600000.0,99946261.07,29700000.0,1266148860.0,,900614349.2,,36134238.09,177615098.1,535616.7685,6300175574.0,5498336.699,6723936533.0,,41139332.3,26327764.42,,,,515997642.0,,22200000.0,,11400000.0,,,225670995.1,,2255256983.0,63486922.17,402310231.0,426263340.2,0.0,1270657787.0,2648079366.0,,108639956.5,1896540416.0,,22077991.17,,,460899849.3,73434840.97,39061458.33,66920095.55,4050000.0,243035871.6,32258064.52,,,9047009.782,,111288010.2,,12755677.36,191200000.0,,6323435.839,127758749.5,,,,,2343860.95,228027756.5,,,,639259541.9,8443978.57,1249389090.0,428293444.8,5891358.025,180841169.8,29065079.3,739410739.4,,247286821.7,161310133.7,,9452062887.0,,,518294924.4,20750000.0,,,1618333333.0,,,587274311.7,109994256.2,,,3770637.41,8516583.63,11400000.0,,,,,,1238804427.0,,176963350.8,,4183674.952,262656250.0,,,,8620776.959,24860541.92,570873159.5,42559982.98,52687946.24,,,74862000000.0,,352272727.3,,,,485866527.2,,49850000.0\n1972,,,,,766000000.0,,1484443745.0,249425547.4,,3600000.0,1026588091.0,4904216.992,4947862.936,,,,,,,20700640.94,1195501488.0,,,,,2233737031.0,601426981.7,745661188.8,,31742504.8,24894059.39,94011976.05,12744615.68,170587589.6,0.0,,,,9006765501.0,,487244020.6,39500000.0,109942841.3,37300000.0,1066049041.0,,1256164586.0,,41043478.26,220831905.3,787703.1062,7531246912.0,6673861.634,7860461050.0,,30202525.76,31711404.23,,,,573692101.5,,24000000.0,,15449922.75,,,231632283.7,,2497244706.0,84039646.65,371947194.7,466113288.1,0.0,1461373750.0,3289362465.0,,129359948.3,2567519428.0,,29735988.11,,,531950093.4,90743549.91,20254568.13,106204437.0,4050000.0,202768227.1,30283133.9,,,11731387.88,,140446991.6,,16129256.25,242400000.0,,8332407.51,117181275.2,,,,,2697870.896,251103009.0,,,,904095638.4,10967466.42,1522236183.0,491632831.2,6503703.704,206172013.2,54524419.38,478207381.8,,276485788.1,196259386.0,,10054347826.0,,,593121489.2,28851587.3,,,1824593128.0,,,930574823.6,107983917.3,,,4234610.668,11140612.1,13200000.0,,,,,,1458082236.0,,260209424.1,,5126414.525,284086538.5,,,,9121523.151,31650677.14,703957597.2,53689677.86,64944701.11,,51429281.91,77639000000.0,,404651162.8,,,,492386546.2,,58450000.0\n1973,3341271.551,,,,1294000000.0,,1855729307.0,328898821.4,,5923067.599,1296519775.0,6698401.446,6079259.183,48606800.13,,,,,,21129139.97,1512670977.0,,,,,2363060955.0,764969998.4,1005919720.0,,28713844.11,31636823.71,102395209.6,19426710.16,173879934.0,0.0,,,,11938703823.0,,581866269.9,42000000.0,136757097.8,49200000.0,1243856105.0,,1521319435.0,,48433591.42,276967793.9,931727.0694,9496156577.0,9421730.099,8448664898.0,,41052242.84,36058910.7,,,,674802452.2,,23400000.0,5032808.212,15950000.0,,,263447030.8,,2529921054.0,98307831.83,480857166.9,665185289.0,0.0,2574504910.0,3638240139.0,,150652370.4,3374561100.0,,37319917.16,,,544785374.6,136560430.5,21220297.97,103815507.2,3750000.0,298307480.0,25146427.18,,,15421205.92,,185783993.8,,20346496.12,300800000.0,,10974072.3,152452317.5,,,,,4711557.475,296726189.3,,,,1020223592.0,10433752.95,1917119276.0,607891665.2,7152747.935,246331493.0,89826506.52,477624634.2,,364341085.3,301201252.8,,12059701493.0,,,682681692.2,30915873.02,,,545381021.8,,9365839.708,1565589936.0,113153360.1,,,5022404.825,12475644.13,16100000.0,,,,,,1702215353.0,,388674557.0,,6873376.434,312408499.1,,,,8944886.23,38188218.1,861625441.7,77916010.24,64872640.27,,112465598.2,78358000000.0,,420930232.6,,,,752926325.6,,86900000.0\n1974,3581366.351,,,,1626000000.0,,2127274763.0,422543505.8,,7682539.683,1482318436.0,6447726.47,6269084.564,72298235.04,,,,,,39766636.07,1790114213.0,,,,,2809465529.0,888478644.0,1103190481.0,,41129183.02,34625371.31,189221556.9,24137429.63,194904101.8,0.0,,,,13773713249.0,,732087483.0,57600000.0,260168630.0,74800000.0,1852779425.0,,1968178718.0,,74758454.11,308807797.1,1353022.08,9954624929.0,10494173.37,9346449845.0,,64121526.39,,,,,1049955703.0,,28400000.0,11136757.59,16900000.0,,,308005578.3,698192771.1,2895415720.0,111205418.9,3877862663.0,1427457784.0,0.0,3475602770.0,3890003394.0,,163307378.0,3962157887.0,,46763683.97,,,852963864.0,384614072.6,,179142179.6,4550000.0,431682379.0,28417847.61,,,18227348.89,,241889161.2,,25882465.36,407200000.0,,11632496.21,159999341.9,,,,,5304902.622,397163356.3,,,,1351141235.0,14995341.25,2285358296.0,710867536.4,8446969.697,291444123.1,255573248.4,609191919.2,,454780361.8,521518532.3,,13162650602.0,,,988203732.2,31434126.98,,,565500000.0,,7786746.398,,111430212.5,,,6779970.098,13350320.28,21400000.0,,,,,,1855084673.0,,537380924.3,,8097048.254,363887784.6,,,,8584035.885,46505447.78,1136704698.0,120044738.2,80157512.31,,187557473.6,85906000000.0,,602325581.4,,,,1102318401.0,,118550000.0\n1975,4203664.569,,,,798359535.2,,2268707674.0,546724394.0,,8533333.333,1927662478.0,7857666.124,18062366.73,80830559.47,,,,,,58304466.42,2141126693.0,,,,,3180915490.0,1032046117.0,486720076.9,,45886157.16,46770377.91,173652694.6,33493068.55,227942151.2,0.0,,,,15278274626.0,,931928334.6,65900000.0,332252159.2,102000000.0,1926890602.0,,2108232941.0,,125072463.8,433161415.7,2056253.749,13030408263.0,16844521.8,11543753775.0,,78825105.71,,,,,1433217345.0,,44900000.0,32436379.69,21400000.0,,,366147086.5,1063855422.0,3323646801.0,154362392.7,5951043742.0,1590171817.0,0.0,3758315381.0,4217069829.0,,180742482.6,4534902135.0,,54090933.23,,,1030991736.0,,,165944100.3,5500000.0,287788252.7,30478781.02,,,22704189.64,,413326127.9,,30189630.07,504800000.0,,19130897.33,138923723.2,,,,,9362342.027,440725547.0,,,7330399.929,3028584797.0,18537929.96,2814545011.0,912771143.3,10529138.04,292259947.4,523306311.5,771161616.2,,710909865.5,,7933048.215,14337349398.0,,,778693990.9,43488888.89,,,635500000.0,,9319735.189,,119471568.1,,,6526389.844,15652099.64,23100000.0,,,,,,2232315959.0,,887837837.8,,11114584.74,416034898.2,,,,10703751.5,75323106.3,2284986255.0,138323476.0,86567896.18,,156541418.6,88400000000.0,,711627907.0,,,,1431695127.0,,148600000.0\n1976,5393251.216,,,,2050248959.0,,2441084025.0,581408727.3,,9971014.493,2109619988.0,7160493.827,19531282.7,105287729.1,,,,,,66776055.56,2576476982.0,,,,,3581805735.0,1228176857.0,599806958.7,,52462858.34,48470391.3,120795356.0,34337727.56,229146910.6,0.0,,,,15457151068.0,,945240876.0,76200000.0,480640373.5,117000000.0,2201613068.0,,2521013875.0,,128043478.3,416956433.4,2751430.02,13304260893.0,20117179.33,10766652890.0,,88961005.06,,,,,1559887280.0,,55500000.0,34000000.0,23700000.0,,,382438611.4,1275301205.0,3294910612.0,152839849.3,7186307294.0,1761176240.0,0.0,3648665017.0,3844185965.0,27445027.45,294593397.9,5008396504.0,,75910048.12,,,1708677686.0,,,173074847.0,6400000.0,326295131.6,23669757.49,2291375.573,,25496422.66,,577239433.3,,33040454.15,531576968.5,,21761874.87,155142207.5,,,,,9205803.654,439885582.5,,,8181627.956,2644426038.0,25234878.48,2898055461.0,977362861.3,11876000.0,271671526.2,589099594.7,833181818.2,,778394355.4,714759968.1,21985174.2,15572289157.0,,,623403324.0,46757936.51,,,691500000.0,,10297663.29,,179207352.1,,,6020631.897,20531871.89,26300000.0,,,,,,2345444903.0,,945058881.2,,14233103.16,531909157.3,,,,12613977.4,83960118.94,2534775215.0,136687529.9,101074621.0,,133232399.7,91013000000.0,,593023255.8,,,,1677275419.0,,199800000.0\n1977,6127288.063,,,,2058223942.0,,2500485127.0,686893244.3,,13955555.56,2496513862.0,10147346.14,22903777.27,128522908.8,,,,,,73254329.6,2499644658.0,,,5650505.962,,3752174526.0,1226534416.0,924042756.7,,51449039.4,55167290.78,161471103.3,36633018.56,280082338.8,0.0,,,,17304663483.0,,1063101451.0,86500000.0,471669448.0,205000000.0,2751058001.0,,2808847050.0,,135048309.2,461856960.1,3651464.946,15041676195.0,28927873.66,11583506608.0,,121717795.7,,,,,1838775321.0,,75200000.0,24274509.8,31800000.0,,,419914698.7,1468674699.0,3477080945.0,171725706.0,7617207960.0,2007693506.0,0.0,3180556220.0,4556493518.0,30580030.58,262704735.1,6157312577.0,,147766705.0,,,2237603306.0,748518665.9,,126427193.6,7750000.0,479647087.8,28081232.26,2780125.695,,28710697.24,,731455472.0,,43959890.67,437692985.8,,26050146.53,169293678.2,,,39135467.92,,13625117.4,637879477.3,,,11010257.25,3138198948.0,35231772.65,3704801157.0,1114680192.0,13208000.0,307431743.8,514837869.1,913585858.6,,1031640130.0,754442226.1,22276752.32,17379518072.0,,,576875736.5,55486507.94,,,717000000.0,,16062942.55,11584767351.0,216538485.8,,,7064980.375,28588099.64,31700000.0,,,,,,2560335056.0,5390626.348,998216560.5,,21108759.36,688722114.1,,,,15364583.33,121692505.0,2765773072.0,190729876.6,131916696.9,,160545078.5,101000000000.0,,748837209.3,,,,2073738018.0,,285350000.0\n1978,,343271609.1,,,3103989947.0,,2816316206.0,877450655.2,,17033333.33,3166647025.0,8552841.493,32372283.48,134871031.7,,,,,,97672439.47,2690623102.0,,,14305862.29,,3969158477.0,1668885136.0,1036145035.0,,86764810.15,71436168.33,214951896.0,37960435.35,360663621.1,0.0,,,,21416956348.0,45014.37647,1322665932.0,103000000.0,627852442.1,164000000.0,2485279987.0,,3470695273.0,,178212560.4,506869453.0,7239265.398,18873052740.0,,14217505105.0,,101354226.4,85228280.98,,,,2118929495.0,,71700000.0,17333333.33,43100000.0,,,538098139.6,1627662342.0,3975819130.0,217465500.0,8113739881.0,1986021658.0,0.0,3117508058.0,5540992658.0,,304948875.3,8657135933.0,,239475870.0,,,3190082645.0,738039577.8,,252760229.7,8900000.0,729941800.6,21946485.42,4013501.003,,36648101.37,,772559382.0,,52181427.4,518287192.6,,31020668.63,183429289.3,,,76333333.33,,25570521.9,607070689.6,,,14774701.32,3022642270.0,44549266.25,4226968876.0,1307453860.0,14867263.94,388573502.3,574334105.4,1031868687.0,,665178542.9,622746329.0,27421800.61,10292598967.0,,,622564542.5,69522222.22,,,834413568.5,,14393007.32,13404087588.0,175916407.9,,,8118123.472,34987046.26,81400000.0,,,,,,2873317738.0,8259877.065,1213503185.0,,22733718.58,942007071.2,,,,18312500.0,148496651.6,2727882976.0,421677764.0,151699852.8,,185943655.8,109000000000.0,,827906976.7,,,,2067988017.0,,347750000.0\n1979,,504712881.9,,,5057062803.0,,3100685079.0,1049972515.0,,20000000.0,3631580468.0,17562828.48,32032417.9,136251932.9,,,,,,119737096.1,2829161200.0,,,24355619.03,,4084145738.0,1945005774.0,1312899709.0,,102735025.1,88354754.09,190944707.6,52566260.19,467687274.7,0.0,,,,24777567445.0,45014.37647,1529188589.0,120000000.0,711681247.4,186000000.0,1152855496.0,,4910953932.0,,276328502.4,642602892.8,9572320.678,22667912461.0,56881751.77,18373780394.0,,66362988.08,71021091.75,,,,2424261939.0,,90200000.0,17176470.59,49550000.0,,,621170386.2,1552431166.0,4589738352.0,290141008.5,4993779939.0,2371712821.0,0.0,3394518704.0,6904107163.0,,399556492.3,9173587661.0,,291024720.0,,,3543388430.0,881077990.8,,346311001.5,9400000.0,853569148.6,28073183.58,5370993.429,,42364311.06,,896353802.0,,81891303.63,679663588.4,,36197478.4,190866354.1,,,78000000.0,,43029681.3,778636837.2,,,17482911.97,3070825338.0,32278195.0,5038015817.0,1453771374.0,17300000.0,436892310.9,584105385.1,1181818182.0,,520650234.3,874273979.8,30150739.65,1936746988.0,,,701973945.7,63530158.73,,,860000000.0,,19633017.15,17616726771.0,239999813.6,94390801.14,,10785547.37,54644241.99,87700000.0,,,,,,3368143352.0,10183559.48,1581656051.0,,22498848.26,1199048431.0,,,,27218750.0,160900650.0,3001142306.0,375458521.9,206806783.0,,279396248.9,122000000000.0,,925581395.3,,,,2160867340.0,,441150000.0\n1980,,497359449.2,,,6477389013.0,,3657867290.0,1152895906.0,,27763333.33,3958575327.0,23617947.75,35360658.84,167255351.2,,,,,,159008134.9,2259307479.0,,,31844060.6,,4744402251.0,1996765550.0,1787179487.0,,118473116.2,99867474.44,152183675.0,57416698.22,611248236.6,0.0,,,,26692620067.0,1817455.45,1617653843.0,105000000.0,890174464.8,209000000.0,1361426627.0,,5508356433.0,,359323671.5,873508619.5,10367191.75,26427190947.0,68629307.08,25363413472.0,,120610364.9,60309243.02,,,,2275580289.0,,103760000.0,21882352.94,57000000.0,,,740802218.1,2114454046.0,5420809519.0,362511166.6,4874889400.0,2976492818.0,0.0,4120814786.0,7915696626.0,,416212133.9,9711741591.0,,271691156.2,,,3980692489.0,950805965.3,,503476314.8,12750000.0,1074139253.0,30811520.22,11639193.97,,52422325.29,,1117955622.0,,90402004.94,810422203.8,,38337750.85,202083467.2,,,92283380.97,,53134112.22,1035886222.0,,,17039000.38,3029915085.0,47159888.99,5269306825.0,1668684529.0,20083333.33,676939260.5,883757961.8,1429292929.0,,948572813.3,879326573.0,38795968.68,1506218239.0,,,867810131.0,89326190.48,,616740088.1,755555555.6,,23552267.56,20724493047.0,228000000.0,96502271.87,,15907791.96,62055971.53,95500000.0,,,,,,3791756609.0,13135761.89,2253248408.0,,24763347.22,1373227227.0,,,,36927083.33,194096119.6,2671976286.0,232291721.3,398813536.5,,477266464.6,138000000000.0,,1002325581.0,,,,2661671165.0,,442750000.0\n1981,,618891637.1,,,5882767126.0,,4323644157.0,969372327.1,,29995555.56,3385176171.0,17186114.21,33915894.76,174106138.7,,,,,2079250.0,238715537.6,2517859757.0,,,31162681.75,,5141128191.0,1810878508.0,2292307692.0,,92002752.72,120247597.8,71671583.96,63535260.98,638643433.3,0.0,,,,23094364442.0,5351084.002,1446085210.0,125000000.0,806569334.6,234000000.0,1817140261.0,,4977748533.0,,366980676.3,790880895.3,11361681.76,23867080426.0,88322642.61,24100707136.0,,195559792.2,52510728.9,,,,2578400684.0,,162640000.0,22400000.0,60500000.0,,,757701599.6,2654105930.0,5879007036.0,327043451.1,8121567621.0,4086497762.0,0.0,4700103232.0,7387713298.0,44922028.49,438818156.8,10851176225.0,,241171594.4,,,4463839960.0,1042021630.0,,373214770.0,26350000.0,557334522.3,27684625.66,12392766.95,,46185938.88,,975581462.8,,86482746.69,1284948561.0,,31648946.94,205288116.6,,,99294190.87,,38506688.83,1446539243.0,,,13984418.41,2135475014.0,71927312.7,4527100427.0,1649618173.0,21959582.69,660354444.4,1133468442.0,1737373737.0,,994511245.1,982322001.6,38248532.25,1567860808.0,,,843539896.8,131942063.5,,1059505495.0,915333333.3,,28682783.33,24399927864.0,203987417.2,86843238.35,,15788111.47,78352569.4,134000000.0,,,,,,3490216138.0,12379584.3,2437707006.0,,22525953.98,1415853972.0,,,,35166666.67,228835732.4,2814869761.0,331019097.0,108146878.4,,709699535.8,170000000000.0,,1009302326.0,,,,3011979548.0,,389700000.0\n1982,,668493883.3,,,2279872697.0,,4459544582.0,995369996.9,,36665555.56,2891774968.0,16554779.89,32866107.13,184674562.5,,,,,2576875.0,123726843.5,3031328924.0,,,23551463.59,,6017321456.0,1928314953.0,2160747854.0,,86425689.12,131616586.4,147162426.6,72427162.01,667866120.9,0.0,,,,22349480132.0,29608206.12,1400430126.0,126000000.0,932452707.7,229000000.0,2307139561.0,,4956242441.0,,387367149.8,844911290.5,14939154.85,22522681678.0,88555899.77,24785700685.0,,170273456.3,52266833.59,,9407751.857,,2638652976.0,,176590000.0,24710000.0,67000000.0,,,750740503.1,2741068094.0,6302107956.0,342048872.7,9703525315.0,,0.0,4518481889.0,8062597403.0,53608918.73,465258786.0,10193936012.0,,243721560.5,,,4646524886.0,1285119360.0,,246651755.1,43350000.0,709332450.6,25974668.7,14965648.08,,41434171.49,,959485440.9,,,858130162.7,,29518633.26,195419415.6,,,102992610.5,,26977480.08,1438303667.0,,,12781263.88,1651914513.0,,4829535607.0,1697544015.0,25491173.23,608767756.5,1261580776.0,1852711543.0,,1268695337.0,964637002.3,,2122035928.0,,,803004962.0,208026190.5,,1467252747.0,989333333.3,,28175370.73,27095797466.0,172214638.2,73072311.52,,14128284.83,94372953.74,83900000.0,,,,,,2980130869.0,11074579.58,2726878981.0,,18541962.11,1507634749.0,,,,,328600426.3,2754732303.0,366761862.8,87488449.89,,599135224.1,214000000000.0,,1523255814.0,,,,2744699858.0,,437450000.0\n1983,,778628250.6,,,2848053181.0,,4511671066.0,991995097.5,,34369644.2,2671831608.0,17765951.31,29317755.98,231804492.5,,,,,2899750.0,89973482.6,2082669251.0,,,24454614.24,,6947104072.0,1946035043.0,1497684301.0,,76251882.88,129898757.7,78919799.79,,859813605.6,0.0,,,,22127066321.0,30902369.44,1374960497.0,126000000.0,952430671.6,200000000.0,3004281422.0,,4770965313.0,,408405797.1,905188931.5,15102947.83,21653641575.0,86599171.8,23631058396.0,,71148287.35,,727666.8802,18064755.2,,2195463586.0,,184250000.0,22100000.0,70000000.0,,,700708442.0,2047257950.0,6830768698.0,310258091.7,10550357293.0,,0.0,4265358582.0,8409527116.0,50162507.37,484742989.8,11429317256.0,,208691732.7,,,4714159753.0,1425498410.0,,492472676.6,38750000.0,,45952585.36,14069652.63,,41151224.44,,628153423.0,,,778556797.2,,26767016.74,192169991.5,,,116316977.5,,22217303.96,1342380183.0,,,12354815.18,1627393327.0,,4256634367.0,1698789946.0,29081758.93,567555469.4,1457006369.0,1985972402.0,,927159637.2,800165576.3,,2195521573.0,,,692947642.5,221221334.9,,905192307.7,888319702.0,,28024671.7,21872720536.0,230769230.8,70617688.27,,10236934.65,124526263.3,83900000.0,,,,,,2629021887.0,11735930.35,2733503185.0,39363259.91,16398734.08,1583036595.0,,,,,383489474.3,2469375535.0,332950425.4,93723596.47,,274611790.9,214000000000.0,,2006976744.0,,,,3052688269.0,,431750000.0\n1984,,1066247744.0,,,2527749815.0,,4925319433.0,949715291.7,,29938434.04,2407447484.0,21237787.7,26968328.69,244337571.5,,,,,3256125.0,144680785.7,2013151758.0,97366249.74,,26109660.57,,7349795764.0,1807905757.0,1462262953.0,,70164798.82,127243641.8,53403541.41,49423627.5,889730898.6,0.0,,,,20124939008.0,31133068.12,1259583261.0,139000000.0,929290821.3,193000000.0,3742137511.0,,4851949869.0,,423019323.7,826070181.3,15601330.13,20212344345.0,80328270.29,22732895544.0,,44624487.03,,846805.02,6465128.712,,1994286405.0,,207480000.0,20740845.14,81000000.0,,,641103030.3,2002310077.0,6956682449.0,284275226.2,9926303622.0,,0.0,4214300331.0,8296144788.0,25153444.25,457778991.6,12225078098.0,,175004683.0,,,4759446931.0,1465909168.0,,474574917.6,24950000.0,,55750799.98,12285803.37,,38661575.09,,512454401.2,,55059872.19,1155945373.0,,25402957.27,188720829.3,,,136654509.1,,18839590.2,1273659777.0,,,10632625.18,1210916250.0,,3977294580.0,1554623805.0,29211271.37,530331804.6,1580789642.0,2114435830.0,,666310916.2,513453143.1,,2313670081.0,,,628464842.1,172997512.4,,874862637.4,731196135.4,,25460676.62,22672050990.0,355384615.4,65136844.13,,9920516.345,235932384.3,89200000.0,,,,,,2668524384.0,9116913.399,3394904459.0,40049707.41,15692619.64,1698837534.0,,,,,249474468.8,2190052307.0,293025202.4,75215039.12,,221851277.3,231000000000.0,,1325415047.0,,,,2770152107.0,81624098.96,360650000.0\n1985,,1146467010.0,,,2027221261.0,,4386859326.0,1036872489.0,,32220298.12,2428223977.0,19810222.52,27106616.84,224948007.1,,,,,3263000.0,131208000.2,2687049984.0,101752153.3,,20997913.35,,7460563318.0,1966928897.0,1137635211.0,,69565043.19,116190293.9,40371344.17,55646692.47,716735061.0,0.0,,30737332.91,,19921872405.0,31391900.79,1259295610.0,61042019.4,953299653.9,284000000.0,4203565423.0,,5077574145.0,,429444444.4,911349660.9,14008928.96,20780557604.0,95489724.28,23281158966.0,,63162776.66,,1244263.419,4652567.483,,1927083076.0,,224420000.0,38971271.33,94000000.0,,,1025550984.0,1923319347.0,7567024020.0,301495819.0,10706415945.0,,0.0,4004517114.0,8253390533.0,18714379.26,501742160.3,13087751954.0,,145781732.1,,,4883795775.0,1379869860.0,,227203508.6,25150000.0,,188947302.5,10667797.39,,38112966.56,,692472049.7,,50869844.15,1241863652.0,,29826627.16,196758644.7,,,148214364.3,41058571.71,19811238.44,1076905728.0,,,10877815.44,1091662993.0,,3884181822.0,1796625192.0,30532050.16,529191398.5,1617713053.0,2143969262.0,,666976464.5,609330746.5,34289370.3,2140789170.0,,,653587081.2,158363306.1,,1528873626.0,2050007584.0,,27250728.43,17656965219.0,205293356.8,64966400.53,,6281702.97,250433594.3,44300000.0,,,,,,2795295633.0,6646662.948,3510318471.0,37839750.88,18879809.82,1629594718.0,,,,,215938722.3,2365977436.0,345976202.3,104818309.0,,203645853.9,258000000000.0,,820000000.0,,,,2117406345.0,53190811.69,309300000.0\n1986,,1156494418.0,,,2449545721.0,,4606710028.0,1475426089.0,,34607737.52,3404311038.0,26277338.54,51180170.14,248796417.2,,,,,,92869207.22,2758186568.0,110162485.9,,34310908.18,,7780136740.0,2565428146.0,1114393822.0,,96559112.46,145411861.2,67436312.94,,679498200.9,0.0,,48729244.32,,27690811161.0,30604149.2,1647882398.0,82290924.24,1127103217.0,207000000.0,4727136104.0,,6270618789.0,,439202898.6,1223271001.0,14591259.37,28454938061.0,136006884.1,27216844988.0,,51650922.76,,1046935.943,6128820.138,,1998816951.0,,140853333.3,27829660.94,105500000.0,,,765838789.8,1734616704.0,9539363086.0,409081178.2,11741433342.0,,0.0,4386224325.0,11941809156.0,23522088.13,625775075.3,19457334441.0,,181255662.3,,,5325292074.0,1295617612.0,,148293323.7,24350000.0,,172743269.3,13369627.53,,53459034.31,,728545632.7,,50566283.23,817296611.7,,37539055.06,231843369.6,,,170669991.0,42460504.2,24743830.16,894074625.0,,,14412109.52,516893509.3,,5351016847.0,2168162775.0,31053048.07,691134040.0,1305689797.0,2282625019.0,,867538985.5,593798594.1,37450561.76,2173578189.0,,,935754339.7,191435349.3,,,2307873265.0,,34889469.11,,260000000.0,85476428.36,,7227148.725,163311245.6,34900000.0,,,,,,3577484916.0,7341260.29,3678980892.0,48800771.57,30011030.71,1635667271.0,,,,,206793454.6,2769409588.0,260704018.6,131071428.6,,242349802.6,281000000000.0,,1004536497.0,,,,2497888430.0,61629720.93,342200000.0\n1987,,1487398890.0,,,2485659656.0,,5057135655.0,1737112605.0,,30784856.43,4162992929.0,35602937.41,50712557.85,288311839.7,,,,,,103362387.2,4323674770.0,104464429.9,,73826342.81,,8694447168.0,3020406521.0,1166781370.0,,122780223.4,163128000.9,28297227.67,100513414.3,721331206.4,0.0,,199500731.1,,34135226422.0,30817967.49,2141274092.0,59327500.29,1196971384.0,207000000.0,4805707420.0,,7921508651.0,,476618357.5,1462231547.0,25131445.66,34858734928.0,,31231666522.0,,43338474.86,,1392344.227,3883662.224,,2399225050.0,,124028000.0,10619291.23,122500000.0,,,823921397.5,1347598625.0,10877406164.0,435378990.4,15263376570.0,,0.0,5995553855.0,15653065895.0,25325014.99,647050307.4,23642290700.0,,249810082.3,,,6040845305.0,1336740077.0,,36999768.47,22250000.0,,226699541.9,18111226.26,,73150597.31,,815386106.1,,36662411.21,813391574.4,,44254118.46,203653743.5,,,83582418.11,43720551.23,21643561.49,1334714483.0,,,13662211.31,201691218.2,,6542917225.0,2753415610.0,33928833.32,925756538.6,1139141743.0,2500172426.0,103800000.0,1455232303.0,652382133.2,42383569.1,1765484773.0,,,1130608394.0,116922830.9,,865412087.9,2272446246.0,,36093359.48,14460266667.0,310333333.3,99871230.5,,4585444.665,176891743.8,28500000.0,,,,,,4469563626.0,8349582.275,3650191083.0,34271986.48,43412292.0,1698687546.0,,,,,194409783.5,2889593497.0,161608082.1,130971749.2,,223924938.6,288000000000.0,,765517241.4,1315597882.0,,,3595968625.0,66915490.04,392600000.0\n1988,,1469382980.0,,,2696341658.0,,5836347868.0,1713954577.0,,34255493.43,4097149308.0,36931589.27,57186887.27,331995586.6,,,,,,92916951.67,5874167753.0,178392184.5,,93747094.76,,9897335684.0,3276156632.0,999951022.8,,128102253.5,154370685.7,214939929.1,,862374404.2,0.0,,243815864.4,,35096843456.0,31059919.76,2320423440.0,47296368.76,1028611425.0,198000000.0,4453565066.0,,8900414227.0,,614855072.5,1704330620.0,24673835.53,36104962946.0,,34304125087.0,,22760424.65,,2161462.759,,,2749556829.0,,146588384.4,11020000.0,132000000.0,,1972400.0,1027508668.0,1356706413.0,11346419153.0,453486447.0,18889008563.0,,0.0,7694798541.0,17403664790.0,30932577.82,587776388.5,28216102753.0,,250942407.5,,,7732395676.0,1704123944.0,,39317743.08,25000000.0,,165486625.5,16956458.63,,86015559.6,,917269144.8,,32904438.55,981914645.6,,48011066.05,255256828.5,,,63852700.4,42983864.11,20167493.07,855741986.7,,,,271106046.5,,6728811707.0,2894745726.0,35789121.14,961838312.4,1148894668.0,2721723240.0,102900000.0,736618231.5,931561008.2,46294747.84,1783781524.0,,,1347837652.0,178435818.2,,982554945.1,2524357529.0,,36626347.16,13354666667.0,369333333.3,105288603.6,,9011475.022,178963345.2,49500000.0,,,,,,4917620754.0,8720150.255,3722802548.0,77892079.18,43089092.42,1809003357.0,,,,,232920340.8,2663901290.0,124833697.7,140904123.0,,259967029.9,293000000000.0,,1096551724.0,1305814502.0,,,4263086823.0,86740656.33,407050000.0\n1989,,1948559396.0,,,1440922190.0,,6300015815.0,1623488055.0,,37903281.72,3880733006.0,28525930.38,66816506.17,378796135.2,2071428571.0,,,,4355375.0,101690872.4,8761486966.0,186129028.9,,102798415.8,,10747134689.0,3082038963.0,988934423.2,11403453020.0,129676998.7,146869357.5,67494749.1,,865205662.8,0.0,,244995663.3,,33604161248.0,31088053.75,2183667160.0,53517350.16,854300945.3,189000000.0,3516344801.0,,9302930296.0,,781521739.1,1766586166.0,29083211.42,35317062940.0,,33498698405.0,,22626966.33,,2722988.351,4434725.155,,2560254614.0,,151627061.3,6023830.213,138000000.0,,2231550.0,812646128.2,1409556738.0,10589796925.0,434222056.0,16301812932.0,,0.0,6270727555.0,17675486539.0,40933809.6,382891036.2,27966353542.0,,228606149.0,,,9468974884.0,2076390756.0,,,,,125682787.2,22610459.53,,75962325.96,,990555090.2,,30247467.94,1153375828.0,,46080349.08,550194633.8,,,79069105.59,38879724.51,22781135.85,1019255475.0,,,,170705511.3,,6399237699.0,2932580201.0,36331136.35,959602906.4,1171521456.0,2580142638.0,101900000.0,862654199.4,954928761.0,53074242.22,1493906252.0,,,1456535413.0,98142356.71,,848461538.5,2572110229.0,,41622478.13,12749866667.0,,99602517.81,,14394912.13,213029679.7,8560000.0,,,,,,5032977192.0,8731526.53,1483652561.0,56424917.24,41861019.16,1939693409.0,,,,,234062029.6,3373741563.0,105316752.3,139821239.7,,297821236.4,304000000000.0,,1196251553.0,458562483.9,,,4181886467.0,167587250.3,408600000.0\n1990,,1751153152.0,,,2050907629.0,,6704213698.0,1972701682.0,,39602347.38,4644324241.0,32817291.98,84465502.36,373023439.0,794520547.9,,,,4768750.0,137065127.5,9236296955.0,231168587.6,,156250839.8,,11414631847.0,4056408189.0,1031475584.0,10085081567.0,143973702.1,180577745.9,45933813.55,,889979074.5,0.0,,411409063.3,,42318768301.0,31116187.73,2649889473.0,47798904.44,904269155.2,202000000.0,2260645161.0,,11695038645.0,,785048309.2,2141300984.0,30542031.59,42589868779.0,,38943795645.0,,27612553.5,,3464911.112,,,3193376484.0,,132196105.0,3589328.49,67120949.03,,2670400.0,847389246.9,1613975396.0,10537035450.0,594006010.4,16474401698.0,,0.0,7375654517.0,20734625579.0,38609944.56,322429005.4,28800451682.0,,246456438.6,,29090909.09,10110714871.0,8961536461.0,,214361038.7,,,187023405.7,24165932.32,,96691368.64,,1069720492.0,,37948124.18,1327241698.0,,52155069.51,814025583.1,,,84598999.67,40181617.44,24312172.03,1125007856.0,,,,277297783.5,1142475980.0,7420849636.0,3394869435.0,37929191.13,1057749672.0,1447919376.0,2810101624.0,73100000.0,777066944.8,951481870.0,68691099.48,1540736842.0,,,1875087897.0,112234255.7,,790796703.3,1739025771.0,,95132735.43,16355466667.0,1177777778.0,118215709.0,,12387253.54,163886690.4,,,,,,,6169504240.0,14223211.66,1641781737.0,34341542.25,50748351.79,2214017705.0,,,,,247855881.5,5315413395.0,87154458.21,107006214.2,,328351062.0,306000000000.0,,737870454.7,511970136.4,,807070715.5,4364458204.0,139324047.3,416300000.0\n1991,,1031247788.0,,,2858778842.0,,7023509067.0,1994055546.0,,42751758.83,4624500746.0,,69505542.22,381720110.1,232176386.6,,,,4732875.0,143643960.1,6694665295.0,245434285.5,,172269188.2,21598187.92,11338503299.0,4016764413.0,1038039494.0,9953641758.0,144168701.9,178198343.2,43891987.21,,911467589.2,0.0,,418387368.7,,39516328623.0,31774522.99,2671946671.0,33894298.95,565098062.6,209000000.0,1345757343.0,,11680263754.0,,529033816.4,2200991549.0,32482582.88,42702599011.0,,42074283749.0,,41427184.18,71764178.4,3996271.673,,,3146899035.0,,119310860.5,2031374.373,47398089.41,,2623227.387,722549153.4,1697029205.0,8622473881.0,624932658.1,17549594830.0,,0.0,10548894781.0,21585706772.0,31891976.66,433271745.1,32785415754.0,,191908506.3,,43294683.66,10956524348.0,12924377966.0,,229469731.0,25000000.0,,277389023.8,22308171.45,,107736089.1,,1148445710.0,,34707087.44,1599507028.0,,,942677085.2,,110838314.6,71803523.25,39440703.49,23704121.2,1571959986.0,144767719.8,,,243705781.0,67668345.5,7246192325.0,3287551636.0,35431485.71,989033810.0,1254811443.0,3067123794.0,78600000.0,697734627.8,913219741.9,52642141.66,1721995821.0,,,2115383815.0,197613496.8,,895631868.1,1377194085.0,,105333802.1,16355466667.0,1365798115.0,110014994.3,,23179749.72,145127188.6,,,,,,,6219460369.0,16006837.31,2893808463.0,,45904568.12,2598337174.0,,,,,260431030.7,5670666520.0,108141651.9,73561599.98,,268628014.6,280000000000.0,,983721953.4,427617814.1,,1028217917.0,3874415135.0,86247306.22,376050000.0\n1992,,794138821.2,31559657.48,,3254455192.0,,6882091580.0,2139925322.0,11070110.7,38986476.43,4131298112.0,,71116618.56,427723625.0,255770911.5,,,,5292125.0,141441910.3,4993804467.0,251692787.5,,177986045.6,23185438.17,10788803124.0,4138043834.0,1168858391.0,12420300875.0,156797334.3,183796639.1,85527294.36,125617699.1,1102357227.0,0.0,,630127106.0,,41965836693.0,33625739.22,2837745377.0,63127240.84,1053301643.0,211000000.0,1415819974.0,,12250195430.0,,255343443.4,2075955550.0,30539125.34,45123086054.0,,40774938835.0,,41663996.04,55654040.29,3501687.892,,,3623052915.0,,153753024.3,3625349.994,,782003661.3,1743605.937,812017967.2,1887635966.0,8083231410.0,674035044.5,19732558015.0,,0.0,8262053674.0,22177090390.0,47192327.63,367745484.8,35999123576.0,,156036602.0,,62293735.89,11614665196.0,6316012045.0,102292611.3,442786331.1,22650000.0,,326765473.6,24237292.3,,123217456.2,,1228526553.0,,23102633.36,2000064622.0,,,1370457677.0,,33041891.2,59605412.17,39378674.16,25238116.38,1766520896.0,124561274.3,,,173657679.3,47200000.0,7904561273.0,3803684930.0,37607537.89,870398917.2,1517165150.0,3388776373.0,78800000.0,904617805.0,1078843704.0,58569676.66,1881935067.0,,,2532649406.0,169556285.2,,,831620409.6,,88570170.0,15360266667.0,183718440.7,109772868.1,,26661754.52,134193736.7,,,,,,281422738.5,6418628291.0,20976434.16,2976570156.0,35324074.77,49113686.85,2961769836.0,1037058.642,,,,289677115.2,6157947273.0,96907036.42,52331345.97,,366965197.8,305000000000.0,,992932485.0,332970309.4,,1306900026.0,3677406461.0,97756279.98,296350000.0\n1993,,1774397877.0,39289843.43,,3368550452.0,9829763.866,6733829290.0,2115115267.0,77519379.84,36267402.59,3746042851.0,,60526975.63,471044672.3,282674243.3,,,,6130375.0,109897118.0,7099899155.0,233941291.9,,185671482.9,19144450.37,10268822622.0,3611212626.0,1291053676.0,12577165930.0,148635238.4,168175220.6,469173805.5,109477580.1,1529432893.0,0.0,,268277271.6,815585466.9,37215052110.0,31065546.56,2682011246.0,95993941.21,1276911083.0,276000000.0,1526165392.0,107737649.2,10041511353.0,13146559.88,163850000.0,1615424809.0,32041095.62,42590872342.0,,34085881363.0,,41004328.58,43956503.99,2556388.668,,,3364413330.0,,144445075.4,4436526.474,40592869.13,1168936759.0,1649639.306,735860385.6,1933304585.0,8253542581.0,597723765.6,1448177703.0,,0.0,8758471677.0,18242013901.0,44542579.54,391137488.4,41353936222.0,,105704527.3,,44626255.11,12377424873.0,2980065532.0,107643979.1,452979280.6,30450000.0,,354785171.2,22140684.39,20769763.77,108089199.8,17691507.97,1251786538.0,,37830790.82,2327305641.0,,44497338.99,2061809624.0,,14057102.96,59366482.2,30155786.96,25728062.72,1923398172.0,70155520.33,,,289231103.9,40210589.62,7054868962.0,3175583193.0,37041837.42,866788074.6,1439921977.0,3308760745.0,95200000.0,956586465.0,1173017500.0,68596992.16,2123378416.0,,,2192208142.0,157930499.3,,,722451519.7,7766720078.0,89436136.36,16451200000.0,257981093.9,119937986.2,,23339131.11,116470035.6,,,,,266899036.6,230303671.6,5011158320.0,23724347.71,1426095238.0,39200036.73,50147794.73,3156299863.0,23498175.22,,,22644876.75,276167134.9,7075086940.0,58725701.62,62636650.43,152233866.5,418919639.0,298000000000.0,,1287954761.0,297716380.0,,1535457656.0,3254313379.0,51128294.49,249800000.0\n1994,,594991178.7,49649504.93,,3754724687.0,,7459696582.0,2227560550.0,43942747.06,41909745.03,3944101813.0,,30259093.49,547417522.2,241993434.8,,,,7899375.0,134595240.4,10591499118.0,261876080.2,,170433762.3,10689745.23,9577377640.0,3899275421.0,1466048832.0,10050586559.0,84071649.21,94517340.44,,,2005122888.0,0.0,,298469126.9,938252776.6,36330284517.0,30711058.34,2718790042.0,100956679.7,1334911648.0,291000000.0,1714409786.0,80198311.21,10092671257.0,25135735.38,148691674.3,1756338984.0,33665273.34,44392512323.0,,34493524143.0,,37823250.83,45871747.51,2316899.696,2016728.765,2379301.339,3587244914.0,,153011545.4,5485552.101,,1625222365.0,1599966.755,757131989.3,2239731575.0,8880551226.0,633699379.1,1703171536.0,,0.0,8780366219.0,18062459082.0,34218503.95,407863026.7,45285594083.0,106926893.0,117331482.6,12086953.61,107258619.0,13519265763.0,3296055513.0,116105380.4,637473438.6,39300000.0,,437032405.1,25853328.83,21062271.38,126000012.1,33900348.04,1365250019.0,,27580945.67,2888815805.0,,29898866.18,2801966892.0,,16393641.22,72864691.92,29488165.08,17060803.08,2120597807.0,56958995.16,,17471024.22,319694489.9,35401494.6,7137373801.0,3403291213.0,39252998.63,979531817.0,1520091027.0,3320617929.0,101000000.0,1111161731.0,1392199022.0,83255878.34,2251923178.0,,,2173634730.0,161100272.3,,,936686222.5,13547871733.0,40510575.39,14279733333.0,226167004.5,66146738.59,,26495551.69,109334519.6,,,,,299993419.1,237949504.1,5154504230.0,25804044.16,1636299776.0,22153979.16,25396024.89,3611133201.0,14182891.53,79583333.33,,24202817.59,297068854.7,5293173966.0,58375569.77,104127847.9,919044682.1,450443306.0,288000000000.0,86929824.56,939683231.4,431345012.2,,2353269332.0,3478582291.0,62869469.99,247900000.0\n1995,,233843714.9,50907521.78,,3801950488.0,52228583.82,7665878446.0,2557834494.0,66159968.91,42108929.88,4449014835.0,,36862814.24,620095155.9,311147105.6,,,179081676.9,8052875.0,140760862.8,14318919608.0,285738475.2,,165873977.8,13014176.16,9176903908.0,4645360982.0,1827997369.0,12606229599.0,,113575532.7,,,2619338187.0,0.0,,298833385.5,1065352459.0,41158705095.0,29608206.12,3117966146.0,84449968.38,1234655192.0,475000000.0,1948876986.0,124996349.9,11439906271.0,36343487.58,122460147.5,1908986807.0,34700248.16,47768110000.0,,34247823782.0,,49054322.26,,2886551.708,2211919.911,3447875.179,4179913247.0,,158348657.5,5691560.614,,2060388930.0,2478871.189,612184817.1,2478753541.0,9754464630.0,702039703.1,2501544190.0,,0.0,8976693112.0,17185853004.0,35298829.61,299838515.5,49961673237.0,177686628.4,149096438.3,26712568.96,123101153.5,16085095679.0,3692435533.0,103704532.2,746264054.1,,,763663963.7,34373285.47,30453612.5,142256814.9,43560331.06,1437898701.0,13345789.4,27170664.12,1712924668.0,,40468959.11,3932079181.0,,21281148.79,33465088.27,31987855.25,11047717.5,2444098387.0,68236520.19,,18431407.12,639406630.6,35119851.46,8011539559.0,3508040839.0,39766584.51,1146415728.0,1513849155.0,3665932427.0,96600000.0,1413463629.0,1700402497.0,56405488.19,2719362634.0,,,2670121572.0,206926409.3,,,983140541.4,12741629470.0,56449336.72,13200266667.0,138756425.7,80915880.66,,25023304.59,111636298.9,,,,,629622682.6,334655022.9,5729770498.0,28769619.72,957899818.9,20034138.17,30852572.78,3849025896.0,5803400.646,135612612.6,,,342902458.4,6606245815.0,85513656.09,127002622.5,1046793431.0,523862025.5,279000000000.0,112678421.5,1198810237.0,,,805892377.9,3292446562.0,55265536.34,262900000.0\n1996,,159741933.5,45713356.11,,3379138770.0,52410268.55,8202776517.0,2457903049.0,71606841.24,50893980.78,4241865968.0,,37141874.14,638958844.8,213616356.3,,,182805614.6,7965875.0,146963017.8,14073226545.0,328359479.2,,140560134.8,12196218.57,8615884471.0,4239447901.0,1904105834.0,14563240390.0,102660140.1,116936303.6,89269879.98,,4318552316.0,0.0,,448075909.3,1123923831.0,38989886649.0,24527208.38,3086224945.0,107001292.2,1452431008.0,419000000.0,2115742979.0,152271808.6,11294316855.0,41436607.71,126454733.2,2021797095.0,32851136.61,46403438584.0,,34490949485.0,67706683.56,44417812.62,,3929706.231,1897743.657,,4613167577.0,,141370462.9,5558340.16,,1938698897.0,,585271901.8,2874845238.0,9904672736.0,750987245.8,3550986964.0,,0.0,9601957420.0,20793128832.0,41791263.91,417489421.7,44047104680.0,241771205.9,170804816.3,28276956.35,113563610.9,16408665267.0,3241385529.0,78445466.01,735631013.6,,,767105591.7,28347308.31,42260000.0,141495421.6,38154934.56,1447128689.0,15354611.16,49442905.51,2063965155.0,130636725.9,39683160.27,4675441102.0,,21608196.89,36037790.98,37887510.75,20152203.02,2420963934.0,66463535.19,,17398035.78,701412878.6,31533400.51,7829004728.0,3537003416.0,39547026.04,1238271987.0,1437191157.0,3547799671.0,101200000.0,1396469289.0,1879303176.0,78744873.28,3083416787.0,,,2600849533.0,202012224.8,,,874451238.9,15826340652.0,73658822.76,13340000000.0,106332797.7,79774881.15,,18592815.28,110830676.2,,,,,641559871.1,329972648.3,6203436943.0,26486561.92,995089040.9,24826410.61,,3938047248.0,13458544.84,48549386.5,,,397469509.2,7512090796.0,101038489.5,135393564.5,1464905136.0,575652014.7,271000000000.0,172211545.7,733197556.0,,,416008632.4,2591787131.0,37835913.57,291650000.0\n1997,,456780475.0,29825492.0,3335766741.0,3340670335.0,64062121.19,7936884917.0,2164802343.0,92086691.97,61870123.83,3684095389.0,,38549246.23,681915124.0,244369396.2,,,249384139.4,9395000.0,180200446.9,13934266552.0,369070790.2,,160507675.1,,7945140183.0,3498218851.0,2120702608.0,16104915232.0,93525611.26,118711118.8,83825040.92,,2988711261.0,0.0,,534141188.7,988324331.8,33217573925.0,26552855.32,2804317083.0,150664189.8,1752395278.0,499000000.0,2267650314.0,92756319.41,9865892241.0,53031652.18,225417105.1,1947002590.0,30962540.18,41308251985.0,,35674878363.0,44007707.13,45483310.22,44370189.81,4176388.698,1817811.122,,4573516492.0,,132112832.6,,,1797184681.0,,695972460.9,3231358571.0,11464883390.0,765305513.3,4642384616.0,,0.0,9693753398.0,20156102258.0,54854608.88,444287729.2,40634840608.0,236752278.4,175834896.9,31158797.7,103419601.2,14848484530.0,2454268845.0,67064556.58,678164279.5,,1251990817.0,698792770.9,28700335.94,75611000.0,134075768.0,37988313.15,1400949501.0,17410750.98,52544736.69,2394152398.0,83254172.21,40262546.07,4780529108.0,,18692594.36,42014622.82,41599441.57,26407487.14,2089087477.0,83659580.38,,17304328.31,818784525.3,30270700.5,6839136799.0,3253032488.0,42587851.99,1180888907.0,1482054616.0,3320238863.0,118000000.0,1178753608.0,1576447115.0,79556597.15,3192276377.0,,,2388687811.0,167982106.9,,,1074785782.0,17577353181.0,77272576.53,18126666667.0,97731859.32,70800402.28,,9490749.703,112211743.8,,914364967.9,,,499529506.7,290785271.8,5203218383.0,25662115.12,1046927961.0,16619008.38,,3264802658.0,19050989.36,106190591.1,,,358166577.8,7791986304.0,118603807.7,139615977.7,2068583952.0,575206289.5,276000000000.0,217747190.7,1541033864.0,,,397073042.4,2414137710.0,43362495.25,311400000.0\n1998,,170278292.6,33638047.44,4010347175.0,3398699350.0,66757573.06,7107542891.0,2159796003.0,107262858.6,58736036.23,3664288413.0,,39494738.56,701585600.4,320389011.3,,,227586087.3,,228677000.4,14357357047.0,293977055.4,,181051047.4,,7748607984.0,3494250971.0,2112373123.0,17527989869.0,,137245911.5,26629667.19,,3389806738.0,0.0,,483748645.1,1166099773.0,33146457057.0,26704778.84,2846065338.0,159053096.3,1910962052.0,549000000.0,2372048406.0,263001685.7,10333417234.0,59919847.48,458549925.4,1959708814.0,22598926.93,40041139680.0,,36866288852.0,41084456.98,57453085.66,45034483.32,4049572.023,2900235.951,,4824257169.0,,139804367.7,,,1427264827.0,,618464380.0,972702125.1,11920610818.0,742402153.2,5479362942.0,,0.0,9145784898.0,20825125352.0,47640218.88,496473906.9,37849012643.0,242646223.1,171964013.3,26092304.3,83323986.09,10457957529.0,2282153592.0,33350210.56,693871897.5,,1443621758.0,733435634.7,27807021.35,138175000.0,143139739.1,42180166.5,1444959716.0,10613141.68,50446576.25,2480943604.0,78991291.13,41020286.4,5873097951.0,,19920839.93,49264817.34,25610687.83,14474120.37,1158657313.0,78912428.46,,22035691.04,1149684730.0,26271274.53,6836084823.0,3324939365.0,42273075.89,969356349.5,1318205462.0,3218881738.0,104000000.0,1141808874.0,1225561281.0,49720532.99,3491022616.0,,,2335597096.0,139262988.0,,,1254227893.0,7955730401.0,87091837.06,20861600000.0,259957570.1,75090854.85,,,110830676.2,,642122263.4,,,397592215.7,301139822.2,5132285182.0,25731330.54,1096039533.0,16103004.99,,2110239752.0,22613230.32,87510040.16,,,365849374.7,8781048158.0,134276958.1,154712531.5,1405161785.0,573248407.6,274000000000.0,,1450963992.0,,,384502730.3,1905656009.0,,306000000.0\n1999,,1066588789.0,42784205.21,4233083730.0,3461730865.0,68234148.57,7770250653.0,2124379546.0,120262174.0,50571188.26,3598447520.0,17843134.39,41741175.48,737412573.6,357224539.6,,,165903848.9,,176744242.1,9866973919.0,258413177.9,,169578756.2,,8210778540.0,3146822887.0,2043134812.0,21027341242.0,,144704636.5,149277860.3,,3247296766.0,0.0,,289970367.0,1205931870.0,32604005638.0,26779052.56,2784881254.0,175000467.8,1826496570.0,296000000.0,2447978794.0,272856734.6,11113722490.0,73800541.32,703704869.5,1653905119.0,23811699.72,38897240331.0,,36453353008.0,25882678.36,59277760.9,55211186.39,3519056.437,,,5012285642.0,,123754165.2,,,1035949008.0,,702942491.1,1135147005.0,13895562461.0,741508607.8,6650285144.0,,0.0,8645271101.0,21016456910.0,45131071.75,511988716.5,43122898505.0,143905357.1,151917777.4,23133179.47,88172003.48,12095186824.0,2286352512.0,15382947.39,829663624.8,,1153487088.0,631014150.1,34078186.69,106450000.0,140758789.2,56568626.39,1207516610.0,5990984.994,45036442.92,2908141919.0,66236920.45,43852596.8,6950081056.0,,18021861.88,56516191.65,31959678.11,14402979.49,1663289474.0,105765957.2,,23550468.65,491671368.6,26927929.68,7026433290.0,3309198286.0,47484957.37,970306042.0,1340442133.0,3080764514.0,111600000.0,992217726.3,1341016654.0,35678026.43,3226555351.0,,,2406493740.0,116553254.9,,,955337577.0,6469035211.0,80852363.58,18320000000.0,429617897.4,78285006.15,,,114743701.1,,737469450.8,,,327169170.9,274841827.8,5148727432.0,25853264.11,1127632857.0,20951796.25,,2056847122.0,15126152.26,111923076.9,,,357013395.4,9951788874.0,128497943.6,159704570.3,941788284.1,574285890.7,281000000000.0,250071736.0,1408064716.0,,,395252957.3,1738036625.0,56113432.89,263400000.0\n2000,,583621333.6,45362503.39,5875833901.0,3266633317.0,68052142.07,7273760313.0,1925557398.0,119575651.7,42321552.22,3190805233.0,14496275.16,36658539.05,740798160.0,351343204.9,,,140326204.7,7116125.0,173245422.5,11344032535.0,244205202.0,,184718394.6,,8299385231.0,2800146846.0,2103460610.0,22929764607.0,,123034343.9,132883821.7,,3027922793.0,0.0,,281160374.3,1157294085.0,28149990787.0,26025061.75,2392510831.0,246810843.7,1881163649.0,266000000.0,2627698334.0,230670129.9,10273779252.0,78313308.56,617541613.6,1558135250.0,32039537.35,33814262023.0,91295212.2,35254814799.0,18824291.43,50882608.24,45967931.21,3323532.172,9531360.608,,4564522446.0,,157848092.8,12585649.29,52462396.89,659775033.3,,715857664.8,1129542840.0,14287514241.0,694674774.3,8327053824.0,,0.0,9407761463.0,19878720932.0,43566232.49,529337094.5,45509673827.0,143527541.1,165584735.2,25794155.81,81025841.31,13801107024.0,2697075596.0,13717664.6,930016583.7,,1085534665.0,822127365.6,30555503.52,140400000.0,128192371.5,69990683.36,859151483.2,5090797.96,47210934.61,3323124172.0,69828947.91,43681247.68,9030564409.0,,24265559.55,55361458.44,37878312.26,11727501.44,1533157895.0,92397796.49,,20084946.68,368644109.5,30825265.68,5971807629.0,2922343510.0,51358135.31,858414919.5,1577243173.0,2973072722.0,0.0,912005730.7,1303077685.0,33606981.63,3146106713.0,,,2204256495.0,110248167.2,,,935569610.3,9228204144.0,61329857.12,19964266667.0,587267572.3,62361652.64,,23310804.35,110370320.3,,337080608.4,,,342322768.9,222391556.8,4789440137.0,24471060.53,897044908.7,21349034.24,,1881009454.0,10353281.16,,,,332389762.7,9993730197.0,135055952.6,141303025.9,1136716646.0,555968792.4,302000000000.0,115375384.6,1788322080.0,,,473664032.5,1891725013.0,,346300000.0\n2001,,404299140.0,53232045.16,5797957794.0,3183591796.0,66247626.46,7043145895.0,1788798311.0,131963660.1,53230373.11,3036035472.0,13112535.62,36832965.23,705481695.2,406003542.8,,,177697841.7,7454662.5,184397571.0,10930231568.0,217667939.2,,210322093.6,,8375571425.0,2763655325.0,1893098224.0,27875387284.0,,124301708.4,,54445943.53,3264438192.0,0.0,,327627160.3,1182519922.0,27425257940.0,26048131.62,2525225825.0,305900328.0,2091627274.0,384000000.0,2834256230.0,166550245.4,10222074075.0,93818539.9,349808276.5,1479270879.0,32811655.82,33276659717.0,90036137.23,35331927360.0,23829967.87,32352140.5,87718398.82,2454230.2,6183163.515,,4428103552.0,,196765577.5,14371052.9,62951976.58,629464103.8,,845055673.8,919022697.8,14600642346.0,767778364.4,10378791766.0,,0.0,9607416508.0,19519381482.0,46374382.29,528926645.6,40757967234.0,221486206.5,195365005.5,22212067.21,70846940.89,12941850828.0,2685735278.0,12574570.78,958540630.2,,819747993.6,675016502.0,23390729.43,166875000.0,160284919.2,86966741.1,1470317615.0,5961865.823,65037565.45,3540226539.0,226303002.3,44881650.23,9464417217.0,,23124715.31,50619215.98,51852489.35,12681914.7,1934473684.0,96757182.45,,24828146.93,570632287.8,28193450.44,6200391943.0,2965973987.0,64701738.38,796636889.1,1819895969.0,2842046790.0,0.0,904235449.1,1122103992.0,25230765.6,3630645595.0,,,2324811411.0,91298893.93,,,985657655.7,11683151345.0,56885903.13,21026666667.0,388091317.4,68891286.82,,29911134.61,150651459.1,,494069226.5,,,393996598.3,271488790.4,4128046006.0,19665055.21,1022526578.0,26192330.83,,1724799637.0,12468225.56,,,13945440.72,335647906.8,7216051045.0,150728196.3,136157342.5,1088575173.0,523008311.4,313000000000.0,59760610.47,1911400137.0,,,540101498.8,1802262236.0,,286700000.0\n2002,,438686245.4,58649352.5,5354118448.0,1114172483.0,64106405.65,7946766202.0,1881746741.0,139894091.9,44910067.05,3147146017.0,26000447.64,42468449.96,681816161.7,455950466.5,,241025517.6,204364237.4,7829937.5,160437935.8,9664561903.0,226182431.5,,223549258.8,10681962.96,8495399281.0,2882696762.0,1779553138.0,32137735649.0,,145626610.5,,70704230.2,3347522602.0,0.0,,242483491.0,1494390397.0,29333207849.0,33250994.54,2694082493.0,271663317.2,2100602521.0,505000000.0,2902768425.0,150764425.2,10270839019.0,122069530.7,288932333.5,1611406522.0,30914304.27,36403933933.0,94693165.45,39659529123.0,33975807.04,36975481.34,98084865.17,2259285.664,6363093.769,,4734177215.0,,158368119.3,16652243.46,63602176.06,733680739.1,,1079154824.0,1369857129.0,14749667252.0,811255940.9,3243891033.0,,0.0,10090890495.0,21610059762.0,56898147.1,521861777.2,39333708170.0,245956719.4,213894508.0,25933378.39,65182716.1,14101703315.0,2821521878.0,11435617.47,907462686.6,,452513614.8,571657950.2,19559896.4,181481441.2,153404545.7,147224840.2,1474874326.0,6978372.204,57743396.83,3479509029.0,106309576.7,49355225.63,11000356816.0,,25282128.41,53509586.96,36281137.41,14815169.79,2237894737.0,87992258.58,,20660327.01,896913201.4,34831910.07,6728153969.0,4065868548.0,85405885.72,865788853.0,1868465540.0,3273401893.0,0.0,839613251.8,1199121767.0,17020861.47,3776173214.0,,,2602230483.0,69892741.29,,760989011.0,1056136062.0,13943825063.0,51118614.12,18501866667.0,484607263.0,74361395.03,,27133961.88,161700000.0,,678511699.8,,,440059286.0,326959522.8,4354573015.0,18338440.52,1102912157.0,34290403.85,,1812993336.0,25577668.2,,,19492116.74,345424236.7,9050377182.0,140753561.8,142191594.1,1176355738.0,344263066.3,357000000000.0,45914432.99,1071363969.0,,,737366548.0,1766082898.0,,677000000.0\n2003,,670021164.4,76142881.76,5834717495.0,1374873734.0,76587998.89,9926649415.0,2381962769.0,176552162.3,43413201.31,3875697772.0,34544046.8,50757054.37,719442956.9,569054077.5,,202282838.9,231563860.4,8552225.0,173431324.8,8392905884.0,243373245.0,,301014357.8,15018926.36,9958245602.0,3270337504.0,2067983998.0,35126306608.0,213007570.5,188499655.9,78708031.88,93776668.96,3278369503.0,0.0,296933962.3,288427605.8,1885706689.0,35055088179.0,41763775.81,3199158428.0,155802495.6,2206395762.0,739000000.0,2383914898.0,181583669.0,12880532801.0,171411923.9,278673159.9,2475059743.0,37296898.08,45916973841.0,108396421.2,46942962291.0,42647402.88,53244020.29,84133949.31,1997861.937,7505161.734,,5035585542.0,,178771794.0,16345330.57,82195176.79,709399147.2,,1401561253.0,2134746704.0,16333986643.0,965199981.0,3717068450.0,,0.0,10827490776.0,26824213292.0,54845871.82,611847672.8,42486177361.0,317564315.1,245938663.8,32603112.03,67525224.43,15847047272.0,3130746413.0,11013340.9,923383084.6,,541401766.5,541695589.6,27363759.54,210822413.2,198637975.5,189144251.4,1819230070.0,8246742.537,72517018.89,3245342478.0,115827201.7,66758430.83,24189109503.0,,24333211.23,59771342.55,62449150.29,13118825.85,2881578947.0,129449089.5,,24604267.03,587461887.3,35307124.98,8356338470.0,4517514992.0,102934146.2,1132832007.0,1969310793.0,3722814794.0,0.0,891253913.4,1301286084.0,19307132.13,4150261759.0,,,3109812942.0,63511880.06,,784615384.6,1250327559.0,16973739085.0,45196268.98,18747466667.0,398110221.7,96856503.79,,28467933.59,126600000.0,,730567122.9,,,624508454.6,416906753.7,5305640404.0,31927690.93,1436210734.0,40949759.12,28831211.29,1891520588.0,34788346.39,,,33736557.0,407385561.1,10277901778.0,125254713.9,152379921.8,1427984751.0,269526777.2,415000000000.0,54133695.46,987890177.7,841930159.4,,807313244.1,2574176278.0,,194800000.0\n2004,125111557.5,817533582.2,100922358.4,6816882233.0,1465809188.0,98070488.2,11995219710.0,2679282065.0,228249631.6,44872377.15,4262663513.0,41780478.34,65684242.41,770641160.3,650748201.7,,200100307.3,314314017.8,9486150.0,168881603.1,9780111585.0,199381149.3,,314038897.1,15103589.92,11336489831.0,3503819863.0,2687320866.0,40352713136.0,250811588.4,221107924.7,137637805.5,124298437.4,4056896991.0,0.0,62047619.05,338474566.3,2042085931.0,38007611456.0,37355742.99,3578832460.0,152878466.8,2802224794.0,710000000.0,2369743586.0,,15262458637.0,204968180.2,311038749.0,2892938124.0,46798811.28,53007021661.0,125121856.6,53970302831.0,70419742.78,56353842.99,81018570.1,1931395.5,,,6267468787.0,,114893349.3,22132238.74,60561786.64,730867004.5,,1532612234.0,2428947795.0,20238566527.0,1101860647.0,5243621133.0,613724869.6,0.0,11127065294.0,30261076655.0,54533132.23,586741890.0,45339809415.0,426441724.6,259807840.7,37238358.12,69218798.63,17829864143.0,3450118765.0,11496967.52,954560530.7,3182000.0,685073220.1,619305492.4,31386955.1,270841799.8,234676202.7,229353322.5,1937523822.0,9378005.953,54471710.03,3129009392.0,135256294.8,77420331.83,29853914083.0,,27749093.06,77630605.86,,21965738.58,2823157895.0,166997177.9,,31611724.73,639990066.8,32628065.16,9377114724.0,4887380337.0,130650327.9,1285163189.0,2230689207.0,4128195489.0,0.0,922046074.5,1243221348.0,24421729.44,4778627749.0,,,3719431562.0,84466986.26,,772362637.4,1530183904.0,20955413571.0,41215761.05,20910400000.0,1240766949.0,107553687.9,,22961537.04,128000000.0,,739172065.1,,,711290428.0,493153892.9,5514710385.0,42695547.31,1388544983.0,50540901.22,31719621.04,1866937328.0,45110098.94,,,75889150.48,444651416.7,10920773882.0,127567862.8,196015853.7,1685034159.0,279301971.5,465000000000.0,,1448715983.0,915089546.6,,735485127.9,3099065125.0,98349404.04,256100000.0\n2005,122727193.1,1365055399.0,110140852.7,6604220558.0,1699579152.0,140738102.7,13237798499.0,2686166244.0,304521477.7,49557129.38,4228224643.0,44706029.56,73843342.16,773677668.2,699433973.1,,173304847.7,452684068.3,10710962.5,169262316.4,13588619736.0,248588079.8,,283835745.1,15396194.65,12988132964.0,3484636759.0,3100391591.0,45918881613.0,249872978.1,223084623.1,165205060.9,100916074.5,4914190182.0,0.0,78557142.86,380875028.8,2439538514.0,38054021788.0,44847260.59,3468452920.0,272200481.1,2924820167.0,954000000.0,2659439714.0,,15997724220.0,265961745.8,342066638.7,2999391049.0,43111350.29,52908769835.0,118111430.5,55151564188.0,214071430.1,64196566.4,,2985085.073,12116374.83,,7028428593.0,,104467679.9,18506566.6,62589274.81,799160901.2,,1596087843.0,2146270791.0,23072312925.0,1144978361.0,6796744965.0,1120278533.0,0.0,10919173621.0,29737642392.0,59329776.32,603667136.8,44300613330.0,591985249.8,316799485.4,39718288.7,70959071.47,22159512557.0,3509417808.0,11965988.44,962520729.7,8025000.0,690930769.3,644211825.1,33619893.92,303819006.4,243744714.7,272551115.8,2031131381.0,11960379.69,54018162.48,3621523413.0,127003654.4,86450742.04,32954262251.0,60811819.13,29797967.23,62247951.09,66659636.65,38213561.9,3120337779.0,192072120.8,,32798198.18,674208144.8,34123573.95,9566980053.0,4884904928.0,159326023.8,1389770959.0,2739011704.0,4587117425.0,0.0,1203039421.0,1372702435.0,30464707.68,5896404861.0,,,4039322489.0,77468937.97,,887500000.0,1975975151.0,27336977274.0,44996351.89,25392038601.0,1164995936.0,124403755.3,,23552130.23,132900000.0,,629500942.8,,,823313455.4,514172799.5,5518466926.0,59471673.9,1450324657.0,55491517.97,33238035.29,1984492828.0,,,8230000.0,97752858.93,468464580.0,12081156314.0,139493591.3,216667041.1,2405492582.0,347323784.9,503000000000.0,,2665390597.0,1026426801.0,,815627464.0,3566963815.0,139509353.6,131400000.0\n2006,131346231.3,1970309115.0,140983900.7,7165418652.0,1847553130.0,188189116.4,14239779513.0,2640185362.0,717111853.6,44717502.04,4307895341.0,46786130.93,72632867.33,829682794.8,750992451.6,,178375570.1,631831238.1,12283037.5,179525489.2,16404867307.0,293436463.5,,272934274.8,,14809892803.0,3328973394.0,3855358069.0,55337487669.0,267360247.9,256927843.3,205102086.6,126569641.8,5326664238.0,0.0,76587443.95,387703672.0,2449963710.0,38092382653.0,49515814.11,3896730668.0,259240325.1,3093978245.0,950000000.0,2952520159.0,,17252217613.0,315179053.3,345687017.0,3128517474.0,54067168.06,54516076830.0,130237717.3,57482975674.0,404172025.9,75732607.93,,2786319.244,,,7607186182.0,,130546929.2,19176973.64,75595918.54,849431034.7,,1410071771.0,2611875117.0,23951927958.0,1190379117.0,8751474767.0,1236081013.0,0.0,11558970817.0,29633022263.0,72645523.01,701551481.0,41552592886.0,793027147.5,375807203.2,47207036.73,75881313.59,25177237741.0,3597816498.0,13410565.06,1008955224.0,3925000.0,614356296.2,791491040.7,35224579.31,351605788.8,247133192.2,367825490.4,2134594876.0,16449497.76,53914017.64,4082501468.0,126008876.7,96004895.87,,62347815.51,39189624.48,57439135.78,81906180.19,31090549.5,3266197406.0,199559185.1,,,776148058.3,37285145.13,10217765740.0,5011748967.0,157247689.5,1463950819.0,3022626788.0,4969197611.0,0.0,1291060140.0,1607271267.0,31307966.36,6619413759.0,,,4066783668.0,106557406.1,,1065741758.0,2251493425.0,34517781619.0,54557648.04,29580507343.0,1647839194.0,148555145.4,,28022458.48,142100000.0,,705062714.3,551454504.4,,911370626.8,608833753.4,5577203266.0,58520575.05,1435215692.0,222991451.4,,2441917005.0,,,17105000.0,115560463.1,497212664.0,13363298981.0,147417924.8,218533948.5,2986475248.0,392798690.7,528000000000.0,,3630088496.0,1286528867.0,,822130536.1,3506139658.0,205852231.6,161700000.0\n2007,219580214.3,2032432883.0,194840309.2,8460993873.0,2296448242.0,280108688.3,17186440962.0,3499817967.0,946599792.1,46308706.22,5163979974.0,,107816728.5,953464223.6,1032154228.0,,195049685.1,746943264.0,13759075.0,221280687.8,20485758015.0,323137150.8,,306451402.7,19112519.74,17417139931.0,3524746536.0,4022478104.0,68011562228.0,323619193.5,296698917.3,205217223.0,168079588.2,6775762767.0,0.0,83365638.77,405176368.5,2707677752.0,42551851943.0,34518711.91,4175652589.0,274775680.8,3945815125.0,1310000000.0,3306908257.0,,20065668635.0,444197516.0,360140308.6,3296557750.0,75576918.3,60594986847.0,,65986089657.0,931750564.2,126077789.0,,4547026.14,,196314371.7,8533090258.0,,135925872.8,24971954.12,95924340.17,978853732.1,,1776464117.0,3348758342.0,28254773450.0,1372225370.0,9330901882.0,1989948747.0,0.0,12128941564.0,31982431792.0,83511942.1,1032440056.0,40530045688.0,1359776099.0,494684896.7,50909587.1,79015425.88,27726129585.0,4115736734.0,14838865.54,1152238806.0,3486000.0,639137046.2,1054816810.0,39834671.56,442004493.3,286051368.8,481492627.1,2408350250.0,22718473.79,81936943.67,4779835655.0,162567237.1,110376888.0,,64190474.63,56561859.19,68625364.26,,33599605.59,3970537327.0,228174673.6,,,971321378.6,39472043.8,11480377424.0,5875288100.0,169575397.1,1713995943.0,3244603381.0,5342575138.0,0.0,1332655376.0,2014371029.0,39287099.33,8589136364.0,,,4366184075.0,132393616.2,,1562225275.0,2607689942.0,43534994996.0,55580440.8,35469513009.0,2427072595.0,192807975.5,,29076876.18,165600000.0,,971570564.6,587966866.7,,1139194488.0,692654912.6,6386221162.0,61877516.72,1599033723.0,389135909.6,,3522634436.0,,,23735000.0,124750514.8,490650558.8,15319161863.0,166215543.3,252119246.4,4096039604.0,416045332.5,557000000000.0,,4351560317.0,1784217422.0,,1050499364.0,3525684244.0,232278664.4,\n2008,240532594.6,3163591147.0,255677957.8,11571681416.0,2788980205.0,395994365.4,18633092318.0,3746731607.0,1607799226.0,43856319.95,6295821584.0,64724601.11,116999586.9,1030020018.0,1038051933.0,,233292390.7,883027522.9,18717737.5,327194708.2,24452903036.0,361989034.5,,332400254.3,31511483.79,19342058405.0,4098459038.0,4641877576.0,86362099113.0,368910574.9,346586125.7,159998426.6,207724344.3,9051130502.0,0.0,89057268.72,453803054.2,2918695853.0,48081444318.0,36274835.28,4788030121.0,333538881.6,5172336907.0,1646000000.0,3779880350.0,,22227721830.0,505779818.3,388187596.7,3958118334.0,53585658.62,66009448127.0,,65619450480.0,1090160251.0,113668160.2,,17163533.46,,292754658.8,10574138499.0,,166494048.3,30520593.42,132428400.6,1295957074.0,,1867877499.0,3232202215.0,33002376727.0,1582890834.0,11081950209.0,3116304020.0,0.0,14191949919.0,36839989746.0,130699170.7,1358383580.0,46361468280.0,1540810813.0,580011940.7,61124321.93,82630723.43,26072410508.0,4430342077.0,16267888.96,1169485904.0,3907000.0,1100068652.0,1511363007.0,27350681.86,541390194.6,236720167.1,581752272.9,2944958473.0,36845650.5,103271539.5,4939665939.0,172658158.9,142919351.1,,85106382.98,66749871.33,83709455.73,123323383.8,44464251.4,4411795565.0,266250021.2,,53630486.48,1615533211.0,42659728.78,12374848940.0,6370921986.0,187069695.8,1661242822.0,3462483745.0,5226678787.0,0.0,1503663891.0,2270904919.0,39332022.27,9349421394.0,,,4812099462.0,168154857.4,,2317500000.0,3000404945.0,56183785393.0,67660359.62,38222933333.0,3228000000.0,216870289.5,,23645736.56,173000000.0,,1111631538.0,896390706.9,,1411710285.0,829384406.9,6024791006.0,66657830.2,1732416848.0,611426848.7,57009189.27,4465994062.0,52467120.6,,23651000.0,139098455.7,578911487.3,17127313222.0,194000300.9,311856269.3,4811019855.0,567703932.8,621000000000.0,,5660456451.0,2137625597.0,,1196411766.0,3285925081.0,278055135.8,\n2009,251869514.8,3311193245.0,182736862.5,13836351259.0,2981852290.0,359499343.5,18960138513.0,3334754940.0,1472909977.0,,5620670063.0,,127333296.6,1258791157.0,963254164.0,,242471357.8,675426505.1,17267537.5,345777777.8,25648809911.0,349759722.8,,330147278.7,35992384.36,18936226052.0,4055544323.0,3902221588.0,106000000000.0,420059044.5,343265154.0,122378011.0,,9033202673.0,0.0,92462555.07,471352781.1,2718559513.0,47470073335.0,,4337355690.0,320855289.2,5280588156.0,1949000000.0,4017404478.0,,20178274985.0,434340865.2,339627768.0,3940584835.0,51285722.32,66884028879.0,,57914627858.0,603655214.9,118290743.9,,7095299.575,13744583.7,371927587.9,10641348183.0,,147410544.1,31055650.89,156802557.3,1129098496.0,,1475818169.0,3304459138.0,38722154392.0,1415725373.0,12584623339.0,3237179487.0,0.0,14030376087.0,34054481324.0,114808331.8,1568309859.0,51465158208.0,1271890276.0,578071672.4,67213747.35,136589738.0,24575661939.0,4208871206.0,13973614.53,1426202322.0,7193000.0,,1522232372.0,47399768.93,404826028.7,222959826.9,363809251.1,3055069442.0,24906387.27,70985221.42,4855514856.0,158716661.5,144434608.4,,76683387.91,37633746.0,84302809.4,114824329.4,58797381.82,3964817705.0,299516030.2,,53000300.73,1504486172.0,41721772.9,12131812076.0,6195603602.0,209703502.0,1623013593.0,3367490247.0,5274564971.0,0.0,1848562930.0,2115785124.0,52048171.78,7903812008.0,,,4949690419.0,168486261.9,,1948351648.0,2225144540.0,51532116798.0,75278486.05,41267200000.0,3180483010.0,214824243.0,,26405564.66,189900000.0,,974288479.2,609898632.6,,1350294439.0,798868642.2,5062962024.0,75911617.99,2181974581.0,738903737.1,55130817.09,4799654668.0,47529274.32,,36481000.0,138523710.2,564775933.7,16352301844.0,219476865.3,293527670.7,3452467130.0,577056008.5,669000000000.0,,4055379599.0,2401450914.0,,1420775264.0,3592687702.0,220962285.8,\n2010,298146852.5,3500794836.0,185893242.0,17504697073.0,3475348407.0,395011507.8,23217692816.0,3218351224.0,1476608734.0,,5244720513.0,,123700474.7,1624625086.0,893467534.0,,219915489.5,767699285.9,15337250.0,327413146.1,34002944470.0,390719540.0,,348672725.3,51585274.5,19315688825.0,4115407849.0,4894081125.0,116000000000.0,387692140.0,354054397.8,183682097.5,218390920.6,10422054494.0,0.0,94277533.04,477587428.6,2497902955.0,46255521194.0,,4503492127.0,354856781.4,5671309117.0,2094000000.0,4407286453.0,,19710785450.0,332231196.9,303617033.1,3717180505.0,50408953.71,61781748108.0,268738503.9,58082848795.0,454178215.2,122480468.5,,,17129808.17,,8163619387.0,,169798840.1,31075055.49,170186979.7,1015876654.0,,1350820413.0,4663365759.0,46090445657.0,1274228688.0,13561272454.0,3752905983.0,0.0,14605298604.0,32020819951.0,115571396.0,1557887324.0,54655450735.0,1501815344.0,622049847.8,77237992.31,167857928.0,28175181219.0,4335204653.0,15356402.95,1585406302.0,8458000.0,,1532026109.0,70661037.37,326320918.7,274135432.5,259672124.2,3160804832.0,18335718.27,56922892.89,5897198481.0,130021469.1,146786545.7,,75094861.9,54855717.51,99189931.71,,49984217.91,3854285351.0,396539101.4,,66889841.44,1990099669.0,44272442.92,11220523280.0,6498659038.0,254950072.1,1930748002.0,3671391417.0,5974613176.0,0.0,2178945723.0,2438189569.0,46335624.37,8790170132.0,,,4718924038.0,204605254.8,,1876758242.0,2086220460.0,58720227609.0,74514417.29,45244533333.0,,195732892.9,,25062278.63,201000000.0,,872339631.7,650910667.8,,1137680536.0,772085107.5,5885935800.0,102032175.0,2346021283.0,615817007.5,56832843.04,4962419956.0,53756933.71,,26389000.0,143063064.8,571189045.7,17939370512.0,282725098.8,608685868.6,3729503859.0,755659469.7,698000000000.0,,3991194835.0,2672286425.0,,1448153377.0,4188168092.0,280187778.6,98293000.0\n2011,325807003.7,3639496374.0,197006789.2,19181756297.0,4051930105.0,390871433.9,26597198655.0,3409721209.0,3080084996.0,,5499370964.0,,138850860.2,1801539802.0,829031753.5,,211878260.6,756277351.3,15416250.0,403568566.1,36936209896.0,415371529.0,,363324481.2,49874328.73,21393720864.0,4973863849.0,5686752070.0,138000000000.0,357330259.0,347477885.7,238787546.6,,10306578506.0,0.0,93744493.39,479735318.4,2474313259.0,48140347951.0,,4518590127.0,348559830.1,8652237040.0,2453700000.0,4463974191.0,,19695435494.0,389237580.9,332441772.4,4099505807.0,60785527.47,64600927220.0,265965337.6,60270435687.0,468779626.8,234327479.6,,,17519804.35,,7128608267.0,,197433150.7,32416747.54,200358405.9,1106464042.0,,1472069832.0,5838026186.0,49633815794.0,1300331547.0,14277667361.0,4278632479.0,0.0,16343210462.0,33828804971.0,133638559.8,1594788732.0,60762213841.0,1803970782.0,646678106.7,86423386.41,192159418.5,30991707946.0,5393526319.0,19009820.6,1626533997.0,13271000.0,,1751910641.0,58169320.75,344605215.4,256962415.8,296834929.2,3342698956.0,22966963.69,71989808.01,6471388439.0,132461994.8,161062674.6,,79376663.82,87157848.16,118871183.0,,52804842.99,4692483660.0,443591424.5,,83947561.38,2384936022.0,51453111.13,11647934608.0,7232260585.0,284518851.1,2080091009.0,5000715215.0,6954787511.0,0.0,2355167834.0,2701492158.0,64193136.14,9455422988.0,,,4904393519.0,285106240.8,,,2379871482.0,70237523951.0,75383928.56,48530933333.0,,230190350.7,,25476183.91,220700000.0,,986958193.7,1052721970.0,,1064842811.0,665679671.4,6324747364.0,106629408.9,2494887483.0,609706993.1,59018874.0,5512983861.0,71342116.79,,20530000.0,146080695.2,715239597.1,17304881561.0,307473984.2,607135070.9,3684691424.0,824833542.2,711000000000.0,,3577531587.0,2686520590.0,,1612254443.0,4594154078.0,309113764.2,198438000.0\n2012,238583385.4,4144634851.0,183204695.7,19024098026.0,4563217859.0,380571678.9,26216580848.0,3187227449.0,3246122613.0,58966662.28,5168997834.0,78223091.04,147729698.9,1823425076.0,807529319.0,,197344650.2,817069894.1,15219125.0,499870043.4,33987005074.0,411261473.9,,326874161.7,42746025.19,20452107111.0,4592165378.0,5466101782.0,157000000000.0,407596534.1,354447463.1,332493979.4,,11706271913.0,0.0,126872246.7,414496321.4,2220610395.0,46470870905.0,,4422458084.0,396187178.6,9326287144.0,2589776000.0,4557748767.0,,18860623363.0,436852911.6,366539017.7,3943239958.0,59221516.41,60035153811.0,278143957.1,58495656721.0,491982529.4,337260972.7,168913357.5,11173079.86,24491750.68,,5914988423.0,,224366543.6,33542606.6,212341274.3,955320163.6,,1322277703.0,6531097955.0,47216920048.0,1157531730.0,16493963287.0,4141066054.0,0.0,15567095862.0,29781008205.0,137635505.7,1472816901.0,60011530195.0,2177543205.0,840072590.0,107529842.9,217305727.7,31951760810.0,5941536637.0,20327157.66,1757213930.0,15179000.0,2987413408.0,1474902628.0,53240145.82,328631681.6,237503049.8,255740342.6,3402700836.0,23870072.82,68636017.8,6978776719.0,119410402.5,148865779.9,2969236076.0,67712201.3,113622769.9,139100553.3,142299912.3,46155953.69,4507252007.0,412163503.6,,148865779.9,2316478200.0,70132969.8,10364720787.0,7143962183.0,256686839.5,2094946041.0,9250650195.0,7478971082.0,0.0,2857983382.0,2898685257.0,110623185.3,8986838792.0,,,4137254045.0,320909756.6,,,2102886223.0,81469399931.0,79793910.09,56497866667.0,,196661489.0,,29758934.08,224300000.0,,853622633.2,988225988.7,,1020180035.0,543496416.5,6243671605.0,90639795.27,,,62931049.68,5491915221.0,76260471.83,,33388000.0,168762442.5,681225950.6,17958240406.0,359739418.8,351838247.0,4136888486.0,924640335.6,685000000000.0,,5114847100.0,3360860380.0,,1618840127.0,4489590096.0,346301423.1,318272000.0\n2013,217194107.1,6090751702.0,180015508.8,23561061947.0,5137974301.0,444551859.5,24825262589.0,3229065841.0,3367574161.0,60859500.09,5263164883.0,86003157.64,166136345.2,2047989071.0,899584003.5,,197617188.8,971107820.3,17778875.0,564409840.8,32874787231.0,412094279.8,,306438573.6,47923245.08,18515731210.0,5032883664.0,5529879481.0,180000000000.0,430003643.4,392840660.7,374475561.3,367057323.3,12503812627.0,0.0,119383259.9,384925361.0,2148784401.0,45930540563.0,,4216647585.0,383380254.1,10161588239.0,2735825000.0,4359834244.0,,17242959322.0,479314460.8,345064165.8,4161139945.0,58108276.9,62417099178.0,282163387.6,56861759588.0,441878927.0,254997057.4,196818705.6,10378890.69,21710792.65,,5655183036.0,,249757853.4,35163485.79,294917779.4,956952644.1,51595.84748,1280050962.0,8384028601.0,47403528801.0,1195763444.0,11997186984.0,7780188679.0,0.0,17319707976.0,29957445905.0,128431323.0,1444929577.0,49023932407.0,2551124375.0,860560896.1,119000613.9,243470109.9,34311220715.0,5698067233.0,22677720.33,1935718241.0,15111500.0,3964690154.0,1600841410.0,47941183.17,354862149.7,258655906.2,283568932.7,4065552317.0,26710522.13,71877874.49,7837613530.0,126506348.7,153833697.7,2366989085.0,64836243.08,103464069.9,157892114.4,144215483.5,62925520.09,4915722759.0,389958736.7,,106064286.3,2418760171.0,74532010.94,10226260325.0,7391829787.0,281038425.7,2134105838.0,8766319896.0,7645455529.0,0.0,3305451871.0,3377027861.0,105100890.6,9275711727.0,,,4724102082.0,371215575.4,,,2452512981.0,88352896464.0,82480715.58,67020000000.0,,236737916.0,,31684939.41,237500000.0,26050000.0,919809908.3,981983050.8,,967923107.9,506742932.1,6528737467.0,86040376.76,,726459396.0,72419237.31,5901296947.0,,,31683000.0,211176025.9,759358881.2,18662574078.0,443379945.5,300075573.4,4386463155.0,1045084368.0,640000000000.0,,6199698500.0,3727249276.0,,1648750524.0,4118208483.0,381345802.1,356700000.0\n2014,268227074.2,6841864484.0,178120368.0,22755071477.0,4979442724.0,457807021.8,25783708714.0,3305159256.0,3427179917.0,62177294.74,5191509381.0,92990706.19,177166954.9,2355991525.0,835716950.6,,190380454.6,1010827014.0,19916875.0,625885094.1,32659614241.0,527785231.7,,346281450.3,38407006.26,17853720278.0,4612776715.0,5102779356.0,201000000000.0,521260479.6,401529079.8,341224738.6,704893662.2,11845957098.0,0.0,125638766.5,357806840.0,2022883295.0,46102673010.0,,4056861511.0,437572091.1,9724379972.0,2786519000.0,5085120542.0,,17178549315.0,512119045.1,414476025.8,3985508352.0,46079423.53,63613569143.0,208124753.5,59182858554.0,415642426.2,252653419.0,196945589.8,14599956.87,21470829.16,166540254.6,5531285909.0,,245672981.8,39280999.18,314071900.2,906625906.4,53511.5951,1209801890.0,6929255301.0,50914108341.0,1192733691.0,9901105170.0,6921269719.0,0.0,18485829607.0,27701034335.0,121309728.7,1548873239.0,46881244398.0,2306464574.0,819044152.8,127970989.4,277969040.2,37552328673.0,5832249789.0,,2270065960.0,14531000.0,3755658598.0,1914586604.0,47693200.77,426900271.7,279019013.1,295728965.3,4048610929.0,27565618.85,69676703.34,8663381606.0,124185105.7,218118382.3,2372895303.0,67544018.04,105102478.6,173752180.8,144844330.7,49454513.58,4919244942.0,537453813.3,,145600356.0,2357665891.0,81391931.09,10332602878.0,7334073604.0,328115662.2,2274148859.0,8213524057.0,8654930762.0,0.0,3217579346.0,3103128266.0,112375527.6,10345153575.0,,,4111548064.0,398370979.3,,,2691470287.0,84696504653.0,90937755.73,80762400000.0,,239893611.6,,48810630.79,233900000.0,60258000.0,913368512.8,1301525424.0,,997703821.8,486194870.4,6555518064.0,81355330.93,,392382917.2,83080003.64,5729784358.0,104280654.0,,29624000.0,188885941.7,908357287.6,17772167745.0,507287182.6,325662842.0,4033331370.0,1034500559.0,610000000000.0,,1554727108.0,4255721581.0,,1714830844.0,3892469155.0,443604396.0,368100000.0\n2015,199518614.8,3608299115.0,132350667.6,,5482616701.0,447379807.5,24045569111.0,2665409782.0,2943396693.0,66164584.44,4202062770.0,90896085.89,147934736.7,2815281641.0,660847880.3,,162215681.9,723659955.0,19717625.0,575524224.9,24617701683.0,424022039.2,,383739877.5,26703863.39,17937641895.0,4521076909.0,4630772774.0,214000000000.0,569671147.2,353815199.9,491276856.5,,9127165375.0,0.0,118370044.1,327891760.0,1779887189.0,39812576245.0,,3364047774.0,458007157.5,10412714003.0,2597510000.0,5475490833.0,,15188853150.0,463568814.5,442551536.5,3399134967.0,42418008.45,55342131529.0,170374503.3,53862185493.0,299514176.3,190515191.5,221414232.3,14288131.91,17036943.11,,4818121326.0,,252455480.6,46447838.13,356259475.5,753544947.7,73562.29689,1132476292.0,7639095193.0,51295483754.0,997005656.0,10588769671.0,9604231011.0,0.0,16969432086.0,22180845070.0,123854135.7,1614929577.0,42106103306.0,2046197674.0,843667802.8,117003250.6,325188062.3,36570769323.0,5735132890.0,,2239416094.0,14799000.0,,2057866407.0,44025926.25,471221026.9,276145059.3,282688255.5,3268363376.0,23051814.59,58932847.76,7739521462.0,99983659.56,309170682.2,2552370442.0,56891427.3,101705866.0,119657390.7,132931217.7,40793415.43,4532069852.0,518231065.4,,,2065557663.0,98932947.15,8667849617.0,5815228175.0,323797729.6,1943757736.0,7533550065.0,9483482373.0,0.0,3312214570.0,3335552977.0,99840642.68,10212785781.0,,,3565420872.0,386538864.3,,,2580594158.0,66418708184.0,103563214.7,87185866667.0,2279621640.0,214827965.2,,39226514.27,247700000.0,46614000.0,724151880.2,1151920377.0,,985915493.0,400771875.3,5387123174.0,73527854.06,,220982331.6,69977174.74,5724812311.0,95763184.88,,36959000.0,202106905.5,979494041.9,15880927524.0,517075761.8,306140404.6,3616896001.0,969906845.5,596000000000.0,,320539158.0,4562632501.0,,,3488867948.0,372447569.8,376677000.0\n2016,185878310.1,2764054937.0,130853162.6,,4509647660.0,431396218.6,26382947050.0,2885947386.0,1396969108.0,66462843.08,4314102067.0,79581568.05,149467363.2,3239738758.0,755406457.6,,157912010.6,597207572.1,21712887.5,552381263.9,24224746901.0,403366488.7,,514463449.2,26832998.82,17782775543.0,4571348247.0,4796010962.0,216000000000.0,602538731.2,387437830.9,395733745.2,501812144.9,8675980823.0,0.0,123656387.7,295355010.0,1954935000.0,41579494874.0,,3592727944.0,479722172.8,10217081700.0,2513200000.0,4513022527.0,,14014439635.0,497653404.3,490177248.5,3415008250.0,42649282.3,57358414419.0,202815390.7,48118943518.0,315194446.3,161751874.3,161856744.5,,,18233154.2,4963484464.0,,290912704.0,51562130.82,363272338.5,702005705.9,64514.31661,1288676093.0,7385408685.0,56637622641.0,1001610418.0,12263957415.0,5970383698.0,0.0,14783814748.0,25033027895.0,137649061.8,1768309859.0,46471287714.0,1281103432.0,933103002.5,115645311.8,382100547.3,36885283430.0,6446742131.0,,2606456908.0,14712000.0,,1741456650.0,41489543.36,635448102.4,260729679.6,406859305.4,3327031890.0,29656360.86,59394995.92,6019769275.0,101492863.4,362398902.2,2455784120.0,61714551.61,96365298.28,112203469.3,136064876.0,35748121.99,4169374001.0,425388449.6,,166192292.3,1723204266.0,85073598.44,9115240932.0,5997385048.0,356495278.6,2093352062.0,7935955787.0,9973768059.0,0.0,2536072335.0,4357991313.0,79051319.31,9164190587.0,,,3569059626.0,343232340.6,,,2644159836.0,69245309461.0,107278618.7,63672800000.0,2748511976.0,304764264.2,,37414732.17,247600000.0,47706000.0,710397717.1,135338143.6,,1003048084.0,449177539.1,5427549191.0,72447621.01,,309567431.7,82019690.41,5876294938.0,,,26217000.0,216276660.0,987734705.2,17853980850.0,544218297.9,318551679.3,3423286811.0,988223629.6,600000000000.0,,218154892.9,5017401787.0,,,3169756001.0,299504759.9,358065000.0\n2017,191407113.2,3062872914.0,144382688.7,,5459643672.0,443610413.3,27691112417.0,3138359204.0,1528859592.0,63908678.43,4484652582.0,116142782.4,191065838.8,3594007980.0,824187016.9,,164638050.3,631145399.2,23456750.0,574070189.6,29283050314.0,346706804.4,,522430455.5,27516264.18,21343371455.0,4628401509.0,5370018135.0,228000000000.0,501578732.2,408157575.1,295236074.3,371937055.1,10018029818.0,0.0,122552919.0,357380920.8,2077722061.0,45381722042.0,,3764033344.0,533077263.1,10073364021.0,2462700000.0,2765588434.0,,16043533257.0,537440226.9,503158174.3,3429968212.0,45705790.34,60417498822.0,267430770.8,46433303401.0,308227183.5,189129841.5,199317873.4,,,,5093788906.0,,275014798.5,59724939.47,398460128.4,784300763.1,73613.49246,1463013911.0,8178144377.0,64559435281.0,1025063447.0,13931196490.0,7416385135.0,0.0,15581608422.0,26447892915.0,143545555.4,1939718310.0,45387031802.0,1390619095.0,1015384782.0,121515805.4,463810835.2,39170682136.0,6764636914.0,,2441074857.0,15334000.0,,1866534439.0,52594810.37,812108700.0,357671613.7,509390110.7,3461461531.0,30629080.99,66906090.19,5781437375.0,111826544.2,458709424.7,2221961060.0,65734886.38,82755201.79,128320232.4,143769318.6,47416537.07,3494832257.0,457882191.3,,200183930.0,1621218176.0,86725444.84,9580685498.0,6465750412.0,404705219.5,2328156653.0,6802665800.0,11461253917.0,0.0,2665785313.0,3755351173.0,71907641.56,9870680628.0,,,3646515110.0,348179657.5,,,3622068492.0,66527303992.0,115716812.4,70400000000.0,4382998817.0,305441261.6,,39577826.0,260900000.0,60406000.0,801700087.2,72388104.57,,1049074347.0,473796757.2,5526592999.0,88678493.74,,219081031.4,88414114.92,6305880241.0,,,25442000.0,202766994.3,858949581.3,17824007487.0,611215551.9,346762883.8,3647565178.0,1165710349.0,606000000000.0,,464821762.6,5073853534.0,,,3638936588.0,339664531.4,340522000.0\n2018,198086263.3,1983613748.0,180488725.1,,4144991771.0,608854649.9,26711834225.0,3367460383.0,1708941176.0,65436595.26,4959692173.0,90212425.99,312467611.0,3894695211.0,1095591047.0,,221131597.1,715166688.7,23083112.5,618842083.1,27766427104.0,346588691.0,,529481042.0,30951301.32,21620598712.0,4795847181.0,5570724563.0,250000000000.0,607848217.9,429892180.6,295348364.6,292260465.3,10602860967.0,0.0,,381879772.9,2710017583.0,49470627811.0,,4228194254.0,602522387.0,9583724288.0,2549400000.0,3109997892.0,,18248291491.0,618486125.4,496621069.7,3849013845.0,48412174.69,63799676593.0,261217395.1,49997192521.0,316508368.1,218444253.6,209150578.3,11487224.94,,,5227152013.0,,278420891.5,59809426.6,410414895.1,889523365.3,79690.88817,1642338440.0,7437197348.0,66510289108.0,1207582357.0,13194151137.0,6317977150.0,0.0,15946788601.0,27807513898.0,207772685.8,1957746479.0,46617954864.0,1613589333.0,1097458153.0,121163619.9,543205183.3,43069973343.0,7296266526.0,,2775557816.0,15786500.0,,1681433577.0,51064347.75,1030416770.0,419372654.8,679862611.1,3696856945.0,33957719.1,73258425.24,6567509336.0,117383985.5,495165301.0,2030465547.0,83806050.31,96067489.86,145206801.9,159013353.0,58369173.44,3469828207.0,451546508.8,,229639906.1,2043051719.0,81593932.69,11242755804.0,7067073381.0,398521544.9,2262928312.0,6710013004.0,11375525626.0,0.0,2708912280.0,3769741011.0,60592819.14,11596155291.0,,,4247842971.0,386556389.6,,,4608673550.0,61387546980.0,118959174.0,67554666667.0,1047878720.0,346772974.6,,29622478.1,266460000.0,61556000.0,904323391.5,59353054.3,,1280643981.0,529496122.7,5755367603.0,87787078.57,,232930989.8,104378994.6,6829203403.0,,,20610000.0,169332467.8,844227367.1,18967113031.0,675475234.1,408367566.7,4750219044.0,1168130814.0,649000000000.0,,,5500000000.0,,,3639879165.0,378025431.0,420364000.0\n"
  },
  {
    "path": "tests/test_bar.py",
    "content": "# Legacy tests for barplot, will be removed in 2.0.0\nimport pytest\n\nfrom pynimate.bar import Barplot\n\n\ndef test_barplot_set_bar_color_list(sample_data1):\n    bar = Barplot(sample_data1, \"%Y-%m-%d\", \"3MS\")\n    bar_colors_list = [\n        \"#2a9d8f\",\n        \"#e9c46a\",\n        \"#e76f51\",\n        \"#a7c957\",\n        \"#e5989b\",\n    ]\n    bar_colors = {\n        \"Afghanistan\": \"#2a9d8f\",\n        \"Angola\": \"#e9c46a\",\n        \"Albania\": \"#e76f51\",\n        \"USA\": \"#a7c957\",\n        \"Argentina\": \"#e5989b\",\n    }\n    bar.set_bar_color(bar_colors_list)\n    assert bar.datafier.bar_colors == bar_colors\n\n\ndef test_barplot_set_bar_color_dict(sample_data1):\n    bar = Barplot(sample_data1, \"%Y-%m-%d\", \"3MS\")\n    bar_colors = {\n        \"Afghanistan\": \"#2a9d8f\",\n        \"Angola\": \"#e9c46a\",\n        \"Albania\": \"#e76f51\",\n        \"USA\": \"#a7c957\",\n        \"Argentina\": \"#e5989b\",\n    }\n    bar.set_bar_color(bar_colors)\n    assert bar.datafier.bar_colors == bar_colors\n\n\ndef test_barplot_set_bar_color_error_length(sample_data1):\n    with pytest.raises(AssertionError):\n        bar = Barplot(sample_data1, \"%Y-%m-%d\", \"3MS\")\n        bar_colors = [\n            \"#2a9d8f\",\n            \"#e9c46a\",\n            \"#e76f51\",\n            \"#a7c957\",\n        ]\n        bar.set_bar_color(bar_colors)\n        assert bar.datafier.bar_colors == bar_colors\n\n\ndef test_barplot_set_bar_color_error_col_mismatch(sample_data1):\n    with pytest.raises(AssertionError):\n        bar = Barplot(sample_data1, \"%Y-%m-%d\", \"3MS\")\n        bar_colors = {\n            \"India\": \"#2a9d8f\",\n            \"Angola\": \"#e9c46a\",\n            \"Albania\": \"#e76f51\",\n            \"USA\": \"#a7c957\",\n            \"Argentina\": \"#e5989b\",\n        }\n        bar.set_bar_color(bar_colors)\n        assert bar.datafier.bar_colors == bar_colors\n\n\ndef test_barplot_set_text_error_empty_text(sample_data1):\n    with pytest.raises(AssertionError):\n        bar = Barplot(sample_data1, \"%Y-%m-%d\", \"3MS\")\n        bar.set_text(\"text1\")\n\n\ndef test_barplot_set_text_priority(sample_data1):\n    bar = Barplot(sample_data1, \"%Y-%m-%d\", \"3MS\")\n    bar.set_text(\"text1\", text=\"Test\", callback=lambda *args: \"Test\")\n    assert \"s\" not in bar.text_collection[\"text1\"][1]\n\n\ndef test_barplot_remove_text(sample_data1):\n    bar = Barplot(sample_data1, \"%Y-%m-%d\", \"3MS\")\n    bar.set_text(\"text1\", text=\"Test1\")\n    bar.set_text(\"text2\", text=\"Test2\")\n    bar.set_text(\"text3\", text=\"Test3\")\n\n    bar.remove_text([\"text1\", \"text2\"])\n    assert list(bar.text_collection.keys()) == [\"time\", \"text3\"]\n"
  },
  {
    "path": "tests/test_barhplot.py",
    "content": "from pynimate.barhplot import Barhplot\n\n\ndef test_barhplot_xylim(sample_data1_bardfr):\n    barhplot = Barhplot(sample_data1_bardfr)\n    assert barhplot.xlim == [None, 10] and barhplot.ylim == [0.5, 5.6]\n\n\ndef test_barhplot_generate_column_colors(map_data):\n    base_plot = Barhplot.from_df(map_data, \"%Y\", \"MS\")\n    bar_colors = {\n        \"Argentina\": (0.278791, 0.062145, 0.386592),\n        \"Australia\": (0.283197, 0.11568, 0.436115),\n        \"Brazil\": (0.280255, 0.165693, 0.476498),\n        \"Canada\": (0.270595, 0.214069, 0.507052),\n        \"China\": (0.253935, 0.265254, 0.529983),\n        \"Germany\": (0.235526, 0.309527, 0.542944),\n        \"Spain\": (0.21621, 0.351535, 0.550627),\n        \"France\": (0.197636, 0.391528, 0.554969),\n        \"United Kingdom\": (0.179019, 0.433756, 0.55743),\n        \"India\": (0.163625, 0.471133, 0.558148),\n        \"Iran\": (0.149039, 0.508051, 0.55725),\n        \"Israel\": (0.135066, 0.544853, 0.554029),\n        \"Italy\": (0.122606, 0.585371, 0.546557),\n        \"Japan\": (0.120081, 0.622161, 0.534946),\n        \"South Korea\": (0.134692, 0.658636, 0.517649),\n        \"Kuwait\": (0.170948, 0.694384, 0.493803),\n        \"Myanmar\": (0.232815, 0.732247, 0.459277),\n        \"Netherlands\": (0.304148, 0.764704, 0.419943),\n        \"Poland\": (0.386433, 0.794644, 0.372886),\n        \"Romania\": (0.477504, 0.821444, 0.318195),\n        \"Russian Federation\": (0.585678, 0.846661, 0.249897),\n        \"Saudi Arabia\": (0.688944, 0.865448, 0.182725),\n        \"Sweden\": (0.79376, 0.880678, 0.120005),\n        \"USA\": (0.89632, 0.893616, 0.096335),\n    }\n    assert base_plot.column_colors == bar_colors\n\n\ndef test_barhplot_ith_bar_attrs(sample_data1):\n    barhplot = Barhplot.from_df(sample_data1, \"%Y-%m-%d\", \"6MS\")\n    bar_ranks = [\n        [3.0, 4.0, 2.0, 5.0, 1.0],\n        [2.0, 4.0, 1.0, 3.0, 5.0],\n        [2.0, 4.0, 1.0, 3.0, 5.0],\n        [1.0, 3.0, 5.0, 2.0, 4.0],\n        [1.0, 3.0, 5.0, 2.0, 4.0],\n    ]\n    bar_lengths = [\n        [1.0, 2.0, 1.0, 5.0, 1.0],\n        [1.5, 2.5, 1.5, 4.0, 2.5],\n        [2.0, 3.0, 2.0, 3.0, 4.0],\n        [2.5, 3.5, 3.5, 3.5, 4.5],\n        [3.0, 4.0, 5.0, 4.0, 5.0],\n    ]\n\n    for i in range(barhplot.length):\n        ith_attrs = barhplot.get_ith_bar_attrs(i)\n        assert list(ith_attrs.bar_rank) == bar_ranks[i]\n        assert list(ith_attrs.bar_length) == bar_lengths[i]\n"
  },
  {
    "path": "tests/test_baseplot.py",
    "content": "import pytest\n\nfrom pynimate.baseplot import Baseplot\n\n\ndef test_baseplot_generate_column_colors(sample_data1_basedfr):\n    base_plot = Baseplot(sample_data1_basedfr)\n    column_colors = {\n        \"Afghanistan\": (0.267968, 0.223549, 0.512008),\n        \"Angola\": (0.190631, 0.407061, 0.556089),\n        \"Albania\": (0.127568, 0.566949, 0.550556),\n        \"USA\": (0.20803, 0.718701, 0.472873),\n        \"Argentina\": (0.565498, 0.84243, 0.262877),\n    }\n    assert base_plot.generate_column_colors() == column_colors\n\n\ndef test_baseplot_set_column_colors_str(sample_data1_basedfr):\n    base_plot = Baseplot(sample_data1_basedfr)\n    base_plot.set_column_colors(\"#FF2C55\")\n    column_colors = {\n        \"Afghanistan\": \"#FF2C55\",\n        \"Angola\": \"#FF2C55\",\n        \"Albania\": \"#FF2C55\",\n        \"USA\": \"#FF2C55\",\n        \"Argentina\": \"#FF2C55\",\n    }\n    assert base_plot.column_colors == column_colors\n\n\ndef test_baseplot_set_column_colors_list(sample_data1_basedfr):\n    base_plot = Baseplot(sample_data1_basedfr)\n    base_plot.set_column_colors(\n        [\n            \"#C41E3D\",\n            \"#7D1128\",\n            \"#FF2C55\",\n            \"#3C0919\",\n            \"#E2294F\",\n        ]\n    )\n    column_colors = {\n        \"Afghanistan\": \"#C41E3D\",\n        \"Angola\": \"#7D1128\",\n        \"Albania\": \"#FF2C55\",\n        \"USA\": \"#3C0919\",\n        \"Argentina\": \"#E2294F\",\n    }\n    assert base_plot.column_colors == column_colors\n\n\ndef test_baseplot_set_column_colors_dict(sample_data1_basedfr):\n    base_plot = Baseplot(sample_data1_basedfr)\n    base_plot.set_column_colors(\n        {\n            \"Afghanistan\": \"#C41E3D\",\n            \"Angola\": \"#7D1128\",\n            \"Albania\": \"#FF2C55\",\n            \"USA\": \"#3C0919\",\n            \"Argentina\": \"#E2294F\",\n        }\n    )\n    column_colors = {\n        \"Afghanistan\": \"#C41E3D\",\n        \"Angola\": \"#7D1128\",\n        \"Albania\": \"#FF2C55\",\n        \"USA\": \"#3C0919\",\n        \"Argentina\": \"#E2294F\",\n    }\n    assert base_plot.column_colors == column_colors\n\n\ndef test_baseplot_set_column_color_err_length(sample_data1_basedfr):\n    with pytest.raises(AssertionError):\n        base_plot = Baseplot(sample_data1_basedfr)\n        column_colors = [\n            \"#2a9d8f\",\n            \"#e9c46a\",\n            \"#e76f51\",\n            \"#a7c957\",\n        ]\n        base_plot.set_column_colors(column_colors)\n\n\ndef test_baseplot_set_column_color_err_col_mismatch(sample_data1_basedfr):\n    with pytest.raises(ValueError):\n        bar = Baseplot(sample_data1_basedfr)\n        bar_colors = {\n            \"India\": \"#2a9d8f\",\n            \"Angola\": \"#e9c46a\",\n            \"Albania\": \"#e76f51\",\n            \"USA\": \"#a7c957\",\n            \"Argentina\": \"#e5989b\",\n        }\n        bar.set_column_colors(bar_colors)\n\n\ndef test_baseplot_set_column_color_err_type(sample_data1_basedfr):\n    with pytest.raises(TypeError):\n        bar = Baseplot(sample_data1_basedfr)\n        bar_colors = set(\n            [\n                \"#2a9d8f\",\n                \"#e9c46a\",\n                \"#e76f51\",\n                \"#a7c957\",\n                \"#e5989b\",\n            ]\n        )\n\n        bar.set_column_colors(bar_colors)\n\n\ndef test_baseplot_xylim(sample_data1_basedfr):\n    base_plot = Baseplot(sample_data1_basedfr)\n    xmin, xmax = base_plot.xlim\n    ymin, ymax = base_plot.ylim\n    assert xmin is None and ymin is None\n    assert xmax.strftime(\"%Y-%m-%d\") == \"1962-01-01\" and ymax == 5\n\n\ndef test_baseplot_text_structure(sample_data1_basedfr):\n    base_plot = Baseplot(sample_data1_basedfr)\n    base_plot.set_title(\"Title\")\n    base_plot.set_xlabel(\"Xlabel\")\n    base_plot.set_time()\n    for text in base_plot.text_collection.values():\n        assert isinstance(text, tuple)\n        assert text[0] is None or callable(text[0])\n        assert isinstance(text[1], dict)\n\n\ndef test_baseplot_set_text_error_empty_text(sample_data1_basedfr):\n    with pytest.raises(AssertionError):\n        bar = Baseplot(sample_data1_basedfr)\n        bar.set_text(\"text1\")\n\n\ndef test_baseplot_set_text_priority(sample_data1_basedfr):\n    bar = Baseplot(sample_data1_basedfr)\n    bar.set_text(\"text1\", text=\"Test\", callback=lambda *args: \"Test\")\n    assert \"s\" not in bar.text_collection[\"text1\"][1]\n\n\ndef test_baseplot_remove_text(sample_data1_basedfr):\n    bar = Baseplot(sample_data1_basedfr)\n    bar.set_text(\"text1\", text=\"Test1\")\n    bar.set_text(\"text2\", text=\"Test2\")\n    bar.set_text(\"text3\", text=\"Test3\")\n\n    bar.remove_text([\"text1\", \"text2\"])\n    assert list(bar.text_collection.keys()) == [\"text3\"]\n"
  },
  {
    "path": "tests/test_datafier.py",
    "content": "# Legacy tests for datafier, will be removed in 2.0.0\nimport pandas as pd\n\nfrom pynimate.datafier import Datafier, BaseDatafier, BarDatafier\n\n\ndef test_datafier_init(sample_data1):\n    dfr = Datafier(sample_data1, \"%Y-%m-%d\", \"3MS\", 0.1)\n    assert dfr.n_bars == 5\n\n\ndef test_datafier_interpolate_even(sample_data2):\n    dfr = Datafier(sample_data2, \"%Y\", \"3MS\")\n    interpolated_data = pd.DataFrame(\n        {\n            \"time\": pd.to_datetime(\n                [\n                    \"2012-01-01\",\n                    \"2012-04-01\",\n                    \"2012-07-01\",\n                    \"2012-10-01\",\n                    \"2013-01-01\",\n                    \"2013-04-01\",\n                    \"2013-07-01\",\n                    \"2013-10-01\",\n                    \"2014-01-01\",\n                ]\n            ),\n            \"col1\": [1.0, 1.25, 1.5, 1.75, 2.0, 2.25, 2.5, 2.75, 3.0],\n            \"col2\": [3.0, 2.75, 2.5, 2.25, 2.0, 1.75, 1.5, 1.25, 1.0],\n        }\n    ).set_index(\"time\")\n    dfr.data.index.name = \"time\"\n    assert dfr.data.equals(interpolated_data)\n\n\ndef test_datafier_get_top_cols(map_data):\n    dfr = Datafier(map_data, \"%Y\", \"3MS\")\n    top_cols = [\n        \"Argentina\",\n        \"Australia\",\n        \"Brazil\",\n        \"Canada\",\n        \"China\",\n        \"Germany\",\n        \"Spain\",\n        \"France\",\n        \"United Kingdom\",\n        \"India\",\n        \"Iran\",\n        \"Israel\",\n        \"Italy\",\n        \"Japan\",\n        \"South Korea\",\n        \"Kuwait\",\n        \"Myanmar\",\n        \"Netherlands\",\n        \"Poland\",\n        \"Romania\",\n        \"Russian Federation\",\n        \"Saudi Arabia\",\n        \"Sweden\",\n        \"USA\",\n    ]\n    assert dfr.get_top_cols() == top_cols\n\n\ndef test_datafier_get_bar_colors(map_data):\n    dfr = Datafier(map_data, \"%Y\", \"3MS\")\n    bar_colors = {\n        \"Argentina\": (0.278791, 0.062145, 0.386592),\n        \"Australia\": (0.283197, 0.11568, 0.436115),\n        \"Brazil\": (0.280255, 0.165693, 0.476498),\n        \"Canada\": (0.270595, 0.214069, 0.507052),\n        \"China\": (0.253935, 0.265254, 0.529983),\n        \"Germany\": (0.235526, 0.309527, 0.542944),\n        \"Spain\": (0.21621, 0.351535, 0.550627),\n        \"France\": (0.197636, 0.391528, 0.554969),\n        \"United Kingdom\": (0.179019, 0.433756, 0.55743),\n        \"India\": (0.163625, 0.471133, 0.558148),\n        \"Iran\": (0.149039, 0.508051, 0.55725),\n        \"Israel\": (0.135066, 0.544853, 0.554029),\n        \"Italy\": (0.122606, 0.585371, 0.546557),\n        \"Japan\": (0.120081, 0.622161, 0.534946),\n        \"South Korea\": (0.134692, 0.658636, 0.517649),\n        \"Kuwait\": (0.170948, 0.694384, 0.493803),\n        \"Myanmar\": (0.232815, 0.732247, 0.459277),\n        \"Netherlands\": (0.304148, 0.764704, 0.419943),\n        \"Poland\": (0.386433, 0.794644, 0.372886),\n        \"Romania\": (0.477504, 0.821444, 0.318195),\n        \"Russian Federation\": (0.585678, 0.846661, 0.249897),\n        \"Saudi Arabia\": (0.688944, 0.865448, 0.182725),\n        \"Sweden\": (0.79376, 0.880678, 0.120005),\n        \"USA\": (0.89632, 0.893616, 0.096335),\n    }\n    assert dfr.get_bar_colors() == bar_colors\n\n\ndef test_datafier_get_prepared_data(sample_data1):\n    dfr = Datafier(sample_data1, \"%Y-%m-%d\", \"3MS\")\n    dfr.df_ranks.index.name = \"time\"\n    df_ranks = pd.DataFrame(\n        {\n            \"time\": pd.to_datetime(\n                [\n                    \"1960-01-01\",\n                    \"1960-04-01\",\n                    \"1960-07-01\",\n                    \"1960-10-01\",\n                    \"1961-01-01\",\n                    \"1961-04-01\",\n                    \"1961-07-01\",\n                    \"1961-10-01\",\n                    \"1962-01-01\",\n                ]\n            ),\n            \"Afghanistan\": [3.0, 2.5, 2.0, 2.0, 2.0, 1.5, 1.0, 1.0, 1.0],\n            \"Angola\": [4.0, 4.0, 4.0, 4.0, 4.0, 3.5, 3.0, 3.0, 3.0],\n            \"Albania\": [2.0, 1.5, 1.0, 1.0, 1.0, 3.0, 5.0, 5.0, 5.0],\n            \"USA\": [5.0, 4.0, 3.0, 3.0, 3.0, 2.5, 2.0, 2.0, 2.0],\n            \"Argentina\": [1.0, 3.0, 5.0, 5.0, 5.0, 4.5, 4.0, 4.0, 4.0],\n        }\n    ).set_index(\"time\")\n    data = pd.DataFrame(\n        {\n            \"time\": pd.to_datetime(\n                [\n                    \"1960-01-01\",\n                    \"1960-04-01\",\n                    \"1960-07-01\",\n                    \"1960-10-01\",\n                    \"1961-01-01\",\n                    \"1961-04-01\",\n                    \"1961-07-01\",\n                    \"1961-10-01\",\n                    \"1962-01-01\",\n                ]\n            ),\n            \"Afghanistan\": [1.0, 1.25, 1.5, 1.75, 2.0, 2.25, 2.5, 2.75, 3.0],\n            \"Angola\": [2.0, 2.25, 2.5, 2.75, 3.0, 3.25, 3.5, 3.75, 4.0],\n            \"Albania\": [1.0, 1.25, 1.5, 1.75, 2.0, 2.75, 3.5, 4.25, 5.0],\n            \"USA\": [5.0, 4.5, 4.0, 3.5, 3.0, 3.25, 3.5, 3.75, 4.0],\n            \"Argentina\": [1.0, 1.75, 2.5, 3.25, 4.0, 4.25, 4.5, 4.75, 5.0],\n        }\n    ).set_index(\"time\")\n    assert dfr.df_ranks.equals(df_ranks)\n    assert dfr.data.equals(data)\n\n\n# 1.2.0 >=\n\n\ndef test_basedatafier_interpolate_even(sample_data2):\n    dfr = BaseDatafier(sample_data2, \"%Y\", \"3MS\")\n    interpolated_data = pd.DataFrame(\n        {\n            \"time\": pd.to_datetime(\n                [\n                    \"2012-01-01\",\n                    \"2012-04-01\",\n                    \"2012-07-01\",\n                    \"2012-10-01\",\n                    \"2013-01-01\",\n                    \"2013-04-01\",\n                    \"2013-07-01\",\n                    \"2013-10-01\",\n                    \"2014-01-01\",\n                ]\n            ),\n            \"col1\": [1.0, 1.25, 1.5, 1.75, 2.0, 2.25, 2.5, 2.75, 3.0],\n            \"col2\": [3.0, 2.75, 2.5, 2.25, 2.0, 1.75, 1.5, 1.25, 1.0],\n        }\n    ).set_index(\"time\")\n    dfr.data.index.name = \"time\"\n    assert dfr.data.equals(interpolated_data)\n\n\ndef test_bardfr_init(sample_data1):\n    dfr = BarDatafier(sample_data1, \"%Y-%m-%d\", \"3MS\", 0.1)\n    assert dfr.n_bars == 5\n\n\ndef test_bardfr_df_ranks(sample_data1):\n    dfr = BarDatafier(sample_data1, \"%Y-%m-%d\", \"3MS\", 0.5)\n    dfr.df_ranks.index.name = \"time\"\n    df_ranks = pd.DataFrame(\n        {\n            \"time\": pd.to_datetime(\n                [\n                    \"1960-01-01\",\n                    \"1960-04-01\",\n                    \"1960-07-01\",\n                    \"1960-10-01\",\n                    \"1961-01-01\",\n                    \"1961-04-01\",\n                    \"1961-07-01\",\n                    \"1961-10-01\",\n                    \"1962-01-01\",\n                ]\n            ),\n            \"Afghanistan\": [3.0, 2.5, 2.0, 2.0, 2.0, 1.5, 1.0, 1.0, 1.0],\n            \"Angola\": [4.0, 4.0, 4.0, 4.0, 4.0, 3.5, 3.0, 3.0, 3.0],\n            \"Albania\": [2.0, 1.5, 1.0, 1.0, 1.0, 3.0, 5.0, 5.0, 5.0],\n            \"USA\": [5.0, 4.0, 3.0, 3.0, 3.0, 2.5, 2.0, 2.0, 2.0],\n            \"Argentina\": [1.0, 3.0, 5.0, 5.0, 5.0, 4.5, 4.0, 4.0, 4.0],\n        }\n    ).set_index(\"time\")\n    assert dfr.df_ranks.equals(df_ranks)\n\n\ndef test_bardfr_get_top_cols(map_data):\n    dfr = BarDatafier(map_data, \"%Y\", \"3MS\")\n    top_cols = [\n        \"Argentina\",\n        \"Australia\",\n        \"Brazil\",\n        \"Canada\",\n        \"China\",\n        \"Germany\",\n        \"Spain\",\n        \"France\",\n        \"United Kingdom\",\n        \"India\",\n        \"Iran\",\n        \"Israel\",\n        \"Italy\",\n        \"Japan\",\n        \"South Korea\",\n        \"Kuwait\",\n        \"Myanmar\",\n        \"Netherlands\",\n        \"Poland\",\n        \"Romania\",\n        \"Russian Federation\",\n        \"Saudi Arabia\",\n        \"Sweden\",\n        \"USA\",\n    ]\n    assert dfr.get_top_cols() == top_cols\n"
  },
  {
    "path": "tests/test_lineplot.py",
    "content": "from pynimate.lineplot import Lineplot\n\n\ndef test_lineplot_linestyle(sample_data1_linedfr):\n    plot = Lineplot(sample_data1_linedfr)\n    linestyles = {\n        \"Afghanistan\": \"solid\",\n        \"Angola\": \"solid\",\n        \"Albania\": \"solid\",\n        \"USA\": \"solid\",\n        \"Argentina\": \"solid\",\n    }\n\n    assert plot.column_linestyles == linestyles\n\n\ndef test_lineplot_linestyle_dict(sample_data1_linedfr):\n    plot = Lineplot(sample_data1_linedfr)\n    plot.set_column_linestyles({\"Albania\": \"dashed\"})\n    linestyles = {\n        \"Afghanistan\": \"solid\",\n        \"Angola\": \"solid\",\n        \"Albania\": \"dashed\",\n        \"USA\": \"solid\",\n        \"Argentina\": \"solid\",\n    }\n\n    assert plot.column_linestyles == linestyles\n"
  },
  {
    "path": "tests/test_utils.py",
    "content": "from pynimate.utils import human_readable\n\n\ndef test_human_readable():\n    assert human_readable(20.2333) == \"20.23\"\n\n\ndef test_human_readable_k():\n    assert human_readable(21014, 3) == \"21.014K\"\n\n\ndef test_human_readable_m():\n    assert human_readable(5241725, 1) == \"5.2M\"\n"
  }
]