{ "info": { "author": "Sterling Paramore", "author_email": "sterling.paramore@insidetrack.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.6", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "Welcome to Pemi's documentation!\n================================\n\nPemi is a framework for building testable ETL processes and workflows. Users\ndefine **pipes** that define how to collect, transform, and deliver data. Pipes\ncan be combined with other pipes to build out complex and modular data pipelines.\nTesting is a first-class feature of Pemi and comes with a testing API to allow for\ndescribing test coverage in a manner that is natural for data transformations.\n\n\n`Full documentation on readthedocs `_\n\n\n\nInstall Pemi\n============\n\n.. inclusion-marker-install-pemi-begin\n\nPemi can be installed from pip::\n\n pip install pemi\n\n.. inclusion-marker-install-pemi-end\n\n\n\nConcepts and Features\n=====================\n\n.. inclusion-marker-concepts-features-begin\n\nPipes\n-----\n\nThe principal abstraction in Pemi is the **Pipe**. A pipe can be composed\nof **Data Sources**, **Data Targets**, and other **Pipes**. When\na pipe is executed, it collects data form the data sources, manipulates that data,\nand loads the results into the data targets. For example, here's a simple\n\"Hello World\" pipe. It takes a list of names in the form of a Pandas DataFrame\nand returns a Pandas DataFrame saying hello to each of them.\n\n.. code-block:: python\n\n import pandas as pd\n\n import pemi\n from pemi.fields import *\n\n class HelloNamePipe(pemi.Pipe):\n # Override the constructor to configure the pipe\n def __init__(self):\n # Make sure to call the parent constructor\n super().__init__()\n\n # Add a data source to our pipe - a pandas dataframe called 'input'\n self.source(\n pemi.PdDataSubject,\n name='input',\n schema = pemi.Schema(\n name=StringField()\n )\n\n )\n\n # Add a data target to our pipe - a pandas dataframe called 'output'\n self.target(\n pemi.PdDataSubject,\n name='output'\n )\n\n # All pipes must define a 'flow' method that is called to execute the pipe\n def flow(self):\n self.targets['output'].df = self.sources['input'].df.copy()\n self.targets['output'].df['salutation'] = self.sources['input'].df['name'].apply(\n lambda v: 'Hello ' + v\n )\n\nTo use the pipe, we have to create an instance of it::\n\n pipe = HelloNamePipe()\n\nand give some data to the source named \"input\"::\n\n pipe.sources['input'].df = pd.DataFrame({\n 'name': ['Buffy', 'Xander', 'Willow', 'Dawn']\n })\n\n+--------+\n| name |\n+========+\n| Buffy |\n+--------+\n| Xander |\n+--------+\n| Willow |\n+--------+\n| Dawn |\n+--------+\n\nThe pipe performs the data transformation when the ``flow`` method is called::\n\n pipe.flow()\n\nThe data target named \"output\" is then populated::\n\n pipe.targets['output'].df\n\n\n+--------+--------------+\n| name | salutation |\n+========+==============+\n| Buffy | Hello Buffy |\n+--------+--------------+\n| Xander | Hello Xander |\n+--------+--------------+\n| Willow | Hello Willow |\n+--------+--------------+\n| Dawn | Hello Dawn |\n+--------+--------------+\n\nData Subjects\n-------------\n\n**Data Sources** and **Data Targets** are both types of **Data\nSubjects**. A data subject is mostly just a reference to an object\nthat can be used to manipulate data. In the [Pipes](#pipes) example\nabove, we defined the data source called \"input\" as using the\n``pemi.PdDataSubject`` class. This means that this data subject refers\nto a Pandas DataFrame object. Calling the `df` method on this data subject\nsimply returns the Pandas DataFrame, which can be manipulated in all the ways\nthat Pandas DataFrames can be manipulated.\n\nPemi supports 3 data subjects natively, but can easily be extended to support others. The\n3 supported data subjects are\n\n* ``pemi.PdDataSubject`` - Pandas DataFrames\n* ``pemi.SaDataSubject`` - SQLAlchemy Engines\n* ``pemi.SparkDataSubject`` - Apache Spark DataFrames\n\nSchemas\n-------\n\nA data subject can optionally be associated with a **Schema**.\nSchemas can be used to validate that the data object of the data\nsubject conforms to the schema. This is useful when data is passed\nfrom the target of one pipe to the source of another because it\nensures that downstream pipes get the data they are expecting.\n\nFor example, suppose we wanted to ensure that our data had fields called ``id`` and ``name``.\nWe would define a data subject like::\n\n from pemi.fields import *\n\n ds = pemi.PdDataSubject(\n schema=pemi.Schema(\n id=IntegerField(),\n name=StringField()\n )\n )\n\nIf we provide the data subject with a dataframe that does not have a field::\n\n df = pd.DataFrame({\n 'name': ['Buffy', 'Xander', 'Willow']\n })\n\n ds.df = df\n\nThen an error will be raised when the schema is validated (which happens automatically when\ndata is passed between pipes, as we'll see below)::\n\n ds.validate_schema()\n #=> MissingFieldsError: DataFrame missing expected fields: {'id'}\n\nWe'll also see later that defining a data subject with a schema also\naids with writing tests. So while optional, defining data subjects\nwith an associated schema is highly recommended.\n\nReferencing data subjects in pipes\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nData subjects are rarely defined outside the scope of a pipe as done\nin [Schemas](#schemas). Instead, they are usually defined in the\nconstructor of a pipe as in [Pipes](#pipes). Two methods of the\n``pemi.Pipe`` class are used to define data subjects: ``source`` and\n``target``. These methods allow one to specify the data subject class\nthat the data subject will use, give it a name, assign a schema, and\npass on any other arguments to the specific data subject class.\n\nFor example, if we were to define a pipe that was meant to use an\nApache Spark dataframe as a source::\n\n spark_session = ...\n class MyPipe(pemi.Pipe):\n def __init__(self):\n super().__init__()\n\n self.source(\n pemi.SparkDataSubject,\n name='my_spark_source',\n schema=pemi.Schema(\n id=IntegerField(),\n name=StringField()\n ),\n spark=spark_session\n )\n\nWhen ``self.source`` is called, it builds the data subject from the options provided\nand puts it in a dictionary that is associated with the pipe. The spark data frame\ncan then be accessed from within the flow method as::\n\n def flow(self):\n self.sources['my_spark_source'].df\n\nTypes of Pipes\n--------------\n\nMost user pipes will typically inherit from the main ``pemi.Pipe`` class. However,\nthe topology of the pipe can classify it according to how it might be used. While\nthe following definitions can be bent in some ways, they are useful for describing\nthe purpose of a given pipe.\n\n* A **Source Pipe** is a pipe that is used to extract data from some\n external system and convert it into a Pemi data subject. This data\n subject is the *target* of the *source* pipe.\n\n* A **Target Pipe** is a pipe that is used to take a data subject and\n convert it into a form that can be loaded into some external system.\n This data subject is the *source* of the *target* pipe.\n\n* A **Transformation Pipe** is a pipe that takes one or more data sources,\n transforms them, and delivers one more target sources.\n\n* A **Job Pipe** is a pipe that is self-contained and does not specify any\n source or target data subjects. Instead, it is usually composed of other\n pipes that are connected to each other.\n\nPipe Connections\n----------------\n\nA pipe can be composed of other pipes that are each connected to each\nother. These connections for a directed acyclic graph (DAG). When\nthen connections between all pipes are executed, the pipes that form\nthe nodes of the DAG are executed in the order specified by the DAG\n(in parallel, when possible -- parallel execution is made possible\nunder the hood via `Dask graphs\n`_). The data\nobjects referenced by the node pipes' data subjects are passed between\nthe pipes according.\n\nAs a minimal example showing how connections work, let's define\na dummy source pipe that just generates a Pandas dataframe with\nsome data in it::\n\n class MySourcePipe(pemi.Pipe):\n def __init__(self):\n super().__init__()\n\n self.target(\n pemi.PdDataSubject,\n name='main'\n )\n\n def flow(self):\n self.targets['main'].df = pd.DataFrame({\n 'id': [1,2,3],\n 'name': ['Buffy', 'Xander', 'Willow']\n })\n\nAnd a target pipe that just prints the \"salutation\" field::\n\n class MyTargetPipe(pemi.Pipe):\n def __init__(self):\n super().__init__()\n\n self.source(\n pemi.PdDataSubject,\n name='main'\n )\n\n def flow(self):\n for idx, row in self.sources['main'].df.iterrows():\n print(row['salutation'])\n\nNow we define a job pipe that will connect the dummy source pipe to\nour hello world pipe and connect that to our dummy target pipe::\n\n class MyJob(pemi.Pipe):\n def __init__(self):\n super().__init__()\n\n self.pipe(\n name='my_source_pipe',\n pipe=MySourcePipe()\n )\n self.connect('my_source_pipe', 'main').to('hello_pipe', 'input')\n\n self.pipe(\n name='hello_pipe',\n pipe=HelloNamePipe()\n )\n self.connect('hello_pipe', 'output').to('my_target_pipe', 'main')\n\n self.pipe(\n name='my_target_pipe',\n pipe=MyTargetPipe()\n )\n\n def flow(self):\n self.connections.flow()\n\nIn the flow method we call ``self.connections.flow()``. This calls the\n``flow`` method of each pipe defined in the connections graph and\ntransfers data between them, in the order specified by the DAG.\n\nThe job pipe can be executed by calling its ``flow`` method::\n\n MyJob().flow()\n # => Hello Buffy\n # => Hello Xander\n # => Hello Willow\n\nFurthermore, if you're running this in a Jupyter notebook, you can see a graph of the\nconnections by running::\n\n import pemi.dot\n pemi.dot.graph(MyJob())\n\n\nReferencing pipes in pipes\n^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nReferencing pipes within pipes works the same way as for data sources and targets.\nFor example, if we wanted to run the ``MyJob`` job pipe and then look at the\nsource of the \"hello_pipe\"::\n\n job = MyJob()\n job.flow()\n job.pipes['hello_pipe'].sources['input'].df\n\n\n.. inclusion-marker-concepts-features-end\n\nWhere to go from here\n=====================\n\n`Full documentation on readthedocs `_\n\n\nContributing\n============\n\nIf you want to contribute to the development of Pemi, you'll need to be able to run the test\nsuite locally. To get started, copy the example environment file to a file you can\nedit locally if needed:\n\n >>> cp example.env .env\n\nAll of the tests are run inside of a docker container, which you can build using\n\n >>> inv build\n\nOnce the containers are built, spin up the containers to run the tests\n\n >>> inv up\n\nAnd then run the tests using something like (you may prefer different pytest options):\n\n >>> inv test --pytest=\"-s -x -vv --tb=short --color=yes tests\"\n\nThe test container also launches a local Jupyter notebook server. This can be a convenient tool to\nhave when developing Pemi. To access the notebook severs, just visit http://localhost:8890/lab\nin a web browser (the specific port can be configured in the ``.env`` file).\n\nTake down the container using\n\n >>> inv down", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/inside-track/pemi", "keywords": "etl data workflows", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "pemi", "package_url": "https://pypi.org/project/pemi/", "platform": "", "project_url": "https://pypi.org/project/pemi/", "project_urls": { "Homepage": "https://github.com/inside-track/pemi" }, "release_url": "https://pypi.org/project/pemi/0.5.9/", "requires_dist": null, "requires_python": ">=3", "summary": "Pemi - Python Extract Modify Integrate", "version": "0.5.9" }, "last_serial": 5886138, "releases": { "0.1.1": [ { "comment_text": "", "digests": { "md5": "bdc0018b3bce310777dedd15cbc43302", "sha256": "a26d30a8d690e301dda80d9d05bb12962db81c2a756e4e4b722e0679057243ae" }, "downloads": -1, "filename": "pemi-0.1.1.tar.gz", "has_sig": false, "md5_digest": "bdc0018b3bce310777dedd15cbc43302", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 8653, "upload_time": "2017-09-23T00:26:15", "url": "https://files.pythonhosted.org/packages/87/85/8e44ff6a98d68611b3ca9a38b912232502f9bda93a906a0446782cef0c72/pemi-0.1.1.tar.gz" } ], "0.1.10": [ { "comment_text": "", "digests": { "md5": "7e737767b461f40e9eda28b2bccb07ab", "sha256": "10664c80e89b5d8a4c7f8031cb5002110f3b274aef8ad516aad11cbb58fd16c0" }, "downloads": -1, "filename": "pemi-0.1.10.tar.gz", "has_sig": false, "md5_digest": "7e737767b461f40e9eda28b2bccb07ab", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 18200, "upload_time": "2018-01-09T22:36:52", "url": "https://files.pythonhosted.org/packages/66/6f/e9d180502416d6ee49c86a67ec6959ae7106f14c307a4b70ee2e713b3122/pemi-0.1.10.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "0216b31a3732e7c3494ef2eb1f55adc8", "sha256": "de61450259c4f6f27b48f986066b26b779626b62d14dab115d0a8532423f9bdb" }, "downloads": -1, "filename": "pemi-0.1.2.tar.gz", "has_sig": false, "md5_digest": "0216b31a3732e7c3494ef2eb1f55adc8", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 12741, "upload_time": "2017-09-23T00:53:09", "url": "https://files.pythonhosted.org/packages/85/b3/bfacb8d560152a545e722e549b81779818069af87f783898128df9e6f09d/pemi-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "89bdb537489697dd6f6115d01f7c145a", "sha256": "d0e673ba1172ab580ce490a9471388fcf176c7d0091c5511f7a1329c9bb05270" }, "downloads": -1, "filename": "pemi-0.1.3.tar.gz", "has_sig": false, "md5_digest": "89bdb537489697dd6f6115d01f7c145a", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 11574, "upload_time": "2017-09-26T00:56:35", "url": "https://files.pythonhosted.org/packages/57/21/585d9826020e3c46f6c0ad82dd23ef7d767b6fa9e2d6dbee208d8c05eb8d/pemi-0.1.3.tar.gz" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "43daa450ecbf778b07d1deaa7e45c759", "sha256": "9d45f4fae3d560b7e35d9d2d50512a7ef67110fe336ca7dbcad5c2becedb763c" }, "downloads": -1, "filename": "pemi-0.1.4.tar.gz", "has_sig": false, "md5_digest": "43daa450ecbf778b07d1deaa7e45c759", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 13151, "upload_time": "2017-10-21T00:30:23", "url": "https://files.pythonhosted.org/packages/76/d4/fb345c99642f4c10cd6b3de7788ba4178ffa662ef4af5e64b3fc37e960b9/pemi-0.1.4.tar.gz" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "a912ddccc3a45992dc72c819e9e90a88", "sha256": "f392e8d10b83817f34017348ec9cb349c83e3632821d22f5015d3645840795bc" }, "downloads": -1, "filename": "pemi-0.1.5.tar.gz", "has_sig": false, "md5_digest": "a912ddccc3a45992dc72c819e9e90a88", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 15444, "upload_time": "2017-11-09T00:43:43", "url": "https://files.pythonhosted.org/packages/ba/12/8ee61bda52781eac7a6ddf6affd74e27f3e676d2687e36ec0a0d27a84b45/pemi-0.1.5.tar.gz" } ], "0.1.6": [ { "comment_text": "", "digests": { "md5": "fbb116aef87481ccc511715003be16f2", "sha256": "50319cc871b8709768ed9b6df725e665b325f8f6ce822aa31b02cbe95c3916ab" }, "downloads": -1, "filename": "pemi-0.1.6.tar.gz", "has_sig": false, "md5_digest": "fbb116aef87481ccc511715003be16f2", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 16453, "upload_time": "2017-11-28T00:24:52", "url": "https://files.pythonhosted.org/packages/cb/21/42a5c58b42531f7d2ab4f8c706093ad1bfa26a5bdb15e4fb4705d335431e/pemi-0.1.6.tar.gz" } ], "0.1.7": [ { "comment_text": "", "digests": { "md5": "8e48f9c8e9f693c9dbf596027b80cc07", "sha256": "6dac38db2e05035a7cb6a7a25beb7453337e74bace7f07c8b99aadb281604029" }, "downloads": -1, "filename": "pemi-0.1.7.tar.gz", "has_sig": false, "md5_digest": "8e48f9c8e9f693c9dbf596027b80cc07", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 16568, "upload_time": "2017-12-01T19:49:50", "url": "https://files.pythonhosted.org/packages/78/cd/44a3b11802fd3ff0898c872db5330815e9dc9afb272b96fd0c855b32d642/pemi-0.1.7.tar.gz" } ], "0.1.8": [ { "comment_text": "", "digests": { "md5": "964b60c38bf48d46923f69ad70fa237e", "sha256": "f7aeadaf5aa34530d7afc3fa23c241b6a3a79df28c6346ef4f15f80ed0b5075d" }, "downloads": -1, "filename": "pemi-0.1.8.tar.gz", "has_sig": false, "md5_digest": "964b60c38bf48d46923f69ad70fa237e", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 16776, "upload_time": "2017-12-08T22:44:34", "url": "https://files.pythonhosted.org/packages/de/8a/18137f990970f7d27bb775747a2757935096b59c7e0a4602658180c2c2ad/pemi-0.1.8.tar.gz" } ], "0.1.9": [ { "comment_text": "", "digests": { "md5": "7c50558bd697d8c722e675d084a56ae8", "sha256": "5f8352a1c93a62b990842b89588750385df11143462c470d8e429c276af8378d" }, "downloads": -1, "filename": "pemi-0.1.9.tar.gz", "has_sig": false, "md5_digest": "7c50558bd697d8c722e675d084a56ae8", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 17016, "upload_time": "2017-12-22T02:09:53", "url": "https://files.pythonhosted.org/packages/0f/8d/1096ab85948dbc39a66c365cd6f98e8c75fbce0138fc2ede3c6701c34d10/pemi-0.1.9.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "d954fbdd490a3c43324a157fe3272e3e", "sha256": "0427d2f9fa6e54312a44cd383d666f9d39e477c8874514fd24d1dbd11fc1671d" }, "downloads": -1, "filename": "pemi-0.2.0.tar.gz", "has_sig": false, "md5_digest": "d954fbdd490a3c43324a157fe3272e3e", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 20211, "upload_time": "2018-02-03T01:57:54", "url": "https://files.pythonhosted.org/packages/76/79/ad1052c9bea949a39cf835d8af6a2a68434deb8be3aea403a4b8b82af7c7/pemi-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "0d6e49d7289c31905e5fdd83a1af93c1", "sha256": "501dca9631695d5cd769289fe40bbba853b76e8334def5d38b9408f7384c4eee" }, "downloads": -1, "filename": "pemi-0.2.1.tar.gz", "has_sig": false, "md5_digest": "0d6e49d7289c31905e5fdd83a1af93c1", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 20305, "upload_time": "2018-02-05T22:47:22", "url": "https://files.pythonhosted.org/packages/bd/07/5f7c59a9ed4ded018a8fb4c8d8b490fbbb9de52e4b43087998583097b3ae/pemi-0.2.1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "c66efebdcc3920d7b0278e5f73182dd1", "sha256": "677354569f7114846f215e0d780f6d73c3931dcda6e8ae061aaecfcf27c89bcc" }, "downloads": -1, "filename": "pemi-0.2.2.tar.gz", "has_sig": false, "md5_digest": "c66efebdcc3920d7b0278e5f73182dd1", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 20376, "upload_time": "2018-03-06T19:52:28", "url": "https://files.pythonhosted.org/packages/4f/ed/084d350682b2d9c8b511a546ad944f113434b956957f762b23a2e07c7a34/pemi-0.2.2.tar.gz" } ], "0.2.3": [ { "comment_text": "", "digests": { "md5": "c85da8259f01cc2ae1658564eb31a635", "sha256": "95d72486626ab7fac4744a1f873489fcdc01b1c248fb19db6da9804c0eddc16f" }, "downloads": -1, "filename": "pemi-0.2.3.tar.gz", "has_sig": false, "md5_digest": "c85da8259f01cc2ae1658564eb31a635", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 20451, "upload_time": "2018-03-09T00:47:20", "url": "https://files.pythonhosted.org/packages/07/d6/283cd6879aba66dc3f04ee911323f08c44139f05c1d5457a671b9d8d3d9e/pemi-0.2.3.tar.gz" } ], "0.2.3.1": [ { "comment_text": "", "digests": { "md5": "6285a95a70c627417121407e8a4d3239", "sha256": "de3b73d208509c22372094a89fdd3abc192bb0c7e093e665dc033c7e23921caf" }, "downloads": -1, "filename": "pemi-0.2.3.1.tar.gz", "has_sig": false, "md5_digest": "6285a95a70c627417121407e8a4d3239", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 20533, "upload_time": "2018-03-20T19:11:28", "url": "https://files.pythonhosted.org/packages/d3/f2/826051176d7914dad4dd218d5ea58bbe534299919f076319c142936c9efb/pemi-0.2.3.1.tar.gz" } ], "0.2.4": [ { "comment_text": "", "digests": { "md5": "bf16050fffdc92544e53ae72c2059cc9", "sha256": "ec03d44fc4ced0a623e038c1ca5dbcacd4e320d3df865487dfe8bd60331dc9e9" }, "downloads": -1, "filename": "pemi-0.2.4.tar.gz", "has_sig": false, "md5_digest": "bf16050fffdc92544e53ae72c2059cc9", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 20523, "upload_time": "2018-03-21T21:34:52", "url": "https://files.pythonhosted.org/packages/ec/b0/0684b257cc898f5678d9dcb070335f6337966948058e049397e0d5517037/pemi-0.2.4.tar.gz" } ], "0.2.5": [ { "comment_text": "", "digests": { "md5": "30aa360a7e378376af8afd0e8d317634", "sha256": "5f2d5b51632bb9420238f5602f00e1ff31212affdab1e6bafcc47ab74370db71" }, "downloads": -1, "filename": "pemi-0.2.5.tar.gz", "has_sig": false, "md5_digest": "30aa360a7e378376af8afd0e8d317634", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 20535, "upload_time": "2018-03-26T21:59:58", "url": "https://files.pythonhosted.org/packages/fb/1a/7469d492c177157fa0325e77ce1c64f0b5186e1186dd851fc69727637a53/pemi-0.2.5.tar.gz" } ], "0.2.6": [ { "comment_text": "", "digests": { "md5": "41b04e54e1b4a188b5c51a1f55501759", "sha256": "b610495413ede3a72ff237ef1c33ed2e6f0b6d6007c8e35a9d41983a636f2ded" }, "downloads": -1, "filename": "pemi-0.2.6.tar.gz", "has_sig": false, "md5_digest": "41b04e54e1b4a188b5c51a1f55501759", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 25214, "upload_time": "2018-03-28T00:07:34", "url": "https://files.pythonhosted.org/packages/5c/40/f593c5845c68c15983e69b0a20457b53a150200bd4e852690bb3da232111/pemi-0.2.6.tar.gz" } ], "0.2.6.1": [ { "comment_text": "", "digests": { "md5": "99329fc0711634dd927ef3240454b5a5", "sha256": "24eccf2a5d79ed35a4c242cbc40b9ae859e30f5ff6742b1d5f8e040491e1cc59" }, "downloads": -1, "filename": "pemi-0.2.6.1.tar.gz", "has_sig": false, "md5_digest": "99329fc0711634dd927ef3240454b5a5", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 33330, "upload_time": "2018-03-28T22:18:12", "url": "https://files.pythonhosted.org/packages/54/ad/1670fba07f0f591a647a64778c823c8e1bfde0b03555ef884d9fcab2701c/pemi-0.2.6.1.tar.gz" } ], "0.2.6.2": [ { "comment_text": "", "digests": { "md5": "c35bf4f2666fbbedd00d354ab00387cf", "sha256": "88c73936246fc5cd6392b948440e0275f0d761255b186b45bec3a74073ab75e9" }, "downloads": -1, "filename": "pemi-0.2.6.2.tar.gz", "has_sig": false, "md5_digest": "c35bf4f2666fbbedd00d354ab00387cf", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 33537, "upload_time": "2018-04-04T23:27:07", "url": "https://files.pythonhosted.org/packages/3f/c8/194c383c90c3c8a8aeac8b3fb6af8dea0c4570e80d442e6fc702a5be9f57/pemi-0.2.6.2.tar.gz" } ], "0.2.7": [ { "comment_text": "", "digests": { "md5": "9c8afb9107f3570b974c3fdacee75818", "sha256": "9d2fdd10c584b5a931aee846a3f7894b81026baf986493d85f82a81c3c5c84e7" }, "downloads": -1, "filename": "pemi-0.2.7.tar.gz", "has_sig": false, "md5_digest": "9c8afb9107f3570b974c3fdacee75818", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 34065, "upload_time": "2018-04-20T18:24:14", "url": "https://files.pythonhosted.org/packages/7b/ad/6f72dbaccfc8d6a511530c5b8cfce8bc67e41e525018e5a38eb5f4abe06a/pemi-0.2.7.tar.gz" } ], "0.2.8": [ { "comment_text": "", "digests": { "md5": "35d85bf68e7270000595e0c19641737f", "sha256": "925af431501a70b6610afd617ced3b6f5f0623b502f03e641249431b86397906" }, "downloads": -1, "filename": "pemi-0.2.8.tar.gz", "has_sig": false, "md5_digest": "35d85bf68e7270000595e0c19641737f", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 34439, "upload_time": "2018-04-24T23:00:37", "url": "https://files.pythonhosted.org/packages/b9/69/5446ffcc9f0de88b17dc384d79c69df08b902696538ae4c75ee5fb625117/pemi-0.2.8.tar.gz" } ], "0.2.8.1": [ { "comment_text": "", "digests": { "md5": "c4bf5d47f69f7bf045d70d24d9e8bab3", "sha256": "57d86488f92ece3d2d9efb828dd408bd5d1692ee2330779eaa48a761f4722714" }, "downloads": -1, "filename": "pemi-0.2.8.1.tar.gz", "has_sig": false, "md5_digest": "c4bf5d47f69f7bf045d70d24d9e8bab3", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 34555, "upload_time": "2018-04-26T00:17:26", "url": "https://files.pythonhosted.org/packages/45/b5/03efde4f4c34a3dfb0a5fb8d5f19917ad747530040f25e180e1b18810996/pemi-0.2.8.1.tar.gz" } ], "0.2.9": [ { "comment_text": "", "digests": { "md5": "f3bcddaff479aafe1ccc7b0b97360859", "sha256": "c77c33f2ac8a7a9fb813b945bd9d014a02ce14ef238dd9cb9ceaee05ce5fff75" }, "downloads": -1, "filename": "pemi-0.2.9.tar.gz", "has_sig": false, "md5_digest": "f3bcddaff479aafe1ccc7b0b97360859", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 34617, "upload_time": "2018-06-01T18:07:35", "url": "https://files.pythonhosted.org/packages/53/38/84808dead82f7a0ada8af632f070227231e36282b015aae04cb4de5c013b/pemi-0.2.9.tar.gz" } ], "0.2.9.1": [ { "comment_text": "", "digests": { "md5": "2bc49bf014b2758666c64b12377912cc", "sha256": "99efd4a73feebf44e620f45b5461c9968af5375e7060be4a9d3a3ab255e5c505" }, "downloads": -1, "filename": "pemi-0.2.9.1.tar.gz", "has_sig": false, "md5_digest": "2bc49bf014b2758666c64b12377912cc", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 34618, "upload_time": "2018-06-06T23:25:47", "url": "https://files.pythonhosted.org/packages/1f/30/d047efe6fd8e71f5ef8bbe3e286e816401510e3897a8b9e9cdc52a5b661f/pemi-0.2.9.1.tar.gz" } ], "0.2.9.2": [ { "comment_text": "", "digests": { "md5": "1939115bd64e5080ba0bb54fb41b96d8", "sha256": "4bb57b36c980e094e14825cbab34e975ea11b119a8a8952b4b2082253363cd52" }, "downloads": -1, "filename": "pemi-0.2.9.2.tar.gz", "has_sig": false, "md5_digest": "1939115bd64e5080ba0bb54fb41b96d8", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 34612, "upload_time": "2018-06-14T17:41:52", "url": "https://files.pythonhosted.org/packages/4a/a0/2291063fa95b52ca1156117903e1f87c95b38c6196517240379ac9784fdd/pemi-0.2.9.2.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "c1129d513e92371a41f59519f7661d2b", "sha256": "68f84684723b9b35aaa8da9977dcbaed2d477158d5efd2cba335f16440cb18ee" }, "downloads": -1, "filename": "pemi-0.3.0.tar.gz", "has_sig": false, "md5_digest": "c1129d513e92371a41f59519f7661d2b", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 32903, "upload_time": "2018-06-26T21:52:42", "url": "https://files.pythonhosted.org/packages/0a/f7/939685bde7df3c7b60dd57fad44c4e87e79c32fc1f8804e7e7be504eb094/pemi-0.3.0.tar.gz" } ], "0.3.0.dev0": [ { "comment_text": "", "digests": { "md5": "c009b469eb0cbc766c87273c55f6edb8", "sha256": "e7589d1d3e700a59c1ce9ccf7957099a50e3cbc8e8ba32250e0206af03a3ad3b" }, "downloads": -1, "filename": "pemi-0.3.0.dev0.tar.gz", "has_sig": false, "md5_digest": "c009b469eb0cbc766c87273c55f6edb8", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 32921, "upload_time": "2018-06-22T21:48:42", "url": "https://files.pythonhosted.org/packages/11/03/ccebee66fff75b0f1b037191bae24e69669a46f268e1cc59adfd197ced65/pemi-0.3.0.dev0.tar.gz" } ], "0.3.0.dev1": [ { "comment_text": "", "digests": { "md5": "86ea8c032e9f3136bd2724d2339d6bf1", "sha256": "a72b171dea8aafa632a54105fe791d2f947d0de02c65dc0b0b6d66c82c807a5d" }, "downloads": -1, "filename": "pemi-0.3.0.dev1.tar.gz", "has_sig": false, "md5_digest": "86ea8c032e9f3136bd2724d2339d6bf1", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 32987, "upload_time": "2018-06-26T17:36:08", "url": "https://files.pythonhosted.org/packages/1c/9b/a4afd874b86144cae33e97931f39064c87b2ab3574655adbcbf824203058/pemi-0.3.0.dev1.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "73ea43f78caf0d93c86c47ad2c117634", "sha256": "c5eb30d01ed15b8a6e1184cbb0c81d4dba7c934b153ba31b9b2fc3a3e1d22a54" }, "downloads": -1, "filename": "pemi-0.3.1.tar.gz", "has_sig": false, "md5_digest": "73ea43f78caf0d93c86c47ad2c117634", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 33101, "upload_time": "2018-07-20T22:32:29", "url": "https://files.pythonhosted.org/packages/1b/fd/7db1da52c427912cd90374878871f07f50f8cf0b36c707de8b927bbaec76/pemi-0.3.1.tar.gz" } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "115f8f42fbe55f85b502f2fbd2f4171c", "sha256": "9d6cc893b927a995ea56a913453fd66880ba34094fc18f55be0182970e7d71ff" }, "downloads": -1, "filename": "pemi-0.3.2.tar.gz", "has_sig": false, "md5_digest": "115f8f42fbe55f85b502f2fbd2f4171c", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 33132, "upload_time": "2018-07-25T16:16:56", "url": "https://files.pythonhosted.org/packages/4f/8d/49788e42443a23c91fb38fc285f118de86e80f0e47fad778f83d7f31cd50/pemi-0.3.2.tar.gz" } ], "0.3.2.1": [ { "comment_text": "", "digests": { "md5": "f9a5cefb6ea2b5730aa4ce000d8a57f7", "sha256": "32071ae5ef42ff20eb34b31b7c2b9da2cbe34e69533e6d761e434696e3e59f93" }, "downloads": -1, "filename": "pemi-0.3.2.1.tar.gz", "has_sig": false, "md5_digest": "f9a5cefb6ea2b5730aa4ce000d8a57f7", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 33959, "upload_time": "2018-08-03T18:46:41", "url": "https://files.pythonhosted.org/packages/47/50/5942dae7e8fa98df70a73f8f8b6b00361b39b87a117ba02aaa97e168836e/pemi-0.3.2.1.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "12b3c90690af024b4ac2e0039497c7ad", "sha256": "9259a22a02d00024590e492500ab783a0903421460910160c5a24d0e4fe96fcc" }, "downloads": -1, "filename": "pemi-0.4.0.tar.gz", "has_sig": false, "md5_digest": "12b3c90690af024b4ac2e0039497c7ad", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 34556, "upload_time": "2018-08-03T22:05:07", "url": "https://files.pythonhosted.org/packages/5f/ef/eaec0dc267de759c0be85a2a6f19f6c1db1e3289dbbb76710feacd05c1c1/pemi-0.4.0.tar.gz" } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "4c32e4fae9652e7614d5d535c63549f8", "sha256": "11383800f185dd7d4760cd8483852ad9ad4647aff0b0d717de5b31dd4e9e60f2" }, "downloads": -1, "filename": "pemi-0.4.1.tar.gz", "has_sig": false, "md5_digest": "4c32e4fae9652e7614d5d535c63549f8", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 34605, "upload_time": "2018-09-04T20:27:10", "url": "https://files.pythonhosted.org/packages/84/31/16d4ca442e716964bddfe5d4acf1d4fdd3a8e52b9d2fb0b848992b33de3b/pemi-0.4.1.tar.gz" } ], "0.4.2": [ { "comment_text": "", "digests": { "md5": "26c5e54d26d4bf097210f68ee9029db1", "sha256": "21895a4c0a68d11ddd758916e7b2c6810a3be7326123e97d237760a306ecbb36" }, "downloads": -1, "filename": "pemi-0.4.2.tar.gz", "has_sig": false, "md5_digest": "26c5e54d26d4bf097210f68ee9029db1", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 34679, "upload_time": "2018-09-04T20:36:26", "url": "https://files.pythonhosted.org/packages/3c/6b/6eebcf055a4a3bb264e3a02c4b2ff6bac2671e293cab844c522d93058892/pemi-0.4.2.tar.gz" } ], "0.4.3": [ { "comment_text": "", "digests": { "md5": "6ac3bbf9226895b408a11481afff7b4c", "sha256": "b1eda900252e73e396a4631ce2faa17ad518b374aae9d1245488e9ddc027e0c6" }, "downloads": -1, "filename": "pemi-0.4.3.tar.gz", "has_sig": false, "md5_digest": "6ac3bbf9226895b408a11481afff7b4c", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 500666, "upload_time": "2018-10-02T00:06:33", "url": "https://files.pythonhosted.org/packages/2c/d8/5b789412c4cf1979c143b39c5d2460352118d5ee1207ad6d9d36d3a98ab0/pemi-0.4.3.tar.gz" } ], "0.4.3.dev0": [ { "comment_text": "", "digests": { "md5": "c5b07082a44c72948e5123faa10169a6", "sha256": "4714c471b55fff7b6f394e463b6d2ba76f13d38b11bef13e2d9be35723b2a964" }, "downloads": -1, "filename": "pemi-0.4.3.dev0.tar.gz", "has_sig": false, "md5_digest": "c5b07082a44c72948e5123faa10169a6", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 35725, "upload_time": "2018-10-01T23:08:58", "url": "https://files.pythonhosted.org/packages/4d/6c/b491656a7c63be1f4ad936561622dfed04767b9a27e36eebe6473f52b562/pemi-0.4.3.dev0.tar.gz" } ], "0.4.3.dev1": [ { "comment_text": "", "digests": { "md5": "93b4dad2827fadff628139fd43bd6a7d", "sha256": "405f31b29049f5d3e55d3f241d549b137ca9ab2476bc21d7efbdbae3376264e9" }, "downloads": -1, "filename": "pemi-0.4.3.dev1.tar.gz", "has_sig": false, "md5_digest": "93b4dad2827fadff628139fd43bd6a7d", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 500640, "upload_time": "2018-10-01T23:47:36", "url": "https://files.pythonhosted.org/packages/fb/c6/eb2862a467e676865ff9108d1689b0a5b79888262981a08e10409dd22840/pemi-0.4.3.dev1.tar.gz" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "869a9df1e8ed004c3272d2f8b59921bf", "sha256": "fcee0f188e45c01b3ffa4fa7cf8e514c8fb55f39fa4ba5c13e9e060495c3b50e" }, "downloads": -1, "filename": "pemi-0.5.0.tar.gz", "has_sig": false, "md5_digest": "869a9df1e8ed004c3272d2f8b59921bf", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 503762, "upload_time": "2018-10-04T16:25:48", "url": "https://files.pythonhosted.org/packages/37/f3/beade4faa16cf034b6f2cd7db9f4df7501fd022f410a1762400d7d1bfd21/pemi-0.5.0.tar.gz" } ], "0.5.0.dev0": [ { "comment_text": "", "digests": { "md5": "79aa266bd08532384c9919486f7a3969", "sha256": "fa9367e070588c169cf46bfc755d1be21022b4e441e9c1bb922e333d7b6e9697" }, "downloads": -1, "filename": "pemi-0.5.0.dev0.tar.gz", "has_sig": false, "md5_digest": "79aa266bd08532384c9919486f7a3969", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 37250, "upload_time": "2018-09-17T15:58:18", "url": "https://files.pythonhosted.org/packages/9c/c0/a5257ee0cdd86d7ca4888632d858c28c94c7e53cb8195e5dc9438a7a8d7d/pemi-0.5.0.dev0.tar.gz" } ], "0.5.0.dev1": [ { "comment_text": "", "digests": { "md5": "aca3124263fbe86dd48feb25a34d7733", "sha256": "a6b6f135f6071d5a99fe464cfee5afa8460ad64e9a79bd32ca0a328c7a0de383" }, "downloads": -1, "filename": "pemi-0.5.0.dev1.tar.gz", "has_sig": false, "md5_digest": "aca3124263fbe86dd48feb25a34d7733", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 37237, "upload_time": "2018-09-17T16:37:47", "url": "https://files.pythonhosted.org/packages/cb/32/f4aded3b8bcc8a9a0760ff59989205d828befd398fd3656e2641540c9724/pemi-0.5.0.dev1.tar.gz" } ], "0.5.0.dev2": [ { "comment_text": "", "digests": { "md5": "203d588e2374c06451bedbabf32c1087", "sha256": "fe8938df67d0810e33a9dbaeaea8a3552ce9f6cda5bf94d62e96992b384a023f" }, "downloads": -1, "filename": "pemi-0.5.0.dev2.tar.gz", "has_sig": false, "md5_digest": "203d588e2374c06451bedbabf32c1087", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 37520, "upload_time": "2018-09-24T23:41:01", "url": "https://files.pythonhosted.org/packages/4c/fc/e0f03e526e492fa759f240ba38b05daae26dcaa26d02ad03b7171d70bfbd/pemi-0.5.0.dev2.tar.gz" } ], "0.5.1": [ { "comment_text": "", "digests": { "md5": "53aed9cd3ab9f3060d46d2721571c35f", "sha256": "74b4f1980c07e828df53c6589c475be58502a30d726f5ef7cf0cc63fe2ae2316" }, "downloads": -1, "filename": "pemi-0.5.1.tar.gz", "has_sig": false, "md5_digest": "53aed9cd3ab9f3060d46d2721571c35f", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 509660, "upload_time": "2018-10-16T00:09:59", "url": "https://files.pythonhosted.org/packages/ec/2e/209701cc680cacf23a42156517580251880c1a6eb0b51c34dd458d9cc96e/pemi-0.5.1.tar.gz" } ], "0.5.2": [ { "comment_text": "", "digests": { "md5": "19534b611065ff48c081a3974f4c3efd", "sha256": "8a7a8c77c9f821af87d5120802488c6b90e7872f11c5aaa3ca592363d945125d" }, "downloads": -1, "filename": "pemi-0.5.2.tar.gz", "has_sig": false, "md5_digest": "19534b611065ff48c081a3974f4c3efd", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 510509, "upload_time": "2018-11-08T23:14:58", "url": "https://files.pythonhosted.org/packages/9d/f4/832640bb16dc6dbe97fc50d25805a7c9237750585c60da7cb916c4b54905/pemi-0.5.2.tar.gz" } ], "0.5.2.dev0": [ { "comment_text": "", "digests": { "md5": "8ef8313ba6c7ec880feed16413afbf37", "sha256": "ed965ffaea9bd4197e503e310613e05802e7baac4e24000cf8bad4ae0ea90adc" }, "downloads": -1, "filename": "pemi-0.5.2.dev0.tar.gz", "has_sig": false, "md5_digest": "8ef8313ba6c7ec880feed16413afbf37", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 510556, "upload_time": "2018-10-24T15:33:19", "url": "https://files.pythonhosted.org/packages/d0/f4/17bb057ed4e113d5a6c80bed4f92ed382753b15e7ff57d5fc47f77f8cbad/pemi-0.5.2.dev0.tar.gz" } ], "0.5.2.dev1": [ { "comment_text": "", "digests": { "md5": "636ac9577be434e52908e06455399a8f", "sha256": "93936aba588a8d8cba7b93c42b1db196d6218df4baac45fd82b7cf2396dafffd" }, "downloads": -1, "filename": "pemi-0.5.2.dev1.tar.gz", "has_sig": false, "md5_digest": "636ac9577be434e52908e06455399a8f", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 510561, "upload_time": "2018-11-08T00:29:57", "url": "https://files.pythonhosted.org/packages/96/90/ecd02af7afc4ee223141380f023eaec42171cf7e7345afc7ae6a7c3ecba8/pemi-0.5.2.dev1.tar.gz" } ], "0.5.3": [ { "comment_text": "", "digests": { "md5": "29964eae463b7c32293161e7eb78ae67", "sha256": "256b173df9933b4163b391b764d89b9ee2a7552820bfecf29120196f448e96ad" }, "downloads": -1, "filename": "pemi-0.5.3.tar.gz", "has_sig": false, "md5_digest": "29964eae463b7c32293161e7eb78ae67", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 511491, "upload_time": "2019-01-30T23:09:11", "url": "https://files.pythonhosted.org/packages/86/60/2efe9cba0b664ade0a137dc2f38d84b0a41bc4195fa8aa2388d2a12e76ea/pemi-0.5.3.tar.gz" } ], "0.5.4": [ { "comment_text": "", "digests": { "md5": "07f46f05c2432a6a88c0e8584bf0c2d6", "sha256": "ac9663ba40a4d4cda806b66d2a0e9b1516000b1424543a4b382eae956c80a9a1" }, "downloads": -1, "filename": "pemi-0.5.4.tar.gz", "has_sig": false, "md5_digest": "07f46f05c2432a6a88c0e8584bf0c2d6", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 502173, "upload_time": "2019-02-25T19:43:39", "url": "https://files.pythonhosted.org/packages/6b/4e/f0734cc531d320e297391cb57bba0606536b7a554775c837a93e370c4579/pemi-0.5.4.tar.gz" } ], "0.5.5": [ { "comment_text": "", "digests": { "md5": "de25f7f0bdd00ce2e6e3e57bd166e224", "sha256": "59a5dca9f3b29db88635d4170b3297db1889b5ce7cce21819460285f6d23f056" }, "downloads": -1, "filename": "pemi-0.5.5.tar.gz", "has_sig": false, "md5_digest": "de25f7f0bdd00ce2e6e3e57bd166e224", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 502556, "upload_time": "2019-04-11T22:54:13", "url": "https://files.pythonhosted.org/packages/98/0b/8bf8971ec520bbf64a54df41648f7e6f68c3e769acf631670448720e869f/pemi-0.5.5.tar.gz" } ], "0.5.6": [ { "comment_text": "", "digests": { "md5": "b948061a3df65164084b02347115cc38", "sha256": "aa1c2f73a29035bc7fb0a3bf641fd465765144bfaded0d8cc4b0a41f7b7ca411" }, "downloads": -1, "filename": "pemi-0.5.6.tar.gz", "has_sig": false, "md5_digest": "b948061a3df65164084b02347115cc38", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 502530, "upload_time": "2019-04-25T18:41:17", "url": "https://files.pythonhosted.org/packages/ac/d2/7601e8f3f6901b476dee828e9705df73e6837a4fbd86b30a6e01cf1f0207/pemi-0.5.6.tar.gz" } ], "0.5.7": [ { "comment_text": "", "digests": { "md5": "4b2e0369a4ebc4e5751fe15b8368f684", "sha256": "7088c3545bbda50a88dbe73ac46b4f95c1e5972fc5e832abb14cdea59a63ad81" }, "downloads": -1, "filename": "pemi-0.5.7.tar.gz", "has_sig": false, "md5_digest": "4b2e0369a4ebc4e5751fe15b8368f684", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 502653, "upload_time": "2019-06-19T17:20:48", "url": "https://files.pythonhosted.org/packages/01/e6/95bc54dc1bca7d274945f375f375eb446c47b456191006426bafb9f2a692/pemi-0.5.7.tar.gz" } ], "0.5.8": [ { "comment_text": "", "digests": { "md5": "6330797018ec8dddd5ce4d800fde4705", "sha256": "8d42daf723d5fa504ac763bf23aed3d860067f94fe603f15df8d2d13f0e24cd1" }, "downloads": -1, "filename": "pemi-0.5.8.tar.gz", "has_sig": false, "md5_digest": "6330797018ec8dddd5ce4d800fde4705", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 502774, "upload_time": "2019-08-13T00:10:20", "url": "https://files.pythonhosted.org/packages/c3/09/f6198dc6336f17e657a321cc43095e668e5e2d66ad24d41fe550513dba53/pemi-0.5.8.tar.gz" } ], "0.5.9": [ { "comment_text": "", "digests": { "md5": "038f8c34c50249b2131d919434a9468c", "sha256": "95d7f7f94a105456c9d92d56c81d492704363a4aacb43f5206ee2732aa121f04" }, "downloads": -1, "filename": "pemi-0.5.9.tar.gz", "has_sig": false, "md5_digest": "038f8c34c50249b2131d919434a9468c", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 502874, "upload_time": "2019-09-25T16:10:25", "url": "https://files.pythonhosted.org/packages/55/05/61b673bb1438fdb228bbbc9fabad7759a4e8e839e4d903e38fdc7a0d4421/pemi-0.5.9.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "038f8c34c50249b2131d919434a9468c", "sha256": "95d7f7f94a105456c9d92d56c81d492704363a4aacb43f5206ee2732aa121f04" }, "downloads": -1, "filename": "pemi-0.5.9.tar.gz", "has_sig": false, "md5_digest": "038f8c34c50249b2131d919434a9468c", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 502874, "upload_time": "2019-09-25T16:10:25", "url": "https://files.pythonhosted.org/packages/55/05/61b673bb1438fdb228bbbc9fabad7759a4e8e839e4d903e38fdc7a0d4421/pemi-0.5.9.tar.gz" } ] }