Repository: julkaar9/pynimate Branch: main Commit: 79962b8a8a16 Files: 53 Total size: 344.4 KB Directory structure: gitextract_lfc_djcb/ ├── .github/ │ └── workflows/ │ ├── deploy.yml │ ├── publish.yml │ └── tests.yml ├── .gitignore ├── LICENSE ├── MANIFEST.in ├── README.md ├── docs/ │ ├── guide/ │ │ ├── dark_mode.md │ │ ├── lineplot_darkmode.md │ │ └── starter.md │ ├── index.md │ └── reference/ │ ├── barhplot.md │ ├── barplot.md │ ├── baseplot.md │ ├── canvas.md │ ├── datafiers/ │ │ ├── bar_datafier.md │ │ ├── base_datafier.md │ │ ├── datafier.md │ │ └── line_datafier.md │ ├── lineplot.md │ └── utils.md ├── examples/ │ ├── __init__.py │ ├── data/ │ │ ├── covid_IN.csv │ │ ├── data.csv │ │ ├── map.csv │ │ └── sample.csv │ ├── example1.py │ ├── example2.py │ ├── example3.py │ ├── lineplot_dark1.py │ └── lineplot_ex1.py ├── mkdocs.yml ├── pyproject.toml ├── requirements.txt ├── setup.py ├── src/ │ └── pynimate/ │ ├── __init__.py │ ├── __init__.pyi │ ├── bar.py │ ├── barhplot.py │ ├── baseplot.py │ ├── canvas.py │ ├── datafier.py │ ├── lineplot.py │ └── utils.py └── tests/ ├── __init__.py ├── conftest.py ├── data/ │ └── map.csv ├── test_bar.py ├── test_barhplot.py ├── test_baseplot.py ├── test_datafier.py ├── test_lineplot.py └── test_utils.py ================================================ FILE CONTENTS ================================================ ================================================ FILE: .github/workflows/deploy.yml ================================================ name: ci on: push: branches: - main permissions: contents: write jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: actions/setup-python@v4 with: python-version: 3.x - uses: actions/cache@v2 with: key: ${{ github.ref }} path: .cache - run: | pip install -e . pip install mkdocs-material pip install "mkdocstrings[python]" - run: mkdocs gh-deploy --force ================================================ FILE: .github/workflows/publish.yml ================================================ name: Build distribution on: [push, pull_request, workflow_dispatch] jobs: deploy: runs-on: ubuntu-latest steps: - name: Checkout source uses: actions/checkout@v3 - name: Set up Python uses: actions/setup-python@v4 with: python-version: "3.x" - name: Install build dependencies run: | pip install --upgrade pip pip install --upgrade build wheel setuptools - name: Build distributions run: python -m build - name: Publish package to PyPI if: github.repository == 'julkaar9/pynimate' && github.event_name =='push' && startsWith(github.ref, 'refs/tags') uses: pypa/gh-action-pypi-publish@release/v1 with: password: ${{ secrets.PYPI_API_TOKEN }} ================================================ FILE: .github/workflows/tests.yml ================================================ name: Tests on: push: branches: [ main, dev ] pull_request: branches: [ main, dev ] permissions: contents: read jobs: test: runs-on: ubuntu-latest strategy: matrix: python-version: ["3.9", "3.10", "3.11"] steps: - uses: actions/checkout@v3 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v4 with: python-version: ${{ matrix.python-version }} - name: Install dependencies run: | python -m pip install --upgrade pip pip install flake8 pytest if [ -f requirements.txt ]; then pip install -r requirements.txt; fi pip install -e . - name: Lint with flake8 run: | flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics - name: Test with pytest run: | pytest ================================================ FILE: .gitignore ================================================ legacy/* examples/data/ccodes.csv examples/data/cn_dict.csv examples/data/data2.csv examples/data/mapdata.csv examples/test.py examples/example4.py # Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] *$py.class # C extensions *.so .vscode/ # Distribution / packaging .Python build/ develop-eggs/ dist/ downloads/ eggs/ .eggs/ lib/ lib64/ parts/ sdist/ var/ wheels/ pip-wheel-metadata/ share/python-wheels/ *.egg-info/ .installed.cfg *.egg MANIFEST # PyInstaller # Usually these files are written by a python script from a template # before PyInstaller builds the exe, so as to inject date/other infos into it. *.manifest *.spec # Installer logs pip-log.txt pip-delete-this-directory.txt # Unit test / coverage reports htmlcov/ .tox/ .nox/ .coverage .coverage.* .cache nosetests.xml coverage.xml *.cover *.py,cover .hypothesis/ .pytest_cache/ # Translations *.mo *.pot # Django stuff: *.log local_settings.py db.sqlite3 db.sqlite3-journal # Sphinx documentation docs/_build/ # PyBuilder target/ # Jupyter Notebook .ipynb_checkpoints # IPython profile_default/ ipython_config.py # pyenv .python-version # pipenv # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. # However, in case of collaboration, if having platform-specific dependencies or dependencies # having no cross-platform support, pipenv may install dependencies that don't work, or not # install all needed dependencies. #Pipfile.lock # PEP 582; used by e.g. github.com/David-OConnor/pyflow __pypackages__/ # Celery stuff celerybeat-schedule celerybeat.pid # SageMath parsed files *.sage.py # Environments .env .venv env/ venv/ ENV/ env.bak/ venv.bak/ # Spyder project settings .spyderproject .spyproject # Rope project settings .ropeproject # mkdocs documentation /site # mypy .mypy_cache/ .dmypy.json dmypy.json # Pyre type checker .pyre/ ================================================ FILE: LICENSE ================================================ MIT License Copyright (c) 2022 Md Julkarnaeen Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: MANIFEST.in ================================================ include README.md ================================================ FILE: README.md ================================================ ![](https://github.com/julkaar9/pynimate/blob/gh-pages/assets/pynimate_logo2.png) # Pynimate [![PyPI](https://img.shields.io/pypi/v/pynimate?color=orange)](https://pypi.org/project/pynimate/) [![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) ![Tests](https://github.com/julkaar9/pynimate/actions/workflows/tests.yml/badge.svg) [![License](https://img.shields.io/pypi/l/pynimate?color=green)](https://github.com/julkaar9/pynimate/blob/main/LICENSE) [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black) Python package for statistical data animations. ![](https://github.com/julkaar9/pynimate/blob/main/docs/assets/example3.gif) ![](https://github.com/julkaar9/pynimate/blob/main/docs/assets/lineplot_dark2.gif) ## Installation ### with pip Pynimate is avaialbe at [pypi](https://pypi.org/project/pynimate/) ``` sh pip install pynimate ``` ## How to use Pynimate expects pandas dataframe formatted in this manner: Where the time column is set to index. ```python time, col1, col2, col3 2012 1 2 1 2013 1 1 2 2014 2 1.5 3 2015 2.5 2 3.5 ``` ## Bar Chart Example ```python import pandas as pd from matplotlib import pyplot as plt import pynimate as nim df = pd.DataFrame( { "time": ["1960-01-01", "1961-01-01", "1962-01-01"], "Afghanistan": [1, 2, 3], "Angola": [2, 3, 4], "Albania": [1, 2, 5], "USA": [5, 3, 4], "Argentina": [1, 4, 5], } ).set_index("time") cnv = nim.Canvas() bar = nim.Barhplot.from_df(df, "%Y-%m-%d", "2d") bar.set_time(callback=lambda i, datafier: datafier.data.index[i].year) cnv.add_plot(bar) cnv.animate() plt.show() ``` ## Documentation The official documentation : https://julkaar9.github.io/pynimate/ ## License [MIT License (MIT)](LICENSE) ================================================ FILE: docs/guide/dark_mode.md ================================================ # Creating a dark themed bar chart race ## The data We will use the previous data for this animation ```py df = pd.DataFrame( { "time": ["1960-01-01", "1961-01-01", "1962-01-01"], "Afghanistan": [1, 2, 3], "Angola": [2, 3, 4], "Albania": [1, 2, 5], "USA": [5, 3, 4], "Argentina": [1, 4, 5], } ).set_index("time") ``` ## Additional variables There might be situations where we would like to show additional information for each column or date. For instance in the previous data we would like to show continents of each country. In such cases use a Dataframe containing the additional variables in this format. ```python columns, continents "Afghanistan", "Asia" "Angola", "Africa" "Albania", "Europe" "USA", "N America" "Argentina" "S America" ``` This is a column-wise data where the index is the columns of the original data ```python col_var = pd.DataFrame( { "columns": ["Afghanistan", "Angola", "Albania", "USA", "Argentina"], "continent": ["Asia", "Africa", "Europe", "N America", "S America"], } ).set_index("columns") ``` Similarly we can use a row-wise data where the index is same as the original data. ```py time leap-year var2 ... "1960-01-01" "yes" 0 "1961-01-01" "no" 3 "1962-01-01" "no" 0 ``` use the `dfr.add_var(col_var=col_var)` module to add these dataframes. ## post_update `post_update(self, i)` is a function that runs for every frame. It is very useful for extending the basic animation. In this example we will use `post_update` to annotate continent names on bars. ```py def post_update(self, i): # annotates continents next to bars for ind, (bar, x, y) in enumerate( zip(self.bar_attr.top_cols, self.bar_attr.bar_length, self.bar_attr.bar_rank) ): self.ax.text( x - 0.3, y, self.dfr.col_var.loc[bar, "continent"], ha="right", color="k", size=12, zorder=ind, ) ``` ## Changing colors All the text colors are set to white and the background color is made dark blue ("#001219"). ```py ... bar.set_title("Sample Title", color="w", weight=600) bar.set_xlabel("xlabel", color="w") ... ``` We have also manually set colors for each bar. ```py bar_cols = { "Afghanistan": "#2a9d8f", "Angola": "#e9c46a", "Albania": "#e76f51", "USA": "#a7c957", "Argentina": "#e5989b", } ``` ## The final code ```py import os import matplotlib as mpl import numpy as np import pandas as pd from matplotlib import pyplot as plt import pynimate as nim dir_path = os.path.dirname(os.path.realpath(__file__)) mpl.rcParams["axes.facecolor"] = "#001219" # Turning off the spines for side in ["left", "right", "top", "bottom"]: mpl.rcParams[f"axes.spines.{side}"] = False def post_update(self, i): # annotates continents next to bars for ind, (bar, x, y) in enumerate( zip(self.bar_attr.top_cols, self.bar_attr.bar_length, self.bar_attr.bar_rank) ): self.ax.text( x - 0.3, y, self.dfr.col_var.loc[bar, "continent"], ha="right", color="k", size=12, zorder=ind, ) df = pd.read_csv(dir_path + "/data/sample.csv").set_index("time") col_var = pd.DataFrame( { "columns": ["Afghanistan", "Angola", "Albania", "USA", "Argentina"], "continent": ["Asia", "Africa", "Europe", "N America", "S America"], } ).set_index("columns") bar_cols = { "Afghanistan": "#2a9d8f", "Angola": "#e9c46a", "Albania": "#e76f51", "USA": "#a7c957", "Argentina": "#e5989b", } cnv = nim.Canvas(figsize=(12.8, 7.2), facecolor="#001219") dfr = nim.BarDatafier(df, "%Y-%m-%d", "3d") dfr.add_var(col_var=col_var) bar = nim.Barhplot(dfr, post_update=post_update, rounded_edges=True, grid=False) bar.set_column_colors(bar_cols) bar.set_title("Sample Title", color="w", weight=600) bar.set_xlabel("xlabel", color="w") bar.set_time( callback=lambda i, datafier: datafier.data.index[i].strftime("%b, %Y"), color="w" ) bar.set_text( "sum", callback=lambda i, datafier: f"Total :{np.round(datafier.data.iloc[i].sum(), 2)}", size=20, x=0.72, y=0.20, color="w", ) bar.set_bar_annots(color="w", size=13) bar.set_xticks(colors="w", length=0, labelsize=13) bar.set_yticks(colors="w", labelsize=13) bar.set_bar_border_props( edge_color="black", pad=0.1, mutation_aspect=1, radius=0.2, mutation_scale=0.6 ) cnv.add_plot(bar) cnv.animate() plt.show() ``` ## Result! ![](../assets/example3.gif) ================================================ FILE: docs/guide/lineplot_darkmode.md ================================================ # Creating a dark themed Animated Line plot ## The data We 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. |date |cases|cured| |----------|-----|-----| |2020-03-28|185.0|13.0 | |2020-03-29|115.0|16.0 | |2020-03-30|181.0|6.0 | |2020-03-31|154.0|22.0 | |2020-04-01|475.0|20.0 | |2020-04-02|235.0|12.0 | |2020-04-03|401.0|10.0 | ## Theming Let us setup the colors for the lineplot. We will be using `#001219` as the canvas color. ```python #Customizing matplotlib import matplotlib as mpl for side in ["left", "right", "top", "bottom"]: mpl.rcParams[f"axes.spines.{side}"] = False mpl.rcParams["figure.facecolor"] = "#001219" mpl.rcParams["axes.facecolor"] = "#001219" mpl.rcParams["savefig.facecolor"] = "#001219" ``` We will also set all text colors to white. ## post_update `post_update(self, i)` is a function that runs for every frame. It is very useful for extending the basic animation. In this example we will use `post_update` to format the xtick labels. `human_readable` converts large numbers to human readable format. ```py def post(self, i): self.ax.yaxis.set_major_formatter( tick.FuncFormatter(lambda x, pos: human_readable(x)) ) ``` ## Customizing line styles Use `.set_column_linestyles()` to set linestyles. We will set 'cases' to solid and 'cured' to dashed. ```py #Linestyle defaults to solid plot.set_column_linestyles({"cured": "dashed"}) ``` ## The final code ```py import os import matplotlib as mpl import matplotlib.pyplot as plt import matplotlib.ticker as tick import pandas as pd import pynimate as nim from pynimate.utils import human_readable for side in ["left", "right", "top", "bottom"]: mpl.rcParams[f"axes.spines.{side}"] = False mpl.rcParams["figure.facecolor"] = "#001219" mpl.rcParams["axes.facecolor"] = "#001219" mpl.rcParams["savefig.facecolor"] = "#001219" dir_path = os.path.dirname(os.path.realpath(__file__)) def post(self, i): self.ax.yaxis.set_major_formatter( tick.FuncFormatter(lambda x, pos: human_readable(x)) ) df = pd.read_csv(dir_path + "/data/covid_IN.csv").set_index("time") cnv = nim.Canvas() dfr = nim.LineDatafier(df, "%Y-%m-%d", "12h") plot = nim.Lineplot( dfr, post_update=post, palettes=["Set3"], scatter_markers=False, legend=True, fixed_ylim=True, grid=False, ) plot.set_column_linestyles({"cured": "dashed"}) plot.set_title("Covid cases India(2021)", y=1.05, color="w", weight=600) plot.set_xlabel("xlabel", color="w") plot.set_time( callback=lambda i, datafier: datafier.data.index[i].strftime("%d %b, %Y"), color="w", size=15, ) plot.set_line_annots(lambda col, val: f"({human_readable(val)})", color="w") plot.set_legend(labelcolor="w") plot.set_text( "sum", callback=lambda i, datafier: f"Total cases :{human_readable(datafier.data.cases.iloc[:i+1].sum() )}", size=10, x=0.8, y=0.20, color="w", ) plot.set_xticks(colors="w", length=0, labelsize=10) plot.set_yticks(colors="w", labelsize=10) cnv.add_plot(plot) cnv.animate() cnv.save("lineplot_dark", 24) plt.show() ``` (note: this gif has gone through some size and frame reduction, so you should get a better looking animation) ## Result! ![](../assets/lineplot_dark.gif) ================================================ FILE: docs/guide/starter.md ================================================ # Welcome to pynimate Pynimate is a python package for statistical data animations. ## Installation ### with pip You can install pynimate using [`pip`][pip] [pip]: https://pypi.org/project/pynimate/ ``` sh pip install pynimate ``` ## Import Pynimate is generally imported as `nim` and this convention is followed throughout the documentation. ``` python import pynimate as nim ``` ## Canvas The Canvas class is used as a base for the animations, it handles the matplotlib figure, subplots as well as creating and saving animations. ## Basic Animations We will go through some basic data animations using pynimate. ## Bar Chart Race Create a Bar Chart Race using the `Barhplot` module. Pandas is a dependency and used for data manipulation, your data have to be a pandas `DataFrame`. The data needs to be in the following format, where the time column is set to index. ```python time, col1, col2, col3 2012 1 2 1 2013 1 1 2 2014 2 1.5 3 2015 2.5 2 3.5 ``` ### Pandas setup Use pandas to import your data and set the time column as index. ```python import pandas as pd df = pd.read_csv('data.csv').set_index('time') ``` Here is a sample data that we will work with. ```py df = pd.DataFrame( { "time": ["1960-01-01", "1961-01-01", "1962-01-01"], "Afghanistan": [1, 2, 3], "Angola": [2, 3, 4], "Albania": [1, 2, 5], "USA": [5, 3, 4], "Argentina": [1, 4, 5], } ).set_index("time") ``` ### Datafiers Datafiers or Data Modifiers are helper modules that handles the data preparation part. The dafafier for Barhplot is BarDatafier ### Barhplot Barhplot can be initialized in two different ways either by passing the BarDatafier ```py dfr = nim.BarDatafier(df, "%Y-%m-%d", "2d") bar = nim.Barhplot(dfr) ``` or by passing the pandas dataframe directly ```py bar = nim.Barhplot.from_df(df, "%Y-%m-%d", "2d") ``` In both case there are three required arguments. `data`: The data to be plotted and animated. `time_format`: The date-time format of the data index. In our case it is `"%Y-%m-%d"`. `ip_freq`: The interpolation frequency. Most data in their original form are not suitable for animations, Why? Lets understand the absolute basics of these animations. Consider this data: ```python time, col1, col2 2012 1 3 2013 2 2 2014 3 1 ``` This 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. or in our case each second should consist of 24 images of static plots. So if we were to plot this, the video would be 3/24 second long. This is where interpolation(Linear) comes to play, if we were to interpolate the data quarterly, The new data will be ```py time col1 col2 2012-01-01 1.00 3.00 2012-04-01 1.25 2.75 2012-07-01 1.50 2.50 2012-10-01 1.75 2.25 2013-01-01 2.00 2.00 2013-04-01 2.25 1.75 2013-07-01 2.50 1.50 2013-10-01 2.75 1.25 2014-01-01 3.00 1.00 ``` Now we have 9 rows, so our video will be 9/24 seconds long. In general you will be plotting a much larger data, so your video will be much larger. The interpolation is mostly used to make the video smooth. You might wonder whether this interpolation will misrepresent the plot. Considering there is no way to know what the original values are between the actual intervals. That is something for the user to decide. If your data is large enough, you wont need interpolation. In such case set `ip_freq = None`. Now that the fundamentals are discussed, use Barplot to create the animation. ```py # import matplotlib if you wish to see the animation in gui import pandas as pd from matplotlib import pyplot as plt import pynimate as nim df = pd.DataFrame( { "time": ["1960-01-01", "1961-01-01", "1962-01-01"], "Afghanistan": [1, 2, 3], "Angola": [2, 3, 4], "Albania": [1, 2, 5], "USA": [5, 3, 4], "Argentina": [1, 4, 5], } ).set_index("time") cnv = nim.Canvas() # Interpolation frequency is 2 days bar = nim.Barhplot.from_df(df, "%Y-%m-%d", "2d") # use set_time to draw the datetime in the canvas # here we are using a callback that returns datetime formatted in month, year bar.set_time(callback=lambda i, datafier: datafier.data.index[i].strftime("%b, %Y")) # add the bar plot to the canvas cnv.add_plot(bar) cnv.animate() plt.show() ``` ### Save the animation Use `Canvas.save()` to save the animation. #### As GIF Matplotlib uses pillow under the hood to save gifs, however you can use writer of your choice. ```py cnv.save("file", 24, "gif") ``` #### As mp4 `ffmpeg` is a standard writer for saving as mp4 ```py pip install ffmpeg-python ``` or ```py conda install ffmpeg ``` Use `Canvas.save()` to save the animation ```py cnv.save("file", 24 ,"mp4") ``` ## Result! ![](../assets/example1.gif) ================================================ FILE: docs/index.md ================================================ ![](assets/pynimate_logo2.png) # Pynimate [![PyPI](https://img.shields.io/pypi/v/pynimate?color=orange)](https://pypi.org/project/pynimate/) [![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) ![Tests](https://github.com/julkaar9/pynimate/actions/workflows/tests.yml/badge.svg) [![License](https://img.shields.io/pypi/l/pynimate?color=green)](https://github.com/julkaar9/pynimate/blob/main/LICENSE) [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black) Python package for statistical data animations. ## Installation ### with pip You can install pynimate using [`pip`][pip] [pip]: https://pypi.org/project/pynimate/ ``` sh pip install pynimate ``` ## How to use Pynimate expects pandas dataframe formatted in this manner: Where the time column is set to index. ```python time, col1, col2, col3 2012 1 2 1 2013 1 1 2 2014 2 1.5 3 2015 2.5 2 3.5 ``` ## Bar Chart Example ```python import pandas as pd from matplotlib import pyplot as plt import pynimate as nim df = pd.DataFrame( { "time": ["1960-01-01", "1961-01-01", "1962-01-01"], "Afghanistan": [1, 2, 3], "Angola": [2, 3, 4], "Albania": [1, 2, 5], "USA": [5, 3, 4], "Argentina": [1, 4, 5], } ).set_index("time") cnv = nim.Canvas() bar = nim.Barhplot.from_df(df, "%Y-%m-%d", "2d") bar.set_time(callback=lambda i, datafier: datafier.data.index[i].strftime("%b, %Y")) cnv.add_plot(bar) cnv.animate() plt.show() ``` ![](assets/example1.gif) ================================================ FILE: docs/reference/barhplot.md ================================================ # Barhplot See Baseplot for inherited modules. ## Barhplot ::: pynimate.barhplot.Barhplot handler: python options: docstring_style: numpy merge_init_into_class: true members: - from_df - get_ith_bar_attrs - set_xylim - set_barh - set_bar_annots - set_bar_border_props show_root_heading: false show_source: false ================================================ FILE: docs/reference/barplot.md ================================================ # Barplot *Barplot is deprecated, use barhplot instead.* ## Barplot ::: pynimate.bar.Barplot handler: python options: docstring_style: numpy merge_init_into_class: true members: - add_var - set_bar_color - getTopXY - set_xylim - set_title - set_xlabel - set_time - set_text - remove_text - set_bar_border_props - set_barh - set_xticks - set_yticks - set_grid - set_bar_annots - add_extras show_root_heading: false show_source: false ================================================ FILE: docs/reference/baseplot.md ================================================ # Baseplot ## Baseplot ::: pynimate.baseplot.Baseplot handler: python options: docstring_style: numpy merge_init_into_class: true members: - from_df - generate_column_colors - set_column_colors - set_xylim - set_title - set_xlabel - set_time - set_text - remove_text - set_xticks - set_yticks - set_grid show_root_heading: false show_source: false ================================================ FILE: docs/reference/canvas.md ================================================ # Canvas ## Canvas ::: pynimate.canvas.Canvas handler: python options: docstring_style: numpy merge_init_into_class: true members: - add_plot - animate - save show_root_heading: false show_source: false ================================================ FILE: docs/reference/datafiers/bar_datafier.md ================================================ # BarDatafier ## BarDatafier ::: pynimate.datafier.BarDatafier handler: python options: docstring_style: numpy merge_init_into_class: true members: - get_data_ranks - get_top_cols show_root_heading: false show_source: false ================================================ FILE: docs/reference/datafiers/base_datafier.md ================================================ # BaseDatafier ## BaseDatafier ::: pynimate.datafier.BaseDatafier handler: python options: docstring_style: numpy merge_init_into_class: true members: - add_var - interpolate_even - interpolate_data show_root_heading: false show_source: false ================================================ FILE: docs/reference/datafiers/datafier.md ================================================ # Datafier *Datafier is deprecated, use plot specific datafiers instead.* ## Datafier ::: pynimate.datafier.Datafier handler: python options: docstring_style: numpy merge_init_into_class: true members: - add_var - interpolate_even - get_prepared_data - get_top_cols - get_bar_colors show_root_heading: false show_source: false ================================================ FILE: docs/reference/datafiers/line_datafier.md ================================================ # LineDatafier ## LineDatafier ::: pynimate.datafier.LineDatafier handler: python options: docstring_style: numpy merge_init_into_class: true members: - prepare_data show_root_heading: false show_source: false ================================================ FILE: docs/reference/lineplot.md ================================================ # Lineplot See Baseplot for inherited modules. ## Lineplot ::: pynimate.lineplot.Lineplot handler: python options: docstring_style: numpy merge_init_into_class: true members: - from_df - set_column_linestyles - set_line - set_line_annots - set_line_head - set_marker - set_legend show_root_heading: false show_source: false ================================================ FILE: docs/reference/utils.md ================================================ # Helper Functions ## Utils ::: pynimate.utils handler: python options: docstring_style: numpy members: - human_readable show_root_heading: false show_source: false ================================================ FILE: examples/__init__.py ================================================ ================================================ FILE: examples/data/covid_IN.csv ================================================ time,cases,cured 2020-01-30,,0.0 2020-01-31,0.0,0.0 2020-02-01,1.0,0.0 2020-02-02,1.0,0.0 2020-02-03,0.0,0.0 2020-02-04,0.0,0.0 2020-02-05,0.0,0.0 2020-02-06,0.0,0.0 2020-02-07,0.0,0.0 2020-02-08,0.0,0.0 2020-02-09,0.0,0.0 2020-02-10,0.0,0.0 2020-02-11,0.0,0.0 2020-02-12,0.0,0.0 2020-02-13,0.0,0.0 2020-02-14,0.0,0.0 2020-02-15,0.0,0.0 2020-02-16,0.0,0.0 2020-02-17,0.0,0.0 2020-02-18,0.0,0.0 2020-02-19,0.0,0.0 2020-02-20,0.0,0.0 2020-02-21,0.0,0.0 2020-02-22,0.0,0.0 2020-02-23,0.0,0.0 2020-02-24,0.0,0.0 2020-02-25,0.0,0.0 2020-02-26,0.0,0.0 2020-02-27,0.0,0.0 2020-02-28,0.0,0.0 2020-02-29,0.0,0.0 2020-03-01,0.0,0.0 2020-03-02,2.0,0.0 2020-03-03,1.0,3.0 2020-03-04,22.0,0.0 2020-03-05,2.0,0.0 2020-03-06,1.0,0.0 2020-03-07,3.0,0.0 2020-03-08,5.0,0.0 2020-03-09,7.0,0.0 2020-03-10,12.0,0.0 2020-03-11,2.0,0.0 2020-03-12,14.0,0.0 2020-03-13,7.0,0.0 2020-03-14,3.0,7.0 2020-03-15,26.0,6.5 2020-03-16,4.0,0.0 2020-03-17,23.0,1.0 2020-03-18,14.0,0.0 2020-03-19,22.0,6.0 2020-03-20,50.0,3.0 2020-03-21,60.0,0.0 2020-03-22,77.0,1.0 2020-03-23,73.0,0.0 2020-03-24,86.0,16.0 2020-03-25,87.0,3.0 2020-03-26,88.0,2.0 2020-03-27,30.0,22.0 2020-03-28,185.0,13.0 2020-03-29,115.0,16.0 2020-03-30,181.0,6.0 2020-03-31,154.0,22.0 2020-04-01,475.0,20.0 2020-04-02,235.0,12.0 2020-04-03,401.0,10.0 2020-04-04,602.0,50.0 2020-04-05,505.0,62.0 2020-04-06,704.0,44.0 2020-04-07,508.0,34.0 2020-04-08,485.0,58.0 2020-04-09,591.0,67.0 2020-04-10,896.0,38.0 2020-04-11,768.0,137.0 2020-04-12,918.0,112.0 2020-04-13,905.0,215.0 2020-04-14,1463.0,210.0 2020-04-15,1118.0,154.0 2020-04-16,826.0,171.0 2020-04-17,1076.0,252.0 2020-04-18,957.0,248.0 2020-04-19,1324.0,287.0 2020-04-20,1540.0,540.0 2020-04-21,1329.0,418.0 2020-04-22,1486.0,700.0 2020-04-23,1229.0,365.0 2020-04-24,1752.0,489.0 2020-04-25,1441.0,396.0 2020-04-26,1712.0,704.0 2020-04-27,1555.0,448.0 2020-04-28,1674.0,665.0 2020-04-29,1875.0,770.0 2020-04-30,1621.0,576.0 2020-05-01,1642.0,692.0 2020-05-02,2185.0,886.0 2020-05-03,2967.0,936.0 2020-05-04,2712.0,875.0 2020-05-05,3875.0,1399.0 2020-05-06,2680.0,1022.0 2020-05-07,3561.0,1084.0 2020-05-08,3390.0,1273.0 2020-05-09,3320.0,1307.0 2020-05-10,3277.0,1511.0 2020-05-11,4213.0,1559.0 2020-05-12,3604.0,1538.0 2020-05-13,3525.0,1931.0 2020-05-14,3722.0,1849.0 2020-05-15,3967.0,1685.0 2020-05-16,3740.0,2233.0 2020-05-17,4927.0,3956.0 2020-05-18,5122.0,2715.0 2020-05-19,4566.0,2350.0 2020-05-20,5329.0,3124.0 2020-05-21,5302.0,3002.0 2020-05-22,5871.0,3234.0 2020-05-23,6375.0,3250.0 2020-05-24,6328.0,2657.0 2020-05-25,6673.0,3280.0 2020-05-26,6207.0,2770.0 2020-05-27,5344.0,3935.0 2020-05-28,6247.0,3266.0 2020-05-29,7125.0,3414.0 2020-05-30,7594.0,11264.0 2020-05-31,7932.0,4614.0 2020-06-01,8253.0,4835.0 2020-06-02,7387.0,3708.0 2020-06-03,8200.0,4776.0 2020-06-04,8944.0,3804.0 2020-06-05,9724.0,5355.0 2020-06-06,9305.0,4611.0 2020-06-07,9558.0,5220.0 2020-06-08,9399.0,4802.0 2020-06-09,10373.0,5120.0 2020-06-10,9561.0,5991.0 2020-06-11,10290.0,5823.0 2020-06-12,11574.0,6166.0 2020-06-13,11789.0,7135.0 2020-06-14,12477.0,8049.0 2020-06-15,11966.0,7419.0 2020-06-16,9955.0,10215.0 2020-06-17,10385.0,6922.0 2020-06-18,12451.0,7390.0 2020-06-19,13362.0,10386.0 2020-06-20,14178.0,9120.0 2020-06-21,15551.0,13925.0 2020-06-22,16116.0,9440.0 2020-06-23,14750.0,10994.0 2020-06-24,15842.0,10495.0 2020-06-25,16570.0,13012.0 2020-06-26,17666.0,13940.0 2020-06-27,18652.0,10244.0 2020-06-28,20090.0,13832.0 2020-06-29,20013.0,12010.0 2020-06-30,18803.0,13099.0 2020-07-01,18742.0,13157.0 2020-07-02,19231.0,11881.0 2020-07-03,21704.0,20032.0 2020-07-04,23803.0,14335.0 2020-07-05,25220.0,14856.0 2020-07-06,23964.0,15350.0 2020-07-07,22131.0,15515.0 2020-07-08,22768.0,16883.0 2020-07-09,25512.0,19547.0 2020-07-10,26730.0,19138.0 2020-07-11,27859.0,19870.0 2020-07-12,29029.0,19235.0 2020-07-13,29367.0,18850.0 2020-07-14,28677.0,17989.0 2020-07-15,30084.0,20572.0 2020-07-16,32934.0,20783.0 2020-07-17,35710.0,22942.0 2020-07-18,35252.0,17994.0 2020-07-19,39065.0,23672.0 2020-07-20,40425.0,22664.0 2020-07-21,37148.0,24491.0 2020-07-22,37724.0,28472.0 2020-07-23,45720.0,29557.0 2020-07-24,49310.0,34602.0 2020-07-25,48916.0,32223.0 2020-07-26,48661.0,36145.0 2020-07-27,49931.0,31991.0 2020-07-28,47703.0,35175.0 2020-07-29,48513.0,35286.0 2020-07-30,52123.0,32553.0 2020-07-31,55078.0,37223.0 2020-08-01,57118.0,36569.0 2020-08-02,54735.0,51255.0 2020-08-03,52972.0,40574.0 2020-08-04,52050.0,44306.0 2020-08-05,52509.0,51706.0 2020-08-06,56282.0,46121.0 2020-08-07,62538.0,49769.0 2020-08-08,61537.0,48900.0 2020-08-09,64399.0,53879.0 2020-08-10,62064.0,54859.0 2020-08-11,53601.0,47746.0 2020-08-12,60963.0,56110.0 2020-08-13,66999.0,56383.0 2020-08-14,64553.0,55573.0 2020-08-15,65002.0,57381.0 2020-08-16,63490.0,53322.0 2020-08-17,57981.0,57584.0 2020-08-18,55079.0,57937.0 2020-08-19,64531.0,60091.0 2020-08-20,69652.0,58794.0 2020-08-21,68898.0,62282.0 2020-08-22,69878.0,63631.0 2020-08-23,69239.0,57989.0 2020-08-24,61408.0,57469.0 2020-08-25,60975.0,66550.0 2020-08-26,67151.0,63173.0 2020-08-27,75760.0,56013.0 2020-08-28,77266.0,60177.0 2020-08-29,76472.0,65050.0 2020-08-30,78761.0,64935.0 2020-08-31,78512.0,60868.0 2020-09-01,69921.0,65081.0 2020-09-02,78357.0,62026.0 2020-09-03,83883.0,68584.0 2020-09-04,83341.0,66659.0 2020-09-05,86432.0,70072.0 2020-09-06,90632.0,73642.0 2020-09-07,90802.0,69564.0 2020-09-08,75809.0,73521.0 2020-09-09,89706.0,74894.0 2020-09-10,95735.0,72939.0 2020-09-11,96551.0,70880.0 2020-09-12,97570.0,81533.0 2020-09-13,94372.0,78399.0 2020-09-14,92071.0,77512.0 2020-09-15,83809.0,79292.0 2020-09-16,90123.0,82961.0 2020-09-17,97894.0,82719.0 2020-09-18,96424.0,87472.0 2020-09-19,93337.0,95880.0 2020-09-20,92605.0,94612.0 2020-09-21,86961.0,93356.0 2020-09-22,75083.0,101468.0 2020-09-23,83347.0,89746.0 2020-09-24,86508.0,87374.0 2020-09-25,86052.0,81177.0 2020-09-26,85362.0,93420.0 2020-09-27,88600.0,92043.0 2020-09-28,82170.0,74893.0 2020-09-29,70589.0,84877.0 2020-09-30,80472.0,86428.0 2020-10-01,86821.0,85376.0 2020-10-02,81484.0,78877.0 2020-10-03,79476.0,75628.0 2020-10-04,75829.0,82260.0 2020-10-05,74442.0,76737.0 2020-10-06,61267.0,75787.0 2020-10-07,72049.0,82203.0 2020-10-08,78524.0,83011.0 2020-10-09,70496.0,78365.0 2020-10-10,73272.0,82753.0 2020-10-11,74383.0,89154.0 2020-10-12,66732.0,71559.0 2020-10-13,55342.0,77760.0 2020-10-14,63509.0,74632.0 2020-10-15,67708.0,81514.0 2020-10-16,63371.0,70338.0 2020-10-17,62212.0,70816.0 2020-10-18,61871.0,72614.0 2020-10-19,55722.0,66399.0 2020-10-20,46790.0,69720.0 2020-10-21,54044.0,61775.0 2020-10-22,55839.0,79415.0 2020-10-23,54366.0,73979.0 2020-10-24,53370.0,67549.0 2020-10-25,50129.0,62077.0 2020-10-26,45148.0,59105.0 2020-10-27,36470.0,63842.0 2020-10-28,43893.0,58439.0 2020-10-29,49881.0,56480.0 2020-10-30,48648.0,57386.0 2020-10-31,48268.0,59454.0 2020-11-01,46963.0,58684.0 2020-11-02,45231.0,53285.0 2020-11-03,38310.0,58323.0 2020-11-04,46253.0,53357.0 2020-11-05,50210.0,55331.0 2020-11-06,47638.0,54157.0 2020-11-07,50356.0,53920.0 2020-11-08,45674.0,49082.0 2020-11-09,45903.0,48405.0 2020-11-10,38073.0,46084.0 2020-11-11,44281.0,50326.0 2020-11-12,47905.0,52718.0 2020-11-13,44879.0,49079.0 2020-11-14,44684.0,47992.0 2020-11-15,41100.0,42156.0 2020-11-16,30548.0,43851.0 2020-11-17,29163.0,40791.0 2020-11-18,38617.0,44739.0 2020-11-19,45576.0,48493.0 2020-11-20,45882.0,44807.0 2020-11-21,46232.0,49715.0 2020-11-22,45209.0,43493.0 2020-11-23,44059.0,41024.0 2020-11-24,37975.0,42314.0 2020-11-25,44376.0,37816.0 2020-11-26,44489.0,36367.0 2020-11-27,43082.0,39379.0 2020-11-28,41322.0,41452.0 2020-11-29,41810.0,42298.0 2020-11-30,38772.0,45333.0 2020-12-01,31118.0,41985.0 2020-12-02,36604.0,43062.0 2020-12-03,35551.0,40726.0 2020-12-04,36595.0,42916.0 2020-12-05,36652.0,42533.0 2020-12-06,36011.0,41970.0 2020-12-07,32981.0,39109.0 2020-12-08,26567.0,39045.0 2020-12-09,32080.0,36635.0 2020-12-10,31521.0,37725.0 2020-12-11,29398.0,37528.0 2020-12-12,30006.0,33494.0 2020-12-13,30254.0,33136.0 2020-12-14,27071.0,30695.0 2020-12-15,22004.0,34477.0 2020-12-16,26443.0,33813.0 2020-12-17,24010.0,33291.0 2020-12-18,22890.0,31087.0 2020-12-19,25152.0,29885.0 2020-12-20,26624.0,29690.0 2020-12-21,26921.0,25709.0 2020-12-22,10186.0,30376.0 2020-12-23,30736.0,26895.0 2020-12-24,24712.0,29791.0 2020-12-25,23067.0,24661.0 2020-12-26,22273.0,22274.0 2020-12-27,18732.0,21430.0 2020-12-28,20021.0,21131.0 2020-12-29,16432.0,24900.0 2020-12-30,20549.0,26572.0 2020-12-31,21822.0,26139.0 2021-01-01,20035.0,23181.0 2021-01-02,19079.0,22926.0 2021-01-03,18177.0,20923.0 2021-01-04,16504.0,19557.0 2021-01-05,16375.0,29091.0 2021-01-06,18088.0,21314.0 2021-01-07,20346.0,19587.0 2021-01-08,18139.0,20539.0 2021-01-09,18222.0,19253.0 2021-01-10,18645.0,19299.0 2021-01-11,16311.0,16959.0 2021-01-12,12584.0,18385.0 2021-01-13,15968.0,17817.0 2021-01-14,16946.0,17652.0 2021-01-15,15590.0,15975.0 2021-01-16,15158.0,16977.0 2021-01-17,15144.0,17170.0 2021-01-18,13788.0,14457.0 2021-01-19,10064.0,17411.0 2021-01-20,13823.0,16988.0 2021-01-21,15223.0,19965.0 2021-01-22,14545.0,18002.0 2021-01-23,14256.0,17130.0 2021-01-24,14849.0,15948.0 2021-01-25,7648.0,13298.0 2021-01-26,14657.0,15901.0 2021-01-27,12689.0,13320.0 2021-01-28,11666.0,14301.0 2021-01-29,18855.0,20746.0 2021-01-30,13083.0,14808.0 2021-01-31,13052.0,13965.0 2021-02-01,10448.0,11858.0 2021-02-02,9614.0,13423.0 2021-02-03,11039.0,14225.0 2021-02-04,12899.0,17824.0 2021-02-05,12408.0,15853.0 2021-02-06,11713.0,14488.0 2021-02-07,12059.0,11805.0 2021-02-08,11831.0,11904.0 2021-02-09,9110.0,14016.0 2021-02-10,11067.0,13087.0 2021-02-11,9096.0,11764.0 2021-02-12,13136.0,15858.0 2021-02-13,12143.0,11395.0 2021-02-14,12194.0,11106.0 2021-02-15,11649.0,9489.0 2021-02-16,9121.0,11805.0 2021-02-17,11610.0,11833.0 2021-02-18,7159.0,11987.0 2021-02-19,18915.0,10896.0 2021-02-20,13993.0,10307.0 2021-02-21,14264.0,11667.0 2021-02-22,14199.0,9695.0 2021-02-23,10584.0,13255.0 2021-02-24,26214.0,14037.0 2021-02-25,4266.0,11799.0 2021-02-26,16577.0,12179.0 2021-02-27,16488.0,12771.0 2021-02-28,16752.0,11718.0 2021-03-01,14418.0,11288.0 2021-03-02,13378.0,12464.0 2021-03-03,4078.0,13123.0 2021-03-04,28318.0,14031.0 2021-03-05,16838.0,13819.0 2021-03-06,18327.0,14234.0 2021-03-07,18711.0,14392.0 2021-03-08,18599.0,14278.0 2021-03-09,1474.0,16596.0 2021-03-10,31835.0,20652.0 2021-03-11,0.0,12917.0 2021-03-12,22854.0,18100.0 2021-03-13,48167.0,35114.0 2021-03-14,25320.0,16637.0 2021-03-15,26291.0,17455.0 2021-03-16,24492.0,20191.0 2021-03-17,28903.0,17741.0 2021-03-18,35871.0,17741.0 2021-03-19,39726.0,20654.0 2021-03-20,40953.0,23653.0 2021-03-21,43846.0,22956.0 2021-03-22,46951.0,21180.0 2021-03-23,40715.0,29785.0 2021-03-24,47262.0,23907.0 2021-03-25,53476.0,26490.0 2021-03-26,59118.0,32987.0 2021-03-27,62258.0,30386.0 2021-03-28,62714.0,28739.0 2021-03-29,68020.0,32231.0 2021-03-30,56211.0,37028.0 2021-03-31,53480.0,41280.0 2021-04-01,76806.0,40382.0 2021-04-02,76990.0,50356.0 2021-04-03,89129.0,44202.0 2021-04-04,93249.0,60048.0 2021-04-05,103558.0,52847.0 2021-04-06,96982.0,50143.0 2021-04-07,115736.0,59856.0 2021-04-08,126789.0,59258.0 2021-04-09,131968.0,61899.0 2021-04-10,145384.0,77567.0 2021-04-11,152879.0,90584.0 2021-04-12,168912.0,75086.0 2021-04-13,161736.0,97168.0 2021-04-14,184372.0,82339.0 2021-04-15,200739.0,93528.0 2021-04-16,217353.0,118302.0 2021-04-17,234692.0,123354.0 2021-04-18,261500.0,138423.0 2021-04-19,273810.0,144178.0 2021-04-20,259170.0,154761.0 2021-04-21,295041.0,167457.0 2021-04-22,314835.0,178841.0 2021-04-23,332730.0,193279.0 2021-04-24,346786.0,219838.0 2021-04-25,349691.0,217113.0 2021-04-26,352991.0,219272.0 2021-04-27,323144.0,251827.0 2021-04-28,360960.0,261162.0 2021-04-29,379257.0,269507.0 2021-04-30,386452.0,297540.0 2021-05-01,401993.0,299988.0 2021-05-02,392488.0,307865.0 2021-05-03,368147.0,300732.0 2021-05-04,357229.0,320289.0 2021-05-05,382315.0,338439.0 2021-05-06,412262.0,329113.0 2021-05-07,414188.0,331507.0 2021-05-08,401078.0,318609.0 2021-05-09,403738.0,386444.0 2021-05-10,366161.0,353818.0 2021-05-11,329942.0,356082.0 2021-05-12,348421.0,355338.0 2021-05-13,362727.0,352181.0 2021-05-14,343144.0,344776.0 2021-05-15,326098.0,353299.0 2021-05-16,311170.0,362437.0 2021-05-17,281386.0,378741.0 2021-05-18,263533.0,422436.0 2021-05-19,267334.0,389851.0 2021-05-20,276110.0,369077.0 2021-05-21,259551.0,357295.0 2021-05-22,257299.0,357630.0 2021-05-23,240842.0,355102.0 2021-05-24,222315.0,302544.0 2021-05-25,196427.0,326850.0 2021-05-26,208921.0,295955.0 2021-05-27,211298.0,283135.0 2021-05-28,186364.0,259459.0 2021-05-29,173790.0,284601.0 2021-05-30,165553.0,276309.0 2021-05-31,152734.0,238022.0 2021-06-01,127510.0,255287.0 2021-06-02,132788.0,231456.0 2021-06-03,134154.0,211499.0 2021-06-04,132364.0,207071.0 2021-06-05,120529.0,197894.0 2021-06-06,114460.0,189232.0 2021-06-07,100636.0,174399.0 2021-06-08,86498.0,182282.0 2021-06-09,92596.0,162664.0 2021-06-10,94052.0,151367.0 2021-06-11,91702.0,134580.0 2021-06-12,84332.0,121311.0 2021-06-13,80834.0,132062.0 2021-06-14,70421.0,119501.0 2021-06-15,60471.0,117525.0 2021-06-16,62224.0,107628.0 2021-06-17,67208.0,103570.0 2021-06-18,62480.0,88977.0 2021-06-19,60753.0,97743.0 2021-06-20,58419.0,87619.0 2021-06-21,53256.0,78190.0 2021-06-22,42640.0,81839.0 2021-06-23,50848.0,68817.0 2021-06-24,54069.0,68885.0 2021-06-25,51667.0,64527.0 2021-06-26,48698.0,64818.0 2021-06-27,50040.0,57944.0 2021-06-28,46148.0,58578.0 2021-06-29,37566.0,56994.0 2021-06-30,45951.0,60729.0 2021-07-01,48786.0,61588.0 2021-07-02,46617.0,59384.0 2021-07-03,44111.0,57477.0 2021-07-04,43071.0,52299.0 2021-07-05,39796.0,42352.0 2021-07-06,34703.0,51864.0 2021-07-07,43733.0,47240.0 2021-07-08,45892.0,44291.0 2021-07-09,43393.0,44459.0 2021-07-10,42766.0,45254.0 2021-07-11,41506.0,41526.0 2021-07-12,37154.0,39649.0 2021-07-13,32906.0,49007.0 2021-07-14,38792.0,41000.0 2021-07-15,41806.0,39130.0 2021-07-16,38949.0,40026.0 2021-07-17,38079.0,43916.0 2021-07-18,41157.0,42004.0 2021-07-19,38164.0,38660.0 2021-07-20,30093.0,45254.0 2021-07-21,42015.0,36977.0 2021-07-22,41383.0,38652.0 2021-07-23,35342.0,38740.0 2021-07-24,39097.0,35087.0 2021-07-25,39742.0,39972.0 2021-07-26,39361.0,35968.0 2021-07-27,29689.0,42363.0 2021-07-28,43654.0,41678.0 2021-07-29,43509.0,38465.0 2021-07-30,44230.0,42360.0 2021-07-31,41649.0,37291.0 2021-08-01,41831.0,39258.0 2021-08-02,40134.0,36946.0 2021-08-03,30549.0,38887.0 2021-08-04,42625.0,36668.0 2021-08-05,42982.0,41726.0 2021-08-06,44643.0,41096.0 2021-08-07,38628.0,40017.0 2021-08-08,39070.0,43910.0 2021-08-09,35499.0,39686.0 ================================================ FILE: examples/data/data.csv ================================================ time,Abby Johnson,Abdul Aziz Al Ghurair,Abigail Johnson,Akira Mori,Alain & Gerard Wertheimer,Alain & 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 & 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 & 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 & 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 & 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 2001,,,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,,,, 2002,,,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,,,,, 2003,,,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,,,, 2004,,,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,,, 2005,,,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,,, 2006,,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,, 2007,,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,,,,,,,, 2008,,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,,,,,,,, 2009,,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,,,,,,,, 2010,,,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,,,,,,,, 2011,,,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,,,,,,,, 2012,,,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,,,,,,,, 2013,,,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 2014,,,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 2015,,,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,,,,,,,, 2016,,,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,,,,,,,, 2017,,,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,,,,,, 2018,,,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, 2019,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, ================================================ FILE: examples/data/map.csv ================================================ 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 1960,,,,,,,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,, 1961,,,,,,,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,, 1962,,,,,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,, 1963,,,,,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,, 1964,,,,,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,, 1965,,,,,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 1966,,,,,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 1967,,,,,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 1968,,,,,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 1969,,,,,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 1970,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 1971,,,,,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 1972,,,,,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 1973,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 1974,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 1975,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 1976,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 1977,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 1978,,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 1979,,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 1980,,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 1981,,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 1982,,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 1983,,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 1984,,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 1985,,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 1986,,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 1987,,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 1988,,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 1989,,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 1990,,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 1991,,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 1992,,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 1993,,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 1994,,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 1995,,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 1996,,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 1997,,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 1998,,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 1999,,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 2000,,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 2001,,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 2002,,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 2003,,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 2004,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 2005,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 2006,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 2007,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, 2008,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, 2009,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, 2010,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 2011,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 2012,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 2013,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 2014,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 2015,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 2016,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 2017,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 2018,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 ================================================ FILE: examples/data/sample.csv ================================================ time,Afghanistan,Angola,Albania,USA,Argentina 1960-01-01,1.0,2.0,1.0,5.0,1.0 1961-01-01,2.0,3.0,2.0,3.0,4.0 1962-01-01,3.0,4.0,5.0,2.0,5.0 ================================================ FILE: examples/example1.py ================================================ import pandas as pd from matplotlib import pyplot as plt import pynimate as nim df = pd.DataFrame( { "time": ["1960-01-01", "1961-01-01", "1962-01-01"], "Afghanistan": [1, 2, 3], "Angola": [2, 3, 4], "Albania": [1, 2, 5], "USA": [5, 3, 4], "Argentina": [1, 4, 5], } ).set_index("time") cnv = nim.Canvas() bar = nim.Barhplot.from_df(df, "%Y-%m-%d", "2d") bar.set_time(callback=lambda i, datafier: datafier.data.index[i].strftime("%b, %Y")) cnv.add_plot(bar) cnv.animate() # cnv.save("example1", 24, "gif") plt.show() ================================================ FILE: examples/example2.py ================================================ import os import matplotlib as mpl import matplotlib.ticker as tick import pandas as pd from matplotlib import pyplot as plt import pynimate as nim from pynimate.utils import human_readable dir_path = os.path.dirname(os.path.realpath(__file__)) for side in ["left", "right", "top", "bottom"]: mpl.rcParams[f"axes.spines.{side}"] = False def post(self, i): self.ax.xaxis.set_major_formatter( tick.FuncFormatter(lambda x, pos: human_readable(x)) ) df = pd.read_csv(dir_path + "/data/map.csv").set_index("time") cnv = nim.Canvas() dfx = pd.DataFrame( { "time": ["2012", "2013", "2014"], "col1": [1, 2, 3], "col2": [3, 2, 1], } ).set_index("time") bar = nim.Barhplot.from_df(df, "%Y", "MS", post_update=post, grid=False) bar.set_title("Top 10 Richest Person in the World (yearly)") bar.set_xlabel("Net Worth in Billion USD") bar.set_time(callback=lambda i, dfr: dfr.data.index[i].year) bar.set_bar_annots(text_callback=human_readable) cnv.add_plot(bar) cnv.animate() plt.show() # cnv.save("example1", 24, "gif") ================================================ FILE: examples/example3.py ================================================ import os import matplotlib as mpl import numpy as np import pandas as pd from matplotlib import pyplot as plt import pynimate as nim dir_path = os.path.dirname(os.path.realpath(__file__)) mpl.rcParams["axes.facecolor"] = "#001219" for side in ["left", "right", "top", "bottom"]: mpl.rcParams[f"axes.spines.{side}"] = False def post_update(self, i): # annotates continents next to bars for ind, (bar, x, y) in enumerate( zip(self.bar_attr.top_cols, self.bar_attr.bar_length, self.bar_attr.bar_rank) ): self.ax.text( x - 0.3, y, self.dfr.col_var.loc[bar, "continent"], ha="right", color="k", size=12, zorder=ind, ) df = pd.read_csv(dir_path + "/data/sample.csv").set_index("time") col_var = pd.DataFrame( { "columns": ["Afghanistan", "Angola", "Albania", "USA", "Argentina"], "continent": ["Asia", "Africa", "Europe", "N America", "S America"], } ).set_index("columns") bar_cols = { "Afghanistan": "#2a9d8f", "Angola": "#e9c46a", "Albania": "#e76f51", "USA": "#a7c957", "Argentina": "#e5989b", } cnv = nim.Canvas(figsize=(12.8, 7.2), facecolor="#001219") dfr = nim.BarDatafier(df, "%Y-%m-%d", "3d") dfr.add_var(col_var=col_var) bar = nim.Barhplot(dfr, post_update=post_update, rounded_edges=True, grid=False) bar.set_column_colors(bar_cols) bar.set_title("Sample Title", color="w", weight=600) bar.set_xlabel("xlabel", color="w") bar.set_time( callback=lambda i, datafier: datafier.data.index[i].strftime("%b, %Y"), color="w" ) bar.set_text( "sum", callback=lambda i, datafier: f"Total :{np.round(datafier.data.iloc[i].sum(), 2)}", size=20, x=0.72, y=0.20, color="w", ) bar.set_bar_annots(color="w", size=13) bar.set_xticks(colors="w", length=0, labelsize=13) bar.set_yticks(colors="w", labelsize=13) bar.set_bar_border_props( edge_color="black", pad=0.1, mutation_aspect=1, radius=0.2, mutation_scale=0.6 ) cnv.add_plot(bar) cnv.animate() # plt.show() cnv.save( "example3", 24, ) ================================================ FILE: examples/lineplot_dark1.py ================================================ import os import matplotlib as mpl import matplotlib.pyplot as plt import matplotlib.ticker as tick import pandas as pd import pynimate as nim from pynimate.utils import human_readable for side in ["left", "right", "top", "bottom"]: mpl.rcParams[f"axes.spines.{side}"] = False mpl.rcParams["figure.facecolor"] = "#001219" mpl.rcParams["axes.facecolor"] = "#001219" mpl.rcParams["savefig.facecolor"] = "#001219" dir_path = os.path.dirname(os.path.realpath(__file__)) def post(self, i): self.ax.yaxis.set_major_formatter( tick.FuncFormatter(lambda x, pos: human_readable(x)) ) df = pd.read_csv(dir_path + "/data/covid_IN.csv").set_index("time") df = df["2020-05-01":"2021-01-01"] cnv = nim.Canvas() dfr = nim.LineDatafier(df, "%Y-%m-%d", "12h") plot = nim.Lineplot( dfr, post_update=post, palettes=["Set3"], scatter_markers=False, legend=True, fixed_ylim=True, grid=False, ) plot.set_column_linestyles({"cured": "dashed"}) plot.set_title("Covid cases India(2020)", y=1.05, color="w", weight=600) plot.set_xlabel("date", color="w", size=11) plot.set_time( callback=lambda i, datafier: datafier.data.index[i].strftime("%d %b, %Y"), color="w", size=13, ) plot.set_line_annots(lambda col, val: f"({human_readable(val)})", color="w") plot.set_legend(labelcolor="w") plot.set_text( "sum", callback=lambda i, datafier: f"Total cases :{human_readable(datafier.data.cases.iloc[:i+1].sum() )}", size=10, x=0.84, y=0.20, color="w", ) plot.set_xticks(colors="w", length=0, labelsize=10) plot.set_yticks(colors="w", labelsize=10) cnv.add_plot(plot) cnv.animate(interval=20) cnv.save("lineplot_dark", 24) plt.show() ================================================ FILE: examples/lineplot_ex1.py ================================================ import os import matplotlib as mpl import matplotlib.pyplot as plt import pandas as pd import pynimate as nim for side in ["left", "right", "top", "bottom"]: mpl.rcParams[f"axes.spines.{side}"] = False dir_path = os.path.dirname(os.path.realpath(__file__)) df = pd.read_csv(dir_path + "/data/map.csv").set_index("time") df = df.drop(columns=["USA"]).iloc[:, :8] cnv = nim.Canvas() plot = nim.Lineplot.from_df( df, "%Y", "6MS", palettes=["Dark2"], legend=False, grid=False ) plot.set_time(callback=lambda i, datafier: datafier.data.index[i].year) plot.set_column_linestyles({"Albania": "dashed"}) cnv.add_plot(plot) print(plot.column_linestyles) cnv.animate() # cnv.save("tt", 24) plt.show() ================================================ FILE: mkdocs.yml ================================================ # Project information site_name: Pynimate site_url: https://julkaar9.github.io/ site_author: julkar9 site_description: >- Pynimate is a python package for statistical data analysis # Repository repo_name: julkaar9/pynimate repo_url: https://github.com/julkaar9/pynimate # Copyright copyright: Copyright © 2023 Md Julkarnaeen theme: name: material logo: assets/pynimate_logo.png favicon: assets/favicon.png features: - content.code.annotate - content.tooltips - navigation.indexes - navigation.sections - navigation.tabs - navigation.top - navigation.tracking - toc.follow palette: - scheme: default primary: white accent: teal toggle: icon: material/weather-night name: Switch to dark mode - scheme: slate primary: black accent: teal toggle: icon: material/weather-sunny name: Switch to light mode icon: repo: fontawesome/brands/github nav: - Home: - Home: index.md - Getting started: guide/starter.md - User Guide: - BarChart Dark Mode: guide/dark_mode.md - Lineplot Dark Mode: guide/lineplot_darkmode.md - Api Reference: - Animators: - Canvas: reference/canvas.md - Baseplot: reference/baseplot.md - Barhplot: reference/barhplot.md - Lineplot: reference/lineplot.md - Barplot: reference/barplot.md - Data Modifiers: - BaseDatafier: reference/datafiers/base_datafier.md - BarDatafier: reference/datafiers/bar_datafier.md - LineDatafier: reference/datafiers/line_datafier.md - Datafier: reference/datafiers/datafier.md - Utils: reference/utils.md # Customization extra: # analytics: # provider: google # property: !ENV GOOGLE_ANALYTICS_KEY social: - icon: fontawesome/brands/github link: https://github.com/julkaar9/pynimate - icon: fontawesome/brands/python link: https://pypi.org/project/pynimate/ markdown_extensions: - pymdownx.highlight: anchor_linenums: true - pymdownx.inlinehilite - pymdownx.snippets - pymdownx.superfences plugins: - mkdocstrings - search ================================================ FILE: pyproject.toml ================================================ # pyproject.toml [build-system] requires = ["setuptools>=61.0.0", "wheel"] build-backend = "setuptools.build_meta" [tool.setuptools.packages.find] where = ["src"] [project] name = "pynimate" version = "1.3.0" description = "Python package for statistical data animations" readme = "README.md" authors = [{ name = "julkar9", email = "julkar9dev@gmail.com" }] license = { text = "MIT License (MIT)" } classifiers = [ "License :: OSI Approved :: MIT License", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Operating System :: OS Independent", "Topic :: Software Development :: Libraries :: Application Frameworks", "Topic :: Software Development :: Libraries :: Python Modules", ] keywords = ["animations", "framework", "data", "plots"] dependencies = [ "numpy", "pandas", "matplotlib", "seaborn", ] requires-python = ">=3.9" [project.optional-dependencies] dev = ["black", "isort","mkdocs-material", "pip-tools", "pytest", "mkdocstrings[python]"] [project.urls] Homepage = "https://github.com/julkaar9/pynimate" Documentation = "https://julkaar9.github.io/pynimate/" ================================================ FILE: requirements.txt ================================================ # # This file is autogenerated by pip-compile with python 3.9 # To update, run: # # pip-compile --extra=dev pyproject.toml # black==23.3.0 # via pynimate (pyproject.toml) build==0.10.0 # via pip-tools certifi==2022.12.7 # via requests charset-normalizer==3.1.0 # via requests click==8.1.3 # via # black # mkdocs # pip-tools colorama==0.4.6 # via # build # click # griffe # mkdocs # mkdocs-material # pytest contourpy==1.0.6 # via matplotlib cycler==0.11.0 # via matplotlib exceptiongroup==1.1.1 # via pytest fonttools==4.38.0 # via matplotlib ghp-import==2.1.0 # via mkdocs griffe==0.27.0 # via mkdocstrings-python idna==3.4 # via requests importlib-metadata==6.4.1 # via # markdown # mkdocs iniconfig==2.0.0 # via pytest isort==5.12.0 # via pynimate (pyproject.toml) jinja2==3.1.2 # via # mkdocs # mkdocs-material # mkdocstrings kiwisolver==1.4.4 # via matplotlib markdown==3.3.7 # via # mkdocs # mkdocs-autorefs # mkdocs-material # mkdocstrings # pymdown-extensions markupsafe==2.1.2 # via # jinja2 # mkdocstrings matplotlib==3.6.2 # via # pynimate (pyproject.toml) # seaborn mergedeep==1.3.4 # via mkdocs mkdocs==1.4.2 # via # mkdocs-autorefs # mkdocs-material # mkdocstrings mkdocs-autorefs==0.4.1 # via mkdocstrings mkdocs-material==9.1.6 # via pynimate (pyproject.toml) mkdocs-material-extensions==1.1.1 # via mkdocs-material mkdocstrings[python]==0.21.2 # via # mkdocstrings-python # pynimate (pyproject.toml) mkdocstrings-python==0.9.0 # via mkdocstrings mypy-extensions==1.0.0 # via black numpy==1.23.4 # via # contourpy # matplotlib # pandas # pynimate (pyproject.toml) # seaborn packaging==23.1 # via # black # build # matplotlib # mkdocs # pytest pandas==1.5.1 # via # pynimate (pyproject.toml) # seaborn pathspec==0.11.1 # via black pillow==9.3.0 # via matplotlib pip-tools==6.13.0 # via pynimate (pyproject.toml) platformdirs==3.2.0 # via black pluggy==1.0.0 # via pytest pygments==2.15.0 # via mkdocs-material pymdown-extensions==9.11 # via # mkdocs-material # mkdocstrings pyparsing==3.0.9 # via matplotlib pyproject-hooks==1.0.0 # via build pytest==7.3.1 # via pynimate (pyproject.toml) python-dateutil==2.8.2 # via # ghp-import # matplotlib # pandas pytz==2022.6 # via pandas pyyaml==6.0 # via # mkdocs # pymdown-extensions # pyyaml-env-tag pyyaml-env-tag==0.1 # via mkdocs regex==2023.3.23 # via mkdocs-material requests==2.28.2 # via mkdocs-material seaborn==0.12.1 # via pynimate (pyproject.toml) six==1.16.0 # via python-dateutil tomli==2.0.1 # via # black # build # pyproject-hooks # pytest typing-extensions==4.5.0 # via # black # mkdocstrings urllib3==1.26.15 # via requests watchdog==3.0.0 # via mkdocs wheel==0.40.0 # via pip-tools zipp==3.15.0 # via importlib-metadata # The following packages are considered to be unsafe in a requirements file: # pip # setuptools ================================================ FILE: setup.py ================================================ # setup.py from setuptools import setup setup() ================================================ FILE: src/pynimate/__init__.py ================================================ """ Pynimate ===== Python package for statistical data animations. Available Plots --------------- Barhplot Horizontal Bar Chart Race module Lineplot Module for Lineplot animations Barhplot Example --------------- It is assumed `pynimate` is imported as `nim`. >>> import pynimate as nim >>> import pandas as pd >>> df = pd.read_csv("sample.csv").set_index("time") >>> nim.Canvas() >>> bar = nim.Barhplot.from_df(df, '%Y-%m-%d', 'MS') >>> bar.set_time(callback=lambda i, datafier: datafier.data.index[i].year) >>> bar.set_bar_annots(text_callback=human_readable) >>> cnv.add_plot(bar) >>> cnv.animate() >>> cnv.save('sample', fps=24) """ __version__ = "1.3.0" from .bar import Barplot from .barhplot import Barhplot from .baseplot import Baseplot from .canvas import Canvas from .datafier import BarDatafier, BaseDatafier, Datafier, LineDatafier from .lineplot import Lineplot ================================================ FILE: src/pynimate/__init__.pyi ================================================ from pynimate.bar import Barplot from pynimate.barhplot import Barhplot from pynimate.baseplot import Baseplot from pynimate.canvas import Canvas from pynimate.datafier import BarDatafier, BaseDatafier, Datafier, LineDatafier from pynimate.lineplot import Lineplot __all__ = [ "Canvas", "Barplot", "Datafier", "Baseplot", "Barhplot", "Lineplot", "BaseDatafier", "BarDatafier", "LineDatafier", ] ================================================ FILE: src/pynimate/bar.py ================================================ import warnings from types import SimpleNamespace from typing import Callable, Union import matplotlib.pyplot as plt import numpy as np import pandas as pd from matplotlib.patches import FancyBboxPatch from pynimate.datafier import Datafier class Barplot: def __init__( self, data: pd.DataFrame, time_format: str, ip_freq: str, ip_frac: float = 0.5, n_bars: int = 10, palettes: list[str] = ["viridis"], post_update: Callable[ [plt.Axes, int, pd.DataFrame, pd.DataFrame, SimpleNamespace], None ] = None, annot_bars: bool = True, fixed_xlim: bool = True, xticks: bool = True, yticks: bool = True, grid: bool = True, rounded_edges: bool = False, ) -> None: """ Barplot is deprecated, use Barhplot instead BarChartRace module that requires a valid time index.The data should be in this format where time is set to index ``` Example: >>> time col1 col2 col3 ... >>> 2012 1 0 2 >>> 2013 2 3 1 ``` Parameters ---------- data : pd.DataFrame The data to be prepared time_format : str Index datetime format ip_freq : str Interpolation frequency ip_frac : float, optional Interpolation fraction (check end of docstring), by default 0.5 n_bars : int, optional Number of bars to be visible on the plot, by default 10 or less palettes : list[str], optional List of color palettes to generate bar colors, by default ["viridis"] post_update : Callable[[plt.Axes, int, Datafier, SimpleNamespace], None], optional callback function for additional customization, by default None annot_bars : bool, optional Sets bar annotations, by default True fixed_xlim : bool, optional If False xlim will gradually change in every frame, by default True xticks : bool, optional Sets xticks, by default True yticks : bool, optional Sets yticks, by default True grid : bool, optional Sets xgrid, by default True rounded_edges : bool, optional Sets rounded bar edges, by default False post_update args: ``` plt.Axes: The matplotlib Axes used for the barplot int: Current animation frame or dataframe row Datafier: The underlying datafier instance SimpleNamespace: Contains the following attributes - bar_rank, bar_length, top_bars, bar_colors example: >>> def post_update(ax, i, datafier, bar_attr): >>> # sets log scale for x-axis >>> ax.set_xscale("log") ``` ip_frac description: ``` ip_frac is the percentage of NaN values to be linearly interpolated for column ranks Consider this example >>> a b >>> date >>> 2021-11-13 1.0 4.0 >>> 2021-11-14 NaN NaN >>> 2021-11-15 NaN NaN >>> 2021-11-16 NaN NaN >>> 2021-11-17 NaN NaN >>> 2021-11-18 2.0 6.0 with ip_frac set to 0.5, 50% of NaN's will be linearly interpolated while the rest will back filled. >>> a b >>> 2021-11-13 1.00 4.00 << original value -------- >>> 2021-11-14 1.33 4.67 | >>> 2021-11-15 1.67 5.33 | 50% linearly >>> 2021-11-16 2.00 6.00 <- linear interpolation | interpolated >>> 2021-11-17 2.00 6.00 upto here | rest are filled. >>> 2021-11-18 2.00 6.00 << original value--------- This adds some stability in the barChartRace and reduces constantly shaking of bars. ``` """ warnings.warn( "Barplot is deprecated, use Barhplot instead.", DeprecationWarning ) self.n_bars = min(n_bars, len(data.columns)) self.datafier = Datafier(data, time_format, ip_freq, ip_frac, n_bars, palettes) self.post_update = post_update or (lambda *args: None) self.time_range = list(self.datafier.data.index) self.length = len(self.time_range) self.annot_bars = annot_bars self.fixed_xlim = fixed_xlim self.xticks = xticks self.yticks = yticks self.grid = grid self.rounded_edges = rounded_edges fig, self.ax = plt.subplots() plt.close(fig) self.text_collection = {} self.extra_callbacks = {} self.set_xylim() self.set_barh() self.set_bar_border_props() self.set_xticks() self.set_yticks() self.set_grid() self.set_bar_annots() self.set_time() def add_var(self, row_var: pd.DataFrame = None, col_var: pd.DataFrame = None): """Adds additional variables to the data, both row and column wise.\n Row wise data format: The index should be equal to that of the actual data ``` time leap_year col2 ... 2012 yes 0 2013 no 3 ``` Column wise data format: The index should be equal to the columns of the actual data. ``` index continent col2 ... ind Asia 0 usa N America 3 jap Asia 2 ``` Parameters ---------- row_var : pd.DataFrame, optional Dataframe containing variables related to time, by default None col_var : pd.DataFrame, optional Dataframe containing variables related to columns, by default None """ self.datafier.add_var(row_var, col_var) def set_bar_color(self, colors: Union[list, dict[str, str]]): """If colors is a list, length of colors should be equal to no of `datafier.bar_colors`. If it is a dict, all columns of `datafier.top_cols` should be mapped to a color Parameters ---------- colors : Union[list, dict[str, str]] list of colors or dict of column to color mapping """ assert len(colors) == len( self.datafier.bar_colors ), "Number of colors does not match number of columns" if isinstance(colors, list): self.datafier.bar_colors = { k: v2 for v2, (k, v1) in zip(colors, self.datafier.bar_colors.items()) } elif isinstance(colors, dict): assert ( colors.keys() == self.datafier.bar_colors.keys() ), "All columns of datafier.top_cols are not present." self.datafier.bar_colors = colors else: ValueError("colors must be list or dict") def set_axes(self, ax: plt.Axes) -> None: """Sets the Axes of this plot Parameters ---------- ax : plt.Axes Axes of this plot """ self.ax = ax def set_xylim( self, xlim: list[float] = [], ylim: list[float] = [], ) -> None: """Sets xlim and ylim Parameters ---------- xlim : list[float], optional x axis limits in this format [min, max], by default [min, max + 5] ylim : list[float], optional y axis limits in this format [min, max], by default [0.5, n_bars + 0.6] """ if xlim != None: assert ( len(xlim) == 2 or len(xlim) == 0 ), "xlim is incorrect (correct format - [minLim, maxLim])" # closes the previous figure window # if hasattr(self, "fig"): # plt.close(self.fig) if xlim != None: if xlim == []: self.total_max = self.datafier.data.max().max() xlim = [None, self.total_max + 5] self.xlim = xlim # self.ax.set_xlim(xlim) if ylim == []: ylim = [0.5, self.n_bars + 0.6] self.ylim = ylim def getTopXY(self, i: int) -> SimpleNamespace: """Prepares top n_bar columns and their respective attributes such as position, length, colors. Not meant to be used outside animation update Parameters ---------- i : int Animation frame index Returns ------- SimpleNamespace Bar rank, length. Top columns and their respective colors """ bar_rank = self.datafier.df_ranks.iloc[i].values top_filt = (bar_rank >= 1) & (bar_rank <= self.n_bars) bar_rank = bar_rank[top_filt] bar_length = self.datafier.data.iloc[i].values[top_filt] cols = self.datafier.data.columns[top_filt] colors = [self.datafier.bar_colors[column] for column in cols] return SimpleNamespace( bar_rank=bar_rank, bar_length=bar_length, top_bars=cols, bar_colors=colors ) def set_title( self, title: str, x: float = 0, y: float = 1.01, size: float = 13, color: str = "#777777", **kwargs, ) -> None: """Sets the plot title and additional `kwargs` are passed to plt.text(**kwargs) Parameters ---------- title : str Title text x : float, optional x coordinate of the text, by default 0 y : float, optional y coordinate, by default 1.01 size : float, optional text size, by default 13 color : str, optional text color, by default "#777777" """ self.text_collection["title"] = ( None, { **{ "x": x, "y": y, "s": title, "color": color, "size": size, }, **kwargs, }, ) def set_xlabel( self, text: str, x: float = 0.43, y: float = -0.09, size: float = 13, color: str = "#777777", **kwargs, ) -> None: """Sets the plot xlabel and additional `kwargs` are passed to plt.text(**kwargs) Parameters ---------- text : str The xlabel text x : float, optional X coordinate of the text, by default 0.43 y : float, optional Y coordinate, by default -0.09 size : float, optional Text size, by default 13 color : str, optional Text color, by default "#777777" """ self.text_collection["xlabel"] = ( None, { **{ "x": x, "y": y, "s": text, "color": color, "size": size, }, **kwargs, }, ) def set_time( self, callback: Callable[ [int, Datafier], str ] = lambda i, datafier: datafier.data.index[i], x: float = 0.97, y: float = 0.27, size: float = 46, weight: float = 800, ha="right", color: str = "#777777", **kwargs, ) -> None: """Annotates the time in the plot and additional `kwargs` are passed to plt.text(**kwargs) Parameters ---------- callback : Callable[ [int, pd.DataFrame], str ], optional Callback function to customize the time text, by default `lambda i, datafier: datafier.data.index[i]` x : float, optional x coordinate of the text, by default 0.97 y : float, optional y coordinate of the text, by default 0.27 size : float, optional text size, by default 46 weight : float, optional text weight, by default 800 ha : str, optional horizontal alignment, by default "right" color : str, optional text color, by default "#777777" callback args: ``` i: Animation frame / data row index datafier: The datafier instance, access the data using datafier.data ``` """ self.text_collection["time"] = ( callback, { **{ "x": x, "y": y, "color": color, "size": size, "weight": weight, "ha": ha, }, **kwargs, }, ) def set_text( self, key: str, text: str = None, callback: Callable[[int, Datafier], str] = None, x: float = 0, y: str = 0, size: float = 13, color: str = "#777777", **kwargs, ): """General function to add custom texts in the plot. Either text or callback should be passd but not both. Parameters ---------- key : str Unique identifier for each texts, note: These keys, title, xlabel, time, are reserved. overwrite them if you wish to use callbacks instead of texts in title or xlabel text : str, optional The text to be added in the plot, by default None callback : Callable[[int, pd.DataFrame], str], optional Callback function to customize the text, by default None x : float, optional X coordinate of the text, by default 0 y : str, optional Y coordinate of the text, by default 0 size : float, optional Text size, by default 13 color : str, optional Text color, by default "#777777" Callback args: ``` args: i: Animation frame / data row index datafier: The datafier instance Example: >>> lambda i, datafier: datafier.data.index[i] ``` """ assert text or callback, "Both text and callback cannot be None" self.text_collection[key] = ( callback, { **{ "x": x, "y": y, "s": text, "color": color, "size": size, }, **kwargs, }, ) if callback: self.text_collection[key][1].pop("s") def remove_text(self, keys: list[str]): """Removes texts by key Parameters ---------- keys : list[str] List of keys to be removed """ for key in keys: self.text_collection.pop(key) def set_bar_border_props( self, edge_color: str = "k", radius: float = 0.5, pad: float = -0.0040, mutation_aspect: float = 0.2, **kwargs, ) -> None: """Sets bar border properties. Additional `kwargs` are passed to FancyBboxPatch. See https://matplotlib.org/3.1.0/api/_as_gen/matplotlib.patches.FancyBboxPatch.html Parameters ---------- edge_color : str, optional Bar edge color, by default "k" radius : float, optional Bar border radius, by default 0.5 pad : float, optional See above link, by default -0.0040 mutation_aspect : float, optional See above link, by default 0.2 """ self.bar_border_props = { "edge_color": edge_color, "radius": radius, "pad": pad, "mutation_aspect": mutation_aspect, "kwargs": kwargs, } def _get_rounded_eges( self, ) -> None: """Creates bar border properties. See https://matplotlib.org/3.1.0/api/_as_gen/matplotlib.patches.FancyBboxPatch.html """ border = self.bar_border_props self.new_patches = [] for patch in reversed(self.ax.patches): bb = patch.get_bbox() color = patch.get_facecolor() p_bbox = FancyBboxPatch( (bb.xmin, bb.ymin), abs(bb.width), abs(bb.height), boxstyle=f"round,pad={border['pad']}" + ( f",rounding_size={border['radius']}" if border["radius"] != None else "" ), ec=border["edge_color"], fc=color, mutation_aspect=border["mutation_aspect"], **border["kwargs"], ) patch.remove() self.new_patches.append(p_bbox) def set_barh(self, bar_height: float = 0.86, **kwargs): """Sets barh properties, addition `kwargs` are passed to ax.barh(**kwargs) Parameters ---------- bar_height : float, optional Height of the bars (Note this is horizontal barplot), by default 0.86 """ self.barh_props = {**kwargs} self.barh_props["height"] = bar_height def set_xticks( self, axis: str = "x", colors: str = "#777777", labelsize: float = 12, **kwargs ): """Sets xtick properties, additional `kwargs` are passed to ax.tick_params(**.kwargs) Parameters ---------- axis : str, optional Defines tick axis, by default "x" colors : str, optional Sets tick color, by default "#777777" labelsize : float, optional Sets tick size, by default 12 """ self.xtick_props = { "axis": axis, "colors": colors, "labelsize": labelsize, **kwargs, } def set_yticks( self, axis: str = "y", colors: str = "#777777", labelsize: float = 10, **kwargs ): """Sets ytick properties, additional `kwargs` are passed to ax.tick_params(**kwargs) Parameters ---------- axis : str, optional Defines tick axis, by default "y" colors : str, optional Sets tick color, by default "#777777" labelsize : float, optional Sets tick size, by default 10 """ self.ytick_props = { "axis": axis, "colors": colors, "labelsize": labelsize, **kwargs, } def set_grid( self, which: str = "major", axis: str = "x", linestyle: str = "-", grid_behind: bool = True, **kwargs, ) -> None: """Sets the plots grid, additional `kwargs` are passed to ax.grid(**kwargs) Parameters ---------- which : str, optional The grid lines to apply the changes on, by default "major" axis : str, optional Sets the axis of the grid, by default "x" linestyle : str, optional Grids line style, by default "-" grid_behind : bool, optional Sets the grid behind the bars, by default True """ self.grid_behind = grid_behind self.grid_props = { "which": which, "axis": axis, "linestyle": linestyle, **kwargs, } def set_bar_annots( self, text_callback: Callable[[float], Union[str, float]] = lambda val: np.round( val, 2 ), xoffset: float = 0.1, yoffset: float = -0.1, ha: str = "left", **kwargs, ) -> None: """Sets bar annotation properties, additional kwargs are passed to `ax.text(**kwargs)`. (Note these annotations are the texts near the bars) Parameters ---------- text_callback : Callable[[float], Union[str, float]], optional Callback function for customizing the text, by default lambda val:np.round(val, 2) xoffset : float, optional X offset relative to bar length, by default 0.1 yoffset : float, optional Y offset relative to bar height, by default -0.1 ha : str, optional Horizontal alignment, by default "left" """ self.bar_annot_props = { "callback": text_callback, "xoffset": xoffset, "yoffset": yoffset, "ha": ha, "kwargs": kwargs, } def add_extras( self, key: str, callback: list[ Callable[ [plt.Axes, int, Datafier, SimpleNamespace], None, ] ], ): """Adds extra callback functions for additional customizations Parameters ---------- key : str Unique identifier for each callback function callback : list[Callable[[plt.Axes, int, pd.DataFrame, pd.DataFrame], None]] Callback function for additional customization Callback args: ``` plt.Axes: The matplotlib Axes used for the barplot int: Current animation frame / dataframe row Datafier: The underlying datafier instance SimpleNamespace: Contains the following attributes - bar_rank, bar_length, top_bars, bar_colors Example: >>> lambda ax, *args: ax.set_xcale("log) ``` """ self.extra_callbacks[key] = callback def init(self) -> None: """FuncAnimation init""" bar_attr = self.getTopXY(0) self.ax.set_axisbelow(self.grid_behind) self.ax.barh( bar_attr.bar_rank, bar_attr.bar_length, tick_label=bar_attr.top_bars, **self.barh_props, ) def update(self, i: int) -> None: """FuncAnimation update Parameters ---------- i : int Animation frame """ self.ax.clear() if self.fixed_xlim: self.ax.set_xlim(self.xlim) self.ax.set_ylim(self.ylim) bar_attr = self.getTopXY(i) self.ax.barh( bar_attr.bar_rank, bar_attr.bar_length, tick_label=bar_attr.top_bars, color=bar_attr.bar_colors, **self.barh_props, ) if self.annot_bars: for x, y in zip( bar_attr.bar_length, bar_attr.bar_rank, ): self.ax.text( x + self.bar_annot_props["xoffset"], y + self.bar_annot_props["yoffset"], self.bar_annot_props["callback"](x), ha=self.bar_annot_props["ha"], **self.bar_annot_props["kwargs"], ) if self.xticks: self.ax.tick_params(**self.xtick_props) if self.yticks: self.ax.tick_params(**self.ytick_props) if self.grid: self.ax.grid(**self.grid_props) for k, v in self.text_collection.items(): if v[0]: self.ax.text( s=v[0](i, self.datafier), transform=self.ax.transAxes, **v[1], ) else: self.ax.text( **v[1], transform=self.ax.transAxes, ) for k, v in self.extra_callbacks.items(): v(self.ax, i, self.datafier, bar_attr) self.post_update(self.ax, i, self.datafier, bar_attr) if self.rounded_edges: self._get_rounded_eges() for patch in self.new_patches: self.ax.add_patch(patch) ================================================ FILE: src/pynimate/barhplot.py ================================================ from types import SimpleNamespace from typing import Callable, Union import numpy as np import pandas as pd from matplotlib.patches import FancyBboxPatch from pynimate.baseplot import Baseplot from pynimate.datafier import BarDatafier class Barhplot(Baseplot): def __init__( self, datafier: BarDatafier, palettes: list[str] = ["viridis"], post_update: Callable[[__qualname__, int], None] = lambda self, i: None, annot_bars: bool = True, rounded_edges: bool = False, fixed_xlim: bool = True, xticks: bool = True, yticks: bool = True, grid: bool = True, ) -> None: """Bar Chart animation module that requires a valid time index.The data should be in this format where time is set to index ``` Example: >>> time col1 col2 col3 ... >>> 2012 1 0 2 >>> 2013 2 3 1 ``` Parameters ---------- datafier : BarDatafier The datafier instance palettes : list[str], optional List of color palettes to generate bar colors, by default ["viridis"] post_update : Callable[[Barhplot, i], None], optional callback function for additional customization, by default lambda self, i: None annot_bars : bool, optional Sets bar annotations, by default True fixed_xlim : bool, optional If False xlim will gradually change in every frame, by default True xticks : bool, optional Sets xticks, by default True yticks : bool, optional Sets yticks, by default True grid : bool, optional Sets xgrid, by default True rounded_edges : bool, optional Sets rounded bar edges, by default False post_update args ``` self: Baseplot instance i: Frame index example: >>> def post_update(self, i): >>> # sets log scale for x-axis >>> self.ax.set_xscale("log") ``` """ super().__init__( datafier, palettes, post_update, fixed_xlim, True, xticks, yticks, grid ) self.annot_bars = annot_bars self.rounded_edges = rounded_edges self.set_barh() self.set_bar_border_props() self.set_bar_annots() @classmethod def from_df( cls, data: pd.DataFrame, time_format: str, ip_freq: str, palettes: list[str] = ["viridis"], post_update: Callable[[__qualname__, int], None] = lambda self, i: None, annot_bars: bool = True, rounded_edges: bool = False, fixed_xlim=True, xticks=True, yticks=True, grid=True, ): return cls( BarDatafier(data, time_format, ip_freq), palettes, post_update, annot_bars, rounded_edges, fixed_xlim, xticks, yticks, grid, ) def set_xylim( self, xlim: list[float] = [], ylim: list[float] = [], xoffset: float = 5, yoffset: float = 0.6, ) -> None: """Sets xlim and ylim. Parameters ---------- xlim : list[float], optional x axis limits in this format [min, max], by default [min, max + xoffset] ylim : list[float], optional y axis limits in this format [min, max], by default [0.5, n_bars + yoffset] xoffset : float, optional additional offset value for x axis max, by default 5 yoffset : float, optional additional offset value for y axis max, by default 0.6 """ super().set_xylim(xlim, ylim) if xlim == []: self.total_max = self.datafier.data.max().max() xlim = [None, self.total_max + xoffset] self.xlim = xlim if ylim == []: ylim = [0.5, self.dfr.n_bars + yoffset] self.ylim = ylim def get_ith_bar_attrs(self, i: int) -> SimpleNamespace: """Prepares ith top columns and their respective attributes such as position, length, colors. Not meant to be used outside animation update. Parameters ---------- i : int Animation frame index Returns ------- SimpleNamespace bar_rank, bar_length, top_cols, column_colors """ bar_rank = self.dfr.df_ranks.iloc[i].values top_cols = (bar_rank >= 1) & (bar_rank <= self.dfr.n_bars) bar_rank = bar_rank[top_cols] bar_length = self.dfr.data.iloc[i].values[top_cols] cols = self.dfr.data.columns[top_cols] colors = [self.column_colors[column] for column in cols] return SimpleNamespace( bar_rank=bar_rank, bar_length=bar_length, top_cols=cols, column_colors=colors, ) def _get_rounded_eges( self, ) -> None: """Creates bar border properties. See https://matplotlib.org/3.1.0/api/_as_gen/matplotlib.patches.FancyBboxPatch.html """ border = self.bar_border_props self.new_patches = [] for patch in reversed(self.ax.patches): bb = patch.get_bbox() color = patch.get_facecolor() zorder = patch.zorder p_bbox = FancyBboxPatch( (bb.xmin, bb.ymin), abs(bb.width), abs(bb.height), boxstyle=f"round,pad={border['pad']}" + ( f",rounding_size={border['radius']}" if border["radius"] != None else "" ), ec=border["edge_color"], fc=color, mutation_aspect=border["mutation_aspect"], zorder=zorder, **border["kwargs"], ) patch.remove() self.new_patches.append(p_bbox) def set_barh(self, bar_height: float = 0.86, **kwargs): """Sets barh properties, addition kwargs are passed to `ax.barh(**kwargs)` Parameters ---------- bar_height : float, optional Height of the bars (Note this is horizontal barplot), by default 0.86 """ self.barh_props = {"height": bar_height, **kwargs} def set_bar_annots( self, text_callback: Callable[[float], Union[str, float]] = lambda val: np.round( val, 2 ), xoffset: float = 0.1, yoffset: float = -0.1, ha: str = "left", **kwargs, ) -> None: """Sets bar annotation properties, additional kwargs are passed to `ax.text(**kwargs)`. (Note these annotations are the texts near the bars) Parameters ---------- text_callback : Callable[[float], Union[str, float]], optional Callback function for customizing the text, by default lambda val:np.round(val, 2) xoffset : float, optional X offset relative to bar length, by default 0.1 yoffset : float, optional Y offset relative to bar height, by default -0.1 ha : str, optional Horizontal alignment, by default "left" """ self.bar_annot_props = { "callback": text_callback, "xoffset": xoffset, "yoffset": yoffset, "ha": ha, "kwargs": kwargs, } def set_bar_border_props( self, edge_color: str = "k", radius: float = 0.5, pad: float = -0.0040, mutation_aspect: float = 0.2, **kwargs, ) -> None: """Sets bar border properties. Additional kwargs are passed to `FancyBboxPatch`. See https://matplotlib.org/3.1.0/api/_as_gen/matplotlib.patches.FancyBboxPatch.html Parameters ---------- edge_color : str, optional Bar edge color, by default "k" radius : float, optional Bar border radius, by default 0.5 pad : float, optional See above link, by default -0.0040 mutation_aspect : float, optional See above link, by default 0.2 """ self.bar_border_props = { "edge_color": edge_color, "radius": radius, "pad": pad, "mutation_aspect": mutation_aspect, "kwargs": kwargs, } def update(self, i: int) -> None: """FuncAnimation update Parameters ---------- i : int Animation frame """ self.ax.clear() self.bar_attr = self.get_ith_bar_attrs(i) self.ax.barh( self.bar_attr.bar_rank, self.bar_attr.bar_length, tick_label=self.bar_attr.top_cols, color=self.bar_attr.column_colors, **self.barh_props, ) if self.annot_bars: for ind, (x, y) in enumerate( zip(self.bar_attr.bar_length, self.bar_attr.bar_rank) ): self.ax.text( x + self.bar_annot_props["xoffset"], y + self.bar_annot_props["yoffset"], self.bar_annot_props["callback"](x), ha=self.bar_annot_props["ha"], **self.bar_annot_props["kwargs"], zorder=ind, ) if self.rounded_edges: self._get_rounded_eges() for patch in self.new_patches[::-1]: self.ax.add_patch(patch) for ind, patch in enumerate(self.ax.patches): patch.set_zorder(ind) super().update(i) ================================================ FILE: src/pynimate/baseplot.py ================================================ from typing import Callable, Union import matplotlib.pyplot as plt import numpy as np import pandas as pd import seaborn as sns from pynimate.datafier import BaseDatafier class Baseplot: def __init__( self, datafier: BaseDatafier, palettes: list[str] = ["viridis"], post_update: Callable[[__qualname__, int], None] = lambda self, i: None, fixed_xlim=True, fixed_ylim=True, xticks=True, yticks=True, grid=True, ) -> None: """General Chart animation module that requires a valid time index.The data should be in this format where time is set to index ``` Example: >>> time col1 col2 col3 ... >>> 2012 1 0 2 >>> 2013 2 3 1 ``` Parameters ---------- datafier : BaseDatafier The datafier instance palettes : list[str], optional List of color palettes to generate bar colors, by default ["viridis"] post_update : Callable[[Baseplot, i], None], optional callback function for additional customization, by default lambda self, i: None fixed_xlim : bool, optional If False xlim will gradually change in every frame, by default True fixed_ylim : bool, optional If False ylim will gradually change in every frame, by default True xticks : bool, optional Sets xticks, by default True yticks : bool, optional Sets yticks, by default True grid : bool, optional Sets xgrid, by default True post_update args ``` self: Baseplot instance i: Frame index example: >>> def post_update(self, i): >>> # sets log scale for x-axis >>> self.ax.set_xscale("log") ``` """ self.datafier = self.dfr = datafier self.time_range = list(self.datafier.data.index) self.length = len(self.time_range) self.palettes = palettes self.column_colors = self.generate_column_colors() self.text_collection = {} self.post_update = post_update self.fixed_xlim = fixed_xlim self.fixed_ylim = fixed_ylim self.xticks = xticks self.yticks = yticks self.grid = grid self.set_xylim() self.set_xticks() self.set_yticks() self.set_grid() @classmethod def from_df( cls, data: pd.DataFrame, time_format: str, ip_freq: str, palettes: list[str] = ["viridis"], post_update: Callable[[__qualname__, int], None] = lambda self, i: None, fixed_xlim=True, fixed_ylim=True, xticks=True, yticks=True, grid=True, ): return cls( BaseDatafier(data, time_format, ip_freq), palettes, post_update, fixed_ylim, fixed_xlim, xticks, yticks, grid, ) def generate_column_colors(self) -> dict[str, str]: """Generates column colors based on the given color palettes. Returns ------- dict[str, str] dict containing column to color mapping """ all_colors = [] for palette in self.palettes: all_colors.extend( list( sns.color_palette( palette, int( np.ceil( len(self.dfr.colorable_columns) / len(self.palettes) ) ), ) ) ) return { column: color for column, color in zip(self.dfr.colorable_columns, all_colors) } def set_column_decorations( self, new_decorations: Union[str, list[str], dict[str, str]], old_decorations: dict[str, str], ) -> dict[str, str]: decorations = {} if isinstance(new_decorations, str): decorations = {k: new_decorations for (k, _) in old_decorations.items()} elif isinstance(new_decorations, dict): decorations = old_decorations for key in new_decorations: if key not in old_decorations.keys(): raise ValueError(f"Invalid column name found {key}") else: decorations.update(new_decorations) elif isinstance(new_decorations, list): assert len(new_decorations) == len( old_decorations ), "Number of colors does not match number of columns" decorations = { k: v2 for v2, (k, _) in zip(new_decorations, old_decorations.items()) } else: raise TypeError("colors must be str, list or dict") return decorations def set_column_colors(self, colors: Union[str, list[str], dict[str, str]]) -> None: """Sets column colors. If colors is a list, length of colors should be equal to `len(column_colors)` Parameters ---------- colors : Union[str, list[str], dict[str, str]] Single color str or list of colors or dict of column to color mapping """ self.column_colors = self.set_column_decorations(colors, self.column_colors) # def set_column_colors(self, colors: Union[str, list[str], dict[str, str]]) -> None: # """Sets column colors. If colors is a list, length of colors should be equal # to `len(column_colors)` # Parameters # ---------- # colors : Union[str, list[str], dict[str, str]] # Single colors str or list of colors or dict of column to color mapping # """ # if isinstance(colors, str): # self.column_colors = {k: colors for (k, _) in self.column_colors.items()} # elif isinstance(colors, dict): # for key in colors: # if key not in self.column_colors.keys(): # raise ValueError(f"Invalid column name found {key}") # else: # self.column_colors.update(colors) # elif isinstance(colors, list): # assert len(colors) == len( # self.column_colors # ), "Number of colors does not match number of columns" # self.column_colors = { # k: v2 for v2, (k, _) in zip(colors, self.column_colors.items()) # } # else: # raise TypeError("colors must be str, list or dict") def set_xylim(self, xlim: list[float] = [], ylim: list[float] = []): """Sets xlim and ylim Parameters ---------- xlim : list[float], optional x axis limits in this format [min, max], by default [min date, max date] ylim : list[float], optional y axis limits in this format [min, max], by default [min y val, max y val] """ assert ( len(xlim) == 2 or len(xlim) == 0 ), "xlim is incorrect (correct format - [minLim, maxLim])" assert ( len(ylim) == 2 or len(ylim) == 0 ), "ylim is incorrect (correct format - [minLim, maxLim])" if xlim == []: self.max_date = self.datafier.data.index.max() xlim = [None, self.max_date] self.xlim = xlim if ylim == []: self.total_max = self.datafier.data.max().max() ylim = [None, self.total_max] self.ylim = ylim def set_axes(self, ax: plt.Axes) -> None: """Sets the Axes of this plot Parameters ---------- ax : plt.Axes Axes of this plot """ self.ax = ax def set_title( self, title: str, x: float = 0, y: float = 1.01, size: float = 13, color: str = "#777777", **kwargs, ) -> None: """Sets the plot title and additional kwargs are passed to `plt.text(**kwargs)` Parameters ---------- title : str Title text x : float, optional x coordinate of the text, by default 0 y : float, optional y coordinate, by default 1.01 size : float, optional text size, by default 13 color : str, optional text color, by default "#777777" """ self.text_collection["title"] = ( None, { **{ "x": x, "y": y, "s": title, "color": color, "size": size, }, **kwargs, }, ) def set_xlabel( self, text: str, x: float = 0.43, y: float = -0.09, size: float = 13, color: str = "#777777", **kwargs, ) -> None: """Sets the plot xlabel and additional kwargs are passed to `plt.text(**kwargs)` Parameters ---------- text : str The xlabel text x : float, optional X coordinate of the text, by default 0.43 y : float, optional Y coordinate, by default -0.09 size : float, optional Text size, by default 13 color : str, optional Text color, by default "#777777" """ self.text_collection["xlabel"] = ( None, { **{ "x": x, "y": y, "s": text, "color": color, "size": size, }, **kwargs, }, ) def set_time( self, callback: Callable[ [int, BaseDatafier], str ] = lambda i, datafier: datafier.data.index[i], x: float = 0.97, y: float = 0.27, size: float = 46, weight: float = 800, ha="right", color: str = "#777777", **kwargs, ) -> None: """Annotates the time in the plot and additional kwargs are passed to `plt.text(**kwargs)` Parameters ---------- callback : Callable[ [int, BaseDatafier], str ], optional Callback function to customize the time text, by default `lambda i, datafier: datafier.data.index[i]` x : float, optional x coordinate of the text, by default 0.97 y : float, optional y coordinate of the text, by default 0.27 size : float, optional text size, by default 46 weight : float, optional text weight, by default 800 ha : str, optional horizontal alignment, by default "right" color : str, optional text color, by default "#777777" callback args: ``` i: Animation frame / data row index datafier: The datafier instance, access the data using datafier.data ``` """ self.text_collection["time"] = ( callback, { **{ "x": x, "y": y, "color": color, "size": size, "weight": weight, "ha": ha, }, **kwargs, }, ) def set_text( self, key: str, text: str = None, callback: Callable[[int, BaseDatafier], str] = None, x: float = 0, y: str = 0, size: float = 13, color: str = "#777777", **kwargs, ): """General function to add custom texts in the plot. Either text or callback should be passd but not both. Parameters ---------- key : str Unique identifier for each texts, note: These keys, title, xlabel, time, are reserved. overwrite them if you wish to use callbacks instead of texts in title or xlabel text : str, optional The text to be added in the plot, by default None callback : Callable[[int, pd.DataFrame], str], optional Callback function to customize the text, by default None x : float, optional X coordinate of the text, by default 0 y : str, optional Y coordinate of the text, by default 0 size : float, optional Text size, by default 13 color : str, optional Text color, by default "#777777" Callback args: ``` args: i: Animation frame / data row index datafier: The datafier instance Example: >>> lambda i, datafier: datafier.data.index[i] ``` """ assert text or callback, "Both text and callback cannot be None" self.text_collection[key] = ( callback, { **{ "x": x, "y": y, "s": text, "color": color, "size": size, }, **kwargs, }, ) if callback: self.text_collection[key][1].pop("s") def remove_text(self, keys: Union[str, list[str]]): """Removes texts by key Parameters ---------- keys : list[str] key or List of keys to be removed """ if isinstance(keys, str): keys = [keys] print(self.text_collection) for key in keys: self.text_collection.pop(key) def set_xticks( self, axis: str = "x", colors: str = "#777777", labelsize: float = 12, **kwargs ): """Sets xtick properties, additional kwargs are passed to `ax.tick_params(**kwargs)` Parameters ---------- axis : str, optional Defines tick axis, by default "x" colors : str, optional Sets tick color, by default "#777777" labelsize : float, optional Sets tick size, by default 12 """ self.xtick_props = { "axis": axis, "colors": colors, "labelsize": labelsize, **kwargs, } def set_yticks( self, axis: str = "y", colors: str = "#777777", labelsize: float = 10, **kwargs ): """Sets ytick properties, additional kwargs are passed to `ax.tick_params(**kwargs)` Parameters ---------- axis : str, optional Defines tick axis, by default "y" colors : str, optional Sets tick color, by default "#777777" labelsize : float, optional Sets tick size, by default 10 """ self.ytick_props = { "axis": axis, "colors": colors, "labelsize": labelsize, **kwargs, } def set_grid( self, which: str = "major", axis: str = "x", linestyle: str = "-", grid_behind: bool = True, **kwargs, ) -> None: """Sets the plots grid, additional kwargs are passed to `ax.grid(**kwargs)` Parameters ---------- which : str, optional The grid lines to apply the changes on, by default "major" axis : str, optional Sets the axis of the grid, by default "x" linestyle : str, optional Grids line style, by default "-" grid_behind : bool, optional Sets the grid behind the plot, by default True """ self.grid_behind = grid_behind self.grid_props = { "which": which, "axis": axis, "linestyle": linestyle, **kwargs, } def update(self, i): if self.fixed_xlim: self.ax.set_xlim(self.xlim) if self.fixed_ylim: self.ax.set_ylim(self.ylim) if self.xticks: self.ax.tick_params(**self.xtick_props) if self.yticks: self.ax.tick_params(**self.ytick_props) if self.grid: self.ax.grid(**self.grid_props) self.ax.set_axisbelow(self.grid_behind) self.post_update(self, i) for v in self.text_collection.values(): callback, props_dict = v[0], v[1] if callback: self.ax.text( s=callback(i, self.datafier), transform=self.ax.transAxes, **props_dict, ) else: self.ax.text( **props_dict, transform=self.ax.transAxes, ) ================================================ FILE: src/pynimate/canvas.py ================================================ from typing import Callable import matplotlib.animation as animation import matplotlib.pyplot as plt import numpy as np class Canvas: def __init__( self, nrows: int = 1, ncols: int = 1, figsize: tuple[int, int] = (12.8, 7.2), post_update: Callable[[plt.Figure, list[list[plt.Axes]]], None] = None, **kwargs, ) -> None: """Creates the matplotlib figure, subplots and additional figure properties. Also creates and saves the animation. Parameters ---------- nrows : int, optional Number of rows of the subplot grid, by default 1 ncols : int, optional Number of columns of the subplot grid, by default 1 figsize : tuple[int, int], optional Width, height in inches, by default (16, 9) post_update : Callable[[plt.Figure, list[list[plt.Axes]]], None], optional callback function for additional figure customization, by default None post_update args: ``` plt.Figure: Matplotlib figure list[list[plt.Axes]]]: Subplot Axes ``` """ self.post_update = post_update or (lambda *args: None) self.fig, self.ax = plt.subplots(nrows, ncols, figsize=figsize, **kwargs) if nrows == 1 and ncols == 1: self.ax = np.array([[self.ax]]) elif nrows == 1: self.ax = np.array([self.ax]) self.plots = [] self.length = 0 def add_plot(self, plot, index: tuple[int, int] = (0, 0)) -> __qualname__: """Adds the plot to be animated with its ax index (for multiple subplots) Parameters ---------- plot : Plot_like Plot to be animated index : tuple[int, int], optional Subplot index, by default (0, 0) Returns ------- Canvas Returns the canvas instance """ plot.set_axes(self.ax[index]) self.length = max(self.length, plot.length) self.plots.append(plot) return self # def _init(self) -> None: # for plot in self.plots: # plot.init() def _update(self, i: int) -> None: self.post_update(self.fig, self.ax) for plot in self.plots: plot.update(min(plot.length - 1, i)) def animate( self, frames_callback: Callable[[int], any] = lambda length: length, interval: int = 50, **kwargs, ) -> None: """Main module to create the animation, additional `kwargs` are passed to animation.FuncAnimation(**kwargs) Parameters ---------- frames_callback : int, optional Passed to funcAnimation frames, by default lambda length: length interval : int, optional Interval between each frame. Defaults to 50ms, by default 50 """ self.ani = animation.FuncAnimation( self.fig, self._update, frames=frames_callback(self.length), interval=interval, blit=False, **kwargs, ) return self.ani def save(self, filename: str, fps: int, extension: str = "gif", **kwargs): """Saves the current animation Parameters ---------- filename : str Filename fps : int Video fps / frames per second extension : str, optional File extension, by default "gif" """ self.ani.save(f"{filename}.{extension}", fps=fps, **kwargs) ================================================ FILE: src/pynimate/datafier.py ================================================ import warnings import numpy as np import pandas as pd import seaborn as sns class Datafier: def __init__( self, data: pd.DataFrame, time_format: str, ip_freq: str, ip_frac: float = 0.5, n_bars: int = 10, palettes: list[str] = ["viridis"], ) -> None: """ Datafier is deprecated, use plot specific datafiers instead. Contains data preparation modules, which includes interpolation, rank generation, color_generation. data should be in this format where time is set to index ``` Example: >>> time col1 col2 col3 ... >>> 2012 1 0 2 >>> 2013 2 3 1 ``` Parameters ---------- data : pd.DataFrame The data to be prepared, should be in this format where time is set to index time_format : str Index datetime format ip_freq : str Interpolation frequency ip_frac : float, optional Rank interpolation fraction (check end of docstring), by default 0.5 n_bars : int, optional Number of bars to be visible on the plot, by default 10 or less palettes : list[str], optional List of color palettes to generate bar colors, by default ["viridis"] ``` ip_frac is the percentage of NaN values to be linearly interpolated for column ranks Consider this example >>> a b >>> date >>> 2021-11-13 1.0 4.0 >>> 2021-11-14 NaN NaN >>> 2021-11-15 NaN NaN >>> 2021-11-16 NaN NaN >>> 2021-11-17 NaN NaN >>> 2021-11-18 2.0 6.0 with ip_frac set to 0.5, 50% of NaN's will be linearly interpolated while the rest will back filled. >>> a b >>> 2021-11-13 1.00 4.00 << original value -------- >>> 2021-11-14 1.33 4.67 | >>> 2021-11-15 1.67 5.33 | 50% linearly >>> 2021-11-16 2.00 6.00 <- linear interpolation | interpolated >>> 2021-11-17 2.00 6.00 upto here | rest are filled. >>> 2021-11-18 2.00 6.00 << original value--------- This adds some stability in the barChartRace and reduces constantly shaking of bars. ``` """ warnings.warn( "Datafier is deprecated, use plot specific datafiers instead.", DeprecationWarning, ) self.raw_data = data self.ip_freq = ip_freq self.ip_frac = ip_frac self.n_bars = min(n_bars, len(self.raw_data.columns)) self.palettes = palettes self.raw_data.index = pd.to_datetime(self.raw_data.index, format=time_format) self.data, self.df_ranks = self.get_prepared_data(self.raw_data, self.ip_frac) self.top_cols = self.get_top_cols() self.bar_colors = self.get_bar_colors() def add_var(self, row_var: pd.DataFrame = None, col_var: pd.DataFrame = None): """Adds additional variables to the data, both row and column wise.\n Row wise data format: The index should be equal to that of the actual data. ``` time leap_year col2 ... 2012 yes 0 2013 no 3 ``` Column wise data format: The index should be equal to the columns of the actual data. ``` index continent col2 ... ind Asia 0 usa N America 3 jap Asia 2 ``` Parameters ---------- row_var : pd.DataFrame, optional Dataframe containing variables related to time, by default None col_var : pd.DataFrame, optional Dataframe containing variables related to columns, by default None """ self.row_var = self.interpolateEven(row_var, self.ip_freq) if row_var else None self.col_var = col_var def interpolate( self, data: pd.DataFrame, freq: str, method: str = "linear" ) -> pd.DataFrame: num_cols = data.select_dtypes("number").columns num_data = data[num_cols] # num_data = num_data.T num_data.index = pd.to_datetime(num_data.index) new_ind = pd.date_range(num_data.index.min(), num_data.index.max(), freq=freq) num_data = num_data.reindex(new_ind).interpolate(method=method) data = data[data.select_dtypes(exclude="number").columns].join( num_data, how="right" ) return data def interpolate_even( self, data: pd.DataFrame, freq: str, method: str = "linear" ) -> pd.DataFrame: """Interpolates the given dataframe according to the frequency Parameters ---------- data : pd.DataFrame Dataframe contaning the data freq : str Interpolation frequency method : str, optional Interpolation method, by default "linear" Returns ------- pd.DataFrame Interpolated dataframe """ ncols = data.select_dtypes("number").columns num_data = data[ncols] if freq != None: new_ind = pd.date_range( num_data.index.min(), num_data.index.max(), freq=freq ) new_ser = pd.Series( [0] * len(new_ind), index=new_ind, name="new_ind" ).to_frame() num_data = ( new_ser.join(num_data, how="outer").drop("new_ind", axis=1).sort_index() ) num_data = num_data.interpolate(method=method) data = data[data.select_dtypes(exclude="number").columns].join( num_data, how="right" ) data[data.select_dtypes(exclude="number").columns] = ( data[data.select_dtypes(exclude="number").columns] .fillna(method="bfill") .fillna(method="ffill") ) return data def get_prepared_data( self, data: pd.DataFrame, ip_frac: float = 0.5 ) -> tuple[pd.DataFrame, pd.DataFrame]: """Creates interpolated data and column ranks Parameters ---------- data : pd.DataFrame Dataframe containing the data ip_frac : float, optional Interpolation fraction, by default 0.5 Returns ------- tuple[pd.DataFrame, pd.DataFrame] Tuple containing the following data ``` pd.DataFrame: Interpolated data values pd.DataFrame: Interpolated column ranks ``` """ df_ranks = data.rank(axis=1, method="first", ascending=False).clip( upper=self.n_bars + 1 ) df_ranks = self.n_bars + 1 - df_ranks data.replace(np.nan, 0, inplace=True) df_ranks.replace(np.nan, -1, inplace=True) data = self.interpolate_even(data, freq=self.ip_freq) df_ranks = df_ranks.reindex(data.index) # calculate the no of nans in each interval # see https://stackoverflow.com/questions/69951782/pandas-interpolate-with-condition if ip_frac != 0: t = df_ranks.iloc[:, 0] # total length x = len(t) # no of nans z = t.isna().sum() # no of non-nans y = x - z # no of nans in each interval w = z / (y - 1) if w * ip_frac > 0: df_ranks = df_ranks.interpolate( method="bfill", limit=int(np.ceil(w * ip_frac)) ) df_ranks = df_ranks.interpolate() return (data, df_ranks) def get_top_cols(self) -> list[int]: """Selects columns where column_rank < n_bars in any timestamp Returns ------- list[int] List of columns that will appear in the animation at least once """ top_cols = self.df_ranks.max(axis=0) top_cols = top_cols[top_cols >= 1] return list(top_cols.index) def get_bar_colors(self) -> dict[str, str]: """Generates bar (column) colors based on the given color palettes Returns ------- dict[str, str] dict containing column to color mapping """ all_colors = [] for palette in self.palettes: all_colors.extend( list( sns.color_palette( palette, int(np.ceil(len(self.top_cols) / len(self.palettes))) ) ) ) return {column: color for column, color in zip(self.top_cols, all_colors)} class BaseDatafier: def __init__( self, data: pd.DataFrame, time_format: str, ip_freq: str, ip_method: str = "linear", ) -> None: """Contains data preparation modules, which includes interpolation. data should be in this format where time is set to index ``` Example: >>> time col1 col2 col3 ... >>> 2012 1 0 2 >>> 2013 2 3 1 ``` Parameters ---------- data : pd.DataFrame The data to be prepared, should be in this format where time is set to index time_format : str Index datetime format ip_freq : str Interpolation frequency """ self.raw_data = data self.ip_freq = ip_freq self.ip_method = ip_method self.colorable_columns = self.raw_data.columns self.raw_data.index = pd.to_datetime(self.raw_data.index, format=time_format) self.expanded = self.data = self.raw_data self.data = self.interpolate_data() def add_var(self, row_var: pd.DataFrame = None, col_var: pd.DataFrame = None): """Adds additional variables to the data, both row and column wise.\n Row wise data format: The index should be equal to that of the actual data. ``` time leap_year col2 ... 2012 yes 0 2013 no 3 ``` Column wise data format: The index should be equal to the columns of the actual data. ``` index continent col2 ... ind Asia 0 usa N America 3 jap Asia 2 ``` Parameters ---------- row_var : pd.DataFrame, optional Dataframe containing variables related to time, by default None col_var : pd.DataFrame, optional Dataframe containing variables related to columns, by default None """ self.row_var = self.interpolate_even(row_var, self.ip_freq) if row_var else None self.col_var = col_var def interpolate_even( self, data: pd.DataFrame, freq: str, method: str = "linear" ) -> pd.DataFrame: """Interpolates the given dataframe according to the frequency Parameters ---------- data : pd.DataFrame Dataframe containing the data freq : str Interpolation frequency method : str, optional Interpolation method, by default "linear" Returns ------- pd.DataFrame Interpolated dataframe """ ncols = data.select_dtypes("number").columns num_data = data[ncols] if freq != None: new_ind = pd.date_range( num_data.index.min(), num_data.index.max(), freq=freq ) new_ser = pd.Series( [0] * len(new_ind), index=new_ind, name="new_ind" ).to_frame() num_data = ( new_ser.join(num_data, how="outer").drop("new_ind", axis=1).sort_index() ) self.expanded = ( new_ser.join(self.expanded, how="outer") .drop("new_ind", axis=1) .sort_index() ) num_data = num_data.interpolate(method=method) obCols = data.select_dtypes(exclude="number").columns data = data[obCols].join(num_data, how="right") data[obCols] = data[obCols].fillna(method="bfill").fillna(method="ffill") return data def interpolate_data(self) -> pd.DataFrame: """Interpolates the raw data Returns ------- pd.DataFrame Interpolated data """ return self.interpolate_even(self.data, self.ip_freq) class BarDatafier(BaseDatafier): def __init__( self, data: pd.DataFrame, time_format: str, ip_freq: str, ip_frac: float = 0.1, n_bars: int = 10, ip_method: str = "linear", ip_fill_method="bfill", ) -> None: """Contains data preparation modules, which includes interpolation, rank generation. data should be in this format where time is set to index ``` Example: >>> time col1 col2 col3 ... >>> 2012 1 0 2 >>> 2013 2 3 1 ``` Parameters ---------- data : pd.DataFrame The data to be prepared, should be in this format where time is set to index time_format : str Index datetime format ip_freq : str Interpolation frequency ip_frac : float, optional Rank interpolation fraction (check end of docstring), by default 0.5 n_bars : int, optional Number of bars to be visible on the plot, by default 10 or less ip_method : str, optional Interpolation Method, by default "linear" ip_fill_method : str, optional fill method for ip_frac, by default "bfill" ip_frac is the percentage of NaN values to be linearly interpolated for column ranks ``` Consider this example >>> a b >>> date >>> 2021-11-13 1.0 4.0 >>> 2021-11-14 NaN NaN >>> 2021-11-15 NaN NaN >>> 2021-11-16 NaN NaN >>> 2021-11-17 NaN NaN >>> 2021-11-18 2.0 6.0 ``` with ip_frac set to 0.5, 50% of NaN's will be interpolated by ip_method while the rest will be filled by ip_fill_method. The example uses bfill, if ffill is used the filling will happen before interpolation. ``` >>> a b >>> 2021-11-13 1.00 4.00 << original value -------- >>> 2021-11-14 1.33 4.67 | >>> 2021-11-15 1.67 5.33 | 50% interpolated >>> 2021-11-16 2.00 6.00 <- linear interpolation | by ip_method >>> 2021-11-17 2.00 6.00 upto here | rest are filled >>> 2021-11-18 2.00 6.00 << original value--------- by ip_fill_method ``` This adds stability in the barChartRace and reduces constant shaking of bars. """ super().__init__(data, time_format, ip_freq, ip_method) self.ip_frac = ip_frac self.ip_fill_method = ip_fill_method self.n_bars = min(n_bars, len(self.raw_data.columns)) self.df_ranks = self.get_data_ranks(self.ip_frac) self.top_cols = self.colorable_columns = self.get_top_cols() def interpolate_data(self) -> pd.DataFrame: self.data = self.data.replace(np.nan, 0) return super().interpolate_data() def get_data_ranks(self, ip_frac: float = 0.1) -> pd.DataFrame: """Creates column ranks and interpolates them. Parameters ---------- ip_frac : float, optional pct of NaNs to interpolate by 'self.method' rest will be backfilled, by default 0.1 Returns ------- pd.DataFrame Interpolated column ranks """ df_ranks = self.raw_data.rank(axis=1, method="first", ascending=False).clip( upper=self.n_bars + 1 ) df_ranks = self.n_bars + 1 - df_ranks df_ranks.replace(np.nan, -1, inplace=True) df_ranks = df_ranks.reindex(self.data.index) # calculate the no of nans in each interval # see https://stackoverflow.com/questions/69951782/pandas-interpolate-with-condition if ip_frac != 0: t = df_ranks.iloc[:, 0] # total length x = len(t) # no of nans z = t.isna().sum() # no of non-nans y = x - z # no of nans in each interval w = z / (y - 1) if w * ip_frac > 0: df_ranks = df_ranks.interpolate( method=self.ip_fill_method, limit=int(np.ceil(w * ip_frac)) ) df_ranks = df_ranks.interpolate() return df_ranks def get_top_cols(self) -> list[str]: """Selects columns where column_rank < n_bars in any timestamp Returns ------- list[str] List of columns that will appear in the animation at least once """ top_cols = self.df_ranks.max(axis=0) top_cols = top_cols[top_cols >= 1] return list(top_cols.index) class LineDatafier(BaseDatafier): def __init__( self, data, time_format: str, ip_freq: str, ip_method: str = "linear" ) -> None: """Contains data preparation modules, which includes interpolation. data should be in this format where time is set to index ``` Example: >>> time col1 col2 col3 ... >>> 2012 1 0 2 >>> 2013 2 3 1 ``` Parameters ---------- data : pd.DataFrame The data to be prepared, should be in this format where time is set to index time_format : str Index datetime format ip_freq : str Interpolation frequency """ super().__init__(data, time_format, ip_freq, ip_method) self.data = self.prepare_data() def prepare_data(self) -> pd.DataFrame: """Creates interpolated data Returns ------- pd.DataFrame Interpolated data values """ return self.interpolate_even(self.raw_data, self.ip_freq, self.ip_method) ================================================ FILE: src/pynimate/lineplot.py ================================================ from typing import Callable, Union import matplotlib.dates as mdates import pandas as pd from pynimate.baseplot import Baseplot from pynimate.datafier import LineDatafier from pynimate.utils import human_readable class Lineplot(Baseplot): def __init__( self, datafier: LineDatafier, palettes: list[str] = ["viridis"], post_update: Callable[[__qualname__, int], None] = lambda self, i: None, line_annots: bool = True, legend: bool = True, scatter_markers: bool = True, line_head: bool = True, fixed_xlim: bool = True, fixed_ylim: bool = False, xticks: bool = True, yticks: bool = True, grid: bool = True, ) -> None: """Lineplot animation module that requires a valid time index.The data should be in this format where time is set to index ``` Example: >>> time col1 col2 col3 ... >>> 2012 1 0 2 >>> 2013 2 3 1 ``` Parameters ---------- datafier : LineDatafier The datafier instance palettes : list[str], optional List of color palettes to generate line / marker colors, by default ["viridis"] post_update : Callable[[__qualname__, int], None], optional callback function for additional customization, by default lambda self, i: None line_annots : bool, optional Sets line annotations leading the lines, by default True legend : bool, optional Sets plot legend, by default True scatter_markers : bool, optional Enables line markers / Scatterplot, by default True line_head : bool, optional Enables markers leading every line, by default True fixed_xlim : bool, optional If False xlim will gradually change in every frame, by default True fixed_ylim : bool, optional If False ylim will gradually change in every frame, by default False xticks : bool, optional Sets xticks, by default True yticks : bool, optional Sets yticks, by default True grid : bool, optional Sets xgrid, by default True """ super().__init__( datafier, palettes, post_update, fixed_xlim, fixed_ylim, xticks, yticks, grid, ) self.line_annots = line_annots self.legend = legend self.line_head = line_head self.scatter_markers = scatter_markers self.column_linestyles = {col: "solid" for col in self.column_colors.keys()} self.set_line() self.set_line_annots() self.set_line_head() self.set_marker() self.set_legend() @classmethod def from_df( cls, data: pd.DataFrame, time_format: str, ip_freq: str, palettes: list[str] = ["viridis"], post_update: Callable[[__qualname__, int], None] = lambda self, i: None, line_annots: bool = True, legend: bool = True, scatter_markers: bool = True, line_head: bool = True, fixed_xlim: bool = True, fixed_ylim: bool = False, xticks: bool = True, yticks: bool = True, grid: bool = True, ): return cls( LineDatafier(data, time_format, ip_freq), palettes, post_update, line_annots, legend, scatter_markers, line_head, fixed_xlim, fixed_ylim, xticks, yticks, grid, ) def set_xylim(self, xlim: list[float] = [], ylim: list[float] = []): """Sets xlim and ylim Parameters ---------- xlim : list[float], optional x axis limits in this format [min, max], by default [min date, max date] ylim : list[float], optional y axis limits in this format [min, max], by default [min y val, max y val] """ super().set_xylim(xlim, ylim) if xlim == []: self.max_date = self.datafier.data.index.max() self.min_date = self.datafier.data.index.min() xlim = [self.min_date, self.max_date] self.xlim = xlim if ylim == []: self.total_max = self.datafier.data.max().max() self.total_min = self.datafier.data.min().min() ylim = [self.total_min, self.total_max] self.ylim = ylim def set_column_linestyles( self, linestyles: Union[str, list[str], dict[str, str]] ) -> None: """Sets column linestyles. If linestyles is a list, length of linestyles should be equal to `len(self.column_linestyles)` Parameters ---------- linestyles : Union[str, list[str], dict[str, str]] Single linestyle str or list of linestyles or dict of column to linestyle mapping """ self.column_linestyles = self.set_column_decorations( linestyles, self.column_linestyles ) def set_line(self, **kwargs) -> None: """Sets line properties, addition kwargs are passed to `ax.plot(**kwargs)`""" assert ( "linestyle" not in kwargs ), "Use 'set_column_linestyle()' for linestyle customization" self.line_props = kwargs def set_line_annots( self, callback: Callable[ [str, float], str ] = lambda col, val: f"{col}({human_readable(val)})", size: float = 10, **kwargs, ) -> None: """Sets line annotation properties, additional kwargs are passed to `ax.text(**kwargs)`. (Note these annotations are the texts leading the lines) Parameters ---------- callback : Callable[ [str, float], str ], optional Callback function for customizing the text, by default lambda col, val: f"{col}({human_readable(val)})" size : float, optional Text size, by default 10 """ kwargs = {"size": size, **kwargs} self.line_annot_props = {"callback": callback, "kwargs": kwargs} def set_line_head(self, edgecolors: Union[str, list[str]] = "k", **kwargs) -> None: """Sets the line head(leading marker) properites, additional kwargs are passed to `ax.scatter(**kwargs)` Parameters ---------- edgecolors : Union[str, list[str]], optional Edge color of the point, by default "k" """ self.line_head_props = {"edgecolors": edgecolors, **kwargs} def set_marker(self, **kwargs) -> None: """Sets the line marker (scatterplot) properties, kwargs are passed to `ax.scatter(**kwargs)`""" self.marker_props = kwargs def set_legend(self, **kwargs) -> None: """Sets legend properties, kwargs are passed to `ax.legend(**kwargs)`""" self.legend_props = kwargs def update(self, i) -> None: self.ax.clear() for col in self.dfr.data.columns: self.X, self.Y = self.dfr.data.index, self.dfr.data[col] self.Y_og = self.dfr.expanded[col] self.ax.plot( self.X[: i + 1], self.Y[: i + 1], color=self.column_colors[col], linestyle=self.column_linestyles[col], label=col, **self.line_props, ) if self.scatter_markers: self.ax.scatter( self.X[:i], self.Y_og[:i], color=self.column_colors[col], **self.marker_props, ) if self.line_annots: self.annot = self.ax.annotate( self.line_annot_props["callback"](col, self.Y[i]), (mdates.date2num(self.X[i]), self.Y[i]), **self.line_annot_props["kwargs"], ) if self.legend: self.ax.legend(**self.legend_props) if self.line_head: self.ax.scatter( self.X[i : i + 1], self.Y[i : i + 1], color=self.column_colors[col], **self.line_head_props, ) super().update(i) ================================================ FILE: src/pynimate/utils.py ================================================ from typing import Union import numpy as np def human_readable(num: Union[float, int], precision: int = 2, *args) -> str: """Converts large numeric values(>10^3) into human readable strings. `ie. 1000 -> 1k`, `1000000 -> 1M`, etc. Parameters ---------- num : Union[float, int] Numeric value precision : int, optional Rounding precision, by default 2 Returns ------- str Human readable numeric string """ if num == np.nan: return "" magnitude = 0 while abs(num) >= 1000: magnitude += 1 num /= 1000.0 return f'{np.round(num, precision)}{["", "K", "M", "B", "T", "Q"][magnitude]}' ================================================ FILE: tests/__init__.py ================================================ import sys sys.path.append('.') ================================================ FILE: tests/conftest.py ================================================ import os import pandas as pd import pytest from pynimate.datafier import BarDatafier, BaseDatafier, LineDatafier dir_path = os.path.dirname(os.path.realpath(__file__)) @pytest.fixture def sample_data1() -> pd.DataFrame: return pd.DataFrame( { "time": ["1960-01-01", "1961-01-01", "1962-01-01"], "Afghanistan": [1, 2, 3], "Angola": [2, 3, 4], "Albania": [1, 2, 5], "USA": [5, 3, 4], "Argentina": [1, 4, 5], } ).set_index("time") @pytest.fixture def sample_data2() -> pd.DataFrame: return pd.DataFrame( { "time": ["2012", "2013", "2014"], "col1": [1, 2, 3], "col2": [3, 2, 1], } ).set_index("time") @pytest.fixture def sample_data1_basedfr(sample_data1) -> BaseDatafier: return BaseDatafier(sample_data1, "%Y-%m-%d", "3MS") @pytest.fixture def sample_data1_bardfr(sample_data1) -> BarDatafier: return BarDatafier(sample_data1, "%Y-%m-%d", "3MS") @pytest.fixture def sample_data1_linedfr(sample_data1) -> BarDatafier: return LineDatafier(sample_data1, "%Y-%m-%d", "3MS") @pytest.fixture def map_data() -> pd.DataFrame: map_data = pd.read_csv(dir_path + "/data/map.csv").set_index("time") return map_data ================================================ FILE: tests/data/map.csv ================================================ 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 1960,,,,,,,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,, 1961,,,,,,,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,, 1962,,,,,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,, 1963,,,,,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,, 1964,,,,,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,, 1965,,,,,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 1966,,,,,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 1967,,,,,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 1968,,,,,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 1969,,,,,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 1970,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 1971,,,,,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 1972,,,,,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 1973,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 1974,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 1975,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 1976,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 1977,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 1978,,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 1979,,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 1980,,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 1981,,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 1982,,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 1983,,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 1984,,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 1985,,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 1986,,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 1987,,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 1988,,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 1989,,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 1990,,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 1991,,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 1992,,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 1993,,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 1994,,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 1995,,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 1996,,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 1997,,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 1998,,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 1999,,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 2000,,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 2001,,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 2002,,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 2003,,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 2004,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 2005,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 2006,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 2007,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, 2008,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, 2009,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, 2010,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 2011,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 2012,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 2013,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 2014,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 2015,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 2016,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 2017,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 2018,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 ================================================ FILE: tests/test_bar.py ================================================ # Legacy tests for barplot, will be removed in 2.0.0 import pytest from pynimate.bar import Barplot def test_barplot_set_bar_color_list(sample_data1): bar = Barplot(sample_data1, "%Y-%m-%d", "3MS") bar_colors_list = [ "#2a9d8f", "#e9c46a", "#e76f51", "#a7c957", "#e5989b", ] bar_colors = { "Afghanistan": "#2a9d8f", "Angola": "#e9c46a", "Albania": "#e76f51", "USA": "#a7c957", "Argentina": "#e5989b", } bar.set_bar_color(bar_colors_list) assert bar.datafier.bar_colors == bar_colors def test_barplot_set_bar_color_dict(sample_data1): bar = Barplot(sample_data1, "%Y-%m-%d", "3MS") bar_colors = { "Afghanistan": "#2a9d8f", "Angola": "#e9c46a", "Albania": "#e76f51", "USA": "#a7c957", "Argentina": "#e5989b", } bar.set_bar_color(bar_colors) assert bar.datafier.bar_colors == bar_colors def test_barplot_set_bar_color_error_length(sample_data1): with pytest.raises(AssertionError): bar = Barplot(sample_data1, "%Y-%m-%d", "3MS") bar_colors = [ "#2a9d8f", "#e9c46a", "#e76f51", "#a7c957", ] bar.set_bar_color(bar_colors) assert bar.datafier.bar_colors == bar_colors def test_barplot_set_bar_color_error_col_mismatch(sample_data1): with pytest.raises(AssertionError): bar = Barplot(sample_data1, "%Y-%m-%d", "3MS") bar_colors = { "India": "#2a9d8f", "Angola": "#e9c46a", "Albania": "#e76f51", "USA": "#a7c957", "Argentina": "#e5989b", } bar.set_bar_color(bar_colors) assert bar.datafier.bar_colors == bar_colors def test_barplot_set_text_error_empty_text(sample_data1): with pytest.raises(AssertionError): bar = Barplot(sample_data1, "%Y-%m-%d", "3MS") bar.set_text("text1") def test_barplot_set_text_priority(sample_data1): bar = Barplot(sample_data1, "%Y-%m-%d", "3MS") bar.set_text("text1", text="Test", callback=lambda *args: "Test") assert "s" not in bar.text_collection["text1"][1] def test_barplot_remove_text(sample_data1): bar = Barplot(sample_data1, "%Y-%m-%d", "3MS") bar.set_text("text1", text="Test1") bar.set_text("text2", text="Test2") bar.set_text("text3", text="Test3") bar.remove_text(["text1", "text2"]) assert list(bar.text_collection.keys()) == ["time", "text3"] ================================================ FILE: tests/test_barhplot.py ================================================ from pynimate.barhplot import Barhplot def test_barhplot_xylim(sample_data1_bardfr): barhplot = Barhplot(sample_data1_bardfr) assert barhplot.xlim == [None, 10] and barhplot.ylim == [0.5, 5.6] def test_barhplot_generate_column_colors(map_data): base_plot = Barhplot.from_df(map_data, "%Y", "MS") bar_colors = { "Argentina": (0.278791, 0.062145, 0.386592), "Australia": (0.283197, 0.11568, 0.436115), "Brazil": (0.280255, 0.165693, 0.476498), "Canada": (0.270595, 0.214069, 0.507052), "China": (0.253935, 0.265254, 0.529983), "Germany": (0.235526, 0.309527, 0.542944), "Spain": (0.21621, 0.351535, 0.550627), "France": (0.197636, 0.391528, 0.554969), "United Kingdom": (0.179019, 0.433756, 0.55743), "India": (0.163625, 0.471133, 0.558148), "Iran": (0.149039, 0.508051, 0.55725), "Israel": (0.135066, 0.544853, 0.554029), "Italy": (0.122606, 0.585371, 0.546557), "Japan": (0.120081, 0.622161, 0.534946), "South Korea": (0.134692, 0.658636, 0.517649), "Kuwait": (0.170948, 0.694384, 0.493803), "Myanmar": (0.232815, 0.732247, 0.459277), "Netherlands": (0.304148, 0.764704, 0.419943), "Poland": (0.386433, 0.794644, 0.372886), "Romania": (0.477504, 0.821444, 0.318195), "Russian Federation": (0.585678, 0.846661, 0.249897), "Saudi Arabia": (0.688944, 0.865448, 0.182725), "Sweden": (0.79376, 0.880678, 0.120005), "USA": (0.89632, 0.893616, 0.096335), } assert base_plot.column_colors == bar_colors def test_barhplot_ith_bar_attrs(sample_data1): barhplot = Barhplot.from_df(sample_data1, "%Y-%m-%d", "6MS") bar_ranks = [ [3.0, 4.0, 2.0, 5.0, 1.0], [2.0, 4.0, 1.0, 3.0, 5.0], [2.0, 4.0, 1.0, 3.0, 5.0], [1.0, 3.0, 5.0, 2.0, 4.0], [1.0, 3.0, 5.0, 2.0, 4.0], ] bar_lengths = [ [1.0, 2.0, 1.0, 5.0, 1.0], [1.5, 2.5, 1.5, 4.0, 2.5], [2.0, 3.0, 2.0, 3.0, 4.0], [2.5, 3.5, 3.5, 3.5, 4.5], [3.0, 4.0, 5.0, 4.0, 5.0], ] for i in range(barhplot.length): ith_attrs = barhplot.get_ith_bar_attrs(i) assert list(ith_attrs.bar_rank) == bar_ranks[i] assert list(ith_attrs.bar_length) == bar_lengths[i] ================================================ FILE: tests/test_baseplot.py ================================================ import pytest from pynimate.baseplot import Baseplot def test_baseplot_generate_column_colors(sample_data1_basedfr): base_plot = Baseplot(sample_data1_basedfr) column_colors = { "Afghanistan": (0.267968, 0.223549, 0.512008), "Angola": (0.190631, 0.407061, 0.556089), "Albania": (0.127568, 0.566949, 0.550556), "USA": (0.20803, 0.718701, 0.472873), "Argentina": (0.565498, 0.84243, 0.262877), } assert base_plot.generate_column_colors() == column_colors def test_baseplot_set_column_colors_str(sample_data1_basedfr): base_plot = Baseplot(sample_data1_basedfr) base_plot.set_column_colors("#FF2C55") column_colors = { "Afghanistan": "#FF2C55", "Angola": "#FF2C55", "Albania": "#FF2C55", "USA": "#FF2C55", "Argentina": "#FF2C55", } assert base_plot.column_colors == column_colors def test_baseplot_set_column_colors_list(sample_data1_basedfr): base_plot = Baseplot(sample_data1_basedfr) base_plot.set_column_colors( [ "#C41E3D", "#7D1128", "#FF2C55", "#3C0919", "#E2294F", ] ) column_colors = { "Afghanistan": "#C41E3D", "Angola": "#7D1128", "Albania": "#FF2C55", "USA": "#3C0919", "Argentina": "#E2294F", } assert base_plot.column_colors == column_colors def test_baseplot_set_column_colors_dict(sample_data1_basedfr): base_plot = Baseplot(sample_data1_basedfr) base_plot.set_column_colors( { "Afghanistan": "#C41E3D", "Angola": "#7D1128", "Albania": "#FF2C55", "USA": "#3C0919", "Argentina": "#E2294F", } ) column_colors = { "Afghanistan": "#C41E3D", "Angola": "#7D1128", "Albania": "#FF2C55", "USA": "#3C0919", "Argentina": "#E2294F", } assert base_plot.column_colors == column_colors def test_baseplot_set_column_color_err_length(sample_data1_basedfr): with pytest.raises(AssertionError): base_plot = Baseplot(sample_data1_basedfr) column_colors = [ "#2a9d8f", "#e9c46a", "#e76f51", "#a7c957", ] base_plot.set_column_colors(column_colors) def test_baseplot_set_column_color_err_col_mismatch(sample_data1_basedfr): with pytest.raises(ValueError): bar = Baseplot(sample_data1_basedfr) bar_colors = { "India": "#2a9d8f", "Angola": "#e9c46a", "Albania": "#e76f51", "USA": "#a7c957", "Argentina": "#e5989b", } bar.set_column_colors(bar_colors) def test_baseplot_set_column_color_err_type(sample_data1_basedfr): with pytest.raises(TypeError): bar = Baseplot(sample_data1_basedfr) bar_colors = set( [ "#2a9d8f", "#e9c46a", "#e76f51", "#a7c957", "#e5989b", ] ) bar.set_column_colors(bar_colors) def test_baseplot_xylim(sample_data1_basedfr): base_plot = Baseplot(sample_data1_basedfr) xmin, xmax = base_plot.xlim ymin, ymax = base_plot.ylim assert xmin is None and ymin is None assert xmax.strftime("%Y-%m-%d") == "1962-01-01" and ymax == 5 def test_baseplot_text_structure(sample_data1_basedfr): base_plot = Baseplot(sample_data1_basedfr) base_plot.set_title("Title") base_plot.set_xlabel("Xlabel") base_plot.set_time() for text in base_plot.text_collection.values(): assert isinstance(text, tuple) assert text[0] is None or callable(text[0]) assert isinstance(text[1], dict) def test_baseplot_set_text_error_empty_text(sample_data1_basedfr): with pytest.raises(AssertionError): bar = Baseplot(sample_data1_basedfr) bar.set_text("text1") def test_baseplot_set_text_priority(sample_data1_basedfr): bar = Baseplot(sample_data1_basedfr) bar.set_text("text1", text="Test", callback=lambda *args: "Test") assert "s" not in bar.text_collection["text1"][1] def test_baseplot_remove_text(sample_data1_basedfr): bar = Baseplot(sample_data1_basedfr) bar.set_text("text1", text="Test1") bar.set_text("text2", text="Test2") bar.set_text("text3", text="Test3") bar.remove_text(["text1", "text2"]) assert list(bar.text_collection.keys()) == ["text3"] ================================================ FILE: tests/test_datafier.py ================================================ # Legacy tests for datafier, will be removed in 2.0.0 import pandas as pd from pynimate.datafier import Datafier, BaseDatafier, BarDatafier def test_datafier_init(sample_data1): dfr = Datafier(sample_data1, "%Y-%m-%d", "3MS", 0.1) assert dfr.n_bars == 5 def test_datafier_interpolate_even(sample_data2): dfr = Datafier(sample_data2, "%Y", "3MS") interpolated_data = pd.DataFrame( { "time": pd.to_datetime( [ "2012-01-01", "2012-04-01", "2012-07-01", "2012-10-01", "2013-01-01", "2013-04-01", "2013-07-01", "2013-10-01", "2014-01-01", ] ), "col1": [1.0, 1.25, 1.5, 1.75, 2.0, 2.25, 2.5, 2.75, 3.0], "col2": [3.0, 2.75, 2.5, 2.25, 2.0, 1.75, 1.5, 1.25, 1.0], } ).set_index("time") dfr.data.index.name = "time" assert dfr.data.equals(interpolated_data) def test_datafier_get_top_cols(map_data): dfr = Datafier(map_data, "%Y", "3MS") top_cols = [ "Argentina", "Australia", "Brazil", "Canada", "China", "Germany", "Spain", "France", "United Kingdom", "India", "Iran", "Israel", "Italy", "Japan", "South Korea", "Kuwait", "Myanmar", "Netherlands", "Poland", "Romania", "Russian Federation", "Saudi Arabia", "Sweden", "USA", ] assert dfr.get_top_cols() == top_cols def test_datafier_get_bar_colors(map_data): dfr = Datafier(map_data, "%Y", "3MS") bar_colors = { "Argentina": (0.278791, 0.062145, 0.386592), "Australia": (0.283197, 0.11568, 0.436115), "Brazil": (0.280255, 0.165693, 0.476498), "Canada": (0.270595, 0.214069, 0.507052), "China": (0.253935, 0.265254, 0.529983), "Germany": (0.235526, 0.309527, 0.542944), "Spain": (0.21621, 0.351535, 0.550627), "France": (0.197636, 0.391528, 0.554969), "United Kingdom": (0.179019, 0.433756, 0.55743), "India": (0.163625, 0.471133, 0.558148), "Iran": (0.149039, 0.508051, 0.55725), "Israel": (0.135066, 0.544853, 0.554029), "Italy": (0.122606, 0.585371, 0.546557), "Japan": (0.120081, 0.622161, 0.534946), "South Korea": (0.134692, 0.658636, 0.517649), "Kuwait": (0.170948, 0.694384, 0.493803), "Myanmar": (0.232815, 0.732247, 0.459277), "Netherlands": (0.304148, 0.764704, 0.419943), "Poland": (0.386433, 0.794644, 0.372886), "Romania": (0.477504, 0.821444, 0.318195), "Russian Federation": (0.585678, 0.846661, 0.249897), "Saudi Arabia": (0.688944, 0.865448, 0.182725), "Sweden": (0.79376, 0.880678, 0.120005), "USA": (0.89632, 0.893616, 0.096335), } assert dfr.get_bar_colors() == bar_colors def test_datafier_get_prepared_data(sample_data1): dfr = Datafier(sample_data1, "%Y-%m-%d", "3MS") dfr.df_ranks.index.name = "time" df_ranks = pd.DataFrame( { "time": pd.to_datetime( [ "1960-01-01", "1960-04-01", "1960-07-01", "1960-10-01", "1961-01-01", "1961-04-01", "1961-07-01", "1961-10-01", "1962-01-01", ] ), "Afghanistan": [3.0, 2.5, 2.0, 2.0, 2.0, 1.5, 1.0, 1.0, 1.0], "Angola": [4.0, 4.0, 4.0, 4.0, 4.0, 3.5, 3.0, 3.0, 3.0], "Albania": [2.0, 1.5, 1.0, 1.0, 1.0, 3.0, 5.0, 5.0, 5.0], "USA": [5.0, 4.0, 3.0, 3.0, 3.0, 2.5, 2.0, 2.0, 2.0], "Argentina": [1.0, 3.0, 5.0, 5.0, 5.0, 4.5, 4.0, 4.0, 4.0], } ).set_index("time") data = pd.DataFrame( { "time": pd.to_datetime( [ "1960-01-01", "1960-04-01", "1960-07-01", "1960-10-01", "1961-01-01", "1961-04-01", "1961-07-01", "1961-10-01", "1962-01-01", ] ), "Afghanistan": [1.0, 1.25, 1.5, 1.75, 2.0, 2.25, 2.5, 2.75, 3.0], "Angola": [2.0, 2.25, 2.5, 2.75, 3.0, 3.25, 3.5, 3.75, 4.0], "Albania": [1.0, 1.25, 1.5, 1.75, 2.0, 2.75, 3.5, 4.25, 5.0], "USA": [5.0, 4.5, 4.0, 3.5, 3.0, 3.25, 3.5, 3.75, 4.0], "Argentina": [1.0, 1.75, 2.5, 3.25, 4.0, 4.25, 4.5, 4.75, 5.0], } ).set_index("time") assert dfr.df_ranks.equals(df_ranks) assert dfr.data.equals(data) # 1.2.0 >= def test_basedatafier_interpolate_even(sample_data2): dfr = BaseDatafier(sample_data2, "%Y", "3MS") interpolated_data = pd.DataFrame( { "time": pd.to_datetime( [ "2012-01-01", "2012-04-01", "2012-07-01", "2012-10-01", "2013-01-01", "2013-04-01", "2013-07-01", "2013-10-01", "2014-01-01", ] ), "col1": [1.0, 1.25, 1.5, 1.75, 2.0, 2.25, 2.5, 2.75, 3.0], "col2": [3.0, 2.75, 2.5, 2.25, 2.0, 1.75, 1.5, 1.25, 1.0], } ).set_index("time") dfr.data.index.name = "time" assert dfr.data.equals(interpolated_data) def test_bardfr_init(sample_data1): dfr = BarDatafier(sample_data1, "%Y-%m-%d", "3MS", 0.1) assert dfr.n_bars == 5 def test_bardfr_df_ranks(sample_data1): dfr = BarDatafier(sample_data1, "%Y-%m-%d", "3MS", 0.5) dfr.df_ranks.index.name = "time" df_ranks = pd.DataFrame( { "time": pd.to_datetime( [ "1960-01-01", "1960-04-01", "1960-07-01", "1960-10-01", "1961-01-01", "1961-04-01", "1961-07-01", "1961-10-01", "1962-01-01", ] ), "Afghanistan": [3.0, 2.5, 2.0, 2.0, 2.0, 1.5, 1.0, 1.0, 1.0], "Angola": [4.0, 4.0, 4.0, 4.0, 4.0, 3.5, 3.0, 3.0, 3.0], "Albania": [2.0, 1.5, 1.0, 1.0, 1.0, 3.0, 5.0, 5.0, 5.0], "USA": [5.0, 4.0, 3.0, 3.0, 3.0, 2.5, 2.0, 2.0, 2.0], "Argentina": [1.0, 3.0, 5.0, 5.0, 5.0, 4.5, 4.0, 4.0, 4.0], } ).set_index("time") assert dfr.df_ranks.equals(df_ranks) def test_bardfr_get_top_cols(map_data): dfr = BarDatafier(map_data, "%Y", "3MS") top_cols = [ "Argentina", "Australia", "Brazil", "Canada", "China", "Germany", "Spain", "France", "United Kingdom", "India", "Iran", "Israel", "Italy", "Japan", "South Korea", "Kuwait", "Myanmar", "Netherlands", "Poland", "Romania", "Russian Federation", "Saudi Arabia", "Sweden", "USA", ] assert dfr.get_top_cols() == top_cols ================================================ FILE: tests/test_lineplot.py ================================================ from pynimate.lineplot import Lineplot def test_lineplot_linestyle(sample_data1_linedfr): plot = Lineplot(sample_data1_linedfr) linestyles = { "Afghanistan": "solid", "Angola": "solid", "Albania": "solid", "USA": "solid", "Argentina": "solid", } assert plot.column_linestyles == linestyles def test_lineplot_linestyle_dict(sample_data1_linedfr): plot = Lineplot(sample_data1_linedfr) plot.set_column_linestyles({"Albania": "dashed"}) linestyles = { "Afghanistan": "solid", "Angola": "solid", "Albania": "dashed", "USA": "solid", "Argentina": "solid", } assert plot.column_linestyles == linestyles ================================================ FILE: tests/test_utils.py ================================================ from pynimate.utils import human_readable def test_human_readable(): assert human_readable(20.2333) == "20.23" def test_human_readable_k(): assert human_readable(21014, 3) == "21.014K" def test_human_readable_m(): assert human_readable(5241725, 1) == "5.2M"