{ "info": { "author": "MIT Data To AI Lab", "author_email": "dailabmit@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Topic :: Scientific/Engineering :: Artificial Intelligence" ], "description": "

\n\u201cATM\u201d\nAn open source project from Data to AI Lab at MIT.\n

\n\n# ATM - Auto Tune Models\n\n\n[![CircleCI](https://circleci.com/gh/HDI-Project/ATM.svg?style=shield)](https://circleci.com/gh/HDI-Project/ATM)\n[![Travis](https://travis-ci.org/HDI-Project/ATM.svg?branch=master)](https://travis-ci.org/HDI-Project/ATM)\n[![PyPi Shield](https://img.shields.io/pypi/v/atm.svg)](https://pypi.python.org/pypi/atm)\n[![Coverage Status](https://codecov.io/gh/HDI-project/ATM/branch/master/graph/badge.svg)](https://codecov.io/gh/HDI-project/ATM)\n[![Downloads](https://pepy.tech/badge/atm)](https://pepy.tech/project/atm)\n\n\n\n\n- License: MIT\n- Documentation: https://HDI-Project.github.io/ATM/\n- Homepage: https://github.com/HDI-Project/ATM\n\n# Overview\n\nAuto Tune Models (ATM) is an AutoML system designed with ease of use in mind. In short, you give\nATM a classification problem and a dataset as a CSV file, and ATM will try to build the best model\nit can. ATM is based on a [paper](https://dai.lids.mit.edu/wp-content/uploads/2018/02/atm_IEEE_BIgData-9-1.pdf)\nof the same name, and the project is part of the [Human-Data Interaction (HDI) Project](https://hdi-dai.lids.mit.edu/) at MIT.\n\n\n# Install\n\n## Requirements\n\n**ATM** has been developed and tested on [Python 2.7, 3.5, and 3.6](https://www.python.org/downloads/)\n\nAlso, although it is not strictly required, the usage of a\n[virtualenv](https://virtualenv.pypa.io/en/latest/) is highly recommended in order to avoid\ninterfering with other software installed in the system where **ATM** is run.\n\nThese are the minimum commands needed to create a virtualenv using python3.6 for **ATM**:\n\n```bash\npip install virtualenv\nvirtualenv -p $(which python3.6) atm-venv\n```\n\nAfterwards, you have to execute this command to have the virtualenv activated:\n\n```bash\nsource atm-venv/bin/activate\n```\n\nRemember about executing it every time you start a new console to work on **ATM**!\n\n## Install with pip\n\nAfter creating the virtualenv and activating it, we recommend using\n[pip](https://pip.pypa.io/en/stable/) in order to install **ATM**:\n\n```bash\npip install atm\n```\n\nThis will pull and install the latest stable release from [PyPi](https://pypi.org/).\n\n## Install from source\n\nAlternatively, with your virtualenv activated, you can clone the repository and install it from\nsource by running `make install` on the `stable` branch:\n\n```bash\ngit clone git@github.com:HDI-Project/ATM.git\ncd ATM\ngit checkout stable\nmake install\n```\n\n## Install for Development\n\nIf you want to contribute to the project, a few more steps are required to make the project ready\nfor development.\n\nFirst, please head to [the GitHub page of the project](https://github.com/HDI-Project/ATM)\nand make a fork of the project under you own username by clicking on the **fork** button on the\nupper right corner of the page.\n\nAfterwards, clone your fork and create a branch from master with a descriptive name that includes\nthe number of the issue that you are going to work on:\n\n```bash\ngit clone git@github.com:{your username}/ATM.git\ncd ATM\ngit branch issue-xx-cool-new-feature master\ngit checkout issue-xx-cool-new-feature\n```\n\nFinally, install the project with the following command, which will install some additional\ndependencies for code linting and testing.\n\n```bash\nmake install-develop\n```\n\nMake sure to use them regularly while developing by running the commands `make lint` and `make test`.\n\n\n# Data Format\n\nATM input is always a CSV file with the following characteristics:\n\n* It uses a single comma, `,`, as the separator.\n* Its first row is a header that contains the names of the columns.\n* There is a column that contains the target variable that will need to be predicted.\n* The rest of the columns are all variables or features that will be used to predict the target column.\n* Each row corresponds to a single, complete, training sample.\n\nHere are the first 5 rows of a valid CSV with 4 features and one target column called `class` as an example:\n\n```\nfeature_01,feature_02,feature_03,feature_04,class\n5.1,3.5,1.4,0.2,Iris-setosa\n4.9,3.0,1.4,0.2,Iris-setosa\n4.7,3.2,1.3,0.2,Iris-setosa\n4.6,3.1,1.5,0.2,Iris-setosa\n```\n\nThis CSV can be passed to ATM as local filesystem path but also as a complete AWS S3 Bucket and\npath specification or as a URL.\n\nYou can find a collection of demo datasets in the [atm-data S3 Bucket in AWS](https://atm-data.s3.amazonaws.com/index.html).\n\n\n# Quickstart\n\nIn this short tutorial we will guide you through a series of steps that will help you getting\nstarted with **ATM** by exploring its Python API.\n\n## 1. Get the demo data\n\nThe first step in order to run **ATM** is to obtain the demo datasets that will be used in during\nthe rest of the tutorial.\n\nFor this demo we will be using the pollution csv from the atm-data bucket, which you can download with your browser\n[from here](https://atm-data.s3.amazonaws.com/pollution_1.csv), or using the following command:\n\n```bash\natm download_demo pollution_1.csv\n```\n\n## 2. Create an ATM instance\n\nThe first thing to do after obtaining the demo dataset is creating an ATM instance.\n\n```python\nfrom atm import ATM\n\natm = ATM()\n```\n\nBy default, if the ATM instance is without any arguments, it will create an SQLite database\ncalled `atm.db` in your current working directory.\n\nIf you want to connect to a SQL database instead, or change the location of your SQLite database,\nplease check the [API Reference](https://hdi-project.github.io/ATM/api/atm.core.html)\nfor the complete list of available options.\n\n## 3. Search for the best model\n\nOnce you have the **ATM** instance ready, you can use the method `atm.run` to start\nsearching for the model that better predicts the target column of your CSV file.\n\nThis function has to be given the path to your CSV file, which can be a local filesystem path, an URL to\nand HTTP or S3 resource.\n\nFor example, if we have previously downloaded the [pollution_1.csv](https://atm-data.s3.amazonaws.com/pollution_1.csv)\nfile inside our current working directory, we can call `run` like this:\n\n```python\nresults = atm.run(train_path='pollution_1.csv')\n```\n\nAlternatively, we can use the HTTPS URL of the file to have ATM download the CSV for us:\n\n```python\nresults = atm.run(train_path='https://atm-data.s3.amazonaws.com/pollution_1.csv')\n```\n\nAs the last option, if we have the file inside an S3 Bucket, we can download it by passing an URI\nin the `s3://{bucket}/{key}` format:\n\n```python\nresults = atm.run(train_path='s3://atm-data/pollution_1.csv')\n```\n\nIn order to make this work with a Private S3 Bucket, please make sure to having configured your\n[AWS credentials file](https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/setup-credentials.html),\nor to having created your `ATM` instance passing it the `access_key` and `secret_key` arguments.\n\nThis `run` call will start what is called a `Datarun`, and a progress bar will be displayed\nwhile the different models are tested and tuned.\n\n```python\nProcessing dataset demos/pollution_1.csv\n100%|##########################| 100/100 [00:10<00:00, 6.09it/s]\n```\n\nOnce this process has ended, a message will print that the `Datarun` has ended. Then we can\nexplore the `results` object.\n\n## 4. Explore the results\n\nOnce the Datarun has finished, we can explore the `results` object in several ways:\n\n**a. Get a summary of the Datarun**\n\nThe `describe` method will return us a summary of the Datarun execution:\n\n```python\nresults.describe()\n```\n\nThis will print a short description of this Datarun similar to this:\n\n```python\nDatarun 1 summary:\n Dataset: 'demos/pollution_1.csv'\n Column Name: 'class'\n Judgment Metric: 'f1'\n Classifiers Tested: 100\n Elapsed Time: 0:00:07.638668\n```\n\n**b. Get a summary of the best classifier**\n\nThe `get_best_classifier` method will print information about the best classifier that was found\nduring this Datarun, including the method used and the best hyperparameters found:\n\n```python\nresults.get_best_classifier()\n```\n\nThe output will be similar to this:\n\n```python\nClassifier id: 94\nClassifier type: knn\nParams chosen:\n n_neighbors: 13\n leaf_size: 38\n weights: uniform\n algorithm: kd_tree\n metric: manhattan\n _scale: True\nCross Validation Score: 0.858 +- 0.096\nTest Score: 0.714\n```\n\n**c. Explore the scores**\n\nThe `get_scores` method will return a `pandas.DataFrame` with information about all the\nclassifiers tested during the Datarun, including their cross validation scores and\nthe location of their pickled models.\n\n```python\nscores = results.get_scores()\n```\n\nThe contents of the scores dataframe should be similar to these:\n\n```python\n cv_judgment_metric cv_judgment_metric_stdev id test_judgment_metric rank\n0 0.8584126984 0.0960095737 94 0.7142857143 1.0\n1 0.8222222222 0.0623609564 12 0.6250000000 2.0\n2 0.8147619048 0.1117618135 64 0.8750000000 3.0\n3 0.8139393939 0.0588721670 68 0.6086956522 4.0\n4 0.8067754468 0.0875180564 50 0.6250000000 5.0\n...\n```\n\n## 5. Make predictions\n\nOnce we have found and explored the best classifier, we will want to make predictions with it.\n\nIn order to do this, we need to follow several steps:\n\n**a. Export the best classifier**\n\nThe `export_best_classifier` method can be used to serialize and save the best classifier model\nusing pickle in the desired location:\n\n```python\nresults.export_best_classifier('path/to/model.pkl')\n```\n\nIf the classifier has been saved correctly, a message will be printed indicating so:\n\n```python\nClassifier 94 saved as path/to/model.pkl\n```\n\nIf the path that you provide already exists, you can ovewrite it by adding the argument\n`force=True`.\n\n**b. Load the exported model**\n\nOnce it is exported you can load it back by calling the `load` method from the `atm.Model`\nclass and passing it the path where the model has been saved:\n\n```python\nfrom atm import Model\n\nmodel = Model.load('path/to/model.pkl')\n```\n\nOnce you have loaded your model, you can pass new data to its `predict` method to make\npredictions:\n\n```python\nimport pandas as pd\n\ndata = pd.read_csv(demo_datasets['pollution'])\n\npredictions = model.predict(data.head())\n```\n\n\n# What's next?\n\nFor more details about **ATM** and all its possibilities and features, please check the\n[documentation site](https://HDI-Project.github.io/ATM/).\n\nThere you can learn more about its [Command Line Interface](https://hdi-project.github.io/ATM/cli.html)\nand its [REST API](https://hdi-project.github.io/ATM/rest.html), as well as\n[how to contribute to ATM](https://HDI-Project.github.io/ATM/community/contributing.html)\nin order to help us developing new features or cool ideas.\n\n# Credits\n\nATM is an open source project from the Data to AI Lab at MIT which has been built and maintained\nover the years by the following team:\n\n* Bennett Cyphers \n* Thomas Swearingen \n* Carles Sala \n* Plamen Valentinov \n* Kalyan Veeramachaneni \n* Micah Smith \n* Laura Gustafson \n* Kiran Karra \n* Max Kanter \n* Alfredo Cuesta-Infante \n* Favio Andr\u00e9 V\u00e1zquez \n* Matteo Hoch \n\n\n## Citing ATM\n\nIf you use ATM, please consider citing the following paper:\n\nThomas Swearingen, Will Drevo, Bennett Cyphers, Alfredo Cuesta-Infante, Arun Ross, Kalyan Veeramachaneni. [ATM: A distributed, collaborative, scalable system for automated machine learning.](https://cyphe.rs/static/atm.pdf) *IEEE BigData 2017*, 151-162\n\nBibTeX entry:\n\n```bibtex\n@inproceedings{DBLP:conf/bigdataconf/SwearingenDCCRV17,\n author = {Thomas Swearingen and\n Will Drevo and\n Bennett Cyphers and\n Alfredo Cuesta{-}Infante and\n Arun Ross and\n Kalyan Veeramachaneni},\n title = {{ATM:} {A} distributed, collaborative, scalable system for automated\n machine learning},\n booktitle = {2017 {IEEE} International Conference on Big Data, BigData 2017, Boston,\n MA, USA, December 11-14, 2017},\n pages = {151--162},\n year = {2017},\n crossref = {DBLP:conf/bigdataconf/2017},\n url = {https://doi.org/10.1109/BigData.2017.8257923},\n doi = {10.1109/BigData.2017.8257923},\n timestamp = {Tue, 23 Jan 2018 12:40:42 +0100},\n biburl = {https://dblp.org/rec/bib/conf/bigdataconf/SwearingenDCCRV17},\n bibsource = {dblp computer science bibliography, https://dblp.org}\n}\n```\n\n## Related Projects\n\n### BTB\n\n[BTB](https://github.com/hdi-project/btb), for Bayesian Tuning and Bandits, is the core AutoML\nlibrary in development under the HDI project. BTB exposes several methods for hyperparameter\nselection and tuning through a common API. It allows domain experts to extend existing methods\nand add new ones easily. BTB is a central part of ATM, and the two projects were developed in\ntandem, but it is designed to be implementation-agnostic and should be useful for a wide range\nof hyperparameter selection tasks.\n\n### Featuretools\n\n[Featuretools](https://github.com/featuretools/featuretools) is a python library for automated\nfeature engineering. It can be used to prepare raw transactional and relational datasets for ATM.\nIt is created and maintained by [Feature Labs](https://www.featurelabs.com) and is also a part\nof the [Human Data Interaction Project](https://hdi-dai.lids.mit.edu/).\n\n\n# History\n\n## 0.2.2 (2019-07-30)\n\n### New Features\n\n* Curate dependencies - [Issue #152](https://github.com/HDI-Project/ATM/issues/152) by @csala\n* POST request blocked by CORS policy - [Issue #151](https://github.com/HDI-Project/ATM/issues/151) by @pvk-developer\n\n## 0.2.1 (2019-06-24)\n\n### New Features\n\n* Rest API Cross-origin resource sharing (CORS) - [Issue #146](https://github.com/HDI-Project/ATM/issues/146) by @pvk-developer\n\n## 0.2.0 (2019-05-29)\n\nNew Python API\n\n### New Features\n\n* New API for ATM usage within Python - [Issue #142](https://github.com/HDI-Project/ATM/issues/142) by\n @pvk-developer and @csala\n* Improved Documentation - [Issue #142](https://github.com/HDI-Project/ATM/issues/142) by\n @pvk-developer and @csala\n* Code cleanup - [Issue #102](https://github.com/HDI-Project/ATM/issues/102) by\n @csala\n* Ensure datasets can be downloaded from S3 - [Issue #137](https://github.com/HDI-Project/ATM/issues/137) by @pvk-developer\n* Change to PyMySQL to remove libmysqlclient-dev system dependency - [Issue #136](https://github.com/HDI-Project/ATM/issues/136) by @pvk-developer and @csala\n\n## 0.1.2 (2019-05-07)\n\nREST API and Cluster Management.\n\n### New Features\n\n* REST API Server - Issues [#82](https://github.com/HDI-Project/ATM/issues/82) and\n [#132](https://github.com/HDI-Project/ATM/issues/132) by @RogerTangos, @pvk-developer and @csala\n* Add Cluster Management commands to start and stop the server and multiple workers\n as background processes - [Issue #130](https://github.com/HDI-Project/ATM/issues/130) by\n @pvk-developer and @csala\n* Add TravisCI and migrate docs to GitHub Pages - [Issue #129](https://github.com/HDI-Project/ATM/issues/129)\n by @pvk-developer\n\n## 0.1.1 (2019-04-02)\n\nFirst Release on PyPi.\n\n### New Features\n\n* Upgrade to latest BTB.\n* New Command Line Interface.\n\n## 0.1.0 (2018-05-04)\n\n* First Release.\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/HDI-project/ATM", "keywords": "machine learning hyperparameters tuning classification", "license": "MIT license", "maintainer": "", "maintainer_email": "", "name": "atm", "package_url": "https://pypi.org/project/atm/", "platform": "", "project_url": "https://pypi.org/project/atm/", "project_urls": { "Homepage": "https://github.com/HDI-project/ATM" }, "release_url": "https://pypi.org/project/atm/0.2.2/", "requires_dist": [ "baytune (<0.3,>=0.2.5)", "boto3 (<2,>=1.9.146)", "future (<0.18,>=0.16.0)", "pymysql (<0.10,>=0.9.3)", "numpy (<1.17,>=1.13.1)", "pandas (<0.25,>=0.22.0)", "psutil (<6,>=5.6.1)", "python-daemon (<3,>=2.2.3)", "requests (<3,>=2.18.4)", "scikit-learn (<0.22,>=0.18.2)", "scipy (<1.4,>=0.19.1)", "sqlalchemy (<1.4,>=1.1.14)", "flask (<2,>=1.0.2)", "flask-restless (<0.18,>=0.17.0)", "flask-sqlalchemy (<2.5,>=2.3.2)", "flask-restless-swagger-2 (==0.0.3)", "simplejson (<4,>=3.16.0)", "tqdm (<5,>=4.31.1)", "docutils (<0.15,>=0.10)", "bumpversion (>=0.5.3) ; extra == 'dev'", "pip (>=9.0.1) ; extra == 'dev'", "watchdog (>=0.8.3) ; extra == 'dev'", "m2r (>=0.2.0) ; extra == 'dev'", "Sphinx (>=1.7.1) ; extra == 'dev'", "sphinx-rtd-theme (>=0.2.4) ; extra == 'dev'", "autodocsumm (>=0.1.10) ; extra == 'dev'", "flake8 (>=3.7.7) ; extra == 'dev'", "isort (>=4.3.4) ; extra == 'dev'", "autoflake (>=1.1) ; extra == 'dev'", "autopep8 (>=1.4.3) ; extra == 'dev'", "twine (>=1.10.0) ; extra == 'dev'", "wheel (>=0.30.0) ; extra == 'dev'", "coverage (>=4.5.1) ; extra == 'dev'", "tox (>=2.9.1) ; extra == 'dev'", "mock (>=2.0.0) ; extra == 'dev'", "pytest-cov (>=2.5.1) ; extra == 'dev'", "pytest-runner (>=3.0) ; extra == 'dev'", "pytest-xdist (>=1.20.1) ; extra == 'dev'", "pytest (>=3.2.3) ; extra == 'dev'", "google-compute-engine (==2.8.12) ; extra == 'dev'", "mock (>=2.0.0) ; extra == 'tests'", "pytest-cov (>=2.5.1) ; extra == 'tests'", "pytest-runner (>=3.0) ; extra == 'tests'", "pytest-xdist (>=1.20.1) ; extra == 'tests'", "pytest (>=3.2.3) ; extra == 'tests'", "google-compute-engine (==2.8.12) ; extra == 'tests'" ], "requires_python": "", "summary": "Auto Tune Models", "version": "0.2.2" }, "last_serial": 5606695, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "641f3b8c9f5d71cf9bb60cd6a60a0014", "sha256": "843a9d6c91992dee47a762ab68ffc6aa716c008386ba3d96e4b34e20f73cb6d4" }, "downloads": -1, "filename": "atm-0.0.1-py2.7.egg", "has_sig": false, "md5_digest": "641f3b8c9f5d71cf9bb60cd6a60a0014", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": ">=2.7", "size": 117883, "upload_time": "2018-04-20T17:41:31", "url": "https://files.pythonhosted.org/packages/9c/7f/38ce6da9c6cea29a2509a5602dab927904b41e5ec47c45ec6a972493e2bd/atm-0.0.1-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "58cb1cbe99e88e7d8f5ea4f7cf1f5649", "sha256": "e40213239817c1b897f4b4e622cd1af9c0a56a40029ee199e9bba095cad107a7" }, "downloads": -1, "filename": "atm-0.0.1-py3.6.egg", "has_sig": false, "md5_digest": "58cb1cbe99e88e7d8f5ea4f7cf1f5649", "packagetype": "bdist_egg", "python_version": "3.6", "requires_python": ">=2.7", "size": 117422, "upload_time": "2018-04-20T17:41:33", "url": "https://files.pythonhosted.org/packages/dc/bc/9cb635fe117916c10195115b94b22aa21dbf615d274761fa0c50052494fa/atm-0.0.1-py3.6.egg" } ], "0.0.9": [ { "comment_text": "", "digests": { "md5": "9de914cd1d12963de1b45051a68b60a4", "sha256": "3c50cf09ef56073a5aa423fcbe056cf840ec127634eb794460a00bcf14373770" }, "downloads": -1, "filename": "atm-0.0.9-py3-none-any.whl", "has_sig": false, "md5_digest": "9de914cd1d12963de1b45051a68b60a4", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.7", "size": 54025, "upload_time": "2018-04-20T17:41:30", "url": "https://files.pythonhosted.org/packages/69/9a/83b34f647fdf191ce2c1f41d6c8a07d76d68b607ac29de7e925e0d9f118f/atm-0.0.9-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "938c11b49bb69a46716321231ab9c839", "sha256": "a075677c024d10b9ff1f341cadb4022c5affde79afeed5100eca62234a810b2d" }, "downloads": -1, "filename": "atm-0.0.9.tar.gz", "has_sig": false, "md5_digest": "938c11b49bb69a46716321231ab9c839", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 49612, "upload_time": "2018-04-20T17:41:34", "url": "https://files.pythonhosted.org/packages/0e/53/5ba64184135309312487c5157512886966109f344cc5fefd915ec88c26bc/atm-0.0.9.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "d1f4aa87d76d003877fb13b9c91df1a4", "sha256": "c35898955350af64740d78b2de578a26c008e6fadd1f960dfe26e8e20fe2808e" }, "downloads": -1, "filename": "atm-0.1.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "d1f4aa87d76d003877fb13b9c91df1a4", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 92580, "upload_time": "2019-04-02T11:31:20", "url": "https://files.pythonhosted.org/packages/d1/57/09f9fa562afb251b7276a172beb84c5cb94a1ca0f34cdf06a41e932f23d1/atm-0.1.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6d3234f11219094b13ac5323aa5db48a", "sha256": "c9bbdc5db8176aa22e2f26d18cafdbaf60559d7558b80a02c8d05d1f72f04a77" }, "downloads": -1, "filename": "atm-0.1.1.tar.gz", "has_sig": false, "md5_digest": "6d3234f11219094b13ac5323aa5db48a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 113502, "upload_time": "2019-04-02T11:31:22", "url": "https://files.pythonhosted.org/packages/c6/4b/c131378ebfe2a9bca7f7ed888aae61cc9c9f8e2f7d4c527a33d5fa737671/atm-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "3fe855d896f1ab09936b8be4dd6b2bbf", "sha256": "ac723663ea21851806527ca4171bf88fbb0f8e3e9e1478c0aecf412944e8032b" }, "downloads": -1, "filename": "atm-0.1.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "3fe855d896f1ab09936b8be4dd6b2bbf", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 97228, "upload_time": "2019-05-07T18:37:28", "url": "https://files.pythonhosted.org/packages/18/b4/f45ec585453470a3ced9768ad7e9373959b24169e7a6f068944db0549763/atm-0.1.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4cb7ca2913d5f69ca979fd05dc2d3c06", "sha256": "036b73847ee6207072ef628eaf187835648ebc2c44ba9ead90edbcf7167f3fde" }, "downloads": -1, "filename": "atm-0.1.2.tar.gz", "has_sig": false, "md5_digest": "4cb7ca2913d5f69ca979fd05dc2d3c06", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 112911, "upload_time": "2019-05-07T18:37:32", "url": "https://files.pythonhosted.org/packages/54/ec/c0dea70beb8c3db8b389de1c125b0b0ae3819cd6bb515e70a46dd5058625/atm-0.1.2.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "40d9c21385650af673e8bb555ec4d183", "sha256": "4a31b3c1cd995d93d664817da7f2015ad812eea42037d623036da75f5838baf9" }, "downloads": -1, "filename": "atm-0.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "40d9c21385650af673e8bb555ec4d183", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 60165, "upload_time": "2019-05-29T15:27:24", "url": "https://files.pythonhosted.org/packages/90/dc/27ab8f755a757e46c2dacf50dfe6a2d996f9892c3ca6295f119257b58f21/atm-0.2.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e64af042e2ebfc6ff1d5e316376d0022", "sha256": "185ef65fed7b3f4e2b220f7b5c1369555ce5333fe657e7773012266b2aa3cf85" }, "downloads": -1, "filename": "atm-0.2.0.tar.gz", "has_sig": false, "md5_digest": "e64af042e2ebfc6ff1d5e316376d0022", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 122082, "upload_time": "2019-05-29T15:27:26", "url": "https://files.pythonhosted.org/packages/a5/c6/85c0f983cda1509492ace524d5536e9132b02c74761d7d69af7396c24a51/atm-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "b801d5af9700b78bbe05287505023593", "sha256": "f96e60c41de22505be0cdf277345b001ac22c793be423562caa16af04de2fe77" }, "downloads": -1, "filename": "atm-0.2.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "b801d5af9700b78bbe05287505023593", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 62762, "upload_time": "2019-06-24T13:31:28", "url": "https://files.pythonhosted.org/packages/64/16/e4d8298503e999ad559dd6f28bbdd04bfbfd645a8205d86fc86dbb9e58a9/atm-0.2.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "04475b1f74b4fb5296222ea592f48de5", "sha256": "1eefd180985b717aa7b4cf9f44739ccf774575a683b069f51253288b2e04a465" }, "downloads": -1, "filename": "atm-0.2.1.tar.gz", "has_sig": false, "md5_digest": "04475b1f74b4fb5296222ea592f48de5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 125653, "upload_time": "2019-06-24T13:31:29", "url": "https://files.pythonhosted.org/packages/f3/f5/c67824b62bae68f8849668fe91967484d18bb6151c63cf1b93a9f0eb0237/atm-0.2.1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "81670be6eab3c2be495ec8c9ca5a4df0", "sha256": "805243fb6b1e3c990114f26a78f1373b56cb169a2dbf656cefc41c4348860d6c" }, "downloads": -1, "filename": "atm-0.2.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "81670be6eab3c2be495ec8c9ca5a4df0", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 63401, "upload_time": "2019-07-30T09:25:11", "url": "https://files.pythonhosted.org/packages/1a/23/4ff31ca9695473342140369274f5d11ed0fec8204dac3a6e469797ad046f/atm-0.2.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b9842eb23a4074495d3f138a232e5e59", "sha256": "9a5ab26f14bff3f08665b1d6ae0bfa5e8f0848860a3977664b362ea03ceb9352" }, "downloads": -1, "filename": "atm-0.2.2.tar.gz", "has_sig": false, "md5_digest": "b9842eb23a4074495d3f138a232e5e59", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 127799, "upload_time": "2019-07-30T09:25:15", "url": "https://files.pythonhosted.org/packages/5b/5b/77e50b27ef2b0b2f4be0c9dfe6f4cee9c37749a393e3e1c01c9aa33c892b/atm-0.2.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "81670be6eab3c2be495ec8c9ca5a4df0", "sha256": "805243fb6b1e3c990114f26a78f1373b56cb169a2dbf656cefc41c4348860d6c" }, "downloads": -1, "filename": "atm-0.2.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "81670be6eab3c2be495ec8c9ca5a4df0", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 63401, "upload_time": "2019-07-30T09:25:11", "url": "https://files.pythonhosted.org/packages/1a/23/4ff31ca9695473342140369274f5d11ed0fec8204dac3a6e469797ad046f/atm-0.2.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b9842eb23a4074495d3f138a232e5e59", "sha256": "9a5ab26f14bff3f08665b1d6ae0bfa5e8f0848860a3977664b362ea03ceb9352" }, "downloads": -1, "filename": "atm-0.2.2.tar.gz", "has_sig": false, "md5_digest": "b9842eb23a4074495d3f138a232e5e59", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 127799, "upload_time": "2019-07-30T09:25:15", "url": "https://files.pythonhosted.org/packages/5b/5b/77e50b27ef2b0b2f4be0c9dfe6f4cee9c37749a393e3e1c01c9aa33c892b/atm-0.2.2.tar.gz" } ] }