{ "info": { "author": "", "author_email": "", "bugtrack_url": null, "classifiers": [], "description": "Python Wrapper for Lolo\n=======================\n\n``lolopy`` implements a Python interface to the `Lolo machine learning\nlibrary `__.\n\nLolo is a Scala library that contains a variety of machine learning\nalgorithms, with a particular focus on algorithms that provide robust\nuncertainty estimates. ``lolopy`` gives access to these algorithms as\nscikit-learn compatible interfaces and automatically manages the\ninterface between Python and the JVM (i.e., you can use ``lolopy``\nwithout knowing that it is running on the JVM)\n\nInstallation\n------------\n\n``lolopy`` is available on PyPi. Install it by calling:\n\n``pip install lolopy``\n\nTo use ``lolopy``, you will also need to install Java JRE >= 1.8 on your\nsystem. The ``lolopy`` PyPi package contains the compiled ``lolo``\nlibrary, so it is ready to use after installation.\n\nDevelopment\n~~~~~~~~~~~\n\nLolopy requires Python >= 3.6, Java JDK >= 1.8, and Maven to be\ninstalled on your system when developing lolopy.\n\nBefore developing ``lolopy``, compile ``lolo`` on your system using\nMaven. We have provided a ``Makefile`` that contains the needed\noperations. To build and install ``lolopy`` call ``make`` in this\ndirectory.\n\nUse\n---\n\nThe ``RandomForestRegressor`` class most clearly demonstrates the use of\n``lolopy``. This class is based on the `Random Forest with\nJackknife-based uncertainty estimates of Wagner et\nal `__, which -\nin effect - uses the variance between different trees in the forest to\nproduce estimates of the uncertainty of each prediction. Using this\nalgorithm is as simple as using the `RandomForestRegressor from\nscikit-learn `__:\n\n.. code:: python\n\n from lolopy.learners import RandomForestRegressor\n\n rf = RandomForestRegressor()\n rf.fit(X, y)\n y_pred, y_std = rf.predict(X, return_std=True)\n\nThe results of this code is to produce the predicted values (``y_pred``)\nand their uncertainties (``y_std``).\n\nSee the ```examples`` <./examples>`__ folder for more examples and\ndetails.\n\nYou may need to increase the amount of memory available to ``lolopy``\nwhen using it on larger dataset sizes. Setting the maximum memory\nfootprint for the JVM running the machine learning calculations can be\nachieved by setting the ``LOLOPY_JVM_MEMORY`` environment variable. The\nvalue for ``LOLOPY_JVM_MEMORY`` is used to set the maximum heap size for\nthe JVM (see `Oracle's documentation for\ndetails `__).\nFor example, \"4g\" allows ``lolo`` to use 4GB of memory.\n\nImplementation and Performance\n------------------------------\n\n``lolopy`` is built using the `Py4J `__ library\nto interface with the Lolo scala library. Py4J provides the ability to\neasily managing a JVM server, create Java objects in that JVM, and call\nJava methods from Python. However, Py4J `has slow performance in\ntransfering large\narrays `__. To transfer\narrays of features (e.g., training data) to the JVM before model\ntraining or evaluation, we transform the data to/from Byte arrays on the\nJava and Python sides. Transfering data as byte arrays does allow for\nquickly moving data between the JVM and Python but requires holding 3\ncopies of the data in memory at once (Python, Java Byte array, and Java\nnumerical array). We could reduce memory usage by passing the byte array\nin chunks, but this is currently not implemented.\n\nOur performance for model training is comparable to scikit-learn, as\nshown in the figure below. The blue-shaded region in the figure\nrepresents the time required to pass training data to the JVM. We note\nthat training times are equivalent between using the Scala interface to\nLolo and ``lolopy`` for training set sizes above 100.\n\n.. figure:: ./examples/profile/training-performance.png\n :alt: training performance\n\n training performance\nLolopy and lolo are currently slower than scikit-learn for model\nevaluation, as shown in the figure below. The model timings are\nevaluated on a dataset size of 1000 with 145 features. The decrease in\nmodel performance with training set size is an effect of the number of\ntrees in the forest being equal to the training set size. Lolopy and\nlolo have similar performance for models with training set sizes of\nabove 100. Below a training set size of 100, the cost of sending data\nlimits the performance of ``lolopy``.\n\n.. figure:: ./examples/profile/evaluation-performance.png\n :alt: evaluation performance\n\n evaluation performance\nFor more details, see the `benchmarking\nnotebook <./examples/profile/scaling-test.ipynb>`__.\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/CitrineInformatics/lolo", "keywords": "", "license": "", "maintainer": "Max Hutchinson", "maintainer_email": "maxhutch@citrine.io", "name": "lolopy", "package_url": "https://pypi.org/project/lolopy/", "platform": "", "project_url": "https://pypi.org/project/lolopy/", "project_urls": { "Homepage": "https://github.com/CitrineInformatics/lolo" }, "release_url": "https://pypi.org/project/lolopy/1.0.4/", "requires_dist": [ "scikit-learn", "py4j" ], "requires_python": "", "summary": "Python wrapper for the Lolo machine learning library", "version": "1.0.4" }, "last_serial": 5210256, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "f216231072f0a156949fb49c27e6bca2", "sha256": "32ee29ec03df6b62dde71bac5b1e40cfa48f57eae0d4a2a887e14e6c36cf61df" }, "downloads": -1, "filename": "lolopy-0.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f216231072f0a156949fb49c27e6bca2", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 51008755, "upload_time": "2019-01-18T22:41:02", "url": "https://files.pythonhosted.org/packages/f2/45/e1ecff3676c3155eb44bc829a7ff8af7539fe57f1abe9da285fbc9ead163/lolopy-0.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7be0e332cad6e25435427cbf52a7c4b2", "sha256": "9bc73ae3b3ec5541b8b49a0ca579af19429b11e41836000c8ead38c84ad07726" }, "downloads": -1, "filename": "lolopy-0.1.0.tar.gz", "has_sig": false, "md5_digest": "7be0e332cad6e25435427cbf52a7c4b2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 50997919, "upload_time": "2019-01-18T22:41:13", "url": "https://files.pythonhosted.org/packages/5e/97/e3e237781c7b8f8be3eb99c194f2a0f5f86e61635e4876bfde11d32b2802/lolopy-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "ed25d77e854079bdbefea1735340457e", "sha256": "c8d06a4c922e4d401a2f8486d7a2c0db596b29880dd62731229da8b04d22f9bc" }, "downloads": -1, "filename": "lolopy-0.1.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "ed25d77e854079bdbefea1735340457e", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 51008648, "upload_time": "2019-01-20T00:00:51", "url": "https://files.pythonhosted.org/packages/1e/cb/5ab98f3ad36cebe3535faf55fa4e54914e47f22bd4c4d55acbe9cfecec71/lolopy-0.1.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "cf4c9d5b2746f73112a3d4a37482c0f4", "sha256": "d96e16cfa221bc0575017c472d29203f1f843a8f9075427518ff1e157f1d679d" }, "downloads": -1, "filename": "lolopy-0.1.1.tar.gz", "has_sig": false, "md5_digest": "cf4c9d5b2746f73112a3d4a37482c0f4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 50997651, "upload_time": "2019-01-20T00:01:02", "url": "https://files.pythonhosted.org/packages/d5/9a/319c9a53232c1df4f4cbd59707c0537d65bf8ebab93c79a97c5d3157954b/lolopy-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "4d93e092b2f768ea4e0bdbecb6a48e28", "sha256": "19be4d080f201ab9f896015f554b49ee94a1d02ef7d25de56485f3eba86a7816" }, "downloads": -1, "filename": "lolopy-0.1.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "4d93e092b2f768ea4e0bdbecb6a48e28", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 51008697, "upload_time": "2019-01-20T00:19:22", "url": "https://files.pythonhosted.org/packages/73/5f/c226388a58c25d6ebd355d637599192fc75e50c2f70e9eb06bae75aa0418/lolopy-0.1.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c7af00e736c1822865a752dd6e4c3d24", "sha256": "bf3a241611341f98b842c5258d88d5ab8a646016491c52615995066859dd217c" }, "downloads": -1, "filename": "lolopy-0.1.2.tar.gz", "has_sig": false, "md5_digest": "c7af00e736c1822865a752dd6e4c3d24", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 50997778, "upload_time": "2019-01-20T00:19:32", "url": "https://files.pythonhosted.org/packages/bc/45/468858a5f69d1ba67168fe887e30333a0175c2f5cb320b8a9922d6b498c7/lolopy-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "198c8e14143f13e3db94761d78c81e3e", "sha256": "92e6561d61fd6368ee88d00e319b5928b737b3a927b6f1e4b179a1646bb6da5a" }, "downloads": -1, "filename": "lolopy-0.1.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "198c8e14143f13e3db94761d78c81e3e", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 51010517, "upload_time": "2019-01-20T00:35:10", "url": "https://files.pythonhosted.org/packages/e7/12/bb151244757d5227880f7f3d2cc4cad5d110668484467ee7050da97ae468/lolopy-0.1.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2861e490cc44e6aeae98a177c5d1387c", "sha256": "70adf0a62ef0598a6f33ff8e688f2917983200408b4e5714cf04369532055953" }, "downloads": -1, "filename": "lolopy-0.1.3.tar.gz", "has_sig": false, "md5_digest": "2861e490cc44e6aeae98a177c5d1387c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 50999889, "upload_time": "2019-01-20T00:35:20", "url": "https://files.pythonhosted.org/packages/42/22/fd204b0c030abd0a5885fd1a946d9855fdfbee7fbb2b0ce064850712c4f4/lolopy-0.1.3.tar.gz" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "6fde5f1584f508d845e4c8ddf0596a20", "sha256": "d43cdb641d67882ad18d2a2e857138c701affd6e72b65cb529cba0f42105d79f" }, "downloads": -1, "filename": "lolopy-0.1.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "6fde5f1584f508d845e4c8ddf0596a20", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 51010376, "upload_time": "2019-02-08T01:45:37", "url": "https://files.pythonhosted.org/packages/d6/15/50196fdcd5e7c30ac36c48ced02663b313879d408f3053c08711332bd966/lolopy-0.1.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "af1137cb4cedbd27bd03a415c51be63e", "sha256": "88c8d2967763a52e9b65d9b622692587d2a60baf844a92758f3cc9a3b46efee9" }, "downloads": -1, "filename": "lolopy-0.1.4.tar.gz", "has_sig": false, "md5_digest": "af1137cb4cedbd27bd03a415c51be63e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 50999752, "upload_time": "2019-02-08T01:45:44", "url": "https://files.pythonhosted.org/packages/f0/52/8399a3604eaa604dc04072c9cedc00d2ff03bbaa5b86c91e8c1432c9414c/lolopy-0.1.4.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "f55a05b05f54af86707986cd2b62c0ac", "sha256": "70483c66afb9b5bfa93583444f2e080cd9cb6cc878153de5a0b9f89e77d56c88" }, "downloads": -1, "filename": "lolopy-0.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f55a05b05f54af86707986cd2b62c0ac", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 51419983, "upload_time": "2019-02-12T17:43:26", "url": "https://files.pythonhosted.org/packages/0a/47/b422221594efcba535b8cb97a19d1991759f8635af42f8cce1d0e7f4ae30/lolopy-0.2.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3edeb6be256298f01c4a2f5ba35b4fbc", "sha256": "30c1ef7750de4cbfcccd5712499e0837981d025305a7fccb3486378daeb77cbd" }, "downloads": -1, "filename": "lolopy-0.2.0.tar.gz", "has_sig": false, "md5_digest": "3edeb6be256298f01c4a2f5ba35b4fbc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 51408909, "upload_time": "2019-02-12T17:43:33", "url": "https://files.pythonhosted.org/packages/4c/15/e4a5338e2ef490be7461d575e98abd61245bacde4fcca0c9f569d1bb250e/lolopy-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "501cff992a34a83eece0052c2dff7e51", "sha256": "db30b020aa1e0426cd32f657333e58e8d369453263d3d12e80c81b992b9c8516" }, "downloads": -1, "filename": "lolopy-0.2.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "501cff992a34a83eece0052c2dff7e51", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 51420879, "upload_time": "2019-02-19T18:54:55", "url": "https://files.pythonhosted.org/packages/60/e1/c581f950c320838877412bc5e37e081f6315f51ccb18de8685fb8166a435/lolopy-0.2.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ea28612777f4918c7e7ce1d227bbe2b3", "sha256": "f96d577ad61fef77ec1d93d91702da9ec618031800d013da1f5527a33014f84f" }, "downloads": -1, "filename": "lolopy-0.2.1.tar.gz", "has_sig": false, "md5_digest": "ea28612777f4918c7e7ce1d227bbe2b3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 51410099, "upload_time": "2019-02-19T18:55:03", "url": "https://files.pythonhosted.org/packages/85/5c/233e762dedeea75d9292176027cc85c15e6af340b1c6a1a0d2e301969813/lolopy-0.2.1.tar.gz" } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "63ae19409a20973c3222bad0f5b740b0", "sha256": "f8836fd3c98b51ed18b845a53f698c1597368b93b627133cfe48544b7cb3cf68" }, "downloads": -1, "filename": "lolopy-1.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "63ae19409a20973c3222bad0f5b740b0", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 51433278, "upload_time": "2019-02-28T19:24:15", "url": "https://files.pythonhosted.org/packages/bd/e8/85a2ab6dfb0612382bb5b2908b86a914b23033df65619ae12da5fc1928a5/lolopy-1.0.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6ce3d56f74ac4bdfd82e3e9c4060e9d9", "sha256": "dcc0b92fa951e6760c47dcd5d753d1ec3d30debe370c84914db9dd3b1157e1cb" }, "downloads": -1, "filename": "lolopy-1.0.0.tar.gz", "has_sig": false, "md5_digest": "6ce3d56f74ac4bdfd82e3e9c4060e9d9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 51421261, "upload_time": "2019-02-28T19:24:23", "url": "https://files.pythonhosted.org/packages/86/c3/d5a64e695304b0d2bb75c212e85df08222ce49417a5999463d3dda0df0da/lolopy-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "2efebd910ddfe32c650b5b747258c222", "sha256": "553706a31d7413c0a118a61b078e77a1c7c6c315f6674117f0cc83ba61438efa" }, "downloads": -1, "filename": "lolopy-1.0.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "2efebd910ddfe32c650b5b747258c222", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 51433584, "upload_time": "2019-03-08T01:15:01", "url": "https://files.pythonhosted.org/packages/b5/7a/34e5afb246c836f5f184cc7f3953d0a1d8a621539df508bcb414160203af/lolopy-1.0.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f689d437d30f22821d3966b01f1a119f", "sha256": "fa4f94edaaa431e43d56a9ceae1ee2a1e60880ccdc36c4e44baeee7aff72fe3b" }, "downloads": -1, "filename": "lolopy-1.0.1.tar.gz", "has_sig": false, "md5_digest": "f689d437d30f22821d3966b01f1a119f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 51421506, "upload_time": "2019-03-08T01:15:33", "url": "https://files.pythonhosted.org/packages/a3/ca/139a27fb9c3cf92cd14199aefeeec1ff6913d4c7209967a0c615b08c8ca7/lolopy-1.0.1.tar.gz" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "7cb2decf2a32f79cdc0121a8a38af061", "sha256": "473f2fe7f0659fc73c086f668112d959d51a836e8e5f040bef134bd061e06426" }, "downloads": -1, "filename": "lolopy-1.0.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "7cb2decf2a32f79cdc0121a8a38af061", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 51434176, "upload_time": "2019-04-03T01:58:17", "url": "https://files.pythonhosted.org/packages/7b/ab/0dcf66ed0013866256f37afd208185181d69c79f554a078e9e42be1db8bc/lolopy-1.0.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7be0b7cbbb07f0facf336fcb937fb128", "sha256": "c6c869a5421105996b92f7cb5d92651cd9a7a59af2048b0eacec048e35b9931b" }, "downloads": -1, "filename": "lolopy-1.0.2.tar.gz", "has_sig": false, "md5_digest": "7be0b7cbbb07f0facf336fcb937fb128", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 51421789, "upload_time": "2019-04-03T01:58:24", "url": "https://files.pythonhosted.org/packages/bb/eb/6ff43903675a19c9a84abc8f65f84094b96bc9e7ccb670597b03235498dc/lolopy-1.0.2.tar.gz" } ], "1.0.3": [ { "comment_text": "", "digests": { "md5": "c7345d8d81cf3bc1a670f1a65f8cf9ad", "sha256": "c9e405770d94d7ffe8e8d9a49ec202fa007f275dbcacfa23ae7cfdab857a6e69" }, "downloads": -1, "filename": "lolopy-1.0.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "c7345d8d81cf3bc1a670f1a65f8cf9ad", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 51434243, "upload_time": "2019-04-30T16:12:44", "url": "https://files.pythonhosted.org/packages/89/a0/7775aa33530f2b1e539a238c3f98f68e554fa4aab1ed52265e823a2c6b74/lolopy-1.0.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d027036fadd8ac2126ce6996cb5d44ae", "sha256": "f0eea23585ce320a0ca546d73147c68d5ccdfc17174274ab95345956116d0eff" }, "downloads": -1, "filename": "lolopy-1.0.3.tar.gz", "has_sig": false, "md5_digest": "d027036fadd8ac2126ce6996cb5d44ae", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 51421843, "upload_time": "2019-04-30T16:12:53", "url": "https://files.pythonhosted.org/packages/d7/20/cc72e2f71db99cb803a2fa2c853bd21a2b33d7e6e64233dfeb492ec0d84a/lolopy-1.0.3.tar.gz" } ], "1.0.4": [ { "comment_text": "", "digests": { "md5": "acfd62a1371f748162575442dc836ddd", "sha256": "179e038f1ccce8e4587b948afc8c34122940b01c611b0a6b5a1030460dcb5a39" }, "downloads": -1, "filename": "lolopy-1.0.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "acfd62a1371f748162575442dc836ddd", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 51434413, "upload_time": "2019-04-30T21:56:21", "url": "https://files.pythonhosted.org/packages/b3/03/f4fbe5b77ad4adfef3e9f7d95a3c175bb5563eeb2075b789747debc1a590/lolopy-1.0.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "62848b8672ffa026e88bdb069ae426de", "sha256": "598409824ba5ed9830a1a641e4749d33f154fd1b3d1ddf7c27bdcae898b4a94b" }, "downloads": -1, "filename": "lolopy-1.0.4.tar.gz", "has_sig": false, "md5_digest": "62848b8672ffa026e88bdb069ae426de", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 51422022, "upload_time": "2019-04-30T21:56:29", "url": "https://files.pythonhosted.org/packages/77/bb/ece412023c15957e67578fbb28dff64d771e68f3ea336e14e5388eed3fe6/lolopy-1.0.4.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "acfd62a1371f748162575442dc836ddd", "sha256": "179e038f1ccce8e4587b948afc8c34122940b01c611b0a6b5a1030460dcb5a39" }, "downloads": -1, "filename": "lolopy-1.0.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "acfd62a1371f748162575442dc836ddd", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 51434413, "upload_time": "2019-04-30T21:56:21", "url": "https://files.pythonhosted.org/packages/b3/03/f4fbe5b77ad4adfef3e9f7d95a3c175bb5563eeb2075b789747debc1a590/lolopy-1.0.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "62848b8672ffa026e88bdb069ae426de", "sha256": "598409824ba5ed9830a1a641e4749d33f154fd1b3d1ddf7c27bdcae898b4a94b" }, "downloads": -1, "filename": "lolopy-1.0.4.tar.gz", "has_sig": false, "md5_digest": "62848b8672ffa026e88bdb069ae426de", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 51422022, "upload_time": "2019-04-30T21:56:29", "url": "https://files.pythonhosted.org/packages/77/bb/ece412023c15957e67578fbb28dff64d771e68f3ea336e14e5388eed3fe6/lolopy-1.0.4.tar.gz" } ] }