{ "info": { "author": "Seann Zhang", "author_email": "pluiefox@live.com", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3.7" ], "description": "\n# Lunas\n\n[![PyPI version](https://img.shields.io/badge/pypi-v0.3.5-limegreen.svg)](https://github.com/pluiez/lunas)\n\n**Lunas** is a Python based library that provides a set of simple interfaces for data processing pipelines and an iterator for looping through data.\n\nBasically, Lunas draws its data-handling style on *Tensorflow*, *PyTorch*, and some implementation details from *AllenNLP*.\n\n## Overview\n\nA `Dataset` represents a dataset and holds corresponding pre-processing and filtering operations. Currently the following features are supported:\n\n1. Buffered reading.\n2. Buffered shuffling.\n3. Chained processing and filtering interface.\n4. Handling multiple input sources.\n5. Persistable.\n\nSupported datasets:\n\n1. `Zip`: Zips multiple datasets.\n2. `Shuffle`: A wrapper that performs buffered shuffling.\n3. `Sort`: A wrapper that performs buffered sorting.\n4. `InvertibleSort`: A wrapper that performs buffered sorting., and returns the sample along with its original index in the dataset.\n5. `Enumerate`: Similar to Python's `enumerate` that wraps a dataset and attach an index to each element of it.\n6. `Range`: Similar to Python's `range`.\n7. `Count`: Similar to Python's `itertools.count`.\n8. `TextLine`: A wrapper that wraps a plain-text file. Each line of the file is taken as a sample of the dataset.\n9. `Stdin`: A wrapper that reads from standard input.\n\n\n\nAn `Iterator` generates batches by iterating through the dataset and maintains the iteration state. The following features are supported:\n\n1. Dynamic batching at runtime.\n2. Custom stopping criteria.\n3. Persistable.\n\nWe also modify PyTorch's DataLoader to make it compatitble with our batch iterator.\n\n*Persistable* provides the class with a *PyTorch* compatible interface to dump and load instance state, useful to resume the training process.\n\n## Requirements\n\n- Numpy\n- overrides\n- typings\n- Python >= 3.7\n\nLunas hardly relies on any third-party libraries, all the required libraries are just\nto take advantage of the type hint features provided by Python 3.\n\nType hint feature is used in this project and the built-in typing module of Python version lower than 3.7 can decrease the performance. However, this is solved since Python 3.7. So Lunas currently requires Python 3.7 to work efficiently.\n\n## Installation\n\nInstall using pip:\n\n```\npip install lunas\n```\n\n## Example\n\n1. Create a dataset and iterate through it.\n\n ```python\n from lunas import Range\n\n ds = Range(10)\n for x in ds: # epoch 1\n print(x)\n for x in ds: # epoch 2\n print(x)\n ```\n\n - A `Range` dataset is created similar to range(10) and iterate through it for one epoch.\n As you see, we can iterate through this dataset several times.\n\n2. Build a data processing pipeline.\n\n ```python\n ds = Range(10).select(lambda x: x + 1).select(lambda x: x * 2).where(lambda x: x % 2 == 0)\n ```\n\n - The chaining calls of a `Dataset` obbject defines a processing pipeline on the dataset.\n - `select(fn)` applys transformations on a dataset element lazily. The argument `fn` is a custom mapping fucntion that takes a single sample as input and output. You can apply any transformations to the dataset and return a sample of any type, e.g., `Dict`, `List` and a custom `Sample`.\n - `where(fn)` accepts a predicate and returns a `bool` value to filter an input sample, if True, the sample is preserved, otherwise discarded.\n - The mapping and filtering ops given by `select(fn)` and `where(fn)` are not executed immediately, but later when iterating through the dataset object.\n - Both `select(fn)` and `where(fn)` returns the dataset itself just to enable chaining style invocations. The mapping and filtering ops are attched to the dataset in an in-place fasion.\n\n3. Deal with multiple input sources.\n\n ```python\n from lunas import Range, Zip, Shuffle\n\n ds1 = Range(10)\n ds2 = Range(start=10, stop=20, step=1)\n ds = Zip(ds1, ds2).select(lambda x,y: x + y)\n ds = Shuffle(ds, bufsize=5)\n ```\n\n - In the above code, we create two datasets and *zip* them as a `Zip` dataset. A `Zip` dataset returns a tuple from its internal datasets.\n - `Shuffle` performs randomized shuffling on the dataset.\n\n4. Practical use case in Machine Translation scenario.\n\n ```python\n from lunas import TextLine, Zip, Shuffle, Sort, Iterator\n\n # Tokenize the input into a list of tokens.\n source = TextLine('train.fr').select(lambda x: x.split())\n target = TextLine('train.en').select(lambda x: x.split()) \n # Ensure the inputs are of length no exceeding 50.\n ds = Zip(source, target).select(lambda x, y: \n\t\t {\n\t\t\t x: src_vocab.lookup(x), # Map words to ids\n\t\t\t y: tgt_vocab.lookup(y),\n\t\t\t size_x: len(x),\n\t\t\t size_y: len(y),\n\t\t }\n\t )\n ds = ds.where(lambda x: max(x['size_x'], x['size_y']) <= 50)\n # Shuffle the dataset within a buffer with bufsize 100000\n ds = Shuffle(ds, bufsize=10000)\n # Sort samples in batch by source text length\n sort_key = lambda x: len(x['size_x'])\n ds = Sort(ds, bufsize=1000, sort_key_fn=sort_key)\n\n # Convert a list of samples to model inputs\n collate_fn = lambda x: ...\n\n it = Iterator(dataset=ds, batch_size=4096, \n\t sample_size_fn=lambda x: x['size_x'], \n\t collate_fn=collate_fn, \n\t\t dist_world_size=1,\n\t\t dist_local_rank=0,\n\t drop_tail=True)\n\n # Iterate 100 epoch and 1000000 steps at most.\n for batch in it.while_true(lambda: it.epoch < 100 and it.step < 1e6):\n print(it.epoch, it.step, it.step_in_epoch, batch)\n\n ```\n\n - This code should be simple enough to understand, even if you are not familiar with machine translation.\n\n5. Save and reload iteration state.\n\n ```python\n import pickle\n pickle.dump(it.state_dict(), open('state.pkl', 'wb'))\n # ...\n state = pickle.load(open('state.pkl', 'rb'))\n it.load_state_dict(state)\n ```\n\n - `state_dict()` returns a picklable dictionary, which can be loaded by `it.load_state_dict()` to resume the iteration process later.\n\n6. Extend the dataset.\n\n - You can refer to the implementation of `TextLine` dataset to customize your own data dataset.\n\n## Conclusions\n\nPlease feel free to contact me if you have any question or find any bug of Lunas.\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/pluiez/lunas", "keywords": "", "license": "LICENSE.txt", "maintainer": "", "maintainer_email": "", "name": "Lunas", "package_url": "https://pypi.org/project/Lunas/", "platform": "", "project_url": "https://pypi.org/project/Lunas/", "project_urls": { "Homepage": "https://github.com/pluiez/lunas" }, "release_url": "https://pypi.org/project/Lunas/0.3.5/", "requires_dist": [ "overrides", "setuptools", "numpy", "typing" ], "requires_python": ">=3.7", "summary": "A data processing pipeline and iterator with minimal dependencies for machine learning.", "version": "0.3.5" }, "last_serial": 5796701, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "bb3635fd58b4fad70e9974cb1cc01db4", "sha256": "5501dc4e8f30ddf2ae1fa49113daa002f2923b5928667b61659efae41b223868" }, "downloads": -1, "filename": "Lunas-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "bb3635fd58b4fad70e9974cb1cc01db4", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9448, "upload_time": "2019-01-03T08:18:13", "url": "https://files.pythonhosted.org/packages/97/7f/a6f81a0b63f0b7c3abc0e60ab24d80b420fcbc9a87ded068ae641ce235d0/Lunas-0.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "abc1b56f6837f0bfb50d8c1b2a3dfb65", "sha256": "763e8bda66c81b1651537a72debc11a86c17ece129d07e9dc6db45ac683d7330" }, "downloads": -1, "filename": "Lunas-0.1.0.tar.gz", "has_sig": false, "md5_digest": "abc1b56f6837f0bfb50d8c1b2a3dfb65", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7514, "upload_time": "2019-01-03T08:18:15", "url": "https://files.pythonhosted.org/packages/52/b9/3de87fabf080c6f902fd7d692b78dda5e8bd15e877ecc3f2f8c6c80ef87c/Lunas-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "d0bbe8edd26ce94075a5b7fea6c0cd11", "sha256": "5bd014227dd1fc306aab4589096135f25a56d7246617cd6c402f4ebbadb12eb8" }, "downloads": -1, "filename": "Lunas-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "d0bbe8edd26ce94075a5b7fea6c0cd11", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 12226, "upload_time": "2019-01-04T02:32:42", "url": "https://files.pythonhosted.org/packages/c0/52/b4b4677b4e5838c64b18f907ec01bec1a783e0c708872276da616f654186/Lunas-0.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "390845f85d990adbe7a331320d34ebb5", "sha256": "76e298fae2757234fa4a875b2708e7961729b0f9450ec76f5ee19499e7b1c3ad" }, "downloads": -1, "filename": "Lunas-0.1.1.tar.gz", "has_sig": false, "md5_digest": "390845f85d990adbe7a331320d34ebb5", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 10186, "upload_time": "2019-01-04T02:32:43", "url": "https://files.pythonhosted.org/packages/ad/19/387d03c546703a55d419c3039770db3e447c7eef17cb0237147a2e9c5a74/Lunas-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "74c5c36de76d2cf997f36a45ed4f6a3d", "sha256": "7726b6a69fc0ec204171d33ce237382f18bbd929adbf1e23911e8ae470c57979" }, "downloads": -1, "filename": "Lunas-0.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "74c5c36de76d2cf997f36a45ed4f6a3d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 12431, "upload_time": "2019-01-09T08:13:50", "url": "https://files.pythonhosted.org/packages/09/a8/6ebb9d3db1d85af81c6c4ce472cff56fcfc0afae7c2c2ea0f9fdc889fa69/Lunas-0.1.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c91aa3d3690ea253b33eb22ffa66daee", "sha256": "09de36103deba85049f1979ffce0c05a397ae655813c90982b307a0588eeea44" }, "downloads": -1, "filename": "Lunas-0.1.2.tar.gz", "has_sig": false, "md5_digest": "c91aa3d3690ea253b33eb22ffa66daee", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 10369, "upload_time": "2019-01-09T08:13:53", "url": "https://files.pythonhosted.org/packages/14/0c/0faff16c18ebed1e187d09daa5b2fdb2b64b0542ddffc1fcde8d6de54f58/Lunas-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "818b202997ec16e83575cec58c2b0dee", "sha256": "576587d0e54b1a621caf01106f50cc30769bc23d3cbcd95d5ab733d3cca58356" }, "downloads": -1, "filename": "Lunas-0.1.3-py3-none-any.whl", "has_sig": false, "md5_digest": "818b202997ec16e83575cec58c2b0dee", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 12507, "upload_time": "2019-01-09T09:47:24", "url": "https://files.pythonhosted.org/packages/d8/f7/531245fabf2b59f5b5fe2819f48e7283b2ade6182e3f937e5ad6c4593afe/Lunas-0.1.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b00e45e337862f1042d271541a7ee4bb", "sha256": "7988695037b67b643c0ce5fb4381a9caa5294722239d195eff8c4bcd49acacfe" }, "downloads": -1, "filename": "Lunas-0.1.3.tar.gz", "has_sig": false, "md5_digest": "b00e45e337862f1042d271541a7ee4bb", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 10423, "upload_time": "2019-01-09T09:47:26", "url": "https://files.pythonhosted.org/packages/56/31/179d6d2b32b4cd32b813f835a1c98fab7772bb3658aa9818b08ad7423c6a/Lunas-0.1.3.tar.gz" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "1d4dd69cdf508df799cea3eb546b5974", "sha256": "8f93adc72e0d6cd2293422ece532dbe5c793f86fa91b442fa11f79e5d1bf0b4c" }, "downloads": -1, "filename": "Lunas-0.1.4-py3-none-any.whl", "has_sig": false, "md5_digest": "1d4dd69cdf508df799cea3eb546b5974", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 12505, "upload_time": "2019-01-10T06:06:36", "url": "https://files.pythonhosted.org/packages/cb/c5/8a1da2483fd07d9d5afdb4e5b75fa9cfc92b6ff2c7a846ff0df885dc8ab0/Lunas-0.1.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "aba18b416eb445d518fcd5bdf6a93169", "sha256": "a80d90275ef0822270b3150dbc4aec0f53dab95432bf09668451abc32ed7f722" }, "downloads": -1, "filename": "Lunas-0.1.4.tar.gz", "has_sig": false, "md5_digest": "aba18b416eb445d518fcd5bdf6a93169", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 10410, "upload_time": "2019-01-10T06:06:38", "url": "https://files.pythonhosted.org/packages/04/eb/859d1e478dd6f329a56ae30ae5b290fda1fa32ad03c565774d6b73a82c45/Lunas-0.1.4.tar.gz" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "6ab3a90f2a33f48b861653902d117054", "sha256": "5a8430c844f6fd4806bd37a5b0013d3ca5748ae918090984edbb5b9e3b57dd5d" }, "downloads": -1, "filename": "Lunas-0.1.5-py3-none-any.whl", "has_sig": false, "md5_digest": "6ab3a90f2a33f48b861653902d117054", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 12506, "upload_time": "2019-01-10T06:15:21", "url": "https://files.pythonhosted.org/packages/c5/9d/5b7ce19663d1176bd2bc0070ca30472445006dd7ab82e53ab29e917bdc58/Lunas-0.1.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f301f7938fc124b01816bc8c1cce8c9c", "sha256": "9e92fca5b3e8a3cb685140519c8cb44bc2de0aeda6fbae7e85c76c1b144bef51" }, "downloads": -1, "filename": "Lunas-0.1.5.tar.gz", "has_sig": false, "md5_digest": "f301f7938fc124b01816bc8c1cce8c9c", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 10410, "upload_time": "2019-01-10T06:15:23", "url": "https://files.pythonhosted.org/packages/af/71/754cca4d2461831c9ae81714e122d8dfbc91585d0ef19e372a9eb7133a9c/Lunas-0.1.5.tar.gz" } ], "0.1.6": [ { "comment_text": "", "digests": { "md5": "22a8ce4b7fa09c1dacf8fb082ac14d0b", "sha256": "0c1c98f6db10099f1e25cba0ba396dbdf9ea405eb2cd7234b31181eeaa177459" }, "downloads": -1, "filename": "Lunas-0.1.6-py3-none-any.whl", "has_sig": false, "md5_digest": "22a8ce4b7fa09c1dacf8fb082ac14d0b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 12751, "upload_time": "2019-01-10T10:17:49", "url": "https://files.pythonhosted.org/packages/75/2f/ab9ccd8b0eeabcbf1a2703ce622f9aa0275c12d87adcccbcfd73af459f4c/Lunas-0.1.6-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "bea2c2594ae8a881da978eea3aaa05d9", "sha256": "358935739c2564a45a52b1c4f9732864c4f493cea15135b355f66e8a72ee2b6c" }, "downloads": -1, "filename": "Lunas-0.1.6.tar.gz", "has_sig": false, "md5_digest": "bea2c2594ae8a881da978eea3aaa05d9", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 10524, "upload_time": "2019-01-10T10:17:51", "url": "https://files.pythonhosted.org/packages/78/ce/07bf9a7a4c9025cff1791c3da09401838efa0baa66efbcfb6329a7326ca4/Lunas-0.1.6.tar.gz" } ], "0.1.7": [ { "comment_text": "", "digests": { "md5": "82f2ac061d6d29082f888e5345debacd", "sha256": "a760108e9f8708df48945a626839cd8b0b5109a3348ae69579c617abf7988f1e" }, "downloads": -1, "filename": "Lunas-0.1.7-py3-none-any.whl", "has_sig": false, "md5_digest": "82f2ac061d6d29082f888e5345debacd", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 13447, "upload_time": "2019-01-11T10:11:15", "url": "https://files.pythonhosted.org/packages/66/00/8285e6f9eadd0eb652dffd92badb9f0c3e689c1ed273851b7f8cb04eb93b/Lunas-0.1.7-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b570b9183dec0bea4c01346935fbef01", "sha256": "0cea212c40c574412de709222439b1aeb463861a625912eba569ef850456f866" }, "downloads": -1, "filename": "Lunas-0.1.7.tar.gz", "has_sig": false, "md5_digest": "b570b9183dec0bea4c01346935fbef01", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 10880, "upload_time": "2019-01-11T10:11:17", "url": "https://files.pythonhosted.org/packages/5c/a6/548ff5eff7ddb37dc730550b40b15e3913d33450ad27c335c3cbe53f81eb/Lunas-0.1.7.tar.gz" } ], "0.1.8": [ { "comment_text": "", "digests": { "md5": "8a8e6c3607af31022a2ec022b1803afc", "sha256": "c3a6320b20eca739081fc1c9e61f9601e2821931ad9ead82291a9827d3abdf1f" }, "downloads": -1, "filename": "Lunas-0.1.8-py3-none-any.whl", "has_sig": false, "md5_digest": "8a8e6c3607af31022a2ec022b1803afc", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 13402, "upload_time": "2019-01-11T10:19:15", "url": "https://files.pythonhosted.org/packages/af/bc/65829acef7f4f7cdcc79c1949e4a59429b222d82729b2cd119adf99b341e/Lunas-0.1.8-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fa9958216fcb5e7277d4491b389573f4", "sha256": "64b159e95832124df936a79b2f3c61ad85f33d22c5728a161f67f1e395e2ed57" }, "downloads": -1, "filename": "Lunas-0.1.8.tar.gz", "has_sig": false, "md5_digest": "fa9958216fcb5e7277d4491b389573f4", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 10836, "upload_time": "2019-01-11T10:19:17", "url": "https://files.pythonhosted.org/packages/d9/a3/d0a9af9407217e978b992d42f1f05271e68b30f80b0290593a5dbee532e5/Lunas-0.1.8.tar.gz" } ], "0.1.9": [ { "comment_text": "", "digests": { "md5": "944fffec644794d9509bf10311ac3090", "sha256": "955519f6ff71cc3a9f14c846d017b41773d8ed92987cebf1408dc88d50216c48" }, "downloads": -1, "filename": "Lunas-0.1.9-py3-none-any.whl", "has_sig": false, "md5_digest": "944fffec644794d9509bf10311ac3090", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 13492, "upload_time": "2019-01-11T10:45:27", "url": "https://files.pythonhosted.org/packages/29/59/55c3626921d0839b7d1247140ba9fdd4232a208e938fa2a6e7e952c368f6/Lunas-0.1.9-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5f618b80b621fefe66b29a5f6aa256fd", "sha256": "9bfb761c721ff2b10b5de7dea0fa4296bacf13b4f4fbc8d8e843e5ad9ce248b4" }, "downloads": -1, "filename": "Lunas-0.1.9.tar.gz", "has_sig": false, "md5_digest": "5f618b80b621fefe66b29a5f6aa256fd", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 10955, "upload_time": "2019-01-11T10:45:28", "url": "https://files.pythonhosted.org/packages/4e/2d/c8c22f696639e9942096c4aea364ff3584f266d472813370f086884410b5/Lunas-0.1.9.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "eb662bf90a541e4020d96af2b8a120b4", "sha256": "101bb82a71bac1eeea5c497bbe1963b7f7f10bf7a4fd4b29f726f99ed6cdef10" }, "downloads": -1, "filename": "Lunas-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "eb662bf90a541e4020d96af2b8a120b4", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 13641, "upload_time": "2019-01-16T07:36:23", "url": "https://files.pythonhosted.org/packages/da/84/a0cc7043e1bc6d0c3a1158b3e52771e894932b3fb363bd53b038f71ed99d/Lunas-0.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ecfeae3aa18dc259192f7749df6ba52c", "sha256": "6fcb2c6d3c4841317302aaf0d5e25b2d37ecd8732d5ef1a7f4daaedab3f338de" }, "downloads": -1, "filename": "Lunas-0.2.0.tar.gz", "has_sig": false, "md5_digest": "ecfeae3aa18dc259192f7749df6ba52c", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 11084, "upload_time": "2019-01-16T07:36:26", "url": "https://files.pythonhosted.org/packages/4c/4b/7e72ab1f46cae31b8eca40b29b5fe540431b09fa2826c85c686acd3df724/Lunas-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "b66a48c2d5f54264af6a61e946a1dd5f", "sha256": "8f8bbf1b5777ab4b9fa4cd81f9f8b8119483a415d1f45074a2f40c7256e770c8" }, "downloads": -1, "filename": "Lunas-0.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "b66a48c2d5f54264af6a61e946a1dd5f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 14801, "upload_time": "2019-01-23T03:46:50", "url": "https://files.pythonhosted.org/packages/55/f4/7358d4d6766acde2e7cdd60de09297e299f382b197dfd7340436411674e6/Lunas-0.2.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "57e93e3f50e682ec7cbc067494ab02d2", "sha256": "cbac41d42820e6c8d5987ce10f23e6281a67de92cc992eed74cd329c61b99fae" }, "downloads": -1, "filename": "Lunas-0.2.1.tar.gz", "has_sig": false, "md5_digest": "57e93e3f50e682ec7cbc067494ab02d2", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 11515, "upload_time": "2019-01-23T03:46:52", "url": "https://files.pythonhosted.org/packages/7b/56/fd17851bd40d2a24c73f425563775d9895b12384d787e47d14178ebeffdd/Lunas-0.2.1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "b56d2c2a3164b1bfb27dfb88a53c5b70", "sha256": "c2e70f7a356a43e23521729d7133fdb74655eaa773c0d2097346a4ce1242a187" }, "downloads": -1, "filename": "Lunas-0.2.2-py3-none-any.whl", "has_sig": false, "md5_digest": "b56d2c2a3164b1bfb27dfb88a53c5b70", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 14810, "upload_time": "2019-01-23T03:53:34", "url": "https://files.pythonhosted.org/packages/d9/56/c1d41a715a87df436a68401715b4a5244947b7062cdc76368b34711d9f1a/Lunas-0.2.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3c560e9912b31958c95eb9f982156219", "sha256": "5003de7c72af309bec41b06ac5ac7905eab9de2833e64496fc1e45bd191e0d2d" }, "downloads": -1, "filename": "Lunas-0.2.2.tar.gz", "has_sig": false, "md5_digest": "3c560e9912b31958c95eb9f982156219", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 11506, "upload_time": "2019-01-23T03:53:37", "url": "https://files.pythonhosted.org/packages/06/b6/e0c58cbf47772cd79613b26c4ed40c2d19127f9ef8479a33fe15e4815657/Lunas-0.2.2.tar.gz" } ], "0.2.3": [ { "comment_text": "", "digests": { "md5": "a5244ab25131e4516c9a2bc1711e7470", "sha256": "44c8072953d03097f1eca58e89212ef2fb9c7e2e44be62784afc8bd7f6cc9e2f" }, "downloads": -1, "filename": "Lunas-0.2.3-py3-none-any.whl", "has_sig": false, "md5_digest": "a5244ab25131e4516c9a2bc1711e7470", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 15063, "upload_time": "2019-01-28T09:19:08", "url": "https://files.pythonhosted.org/packages/5e/81/39ce41f75d0afe9a0270723e99d3ba97d29a822df7a1f287def6b4643fe5/Lunas-0.2.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4d90c52d34d0668622e9fda28dc93449", "sha256": "0a3f31a04ce306d8572b759bdb9072e4611cdde318894671d1c2ba5bae264bac" }, "downloads": -1, "filename": "Lunas-0.2.3.tar.gz", "has_sig": false, "md5_digest": "4d90c52d34d0668622e9fda28dc93449", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 11716, "upload_time": "2019-01-28T09:19:09", "url": "https://files.pythonhosted.org/packages/97/07/03498c6f280168a8707e6883b155e5b3e0f4772b663afee687edcb2f943f/Lunas-0.2.3.tar.gz" } ], "0.2.4": [ { "comment_text": "", "digests": { "md5": "cb29a1dcb45e78de5838d15df8f3e252", "sha256": "d6c99512e4862b1c2b085b52963dcfb1af450d34e6158bfe99205b3d665f1436" }, "downloads": -1, "filename": "Lunas-0.2.4-py3-none-any.whl", "has_sig": false, "md5_digest": "cb29a1dcb45e78de5838d15df8f3e252", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 15072, "upload_time": "2019-01-28T14:15:22", "url": "https://files.pythonhosted.org/packages/0a/28/ab48781e5cfe5832943c8f8c9d281f4a15a0f802007f11804eceddcd8e9d/Lunas-0.2.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b55b2e99eaffbb7e64283c9ac23934d7", "sha256": "b359ad5a3bde8e1cb374fe1bd4b7d893142b0f05b020142943c0d4f5fbdd2024" }, "downloads": -1, "filename": "Lunas-0.2.4.tar.gz", "has_sig": false, "md5_digest": "b55b2e99eaffbb7e64283c9ac23934d7", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 11744, "upload_time": "2019-01-28T14:15:24", "url": "https://files.pythonhosted.org/packages/91/19/acdb8947579e7f25e9e687ce661985ad0edab48cf3442482c4058ca7d17e/Lunas-0.2.4.tar.gz" } ], "0.2.5": [ { "comment_text": "", "digests": { "md5": "cfca5003e919e618e4e962eed27141f0", "sha256": "f49bade4305e49d21566caa35c678faeff8855d8fef4792409c8241ef7f6e8c9" }, "downloads": -1, "filename": "Lunas-0.2.5-py3-none-any.whl", "has_sig": false, "md5_digest": "cfca5003e919e618e4e962eed27141f0", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 15118, "upload_time": "2019-01-28T15:18:15", "url": "https://files.pythonhosted.org/packages/2e/a6/e81ef6aea1688d9cc8f8d9b30ba9e4671aad13eb65c29f0aceaca1491a13/Lunas-0.2.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e09159f79d561e9335280b8cb1a6b0fc", "sha256": "784a54eeb735c991651d90c7cee45c80b0a48ed6456e9ee434a169891b847054" }, "downloads": -1, "filename": "Lunas-0.2.5.tar.gz", "has_sig": false, "md5_digest": "e09159f79d561e9335280b8cb1a6b0fc", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 11770, "upload_time": "2019-01-28T15:18:18", "url": "https://files.pythonhosted.org/packages/bf/3f/949c06c837930c0866f96d31b665ac0f88250990dcb5e3d1f1a9ed6692fe/Lunas-0.2.5.tar.gz" } ], "0.2.6": [ { "comment_text": "", "digests": { "md5": "77983218aceb81637c1bc522ac2ff9d1", "sha256": "c2e4ac575dc75f4c1ed77b899f2dbe1d3ccb5a653ee25f6413b91d29985a64b4" }, "downloads": -1, "filename": "Lunas-0.2.6-py3-none-any.whl", "has_sig": false, "md5_digest": "77983218aceb81637c1bc522ac2ff9d1", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 15654, "upload_time": "2019-01-29T06:23:39", "url": "https://files.pythonhosted.org/packages/f5/d6/be607aac8a0c3ad038efc095d0ee38e97c9d631aade3d39af85538dd374e/Lunas-0.2.6-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2ec133777a3b67ac27e0b13de239117e", "sha256": "39c002e74f9fbfe3641484f8badf78b507a8e5b7527123ec9686da364eeeead3" }, "downloads": -1, "filename": "Lunas-0.2.6.tar.gz", "has_sig": false, "md5_digest": "2ec133777a3b67ac27e0b13de239117e", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 11945, "upload_time": "2019-01-29T06:23:41", "url": "https://files.pythonhosted.org/packages/b2/85/d44095b32013659eff3b4467ad83b92c197760fc78e39dedf4da8d3c8f33/Lunas-0.2.6.tar.gz" } ], "0.2.7": [ { "comment_text": "", "digests": { "md5": "a060640b5c200268f0478dc621689476", "sha256": "724ef0da31708e6ccf3074af26d4cbd6a85aed0ed4540613116a308f2daacac2" }, "downloads": -1, "filename": "Lunas-0.2.7-py3-none-any.whl", "has_sig": false, "md5_digest": "a060640b5c200268f0478dc621689476", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 15646, "upload_time": "2019-01-31T07:06:53", "url": "https://files.pythonhosted.org/packages/38/7d/57a585ac889d1a3ffcb1792dc45df779b73d8d70dd45e495e7292c767a60/Lunas-0.2.7-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fe8b6959372d4c6aec492b5b5159f089", "sha256": "939f128ef49f92a89592049791bb99114d0131b0063d132ac3e7600b7600d722" }, "downloads": -1, "filename": "Lunas-0.2.7.tar.gz", "has_sig": false, "md5_digest": "fe8b6959372d4c6aec492b5b5159f089", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 11953, "upload_time": "2019-01-31T07:06:56", "url": "https://files.pythonhosted.org/packages/d3/a5/b061578b37800713a5478e839714fae1a1b129a59e076e55ca9ef737f724/Lunas-0.2.7.tar.gz" } ], "0.2.8": [ { "comment_text": "", "digests": { "md5": "01f34d8d63eaf908efa006d43d32be07", "sha256": "5d5e383bc075bbd94cfc8f173d60a354f8389e5b3eace69161e11ef107af153d" }, "downloads": -1, "filename": "Lunas-0.2.8-py3-none-any.whl", "has_sig": false, "md5_digest": "01f34d8d63eaf908efa006d43d32be07", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 15962, "upload_time": "2019-02-05T07:26:01", "url": "https://files.pythonhosted.org/packages/4e/e8/06353b3a4d6a3422b1d1b983123ed2133f94358f41ace10553cf55c866c4/Lunas-0.2.8-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "14d8fbe27721e39027250ea9d4c799ac", "sha256": "d4e3b373126b35cda315170f211f61470bd87c1da5a57c0777de2e008b76733f" }, "downloads": -1, "filename": "Lunas-0.2.8.tar.gz", "has_sig": false, "md5_digest": "14d8fbe27721e39027250ea9d4c799ac", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 12076, "upload_time": "2019-02-05T07:26:04", "url": "https://files.pythonhosted.org/packages/98/ba/9a723f7a390ff52410a56fbe28fae232a3d10cbf4445dc402c83a4c599c0/Lunas-0.2.8.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "2ed9bba3bcb942ed8fa3bbbbfef953b2", "sha256": "b8d60a111f5c46ccf4c0253ab17b862635543d3dd97f07171b2acc249096dd00" }, "downloads": -1, "filename": "Lunas-0.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "2ed9bba3bcb942ed8fa3bbbbfef953b2", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7", "size": 17057, "upload_time": "2019-02-18T09:25:56", "url": "https://files.pythonhosted.org/packages/77/64/53b50690f20134c7cf95f81cf9ff2073fbce802240ce1df90fb14f2d3176/Lunas-0.3.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0d4a568906b526fc80c1ea09a59016ed", "sha256": "de3484bafa4fef8c298e6dcc73e351f8dee6a78f87a4da19cf96917ebf1c3b34" }, "downloads": -1, "filename": "Lunas-0.3.0.tar.gz", "has_sig": false, "md5_digest": "0d4a568906b526fc80c1ea09a59016ed", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7", "size": 13171, "upload_time": "2019-02-18T09:25:58", "url": "https://files.pythonhosted.org/packages/e7/af/791cda156f6399bef8add93499f84804755ecbd299c3c7e6a0a950011b49/Lunas-0.3.0.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "3f55f81d668d56093303937571c4c591", "sha256": "b01b28332916194273abd404ec849e82765622ff5ca2a79d1d4b109248237882" }, "downloads": -1, "filename": "Lunas-0.3.1-py3-none-any.whl", "has_sig": false, "md5_digest": "3f55f81d668d56093303937571c4c591", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7", "size": 17382, "upload_time": "2019-03-01T06:47:13", "url": "https://files.pythonhosted.org/packages/bc/3c/2e35f7b0914e76e3c1275885e46d4cef7399ec8210a4cd633afc9e5277c5/Lunas-0.3.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e36610044291af7c0fe81b24e5c33d1d", "sha256": "604fd7a4a1d52d38f25ca56578d68febcfa1a589b4d8d594f70018f87628ace1" }, "downloads": -1, "filename": "Lunas-0.3.1.tar.gz", "has_sig": false, "md5_digest": "e36610044291af7c0fe81b24e5c33d1d", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7", "size": 13514, "upload_time": "2019-03-01T06:47:21", "url": "https://files.pythonhosted.org/packages/a3/a3/0694e564e818b989befb690ae6744400bc1565214e3eedaf3b2414574f41/Lunas-0.3.1.tar.gz" } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "cc1de09b55ae8d1ea95ce77f36eb85fc", "sha256": "2dce11d5d04cb6fa5f4b559526fb66e38ca27c6ae23941b88ab6676e04887a53" }, "downloads": -1, "filename": "Lunas-0.3.2-py3-none-any.whl", "has_sig": false, "md5_digest": "cc1de09b55ae8d1ea95ce77f36eb85fc", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7", "size": 18219, "upload_time": "2019-03-25T03:51:49", "url": "https://files.pythonhosted.org/packages/73/f6/d37708e69fdd0634c679cdb01f8576561375a3b9623373a61735f83f6671/Lunas-0.3.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3a5a8c183fd70c9dea5ae96bb50de289", "sha256": "cffebdbc21a6248e62f061cbc4c138396df9b13420f72357e025fb7ad6d3b03b" }, "downloads": -1, "filename": "Lunas-0.3.2.tar.gz", "has_sig": false, "md5_digest": "3a5a8c183fd70c9dea5ae96bb50de289", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7", "size": 14216, "upload_time": "2019-03-25T03:51:51", "url": "https://files.pythonhosted.org/packages/6e/b7/43dcb71df254b98ba0090135b2042deeed479d60b160ce945db8f809eda3/Lunas-0.3.2.tar.gz" } ], "0.3.3": [ { "comment_text": "", "digests": { "md5": "e0e4f38782d5b07c8f72066a3bbf3590", "sha256": "d443f67a2754a397ff1f17c29f02ff32e96d2446b8c392d51f40e1f4e1751c8d" }, "downloads": -1, "filename": "Lunas-0.3.3-py3-none-any.whl", "has_sig": false, "md5_digest": "e0e4f38782d5b07c8f72066a3bbf3590", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7", "size": 18801, "upload_time": "2019-04-02T04:06:12", "url": "https://files.pythonhosted.org/packages/db/e4/6340936077d6bc565b899fce16b4bd588b63a89553333e90faab4e70d109/Lunas-0.3.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b3a2bd688eefdd4850fbe9565fb9753c", "sha256": "27730ba4c0093e560884bfa93e28e696bcb77afcc12da0456779adc34f93950d" }, "downloads": -1, "filename": "Lunas-0.3.3.tar.gz", "has_sig": false, "md5_digest": "b3a2bd688eefdd4850fbe9565fb9753c", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7", "size": 14506, "upload_time": "2019-04-02T04:06:14", "url": "https://files.pythonhosted.org/packages/5d/39/2b97e6ac5d3de6beb07088c5bbaea15bffa92bf1e5e5b63cd2078bc323fb/Lunas-0.3.3.tar.gz" } ], "0.3.4": [ { "comment_text": "", "digests": { "md5": "d36f690afbb05e522e43524468d0cfb7", "sha256": "97d89259aa87009ce2902a88139b81daca8cfe08a969c713daec64e50935723e" }, "downloads": -1, "filename": "Lunas-0.3.4-py3-none-any.whl", "has_sig": false, "md5_digest": "d36f690afbb05e522e43524468d0cfb7", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7", "size": 18786, "upload_time": "2019-04-02T08:45:14", "url": "https://files.pythonhosted.org/packages/0f/62/673cf7ad08e1ceab81f3f7656687bd5f52395143f869f1f56736ad79f013/Lunas-0.3.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f876198d997f635b177aa9d49c173591", "sha256": "941b651e16f2430ed712e02e2bca000f9c28e595e2061524c00847fe6fd81735" }, "downloads": -1, "filename": "Lunas-0.3.4.tar.gz", "has_sig": false, "md5_digest": "f876198d997f635b177aa9d49c173591", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7", "size": 14421, "upload_time": "2019-04-02T08:45:15", "url": "https://files.pythonhosted.org/packages/13/6e/91e2b5055e0034f8497ea5bb3ae8d470d4401e0506abdc49e15bc0c4a0d7/Lunas-0.3.4.tar.gz" } ], "0.3.5": [ { "comment_text": "", "digests": { "md5": "9144cf8963396d335cbb64c95c304ae3", "sha256": "2151536afe7a2c476548b881763b6e735220e60939783f7f7c4b5d9e42d82261" }, "downloads": -1, "filename": "Lunas-0.3.5-py3-none-any.whl", "has_sig": false, "md5_digest": "9144cf8963396d335cbb64c95c304ae3", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7", "size": 18603, "upload_time": "2019-09-07T16:55:59", "url": "https://files.pythonhosted.org/packages/ff/e3/210f390998e0890a8bba5059f5f7d192d003e64bfabbaf3c56864fb23932/Lunas-0.3.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "324f8a0f0285f3dd7d235dd3e87139ab", "sha256": "255a2182c07293b71bcabd3494879307310e19cc4e3d8f120b504f7a91960e52" }, "downloads": -1, "filename": "Lunas-0.3.5.tar.gz", "has_sig": false, "md5_digest": "324f8a0f0285f3dd7d235dd3e87139ab", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7", "size": 15412, "upload_time": "2019-09-07T16:56:03", "url": "https://files.pythonhosted.org/packages/b2/49/6c3fbda031d2edd8be89a8c0b54c8454c429930ed6102ef48597f961ff25/Lunas-0.3.5.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "9144cf8963396d335cbb64c95c304ae3", "sha256": "2151536afe7a2c476548b881763b6e735220e60939783f7f7c4b5d9e42d82261" }, "downloads": -1, "filename": "Lunas-0.3.5-py3-none-any.whl", "has_sig": false, "md5_digest": "9144cf8963396d335cbb64c95c304ae3", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7", "size": 18603, "upload_time": "2019-09-07T16:55:59", "url": "https://files.pythonhosted.org/packages/ff/e3/210f390998e0890a8bba5059f5f7d192d003e64bfabbaf3c56864fb23932/Lunas-0.3.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "324f8a0f0285f3dd7d235dd3e87139ab", "sha256": "255a2182c07293b71bcabd3494879307310e19cc4e3d8f120b504f7a91960e52" }, "downloads": -1, "filename": "Lunas-0.3.5.tar.gz", "has_sig": false, "md5_digest": "324f8a0f0285f3dd7d235dd3e87139ab", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7", "size": 15412, "upload_time": "2019-09-07T16:56:03", "url": "https://files.pythonhosted.org/packages/b2/49/6c3fbda031d2edd8be89a8c0b54c8454c429930ed6102ef48597f961ff25/Lunas-0.3.5.tar.gz" } ] }