{ "info": { "author": "Pablo Acosta-Serafini", "author_email": "pmasdev@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Console", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Operating System :: OS Independent", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": ".. README.rst\n.. Copyright (c) 2013-2019 Pablo Acosta-Serafini\n.. See LICENSE for details\n\n.. image:: https://badge.fury.io/py/pplot.svg\n :target: https://pypi.org/project/pplot\n :alt: PyPI version\n\n.. image:: https://img.shields.io/pypi/l/pplot.svg\n :target: https://pypi.org/project/pplot\n :alt: License\n\n.. image:: https://img.shields.io/pypi/pyversions/pplot.svg\n :target: https://pypi.org/project/pplot\n :alt: Python versions supported\n\n.. image:: https://img.shields.io/pypi/format/pplot.svg\n :target: https://pypi.org/project/pplot\n :alt: Format\n\n|\n\n.. image::\n https://dev.azure.com/pmasdev/pplot/_apis/build/status/pmacosta.pplot?branchName=master\n :target: https://dev.azure.com/pmasdev/pplot/_build?definitionId=8&_a=summary\n :alt: Continuous integration test status\n\n.. image::\n https://img.shields.io/azure-devops/coverage/pmasdev/pplot/8.svg\n :target: https://dev.azure.com/pmasdev/pplot/_build?definitionId=8&_a=summary\n :alt: Continuous integration test coverage\n\n.. image::\n https://readthedocs.org/projects/pip/badge/?version=stable\n :target: https://pip.readthedocs.io/en/stable/?badge=stable\n :alt: Documentation status\n\n|\n\nDescription\n===========\n\n.. role:: bash(code)\n\t:language: bash\n\n.. _Cog: https://nedbatchelder.com/code/cog\n.. _Coverage: https://coverage.readthedocs.io\n.. _Decorator: https://raw.githubusercontent.com/micheles/decorator/mast\n er/docs/documentation.md\n.. _Docutils: http://docutils.sourceforge.net/docs\n.. _Funcsigs: https://pypi.org/project/funcsigs\n.. _Imageio: http://imageio.github.io\n.. _Matplotlib: https://matplotlib.org\n.. _Mock: https://docs.python.org/3/library/unittest.mock.html\n.. _Numpy: http://www.numpy.org\n.. _Pcsv: https://pcsv.readthedocs.org\n.. _Peng: https://peng.readthedocs.org\n.. _Pexdoc: https://pexdoc.readthedocs.org\n.. _Pillow: https://python-pillow.org\n.. _Pmisc: http://pmisc.readthedocs.org\n.. _PyContracts: https://andreacensi.github.io/contracts\n.. _Pydocstyle: http://www.pydocstyle.org\n.. _Pylint: https://www.pylint.org\n.. _Py.test: http://pytest.org\n.. _Pytest-coverage: https://pypi.org/project/pytest-cov\n.. _Pytest-pmisc: https://pytest-pmisc.readthedocs.org\n.. _Pytest-xdist: https://pypi.org/project/pytest-xdist\n.. _Scipy: https://www.scipy.org\n.. _Six: https://pythonhosted.org/six\n.. _Sphinx: http://sphinx-doc.org\n.. _ReadTheDocs Sphinx theme: https://github.com/rtfd/sphinx_rtd_theme\n.. _Inline Syntax Highlight Sphinx Extension:\n https://bitbucket.org/klorenz/sphinxcontrib-inlinesyntaxhighlight\n.. _Shellcheck Linter Sphinx Extension:\n https://pypi.org/project/sphinxcontrib-shellcheck\n.. _Tox: https://testrun.org/tox\n.. _Virtualenv: https://docs.python-guide.org/dev/virtualenvs\n\nThis module can be used to create high-quality, presentation-ready X-Y graphs\nquickly and easily\n\n***************\nClass hierarchy\n***************\n\nThe properties of the graph (figure in Matplotlib parlance) are defined in an\nobject of the pplot.Figure class.\n\nEach figure can have one or more panels, whose properties are defined by\nobjects of the pplot.Panel class. Panels are arranged vertically\nin the figure and share the same independent axis. The limits of the\nindependent axis of the figure result from the union of the limits of the\nindependent axis of all the panels. The independent axis is shown by default\nin the bottom-most panel although it can be configured to be in any panel or\npanels.\n\nEach panel can have one or more data series, whose properties are defined by\nobjects of the pplot.Series class. A series can be associated with\neither the primary or secondary dependent axis of the panel. The limits of the\nprimary and secondary dependent axis of the panel result from the union of the\nprimary and secondary dependent data points of all the series associated with\neach axis. The primary axis is shown on the left of the panel and the\nsecondary axis is shown on the right of the panel. Axes can be linear or\nlogarithmic.\n\nThe data for a series is defined by a source. Two data sources are provided:\nthe pplot.BasicSource class provides basic data validation and\nminimum/maximum independent variable range bounding. The\npplot.CsvSource class builds upon the functionality of the\npplot.BasicSource class and offers a simple way of accessing data\nfrom a comma-separated values (CSV) file. Other data sources can be\nprogrammed by inheriting from the pplot.functions.DataSource\nabstract base class (ABC). The custom data source needs to implement the\nfollowing methods: :code:`__str__`, :code:`_set_indep_var` and\n:code:`_set_dep_var`. The latter two methods set the contents of the\nindependent variable (an increasing real Numpy vector) and the dependent\nvariable (a real Numpy vector) of the source, respectively.\n\n***************\nAxes tick marks\n***************\n\nAxes tick marks are selected so as to create the most readable graph. Two\nglobal variables control the actual number of ticks,\npplot.constants.MIN_TICKS and\npplot.constants.SUGGESTED_MAX_TICKS. In general the number of ticks\nare between these two bounds; one or two more ticks can be present if a data\nseries uses interpolation and the interpolated curve goes above (below) the\nlargest (smallest) data point. Tick spacing is chosen so as to have the most\nnumber of data points \"on grid\". Engineering notation (i.e. 1K = 1000, 1m =\n0.001, etc.) is used for the axis tick marks.\n\n*******\nExample\n*******\n\n.. code-block:: python\n\n # plot_example_1.py\n from __future__ import print_function\n import os, sys, numpy, pplot\n\n def main(fname, no_print):\n \"\"\"Show how to use pplot library to generate presentation-quality plots.\"\"\"\n ###\n # Series definition (Series class)\n ###\n # Extract data from a comma-separated (csv)\n # file using the CsvSource class\n wdir = os.path.dirname(__file__)\n csv_file = os.path.join(wdir, \"data.csv\")\n series1_obj = [\n pplot.Series(\n data_source=pplot.CsvSource(\n fname=csv_file,\n rfilter={\"value1\": 1},\n indep_col_label=\"value2\",\n dep_col_label=\"value3\",\n indep_min=None,\n indep_max=None,\n fproc=series1_proc_func,\n fproc_eargs={\"xoffset\": 1e-3},\n ),\n label=\"Source 1\",\n color=\"k\",\n marker=\"o\",\n interp=\"CUBIC\",\n line_style=\"-\",\n secondary_axis=False,\n )\n ]\n # Literal data can be used with the BasicSource class\n series2_obj = [\n pplot.Series(\n data_source=pplot.BasicSource(\n indep_var=numpy.array([0e-3, 1e-3, 2e-3]),\n dep_var=numpy.array([4, 7, 8]),\n ),\n label=\"Source 2\",\n color=\"r\",\n marker=\"s\",\n interp=\"STRAIGHT\",\n line_style=\"--\",\n secondary_axis=False,\n )\n ]\n series3_obj = [\n pplot.Series(\n data_source=pplot.BasicSource(\n indep_var=numpy.array([0.5e-3, 1e-3, 1.5e-3]),\n dep_var=numpy.array([10, 9, 6]),\n ),\n label=\"Source 3\",\n color=\"b\",\n marker=\"h\",\n interp=\"STRAIGHT\",\n line_style=\"--\",\n secondary_axis=True,\n )\n ]\n series4_obj = [\n pplot.Series(\n data_source=pplot.BasicSource(\n indep_var=numpy.array([0.3e-3, 1.8e-3, 2.5e-3]),\n dep_var=numpy.array([8, 8, 8]),\n ),\n label=\"Source 4\",\n color=\"g\",\n marker=\"D\",\n interp=\"STRAIGHT\",\n line_style=None,\n secondary_axis=True,\n )\n ]\n ###\n # Panels definition (Panel class)\n ###\n panel_obj = pplot.Panel(\n series=series1_obj + series2_obj + series3_obj + series4_obj,\n primary_axis_label=\"Primary axis label\",\n primary_axis_units=\"-\",\n secondary_axis_label=\"Secondary axis label\",\n secondary_axis_units=\"W\",\n legend_props={\"pos\": \"lower right\", \"cols\": 1},\n )\n ###\n # Figure definition (Figure class)\n ###\n dim = 2.25\n fig_obj = pplot.Figure(\n panels=panel_obj,\n indep_var_label=\"Indep. var.\",\n indep_var_units=\"S\",\n log_indep_axis=False,\n fig_width=4 * dim,\n fig_height=3 * dim,\n title=\"Library pplot Example\",\n )\n # Save figure\n output_fname = os.path.join(wdir, fname)\n if not no_print:\n print(\"Saving image to file {0}\".format(output_fname))\n fig_obj.save(output_fname, compress=True)\n\n def series1_proc_func(indep_var, dep_var, xoffset):\n \"\"\"Process data 1 series.\"\"\"\n return (indep_var * 1e-3) - xoffset, dep_var\n\n|\n\nInterpreter\n===========\n\nThe package has been developed and tested with Python 2.7, 3.5, 3.6 and 3.7\nunder Linux (Debian, Ubuntu), Apple macOS and Microsoft Windows\n\nInstalling\n==========\n\n.. code-block:: console\n\n\t$ pip install pplot\n\nDocumentation\n=============\n\nAvailable at `Read the Docs `_\n\nContributing\n============\n\n1. Abide by the adopted `code of conduct\n `_\n\n2. Fork the `repository `_ from GitHub and\n then clone personal copy [#f1]_:\n\n .. code-block:: console\n\n $ github_user=myname\n $ git clone --recurse-submodules \\\n https://github.com/\"${github_user}\"/pplot.git\n Cloning into 'pplot'...\n ...\n $ cd pplot || exit 1\n $ export PPLOT_DIR=${PWD}\n $\n\n3. The package uses two sub-modules: a set of custom Pylint plugins to help with\n some areas of code quality and consistency (under the ``pylint_plugins``\n directory), and a lightweight package management framework (under the\n ``pypkg`` directory). Additionally, the `pre-commit framework\n `_ is used to perform various pre-commit code\n quality and consistency checks. To enable the pre-commit hooks:\n\n .. code-block:: console\n\n $ cd \"${PPLOT_DIR}\" || exit 1\n $ pre-commit install\n pre-commit installed at .../pplot/.git/hooks/pre-commit\n $\n\n4. Ensure that the Python interpreter can find the package modules\n (update the :bash:`$PYTHONPATH` environment variable, or use\n `sys.paths() `_,\n etc.)\n\n .. code-block:: console\n\n $ export PYTHONPATH=${PYTHONPATH}:${PPLOT_DIR}\n $\n\n5. Install the dependencies (if needed, done automatically by pip):\n\n * `Cog`_ (2.5.1 or newer)\n\n * `Coverage`_ (4.5.3 or newer)\n\n * `Decorator`_ (4.4.0 or newer)\n\n * `Docutils`_ (0.14 or newer)\n\n * `Funcsigs`_ (Python 2.x only, 1.0.2 or newer)\n\n * `Imageio`_ (2.5.0 or newer)\n\n * `Inline Syntax Highlight Sphinx Extension`_ (0.2 or newer)\n\n * `Matplotlib`_ (Python 2.x: 2.2.4 or newer, Python 3.x: 3.0.3 or\n newer)\n\n * `Mock`_ (Python 2.x only, 2.0.0 or newer)\n\n * `Numpy`_ (1.16.2 or newer)\n\n * `Pcsv`_ (1.0.8 or newer)\n\n * `Peng`_ (1.0.9 or newer)\n\n * `Pexdoc`_ (1.1.4 or newer)\n\n * `Pillow`_ (5.4.1 or newer)\n\n * `Pmisc`_ (1.5.8 or newer)\n\n * `Py.test`_ (4.3.1 or newer)\n\n * `PyContracts`_ (1.8.2 or newer)\n\n * `Pydocstyle`_ (3.0.0 or newer)\n\n * `Pylint`_ (Python 2.x: 1.9.4 or newer, Python 3.x: 2.3.1 or newer)\n\n * `Pytest-coverage`_ (2.6.1 or newer)\n\n * `Pytest-pmisc`_ (1.0.7 or newer)\n\n * `Pytest-xdist`_ (optional, 1.26.1 or newer)\n\n * `ReadTheDocs Sphinx theme`_ (0.4.3 or newer)\n\n * `Scipy`_ (1.2.1 or newer)\n\n * `Shellcheck Linter Sphinx Extension`_ (1.0.8 or newer)\n\n * `Six`_ (1.12.0 or newer)\n\n * `Sphinx`_ (1.8.5 or newer)\n\n * `Tox`_ (3.7.0 or newer)\n\n * `Virtualenv`_ (16.4.3 or newer)\n\n6. Implement a new feature or fix a bug\n\n7. Write a unit test which shows that the contributed code works as expected.\n Run the package tests to ensure that the bug fix or new feature does not\n have adverse side effects. If possible achieve 100\\% code and branch\n coverage of the contribution. Thorough package validation\n can be done via Tox and Pytest:\n\n .. code-block:: console\n\n $ PKG_NAME=pplot tox\n GLOB sdist-make: .../pplot/setup.py\n py27-pkg create: .../pplot/.tox/py27\n py27-pkg installdeps: -r.../pplot/requirements/tests_py27.pip, -r.../pplot/requirements/docs_py27.pip\n ...\n py27-pkg: commands succeeded\n py35-pkg: commands succeeded\n py36-pkg: commands succeeded\n py37-pkg: commands succeeded\n congratulations :)\n $\n\n `Setuptools `_ can also be used\n (Tox is configured as its virtual environment manager):\n\n .. code-block:: console\n\n $ PKG_NAME=pplot python setup.py tests\n running tests\n running egg_info\n writing pplot.egg-info/PKG-INFO\n writing dependency_links to pplot.egg-info/dependency_links.txt\n writing requirements to pplot.egg-info/requires.txt\n ...\n py27-pkg: commands succeeded\n py35-pkg: commands succeeded\n py36-pkg: commands succeeded\n py37-pkg: commands succeeded\n congratulations :)\n $\n\n Tox (or Setuptools via Tox) runs with the following default environments:\n ``py27-pkg``, ``py35-pkg``, ``py36-pkg`` and ``py37-pkg`` [#f3]_. These use\n the 2.7, 3.5, 3.6 and 3.7 interpreters, respectively, to test all code in\n the documentation (both in Sphinx ``*.rst`` source files and in\n docstrings), run all unit tests, measure test coverage and re-build the\n exceptions documentation. To pass arguments to Pytest (the test runner) use\n a double dash (``--``) after all the Tox arguments, for example:\n\n .. code-block:: console\n\n $ PKG_NAME=pplot tox -e py27-pkg -- -n 4\n GLOB sdist-make: .../pplot/setup.py\n py27-pkg inst-nodeps: .../pplot/.tox/.tmp/package/1/pplot-1.1.4.zip\n ...\n py27-pkg: commands succeeded\n congratulations :)\n $\n\n Or use the :code:`-a` Setuptools optional argument followed by a quoted\n string with the arguments for Pytest. For example:\n\n .. code-block:: console\n\n $ PKG_NAME=pplot python setup.py tests -a \"-e py27-pkg -- -n 4\"\n running tests\n ...\n py27-pkg: commands succeeded\n congratulations :)\n $\n\n There are other convenience environments defined for Tox [#f3]_:\n\n * ``py27-repl``, ``py35-repl``, ``py36-repl`` and ``py37-repl`` run the\n Python 2.7, 3.5, 3.6 and 3.7 REPL, respectively, in the appropriate\n virtual environment. The ``pplot`` package is pip-installed by Tox when\n the environments are created. Arguments to the interpreter can be\n passed in the command line after a double dash (``--``).\n\n * ``py27-test``, ``py35-test``, ``py36-test`` and ``py37-test`` run Pytest\n using the Python 2.7, 3.5, 3.6 and 3.7 interpreter, respectively, in the\n appropriate virtual environment. Arguments to pytest can be passed in\n the command line after a double dash (``--``) , for example:\n\n .. code-block:: console\n\n $ PKG_NAME=pplot tox -e py27-test -- -x test_pplot.py\n GLOB sdist-make: .../pplot/setup.py\n py27-pkg inst-nodeps: .../pplot/.tox/.tmp/package/1/pplot-1.1.4.zip\n ...\n py27-pkg: commands succeeded\n congratulations :)\n $\n * ``py27-test``, ``py35-test``, ``py36-test`` and ``py37-test`` test code\n and branch coverage using the 2.7, 3.5, 3.6 and 3.7 interpreter,\n respectively, in the appropriate virtual environment. Arguments to\n pytest can be passed in the command line after a double dash (``--``).\n The report can be found in :bash:`${PPLOT_DIR}/.tox/py[PV]/usr/share/ppl\n ot/tests/htmlcov/index.html` where ``[PV]`` stands for ``2.7``, ``3.5``,\n ``3.6`` or ``3.7`` depending on the interpreter used.\n\n8. Verify that continuous integration tests pass. The package has continuous\n integration configured for Linux, Apple macOS and Microsoft Windows (all via\n `Azure DevOps `_).\n\n9. Document the new feature or bug fix (if needed). The script\n :bash:`${PPLOT_DIR}/pypkg/build_docs.py` re-builds the whole package\n documentation (re-generates images, cogs source files, etc.):\n\n .. code-block:: console\n\n $ \"${PPLOT_DIR}\"/pypkg/build_docs.py -h\n usage: build_docs.py [-h] [-d DIRECTORY] [-r]\n [-n NUM_CPUS] [-t]\n\n Build pplot package documentation\n\n optional arguments:\n -h, --help show this help message and exit\n -d DIRECTORY, --directory DIRECTORY\n specify source file directory\n (default ../pplot)\n -r, --rebuild rebuild exceptions documentation.\n If no module name is given all\n modules with auto-generated\n exceptions documentation are\n rebuilt\n -n NUM_CPUS, --num-cpus NUM_CPUS\n number of CPUs to use (default: 1)\n -t, --test diff original and rebuilt file(s)\n (exit code 0 indicates file(s) are\n identical, exit code 1 indicates\n file(s) are different)\n\n.. rubric:: Footnotes\n\n.. [#f1] All examples are for the `bash `_\n shell\n\n.. [#f2] It is assumed that all the Python interpreters are in the executables\n path. Source code for the interpreters can be downloaded from Python's main\n `site `_\n\n.. [#f3] Tox configuration largely inspired by\n `Ionel's codelog `_\n\nLicense\n=======\n\nThe MIT License (MIT)\n\nCopyright (c) 2013-2019 Pablo Acosta-Serafini\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n.. CHANGELOG.rst\n.. Copyright (c) 2013-2019 Pablo Acosta-Serafini\n.. See LICENSE for details\n\nChangelog\n=========\n\n* 1.1.4 [2019-03-22]: Documentation and dependencies update\n\n* 1.1.3 [2019-03-16]: Adopted lightweight package management framework\n\n* 1.1.2 [2018-01-16]: Hosted documentation build fixes\n\n* 1.1.1 [2018-01-16]: Corrected PyPI Python interpreter version\n\n* 1.1.0 [2018-01-16]: Added support for specifying independent axis tick labels\n (ignored for figures with logarithmic independent axis). Improved minimum\n image size computation. Removed all padding around the exterior of the image.\n Dropped support for Python interpreter versions 2.6, 3.3 and 3.4. Updated\n dependencies versions to their current versions\n\n* 1.0.4 [2017-02-25]: Fixed tick marks labels in the [0, 1] range. Closed image\n tests escapes\n\n* 1.0.3 [2017-02-16]: Python 3.6 support\n\n* 1.0.2 [2016-05-16]: PyPI front page fixes\n\n* 1.0.1 [2016-05-16]: Documentation build fixes to display README information\n correctly in repositories and PyPI\n\n* 1.0.0 [2016-05-16]: Final release of 1.0.0 branch\n\n* 1.0.0rc1 [2016-05-12]: Initial commit, forked a subset from putil PyPI\n package\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://github.com/pmacosta/pplot/", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "pplot", "package_url": "https://pypi.org/project/pplot/", "platform": "any", "project_url": "https://pypi.org/project/pplot/", "project_urls": { "Homepage": "http://github.com/pmacosta/pplot/" }, "release_url": "https://pypi.org/project/pplot/1.1.4/", "requires_dist": [ "numpy (>=1.16.2)", "decorator (>=4.4.0)", "funcsigs (>=1.0.2)", "matplotlib (>=2.2.4)", "pillow (>=5.4.1)", "pycontracts (>=1.8.2)", "scipy (>=1.2.1)", "six (>=1.12.0)", "pmisc (>=1.5.8)", "pexdoc (>=1.1.4)", "peng (>=1.0.9)", "pcsv (>=1.0.8)" ], "requires_python": "", "summary": "", "version": "1.1.4" }, "last_serial": 4974689, "releases": { "1.0.4": [ { "comment_text": "", "digests": { "md5": "e1dbb260340c19aa3eb052a6cbbffa76", "sha256": "b2bb79a4b875e677fcdf61bc2c2f84f1c198257282d88ed69b59ce93e1d1cfd4" }, "downloads": -1, "filename": "pplot-1.0.4-py26-none-any.whl", "has_sig": false, "md5_digest": "e1dbb260340c19aa3eb052a6cbbffa76", "packagetype": "bdist_wheel", "python_version": "py26", "requires_python": null, "size": 59339, "upload_time": "2017-02-25T21:32:16", "url": "https://files.pythonhosted.org/packages/c8/ca/d2bc964f96066bdf1098c79a58a0c1746940e9d6ee6b524108b59426d62f/pplot-1.0.4-py26-none-any.whl" }, { "comment_text": "", "digests": { "md5": "57dfdfa5516f22942338a1fdb0e3bcb0", "sha256": "8215360aa5a5324de8e02abd2a18024e5eadaa92a0ccda0c6861eece01af8db0" }, "downloads": -1, "filename": "pplot-1.0.4-py27-none-any.whl", "has_sig": false, "md5_digest": "57dfdfa5516f22942338a1fdb0e3bcb0", "packagetype": "bdist_wheel", "python_version": "py27", "requires_python": null, "size": 59268, "upload_time": "2017-02-25T21:32:18", "url": "https://files.pythonhosted.org/packages/8b/f5/6bd8c81782458f3a65e98d97c17dbdf786a467e6bf92f967ff3b9ffc5e2f/pplot-1.0.4-py27-none-any.whl" }, { "comment_text": "", "digests": { "md5": "534b06432c92989460b8f1cb9116d4df", "sha256": "d3d79ce016c5935e6156b815ceea7d0295c56b60b42cdcf68f46d9c428790c69" }, "downloads": -1, "filename": "pplot-1.0.4-py33-none-any.whl", "has_sig": false, "md5_digest": "534b06432c92989460b8f1cb9116d4df", "packagetype": "bdist_wheel", "python_version": "py33", "requires_python": null, "size": 59287, "upload_time": "2017-02-25T21:32:21", "url": "https://files.pythonhosted.org/packages/c0/53/b1b491166d8b96d19cb81d4a3cb2c2005989374fb801ccee1c0e88f37aef/pplot-1.0.4-py33-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5d88143bfd36dd1e7ba3a74b71807c21", "sha256": "a1a32ab5ae30488d72010a914186e297dfc49bf9731c231ae6c818afb8ef1c44" }, "downloads": -1, "filename": "pplot-1.0.4-py34-none-any.whl", "has_sig": false, "md5_digest": "5d88143bfd36dd1e7ba3a74b71807c21", "packagetype": "bdist_wheel", "python_version": "py34", "requires_python": null, "size": 59240, "upload_time": "2017-02-25T21:32:23", "url": "https://files.pythonhosted.org/packages/85/09/4dbb2d079177816db2cbd32fcc3d82e22b4d1d2021fc0c2b41eff388934b/pplot-1.0.4-py34-none-any.whl" }, { "comment_text": "", "digests": { "md5": "99fee4204412745ec4b94eec20a32389", "sha256": "2c9821058a9611fb89a58eebcfb5ea084f8b428631e7e8dfa3a5647c7ec5e0ac" }, "downloads": -1, "filename": "pplot-1.0.4-py35-none-any.whl", "has_sig": false, "md5_digest": "99fee4204412745ec4b94eec20a32389", "packagetype": "bdist_wheel", "python_version": "py35", "requires_python": null, "size": 59240, "upload_time": "2017-02-25T21:32:25", "url": "https://files.pythonhosted.org/packages/22/3d/5988cebc068a3c72db148e8ffae3b5ebc2f9689454e104366a5f38197b83/pplot-1.0.4-py35-none-any.whl" }, { "comment_text": "", "digests": { "md5": "802882802d54832555a448f4edd095f7", "sha256": "426f060ec6bab88160f8adcdc8d55a8816208e2ce823af1272b8d22b4659a76e" }, "downloads": -1, "filename": "pplot-1.0.4-py36-none-any.whl", "has_sig": false, "md5_digest": "802882802d54832555a448f4edd095f7", "packagetype": "bdist_wheel", "python_version": "py36", "requires_python": null, "size": 59242, "upload_time": "2017-02-25T21:32:27", "url": "https://files.pythonhosted.org/packages/c4/9f/8f87cf5700ef93f3b2145e3087d742df299ac8f0d216612dd1e50aa92de5/pplot-1.0.4-py36-none-any.whl" }, { "comment_text": "", "digests": { "md5": "410fd5ec40a8378fab1ccdd188f803c2", "sha256": "06b51d2a52a84a3263909ecc40315c88860efcdb2715abb8b515a963970772f7" }, "downloads": -1, "filename": "pplot-1.0.4.tar.gz", "has_sig": false, "md5_digest": "410fd5ec40a8378fab1ccdd188f803c2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 38386109, "upload_time": "2017-02-25T21:32:39", "url": "https://files.pythonhosted.org/packages/a4/e9/ef5b3c29e4d6a3b958f53ccc50b88ec81ac8cadfaa39200ee9240f6d511b/pplot-1.0.4.tar.gz" } ], "1.1.2": [ { "comment_text": "", "digests": { "md5": "0d10904a5aeef5a739af781f6ab99e46", "sha256": "8ec194629e89351e6c8692394bb2db24e110a5ad893602198337a8aa94f46880" }, "downloads": -1, "filename": "pplot-1.1.2-py27-none-any.whl", "has_sig": false, "md5_digest": "0d10904a5aeef5a739af781f6ab99e46", "packagetype": "bdist_wheel", "python_version": "py27", "requires_python": null, "size": 65294, "upload_time": "2018-01-16T18:30:15", "url": "https://files.pythonhosted.org/packages/0a/c5/ef645a4f13a0bcc25669e58200f482f9dcc352dca0e64a7d865c80edc341/pplot-1.1.2-py27-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3b00fe63b7c3eb11639f1d3111d2a6c5", "sha256": "1e97b47c50fb48bdb8b146841c66901ff7d7d2b476ecf4b1aebfa69e31e5ce55" }, "downloads": -1, "filename": "pplot-1.1.2-py35-none-any.whl", "has_sig": false, "md5_digest": "3b00fe63b7c3eb11639f1d3111d2a6c5", "packagetype": "bdist_wheel", "python_version": "py35", "requires_python": null, "size": 65294, "upload_time": "2018-01-16T18:30:16", "url": "https://files.pythonhosted.org/packages/78/ea/51d7051da0f5bd02c1e06223e01bfece348caa64c4e3270b3890b7f385e7/pplot-1.1.2-py35-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b490803871136bf7e27bcdd6ec62ae69", "sha256": "60ea90184a484da65f52dbd1003b9059491ffc94bde24468290e398234c87faf" }, "downloads": -1, "filename": "pplot-1.1.2-py36-none-any.whl", "has_sig": false, "md5_digest": "b490803871136bf7e27bcdd6ec62ae69", "packagetype": "bdist_wheel", "python_version": "py36", "requires_python": null, "size": 65294, "upload_time": "2018-01-16T18:30:18", "url": "https://files.pythonhosted.org/packages/b8/4e/3f6b94255b0711d5a9a370a1362ec3de089acc6c8410e07d3bc9c971e914/pplot-1.1.2-py36-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8ea32e7455fc5263d0bd5dbf0a19db19", "sha256": "c312212fcfdc472faa01fa97dff5360b7ffd1587d52aceb91226f4052c6d2209" }, "downloads": -1, "filename": "pplot-1.1.2.tar.gz", "has_sig": false, "md5_digest": "8ea32e7455fc5263d0bd5dbf0a19db19", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26027655, "upload_time": "2018-01-16T18:30:26", "url": "https://files.pythonhosted.org/packages/b4/3d/5e11d83d87866a0e1403b5fd2ba02c4c12a48e8fea5954cda493d661c6a0/pplot-1.1.2.tar.gz" } ], "1.1.3": [ { "comment_text": "", "digests": { "md5": "02ba78da269f76fbe22fd8f5f8726147", "sha256": "5c297189e3b968fa4de7dc41610f53d26e2f0c91000dd222a00f047e0d517d22" }, "downloads": -1, "filename": "pplot-1.1.3-py27-none-any.whl", "has_sig": false, "md5_digest": "02ba78da269f76fbe22fd8f5f8726147", "packagetype": "bdist_wheel", "python_version": "py27", "requires_python": null, "size": 65214, "upload_time": "2019-03-16T19:10:02", "url": "https://files.pythonhosted.org/packages/bf/5c/26a3aaa737d1ddd2cd84947cd0e7c89c29de8e0d632e65670eab372a0683/pplot-1.1.3-py27-none-any.whl" }, { "comment_text": "", "digests": { "md5": "314b9805a68b5ca5ad76724ea5853682", "sha256": "bc56f3e9e499ea90e64c6fe21b5245ad0b91b1b7312c661472ae02dac698fa4f" }, "downloads": -1, "filename": "pplot-1.1.3-py35-none-any.whl", "has_sig": false, "md5_digest": "314b9805a68b5ca5ad76724ea5853682", "packagetype": "bdist_wheel", "python_version": "py35", "requires_python": null, "size": 65213, "upload_time": "2019-03-16T19:10:03", "url": "https://files.pythonhosted.org/packages/ae/1d/e6996a274dbaa38c4ade3671e08ea841c5b2599512e4ac60a8b7cb3f7a8a/pplot-1.1.3-py35-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1fc07b377bcbe3d8bba8ab63fda65e04", "sha256": "4e6ee523e7db9d02bb4660474a065524da6bd069901b8692569bade90859e469" }, "downloads": -1, "filename": "pplot-1.1.3-py36-none-any.whl", "has_sig": false, "md5_digest": "1fc07b377bcbe3d8bba8ab63fda65e04", "packagetype": "bdist_wheel", "python_version": "py36", "requires_python": null, "size": 65213, "upload_time": "2019-03-16T19:10:05", "url": "https://files.pythonhosted.org/packages/25/62/5e7c098dfa7fbb4449e005125a8f33abbb39f017421610ff1c7bffdf6e89/pplot-1.1.3-py36-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a712bdf9fc061ebdde013080a7b0a825", "sha256": "6af072087a19d32ef0462a614cc425cc21a4f76140b6d961de50a23cbfb7dadb" }, "downloads": -1, "filename": "pplot-1.1.3-py37-none-any.whl", "has_sig": false, "md5_digest": "a712bdf9fc061ebdde013080a7b0a825", "packagetype": "bdist_wheel", "python_version": "py37", "requires_python": null, "size": 56819, "upload_time": "2019-03-16T19:10:07", "url": "https://files.pythonhosted.org/packages/df/38/24c951a774172bb8c34c2511ad4a0ef3488877c45e3966b7d3ac701e7c7a/pplot-1.1.3-py37-none-any.whl" }, { "comment_text": "", "digests": { "md5": "cc8782af64c8542d9fff9398e249b9a1", "sha256": "08cda6def5b878d5b37fafab097fee79076338851d843c93f5178584e181cfdd" }, "downloads": -1, "filename": "pplot-1.1.3.zip", "has_sig": false, "md5_digest": "cc8782af64c8542d9fff9398e249b9a1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26749874, "upload_time": "2019-03-16T19:10:22", "url": "https://files.pythonhosted.org/packages/96/11/290b0e3ce996f9fc2e1bd2400990e9954c05dbf8a4a79491fe172bdcb371/pplot-1.1.3.zip" } ], "1.1.4": [ { "comment_text": "", "digests": { "md5": "f07c497160d0b3fd3f7a778cc0152074", "sha256": "c57429c765fecb9b7357574e9180004c4dd092f1cb36f8d436f1071c78c41e9f" }, "downloads": -1, "filename": "pplot-1.1.4-py27-none-any.whl", "has_sig": false, "md5_digest": "f07c497160d0b3fd3f7a778cc0152074", "packagetype": "bdist_wheel", "python_version": "py27", "requires_python": null, "size": 65615, "upload_time": "2019-03-22T23:25:42", "url": "https://files.pythonhosted.org/packages/69/74/96b8192e6d6962fc0dd2e79447b2767a229683177aa8edc55c00c55d97bf/pplot-1.1.4-py27-none-any.whl" }, { "comment_text": "", "digests": { "md5": "18f81d8cd524ca359f46fc1993d96803", "sha256": "63b3a723b072f351868c7cd453b4e72678bdc1f40691177fc8fb5b84e9ce3e71" }, "downloads": -1, "filename": "pplot-1.1.4-py35-none-any.whl", "has_sig": false, "md5_digest": "18f81d8cd524ca359f46fc1993d96803", "packagetype": "bdist_wheel", "python_version": "py35", "requires_python": null, "size": 63080, "upload_time": "2019-03-22T23:25:44", "url": "https://files.pythonhosted.org/packages/26/fa/8c511fdf4b80b68a9584b889b8e7f91029b7aa91efa6a68585a3f98fb1d9/pplot-1.1.4-py35-none-any.whl" }, { "comment_text": "", "digests": { "md5": "63708ca599a1595b6ddaa0ea1ce0e6b0", "sha256": "74333b89c26f7d98d22cd0162d3f7baeafe013752f094ea74479b28968acf37d" }, "downloads": -1, "filename": "pplot-1.1.4-py36-none-any.whl", "has_sig": false, "md5_digest": "63708ca599a1595b6ddaa0ea1ce0e6b0", "packagetype": "bdist_wheel", "python_version": "py36", "requires_python": null, "size": 61650, "upload_time": "2019-03-22T23:25:45", "url": "https://files.pythonhosted.org/packages/eb/e5/02a39f60d84a59a3f5c4e843176996921759631102c461c913b8120556b6/pplot-1.1.4-py36-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2922687b31608ad8378fd41c2363ddfb", "sha256": "b3a9ad68b089d5452bf3877b87be621974b845a6f314046eb6b7281f3e007191" }, "downloads": -1, "filename": "pplot-1.1.4-py37-none-any.whl", "has_sig": false, "md5_digest": "2922687b31608ad8378fd41c2363ddfb", "packagetype": "bdist_wheel", "python_version": "py37", "requires_python": null, "size": 59112, "upload_time": "2019-03-22T23:25:47", "url": "https://files.pythonhosted.org/packages/8f/25/1cb63dfbb9d6183554387c71cd789c5bf36d18769acdf3e1b8f94467a7e9/pplot-1.1.4-py37-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8b73803d983f79fbe7447762c2117642", "sha256": "28a3b12353f4b1193f52611ed064535875663956a58773a4e48d043a55bf38a1" }, "downloads": -1, "filename": "pplot-1.1.4.zip", "has_sig": false, "md5_digest": "8b73803d983f79fbe7447762c2117642", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26749810, "upload_time": "2019-03-22T23:25:57", "url": "https://files.pythonhosted.org/packages/08/16/4c8339ab694208aaa98898a21c3ac6ad42334a9279fbde57795ddbea6e7f/pplot-1.1.4.zip" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "f07c497160d0b3fd3f7a778cc0152074", "sha256": "c57429c765fecb9b7357574e9180004c4dd092f1cb36f8d436f1071c78c41e9f" }, "downloads": -1, "filename": "pplot-1.1.4-py27-none-any.whl", "has_sig": false, "md5_digest": "f07c497160d0b3fd3f7a778cc0152074", "packagetype": "bdist_wheel", "python_version": "py27", "requires_python": null, "size": 65615, "upload_time": "2019-03-22T23:25:42", "url": "https://files.pythonhosted.org/packages/69/74/96b8192e6d6962fc0dd2e79447b2767a229683177aa8edc55c00c55d97bf/pplot-1.1.4-py27-none-any.whl" }, { "comment_text": "", "digests": { "md5": "18f81d8cd524ca359f46fc1993d96803", "sha256": "63b3a723b072f351868c7cd453b4e72678bdc1f40691177fc8fb5b84e9ce3e71" }, "downloads": -1, "filename": "pplot-1.1.4-py35-none-any.whl", "has_sig": false, "md5_digest": "18f81d8cd524ca359f46fc1993d96803", "packagetype": "bdist_wheel", "python_version": "py35", "requires_python": null, "size": 63080, "upload_time": "2019-03-22T23:25:44", "url": "https://files.pythonhosted.org/packages/26/fa/8c511fdf4b80b68a9584b889b8e7f91029b7aa91efa6a68585a3f98fb1d9/pplot-1.1.4-py35-none-any.whl" }, { "comment_text": "", "digests": { "md5": "63708ca599a1595b6ddaa0ea1ce0e6b0", "sha256": "74333b89c26f7d98d22cd0162d3f7baeafe013752f094ea74479b28968acf37d" }, "downloads": -1, "filename": "pplot-1.1.4-py36-none-any.whl", "has_sig": false, "md5_digest": "63708ca599a1595b6ddaa0ea1ce0e6b0", "packagetype": "bdist_wheel", "python_version": "py36", "requires_python": null, "size": 61650, "upload_time": "2019-03-22T23:25:45", "url": "https://files.pythonhosted.org/packages/eb/e5/02a39f60d84a59a3f5c4e843176996921759631102c461c913b8120556b6/pplot-1.1.4-py36-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2922687b31608ad8378fd41c2363ddfb", "sha256": "b3a9ad68b089d5452bf3877b87be621974b845a6f314046eb6b7281f3e007191" }, "downloads": -1, "filename": "pplot-1.1.4-py37-none-any.whl", "has_sig": false, "md5_digest": "2922687b31608ad8378fd41c2363ddfb", "packagetype": "bdist_wheel", "python_version": "py37", "requires_python": null, "size": 59112, "upload_time": "2019-03-22T23:25:47", "url": "https://files.pythonhosted.org/packages/8f/25/1cb63dfbb9d6183554387c71cd789c5bf36d18769acdf3e1b8f94467a7e9/pplot-1.1.4-py37-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8b73803d983f79fbe7447762c2117642", "sha256": "28a3b12353f4b1193f52611ed064535875663956a58773a4e48d043a55bf38a1" }, "downloads": -1, "filename": "pplot-1.1.4.zip", "has_sig": false, "md5_digest": "8b73803d983f79fbe7447762c2117642", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26749810, "upload_time": "2019-03-22T23:25:57", "url": "https://files.pythonhosted.org/packages/08/16/4c8339ab694208aaa98898a21c3ac6ad42334a9279fbde57795ddbea6e7f/pplot-1.1.4.zip" } ] }