{ "info": { "author": "Alejandro Pe\u00f1a", "author_email": "adpena@gmail.com", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3" ], "description": "# `achilles`\nDistributed/parallel computing in modern Python based on the `multiprocessing.Pool` API (`map`, `imap`, `imap_unordered`).\n\n## What/why is it?\nThe purpose of `achilles` is to make distributed/parallel computing as easy as possible by limiting the required configuration, hiding the details (server/node/controller architecture) and exposing a simple interface based on the popular `multiprocessing.Pool` API.\n\n> `achilles` provides developers with entry-level capabilities for concurrency across a network of machines (see PEP 372 on the intent behind adding `multiprocessing` to the standard library -> https://www.python.org/dev/peps/pep-0371/) using a server/node/controller architecture.\n\nThe `achilles_server`, `achilles_node` and `achilles_controller` are designed to run cross-platform/cross-architecture. The server/node/controller may be hosted on a single machine (for development) or deployed across heterogeneous resources.\n\n`achilles` is comparable to excellent Python packages like `pathos/pyina`, `Parallel Python` and `SCOOP`, but different in certain ways:\n- Designed for developers familiar with the `multiprocessing` module in the standard library with simplicity and ease of use in mind.\n- In addition to the blocking `map` API which requires that developers wait for all computation to be finished before accessing results (common in such packages), `imap`/`imap_unordered` allow developers to process results as they are returned to the `achilles_controller` by the `achilles_server`.\n- `achilles` allows for composable scalability and novel design patterns as:\n - Iterables including lists, lists of lists and generator functions (as first-class object - generator expressions will not work as generators cannot be serialized by `pickle`/`dill`) are accepted as arguments.\n - TIP: Use generator functions together with `imap` or `imap_unordered` to perform distributed computation on arbitrarily large data.\n - The `dill` serializer is used to transfer data between the server/node/controller and `multiprocess` (fork of `multiprocessing` that uses the `dill` serializer instead of `pickle`) is used to perform `Pool.map` on the `achilles_nodes`, so developers are freed from some of the constraints of the `pickle` serializer.\n
\n\n### Install\n`pip install achilles`\n\n### Quick Start\nStart an `achilles_server` listening for connections from `achilles_nodes` at a certain endpoint specified as arguments or in an `.env` file in the `achilles` package's directory.\n\nThen simply import `map`, `imap`, and/or `imap_unordered` from `achilles_main` and use them dynamically in your own code (under the hood they create and close `achilles_controller`s).\n\n`map`, `imap` and `imap_unordered` will distribute your function to each `achilles_node` connected to the `achilles_server`. Then, the `achilles_server` will distribute arguments to each `achilles_node` (load balanced and made into a list of arguments if the arguments' type is not already a list) which will then perform your function on the arguments using `multiprocess.Pool.map`.\n\nEach `achilles_node` finishes its work, returns the results to the `achilles_server` and waits to receive another argument. This process is repeated until all of the arguments have been exhausted.\n\n1) `runAchillesServer(host=None, port=None, username=None, secret_key=None)` -> run on your local machine or on another machine connected to your network\n\n `in:`\n ```python\n from achilles.lineReceiver.achilles_server import runAchillesServer\n\n # host = IP address of the achilles_server\n # port = port to listen on for connections from achilles_nodes (must be an int)\n # username, secret_key used for authentication with achilles_controller\n\n runAchillesServer(host='127.0.0.1', port=9999, username='foo', secret_key='bar')\n ```\n\n ```python\n\n # OR generate an .env file with a default configuration so that\n # arguments are no longer required to runAchillesServer()\n\n # use genConfig() to overwrite\n\n from achilles.lineReceiver.achilles_server import runAchillesServer, genConfig\n\n genConfig(host='127.0.0.1', port=9999, username='foo', secret_key='bar')\n runAchillesServer()\n ```\n
\n\n `out:`\n ```\n ALERT: achilles_server initiated at 127.0.0.1:9999\n Listening for connections...\n ```\n\n2) `runAchillesNode(host=None, port=None)` -> run on your local machine or on another machine connected to your network\n\n `in:`\n ```python\n from achilles.lineReceiver.achilles_node import runAchillesNode\n\n # genConfig() is also available in achilles_node, but only expects host and port arguments\n\n runAchillesNode(host='127.0.0.1', port=9999)\n ```\n
\n\n `out:`\n ```\n GREETING: Welcome! There are currently 1 open connections.\n\n Connected to achilles_server running at 127.0.0.1:9999\n CLIENT_ID: 0\n ```\n\n3) Examples of how to use the 3 most commonly used `multiprocessing.Pool` methods in `achilles`:\n
\n >> Note: `map`, `imap` and `imap_unordered` currently accept iterables including - but not limited - to lists, lists of lists, and generator functions as `achilles_args`.\n\n >> Also note: if there isn't already a `.env` configuration file in the `achilles` package directory, must use `genConfig(host, port, username, secret_key)` before using or include `host`, `port`, `username` and `secret_key` as arguments when using `map`, `imap`, `imap_unordered`.\n\n 1) `map(func, args, callback=None, chunksize=1, host=None, port=None, username=None, secret_key=None)`

\n `in:`\n ```python\n from achilles.lineReceiver.achilles_main import map\n\n def achilles_function(arg):\n return arg ** 2\n\n def achilles_callback(result):\n return result ** 2\n\n if __name__ == \"__main__\":\n results = map(achilles_function, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], achilles_callback, chunksize=1)\n print(results)\n ```\n
\n\n `out:`\n ```\n ALERT: Connection to achilles_server at 127.0.0.1:9999 and authentication successful.\n\n [[1, 16, 81, 256, 625, 1296, 2401, 4096], [6561, 10000]]\n ```\n\n 2) `imap(func, args, callback=None, chunksize=1, host=None, port=None, username=None, secret_key=None)`

\n `in:`\n ```python\n from achilles.lineReceiver.achilles_main import imap\n\n def achilles_function(arg):\n return arg ** 2 \n\n def achilles_callback(result):\n return result ** 2\n\n if __name__ == \"__main__\":\n for result in imap(achilles_function, [1,2,3,4,5,6,7,8,9,10], achilles_callback, chunksize=1):\n print(result)\n ```\n
\n\n `out:`\n ``` \n ALERT: Connection to achilles_server at 127.0.0.1:9999 and authentication successful.\n\n {'ARGS_COUNTER': 0, 'RESULT': [1, 16, 81, 256, 625, 1296, 2401, 4096]}\n {'ARGS_COUNTER': 8, 'RESULT': [6561, 10000]}\n ```\n\n 3) `imap_unordered(func, args, callback=None, chunksize=1, host=None, port=None, username=None, secret_key=None)`

\n `in:`\n ```python\n from achilles.lineReceiver.achilles_main import imap_unordered\n\n def achilles_function(arg):\n return arg ** 2\n\n def achilles_callback(result):\n return result ** 2\n\n if __name__ == \"__main__\":\n for result in imap_unordered(achilles_function, [1,2,3,4,5,6,7,8,9,10], achilles_callback, chunksize=1):\n print(result)\n ```\n
\n\n `out:`\n ``` \n ALERT: Connection to achilles_server at 127.0.0.1:9999 and authentication successful.\n\n {'ARGS_COUNTER': 8, 'RESULT': [6561, 10000]}\n {'ARGS_COUNTER': 0, 'RESULT': [1, 16, 81, 256, 625, 1296, 2401, 4096]}\n ```\n\n## How `achilles` works \n\n### Under the hood\n- `Twisted`\n - An event-driven networking engine written in Python and MIT licensed.\n- `dill`\n - `dill` extends Python\u00e2\u20ac\u2122s `pickle` module for serializing and de-serializing Python objects to the majority of the built-in Python types.\n- `multiprocess`\n - multiprocess is a fork of multiprocessing that uses `dill` instead of `pickle` for serialization. `multiprocessing` is a package for the Python language which supports the spawning of processes using the API of the standard library\u00e2\u20ac\u2122s threading module.\n\n### Examples\nSee the `examples` directory for tutorials on various use cases, including:\n- Square numbers/run multiple jobs sequentially\n- Word count (TO DO)\n\n### How to kill cluster\n```python\nfrom achilles.lineReceiver.achilles_main import killCluster\n\n# simply use the killCluster() command and verify your intent at the prompt\n# killCluster() will search for an .env configuration file in the achilles package's directory\n\n# if it does not exist, specify host, port, username and secret_key as arguments\n# a command is sent to all connected achilles_nodes to stop the Twisted reactor and exit() the process\n\n# optionally, you can pass command_verified=True to proceed directly with killing the cluster\n\nkillCluster(command_verified=True)\n```\n\n### Caveats/Things to know\n- `achilles_node`s use all of the CPU cores available on the host machine to perform `multiprocess.Pool.map` (`pool = multiprocess.Pool(multiprocess.cpu_count())`).\n- `achilles` leaves it up to the developer to ensure that the correct packages are installed on `achilles_node`s to perform the function distributed by the `achilles_server` on behalf of the `achilles_controller`. Current recommended solution is to SSH into each machine and `pip install` a `requirements.txt` file.\n- All import statements required by the developer's function, arguments and callback must be included in the definition of the function.\n- The `achilles_server` is currently designed to handle one job at a time. For more complicated projects, I highly recommend checking out `Dask` (especially `dask.distributed`) and learning more about directed acyclic graphs (DAGs).\n- Fault tolerance: if some `achilles_node` disconnects before returning expected results, the argument will be distributed to another `achilles_node` for computation instead of being lost.\n- `callback_error` argument has yet to be implemented, so detailed information regarding errors can only be gleaned from the interpreter used to launch the `achilles_server`, `achilles_node` or `achilles_controller`. Deploying the server/node/controller on a single machine is recommended for development.\n- `achilles` performs load balancing at runtime and assigns `achilles_node`s arguments by `cpu_count` * `chunksize`.\n - Default `chunksize` is 1.\n - Increasing the `chunksize` is an easy way to speed up computation and reduce the amount of time spent transferring data between the server/node/controller.\n- If your arguments are already lists, the `chunksize` argument is not used.\n - Instead, one argument/list will be distributed to the connected `achilles_node`s at a time.\n- If your arguments are load balanced, the results returned are contained in lists of length `achilles_node's cpu_count` * `chunksize`.\n - `map`:\n - Final result of `map` is an ordered list of load balanced lists (the final result is not flattened).\n - `imap`:\n - Results are returned as computation is finished in dictionaries that include the following keys:\n - `RESULT`: load balanced list of results.\n - `ARGS_COUNTER`: index of first argument (0-indexed).\n - Results are ordered.\n - The first result will correspond to the next result after the last result in the preceding results packet's list of results.\n - Likely to be slower than `immap_unordered` due to `achilles_controller` yielding ordered results. `imap_unordered` (see below) yields results as they are received, while `imap` yields results as they are received only if the argument's `ARGS_COUNTER` is expected based on the length of the `RESULT` list in the preceding results packet. Otherwise, a `result_buffer` is checked for the results packet with the expected `ARGS_COUNTER` and the current results packet is added to the `result_buffer`. If it is not found, `achilles_controller` will not yield results until a results packet with the expected `ARGS_COUNTER` is received.\n - `imap_unordered`:\n - Results are returned as computation is finished in dictionaries that include the following keys:\n - `RESULT`: load balanced list of results.\n - `ARGS_COUNTER`: index of first argument (0-indexed).\n - Results are not ordered.\n - Results packets are yielded as they are received (after any `achilles_callback` has been performed on it).\n - Fastest way of consuming results received from the `achilles_server`.\n\n\n
\n\n`achilles` is in the early stages of active development and your suggestions/contributions are kindly welcomed.\n\n`achilles` is written and maintained by Alejandro Pe\u00c3\u00b1a. Email me at adpena at gmail dot com.\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/adpena/achilles", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "achilles", "package_url": "https://pypi.org/project/achilles/", "platform": "", "project_url": "https://pypi.org/project/achilles/", "project_urls": { "Homepage": "https://github.com/adpena/achilles" }, "release_url": "https://pypi.org/project/achilles/0.0.196/", "requires_dist": [ "dill", "python-dotenv", "twisted", "pyyaml", "multiprocess" ], "requires_python": "", "summary": "Distributed/parallel computing in modern Python based on the multiprocessing.Pool API (map, imap, imap_unordered).", "version": "0.0.196" }, "last_serial": 5992816, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "c1f2ae1df0ca406a0306c678b2283cee", "sha256": "8760ce10069d2d88fb02fcefe8edaf385141dfbe2a87a986cd64defa2c5003ee" }, "downloads": -1, "filename": "achilles-0.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "c1f2ae1df0ca406a0306c678b2283cee", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 25030, "upload_time": "2019-07-19T02:13:44", "url": "https://files.pythonhosted.org/packages/70/c1/8241fb7ac87842cfee7e95cb8788d12fac5827b254e0080da8fc9a81a8c1/achilles-0.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "49bf29be5e69377e0d305eccc26f0cb3", "sha256": "4027452bb33ab06edaf344b08be4bdfe6fc75a2e528127e52e739839875568a8" }, "downloads": -1, "filename": "achilles-0.0.1.tar.gz", "has_sig": false, "md5_digest": "49bf29be5e69377e0d305eccc26f0cb3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14180, "upload_time": "2019-07-19T02:13:46", "url": "https://files.pythonhosted.org/packages/5c/71/cea6e8c3ceeec0ae3c69904f7fd3f2d63bcf7fd922b5c86e809fc0e6574e/achilles-0.0.1.tar.gz" } ], "0.0.11": [ { "comment_text": "", "digests": { "md5": "6c992063116dffde7e119b76ec12542a", "sha256": "d23d8a5cc9e5e7e6b7e290c72dbb16be9f7281d0720f40f48ba0f760a99cc30e" }, "downloads": -1, "filename": "achilles-0.0.11-py3-none-any.whl", "has_sig": false, "md5_digest": "6c992063116dffde7e119b76ec12542a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 25487, "upload_time": "2019-07-19T04:11:04", "url": "https://files.pythonhosted.org/packages/75/7a/e2a60209e68ab0a4becb2d11e41e24ba2f2b912c2e8e8959823e62ccab63/achilles-0.0.11-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "691d2d622414ff5d9d5e37ef4b0c18ba", "sha256": "9c29d52dd6c8239f92153b28d5aa2a38fd81c3f8dbf766325150718851341804" }, "downloads": -1, "filename": "achilles-0.0.11.tar.gz", "has_sig": false, "md5_digest": "691d2d622414ff5d9d5e37ef4b0c18ba", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14839, "upload_time": "2019-07-19T04:11:05", "url": "https://files.pythonhosted.org/packages/fe/c4/36a20edcaead1f0505b01b96a737d746c9c34621d03b7498f6b7317140ca/achilles-0.0.11.tar.gz" } ], "0.0.12": [ { "comment_text": "", "digests": { "md5": "0d6ed7da269b55972e925534865ee111", "sha256": "2eb71030be2cb1bcf17887de0f304e06494f31b2b4dda093d656a1bdb3e3e502" }, "downloads": -1, "filename": "achilles-0.0.12-py3-none-any.whl", "has_sig": false, "md5_digest": "0d6ed7da269b55972e925534865ee111", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 25580, "upload_time": "2019-07-19T10:01:16", "url": "https://files.pythonhosted.org/packages/84/8a/191b1d7e2f087328966783711c5914a57686007ec8ffe88c90d5e6e17d79/achilles-0.0.12-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "957ee2e09ae3479685926c979cc628d5", "sha256": "01d0755b9d3514d6b2ce7b336e60697fbe8ee4d7d5d580cdaca109bae4a83e46" }, "downloads": -1, "filename": "achilles-0.0.12.tar.gz", "has_sig": false, "md5_digest": "957ee2e09ae3479685926c979cc628d5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14996, "upload_time": "2019-07-19T10:01:17", "url": "https://files.pythonhosted.org/packages/06/8c/418288d43cbe972398cfc0936f83a44e7001cb713fb6e62e2c7c26fad171/achilles-0.0.12.tar.gz" } ], "0.0.13": [ { "comment_text": "", "digests": { "md5": "7b769107a8e718cab8c7669c82b99b57", "sha256": "b9243e14f4c9660402e479a0c70292e80762b56fe945694d2b6b2e1772fa2586" }, "downloads": -1, "filename": "achilles-0.0.13-py3-none-any.whl", "has_sig": false, "md5_digest": "7b769107a8e718cab8c7669c82b99b57", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 25579, "upload_time": "2019-07-19T10:09:31", "url": "https://files.pythonhosted.org/packages/32/58/ebcac45a6c0a9f21cd6b3fb5baa248f10c3016319db80d9eac2e11b9c4dc/achilles-0.0.13-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b8eeea0fee2d8c6804cbeb7a453db292", "sha256": "f3de49c8db221c1c55072269edee43284d66cbc4f47933b6274a80b0c3680496" }, "downloads": -1, "filename": "achilles-0.0.13.tar.gz", "has_sig": false, "md5_digest": "b8eeea0fee2d8c6804cbeb7a453db292", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14986, "upload_time": "2019-07-19T10:09:33", "url": "https://files.pythonhosted.org/packages/e0/d4/c60ca3fbcaa5d5787caf330d7362350aae98f3f4c8c944f711d2a40c3374/achilles-0.0.13.tar.gz" } ], "0.0.14": [ { "comment_text": "", "digests": { "md5": "4d8f15eb45d4f6e48bd8161c3483fc43", "sha256": "232e251b73c064d2e958548bfd051ba4b63d1263ac899da33971ad6039d94e4e" }, "downloads": -1, "filename": "achilles-0.0.14-py3-none-any.whl", "has_sig": false, "md5_digest": "4d8f15eb45d4f6e48bd8161c3483fc43", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 25576, "upload_time": "2019-07-19T10:14:13", "url": "https://files.pythonhosted.org/packages/09/81/5f0ab577d116bd915012179f7d40ce9b32a5d962fe08381f445a50352e58/achilles-0.0.14-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d9482df66ad7526fdc2a89d683b9f69a", "sha256": "768f323efa2560b8a00bbc199c12330d21b81c5a7a18abb1dc5f55b869834ee3" }, "downloads": -1, "filename": "achilles-0.0.14.tar.gz", "has_sig": false, "md5_digest": "d9482df66ad7526fdc2a89d683b9f69a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14973, "upload_time": "2019-07-19T10:14:14", "url": "https://files.pythonhosted.org/packages/fa/38/a87cc1b47c333d13e8cc57741fc6216dd59e8288c764399201e3f6b32657/achilles-0.0.14.tar.gz" } ], "0.0.15": [ { "comment_text": "", "digests": { "md5": "051edde5bea6e8bc840ece309d2ca54a", "sha256": "a7fa67042a16fdfccb6cd5a701616ef550d94f5d2dbfaa9c10ce3d7679efec5f" }, "downloads": -1, "filename": "achilles-0.0.15-py3-none-any.whl", "has_sig": false, "md5_digest": "051edde5bea6e8bc840ece309d2ca54a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 25576, "upload_time": "2019-07-19T10:23:38", "url": "https://files.pythonhosted.org/packages/ae/46/e1166ad042c70b023ef3e71d9c40826cecf238435ef07761bd892b68412b/achilles-0.0.15-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "32e00603cd6787abf41e8a4a9aaa6f7f", "sha256": "ca16e99b522ed0cb5152faa9f8b3f0a443e08765004ae5678243d24c38316a22" }, "downloads": -1, "filename": "achilles-0.0.15.tar.gz", "has_sig": false, "md5_digest": "32e00603cd6787abf41e8a4a9aaa6f7f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14986, "upload_time": "2019-07-19T10:23:40", "url": "https://files.pythonhosted.org/packages/09/41/2ce4ff81c6b23fd40e10b4143e52bb9eda54f1b5b61066177c97c2998388/achilles-0.0.15.tar.gz" } ], "0.0.16": [ { "comment_text": "", "digests": { "md5": "b2927da56fec538d16f99828a1e13271", "sha256": "8497af40b941a4c69ff8ee04ebd12a949d2519479c0081bd52b224da568ce5f3" }, "downloads": -1, "filename": "achilles-0.0.16-py3-none-any.whl", "has_sig": false, "md5_digest": "b2927da56fec538d16f99828a1e13271", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 25572, "upload_time": "2019-07-19T10:28:16", "url": "https://files.pythonhosted.org/packages/24/78/270ac7aec2dad16130d59642b9c4911903b29cfec1330f82a1996d9a2b22/achilles-0.0.16-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d7c524f38f2d4ed084567a1f749b04e1", "sha256": "3cc1fc9d8dcf7239b3e3075a3308337a2531b14c0c2479cffc8157efa6bdf8aa" }, "downloads": -1, "filename": "achilles-0.0.16.tar.gz", "has_sig": false, "md5_digest": "d7c524f38f2d4ed084567a1f749b04e1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14979, "upload_time": "2019-07-19T10:28:18", "url": "https://files.pythonhosted.org/packages/70/4c/182d0440676d58ac31f8a8e854429d654e626135124bedc0eceb4e1a6e7c/achilles-0.0.16.tar.gz" } ], "0.0.161": [ { "comment_text": "", "digests": { "md5": "fe0794a296c3c026c4fa3edc69b3b75b", "sha256": "b47e53ecebde14a7eb5cb986d7fdc5f735159fbea1fccb328676cb57405cfd59" }, "downloads": -1, "filename": "achilles-0.0.161-py3-none-any.whl", "has_sig": false, "md5_digest": "fe0794a296c3c026c4fa3edc69b3b75b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 26991, "upload_time": "2019-07-19T17:28:44", "url": "https://files.pythonhosted.org/packages/e2/2f/ee4988d664f22936f8bbfc2eca90c7f60e387c1425503785782b9ce2518f/achilles-0.0.161-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c692d3d7a847a38535c7513a7cbc4cea", "sha256": "0e75b5be46302ed13fa7b3c860550e53c2715f73ac42a50dd8914bfbcd7559fe" }, "downloads": -1, "filename": "achilles-0.0.161.tar.gz", "has_sig": false, "md5_digest": "c692d3d7a847a38535c7513a7cbc4cea", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15181, "upload_time": "2019-07-19T17:28:46", "url": "https://files.pythonhosted.org/packages/08/93/af1e0dfbe942938007cd4140840dc5a8fc906baad4e39d2eed17dd448018/achilles-0.0.161.tar.gz" } ], "0.0.162": [ { "comment_text": "", "digests": { "md5": "3122e6eb8a872641e4f3253e293c72df", "sha256": "d45de2ed70cfe88adad523f9681fbfe3cfa30fe75c02f3efec9377e1ad16cd04" }, "downloads": -1, "filename": "achilles-0.0.162-py3-none-any.whl", "has_sig": false, "md5_digest": "3122e6eb8a872641e4f3253e293c72df", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 26949, "upload_time": "2019-07-19T17:38:20", "url": "https://files.pythonhosted.org/packages/fa/85/0afd2818bffbbe7ad01d1fc00ccf61973493d2417081a1576a776e57c397/achilles-0.0.162-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f65d9949b00645a2ba99592fdeacc9b0", "sha256": "73c55596a5e42afad86cdf991eed9b4e0562af486db316fa2c1d2841c9442920" }, "downloads": -1, "filename": "achilles-0.0.162.tar.gz", "has_sig": false, "md5_digest": "f65d9949b00645a2ba99592fdeacc9b0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15147, "upload_time": "2019-07-19T17:38:21", "url": "https://files.pythonhosted.org/packages/23/9d/8decc65d435b01fe0a82042338b5f301cdc61a8c7db08869102dd129e842/achilles-0.0.162.tar.gz" } ], "0.0.163": [ { "comment_text": "", "digests": { "md5": "a2ae9dde97cd5785e373d52792795e24", "sha256": "a830f24931c3961c137838e150d8266dbe9d299adf8f623f69c519051186352c" }, "downloads": -1, "filename": "achilles-0.0.163-py3-none-any.whl", "has_sig": false, "md5_digest": "a2ae9dde97cd5785e373d52792795e24", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 27629, "upload_time": "2019-07-20T00:25:34", "url": "https://files.pythonhosted.org/packages/bd/d5/393d1d4420c06701d400c9dec1c8cf4702a3ee8706cd3be5dd3300d7b9f3/achilles-0.0.163-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f3987f0866e96b6781f73a4484f70c74", "sha256": "5e878c29dd26f9c9505fbd9e4861e1f0dabecae1802bbae374b38352f0c9f023" }, "downloads": -1, "filename": "achilles-0.0.163.tar.gz", "has_sig": false, "md5_digest": "f3987f0866e96b6781f73a4484f70c74", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15583, "upload_time": "2019-07-20T00:25:36", "url": "https://files.pythonhosted.org/packages/69/af/8580d5646fd0dc2a009d5777cda8d527b3bde2ac49fbefba9f0995d347a2/achilles-0.0.163.tar.gz" } ], "0.0.164": [ { "comment_text": "", "digests": { "md5": "eb8b1079df7d0ad7b2bdeb3a52fa3b2b", "sha256": "d819a957263754f52a2effc6c3d4b856691140dee1377bf760398187edb86f06" }, "downloads": -1, "filename": "achilles-0.0.164-py3-none-any.whl", "has_sig": false, "md5_digest": "eb8b1079df7d0ad7b2bdeb3a52fa3b2b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 27646, "upload_time": "2019-07-20T00:55:02", "url": "https://files.pythonhosted.org/packages/ca/77/6449657191b713048ac054f79f50fe5d8d89785ff7f31c49ac7584948341/achilles-0.0.164-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "27468df38137a94273a054c11f277664", "sha256": "037bc7c5c0b2fc4aafd3fb1307d48fbe9538f4d7a645fd4bf5adb6d1ca8439d5" }, "downloads": -1, "filename": "achilles-0.0.164.tar.gz", "has_sig": false, "md5_digest": "27468df38137a94273a054c11f277664", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15608, "upload_time": "2019-07-20T00:55:03", "url": "https://files.pythonhosted.org/packages/aa/67/9faa9ca174e6e25f65d0262298abedd5127496a053180e9cfa6b5742646f/achilles-0.0.164.tar.gz" } ], "0.0.165": [ { "comment_text": "", "digests": { "md5": "4bcbef78da602f9d598ed945b15fef42", "sha256": "7e241c4773dbc942601427a6b1b90389bbdcc69f775def31fc4da141d968b3c6" }, "downloads": -1, "filename": "achilles-0.0.165-py3-none-any.whl", "has_sig": false, "md5_digest": "4bcbef78da602f9d598ed945b15fef42", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 27658, "upload_time": "2019-07-20T01:17:12", "url": "https://files.pythonhosted.org/packages/3b/9e/55d8cae2764972f5b9c15cb942e4491efe465577205f33b752d986ba84aa/achilles-0.0.165-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b6bf53fd1575a5cf689a4060cdc437b3", "sha256": "de9194f400a5a8c1a68ead617327408d0d5c5a843b6f293cb4a1ef66f6f68efd" }, "downloads": -1, "filename": "achilles-0.0.165.tar.gz", "has_sig": false, "md5_digest": "b6bf53fd1575a5cf689a4060cdc437b3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15639, "upload_time": "2019-07-20T01:17:15", "url": "https://files.pythonhosted.org/packages/87/b4/2d0806ca38cd61550ce4279e76172b0f0e66ed5ee1928e501ff7767cfd7a/achilles-0.0.165.tar.gz" } ], "0.0.166": [ { "comment_text": "", "digests": { "md5": "bb03083cb601ccd58eae9d56f8bcb7a7", "sha256": "3e3b40ff2001bd82c653494f43f11656566265d971a923808bb8a7a03426ea4b" }, "downloads": -1, "filename": "achilles-0.0.166-py3-none-any.whl", "has_sig": false, "md5_digest": "bb03083cb601ccd58eae9d56f8bcb7a7", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 27664, "upload_time": "2019-07-20T01:26:01", "url": "https://files.pythonhosted.org/packages/37/50/6f4bd4319225b10afebb885deaafce4bf5f21825d18ed4899d0ae326470f/achilles-0.0.166-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "96e05675cf86e3186b26fc28ef90023e", "sha256": "9a82c2983bbee294ae0497a06923a1d192a4836e3e77a322261ee822a5775987" }, "downloads": -1, "filename": "achilles-0.0.166.tar.gz", "has_sig": false, "md5_digest": "96e05675cf86e3186b26fc28ef90023e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15645, "upload_time": "2019-07-20T01:26:03", "url": "https://files.pythonhosted.org/packages/39/73/718c0996b25df5f3eb674b115e1e24d5d3025e21e85f979eb765cc5a7dac/achilles-0.0.166.tar.gz" } ], "0.0.167": [ { "comment_text": "", "digests": { "md5": "27612e8f5c53f96d034d8bb5015b5cb1", "sha256": "9f84c141faddf8676064fc6211b6ecf0df56c300b1e1828069425c533024d063" }, "downloads": -1, "filename": "achilles-0.0.167-py3-none-any.whl", "has_sig": false, "md5_digest": "27612e8f5c53f96d034d8bb5015b5cb1", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 27666, "upload_time": "2019-07-20T01:47:29", "url": "https://files.pythonhosted.org/packages/a8/69/0d29d96496fac55f7a02c2c90821e832192554a15f07b85478b47d04bae8/achilles-0.0.167-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fb4a7d67e0e828d6f432b057cdd556f7", "sha256": "d84bb0d900383ecf548541428250903d10d22bcdfe7a62a82d6bcddab85b6b1e" }, "downloads": -1, "filename": "achilles-0.0.167.tar.gz", "has_sig": false, "md5_digest": "fb4a7d67e0e828d6f432b057cdd556f7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16019, "upload_time": "2019-07-20T01:47:31", "url": "https://files.pythonhosted.org/packages/12/58/2060bc3e30484663ec198640f0bdde3212af6975e21f845f637ac1f0812d/achilles-0.0.167.tar.gz" } ], "0.0.168": [ { "comment_text": "", "digests": { "md5": "5935e936c18fa354d8d4a1ec81908729", "sha256": "fbbb371b7bffbdeaa2ffbbca0f5a97c5a351b776b582d84c76f3657e6c52af82" }, "downloads": -1, "filename": "achilles-0.0.168-py3-none-any.whl", "has_sig": false, "md5_digest": "5935e936c18fa354d8d4a1ec81908729", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 28318, "upload_time": "2019-07-20T02:01:01", "url": "https://files.pythonhosted.org/packages/0f/e2/7322bd4638d3a872229ef2afed92cf3f82446f4addee34b789426e74b141/achilles-0.0.168-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "55bf9c06fba9752f6f99de0385c7df28", "sha256": "1d020d5cbd1397300c030213366cb97fd84069dad5e3613bd9d33f158dedfa81" }, "downloads": -1, "filename": "achilles-0.0.168.tar.gz", "has_sig": false, "md5_digest": "55bf9c06fba9752f6f99de0385c7df28", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16028, "upload_time": "2019-07-20T02:01:02", "url": "https://files.pythonhosted.org/packages/7f/6f/41a693af1a0ee00f6623ee8184087c285cda7e47f699c2f4839f6b5445a8/achilles-0.0.168.tar.gz" } ], "0.0.170": [ { "comment_text": "", "digests": { "md5": "063b5791b27a094f6b2dc01fc6e1d4b5", "sha256": "e6b6a29c5c97f5082dae16fd549f60f732af3f366cd0c5e8d6a5cba4166c3380" }, "downloads": -1, "filename": "achilles-0.0.170-py3-none-any.whl", "has_sig": false, "md5_digest": "063b5791b27a094f6b2dc01fc6e1d4b5", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 29166, "upload_time": "2019-07-25T20:04:46", "url": "https://files.pythonhosted.org/packages/6c/92/f30d65293181fec86dfb9e2b47b985fb78243d0a7c1e0deff2b1d2600de2/achilles-0.0.170-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "41403efb2b8f7807abf158cdd0dfbc79", "sha256": "3fe2b9d8b2831981c2dae3d2c4923d9af96cefdc053a70f716fb94771fda7cdc" }, "downloads": -1, "filename": "achilles-0.0.170.tar.gz", "has_sig": false, "md5_digest": "41403efb2b8f7807abf158cdd0dfbc79", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12569, "upload_time": "2019-07-25T20:04:48", "url": "https://files.pythonhosted.org/packages/94/0a/64efe7294d88b0546267e4b699b9a90e9870aec02fbcad075958127ebce9/achilles-0.0.170.tar.gz" } ], "0.0.171": [ { "comment_text": "", "digests": { "md5": "6bed20fde939e54b88b17c8cc15f47e6", "sha256": "dabef655dc1d88f9c7c334d14b01ff863b7ef83e0ecb8b834d1c57257ae194e7" }, "downloads": -1, "filename": "achilles-0.0.171-py3-none-any.whl", "has_sig": false, "md5_digest": "6bed20fde939e54b88b17c8cc15f47e6", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 29169, "upload_time": "2019-07-25T20:11:34", "url": "https://files.pythonhosted.org/packages/1f/13/384db50de39d9547508f0497ef2225da97b1685f3f92ac7fb9ecce071d37/achilles-0.0.171-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3d9c3aed09e6d897701d16f22129ba7f", "sha256": "dd8d0649684bac9530f96369ab45c553936c9cd93c4054d53bf39cd68fc96f84" }, "downloads": -1, "filename": "achilles-0.0.171.tar.gz", "has_sig": false, "md5_digest": "3d9c3aed09e6d897701d16f22129ba7f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12569, "upload_time": "2019-07-25T20:11:36", "url": "https://files.pythonhosted.org/packages/b7/b1/0dba0ac4aeee5a43e37299a9999d401ebfec27d6f23e63f00e735b96b0de/achilles-0.0.171.tar.gz" } ], "0.0.172": [ { "comment_text": "", "digests": { "md5": "e4900bed3d28d462403757941912cf6e", "sha256": "d858d010d1a694db4525612327c7311534120726968285ab15cc9a0b86329889" }, "downloads": -1, "filename": "achilles-0.0.172-py3-none-any.whl", "has_sig": false, "md5_digest": "e4900bed3d28d462403757941912cf6e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 29199, "upload_time": "2019-07-28T12:53:33", "url": "https://files.pythonhosted.org/packages/8a/9c/3d236845ea582c56f609de59cffaa28f2b0cb5321de4bd6aa6679d8aa168/achilles-0.0.172-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1e5a77fabe8216d78a96c0d610909724", "sha256": "e20d6af87d7038db1b8b84eb6a2b59932cfa835299fe21960ff864089368e9c5" }, "downloads": -1, "filename": "achilles-0.0.172.tar.gz", "has_sig": false, "md5_digest": "1e5a77fabe8216d78a96c0d610909724", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12605, "upload_time": "2019-07-28T12:53:35", "url": "https://files.pythonhosted.org/packages/fa/a4/5386c8c32c9e7d510bf8882117378c54a1e1b7271d0e631ad8ee808143da/achilles-0.0.172.tar.gz" } ], "0.0.173": [ { "comment_text": "", "digests": { "md5": "88cef7cff48578c975b0b328c49f6a30", "sha256": "ac0b513cbdb1518bb068d938c8fbb9d357d4b7c0fc3dda4d122731e85726e9a5" }, "downloads": -1, "filename": "achilles-0.0.173-py3-none-any.whl", "has_sig": false, "md5_digest": "88cef7cff48578c975b0b328c49f6a30", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 29283, "upload_time": "2019-07-28T13:37:20", "url": "https://files.pythonhosted.org/packages/c4/1f/5b856ed25c7b9dffada289af36c5a6f4f5fb2cd84dcbccf63dba20415b96/achilles-0.0.173-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "aff4f171dc61b4e55120b5a24911abba", "sha256": "6e5d62b690bb6fd2a1307932cf4d42b0153fee735c9920a70f4d66efc6c93543" }, "downloads": -1, "filename": "achilles-0.0.173.tar.gz", "has_sig": false, "md5_digest": "aff4f171dc61b4e55120b5a24911abba", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12689, "upload_time": "2019-07-28T13:37:23", "url": "https://files.pythonhosted.org/packages/f4/cc/f5d5a87418cd4b3688444129520d0ac5a22982c7f44c05850d47ca89c67e/achilles-0.0.173.tar.gz" } ], "0.0.180": [ { "comment_text": "", "digests": { "md5": "668f10d3ce992aba9803af7ec779113f", "sha256": "92f2488db762f47c723a9cd26a21abbee546ac9136213b4c5adef175838a36c0" }, "downloads": -1, "filename": "achilles-0.0.180-py3-none-any.whl", "has_sig": false, "md5_digest": "668f10d3ce992aba9803af7ec779113f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 33724, "upload_time": "2019-08-19T14:06:27", "url": "https://files.pythonhosted.org/packages/54/9e/06f691aea5f02dfdb9f3ef5c131d1f38d00953172b944b3e390d5d451907/achilles-0.0.180-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a8b4dd7a9bce3c6130edc40ac04c8452", "sha256": "40cdfd6ee91c11393464cc4e568c0450d80eed6e79af40500a05d996b086b0e2" }, "downloads": -1, "filename": "achilles-0.0.180.tar.gz", "has_sig": false, "md5_digest": "a8b4dd7a9bce3c6130edc40ac04c8452", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18555, "upload_time": "2019-08-19T14:06:30", "url": "https://files.pythonhosted.org/packages/38/3c/5968121df89b15286ebbbb077039a3cd38005918d8640726e7584e659a58/achilles-0.0.180.tar.gz" } ], "0.0.181": [ { "comment_text": "", "digests": { "md5": "f826fe8433ec9e6e786af61322807b12", "sha256": "b509e1d83450b3fcd9e43017e74bf1f7cd61bcd1b84af0e926ad0dcb43f05b5c" }, "downloads": -1, "filename": "achilles-0.0.181-py3-none-any.whl", "has_sig": false, "md5_digest": "f826fe8433ec9e6e786af61322807b12", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 34060, "upload_time": "2019-08-23T16:31:50", "url": "https://files.pythonhosted.org/packages/77/e0/49ebd6b215c3618619eacca311b0f8a4fa986c26b56e86bb0f2daf183f93/achilles-0.0.181-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0513eb551bd39fb1791f7a25f804edfb", "sha256": "be07aeebf7bd8802ae8d51359d3679ef6fcce2e4f9ea133ef644c4a16e11d410" }, "downloads": -1, "filename": "achilles-0.0.181.tar.gz", "has_sig": false, "md5_digest": "0513eb551bd39fb1791f7a25f804edfb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18122, "upload_time": "2019-08-23T16:31:52", "url": "https://files.pythonhosted.org/packages/68/12/f0ed53d50f6e1c564d054f8e2d7ff0f50503b45686b791e883e52f4d85f6/achilles-0.0.181.tar.gz" } ], "0.0.182": [ { "comment_text": "", "digests": { "md5": "badb9723dd9861c48b6388dc4d1a9a82", "sha256": "8742ffa1e57a9a1de40d8a7435dde94c32268675b788a03e0a92e30a52b60a1c" }, "downloads": -1, "filename": "achilles-0.0.182-py3-none-any.whl", "has_sig": false, "md5_digest": "badb9723dd9861c48b6388dc4d1a9a82", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 34267, "upload_time": "2019-08-27T18:02:22", "url": "https://files.pythonhosted.org/packages/3d/d8/2f1666e22d8e3bd343e4c076047a94b8946ba0f582194e841f3279e60414/achilles-0.0.182-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e261073caf0e15da60208a9a69da2d03", "sha256": "85a746f2c11fc6890c76a710272537901fc34445a018c2ab5129a903c6e4844e" }, "downloads": -1, "filename": "achilles-0.0.182.tar.gz", "has_sig": false, "md5_digest": "e261073caf0e15da60208a9a69da2d03", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18334, "upload_time": "2019-08-27T18:02:24", "url": "https://files.pythonhosted.org/packages/2b/9d/02977f1b7f7bec5741bc159e3f00cdd12fd9794c3257d4b9e713e05a3dee/achilles-0.0.182.tar.gz" } ], "0.0.183": [ { "comment_text": "", "digests": { "md5": "2ead6607075149164b74688d7a8e862c", "sha256": "52141d7aa3f38111e2efc73127d9b2048c0884eb761f5d422c67d871f704b486" }, "downloads": -1, "filename": "achilles-0.0.183-py3-none-any.whl", "has_sig": false, "md5_digest": "2ead6607075149164b74688d7a8e862c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 34645, "upload_time": "2019-08-27T22:27:54", "url": "https://files.pythonhosted.org/packages/15/ce/a4ee101ae8603c89e04013f0955e799c9fce084d7fb83b9436d34c7f0e31/achilles-0.0.183-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "640ad5084377ddb1674a7163660148b3", "sha256": "69b034b0a2b408c41103eca5b87a2b1510bb156fa9a6af91237fdd280c717621" }, "downloads": -1, "filename": "achilles-0.0.183.tar.gz", "has_sig": false, "md5_digest": "640ad5084377ddb1674a7163660148b3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18919, "upload_time": "2019-08-27T22:27:56", "url": "https://files.pythonhosted.org/packages/fa/fc/e2417e0e597b30b0e006aa5e607cbc58b2195a60e7b7b5f6616c6fb29de8/achilles-0.0.183.tar.gz" } ], "0.0.184": [ { "comment_text": "", "digests": { "md5": "f5c6e39f16d53ef2b6204394ef3b264f", "sha256": "d95296b65f9d310b0260d7dff403a376b087a1c8ff45c3a9300c442e5c7fd8a3" }, "downloads": -1, "filename": "achilles-0.0.184-py3-none-any.whl", "has_sig": false, "md5_digest": "f5c6e39f16d53ef2b6204394ef3b264f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 35622, "upload_time": "2019-08-31T18:18:53", "url": "https://files.pythonhosted.org/packages/75/54/0e4aff64193a07e58c790c43ac8e960319a063c6a22489bcb5e407e08b54/achilles-0.0.184-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0a343acec34e939c01c793e96d9f673f", "sha256": "fb51531e4d66b9f705cdf918b5613a84cdb4388fc77c39c60dc3164d3d06be66" }, "downloads": -1, "filename": "achilles-0.0.184.tar.gz", "has_sig": false, "md5_digest": "0a343acec34e939c01c793e96d9f673f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19512, "upload_time": "2019-08-31T18:18:57", "url": "https://files.pythonhosted.org/packages/48/9d/b311b3d373e61e83f3f74eee42bd0f06c3db36f7f83087c995be3e112e8c/achilles-0.0.184.tar.gz" } ], "0.0.185": [ { "comment_text": "", "digests": { "md5": "2b84114dce513e273f029bacb0b9b50b", "sha256": "b4d81c23937c8dfb275fd3a4663562670f6a8bc8036db595fb257a918758b5f5" }, "downloads": -1, "filename": "achilles-0.0.185-py3-none-any.whl", "has_sig": false, "md5_digest": "2b84114dce513e273f029bacb0b9b50b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 35630, "upload_time": "2019-08-31T19:14:08", "url": "https://files.pythonhosted.org/packages/6b/aa/338f57372a71af7476e996ea48a7836b62dadf86bbfa53fb04f110ebd870/achilles-0.0.185-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "268a72d8c95d9442cb94c7f27e4e44e4", "sha256": "2bb5f4b3ed339e23d990aed018f45d0a7cc61537dc7601b4f4165c31724831bd" }, "downloads": -1, "filename": "achilles-0.0.185.tar.gz", "has_sig": false, "md5_digest": "268a72d8c95d9442cb94c7f27e4e44e4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19520, "upload_time": "2019-08-31T19:14:13", "url": "https://files.pythonhosted.org/packages/ee/36/586ccfcaf9b9be6c12e2c9b8b2591ea1becbfcf59639e52a139834bf0d5d/achilles-0.0.185.tar.gz" } ], "0.0.186": [ { "comment_text": "", "digests": { "md5": "43abdd61ac08865d2dad43414c1892fb", "sha256": "a0acc76c7636e06b18604d69caf30e3be99171ca54da73450a0bfc9aed6f28ec" }, "downloads": -1, "filename": "achilles-0.0.186-py3-none-any.whl", "has_sig": false, "md5_digest": "43abdd61ac08865d2dad43414c1892fb", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 35725, "upload_time": "2019-09-02T23:29:04", "url": "https://files.pythonhosted.org/packages/2a/1d/6e897ded3be5e6bc0f2067b872e8c48164818e2dd984400178ecc3c2b3be/achilles-0.0.186-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a46ec7d223129518a3647d19c1e7a9e7", "sha256": "3abb6335c33e8755e46944dc3ffafde385fe8656735bd32ba2f7add35cb5718d" }, "downloads": -1, "filename": "achilles-0.0.186.tar.gz", "has_sig": false, "md5_digest": "a46ec7d223129518a3647d19c1e7a9e7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19598, "upload_time": "2019-09-02T23:29:09", "url": "https://files.pythonhosted.org/packages/84/be/6d2da1ddf9cf844350a2c60590259b9d8bdd7339c8aa33e212e4c2cce127/achilles-0.0.186.tar.gz" } ], "0.0.187": [ { "comment_text": "", "digests": { "md5": "940a616c1c0f4c73a783819247958531", "sha256": "6748594deeb1db34bdca7221f137568b778ad22b958480ef8debca79878bcd74" }, "downloads": -1, "filename": "achilles-0.0.187-py3-none-any.whl", "has_sig": false, "md5_digest": "940a616c1c0f4c73a783819247958531", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 35735, "upload_time": "2019-09-02T23:45:00", "url": "https://files.pythonhosted.org/packages/d8/12/16b6ca753f11ebceb70257b1d3b32453164ff39cded3db438016918eec94/achilles-0.0.187-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9c1246f2e6313d51f15eee72ec2fd0d3", "sha256": "b6e8236779d1b702dc1411e4c133a16f3cea89f333da5021c9daafe9f2e5f3b6" }, "downloads": -1, "filename": "achilles-0.0.187.tar.gz", "has_sig": false, "md5_digest": "9c1246f2e6313d51f15eee72ec2fd0d3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19600, "upload_time": "2019-09-02T23:45:07", "url": "https://files.pythonhosted.org/packages/84/45/a6b361af9a3f0eda1b12333fda2f97b301cdd26d5e75d558182f6edfacfd/achilles-0.0.187.tar.gz" } ], "0.0.189": [ { "comment_text": "", "digests": { "md5": "9bc82fcb8711072ee6b1a2b43f744c32", "sha256": "ec5d598fef43328aa09ff47ba7d48b0650cb23ad74379642c051d3d4fb9f475a" }, "downloads": -1, "filename": "achilles-0.0.189-py3-none-any.whl", "has_sig": false, "md5_digest": "9bc82fcb8711072ee6b1a2b43f744c32", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 35744, "upload_time": "2019-09-03T00:29:29", "url": "https://files.pythonhosted.org/packages/f3/f0/7b0cb615707cbbe0ebca022a1aec4cad7048e4e1753441b821642062171c/achilles-0.0.189-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e00fc031562f97f8e0b32a9c668aad73", "sha256": "32c89bd20a25f04b8c238b2680d1eaa78624b46c09850e6165924ccdf6e6e829" }, "downloads": -1, "filename": "achilles-0.0.189.tar.gz", "has_sig": false, "md5_digest": "e00fc031562f97f8e0b32a9c668aad73", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19676, "upload_time": "2019-09-03T00:29:35", "url": "https://files.pythonhosted.org/packages/e6/65/f31b6a2d4b0875df8ca108d2f68a8d862f91b6fadf5891e22f37d421a4f2/achilles-0.0.189.tar.gz" } ], "0.0.190": [ { "comment_text": "", "digests": { "md5": "a9981ecbeded0f22bc59db2277249a8a", "sha256": "335b4c281d317f37a075bdd595f28848c29fd9f6bf6f55854327ad06b054bf59" }, "downloads": -1, "filename": "achilles-0.0.190-py3-none-any.whl", "has_sig": false, "md5_digest": "a9981ecbeded0f22bc59db2277249a8a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 35744, "upload_time": "2019-09-03T00:36:54", "url": "https://files.pythonhosted.org/packages/f4/df/fca3682d75a42bdbc2dce95e7f5642becf98af8ddc9d3423cee9e4ffd443/achilles-0.0.190-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2d22f78740235d3d2573a6351fbca227", "sha256": "621202e90d120b78ec57d25f3aa89685e7a6b79a494cdcfc91456661ab5bdf5e" }, "downloads": -1, "filename": "achilles-0.0.190.tar.gz", "has_sig": false, "md5_digest": "2d22f78740235d3d2573a6351fbca227", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19683, "upload_time": "2019-09-03T00:37:02", "url": "https://files.pythonhosted.org/packages/16/6e/6dfcba13d57f31aeca80268e0394b8ca4b194ebf3fb484b2961d2dae00e3/achilles-0.0.190.tar.gz" } ], "0.0.191": [ { "comment_text": "", "digests": { "md5": "fa7977d77b5d04357684818f8aeb8897", "sha256": "504d5d45ba5c5b4cefa69488ecd849aaf869da36ae50bacc7e3007ca9b2166ad" }, "downloads": -1, "filename": "achilles-0.0.191-py3-none-any.whl", "has_sig": false, "md5_digest": "fa7977d77b5d04357684818f8aeb8897", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 35749, "upload_time": "2019-09-03T00:52:39", "url": "https://files.pythonhosted.org/packages/0f/da/8dd1499cf90b545dcbecbbd36289e254ac695550d53dba7c8f5ff4f8c420/achilles-0.0.191-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "472cca2e37264bf1ed06a99cea7f6c0c", "sha256": "f190337e22e5e2232f4cdcb12a0601dc8de1ff148e08ebbe9ad37c29e435e883" }, "downloads": -1, "filename": "achilles-0.0.191.tar.gz", "has_sig": false, "md5_digest": "472cca2e37264bf1ed06a99cea7f6c0c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19808, "upload_time": "2019-09-03T00:52:46", "url": "https://files.pythonhosted.org/packages/25/ea/aa4750f5aea7e8bac57cc5e394e1c44937389a9a969569864e8e49ce6310/achilles-0.0.191.tar.gz" } ], "0.0.192": [ { "comment_text": "", "digests": { "md5": "6d31dfda66b9d0b06d43ead581be49ea", "sha256": "64b493d94788a5aadacd82a959efa04009a7dab9156e67370bd965f972fe4622" }, "downloads": -1, "filename": "achilles-0.0.192-py3-none-any.whl", "has_sig": false, "md5_digest": "6d31dfda66b9d0b06d43ead581be49ea", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 35758, "upload_time": "2019-09-03T01:06:31", "url": "https://files.pythonhosted.org/packages/fb/70/99d7baa47653609b5b9f592b257c25872c6f63aadea59ce4105ff07d04ff/achilles-0.0.192-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "46b873a3d4df9c10ec041d4c4cef8616", "sha256": "35acdfb79f99343633d22be3a94487e71d40096469ae843d94ffe7848b3ec93a" }, "downloads": -1, "filename": "achilles-0.0.192.tar.gz", "has_sig": false, "md5_digest": "46b873a3d4df9c10ec041d4c4cef8616", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19798, "upload_time": "2019-09-03T01:06:39", "url": "https://files.pythonhosted.org/packages/0e/1d/736d05a3c798a928b671b368d27dca6e8841c36be3e24c774d980ffc7897/achilles-0.0.192.tar.gz" } ], "0.0.193": [ { "comment_text": "", "digests": { "md5": "19ef2c699062dd2a04203431e6aedc66", "sha256": "ce2c3d0cda1c9959f3c8762bd37a6b73441ec0bcc44326a3d9be24864aa33176" }, "downloads": -1, "filename": "achilles-0.0.193-py3-none-any.whl", "has_sig": false, "md5_digest": "19ef2c699062dd2a04203431e6aedc66", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 35939, "upload_time": "2019-09-07T17:34:43", "url": "https://files.pythonhosted.org/packages/a2/e9/3d057f7039c9c92ca2ba94abed6fa962429138d9344beeeaef167ab445da/achilles-0.0.193-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c31c43ea77128310a7ef82351affcdc4", "sha256": "10ad509201f21b816c292022a0fa34f41353be3efe2da85e0135436e57610460" }, "downloads": -1, "filename": "achilles-0.0.193.tar.gz", "has_sig": false, "md5_digest": "c31c43ea77128310a7ef82351affcdc4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19454, "upload_time": "2019-09-07T17:34:45", "url": "https://files.pythonhosted.org/packages/a3/97/8ab9109affaf717e068171ef87b823e4003ee030f3258ee6172b9077fc9e/achilles-0.0.193.tar.gz" } ], "0.0.194": [ { "comment_text": "", "digests": { "md5": "db19b8f4cd7315290ea5ba3e0ae5cd7d", "sha256": "7db4387e956660250694bba875fd78a71e8b0268a5cd3b614b75ab956f7d0321" }, "downloads": -1, "filename": "achilles-0.0.194-py3-none-any.whl", "has_sig": false, "md5_digest": "db19b8f4cd7315290ea5ba3e0ae5cd7d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 35952, "upload_time": "2019-09-12T16:54:20", "url": "https://files.pythonhosted.org/packages/20/ae/82166c3624e93ddf59eb3875428d2e79a1fdc72e77760e0a3c7637eae38a/achilles-0.0.194-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fcdc94ccf02b9737ee57033d23754d91", "sha256": "c72913cb370824aef101758f222a2b7c2911d04561515ab3ec4b98de8c9279ba" }, "downloads": -1, "filename": "achilles-0.0.194.tar.gz", "has_sig": false, "md5_digest": "fcdc94ccf02b9737ee57033d23754d91", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19467, "upload_time": "2019-09-12T16:54:22", "url": "https://files.pythonhosted.org/packages/23/ee/6981c4167ecc928cb5616002d00e6d2e0dc2159b5488e6fc5b53adfd5ee9/achilles-0.0.194.tar.gz" } ], "0.0.195": [ { "comment_text": "", "digests": { "md5": "40b9ad925163b068b35f7f2e8bc895b5", "sha256": "576f045ce38a0eb1817d1079b11ca7f1536f827e15578904d5e0ffa0323d78ce" }, "downloads": -1, "filename": "achilles-0.0.195-py3-none-any.whl", "has_sig": false, "md5_digest": "40b9ad925163b068b35f7f2e8bc895b5", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 35959, "upload_time": "2019-09-26T00:44:15", "url": "https://files.pythonhosted.org/packages/d6/71/ce0e97639f1dc29653ab3ed63ea6d0a2d850b3cfe78c35c9516351ab2f1f/achilles-0.0.195-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1e7f47df06a3319fb90fb0f2fde30b09", "sha256": "25c74b3d20cea448811c7686bd89871929dafba645e2c2388e07f9f77c37b02a" }, "downloads": -1, "filename": "achilles-0.0.195.tar.gz", "has_sig": false, "md5_digest": "1e7f47df06a3319fb90fb0f2fde30b09", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19477, "upload_time": "2019-09-26T00:44:19", "url": "https://files.pythonhosted.org/packages/ea/df/97ee217f6e22407b25404eda1d522d86b3407333e01c6a7adf0efd9cbd57/achilles-0.0.195.tar.gz" } ], "0.0.196": [ { "comment_text": "", "digests": { "md5": "6621ff5e038a6269edb78f1c553cd804", "sha256": "74659e1b9337805753bb8e1c2a840c6690645633a51ba735747730a43aee3075" }, "downloads": -1, "filename": "achilles-0.0.196-py3-none-any.whl", "has_sig": false, "md5_digest": "6621ff5e038a6269edb78f1c553cd804", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 35977, "upload_time": "2019-10-17T23:24:12", "url": "https://files.pythonhosted.org/packages/81/da/00ef31d910d7066cf30459455082d97d61f103d86e964db1dbc43c9a6f97/achilles-0.0.196-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "786265e746e4155da4e17ecc56f04672", "sha256": "16f4989f11e3316fb35510a0e13c285e895cc33fcee941300af98df1022d79e6" }, "downloads": -1, "filename": "achilles-0.0.196.tar.gz", "has_sig": false, "md5_digest": "786265e746e4155da4e17ecc56f04672", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19490, "upload_time": "2019-10-17T23:24:18", "url": "https://files.pythonhosted.org/packages/0a/e5/853a9df3f78380f34a4e34c1e557e5a08201af99eaae3460e2d3bdef0bbf/achilles-0.0.196.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "6621ff5e038a6269edb78f1c553cd804", "sha256": "74659e1b9337805753bb8e1c2a840c6690645633a51ba735747730a43aee3075" }, "downloads": -1, "filename": "achilles-0.0.196-py3-none-any.whl", "has_sig": false, "md5_digest": "6621ff5e038a6269edb78f1c553cd804", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 35977, "upload_time": "2019-10-17T23:24:12", "url": "https://files.pythonhosted.org/packages/81/da/00ef31d910d7066cf30459455082d97d61f103d86e964db1dbc43c9a6f97/achilles-0.0.196-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "786265e746e4155da4e17ecc56f04672", "sha256": "16f4989f11e3316fb35510a0e13c285e895cc33fcee941300af98df1022d79e6" }, "downloads": -1, "filename": "achilles-0.0.196.tar.gz", "has_sig": false, "md5_digest": "786265e746e4155da4e17ecc56f04672", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19490, "upload_time": "2019-10-17T23:24:18", "url": "https://files.pythonhosted.org/packages/0a/e5/853a9df3f78380f34a4e34c1e557e5a08201af99eaae3460e2d3bdef0bbf/achilles-0.0.196.tar.gz" } ] }