{ "info": { "author": "Dongjun Lee", "author_email": "humanbrain.djlee@gmail.com", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy" ], "description": "\n

\n \n

\n\n

Clova Language Framework

\n\n

\n \n \"Documentation\n \n \n \n \"Code\n \n \n \n

\n\n---\n\n# CLaF: Clova Language Framework\n\n**CLaF** is a Language Framework built on PyTorch that provides following two high-level features:\n\n- `Experiment` enables the control of training flow in general NLP by offering various `TokenMaker` methods. \n - CLaF is inspired by the design principle of [AllenNLP](https://github.com/allenai/allennlp) such as the higher level concepts and reusable code, but mostly based on PyTorch\u2019s common module, so that user can easily modify the code on their demands. \n- `Machine` helps to combine various modules to build a NLP Machine in one place.\n - There are knowledge-based, components and trained experiments which infer 1-example in modules.\n\n## Features\n\n- [Full Documentation](https://naver.github.io/claf/)\n- [Dataset And Model](https://naver.github.io/claf/docs/_build/html/contents/dataset_and_model.html)\n- [Pretrained Vector](https://naver.github.io/claf/docs/_build/html/contents/pretrained_vector.html)\n- [Tokens](https://naver.github.io/claf/docs/_build/html/contents/tokens.html): `Tokenizers` and `TokenMakers`\n- List of [BaseConfig](https://github.com/naver/claf#baseconfig)\n\n| Task | Language | Dataset | Model |\n| ---- | -------- | ------- | ----- |\n| Natural Language Understanding | English | [GLUE Benchmark](https://gluebenchmark.com/) | BERT, RoBERTa |\n| Named Entity Recognition | English | CoNLL 2003 | BERT |\n| Question Answering | Korean | [KorQuAD v1.0](https://korquad.github.io/category/1.0_KOR.html) | BiDAF, DocQA, BERT |\n| Question Answering | Engilsh | [SQuAD v1.1 and v2.0](https://rajpurkar.github.io/SQuAD-explorer/) | - v1.1: BiDAF, DrQA, DocQA, DocQA+ELMo, QANet
- v2.0: BiDAF + No Answer, DocQA + No Answer |\n| Semantic Parsing | English | [WikiSQL](https://github.com/salesforce/WikiSQL) | SQLNet |\n\n\n- Reports\n - [GLUE](https://naver.github.io/claf/docs/_build/html/reports/glue.html)\n - [KorQuAD](https://naver.github.io/claf/docs/_build/html/reports/korquad.html)\n - [SQuAD](https://naver.github.io/claf/docs/_build/html/reports/squad.html)\n - [WikiSQL](https://naver.github.io/claf/docs/_build/html/reports/wikisql.html)\n- Summary (1-example Inference Latency)\n - [Reading Comprehension](https://naver.github.io/claf/docs/_build/html/summary/reading_comprehension.html)\n\n\n---\n\n\n## Table of Contents\n\n- [Installation](#installation) \n - [Requirements](#requirements)\n - [Install via pip](#install-via-pip)\n- [Overview](#overview)\n- [Experiment](#experiment)\n\t- [Usage](#usage)\n\t - [Training](#training) \n\t - [Evaluate](#evaluate) \n\t - [Predict](#predict) \n\t - [Docker Images](#docker-images)\n- [Machine](#machine)\n- [Contributing](#contributing)\n- [Maintainers](#maintainers)\n- [Citing](#citing)\n- [License](#license)\n\n\n---\n\n\n## Installation\n\n### Requirements\n\n- Python 3.6\n- PyTorch >= 0.4.1\n- [MeCab](https://bitbucket.org/eunjeon/mecab-ko) for Korean Tokenizer\n - ```sh script/install_mecab.sh```\n\nIt is recommended to use the virtual environment. \n[Conda](https://conda.io/docs/download.html) is the easiest way to set up a virtual environment.\n\n```\nconda create -n claf python=3.6\nconda activate claf\n\n(claf) \u2717 pip install -r requirements.txt\n```\n\n### Install via pip\n\nCommands to install via pip \n\n```\npip install claf\n```\n\n\n## Overview\n\n- **Multilingual** modeling support (currently, English and Korean are supported).\n- Light weighted **Systemization** and Modularization.\n- Easy extension and implementation of models.\n- A wide variation of **Experiments** with reproducible and comprehensive logging\n- The metrics for services such as \"1\\-example inference latency\" are provided.\n- Easy to build of a NLP **Machine** by combining modules.\n\n\n\n## Experiment\n\n- Training Flow\n\n![images](images/claf-experiment.001.png)\n\n\n### Usage\n\n#### Training\n\n![images](images/training_config_mapping.png)\n\n\n1. only Arguments\n\n\t```\n\tpython train.py --train_file_path {file_path} --valid_file_path {file_path} --model_name {name} ...\n\t```\n\n2. only BaseConfig (skip `/base_config` path)\n\n\t```\n\tpython train.py --base_config {base_config}\n\t```\n\n3. BaseConfig + Arguments\n\n\t```\n\tpython train.py --base_config {base_config} --learning_rate 0.002\n\t```\n\n\t- Load BaseConfig then overwrite `learning_rate` to 0.002\n\n\n#### BaseConfig\n\nDeclarative experiment config (.json)\n\n- Simply matching with object's parameters\n- Exists samples in `/base_config` directory\n\n##### Defined BaseConfig\n\n```\nBase Config:\n --base_config BASE_CONFIG\n Use pre-defined base_config:\n []\n\n\n * CoNLL 2003:\n ['conll2003/bert_large_cased']\n\n * GLUE:\n ['glue/qqp_roberta_base', 'glue/qnli_bert_base', 'glue/rte_bert_base', 'glue/wnli_roberta_base', 'glue/mnlim_roberta_base', 'glue/wnli_bert_base', 'glue/mnlimm_roberta_base', 'glue/cola_bert_base', 'glue/mrpc_bert_base', 'glue/mnlimm_bert_base', 'glue/stsb_bert_base', 'glue/mnlim_bert_base', 'glue/qqp_bert_base', 'glue/rte_roberta_base', 'glue/qnli_roberta_base', 'glue/sst_bert_base', 'glue/mrpc_roberta_base', 'glue/cola_roberta_base', 'glue/stsb_roberta_base', 'glue/sst_roberta_base']\n\n * KorQuAD:\n ['korquad/bert_base_multilingual_cased', 'korquad/bidaf', 'korquad/bert_base_multilingual_uncased', 'korquad/docqa']\n\n * SQuAD:\n ['squad/bert_large_uncased', 'squad/bidaf', 'squad/drqa_paper', 'squad/drqa', 'squad/bert_base_uncased', 'squad/qanet', 'squad/docqa+elmo', 'squad/bidaf_no_answer', 'squad/docqa_no_answer', 'squad/qanet_paper', 'squad/bidaf+elmo', 'squad/docqa']\n\n * WikiSQL:\n ['wikisql/sqlnet']\n```\n\n\n#### Evaluate\n\n```\npython eval.py \n```\n\n- Example\n\n```\n\u2717 python eval.py data/squad/dev-v1.1.json logs/squad/bidaf/checkpoint/model_19.pkl\n...\n[INFO] - {\n \"valid/loss\": 2.59111491665019,\n \"valid/epoch_time\": 60.7434446811676,\n \"valid/start_acc\": 63.17880794701987,\n \"valid/end_acc\": 67.19016083254493,\n \"valid/span_acc\": 54.45600756859035,\n \"valid/em\": 68.10785241248817,\n \"valid/f1\": 77.77963381714842\n}\n# write predictions files (/predictions/predictions-valid-19.json)\n```\n\n- 1-example Inference Latency ([Summary](docs/_build/html/reports/summary.html))\n\n```\n\u2717 python eval.py data/squad/dev-v1.1.json logs/squad/bidaf/checkpoint/model_19.pkl\n...\n# Evaluate Inference Latency Mode.\n...\n[INFO] - saved inference_latency results. bidaf-cpu.json # file_format: {model_name}-{env}.json\n```\n\n#### Predict\n\n```\npython predict.py --\n```\n\n- Example\n\n```\n\u2717 python predict.py logs/squad/bidaf/checkpoint/model_19.pkl \\\n --question \"When was the last Super Bowl in California?\" \\\n --context \"On May 21, 2013, NFL owners at their spring meetings in Boston voted and awarded the game to Levi's Stadium. The $1.2 billion stadium opened in 2014. It is the first Super Bowl held in the San Francisco Bay Area since Super Bowl XIX in 1985, and the first in California since Super Bowl XXXVII took place in San Diego in 2003.\"\n\n>>> Predict: {'text': '2003', 'score': 4.1640071868896484}\n```\n\n#### Docker Images\n\n- [Docker Hub](https://hub.docker.com/u/claf)\n- Run with Docker Image\n - Pull docker image\n ```\u2717 docker pull claf/claf:latest```\n - Run \n ``` docker run --rm -i -t claf/claf:latest /bin/bash ```\n\n\n---\n\n\n### Machine\n\n- Machine Architecture\n\n\n![images](images/claf-machine.001.png)\n\n#### Usage\n\n- Define the config file (.json) like [BaseConfig](#baseconfig) in `machine_config/` directory\n- Run CLaF Machine (skip `/machine_config` path)\n\n\n```\n\u2717 python machine.py --machine_config {machine_config}\n```\n\n\n* The list of pre-defined `Machine`:\n\n```\nMachine Config:\n --machine_config MACHINE_CONFIG\n Use pre-defined machine_config (.json (.json))\n\n ['ko_wiki', 'nlu']\n```\n\n#### Open QA (DrQA Style)\n\nDrQA is a system for reading comprehension applied to open-domain question answering. The system has to combine the challenges of document retrieval (finding the relevant documents) with that of machine comprehension of text (identifying the answers from those documents).\n\n- ko_wiki: Korean Wiki Version\n\n``` \n\u2717 python machine.py --machine_config ko_wiki\n...\nCompleted!\nQuestion > \ub3d9\ud559\uc758 2\ub300 \uad50\uc8fc \uc774\ub984\uc740?\n--------------------------------------------------\nDoc Scores:\n - \uad50\uc8fc : 0.5347289443016052\n - \uc774\uad50\uc8fc : 0.4967213571071625\n - \uad50\uc8fc\ub3c4 : 0.49036136269569397\n - \ub3d9\ud559 : 0.4800325632095337\n - \ub3d9\ud559\uc911\ud559\uad50 : 0.4352934956550598\n--------------------------------------------------\nAnswer: [\n {\n \"text\": \"\ucd5c\uc2dc\ud615\",\n \"score\": 11.073444366455078\n },\n {\n \"text\": \"\ucda9\uc8fc\ubaa9\",\n \"score\": 9.443866729736328\n },\n {\n \"text\": \"\ubc18\uc6d4\ub3d9\",\n \"score\": 9.37778091430664\n },\n {\n \"text\": \"\ud658\uc870 \uc774\uc790\ucd98\",\n \"score\": 4.64817476272583\n },\n {\n \"text\": \"\ud569\ud3ec\uad70\",\n \"score\": 3.3186707496643066\n }\n]\n```\n\n#### NLU (Dialog)\n\nThe reason why NLU machine does not return the full response is that response generation may require various task-specific post-processing techniques or additional logic(e.g. API calls, template-decision rules, template filling rules, nn-based response generation model) Therefore, for flexible usage, NLU machine returns only the NLU result.\n\n``` \n\u2717 python machine.py --machine_config nlu\n...\nUtterance > \"looking for a flight from Boston to Seoul or Incheon\"\n\nNLU Result: {\n \"intent\": \"flight\",\n \"slots\": {\n \"city.depart\": [\"Boston\"],\n \"city.dest\": [\"Seoul\", \"Incheon\"]\n }\n}\n```\n\n\n## Contributing\n\nThanks for your interest in contributing! There are many ways to contribute to this project. \nGet started [here](./CONTRIBUTING.md).\n\n## Maintainers\n\nCLaF is currently maintained by \n\n- [Dongjun Lee](https://github.com/DongjunLee) (Author)\n- [Sohee Yang](https://github.com/soheeyang)\n- [Minjeong Kim](https://github.com/Mjkim88)\n\n## Citing\n\nIf you use CLaF for your work, please cite:\n\n```bibtex\n@misc{claf,\n author = {Lee, Dongjun and Yang, Sohee and Kim, Minjeong},\n title = {CLaF: Open-Source Clova Language Framework},\n year = {2019},\n publisher = {GitHub},\n journal = {GitHub repository},\n howpublished = {\\url{https://github.com/naver/claf}}\n}\n```\n\nWe will update this bibtex with our paper.\n\n\n## Acknowledgements\n\n`docs/` directory which includes documentation created by [Sphinx](http://www.sphinx-doc.org/).\n\n## License\n\nMIT license\n\n```\nCopyright (c) 2019-present NAVER Corp.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy \nof this software and associated documentation files (the \"Software\"), to deal \nin the Software without restriction, including without limitation the rights \nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell \ncopies of the Software, and to permit persons to whom the Software is \nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all \ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR \nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, \nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE \nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER \nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, \nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE \nSOFTWARE.\n```\n\n\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/naver/claf", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "claf", "package_url": "https://pypi.org/project/claf/", "platform": "", "project_url": "https://pypi.org/project/claf/", "project_urls": { "Homepage": "https://github.com/naver/claf" }, "release_url": "https://pypi.org/project/claf/0.2.0/", "requires_dist": [ "numpy (>=1.15.0)", "torch (>=1.0.1)", "pytorch-transformers (==1.1.0)", "konlpy", "nltk", "spacy", "babel", "records", "h5py", "jsbeautifier", "msgpack", "overrides", "requests", "gensim", "tqdm", "tensorboardX", "pycm", "seqeval", "scikit-learn" ], "requires_python": ">=3.6.0", "summary": "CLaF: Clova Language Framework", "version": "0.2.0" }, "last_serial": 5808592, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "38d51b1715e2019ce8360afd162bb3f4", "sha256": "7615646fe31309cec3e8ce337ea4982c1de231786a3d2f2fcfd45e9f852773c0" }, "downloads": -1, "filename": "claf-0.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "38d51b1715e2019ce8360afd162bb3f4", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6.0", "size": 198875, "upload_time": "2019-02-27T09:23:57", "url": "https://files.pythonhosted.org/packages/55/13/89b4a4454a9e2f34a33e0e94e39b07bf7e635c24129a8e03d0a0d169c271/claf-0.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6ec5cf4f9fe709c25d4aa0ee5f3790ba", "sha256": "205b20fe2f4a30c9077818282b6024dc44d496a83de6ae2d72a71623bb8932a6" }, "downloads": -1, "filename": "claf-0.1.0.tar.gz", "has_sig": false, "md5_digest": "6ec5cf4f9fe709c25d4aa0ee5f3790ba", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 134805, "upload_time": "2019-02-27T09:24:01", "url": "https://files.pythonhosted.org/packages/2c/42/3fdf11c01ff4c420ce3baa49f04cc84ca4b726930cd5a2e781a6e73727ea/claf-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "8cd2c01532ad3372f356106782ad3f7b", "sha256": "9766412abc85c4b87ac29f8907862a35d9f280d6f0c998f6bfe89348ee5f2f2b" }, "downloads": -1, "filename": "claf-0.1.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "8cd2c01532ad3372f356106782ad3f7b", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6.0", "size": 209438, "upload_time": "2019-07-15T03:21:07", "url": "https://files.pythonhosted.org/packages/ce/c6/ab889a59e6f9f5d3619a3f846450bdae2c54535dfacaf6c3afa6b2ec4a12/claf-0.1.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5dc850d1580b53237391883b88e0994b", "sha256": "bd3865cb4199a7faa3325733af777e344d12298b1ccbe77678e032a117931d88" }, "downloads": -1, "filename": "claf-0.1.1.tar.gz", "has_sig": false, "md5_digest": "5dc850d1580b53237391883b88e0994b", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 143304, "upload_time": "2019-07-15T03:21:09", "url": "https://files.pythonhosted.org/packages/13/9f/85c3f0ffd27c90442a3880881ca23235f8b6a34efe78cf6592732b23fea7/claf-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "8ff5427a25658ae5d8029fabfca9272b", "sha256": "e3f314c8b92b62e7d6fd6a7876748b0918190d639220335a9274c54816089799" }, "downloads": -1, "filename": "claf-0.1.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "8ff5427a25658ae5d8029fabfca9272b", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6.0", "size": 212410, "upload_time": "2019-07-15T04:06:59", "url": "https://files.pythonhosted.org/packages/1d/1b/2c3da46285e3e477bdcc2b4240108aa44ff76900df21e9168961340eaeac/claf-0.1.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ea4d0890463a3c462c4193faa0fc3273", "sha256": "53ac165c52e058df5a8753f7141279b980fd8bafd7cf1ef04fccd6005c154519" }, "downloads": -1, "filename": "claf-0.1.2.tar.gz", "has_sig": false, "md5_digest": "ea4d0890463a3c462c4193faa0fc3273", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 145272, "upload_time": "2019-07-15T04:07:01", "url": "https://files.pythonhosted.org/packages/14/4a/e10fbd3b8b7015ec149c6ff62924d69e1d3b323ec05398499ea32f7121cb/claf-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "6d03de26f7d2059f50fcdd9eccfa1ed6", "sha256": "ac57a984f7837f9029d14d1aa2207b50f6a278ad56388b29b9c615dd60d4e721" }, "downloads": -1, "filename": "claf-0.1.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "6d03de26f7d2059f50fcdd9eccfa1ed6", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6.0", "size": 213486, "upload_time": "2019-07-15T04:16:30", "url": "https://files.pythonhosted.org/packages/ab/f3/2894a097a9e736e5689792fc9da32ef4ddb64c8da511c8a3946fe8cfb877/claf-0.1.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7701432b6f98af50c4a4d5f4f879f983", "sha256": "34febd0b52792ffbf4e1378ff85b44e58ce5c5e183a7f2d986f051c49bcbd2b5" }, "downloads": -1, "filename": "claf-0.1.3.tar.gz", "has_sig": false, "md5_digest": "7701432b6f98af50c4a4d5f4f879f983", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 145881, "upload_time": "2019-07-15T04:16:32", "url": "https://files.pythonhosted.org/packages/ab/00/1f8ecf4bec86542f74232ad7f67f85a311ffdacaceb39e7cd17300758835/claf-0.1.3.tar.gz" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "b88adfd1e6ca05084d951d1311947a1a", "sha256": "328a292c6affcc595a22e90c8aeda1fe83d2e27110fa2f11d1aca1667f0940b6" }, "downloads": -1, "filename": "claf-0.1.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "b88adfd1e6ca05084d951d1311947a1a", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6.0", "size": 213450, "upload_time": "2019-07-17T07:57:53", "url": "https://files.pythonhosted.org/packages/71/37/b56fa4badab493bb5e802d9d41b527d77d8570aba77fdd000b2dbe5cf07f/claf-0.1.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1c644dae9ad28c720a592e34cd439813", "sha256": "40a6afcddd918ce3f7c60121a86856e11fa52f43a1334c8fe59cb14ac1d0cdb0" }, "downloads": -1, "filename": "claf-0.1.4.tar.gz", "has_sig": false, "md5_digest": "1c644dae9ad28c720a592e34cd439813", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 145865, "upload_time": "2019-07-17T07:57:55", "url": "https://files.pythonhosted.org/packages/3e/db/967089699910b7821d9293c92d34156ad385f35f8b71faf7d17ab494cc67/claf-0.1.4.tar.gz" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "c1d9a23afeee51c561dbde5e9601cd88", "sha256": "0f9d3fe3a512664b5c4322d604809722d8b57b6986cb3c6356fdf498abc4a119" }, "downloads": -1, "filename": "claf-0.1.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "c1d9a23afeee51c561dbde5e9601cd88", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6.0", "size": 213439, "upload_time": "2019-07-17T08:18:56", "url": "https://files.pythonhosted.org/packages/dd/32/9135c89d3bc8470d15bd8518ccf50a36539b810706657b0202503d56ce6f/claf-0.1.5-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b40bedf7297c59691173f54f47fbf562", "sha256": "68702cb6c7c09321a4c16b7ebda710bdb12594299da34f202c1fa37c5e1446ff" }, "downloads": -1, "filename": "claf-0.1.5.tar.gz", "has_sig": false, "md5_digest": "b40bedf7297c59691173f54f47fbf562", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 145841, "upload_time": "2019-07-17T08:18:58", "url": "https://files.pythonhosted.org/packages/aa/94/4bc8658ff338d0108bf29e735f9e10659bbdddc7d7c8ebca774be282d111/claf-0.1.5.tar.gz" } ], "0.1.6": [ { "comment_text": "", "digests": { "md5": "dd45c3cb1a55902c594053d761940110", "sha256": "c883c02313b879702d1adbc7d7fe62c8573611b4899b657b02aa0420df65ffed" }, "downloads": -1, "filename": "claf-0.1.6-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "dd45c3cb1a55902c594053d761940110", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6.0", "size": 213509, "upload_time": "2019-07-17T12:26:57", "url": "https://files.pythonhosted.org/packages/b1/ce/4559730a91df33c4d11bcc0eaf3880907910d5f14dd9e151186cd3371625/claf-0.1.6-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4f86ccbb06e78e5277b1425c0800579b", "sha256": "f843cba1942dfc7a6c9ea5213e1299dc2c17fdb0ef6d77e74c2c02bbb6239f2e" }, "downloads": -1, "filename": "claf-0.1.6.tar.gz", "has_sig": false, "md5_digest": "4f86ccbb06e78e5277b1425c0800579b", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 145926, "upload_time": "2019-07-17T12:26:59", "url": "https://files.pythonhosted.org/packages/90/d6/edcfc2d021552e502bfe3b9eb7dc8fee45d6ee5a6a4056cf930263dc05c3/claf-0.1.6.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "af10dc5d6b998543cfe835ae127ca29d", "sha256": "97091d1ad651581301e553d6d9c2d71bf43da300cce9e9e553b23de17bd0c5ed" }, "downloads": -1, "filename": "claf-0.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "af10dc5d6b998543cfe835ae127ca29d", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6.0", "size": 247274, "upload_time": "2019-09-10T12:25:37", "url": "https://files.pythonhosted.org/packages/66/f5/bb4e8f7e2c00a4017346725cca2a65f121a8746904f4cc732bbc81bc53a5/claf-0.2.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a1979ac58939a319aaca97656df87330", "sha256": "b8a72cbc0cbb0aeba7fb0395d5b7fa5dccffa2b665c85da4810cbd31022a50f8" }, "downloads": -1, "filename": "claf-0.2.0.tar.gz", "has_sig": false, "md5_digest": "a1979ac58939a319aaca97656df87330", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 154009, "upload_time": "2019-09-10T12:25:40", "url": "https://files.pythonhosted.org/packages/ea/b8/221f1eeb26c278fced8cdb9d17a22f1abb091673a333cc59edd70235d2fe/claf-0.2.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "af10dc5d6b998543cfe835ae127ca29d", "sha256": "97091d1ad651581301e553d6d9c2d71bf43da300cce9e9e553b23de17bd0c5ed" }, "downloads": -1, "filename": "claf-0.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "af10dc5d6b998543cfe835ae127ca29d", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6.0", "size": 247274, "upload_time": "2019-09-10T12:25:37", "url": "https://files.pythonhosted.org/packages/66/f5/bb4e8f7e2c00a4017346725cca2a65f121a8746904f4cc732bbc81bc53a5/claf-0.2.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a1979ac58939a319aaca97656df87330", "sha256": "b8a72cbc0cbb0aeba7fb0395d5b7fa5dccffa2b665c85da4810cbd31022a50f8" }, "downloads": -1, "filename": "claf-0.2.0.tar.gz", "has_sig": false, "md5_digest": "a1979ac58939a319aaca97656df87330", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 154009, "upload_time": "2019-09-10T12:25:40", "url": "https://files.pythonhosted.org/packages/ea/b8/221f1eeb26c278fced8cdb9d17a22f1abb091673a333cc59edd70235d2fe/claf-0.2.0.tar.gz" } ] }