runstats


Namerunstats JSON
Version 2.0.0 PyPI version JSON
download
home_pagehttp://www.grantjenks.com/docs/runstats/
SummaryCompute statistics and regression in one pass
upload_time2021-06-11 05:04:20
maintainer
docs_urlNone
authorGrant Jenks
requires_python>=3.6
licenseApache 2.0
keywords
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            RunStats: Computing Statistics and Regression in One Pass
=========================================================

`RunStats`_ is an Apache2 licensed Python module for online statistics and
online regression. Statistics and regression summaries are computed in a single
pass. Previous values are not recorded in summaries.

Long running systems often generate numbers summarizing performance. It could
be the latency of a response or the time between requests. It's often useful to
use these numbers in summary statistics like the arithmetic mean, minimum,
standard deviation, etc. When many values are generated, computing these
summaries can be computationally intensive. It may even be infeasible to keep
every recorded value. In such cases computing online statistics and online
regression is necessary.

In other cases, you may only have one opportunity to observe all the recorded
values. Python's generators work exactly this way. Traditional methods for
calculating the variance and other higher moments requires multiple passes over
the data. With generators, this is not possible and so computing statistics in
a single pass is necessary.

There are also scenarios where a user is not interested in a complete summary
of the entire stream of data but rather wants to observe the current state of
the system based on the recent past. In these cases exponential statistics are
used. Instead of weighting all values uniformly in the statistics computation,
an exponential decay weight is applied to older values. The decay rate is
configurable and provides a mechanism for balancing recent values with past
values.

The Python `RunStats`_ module was designed for these cases by providing classes
for computing online summary statistics and online linear regression in a
single pass. Summary objects work on sequences which may be larger than memory
or disk space permit. They may also be efficiently combined together to create
aggregate summaries.


Features
--------

- Pure-Python
- Fully Documented
- 100% Test Coverage
- Numerically Stable
- Optional Cython-optimized Extension (5-100 times faster)
- Statistics summary computes mean, variance, standard deviation, skewness,
  kurtosis, minimum and maximum.
- Regression summary computes slope, intercept and correlation.
- Developed on Python 3.9
- Tested on CPython 3.6, 3.7, 3.8, 3.9
- Tested on Linux, Mac OS X, and Windows
- Tested using GitHub Actions

.. image:: https://github.com/grantjenks/python-runstats/workflows/integration/badge.svg
   :target: http://www.grantjenks.com/docs/runstats/


Quickstart
----------

Installing `RunStats`_ is simple with `pip <http://www.pip-installer.org/>`_::

  $ pip install runstats

You can access documentation in the interpreter with Python's built-in help
function:

.. code-block:: python

   >>> import runstats
   >>> help(runstats)                             # doctest: +SKIP
   >>> help(runstats.Statistics)                  # doctest: +SKIP
   >>> help(runstats.Regression)                  # doctest: +SKIP
   >>> help(runstats.ExponentialStatistics)       # doctest: +SKIP


Tutorial
--------

The Python `RunStats`_ module provides three types for computing running
statistics: Statistics, ExponentialStatistics and Regression.The Regression
object leverages Statistics internally for its calculations. Each can be
initialized without arguments:

.. code-block:: python

   >>> from runstats import Statistics, Regression, ExponentialStatistics
   >>> stats = Statistics()
   >>> regr = Regression()
   >>> exp_stats = ExponentialStatistics()

Statistics objects support four methods for modification. Use `push` to add
values to the summary, `clear` to reset the summary, sum to combine Statistics
summaries and multiply to weight summary Statistics by a scalar.

.. code-block:: python

   >>> for num in range(10):
   ...     stats.push(float(num))
   >>> stats.mean()
   4.5
   >>> stats.maximum()
   9.0
   >>> stats += stats
   >>> stats.mean()
   4.5
   >>> stats.variance()
   8.68421052631579
   >>> len(stats)
   20
   >>> stats *= 2
   >>> len(stats)
   40
   >>> stats.clear()
   >>> len(stats)
   0
   >>> stats.minimum()
   nan

Use the Python built-in `len` for the number of pushed values. Unfortunately
the Python `min` and `max` built-ins may not be used for the minimum and
maximum as sequences are expected instead. Therefore, there are `minimum` and
`maximum` methods provided for that purpose:

.. code-block:: python

   >>> import random
   >>> random.seed(0)
   >>> for __ in range(1000):
   ...     stats.push(random.random())
   >>> len(stats)
   1000
   >>> min(stats)
   Traceback (most recent call last):
       ...
   TypeError: ...
   >>> stats.minimum()
   0.00024069652516689466
   >>> stats.maximum()
   0.9996851255769114

Statistics summaries provide five measures of a series: mean, variance,
standard deviation, skewness and kurtosis:

.. code-block:: python

   >>> stats = Statistics([1, 2, 5, 12, 5, 2, 1])
   >>> stats.mean()
   4.0
   >>> stats.variance()
   15.33333333333333
   >>> stats.stddev()
   3.915780041490243
   >>> stats.skewness()
   1.33122127314735
   >>> stats.kurtosis()
   0.5496219281663506

All internal calculations use Python's `float` type.

Like Statistics, the Regression type supports some methods for modification:
`push`, `clear` and sum:

.. code-block:: python

   >>> regr.clear()
   >>> len(regr)
   0
   >>> for num in range(10):
   ...     regr.push(num, num + 5)
   >>> len(regr)
   10
   >>> regr.slope()
   1.0
   >>> more = Regression((num, num + 5) for num in range(10, 20))
   >>> total = regr + more
   >>> len(total)
   20
   >>> total.slope()
   1.0
   >>> total.intercept()
   5.0
   >>> total.correlation()
   1.0

Regression summaries provide three measures of a series of pairs: slope,
intercept and correlation. Note that, as a regression, the points need not
exactly lie on a line:

.. code-block:: python

   >>> regr = Regression([(1.2, 1.9), (3, 5.1), (4.9, 8.1), (7, 11)])
   >>> regr.slope()
   1.5668320150154176
   >>> regr.intercept()
   0.21850113956294415
   >>> regr.correlation()
   0.9983810791694997

Both constructors accept an optional iterable that is consumed and pushed into
the summary. Note that you may pass a generator as an iterable and the
generator will be entirely consumed.

The ExponentialStatistics are constructed by providing a decay rate, initial
mean, and initial variance. The decay rate has default 0.9 and must be between
0 and 1. The initial mean and variance default to zero.

.. code-block:: python

   >>> exp_stats = ExponentialStatistics()
   >>> exp_stats.decay
   0.9
   >>> exp_stats.mean()
   0.0
   >>> exp_stats.variance()
   0.0

The decay rate is the weight by which the current statistics are discounted
by. Consequently, (1 - decay) is the weight of the new value. Like the `Statistics` class,
there are four methods for modification: `push`, `clear`, sum and
multiply.

.. code-block:: python

   >>> for num in range(10):
   ...     exp_stats.push(num)
   >>> exp_stats.mean()
   3.486784400999999
   >>> exp_stats.variance()
   11.593430921943071
   >>> exp_stats.stddev()
   3.4049127627507683

The decay of the exponential statistics can also be changed. The value must be
between 0 and 1.

.. code-block:: python

   >>> exp_stats.decay
   0.9
   >>> exp_stats.decay = 0.5
   >>> exp_stats.decay
   0.5
   >>> exp_stats.decay = 10
   Traceback (most recent call last):
     ...
   ValueError: decay must be between 0 and 1

The clear method allows to optionally set a new mean, new variance and new
decay. If none are provided mean and variance reset to zero, while the decay is
not changed.

.. code-block:: python

   >>> exp_stats.clear()
   >>> exp_stats.decay
   0.5
   >>> exp_stats.mean()
   0.0
   >>> exp_stats.variance()
   0.0

Combining `ExponentialStatistics` is done by adding them together. The mean and
variance are simply added to create a new object. To weight each
`ExponentialStatistics`, multiply them by a constant factor. If two
`ExponentialStatistics` are added then the leftmost decay is used for the new
object. The `len` method is not supported.

.. code-block:: python

   >>> alpha_stats = ExponentialStatistics(iterable=range(10))
   >>> beta_stats = ExponentialStatistics(decay=0.1)
   >>> for num in range(10):
   ...     beta_stats.push(num)
   >>> exp_stats = beta_stats * 0.5 + alpha_stats * 0.5
   >>> exp_stats.decay
   0.1
   >>> exp_stats.mean()
   6.187836645

All internal calculations of the Statistics and Regression classes are based
entirely on the C++ code by John Cook as posted in a couple of articles:

* `Computing Skewness and Kurtosis in One Pass`_
* `Computing Linear Regression in One Pass`_

.. _`Computing Skewness and Kurtosis in One Pass`: http://www.johndcook.com/blog/skewness_kurtosis/
.. _`Computing Linear Regression in One Pass`: http://www.johndcook.com/blog/running_regression/

The ExponentialStatistics implementation is based on:

* Finch, 2009, Incremental Calculation of Weighted Mean and Variance

The pure-Python version of `RunStats`_ is directly available if preferred.

.. code-block:: python

   >>> import runstats.core   # Pure-Python
   >>> runstats.core.Statistics
   <class 'runstats.core.Statistics'>

When importing from `runstats` the Cython-optimized version `_core` is
preferred and the `core` version is used as fallback. Micro-benchmarking
Statistics and Regression by calling `push` repeatedly shows the
Cython-optimized extension as 20-40 times faster than the pure-Python
extension.

.. _`RunStats`: http://www.grantjenks.com/docs/runstats/


Reference and Indices
---------------------

* `RunStats Documentation`_
* `RunStats API Reference`_
* `RunStats at PyPI`_
* `RunStats at GitHub`_
* `RunStats Issue Tracker`_

.. _`RunStats Documentation`: http://www.grantjenks.com/docs/runstats/
.. _`RunStats API Reference`: http://www.grantjenks.com/docs/runstats/api.html
.. _`RunStats at PyPI`: https://pypi.python.org/pypi/runstats/
.. _`RunStats at GitHub`: https://github.com/grantjenks/python-runstats/
.. _`RunStats Issue Tracker`: https://github.com/grantjenks/python-runstats/issues/


License
-------

Copyright 2013-2021 Grant Jenks

Licensed under the Apache License, Version 2.0 (the "License"); you may not use
this file except in compliance with the License.  You may obtain a copy of the
License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed
under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
CONDITIONS OF ANY KIND, either express or implied.  See the License for the
specific language governing permissions and limitations under the License.



            

Raw data

            {
    "_id": null,
    "home_page": "http://www.grantjenks.com/docs/runstats/",
    "name": "runstats",
    "maintainer": "",
    "docs_url": null,
    "requires_python": ">=3.6",
    "maintainer_email": "",
    "keywords": "",
    "author": "Grant Jenks",
    "author_email": "contact@grantjenks.com",
    "download_url": "https://files.pythonhosted.org/packages/d8/00/f0ce323f237e31a36bf65fa398d4210a579173e2aebda8f9c2ca60d04288/runstats-2.0.0.tar.gz",
    "platform": "",
    "description": "RunStats: Computing Statistics and Regression in One Pass\n=========================================================\n\n`RunStats`_ is an Apache2 licensed Python module for online statistics and\nonline regression. Statistics and regression summaries are computed in a single\npass. Previous values are not recorded in summaries.\n\nLong running systems often generate numbers summarizing performance. It could\nbe the latency of a response or the time between requests. It's often useful to\nuse these numbers in summary statistics like the arithmetic mean, minimum,\nstandard deviation, etc. When many values are generated, computing these\nsummaries can be computationally intensive. It may even be infeasible to keep\nevery recorded value. In such cases computing online statistics and online\nregression is necessary.\n\nIn other cases, you may only have one opportunity to observe all the recorded\nvalues. Python's generators work exactly this way. Traditional methods for\ncalculating the variance and other higher moments requires multiple passes over\nthe data. With generators, this is not possible and so computing statistics in\na single pass is necessary.\n\nThere are also scenarios where a user is not interested in a complete summary\nof the entire stream of data but rather wants to observe the current state of\nthe system based on the recent past. In these cases exponential statistics are\nused. Instead of weighting all values uniformly in the statistics computation,\nan exponential decay weight is applied to older values. The decay rate is\nconfigurable and provides a mechanism for balancing recent values with past\nvalues.\n\nThe Python `RunStats`_ module was designed for these cases by providing classes\nfor computing online summary statistics and online linear regression in a\nsingle pass. Summary objects work on sequences which may be larger than memory\nor disk space permit. They may also be efficiently combined together to create\naggregate summaries.\n\n\nFeatures\n--------\n\n- Pure-Python\n- Fully Documented\n- 100% Test Coverage\n- Numerically Stable\n- Optional Cython-optimized Extension (5-100 times faster)\n- Statistics summary computes mean, variance, standard deviation, skewness,\n  kurtosis, minimum and maximum.\n- Regression summary computes slope, intercept and correlation.\n- Developed on Python 3.9\n- Tested on CPython 3.6, 3.7, 3.8, 3.9\n- Tested on Linux, Mac OS X, and Windows\n- Tested using GitHub Actions\n\n.. image:: https://github.com/grantjenks/python-runstats/workflows/integration/badge.svg\n   :target: http://www.grantjenks.com/docs/runstats/\n\n\nQuickstart\n----------\n\nInstalling `RunStats`_ is simple with `pip <http://www.pip-installer.org/>`_::\n\n  $ pip install runstats\n\nYou can access documentation in the interpreter with Python's built-in help\nfunction:\n\n.. code-block:: python\n\n   >>> import runstats\n   >>> help(runstats)                             # doctest: +SKIP\n   >>> help(runstats.Statistics)                  # doctest: +SKIP\n   >>> help(runstats.Regression)                  # doctest: +SKIP\n   >>> help(runstats.ExponentialStatistics)       # doctest: +SKIP\n\n\nTutorial\n--------\n\nThe Python `RunStats`_ module provides three types for computing running\nstatistics: Statistics, ExponentialStatistics and Regression.The Regression\nobject leverages Statistics internally for its calculations. Each can be\ninitialized without arguments:\n\n.. code-block:: python\n\n   >>> from runstats import Statistics, Regression, ExponentialStatistics\n   >>> stats = Statistics()\n   >>> regr = Regression()\n   >>> exp_stats = ExponentialStatistics()\n\nStatistics objects support four methods for modification. Use `push` to add\nvalues to the summary, `clear` to reset the summary, sum to combine Statistics\nsummaries and multiply to weight summary Statistics by a scalar.\n\n.. code-block:: python\n\n   >>> for num in range(10):\n   ...     stats.push(float(num))\n   >>> stats.mean()\n   4.5\n   >>> stats.maximum()\n   9.0\n   >>> stats += stats\n   >>> stats.mean()\n   4.5\n   >>> stats.variance()\n   8.68421052631579\n   >>> len(stats)\n   20\n   >>> stats *= 2\n   >>> len(stats)\n   40\n   >>> stats.clear()\n   >>> len(stats)\n   0\n   >>> stats.minimum()\n   nan\n\nUse the Python built-in `len` for the number of pushed values. Unfortunately\nthe Python `min` and `max` built-ins may not be used for the minimum and\nmaximum as sequences are expected instead. Therefore, there are `minimum` and\n`maximum` methods provided for that purpose:\n\n.. code-block:: python\n\n   >>> import random\n   >>> random.seed(0)\n   >>> for __ in range(1000):\n   ...     stats.push(random.random())\n   >>> len(stats)\n   1000\n   >>> min(stats)\n   Traceback (most recent call last):\n       ...\n   TypeError: ...\n   >>> stats.minimum()\n   0.00024069652516689466\n   >>> stats.maximum()\n   0.9996851255769114\n\nStatistics summaries provide five measures of a series: mean, variance,\nstandard deviation, skewness and kurtosis:\n\n.. code-block:: python\n\n   >>> stats = Statistics([1, 2, 5, 12, 5, 2, 1])\n   >>> stats.mean()\n   4.0\n   >>> stats.variance()\n   15.33333333333333\n   >>> stats.stddev()\n   3.915780041490243\n   >>> stats.skewness()\n   1.33122127314735\n   >>> stats.kurtosis()\n   0.5496219281663506\n\nAll internal calculations use Python's `float` type.\n\nLike Statistics, the Regression type supports some methods for modification:\n`push`, `clear` and sum:\n\n.. code-block:: python\n\n   >>> regr.clear()\n   >>> len(regr)\n   0\n   >>> for num in range(10):\n   ...     regr.push(num, num + 5)\n   >>> len(regr)\n   10\n   >>> regr.slope()\n   1.0\n   >>> more = Regression((num, num + 5) for num in range(10, 20))\n   >>> total = regr + more\n   >>> len(total)\n   20\n   >>> total.slope()\n   1.0\n   >>> total.intercept()\n   5.0\n   >>> total.correlation()\n   1.0\n\nRegression summaries provide three measures of a series of pairs: slope,\nintercept and correlation. Note that, as a regression, the points need not\nexactly lie on a line:\n\n.. code-block:: python\n\n   >>> regr = Regression([(1.2, 1.9), (3, 5.1), (4.9, 8.1), (7, 11)])\n   >>> regr.slope()\n   1.5668320150154176\n   >>> regr.intercept()\n   0.21850113956294415\n   >>> regr.correlation()\n   0.9983810791694997\n\nBoth constructors accept an optional iterable that is consumed and pushed into\nthe summary. Note that you may pass a generator as an iterable and the\ngenerator will be entirely consumed.\n\nThe ExponentialStatistics are constructed by providing a decay rate, initial\nmean, and initial variance. The decay rate has default 0.9 and must be between\n0 and 1. The initial mean and variance default to zero.\n\n.. code-block:: python\n\n   >>> exp_stats = ExponentialStatistics()\n   >>> exp_stats.decay\n   0.9\n   >>> exp_stats.mean()\n   0.0\n   >>> exp_stats.variance()\n   0.0\n\nThe decay rate is the weight by which the current statistics are discounted\nby. Consequently, (1 - decay) is the weight of the new value. Like the `Statistics` class,\nthere are four methods for modification: `push`, `clear`, sum and\nmultiply.\n\n.. code-block:: python\n\n   >>> for num in range(10):\n   ...     exp_stats.push(num)\n   >>> exp_stats.mean()\n   3.486784400999999\n   >>> exp_stats.variance()\n   11.593430921943071\n   >>> exp_stats.stddev()\n   3.4049127627507683\n\nThe decay of the exponential statistics can also be changed. The value must be\nbetween 0 and 1.\n\n.. code-block:: python\n\n   >>> exp_stats.decay\n   0.9\n   >>> exp_stats.decay = 0.5\n   >>> exp_stats.decay\n   0.5\n   >>> exp_stats.decay = 10\n   Traceback (most recent call last):\n     ...\n   ValueError: decay must be between 0 and 1\n\nThe clear method allows to optionally set a new mean, new variance and new\ndecay. If none are provided mean and variance reset to zero, while the decay is\nnot changed.\n\n.. code-block:: python\n\n   >>> exp_stats.clear()\n   >>> exp_stats.decay\n   0.5\n   >>> exp_stats.mean()\n   0.0\n   >>> exp_stats.variance()\n   0.0\n\nCombining `ExponentialStatistics` is done by adding them together. The mean and\nvariance are simply added to create a new object. To weight each\n`ExponentialStatistics`, multiply them by a constant factor. If two\n`ExponentialStatistics` are added then the leftmost decay is used for the new\nobject. The `len` method is not supported.\n\n.. code-block:: python\n\n   >>> alpha_stats = ExponentialStatistics(iterable=range(10))\n   >>> beta_stats = ExponentialStatistics(decay=0.1)\n   >>> for num in range(10):\n   ...     beta_stats.push(num)\n   >>> exp_stats = beta_stats * 0.5 + alpha_stats * 0.5\n   >>> exp_stats.decay\n   0.1\n   >>> exp_stats.mean()\n   6.187836645\n\nAll internal calculations of the Statistics and Regression classes are based\nentirely on the C++ code by John Cook as posted in a couple of articles:\n\n* `Computing Skewness and Kurtosis in One Pass`_\n* `Computing Linear Regression in One Pass`_\n\n.. _`Computing Skewness and Kurtosis in One Pass`: http://www.johndcook.com/blog/skewness_kurtosis/\n.. _`Computing Linear Regression in One Pass`: http://www.johndcook.com/blog/running_regression/\n\nThe ExponentialStatistics implementation is based on:\n\n* Finch, 2009, Incremental Calculation of Weighted Mean and Variance\n\nThe pure-Python version of `RunStats`_ is directly available if preferred.\n\n.. code-block:: python\n\n   >>> import runstats.core   # Pure-Python\n   >>> runstats.core.Statistics\n   <class 'runstats.core.Statistics'>\n\nWhen importing from `runstats` the Cython-optimized version `_core` is\npreferred and the `core` version is used as fallback. Micro-benchmarking\nStatistics and Regression by calling `push` repeatedly shows the\nCython-optimized extension as 20-40 times faster than the pure-Python\nextension.\n\n.. _`RunStats`: http://www.grantjenks.com/docs/runstats/\n\n\nReference and Indices\n---------------------\n\n* `RunStats Documentation`_\n* `RunStats API Reference`_\n* `RunStats at PyPI`_\n* `RunStats at GitHub`_\n* `RunStats Issue Tracker`_\n\n.. _`RunStats Documentation`: http://www.grantjenks.com/docs/runstats/\n.. _`RunStats API Reference`: http://www.grantjenks.com/docs/runstats/api.html\n.. _`RunStats at PyPI`: https://pypi.python.org/pypi/runstats/\n.. _`RunStats at GitHub`: https://github.com/grantjenks/python-runstats/\n.. _`RunStats Issue Tracker`: https://github.com/grantjenks/python-runstats/issues/\n\n\nLicense\n-------\n\nCopyright 2013-2021 Grant Jenks\n\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License.  You may obtain a copy of the\nLicense at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed\nunder the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\nCONDITIONS OF ANY KIND, either express or implied.  See the License for the\nspecific language governing permissions and limitations under the License.\n\n\n",
    "bugtrack_url": null,
    "license": "Apache 2.0",
    "summary": "Compute statistics and regression in one pass",
    "version": "2.0.0",
    "project_urls": {
        "Documentation": "http://www.grantjenks.com/docs/runstats/",
        "Funding": "http://gum.co/runstats",
        "Homepage": "http://www.grantjenks.com/docs/runstats/",
        "Source": "https://github.com/grantjenks/python-runstats",
        "Tracker": "https://github.com/grantjenks/python-runstats/issues"
    },
    "split_keywords": [],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "d598a0874835943b0814c3b7aaaa60cd16ab737613421929bc701a41d2af5be1",
                "md5": "2420ecd1a4b401d84be58abe4c3ea509",
                "sha256": "79efa663eb47eb480d75f12889590646f7f823169dda386c986be03310cfcc34"
            },
            "downloads": -1,
            "filename": "runstats-2.0.0-cp36-cp36m-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "2420ecd1a4b401d84be58abe4c3ea509",
            "packagetype": "bdist_wheel",
            "python_version": "cp36",
            "requires_python": ">=3.6",
            "size": 87013,
            "upload_time": "2021-06-11T05:03:36",
            "upload_time_iso_8601": "2021-06-11T05:03:36.348635Z",
            "url": "https://files.pythonhosted.org/packages/d5/98/a0874835943b0814c3b7aaaa60cd16ab737613421929bc701a41d2af5be1/runstats-2.0.0-cp36-cp36m-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "093fc6b044b417fc14b4c3bbfc96bd4a73eeb2ba94fa0f81b660dd52bacb8c78",
                "md5": "e997e9d4e669019434393501505329d2",
                "sha256": "09cf60f075b6e03d39fbcdfd14835d9fca985e78315334e589af4840e45e04f5"
            },
            "downloads": -1,
            "filename": "runstats-2.0.0-cp36-cp36m-manylinux1_i686.whl",
            "has_sig": false,
            "md5_digest": "e997e9d4e669019434393501505329d2",
            "packagetype": "bdist_wheel",
            "python_version": "cp36",
            "requires_python": ">=3.6",
            "size": 330684,
            "upload_time": "2021-06-11T05:03:38",
            "upload_time_iso_8601": "2021-06-11T05:03:38.443452Z",
            "url": "https://files.pythonhosted.org/packages/09/3f/c6b044b417fc14b4c3bbfc96bd4a73eeb2ba94fa0f81b660dd52bacb8c78/runstats-2.0.0-cp36-cp36m-manylinux1_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "15c33b99c5cf8e09c20c494f0c02cb3a5d6fe384dfbf5f89dd3f5035dcc323d5",
                "md5": "b7667196f05935ad388feb7dfca3fb06",
                "sha256": "2ec49f15b276cce89ffddedebe95741136b0e309ed68108c1bf33f7295973143"
            },
            "downloads": -1,
            "filename": "runstats-2.0.0-cp36-cp36m-manylinux1_x86_64.whl",
            "has_sig": false,
            "md5_digest": "b7667196f05935ad388feb7dfca3fb06",
            "packagetype": "bdist_wheel",
            "python_version": "cp36",
            "requires_python": ">=3.6",
            "size": 351313,
            "upload_time": "2021-06-11T05:03:40",
            "upload_time_iso_8601": "2021-06-11T05:03:40.317182Z",
            "url": "https://files.pythonhosted.org/packages/15/c3/3b99c5cf8e09c20c494f0c02cb3a5d6fe384dfbf5f89dd3f5035dcc323d5/runstats-2.0.0-cp36-cp36m-manylinux1_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "6bf487ff1dc39fd1cd4fbe91599ea06acbd7463e4491d1e11945a12d8abf9ab2",
                "md5": "89c7f6b55a22fa8d9029a6e21b115c4f",
                "sha256": "748d43cc2712b319e4244c9af275f4d78513e388ff23d14eb36ae30c1e15f2ec"
            },
            "downloads": -1,
            "filename": "runstats-2.0.0-cp36-cp36m-manylinux2010_i686.whl",
            "has_sig": false,
            "md5_digest": "89c7f6b55a22fa8d9029a6e21b115c4f",
            "packagetype": "bdist_wheel",
            "python_version": "cp36",
            "requires_python": ">=3.6",
            "size": 330685,
            "upload_time": "2021-06-11T05:03:42",
            "upload_time_iso_8601": "2021-06-11T05:03:42.269327Z",
            "url": "https://files.pythonhosted.org/packages/6b/f4/87ff1dc39fd1cd4fbe91599ea06acbd7463e4491d1e11945a12d8abf9ab2/runstats-2.0.0-cp36-cp36m-manylinux2010_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "ec8fcf02f294c74abcbc7378d4a781c279dae5027c1e51b29cd6ba3c952b8bd1",
                "md5": "22a0767089f5f96357e9553335daeca9",
                "sha256": "9d645bebdf788ea82c2c921462cce8b5d4bda72192bde511b81816082aca9c25"
            },
            "downloads": -1,
            "filename": "runstats-2.0.0-cp36-cp36m-manylinux2010_x86_64.whl",
            "has_sig": false,
            "md5_digest": "22a0767089f5f96357e9553335daeca9",
            "packagetype": "bdist_wheel",
            "python_version": "cp36",
            "requires_python": ">=3.6",
            "size": 351317,
            "upload_time": "2021-06-11T05:03:44",
            "upload_time_iso_8601": "2021-06-11T05:03:44.087176Z",
            "url": "https://files.pythonhosted.org/packages/ec/8f/cf02f294c74abcbc7378d4a781c279dae5027c1e51b29cd6ba3c952b8bd1/runstats-2.0.0-cp36-cp36m-manylinux2010_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "4c09e156dad5b385a36042d431d06d9836caec9fb65dd032ec2f57c0c925ce52",
                "md5": "43aa5e3b061e8ca07e410202c99c4d04",
                "sha256": "9741af3341f087686db4758e2266f26da36ad44bb49039dee43edc97930ac32e"
            },
            "downloads": -1,
            "filename": "runstats-2.0.0-cp36-cp36m-win32.whl",
            "has_sig": false,
            "md5_digest": "43aa5e3b061e8ca07e410202c99c4d04",
            "packagetype": "bdist_wheel",
            "python_version": "cp36",
            "requires_python": ">=3.6",
            "size": 66088,
            "upload_time": "2021-06-11T05:03:45",
            "upload_time_iso_8601": "2021-06-11T05:03:45.928827Z",
            "url": "https://files.pythonhosted.org/packages/4c/09/e156dad5b385a36042d431d06d9836caec9fb65dd032ec2f57c0c925ce52/runstats-2.0.0-cp36-cp36m-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "5896cb6eb894cc9ce3cdbf4ef10b7a719bc7ab6ec2a875b0ec2d6860d6774cc6",
                "md5": "addf054454dc0ebe3ceba24643f203b0",
                "sha256": "5fb4f07a3bd665335c9e4f00389585fe98203b3ff32a0e743a1ce728c22855de"
            },
            "downloads": -1,
            "filename": "runstats-2.0.0-cp36-cp36m-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "addf054454dc0ebe3ceba24643f203b0",
            "packagetype": "bdist_wheel",
            "python_version": "cp36",
            "requires_python": ">=3.6",
            "size": 74977,
            "upload_time": "2021-06-11T05:03:47",
            "upload_time_iso_8601": "2021-06-11T05:03:47.638872Z",
            "url": "https://files.pythonhosted.org/packages/58/96/cb6eb894cc9ce3cdbf4ef10b7a719bc7ab6ec2a875b0ec2d6860d6774cc6/runstats-2.0.0-cp36-cp36m-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "eba93b597ec1ee094bb86dc3682cb220befa6818e06c10c17115d8a9bb927ee8",
                "md5": "70700c74b13cb6b6190b7351f91474c3",
                "sha256": "200297eed4d7f0192eb324d3c634672c9268e2e603f06b372968a849a30c2dfd"
            },
            "downloads": -1,
            "filename": "runstats-2.0.0-cp37-cp37m-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "70700c74b13cb6b6190b7351f91474c3",
            "packagetype": "bdist_wheel",
            "python_version": "cp37",
            "requires_python": ">=3.6",
            "size": 83785,
            "upload_time": "2021-06-11T05:03:49",
            "upload_time_iso_8601": "2021-06-11T05:03:49.345480Z",
            "url": "https://files.pythonhosted.org/packages/eb/a9/3b597ec1ee094bb86dc3682cb220befa6818e06c10c17115d8a9bb927ee8/runstats-2.0.0-cp37-cp37m-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "5934eb62c9a58e70714717bac65e272f5e0ab38c798718fcbe25d447875f17f8",
                "md5": "db48136b626285fcdcf87ee761693fc6",
                "sha256": "aa71c332ab533e482f62bc7308e0474a87582986c0aecb1015f3a922b5c8283e"
            },
            "downloads": -1,
            "filename": "runstats-2.0.0-cp37-cp37m-manylinux1_i686.whl",
            "has_sig": false,
            "md5_digest": "db48136b626285fcdcf87ee761693fc6",
            "packagetype": "bdist_wheel",
            "python_version": "cp37",
            "requires_python": ">=3.6",
            "size": 328292,
            "upload_time": "2021-06-11T05:03:51",
            "upload_time_iso_8601": "2021-06-11T05:03:51.240910Z",
            "url": "https://files.pythonhosted.org/packages/59/34/eb62c9a58e70714717bac65e272f5e0ab38c798718fcbe25d447875f17f8/runstats-2.0.0-cp37-cp37m-manylinux1_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "1eab99c0de8314c70c7095252470151af91560f09160a9d52f451d7b89bc0ce0",
                "md5": "3d5846c51d80476b1e47517bb7d067ab",
                "sha256": "7be16c6b781e27f0f931a2a3bc970b00c86790342b804a6a38041a88ef71ba63"
            },
            "downloads": -1,
            "filename": "runstats-2.0.0-cp37-cp37m-manylinux1_x86_64.whl",
            "has_sig": false,
            "md5_digest": "3d5846c51d80476b1e47517bb7d067ab",
            "packagetype": "bdist_wheel",
            "python_version": "cp37",
            "requires_python": ">=3.6",
            "size": 350502,
            "upload_time": "2021-06-11T05:03:53",
            "upload_time_iso_8601": "2021-06-11T05:03:53.258662Z",
            "url": "https://files.pythonhosted.org/packages/1e/ab/99c0de8314c70c7095252470151af91560f09160a9d52f451d7b89bc0ce0/runstats-2.0.0-cp37-cp37m-manylinux1_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "09981c2a7cdcfc1c058b798148ac4cbb4e52b2e001f2ec1cad178dc97f4dfd7d",
                "md5": "303c948c0b9b169f0559cd59b519bb7a",
                "sha256": "328e1ea2be82a264e09091bd6f4513a47bed131b3ab0f654f8153d853f2978c3"
            },
            "downloads": -1,
            "filename": "runstats-2.0.0-cp37-cp37m-manylinux2010_i686.whl",
            "has_sig": false,
            "md5_digest": "303c948c0b9b169f0559cd59b519bb7a",
            "packagetype": "bdist_wheel",
            "python_version": "cp37",
            "requires_python": ">=3.6",
            "size": 328296,
            "upload_time": "2021-06-11T05:03:54",
            "upload_time_iso_8601": "2021-06-11T05:03:54.529125Z",
            "url": "https://files.pythonhosted.org/packages/09/98/1c2a7cdcfc1c058b798148ac4cbb4e52b2e001f2ec1cad178dc97f4dfd7d/runstats-2.0.0-cp37-cp37m-manylinux2010_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "12ea48e90ff962bf4ed4068f1e4d68b7e06fa55ebbf5492585716ae1672f1ab9",
                "md5": "5ad01f12f89352ca5b4bb058de8f7477",
                "sha256": "52985af2b92bb080f886e911f7bc593970aa10fd8febadcfae2e14f8b0ff9b36"
            },
            "downloads": -1,
            "filename": "runstats-2.0.0-cp37-cp37m-manylinux2010_x86_64.whl",
            "has_sig": false,
            "md5_digest": "5ad01f12f89352ca5b4bb058de8f7477",
            "packagetype": "bdist_wheel",
            "python_version": "cp37",
            "requires_python": ">=3.6",
            "size": 350507,
            "upload_time": "2021-06-11T05:03:55",
            "upload_time_iso_8601": "2021-06-11T05:03:55.816920Z",
            "url": "https://files.pythonhosted.org/packages/12/ea/48e90ff962bf4ed4068f1e4d68b7e06fa55ebbf5492585716ae1672f1ab9/runstats-2.0.0-cp37-cp37m-manylinux2010_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "b496b65304cce316a6da48a5df0a5713704289390830cd4e564020672beffeb8",
                "md5": "c93c1f5a3ffb08e14ab991e9aa0a13eb",
                "sha256": "e52da241b932d56e9f9f947d6e0ab3d71fefc31fe27b610c220e82fc44b4383f"
            },
            "downloads": -1,
            "filename": "runstats-2.0.0-cp37-cp37m-win32.whl",
            "has_sig": false,
            "md5_digest": "c93c1f5a3ffb08e14ab991e9aa0a13eb",
            "packagetype": "bdist_wheel",
            "python_version": "cp37",
            "requires_python": ">=3.6",
            "size": 65936,
            "upload_time": "2021-06-11T05:03:57",
            "upload_time_iso_8601": "2021-06-11T05:03:57.083961Z",
            "url": "https://files.pythonhosted.org/packages/b4/96/b65304cce316a6da48a5df0a5713704289390830cd4e564020672beffeb8/runstats-2.0.0-cp37-cp37m-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "051772d04d2d2e0fe3bb0ff7c1d53b1024090c1da6fc70392f69a630add8bf26",
                "md5": "e55add7367b2950437b31e4a9a460c5a",
                "sha256": "2b20f6aa911b812948ac3b886c0d78ea4c7acac5d615bffcf863d11711f91c52"
            },
            "downloads": -1,
            "filename": "runstats-2.0.0-cp37-cp37m-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "e55add7367b2950437b31e4a9a460c5a",
            "packagetype": "bdist_wheel",
            "python_version": "cp37",
            "requires_python": ">=3.6",
            "size": 74827,
            "upload_time": "2021-06-11T05:03:58",
            "upload_time_iso_8601": "2021-06-11T05:03:58.756871Z",
            "url": "https://files.pythonhosted.org/packages/05/17/72d04d2d2e0fe3bb0ff7c1d53b1024090c1da6fc70392f69a630add8bf26/runstats-2.0.0-cp37-cp37m-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "58d8f5fdbb149f5cdd3b867ac6b3a2e0662c4f727f2bed1996900ddba18cdad8",
                "md5": "758f7d24fad131dc845c75b60f54e9cc",
                "sha256": "3ca82450e7aaef6f0f0a6332e17bc8723f3beae8b430ce32df1fd7ea624b81a5"
            },
            "downloads": -1,
            "filename": "runstats-2.0.0-cp38-cp38-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "758f7d24fad131dc845c75b60f54e9cc",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.6",
            "size": 86298,
            "upload_time": "2021-06-11T05:04:00",
            "upload_time_iso_8601": "2021-06-11T05:04:00.451413Z",
            "url": "https://files.pythonhosted.org/packages/58/d8/f5fdbb149f5cdd3b867ac6b3a2e0662c4f727f2bed1996900ddba18cdad8/runstats-2.0.0-cp38-cp38-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "beaeec2817f3e59520580bed5470bee82c803547322ac818d4c0f9b3f108ff90",
                "md5": "95dae7c517c4dff25f271a985676b38e",
                "sha256": "7212a39a457c9858acdaf895f2e3a4f4cb5085c2f5d018498c8904ec83fcfcfb"
            },
            "downloads": -1,
            "filename": "runstats-2.0.0-cp38-cp38-manylinux1_i686.whl",
            "has_sig": false,
            "md5_digest": "95dae7c517c4dff25f271a985676b38e",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.6",
            "size": 389682,
            "upload_time": "2021-06-11T05:04:02",
            "upload_time_iso_8601": "2021-06-11T05:04:02.249685Z",
            "url": "https://files.pythonhosted.org/packages/be/ae/ec2817f3e59520580bed5470bee82c803547322ac818d4c0f9b3f108ff90/runstats-2.0.0-cp38-cp38-manylinux1_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "e4027895b5137f54004dd61ae22a18d490de89632271c766a084a8b59fd421c1",
                "md5": "753dd20384d08c34d53d72f81f67bf5d",
                "sha256": "dc631f2f1640de2abbd6db48210e4804acc46e00104c6239435d240e67f94c2f"
            },
            "downloads": -1,
            "filename": "runstats-2.0.0-cp38-cp38-manylinux1_x86_64.whl",
            "has_sig": false,
            "md5_digest": "753dd20384d08c34d53d72f81f67bf5d",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.6",
            "size": 413134,
            "upload_time": "2021-06-11T05:04:03",
            "upload_time_iso_8601": "2021-06-11T05:04:03.661377Z",
            "url": "https://files.pythonhosted.org/packages/e4/02/7895b5137f54004dd61ae22a18d490de89632271c766a084a8b59fd421c1/runstats-2.0.0-cp38-cp38-manylinux1_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "58061c7269c29548372d3ab0c98408219329e7e71a2726fb563ad2a22cc70fa8",
                "md5": "ae3266e2047c723f7b0c7f057412b24d",
                "sha256": "51c903801765b97b657ccbbba5941a5ad10491ee4e1c071cce4025f20af4b0e8"
            },
            "downloads": -1,
            "filename": "runstats-2.0.0-cp38-cp38-manylinux2010_i686.whl",
            "has_sig": false,
            "md5_digest": "ae3266e2047c723f7b0c7f057412b24d",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.6",
            "size": 389684,
            "upload_time": "2021-06-11T05:04:04",
            "upload_time_iso_8601": "2021-06-11T05:04:04.978016Z",
            "url": "https://files.pythonhosted.org/packages/58/06/1c7269c29548372d3ab0c98408219329e7e71a2726fb563ad2a22cc70fa8/runstats-2.0.0-cp38-cp38-manylinux2010_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "a4b0155a3e0beb40717e265ef691cae91cced05deabbf082b6c05d5f6a105dfe",
                "md5": "3d14f49ee57f8701abc53157462760b9",
                "sha256": "5da7acb950243c3215c4569773d4dc30da746d49c73f14916d83b3bcfc75d7ad"
            },
            "downloads": -1,
            "filename": "runstats-2.0.0-cp38-cp38-manylinux2010_x86_64.whl",
            "has_sig": false,
            "md5_digest": "3d14f49ee57f8701abc53157462760b9",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.6",
            "size": 413137,
            "upload_time": "2021-06-11T05:04:06",
            "upload_time_iso_8601": "2021-06-11T05:04:06.250985Z",
            "url": "https://files.pythonhosted.org/packages/a4/b0/155a3e0beb40717e265ef691cae91cced05deabbf082b6c05d5f6a105dfe/runstats-2.0.0-cp38-cp38-manylinux2010_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "c139fbed9642b215b0931fd986714384c96b46653121b868932d1970ee440cc5",
                "md5": "634b4a6842a15aaf96742c3f1ddc55c9",
                "sha256": "c51efa5f1427445b0fdf404b133b407d7ebda2143c090ed60968b975903068c7"
            },
            "downloads": -1,
            "filename": "runstats-2.0.0-cp38-cp38-win32.whl",
            "has_sig": false,
            "md5_digest": "634b4a6842a15aaf96742c3f1ddc55c9",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.6",
            "size": 67652,
            "upload_time": "2021-06-11T05:04:07",
            "upload_time_iso_8601": "2021-06-11T05:04:07.594543Z",
            "url": "https://files.pythonhosted.org/packages/c1/39/fbed9642b215b0931fd986714384c96b46653121b868932d1970ee440cc5/runstats-2.0.0-cp38-cp38-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "be010410cbb31adc7945f1e246bf0c67c1e0514daf81e5605f6a27c076b457a1",
                "md5": "dfec8b6de52665226fb22762962a278f",
                "sha256": "deb75dd5966f6c0a944b4a4f65fbb8f6d67e1c479f6a6c666cdb7cfdec03a731"
            },
            "downloads": -1,
            "filename": "runstats-2.0.0-cp38-cp38-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "dfec8b6de52665226fb22762962a278f",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.6",
            "size": 77321,
            "upload_time": "2021-06-11T05:04:08",
            "upload_time_iso_8601": "2021-06-11T05:04:08.900034Z",
            "url": "https://files.pythonhosted.org/packages/be/01/0410cbb31adc7945f1e246bf0c67c1e0514daf81e5605f6a27c076b457a1/runstats-2.0.0-cp38-cp38-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "48ea8a125cf1e6f2cdfee273d354bbcf2e926936cc33c84d1df7d9899bf1d96e",
                "md5": "2319402f49ba04f509be2b2a31b4c8ed",
                "sha256": "c8b2dee3c02c32efab95b0b615a1ba24400e56db4d71591f8367120066d62ffa"
            },
            "downloads": -1,
            "filename": "runstats-2.0.0-cp39-cp39-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "2319402f49ba04f509be2b2a31b4c8ed",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.6",
            "size": 85509,
            "upload_time": "2021-06-11T05:04:10",
            "upload_time_iso_8601": "2021-06-11T05:04:10.097264Z",
            "url": "https://files.pythonhosted.org/packages/48/ea/8a125cf1e6f2cdfee273d354bbcf2e926936cc33c84d1df7d9899bf1d96e/runstats-2.0.0-cp39-cp39-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "ecc24223fcb43baf469afceedef2f0a144315316d6c0c17ab11d334f5ad6ff05",
                "md5": "8154bc4e9639a247970a83ed5523dbe5",
                "sha256": "8d47a09a5274f89e709853584527ef5eefbb7f10668c802eb17d82742533a7dc"
            },
            "downloads": -1,
            "filename": "runstats-2.0.0-cp39-cp39-manylinux1_i686.whl",
            "has_sig": false,
            "md5_digest": "8154bc4e9639a247970a83ed5523dbe5",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.6",
            "size": 365174,
            "upload_time": "2021-06-11T05:04:11",
            "upload_time_iso_8601": "2021-06-11T05:04:11.531514Z",
            "url": "https://files.pythonhosted.org/packages/ec/c2/4223fcb43baf469afceedef2f0a144315316d6c0c17ab11d334f5ad6ff05/runstats-2.0.0-cp39-cp39-manylinux1_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "fdbe4642fd909dd0d25796128be86b8ff5f3bf9671aae47787b4f8f817a7c929",
                "md5": "019817cd347bba56a82fd866f65dfad0",
                "sha256": "c133803edbb5d6f23cfb4ca05cea2e74d9ea35b1451a6b3de22987649fd0cf27"
            },
            "downloads": -1,
            "filename": "runstats-2.0.0-cp39-cp39-manylinux1_x86_64.whl",
            "has_sig": false,
            "md5_digest": "019817cd347bba56a82fd866f65dfad0",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.6",
            "size": 385593,
            "upload_time": "2021-06-11T05:04:12",
            "upload_time_iso_8601": "2021-06-11T05:04:12.831989Z",
            "url": "https://files.pythonhosted.org/packages/fd/be/4642fd909dd0d25796128be86b8ff5f3bf9671aae47787b4f8f817a7c929/runstats-2.0.0-cp39-cp39-manylinux1_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "63181832abe3b08827130bc260ccbe77a3dc759d09a0bbf39e6af949a3095ce9",
                "md5": "4d59f605c1e4f4e5ac3540c56ef1e7f3",
                "sha256": "ed6e1f1839ed73bfc35ae8fae2d0e6deb826dcbc993f30a620dbb83eb2f07556"
            },
            "downloads": -1,
            "filename": "runstats-2.0.0-cp39-cp39-manylinux2010_i686.whl",
            "has_sig": false,
            "md5_digest": "4d59f605c1e4f4e5ac3540c56ef1e7f3",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.6",
            "size": 365177,
            "upload_time": "2021-06-11T05:04:14",
            "upload_time_iso_8601": "2021-06-11T05:04:14.763888Z",
            "url": "https://files.pythonhosted.org/packages/63/18/1832abe3b08827130bc260ccbe77a3dc759d09a0bbf39e6af949a3095ce9/runstats-2.0.0-cp39-cp39-manylinux2010_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "2869465e5e711d2e79b80d0c5e6a8bd0e2065df03946645eb7b9aae50ffc52cb",
                "md5": "4af4c688292913ca53364e7c3250ab73",
                "sha256": "571dc4a6abc733da2b36e72b19b0b1743adab142882966e062ee7b5487a29d9a"
            },
            "downloads": -1,
            "filename": "runstats-2.0.0-cp39-cp39-manylinux2010_x86_64.whl",
            "has_sig": false,
            "md5_digest": "4af4c688292913ca53364e7c3250ab73",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.6",
            "size": 385593,
            "upload_time": "2021-06-11T05:04:16",
            "upload_time_iso_8601": "2021-06-11T05:04:16.289645Z",
            "url": "https://files.pythonhosted.org/packages/28/69/465e5e711d2e79b80d0c5e6a8bd0e2065df03946645eb7b9aae50ffc52cb/runstats-2.0.0-cp39-cp39-manylinux2010_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "87294cefd34be64456d9d0aea3d761a052a760ccee4eb5579af0b38513ad1804",
                "md5": "db550dee949336bf6a1a90ca8c396991",
                "sha256": "8c412ade7596f1afd6be5b5d634a55c4affd3c4305d05fcfa6a0accdf60edc16"
            },
            "downloads": -1,
            "filename": "runstats-2.0.0-cp39-cp39-win32.whl",
            "has_sig": false,
            "md5_digest": "db550dee949336bf6a1a90ca8c396991",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.6",
            "size": 67421,
            "upload_time": "2021-06-11T05:04:17",
            "upload_time_iso_8601": "2021-06-11T05:04:17.592994Z",
            "url": "https://files.pythonhosted.org/packages/87/29/4cefd34be64456d9d0aea3d761a052a760ccee4eb5579af0b38513ad1804/runstats-2.0.0-cp39-cp39-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "588b468259c2097b002e9fc805ad4ac618150270430f3a64e600f9dca1fc6be6",
                "md5": "3a1b6fb6d74e01dd6f68368e89037907",
                "sha256": "bb60dbf78a6270e89aad50708075ca57c3d0e07d2d91ae6b07f53fa9a4e91d13"
            },
            "downloads": -1,
            "filename": "runstats-2.0.0-cp39-cp39-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "3a1b6fb6d74e01dd6f68368e89037907",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.6",
            "size": 77373,
            "upload_time": "2021-06-11T05:04:19",
            "upload_time_iso_8601": "2021-06-11T05:04:19.327668Z",
            "url": "https://files.pythonhosted.org/packages/58/8b/468259c2097b002e9fc805ad4ac618150270430f3a64e600f9dca1fc6be6/runstats-2.0.0-cp39-cp39-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "d800f0ce323f237e31a36bf65fa398d4210a579173e2aebda8f9c2ca60d04288",
                "md5": "ab85b0d96a54625e75c684d6513f5de7",
                "sha256": "0f9a5e6cc9938bbac3474b17727ffc29fbf5895f33e55ce8843341e0821e77c2"
            },
            "downloads": -1,
            "filename": "runstats-2.0.0.tar.gz",
            "has_sig": false,
            "md5_digest": "ab85b0d96a54625e75c684d6513f5de7",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.6",
            "size": 101379,
            "upload_time": "2021-06-11T05:04:20",
            "upload_time_iso_8601": "2021-06-11T05:04:20.634300Z",
            "url": "https://files.pythonhosted.org/packages/d8/00/f0ce323f237e31a36bf65fa398d4210a579173e2aebda8f9c2ca60d04288/runstats-2.0.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2021-06-11 05:04:20",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "grantjenks",
    "github_project": "python-runstats",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "requirements": [],
    "tox": true,
    "lcname": "runstats"
}
        
Elapsed time: 0.27819s