{ "info": { "author": "Sadamori Kojaku", "author_email": "sadamori.koujaku@bristol.ac.uk", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Intended Audience :: Science/Research", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Topic :: Software Development" ], "description": "Python codes for the (q, s)-test, a significance test for individual communities in networks. \n\nPlease cite\n\n Kojaku, S. and Masuda, N. \"A generalised significance test for individual communities in networks\". Preprint arXiv: 1712.00298 (2017)\n\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\nContents\n \n LICENSE - License of qstest\n \n README.md - README file for Github\t\n\n README.txt - This README file\n\n setup.py - Script for installing qstest\n \n requirements.txt - List of libraries installed by setup.py \n\n test.py - Test code for Travis CI\n\n .gitignore - Configuration file for GitHub\n \n .travis.yml - Configuration file for Travis CI\n \n qstest/ - Python codes for the (q, s)-test:\n \n qstest/__init__.py - Header file\n \n qstest/cdalgorithm_wrapper.py - Codes for community-detection algorithms\n\n qstest/qstest.py contains - Codes for the (q, s)-test \n\n qstest/quality_functions.py - Codes for calculating quality functions of a community \n \n qstest/size_functions.py - Codes for calculating the size of a community\n \n examples/ - example codes:\n \n examples/example1.py - Usage of qstest with a built-in quality function, community-size function and community detection algorithm\n\n examples/example2.py - Usage of qstest with a user-defined quality function\n\n examples/example3.py - Usage of qstest with a user-defined community-size function \n\n examples/example4.py - Usage of qstest with a user-defined community-detection algorithm\n\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\nInstallation\n\n You can install qstest with pip, a package management system for Python.\n \n To install, run \n\n pip install qstest\n\n If this does not work, try \n\t\n python setup.py install\n\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\nUsage\n \n sg, p_values = qstest(network, communities, qfunc, sfunc, cdalgorithm, num_of_rand_net = 500, alpha = 0.05, num_of_thread = 4)\n \n Input \n\n network - Networkx Graph class instance\n \n communities - C-dimensional list of lists. communities[c] is a list containing the IDs of nodes belonging to community c. Node and community indices start from 0.\n \n qfunc - Quality of a community. The following quality functions are available:\n \n qmod - Contribution of a community to the modularity \n \n qint - Internal average degree \n \n qexp - Expansion\u3000\n \u3000\n qcnd - Conductance\u3000\n \n To pass your quality function to qstest, see \"How to pass your quality function to qstest\" below.\n \n sfunc - Community-size function (i.e., size of a community). The following community-size functions are available:\n \n n - Number of nodes in a community\n \n vol - Sum of the degrees of nodes in a community\n \n To pass your community-size function to qstest, see \"How to pass your community-size function to qstest\" below.\n \n cdalgorithm - Community-detection algorithm. The following algorithms are available:\n \n louvain - Louvain algorithm (http://perso.crans.org/aynaud/communities/index.html)\n \n label_propagation - Label propagation algorithm (https://networkx.github.io/documentation/stable/reference/algorithms/community.html)\n \n To pass your community-detection algorithm to qstest, see \"How to pass your community-detection algorithm to qstest\" below.\n \n num_of_rand_net (optional) - Number of randomised networks (Default: 500)\n \n alpha (optional) - Statistical significance level before the \u0160id\u00e1k correction (Default: 0.05)\n \n num_of_thread (optional) - Maximum number of CPU threads (Default: 4)\n \n Output\n\n sg - Results of the significance test (C-dimensional list). sg[c] = True or False indicates that community c is significant or insignificant, respectively. \n \n p_values - P-values for the communities (C-dimensional list). p_values[c] is the p-value for community c. \n \n Example (examples/example1.py)\n \n import networkx as nx\n import qstest as qs\n \n network = nx.karate_club_graph()\n communities = qs.louvain(network)\n sg, p_values = qs.qstest(network, communities, qs.qmod, qs.vol, qs.louvain)\n\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\nHow to pass your quality function to qstest\n\n Write a quality function of a community as follows:\n\n q = my_qfunc(network, community)\n\n Input\n \n network - Networkx Graph class instance\n \n community - List of nodes belonging to a community\n \n Output\n \n q - Quality of the community\n\n Then, pass my_qfunc to qstest:\n\n sg, p_values = qstest(network, communities, my_qfunc, sfunc, cdalgorithm)\n\n Example (examples/example2.py)\n\n import networkx as nx\n import qstest as qs\n \n # Number of intra-community edges\n def my_qfunc(network, nodes):\n return network.subgraph(nodes).size()\n \n network = nx.karate_club_graph()\n communities = qs.louvain(network)\n sg, p_values = qs.qstest(network, communities, my_qfunc, qs.vol, qs.louvain)\n\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\nHow to pass your community-size function to qstest\n \n Write a community-size function of a community as follows:\n \n s = my_sfunc(network, community)\n\n Input\n\n network - Networkx Graph class instance\n \n community - List of the IDs of nodes belonging to a community\n\n Output\n\n s - Size of the community\n\n Then, pass my_sfunc to qstest:\n\n sg, p_values = qstest(network, communities, qfunc, my_sfunc, cdalgorithm)\n\n Example (examples/example3.py)\n\n import networkx as nx\n import qstest as qs\n \n # Square of the number of nodes in a community\n def my_sfunc(network, nodes):\n return len(nodes) * len(nodes)\n \n network = nx.karate_club_graph()\n communities = qs.louvain(network)\n sg, p_values = qs.qstest(network, communities, qs.qmod, my_sfunc, qs.louvain)\n\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\nHow to pass your community-detection algorithm to qstest\n\n To pass your community-detection algorithm to qstest, write a wrapper function of the following form:\n \n communities = my_cdalgorithm(network)\n\n Input \n\n network - Networkx Graph class instance\n \n Output\n\n communities - C-dimensional list of lists. communities[c] is a list containing the IDs of nodes belonging to community c.\n \n Then, pass my_cdalgorithm to qstest:\n\n sg, p_values = qstest(network, communities, qfunc, sfunc, my_cdalgorithm)\n \n If the community-detection algorithm requires parameters such as the number of communities, then pass the parameters as global variables, e.g., define a global variable X, then use X within the cdalgorithm.\n \n Example (examples/example4.py)\n\n import networkx as nx\n import qstest as qs\n from networkx.algorithms import community as nxcdalgorithm\n \n # Wrapper function for async_fluidc implemented in Networkx 2.0\n def my_cdalgorithm(network):\n communities = []\n subnets = nx.connected_component_subgraphs(network)\n for subnet in subnets:\n coms_iter = nxcdalgorithm.asyn_fluidc(subnet, min([C, subnet.order()]), maxiter)\n for nodes in iter(coms_iter):\n communities.append(list(nodes))\n return communities\n \n # Pareameters of async_fluidc\n C = 3\n maxiter = 10\n \n network = nx.karate_club_graph()\n communities = my_cdalgorithm(network)\n sg, p_values = qs.qstest(network, communities, qs.qmod, qs.vol, my_cdalgorithm)\n\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\nRequirements\n\n Python 2.7, 3.4 or later\n\n SciPy 1.0 or later\n\n Networkx 2.0 or later\n\n python-louvain 0.9\n\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\nLast updated: 29 November 2017", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/skojaku/qstest.git", "keywords": "network community significance test", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "qstest", "package_url": "https://pypi.org/project/qstest/", "platform": "", "project_url": "https://pypi.org/project/qstest/", "project_urls": { "Homepage": "https://github.com/skojaku/qstest.git" }, "release_url": "https://pypi.org/project/qstest/1.1.0/", "requires_dist": null, "requires_python": "", "summary": "Python code for the (q,s)-test", "version": "1.1.0" }, "last_serial": 3630506, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "c87d56586721c368bac2f0aab4698031", "sha256": "8c50e674ae430d11e12bba5467eaccefd35a0dafabec52d189d15a8b3c212cf3" }, "downloads": -1, "filename": "qstest-1.0.0-py2-none-any.whl", "has_sig": false, "md5_digest": "c87d56586721c368bac2f0aab4698031", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 4383, "upload_time": "2017-11-24T18:46:00", "url": "https://files.pythonhosted.org/packages/39/24/976381ec2cbcaa4f43447fa8aadd57b8aa2998773eebc09ef201058a8507/qstest-1.0.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c0caa8094ea3a643963f53542d69c547", "sha256": "3b54d186d3dfcd7ea4b02d62d5e5ffa89c3770ea8d4f7c6458544b5b17ebeccd" }, "downloads": -1, "filename": "qstest-1.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "c0caa8094ea3a643963f53542d69c547", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 4432, "upload_time": "2017-11-24T18:46:03", "url": "https://files.pythonhosted.org/packages/88/b9/20cf7cf2c0e1bc828b8c32da81e950a766312ee1ab9f345a5324fc714ab2/qstest-1.0.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3bd257d42e43cf65423ae2238a105e59", "sha256": "892787041d5da9efd49458c5ffc19220714136009c3919607c03478e417533b9" }, "downloads": -1, "filename": "qstest-1.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "3bd257d42e43cf65423ae2238a105e59", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 4384, "upload_time": "2017-11-24T18:46:05", "url": "https://files.pythonhosted.org/packages/9f/1e/f612d86619958af1f75eb28999dfb7e9e141f008e495a6a9a9e07a0f3a12/qstest-1.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d60fc5b04f32a9bcb4aada016d77fddb", "sha256": "1900f901b56604f7f28c9274b8545d0d95d4d30f33cec02afbe04ae0d6647d37" }, "downloads": -1, "filename": "qstest-1.0.0.tar.gz", "has_sig": false, "md5_digest": "d60fc5b04f32a9bcb4aada016d77fddb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3207, "upload_time": "2017-11-24T18:46:08", "url": "https://files.pythonhosted.org/packages/07/b2/abc2ad3c7c68dec1b8ccada9c63e9944f0fc6b97b926470cf02f97b7959e/qstest-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "f8305e9a147015feb30236a78827a186", "sha256": "1016a936b5572749b9caa5ed03c5767cc5dd01ad1cc914d7cb6fde7558554a03" }, "downloads": -1, "filename": "qstest-1.0.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f8305e9a147015feb30236a78827a186", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 5472, "upload_time": "2017-11-27T14:21:44", "url": "https://files.pythonhosted.org/packages/bb/3e/ab9c0925d77e40e9b85601945cc6c66e1da972f33798511bba2fe365e9e5/qstest-1.0.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "edcc910f29b79d7277937fdaa77b762c", "sha256": "fcf3552366fd5816797a4cffd5c5d2aa23501a7aad47fed16d571e460b7513c9" }, "downloads": -1, "filename": "qstest-1.0.1.tar.gz", "has_sig": false, "md5_digest": "edcc910f29b79d7277937fdaa77b762c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5236, "upload_time": "2017-11-27T14:21:50", "url": "https://files.pythonhosted.org/packages/dd/39/e87cd0e0bdfede0addb7e20f23213f3ee8622f2c97c380b2ecd8c2350989/qstest-1.0.1.tar.gz" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "7855d78bcf39b68fe26d399a971bdfac", "sha256": "b14395c95901c62f4c640bb14791319c942e3ce6c27376f3e8620d78c9d8c7c1" }, "downloads": -1, "filename": "qstest-1.0.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "7855d78bcf39b68fe26d399a971bdfac", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 2144, "upload_time": "2017-11-27T16:20:02", "url": "https://files.pythonhosted.org/packages/7e/2e/6db98a04f451ca80cc90b375db58cbcd0bda30fded7ec3a88c8925707d86/qstest-1.0.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "be72b5e3b70b387a7cb394bfd377a0b0", "sha256": "5275578608d53cc95e2be0eaf0966df595e58da19b10002e2273661e15b0d37b" }, "downloads": -1, "filename": "qstest-1.0.2.tar.gz", "has_sig": false, "md5_digest": "be72b5e3b70b387a7cb394bfd377a0b0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1617, "upload_time": "2017-11-27T16:20:06", "url": "https://files.pythonhosted.org/packages/95/58/dbd3e6441ab28bfa22bca7acb408bb81ad5991fb7e102fcd07f0d6f69f77/qstest-1.0.2.tar.gz" } ], "1.0.3": [ { "comment_text": "", "digests": { "md5": "9df35c57c42bbadda7c93fe08ce5544b", "sha256": "aeb7f7d8bea98f229a0e39efd10e042c122cb9ba81ef81fb77e3cc8f2e5c7484" }, "downloads": -1, "filename": "qstest-1.0.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "9df35c57c42bbadda7c93fe08ce5544b", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 2180, "upload_time": "2017-11-27T18:08:17", "url": "https://files.pythonhosted.org/packages/22/d7/01597ee70a4a03d801b2fb97b957e45723095d89c7d615528031a7433fba/qstest-1.0.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b29577f38e5fbff33bfd33d95d12c7cc", "sha256": "2d7c71e38a547836a4fc036f2091b1791476fd98df45d3d033511239b031ad0f" }, "downloads": -1, "filename": "qstest-1.0.3.tar.gz", "has_sig": false, "md5_digest": "b29577f38e5fbff33bfd33d95d12c7cc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1637, "upload_time": "2017-11-27T18:08:18", "url": "https://files.pythonhosted.org/packages/b5/27/95800f2831f4cc6c301ec6a76e13e83120bb47b76782e8fbe00754b41a2c/qstest-1.0.3.tar.gz" } ], "1.0.4": [ { "comment_text": "", "digests": { "md5": "52e81399a0bed711882c012ad2731b42", "sha256": "670f3f9264cc2981072e4f7635c71f9affa79d78570328d4ddadfc39eeafd502" }, "downloads": -1, "filename": "qstest-1.0.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "52e81399a0bed711882c012ad2731b42", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 2178, "upload_time": "2017-11-29T12:11:49", "url": "https://files.pythonhosted.org/packages/03/1d/3477ee9d6187ff8f2a6c534e1ec6b145e93d9592e2b15cec9b2d156f0fc6/qstest-1.0.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "252683737ea16a018b98009a274ef387", "sha256": "d7acf5695ef123f802d86d5676a6770d89fc7e425a0cb89946a0daedca93c974" }, "downloads": -1, "filename": "qstest-1.0.4.tar.gz", "has_sig": false, "md5_digest": "252683737ea16a018b98009a274ef387", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1668, "upload_time": "2017-11-29T12:11:51", "url": "https://files.pythonhosted.org/packages/15/db/4b3bec6b22f893495a8322a91578c16d687e25bc6f67c2e1b2213084cc54/qstest-1.0.4.tar.gz" } ], "1.0.5": [ { "comment_text": "", "digests": { "md5": "b7a1b645ef7223e7c162dde137b919a3", "sha256": "ffb89ced7d8e9c43073f7068810ee0f9edd7347d6013619a2acb7c40dfa06bf3" }, "downloads": -1, "filename": "qstest-1.0.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "b7a1b645ef7223e7c162dde137b919a3", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 5967, "upload_time": "2017-11-29T12:38:28", "url": "https://files.pythonhosted.org/packages/7a/f1/817aac806d42fd0f66b1afd0e2a5d6ecccc998f0d8d0b01500477e0da772/qstest-1.0.5-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "548bf29a99ade7f6b6b2b38fbb6c3618", "sha256": "63808d0e236a2f3f23b05ec449c421149653575a4638c877e6ba4f258729716f" }, "downloads": -1, "filename": "qstest-1.0.5.tar.gz", "has_sig": false, "md5_digest": "548bf29a99ade7f6b6b2b38fbb6c3618", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4053, "upload_time": "2017-11-29T12:38:29", "url": "https://files.pythonhosted.org/packages/3f/f5/e15fbd1ff53a10e34fc515d796975118c2b5cc9560d9ce1857f80178b4c7/qstest-1.0.5.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "2ac4712f55118c2d7ffa21c204066c59", "sha256": "5786caa0f627de836622fa27824525d948bde294f88563b2aa814392ab0c6ee7" }, "downloads": -1, "filename": "qstest-1.1.0.tar.gz", "has_sig": false, "md5_digest": "2ac4712f55118c2d7ffa21c204066c59", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4192, "upload_time": "2018-03-01T23:27:58", "url": "https://files.pythonhosted.org/packages/b6/ad/3ef11264f577b53696c8839cc7a8c8b022f23789df815e0ec1d8482eaf87/qstest-1.1.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "2ac4712f55118c2d7ffa21c204066c59", "sha256": "5786caa0f627de836622fa27824525d948bde294f88563b2aa814392ab0c6ee7" }, "downloads": -1, "filename": "qstest-1.1.0.tar.gz", "has_sig": false, "md5_digest": "2ac4712f55118c2d7ffa21c204066c59", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4192, "upload_time": "2018-03-01T23:27:58", "url": "https://files.pythonhosted.org/packages/b6/ad/3ef11264f577b53696c8839cc7a8c8b022f23789df815e0ec1d8482eaf87/qstest-1.1.0.tar.gz" } ] }