{ "info": { "author": "F\u00e9lix MIKAELIAN, Andr\u00e9 FARIAS, Matyas AMROUCHE, Olivier SANS, Th\u00e9o NAZON", "author_email": "", "bugtrack_url": null, "classifiers": [], "description": "# cdQA: Closed Domain Question Answering\n\n[![Build Status](https://travis-ci.com/cdqa-suite/cdQA.svg?branch=master)](https://travis-ci.com/cdqa-suite/cdQA)\n[![codecov](https://codecov.io/gh/cdqa-suite/cdQA/branch/master/graph/badge.svg)](https://codecov.io/gh/cdqa-suite/cdQA)\n[![PyPI Version](https://img.shields.io/pypi/v/cdqa.svg)](https://pypi.org/project/cdqa/)\n[![PyPI Downloads](https://img.shields.io/pypi/dm/cdqa.svg)](https://pypi.org/project/cdqa/)\n[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/cdqa-suite/cdQA/master?filepath=examples%2Ftutorial-first-steps-cdqa.ipynb)\n[![Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/cdqa-suite/cdQA/blob/master/examples/tutorial-first-steps-cdqa.ipynb)\n[![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-v1.4%20adopted-ff69b4.svg)](.github/CODE_OF_CONDUCT.md)\n[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](http://makeapullrequest.com)\n![GitHub](https://img.shields.io/github/license/cdqa-suite/cdQA.svg)\n\nAn End-To-End Closed Domain Question Answering System. Built on top of the HuggingFace [transformers](https://github.com/huggingface/transformers) library.\n\n## cdQA in details\n\nIf you are interested in understanding how the system works and its implementation, we wrote an [article on Medium](https://towardsdatascience.com/how-to-create-your-own-question-answering-system-easily-with-python-2ef8abc8eb5) with a high-level explanation.\n\nWe also made a presentation during the \\#9 NLP Breakfast organised by [Feedly](feedly.com). You can check it out [here](https://blog.feedly.com/nlp-breakfast-9-closed-domain-question-answering/).\n\n## Table of Contents \n\n- [Installation](#Installation)\n - [With pip](#With-pip)\n - [From source](#From-source)\n - [Hardware Requirements](#Hardware-Requirements)\n- [Getting started](#Getting-started)\n - [Preparing your data](#Preparing-your-data)\n - [Manual](#Manual)\n - [With converters](#With-converters)\n - [Downloading pre-trained models](#Downloading-pre-trained-models)\n - [Training models](#Training-models)\n - [Making predictions](#Making-predictions)\n - [Evaluating models](#Evaluating-models)\n- [Notebook Examples](#Notebook-Examples)\n- [Deployment](#Deployment)\n - [Manual](#Manual-1)\n- [Contributing](#Contributing)\n- [References](#References)\n- [LICENSE](#LICENSE)\n\n## Installation\n\n### With pip\n\n```shell\npip install cdqa\n```\n\n### From source\n\n```shell\ngit clone https://github.com/cdqa-suite/cdQA.git\ncd cdQA\npip install -e .\n```\n\n### Hardware Requirements\n\nExperiments have been done with:\n\n- **CPU** \ud83d\udc49 AWS EC2 `t2.medium` Deep Learning AMI (Ubuntu) Version 22.0\n- **GPU** \ud83d\udc49 AWS EC2 `p3.2xlarge` Deep Learning AMI (Ubuntu) Version 22.0 + a single Tesla V100 16GB.\n\n## Getting started\n\n### Preparing your data\n\n#### Manual\n\nTo use `cdQA` you need to create a pandas dataframe with the following columns:\n\n| title | paragraphs |\n| ----------------- | ------------------------------------------------------ |\n| The Article Title | [Paragraph 1 of Article, ... , Paragraph N of Article] |\n\n#### With converters\n\nThe objective of `cdqa` converters is to make it easy to create this dataframe from your raw documents database. For instance the `pdf_converter` can create a `cdqa` dataframe from a directory containing `.pdf` files:\n\n```python\nfrom cdqa.utils.converters import pdf_converter\n\ndf = pdf_converter(directory_path='path_to_pdf_folder')\n```\n\nYou will need to install [Java OpenJDK](https://openjdk.java.net/install/) to use this converter. We currently have converters for:\n\n- pdf\n- markdown\n\nWe plan to improve and add more converters in the future. Stay tuned!\n\n### Downloading pre-trained models and data\n\nYou can download the models and data manually from the GitHub [releases](https://github.com/cdqa-suite/cdQA/releases) or use our download functions:\n\n```python\nfrom cdqa.utils.download import download_squad, download_model, download_bnpp_data\n\ndirectory = 'path-to-directory'\n\n# Downloading data\ndownload_squad(dir=directory)\ndownload_bnpp_data(dir=directory)\n\n# Downloading pre-trained BERT fine-tuned on SQuAD 1.1\ndownload_model('bert-squad_1.1', dir=directory)\n\n# Downloading pre-trained DistilBERT fine-tuned on SQuAD 1.1\ndownload_model('distilbert-squad_1.1', dir=directory)\n```\n\n### Training models\n\nFit the pipeline on your corpus using the pre-trained reader:\n\n```python\nimport pandas as pd\nfrom ast import literal_eval\nfrom cdqa.pipeline import QAPipeline\n\ndf = pd.read_csv('your-custom-corpus-here.csv', converters={'paragraphs': literal_eval})\n\ncdqa_pipeline = QAPipeline(reader='bert_qa.joblib') # use 'distilbert_qa.joblib' for DistilBERT instead of BERT\ncdqa_pipeline.fit_retriever(df=df)\n```\n\nIf you want to fine-tune the reader on your custom SQuAD-like annotated dataset:\n\n```python\ncdqa_pipeline = QAPipeline(reader='bert_qa.joblib') # use 'distilbert_qa.joblib' for DistilBERT instead of BERT\ncdqa_pipeline.fit_reader('path-to-custom-squad-like-dataset.json')\n```\n\nSave the reader model after fine-tuning:\n```python\ncdqa_pipeline.dump_reader('path-to-save-bert-reader.joblib')\n```\n### Making predictions\n\nTo get the best prediction given an input query:\n\n```python\ncdqa_pipeline.predict(query='your question')\n```\n\nTo get the N best predictions:\n```python\ncdqa_pipeline.predict(query='your question', n_predictions=N)\n```\n\nThere is also the possibility to change the weight of the retriever score\nversus the reader score in the computation of final ranking score (the default is 0.35, which is shown to be the best weight on the development set of SQuAD 1.1-open)\n\n```python\ncdqa_pipeline.predict(query='your question', retriever_score_weight=0.35)\n```\n\n### Evaluating models\n\nIn order to evaluate models on your custom dataset you will need to annotate it. The annotation process can be done in 3 steps:\n\n1. Convert your pandas DataFrame into a json file with SQuAD format:\n\n ```python\n from cdqa.utils.converters import df2squad\n\n json_data = df2squad(df=df, squad_version='v1.1', output_dir='.', filename='dataset-name')\n ```\n\n2. Use an annotator to add ground truth question-answer pairs:\n\n Please refer to our [`cdQA-annotator`](https://github.com/cdqa-suite/cdQA-annotator), a web-based annotator for closed-domain question answering datasets with SQuAD format.\n\n3. Evaluate the pipeline object:\n\n ```python\n from cdqa.utils.evaluation import evaluate_pipeline\n\n evaluate_pipeline(cdqa_pipeline, 'path-to-annotated-dataset.json')\n\n ```\n\n4. Evaluate the reader:\n\n ```python\n from cdqa.utils.evaluation import evaluate_reader\n\n evaluate_reader(cdqa_pipeline, 'path-to-annotated-dataset.json')\n ```\n\n## Notebook Examples\n\nWe prepared some notebook examples under the [examples](examples) directory.\n\nYou can also play directly with these notebook examples using [Binder](https://gke.mybinder.org/) or [Google Colaboratory](https://colab.research.google.com/notebooks/welcome.ipynb):\n\n| Notebook | Hardware | Platform |\n| -------------------------------- | ------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| [1] First steps with cdQA | CPU or GPU | [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/cdqa-suite/cdQA/master?filepath=examples%2Ftutorial-first-steps-cdqa.ipynb) [![Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/cdqa-suite/cdQA/blob/master/examples/tutorial-first-steps-cdqa.ipynb) |\n| [2] Using the PDF converter | CPU or GPU | [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/cdqa-suite/cdQA/master?filepath=examples%2Ftutorial-use-pdf-converter.ipynb) [![Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/cdqa-suite/cdQA/blob/master/examples/tutorial-use-pdf-converter.ipynb) |\n| [3] Training the reader on SQuAD | GPU | [![Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/cdqa-suite/cdQA/blob/master/examples/tutorial-train-reader-squad.ipynb) |\n\nBinder and Google Colaboratory provide temporary environments and may be slow to start but we recommend them if you want to get started with `cdQA` easily.\n\n## Deployment\n\n### Manual\n\nYou can deploy a `cdQA` REST API by executing:\n\n```shell\nexport dataset_path=path-to-dataset.csv\nexport reader_path=path-to-reader-model\n\nFLASK_APP=api.py flask run -h 0.0.0.0\n```\n\nYou can now make requests to test your API (here using [HTTPie](https://httpie.org/)):\n\n```shell\nhttp localhost:5000/api query=='your question here'\n```\n\nIf you wish to serve a user interface on top of your `cdQA` system, follow the instructions of [cdQA-ui](https://github.com/cdqa-suite/cdQA-ui), a web interface developed for `cdQA`.\n\n## Contributing\n\nRead our [Contributing Guidelines](.github/CONTRIBUTING.md).\n\n## References\n\n| Type | Title | Author | Year |\n| -------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | ---- |\n| :video_camera: Video | [Stanford CS224N: NLP with Deep Learning Lecture 10 \u2013 Question Answering](https://youtube.com/watch?v=yIdF-17HwSk) | Christopher Manning | 2019 |\n| :newspaper: Paper | [Reading Wikipedia to Answer Open-Domain Questions](https://arxiv.org/abs/1704.00051) | Danqi Chen, Adam Fisch, Jason Weston, Antoine Bordes | 2017 |\n| :newspaper: Paper | [Neural Reading Comprehension and Beyond](https://cs.stanford.edu/people/danqi/papers/thesis.pdf) | Danqi Chen | 2018 |\n| :newspaper: Paper | [BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding](https://arxiv.org/abs/1810.04805) | Jacob Devlin, Ming-Wei Chang, Kenton Lee, Kristina Toutanova | 2018 |\n| :newspaper: Paper | [Contextual Word Representations: A Contextual Introduction](https://arxiv.org/abs/1902.06006) | Noah A. Smith | 2019 |\n| :newspaper: Paper | [End-to-End Open-Domain Question Answering with BERTserini](https://arxiv.org/abs/1902.01718) | Wei Yang, Yuqing Xie, Aileen Lin, Xingyu Li, Luchen Tan, Kun Xiong, Ming Li, Jimmy Lin | 2019 |\n| :newspaper: Paper | [Data Augmentation for BERT Fine-Tuning in Open-Domain Question Answering](https://arxiv.org/abs/1904.06652) | Wei Yang, Yuqing Xie, Luchen Tan, Kun Xiong, Ming Li, Jimmy Lin | 2019 |\n| :newspaper: Paper | [Passage Re-ranking with BERT](https://arxiv.org/abs/1901.04085) | Rodrigo Nogueira, Kyunghyun Cho | 2019 |\n| :newspaper: Paper | [MRQA: Machine Reading for Question Answering](https://mrqa.github.io/) | Jonathan Berant, Percy Liang, Luke Zettlemoyer | 2019 |\n| :newspaper: Paper | [Unsupervised Question Answering by Cloze Translation](https://arxiv.org/abs/1906.04980) | Patrick Lewis, Ludovic Denoyer, Sebastian Riedel | 2019 |\n| :computer: Framework | [Scikit-learn: Machine Learning in Python](http://jmlr.csail.mit.edu/papers/v12/pedregosa11a.html) | Pedregosa et al. | 2011 |\n| :computer: Framework | [PyTorch](https://arxiv.org/abs/1906.04980) | Adam Paszke, Sam Gross, Soumith Chintala, Gregory Chanan | 2016 |\n| :computer: Framework | [Transformers: State-of-the-art Natural Language Processing for TensorFlow 2.0 and PyTorch.](https://github.com/huggingface/transformers) | Hugging Face | 2018 |\n\n## LICENSE\n\n[Apache-2.0](LICENSE)", "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/cdqa-suite/cdQA", "keywords": "reading comprehension question answering deep learning natural language processing information retrieval bert", "license": "Apache-2.0", "maintainer": "", "maintainer_email": "", "name": "cdqa", "package_url": "https://pypi.org/project/cdqa/", "platform": "", "project_url": "https://pypi.org/project/cdqa/", "project_urls": { "Homepage": "https://github.com/cdqa-suite/cdQA" }, "release_url": "https://pypi.org/project/cdqa/1.3.9/", "requires_dist": null, "requires_python": "", "summary": "An End-To-End Closed Domain Question Answering System", "version": "1.3.9", "yanked": false, "yanked_reason": null }, "last_serial": 6229633, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "a4d6a9e73fe9783017e028d7bf6939ea", "sha256": "c8eaeafdcea5bd9ea02910f03c4bc384fe596c933a877fa3ab2a47c48e15dda2" }, "downloads": -1, "filename": "cdqa-1.0.0.tar.gz", "has_sig": false, "md5_digest": "a4d6a9e73fe9783017e028d7bf6939ea", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 35050, "upload_time": "2019-06-25T16:40:05", "upload_time_iso_8601": "2019-06-25T16:40:05.188374Z", "url": "https://files.pythonhosted.org/packages/9d/54/a4355982f976ebdc75b4475a61a929076b32f8ff9c7c22b2c70a0933b49b/cdqa-1.0.0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "88e1ffcaa483501da84ca008ce62d632", "sha256": "c8c91f2b6a57cd58567016ab64cf95cf56e3e49bc35e6472c60405a311b6976e" }, "downloads": -1, "filename": "cdqa-1.0.1.tar.gz", "has_sig": false, "md5_digest": "88e1ffcaa483501da84ca008ce62d632", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 39104, "upload_time": "2019-07-01T08:54:23", "upload_time_iso_8601": "2019-07-01T08:54:23.169186Z", "url": "https://files.pythonhosted.org/packages/83/d7/1966bc96eaf1b5386bf6077ffe74a94e49ac51da959d3b12385e07661667/cdqa-1.0.1.tar.gz", "yanked": false, "yanked_reason": null } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "40d0d0a3c20cdbc5222d8ef7906b5e74", "sha256": "37e9f6b061a5847dedd837a9eb0db19b4468084e85391bfaab7812bbe44cf4c9" }, "downloads": -1, "filename": "cdqa-1.0.2.tar.gz", "has_sig": false, "md5_digest": "40d0d0a3c20cdbc5222d8ef7906b5e74", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 45491, "upload_time": "2019-07-06T15:34:30", "upload_time_iso_8601": "2019-07-06T15:34:30.570014Z", "url": "https://files.pythonhosted.org/packages/d8/0e/f123dd0c7a60c5a5868fa07481df8af4ce6ce818397dda83525c0549ba38/cdqa-1.0.2.tar.gz", "yanked": false, "yanked_reason": null } ], "1.0.3": [ { "comment_text": "", "digests": { "md5": "7200ee3e4c0ab92cf7facdac8cacacc4", "sha256": "fc6cbc15a9f126f31ee18f38498a6a41cd78b926cd83a30fe4b0871de3c8ecb0" }, "downloads": -1, "filename": "cdqa-1.0.3.tar.gz", "has_sig": false, "md5_digest": "7200ee3e4c0ab92cf7facdac8cacacc4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 45350, "upload_time": "2019-07-08T07:32:23", "upload_time_iso_8601": "2019-07-08T07:32:23.815837Z", "url": "https://files.pythonhosted.org/packages/3d/36/697015f3d22d2eb9e2327871859c0e7ed854be316e39ca60ddd10a5f68e4/cdqa-1.0.3.tar.gz", "yanked": false, "yanked_reason": null } ], "1.0.4": [ { "comment_text": "", "digests": { "md5": "8514ad290a667258b42385eeb4191b56", "sha256": "f5d84ee58fc5c63cb6401c59d50b4bce5f49d1f4ed081cf00b87a1c6bc15ee4f" }, "downloads": -1, "filename": "cdqa-1.0.4.tar.gz", "has_sig": false, "md5_digest": "8514ad290a667258b42385eeb4191b56", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 45653, "upload_time": "2019-07-15T08:37:14", "upload_time_iso_8601": "2019-07-15T08:37:14.280285Z", "url": "https://files.pythonhosted.org/packages/65/84/8d012eb55f3c2b1624f1b55f9ccbb5cdb63f99af9e59135b5864fba770bb/cdqa-1.0.4.tar.gz", "yanked": false, "yanked_reason": null } ], "1.0.5": [ { "comment_text": "", "digests": { "md5": "8067db3b9c41f54dadd6ced208f88fa2", "sha256": "41ea6fc76dfd64dfc369c4e044781471968f1fe8962ede824927310a285ef9d4" }, "downloads": -1, "filename": "cdqa-1.0.5.tar.gz", "has_sig": false, "md5_digest": "8067db3b9c41f54dadd6ced208f88fa2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 46528, "upload_time": "2019-07-22T15:23:50", "upload_time_iso_8601": "2019-07-22T15:23:50.756562Z", "url": "https://files.pythonhosted.org/packages/03/46/e7de17db7a94eb27628228ed995877355850073db5e14ea46c68f3194e45/cdqa-1.0.5.tar.gz", "yanked": false, "yanked_reason": null } ], "1.0.6": [ { "comment_text": "", "digests": { "md5": "113d3b990fcfdd3c6b62d0dc1410df6d", "sha256": "fce3027ec1f8bb25eac0735d9cb43833c497d2b26f3f215279811e4209be74ae" }, "downloads": -1, "filename": "cdqa-1.0.6.tar.gz", "has_sig": false, "md5_digest": "113d3b990fcfdd3c6b62d0dc1410df6d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 46520, "upload_time": "2019-07-23T08:00:09", "upload_time_iso_8601": "2019-07-23T08:00:09.872287Z", "url": "https://files.pythonhosted.org/packages/76/18/dd0c3133c2e818e4e7a9d8b22d3ee861f2b92d538bbc6ce349efe7aecb94/cdqa-1.0.6.tar.gz", "yanked": false, "yanked_reason": null } ], "1.0.7": [ { "comment_text": "", "digests": { "md5": "5b204ff59ad5f6d9326ec8e98e346329", "sha256": "a7e4d2eb6d5f75eeb6a594f680cacb034bcfdb1f20d0948c25339f1ae79b62d6" }, "downloads": -1, "filename": "cdqa-1.0.7.tar.gz", "has_sig": false, "md5_digest": "5b204ff59ad5f6d9326ec8e98e346329", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 46596, "upload_time": "2019-07-25T20:18:56", "upload_time_iso_8601": "2019-07-25T20:18:56.672767Z", "url": "https://files.pythonhosted.org/packages/e6/93/ce415eaf3dc9d585f8575f32f9fca26939adc04e241035acd80e653d9213/cdqa-1.0.7.tar.gz", "yanked": false, "yanked_reason": null } ], "1.0.8": [ { "comment_text": "", "digests": { "md5": "0bb146f2f34c9f34489083624ee31be4", "sha256": "ef155cd955feeb31cd6923c8dc0563445057e28bdd31ac22fac9a3aba857ef23" }, "downloads": -1, "filename": "cdqa-1.0.8.tar.gz", "has_sig": false, "md5_digest": "0bb146f2f34c9f34489083624ee31be4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 46645, "upload_time": "2019-07-26T07:18:26", "upload_time_iso_8601": "2019-07-26T07:18:26.008337Z", "url": "https://files.pythonhosted.org/packages/a6/f5/97244d8099854c8511b51a813866c6f8f8d22fce866cd17648ca97e10516/cdqa-1.0.8.tar.gz", "yanked": false, "yanked_reason": null } ], "1.0.9": [ { "comment_text": "", "digests": { "md5": "660b4eb5009aecdd33122c3c3a2f25c6", "sha256": "32c2df3cc6eee4bc2af7d9d5e9cd66270367d24505f0ddd7f17cec950a16dae7" }, "downloads": -1, "filename": "cdqa-1.0.9.tar.gz", "has_sig": false, "md5_digest": "660b4eb5009aecdd33122c3c3a2f25c6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 45456, "upload_time": "2019-08-12T13:12:54", "upload_time_iso_8601": "2019-08-12T13:12:54.823385Z", "url": "https://files.pythonhosted.org/packages/34/b7/a1d158418dbac6bc7350dea89f259e7d6df0cd46778642eea8f88b93bd28/cdqa-1.0.9.tar.gz", "yanked": false, "yanked_reason": null } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "7df2647059def9176ed35f4761fcd86c", "sha256": "220f58278703e9aa95b8001646db51faf44f8f1a097728d9338d979cb306e4c7" }, "downloads": -1, "filename": "cdqa-1.1.0.tar.gz", "has_sig": false, "md5_digest": "7df2647059def9176ed35f4761fcd86c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 46478, "upload_time": "2019-08-13T08:56:17", "upload_time_iso_8601": "2019-08-13T08:56:17.655678Z", "url": "https://files.pythonhosted.org/packages/5d/56/e5c8595cd0f1a7fd7151ad0637dcf5681e83e7f07b81056b3da8258fb82d/cdqa-1.1.0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.1.1": [ { "comment_text": "", "digests": { "md5": "9d5935fcb5f0c556881eb8268bdca741", "sha256": "e4d9a1d990093c107f5b3044e847b3b9b6ed89035e10aa2a41bc664e960838df" }, "downloads": -1, "filename": "cdqa-1.1.1.tar.gz", "has_sig": false, "md5_digest": "9d5935fcb5f0c556881eb8268bdca741", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 47386, "upload_time": "2019-09-03T12:00:48", "upload_time_iso_8601": "2019-09-03T12:00:48.425884Z", "url": "https://files.pythonhosted.org/packages/47/3b/dc6267a09d803ec36b5c0bc3c8fe1898d827ade80e9003f8f71f7c370f45/cdqa-1.1.1.tar.gz", "yanked": false, "yanked_reason": null } ], "1.1.1b0": [ { "comment_text": "", "digests": { "md5": "06361ccf4e40ebaa465fc15e2fcd558e", "sha256": "b869ed72d049dbf5a1736b1f8cd2503ebb2e0075158513b2c0ab094ed527f9af" }, "downloads": -1, "filename": "cdqa-1.1.1b0.tar.gz", "has_sig": false, "md5_digest": "06361ccf4e40ebaa465fc15e2fcd558e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 47388, "upload_time": "2019-09-03T15:04:22", "upload_time_iso_8601": "2019-09-03T15:04:22.126509Z", "url": "https://files.pythonhosted.org/packages/4e/1c/37bcb8c26a5fc80726e295bdea6adcd260070bdcf3a27ec65e4f94f2faa5/cdqa-1.1.1b0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.1.2a0": [ { "comment_text": "", "digests": { "md5": "37c5718f607e3fa2082bfa230ac3bdd1", "sha256": "4bcb125d864af0f69ee89a695d5e69461d323be4f6ba4ceddf63123c6d7fa294" }, "downloads": -1, "filename": "cdqa-1.1.2a0.tar.gz", "has_sig": false, "md5_digest": "37c5718f607e3fa2082bfa230ac3bdd1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 48282, "upload_time": "2019-09-10T11:57:21", "upload_time_iso_8601": "2019-09-10T11:57:21.475988Z", "url": "https://files.pythonhosted.org/packages/fe/dc/bf21c3791aba20a1de465ec362832ababa993a267e9abdb8ba0a4dca4915/cdqa-1.1.2a0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.1.2b0": [ { "comment_text": "", "digests": { "md5": "40803a63dbc57d9ff13b84feeede91ba", "sha256": "52b311d78a02693b7fd39ae32bf422833c5d2dcef73a26f8b8ee504741af2b94" }, "downloads": -1, "filename": "cdqa-1.1.2b0.tar.gz", "has_sig": false, "md5_digest": "40803a63dbc57d9ff13b84feeede91ba", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 49079, "upload_time": "2019-09-11T15:47:06", "upload_time_iso_8601": "2019-09-11T15:47:06.246778Z", "url": "https://files.pythonhosted.org/packages/f2/a0/a9ec4bbcf18ea35c350a394f9fb5716baab7ed73516fb4873aeb44bd869a/cdqa-1.1.2b0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.1.3a0": [ { "comment_text": "", "digests": { "md5": "658e021684e7f1835b3c396a89cce56e", "sha256": "83112c644e7d617ce18c98723ab673c745a700332e8a7a8ed3c6b63ffb7d2b59" }, "downloads": -1, "filename": "cdqa-1.1.3a0.tar.gz", "has_sig": false, "md5_digest": "658e021684e7f1835b3c396a89cce56e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 49266, "upload_time": "2019-09-12T15:40:08", "upload_time_iso_8601": "2019-09-12T15:40:08.330581Z", "url": "https://files.pythonhosted.org/packages/9e/18/3c34897e26febd96c965bca796decd25b1ddd97535aca8562c8913539aad/cdqa-1.1.3a0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.1.3b0": [ { "comment_text": "", "digests": { "md5": "43ac9bb425ac9e0cc497c9c0e4625093", "sha256": "2bfe2b7b31b541285a2643ab0689e382f534a11ca2070865e7d553aaa718355a" }, "downloads": -1, "filename": "cdqa-1.1.3b0.tar.gz", "has_sig": false, "md5_digest": "43ac9bb425ac9e0cc497c9c0e4625093", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 49297, "upload_time": "2019-09-13T08:20:07", "upload_time_iso_8601": "2019-09-13T08:20:07.001748Z", "url": "https://files.pythonhosted.org/packages/e5/20/db0fb7a2a6a4777c5d5318f46fe665291460c04d1843ae7689fbb26da02b/cdqa-1.1.3b0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.1.3rc0": [ { "comment_text": "", "digests": { "md5": "e4395c4e617542c7ca4cc229dd504d66", "sha256": "64d8bdf3f212909c55a6c30e8c75691aceea4bcad2d60d19354ad950fec39774" }, "downloads": -1, "filename": "cdqa-1.1.3rc0.tar.gz", "has_sig": false, "md5_digest": "e4395c4e617542c7ca4cc229dd504d66", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 49794, "upload_time": "2019-09-13T08:23:30", "upload_time_iso_8601": "2019-09-13T08:23:30.992380Z", "url": "https://files.pythonhosted.org/packages/2f/64/bedda5453200530d08afbde4f7c8f23dedf75f841e43a1b5107359243b5d/cdqa-1.1.3rc0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.1.4a0": [ { "comment_text": "", "digests": { "md5": "5f535b29db1eb4db5ade4b3c6d483770", "sha256": "707dcd88413063e49522a4493a5ff6453ab73505e58b587d80c2034d48979ac5" }, "downloads": -1, "filename": "cdqa-1.1.4a0.tar.gz", "has_sig": false, "md5_digest": "5f535b29db1eb4db5ade4b3c6d483770", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 49900, "upload_time": "2019-09-13T10:23:27", "upload_time_iso_8601": "2019-09-13T10:23:27.448781Z", "url": "https://files.pythonhosted.org/packages/04/d3/789a7b2f3a85fa393e00382899aa4c438bf1e000cad4d9288e6684509df1/cdqa-1.1.4a0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.1.4b0": [ { "comment_text": "", "digests": { "md5": "196610f2c83f125191a964a992e0a02d", "sha256": "61433cca62a0e9aebce6dae1c14f123b2b707ac8b1c89ad23bbbfbc3dba5a9de" }, "downloads": -1, "filename": "cdqa-1.1.4b0.tar.gz", "has_sig": false, "md5_digest": "196610f2c83f125191a964a992e0a02d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 49888, "upload_time": "2019-09-13T10:27:39", "upload_time_iso_8601": "2019-09-13T10:27:39.466832Z", "url": "https://files.pythonhosted.org/packages/8e/c1/f84e6fe8b8f411406340592371e0ffb0957cc5b2721a733f75277faa953d/cdqa-1.1.4b0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.1.4rc0": [ { "comment_text": "", "digests": { "md5": "37e2bcb3ea81a1db85efe3e85c75ef40", "sha256": "3552d0703377c9bcbd527b0eb8978598a32fa87353f894eec1f77e7d0d442bc9" }, "downloads": -1, "filename": "cdqa-1.1.4rc0.tar.gz", "has_sig": false, "md5_digest": "37e2bcb3ea81a1db85efe3e85c75ef40", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 49900, "upload_time": "2019-09-13T10:28:50", "upload_time_iso_8601": "2019-09-13T10:28:50.344119Z", "url": "https://files.pythonhosted.org/packages/30/43/5d6018bef6294869049244d9e9810db70de6df33bd17a256b14a1546d4e2/cdqa-1.1.4rc0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "06b11fd02df4b8124e454a0dbefe4680", "sha256": "0f6512c84fc6ee5cc6833cce881c436da7101240dec40be0b6133d9f9f374e12" }, "downloads": -1, "filename": "cdqa-1.2.0.tar.gz", "has_sig": false, "md5_digest": "06b11fd02df4b8124e454a0dbefe4680", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 54812, "upload_time": "2019-09-18T14:40:18", "upload_time_iso_8601": "2019-09-18T14:40:18.844279Z", "url": "https://files.pythonhosted.org/packages/ae/96/5ef7dfb4f8a722def8639f62926b8429b57399c0de2ef9bcad45b651662b/cdqa-1.2.0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.2.0b0": [ { "comment_text": "", "digests": { "md5": "aa1b57f112cd9e0ff79ec1aa5aa86db0", "sha256": "4a2f2397813fbdada806a1704a94b99c25ef84ee51aca8a26a0740198a55c486" }, "downloads": -1, "filename": "cdqa-1.2.0b0.tar.gz", "has_sig": false, "md5_digest": "aa1b57f112cd9e0ff79ec1aa5aa86db0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 54814, "upload_time": "2019-09-19T15:54:00", "upload_time_iso_8601": "2019-09-19T15:54:00.046945Z", "url": "https://files.pythonhosted.org/packages/b4/a9/d79b39f871e24650f19486fa18a8c9931e1df5cc8c78e715343a6f04667e/cdqa-1.2.0b0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.2.0rc0": [ { "comment_text": "", "digests": { "md5": "2810aabf97bf1adeb301d842cbf90731", "sha256": "69fc944629ee5469af2cfb2d74ffc0197ccce3baea81af19b03c197e8e018a16" }, "downloads": -1, "filename": "cdqa-1.2.0rc0.tar.gz", "has_sig": false, "md5_digest": "2810aabf97bf1adeb301d842cbf90731", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 54875, "upload_time": "2019-09-20T10:43:32", "upload_time_iso_8601": "2019-09-20T10:43:32.818986Z", "url": "https://files.pythonhosted.org/packages/1b/70/16f5d883e774a280ee8007162b01001b561ec673ff5ad6d6c53ce53e4a29/cdqa-1.2.0rc0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.3.0": [ { "comment_text": "", "digests": { "md5": "08625ac71dbc71209513e1183eebc456", "sha256": "08ec2368465b9594bba407493338ae852a33863075f0511129d0f6b07feef53a" }, "downloads": -1, "filename": "cdqa-1.3.0.tar.gz", "has_sig": false, "md5_digest": "08625ac71dbc71209513e1183eebc456", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 56031, "upload_time": "2019-09-24T15:25:21", "upload_time_iso_8601": "2019-09-24T15:25:21.425264Z", "url": "https://files.pythonhosted.org/packages/ee/80/dd71cb2bf63d48bff222c714f923fc515a78e9b2f7e1528592a6e8562ed2/cdqa-1.3.0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.3.0b0": [ { "comment_text": "", "digests": { "md5": "9e293d78eb11b23c2d2968e585a84c93", "sha256": "d2c1abe3ed257cc8b2668d47974a6f29e1ce42c23f0c423dee379f0c7f592914" }, "downloads": -1, "filename": "cdqa-1.3.0b0.tar.gz", "has_sig": false, "md5_digest": "9e293d78eb11b23c2d2968e585a84c93", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 55978, "upload_time": "2019-09-25T07:20:01", "upload_time_iso_8601": "2019-09-25T07:20:01.602786Z", "url": "https://files.pythonhosted.org/packages/14/f7/ca9fadc4baa6116f836121bfdf654067420f095772ff5645b0c13645c0c2/cdqa-1.3.0b0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.3.0rc0": [ { "comment_text": "", "digests": { "md5": "1a7e50093a81c725d5220c80c86b3b2b", "sha256": "a6efa823ec672b0d0c7bfa0f581950d3f669a7e55fef5a1269bcacdd30531634" }, "downloads": -1, "filename": "cdqa-1.3.0rc0.tar.gz", "has_sig": false, "md5_digest": "1a7e50093a81c725d5220c80c86b3b2b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 55980, "upload_time": "2019-09-25T07:57:07", "upload_time_iso_8601": "2019-09-25T07:57:07.633740Z", "url": "https://files.pythonhosted.org/packages/7d/bc/a7f008235f4046dbca7a2754578e9a273d46f36bb0e52596a9133fe03bb6/cdqa-1.3.0rc0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.3.1": [ { "comment_text": "", "digests": { "md5": "73b51f709357b13e28dfba94d2d54ac3", "sha256": "2a9a686df099ad84aa56a42d6a7f5dc711dba64d87aefeaaa870de00c2253e47" }, "downloads": -1, "filename": "cdqa-1.3.1.tar.gz", "has_sig": false, "md5_digest": "73b51f709357b13e28dfba94d2d54ac3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 56727, "upload_time": "2019-09-27T09:33:48", "upload_time_iso_8601": "2019-09-27T09:33:48.451701Z", "url": "https://files.pythonhosted.org/packages/82/ab/8e4ee220e5e46b8ad2a29b491ecedc4b08b76290d17c732ebd9a6d0c6adb/cdqa-1.3.1.tar.gz", "yanked": false, "yanked_reason": null } ], "1.3.1b0": [ { "comment_text": "", "digests": { "md5": "b2283317bd88f3271e41d716d2f3152d", "sha256": "5d0682c0563995ff4defc33fec61580c661aa88db3dd2aa20b11d5f27e4110e7" }, "downloads": -1, "filename": "cdqa-1.3.1b0.tar.gz", "has_sig": false, "md5_digest": "b2283317bd88f3271e41d716d2f3152d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 56790, "upload_time": "2019-10-03T08:05:24", "upload_time_iso_8601": "2019-10-03T08:05:24.039964Z", "url": "https://files.pythonhosted.org/packages/7d/6e/ba4ae7d484910301cdbfa55b07654b09ed315eb832d5a8b17c08e5e2f876/cdqa-1.3.1b0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.3.2": [ { "comment_text": "", "digests": { "md5": "53380aaf16bc20b43b1debb9bdf158e3", "sha256": "ed8e887af13fe937f2c2bd5835364e533437e98d47ce05c0f075a0c3325a79dc" }, "downloads": -1, "filename": "cdqa-1.3.2.tar.gz", "has_sig": false, "md5_digest": "53380aaf16bc20b43b1debb9bdf158e3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 56777, "upload_time": "2019-10-03T14:30:46", "upload_time_iso_8601": "2019-10-03T14:30:46.039733Z", "url": "https://files.pythonhosted.org/packages/22/fd/0aceb5798fff93e68bb12c8150484d65e8b89a8a545070f1bd35389e091c/cdqa-1.3.2.tar.gz", "yanked": false, "yanked_reason": null } ], "1.3.3": [ { "comment_text": "", "digests": { "md5": "54766c1fd638b1529c769c78361648c9", "sha256": "11861ce818f74def21c310055a0ed78a229cedf02ef5aea05fc5dc52c15a9346" }, "downloads": -1, "filename": "cdqa-1.3.3.tar.gz", "has_sig": false, "md5_digest": "54766c1fd638b1529c769c78361648c9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 56786, "upload_time": "2019-10-23T14:44:54", "upload_time_iso_8601": "2019-10-23T14:44:54.867604Z", "url": "https://files.pythonhosted.org/packages/51/d9/8ccc36308c92ac07316526ae3b1fb777dcf8240342fc40911a7e3478f4aa/cdqa-1.3.3.tar.gz", "yanked": false, "yanked_reason": null } ], "1.3.4": [ { "comment_text": "", "digests": { "md5": "8eeb6d3cb6bdda7ffe4467c1a4dd11b1", "sha256": "ef43075e72d616eb954f585faa4479b700e8442940ae916980feead5d2e2d4dd" }, "downloads": -1, "filename": "cdqa-1.3.4.tar.gz", "has_sig": false, "md5_digest": "8eeb6d3cb6bdda7ffe4467c1a4dd11b1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 56794, "upload_time": "2019-10-25T13:50:32", "upload_time_iso_8601": "2019-10-25T13:50:32.977760Z", "url": "https://files.pythonhosted.org/packages/18/1a/f3b0c7bff881dd615ddd2ce778bdac00ce7ae2cd0792f324d5372fbeeaf0/cdqa-1.3.4.tar.gz", "yanked": false, "yanked_reason": null } ], "1.3.5": [ { "comment_text": "", "digests": { "md5": "4ad3949d4d2c26ef1831ed94b257726b", "sha256": "bdf0b57fb43471715ce05fb45420d5d03b84cfa9fd3cfa5d09d1b2e0f329280d" }, "downloads": -1, "filename": "cdqa-1.3.5.tar.gz", "has_sig": false, "md5_digest": "4ad3949d4d2c26ef1831ed94b257726b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 56469, "upload_time": "2019-10-30T09:34:11", "upload_time_iso_8601": "2019-10-30T09:34:11.970462Z", "url": "https://files.pythonhosted.org/packages/c2/02/ff021d2a34da02090b1e949e0edf354252668fb006e326def5c5e2b2bdcd/cdqa-1.3.5.tar.gz", "yanked": false, "yanked_reason": null } ], "1.3.6": [ { "comment_text": "", "digests": { "md5": "ac0d00c19116b153f14cd43c4e5e5c1b", "sha256": "a5b973fdb9151e7374013dd845c9b140d7b027181c400d995a1bf8b8b56c8825" }, "downloads": -1, "filename": "cdqa-1.3.6.tar.gz", "has_sig": false, "md5_digest": "ac0d00c19116b153f14cd43c4e5e5c1b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 44968, "upload_time": "2019-11-13T14:24:57", "upload_time_iso_8601": "2019-11-13T14:24:57.599720Z", "url": "https://files.pythonhosted.org/packages/52/6c/96cfd61c4c0c2f905e5d9183c0950a898a4b1380fa43ac25d3c952257a84/cdqa-1.3.6.tar.gz", "yanked": false, "yanked_reason": null } ], "1.3.7": [ { "comment_text": "", "digests": { "md5": "952d0300097ff9cabba66bc6a7cc1c16", "sha256": "775af8ae269f0f0f613ecf62c3cd9eaf099bb53436c6a7a7e3a663aa2bff3b27" }, "downloads": -1, "filename": "cdqa-1.3.7.tar.gz", "has_sig": false, "md5_digest": "952d0300097ff9cabba66bc6a7cc1c16", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 45316, "upload_time": "2019-11-20T15:09:05", "upload_time_iso_8601": "2019-11-20T15:09:05.322199Z", "url": "https://files.pythonhosted.org/packages/a8/8b/12ae0c3775feff06906fe9e4ecc9118c6e3acf1d087c5b544f5025f13248/cdqa-1.3.7.tar.gz", "yanked": false, "yanked_reason": null } ], "1.3.8": [ { "comment_text": "", "digests": { "md5": "c5227f9654acff12337129094ba6e510", "sha256": "638e7ae478b48cff83b4ad92ccf0476f5d13eb9586181bc78de6aee629bbd5b1" }, "downloads": -1, "filename": "cdqa-1.3.8.tar.gz", "has_sig": false, "md5_digest": "c5227f9654acff12337129094ba6e510", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 45329, "upload_time": "2019-11-29T11:26:20", "upload_time_iso_8601": "2019-11-29T11:26:20.154783Z", "url": "https://files.pythonhosted.org/packages/4e/e4/f2b076d3c860bf00c47364f09c60982506c7c822bc62c5258f110eaa6119/cdqa-1.3.8.tar.gz", "yanked": false, "yanked_reason": null } ], "1.3.9": [ { "comment_text": "", "digests": { "md5": "06ea81f331f761c77c2649ee2b9816c2", "sha256": "afed040807411e29a3450621473a8903029957488dc071cc660ebe90eeee2b04" }, "downloads": -1, "filename": "cdqa-1.3.9.tar.gz", "has_sig": false, "md5_digest": "06ea81f331f761c77c2649ee2b9816c2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 45329, "upload_time": "2019-12-02T16:18:50", "upload_time_iso_8601": "2019-12-02T16:18:50.429815Z", "url": "https://files.pythonhosted.org/packages/39/f5/af831b7ee653aa6bace99e39ec6b2754b1adb10bb60a1296f5e16f1f24ee/cdqa-1.3.9.tar.gz", "yanked": false, "yanked_reason": null } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "06ea81f331f761c77c2649ee2b9816c2", "sha256": "afed040807411e29a3450621473a8903029957488dc071cc660ebe90eeee2b04" }, "downloads": -1, "filename": "cdqa-1.3.9.tar.gz", "has_sig": false, "md5_digest": "06ea81f331f761c77c2649ee2b9816c2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 45329, "upload_time": "2019-12-02T16:18:50", "upload_time_iso_8601": "2019-12-02T16:18:50.429815Z", "url": "https://files.pythonhosted.org/packages/39/f5/af831b7ee653aa6bace99e39ec6b2754b1adb10bb60a1296f5e16f1f24ee/cdqa-1.3.9.tar.gz", "yanked": false, "yanked_reason": null } ] }