{ "info": { "author": "Chien-Chun Ni", "author_email": "saibalmars@gmail.com", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: Apache Software License", "Operating System :: OS Independent", "Programming Language :: Python :: 3" ], "description": "# GraphRicciCurvature\nA Python library to compute Discrete Ricci curvature, Ricci flow, and Ricci community on NetworkX graph.\n\n[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/saibalmars/GraphRicciCurvature/master?filepath=notebooks%2Ftutorial.ipynb)\n[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/saibalmars/GraphRicciCurvature/blob/master/notebooks/tutorial.ipynb)\n[![Build Status](https://travis-ci.com/saibalmars/GraphRicciCurvature.svg?branch=master)](https://travis-ci.com/saibalmars/GraphRicciCurvature)\n[![Documentation Status](https://readthedocs.org/projects/graphriccicurvature/badge/?version=latest)](https://graphriccicurvature.readthedocs.io/en/latest/?badge=latest)\n[![Downloads](https://pepy.tech/badge/graphriccicurvature)](https://pepy.tech/project/graphriccicurvature)\n[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)\n\n-----\nThis work computes the **Ollivier-Ricci Curvature**[Ni], **Ollivier-Ricci Flow**[Ni2,Ni3], **Forman-Ricci Curvature**(or **Forman curvature**)[Sreejith, Samal], and **Ricci community**[Ni3] detected by Ollivier-Ricci flow metric.\n\n

\n\n\n

\n\nCurvature is a geometric property to describe the local shape of an object. If we draw two parallel paths on a surface with positive curvature like a sphere, these two paths move closer to each other while for a negatively curved surface like a saddle, these two paths tend to be apart. Currently there are multiple ways to discretize curvature on graph, in this library, we include two of the most frequently used discrete Ricci curvature: **Ollivier-Ricci curvature** which is based on optimal transportation theory and **Forman-Ricci curvature** which is base on CW complexes. \n\nIn [Ni], edge Ricci curvature is observed to play an important role in the graph structure. An edge with positive curvature represents an edge within a cluster, while a negatively curved edge tent to be a bridge within clusters. Also, negatively curved edges are highly related to graph connectivity, with negatively curved edges removed from a connected graph, the graph soon become disconnected.\n\nRicci flow is a process to uniformized the edge Ricci curvature of the graph. For a given graph, the Ricci flow gives a \"Ricci flow metric\" on each edge as edge weights, such that under these edge weights, the Ricci curvature of the graph is mostly equal everywhere. In [Ni3], this \"Ricci flow metric\" is shown to be able to detect communities.\n\nBoth Ricci curvature and Ricci flow metric can act as a graph fingerprint for graph classification. The different graph gives different edge Ricci curvature distributions and different Ricci flow metric.\n\nVideo demonstration of Ricci flow for community detection:\n

\n\n\n\n

\n\n## Package Requirement\n\n* [NetworkX](https://github.com/networkx/networkx) >= 2.0 (Based Graph library)\n* [NetworKit](https://github.com/kit-parco/networkit) >= 6.1 (Shortest path algorithm)\n* [NumPy](https://github.com/numpy/numpy) (POT support)\n* [POT](https://github.com/rflamary/POT) (For optimal transportation distance)\n* [python-louvain](https://github.com/taynaud/python-louvain) (For faster modularity computation)\n\n\n\n## Installation\n\n### Installing via pip\n\n```bash\npip3 install [--user] GraphRicciCurvature\n```\n\n- From version 0.4.0, NetworKit is required to compute shortest path for density distribution. If the installation of NetworKit failed, please refer to [NetworKit' Installation instructions](https://github.com/networkit/networkit#installation-instructions).\n\n### Upgrading via pip\n\nTo run with the latest code for the best performance, upgrade GraphRicciCurvature to the latest version with pip: \n```bash\npip3 install [--user] --upgrade GraphRicciCurvature\n``` \n\n## Getting Started\n- Check the jupyter notebook tutorial on [nbviewer](https://nbviewer.jupyter.org/github/saibalmars/GraphRicciCurvature/blob/master/notebooks/tutorial.ipynb) or [github](notebooks/tutorial.ipynb) for a walk through for the basic usage of Ricci curvature, Ricci flow, and Ricci flow for community detection.\n- Or you can run it in directly on [binder](https://mybinder.org/v2/gh/saibalmars/GraphRicciCurvature/master?filepath=notebooks%2Ftutorial.ipynb) (no account required) or [Google colab](https://colab.research.google.com/github/saibalmars/GraphRicciCurvature/blob/master/notebooks/tutorial.ipynb) (Faster but Google account required).\n- Check the [Documentations](https://graphriccicurvature.readthedocs.io/en/latest/).\n- **Try out [sample graphs](https://github.com/saibalmars/RicciFlow-SampleGraphs) with precomputed Ricci curvature/flow.** \n\n## Simple Example\n\n```python\nimport networkx as nx\nfrom GraphRicciCurvature.OllivierRicci import OllivierRicci\nfrom GraphRicciCurvature.FormanRicci import FormanRicci\n\nprint(\"\\n- Import an example NetworkX karate club graph\")\nG = nx.karate_club_graph()\n\nprint(\"\\n===== Compute the Ollivier-Ricci curvature of the given graph G =====\")\n# compute the Ollivier-Ricci curvature of the given graph G\norc = OllivierRicci(G, alpha=0.5, verbose=\"INFO\")\norc.compute_ricci_curvature()\nprint(\"Karate Club Graph: The Ollivier-Ricci curvature of edge (0,1) is %f\" % orc.G[0][1][\"ricciCurvature\"])\n\nprint(\"\\n===== Compute the Forman-Ricci curvature of the given graph G =====\")\nfrc = FormanRicci(G)\nfrc.compute_ricci_curvature()\nprint(\"Karate Club Graph: The Forman-Ricci curvature of edge (0,1) is %f\" % frc.G[0][1][\"formanCurvature\"])\n\n# -----------------------------------\nprint(\"\\n===== Compute Ricci flow metric - Optimal Transportation Distance =====\")\nG = nx.karate_club_graph()\norc_OTD = OllivierRicci(G, alpha=0.5, method=\"OTD\", verbose=\"INFO\")\norc_OTD.compute_ricci_flow(iterations=10)\nprint(\"\\n===== Compute Ricci community - by Ricci flow =====\")\nclustering = orc_OTD.ricci_community()\n\n```\n\nMore example in [example.py](example.py).\n\n\n----\n## Related Works\n\n- Curvature Graph Network (ICLR2020) [openreview](https://openreview.net/forum?id=BylEqnVFDB), [code](https://github.com/yeze16159/CurvGN)\n\n\n## Reference\n\n[Ni]: Ni, C.-C., Lin, Y.-Y., Gao, J., Gu, X., and Saucan, E. \"Ricci curvature of the Internet topology\" (Vol. 26, pp. 2758\u20132766). Presented at the 2015 IEEE Conference on Computer Communications (INFOCOM), IEEE. [arXiv](https://arxiv.org/abs/1501.04138)\n\n[Ni2]: Ni, C.-C., Lin, Y.-Y., Gao, J., and Gu, X. \"Network Alignment by Discrete Ollivier-Ricci Flow\", Graph Drawing 2018, [arXiv](https://arxiv.org/abs/1809.00320)\n\n[Ni3]: Ni, C.-C., Lin, Y.-Y., Luo, F. and Gao, J. \"Community Detection on Networks with Ricci Flow\", Scientific Reports 9, 9984 (2019), [arXiv](https://arxiv.org/abs/1907.03993)\n\n[Sreejith]: Sreejith, R. P., Karthikeyan Mohanraj, J\u00fcrgen Jost, Emil Saucan, and Areejit Samal. \"Forman Curvature for Complex Networks.\" Journal of Statistical Mechanics: Theory and Experiment 2016 (6). IOP Publishing: 063206. [arxiv](https://arxiv.org/abs/1603.00386)\n\n[Samal]: Samal, A., Sreejith, R.P., Gu, J. et al. \"Comparative analysis of two discretizations of Ricci curvature for complex networks.\" Scientific Report 8, 8650 (2018). [arXiv](https://arxiv.org/abs/1712.07600)\n\n## Contact\n\nPlease contact [Chien-Chun Ni](http://www3.cs.stonybrook.edu/~chni/).\n\n\n## Cite\n\nIf you use this code in your research, please considering cite our paper:\n\n```\n@article{ni2019community,\n title={Community detection on networks with ricci flow},\n author={Ni, Chien-Chun and Lin, Yu-Yao and Luo, Feng and Gao, Jie},\n journal={Scientific reports},\n volume={9},\n number={1},\n pages={1--12},\n year={2019},\n publisher={Nature Publishing Group}\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/saibalmars/GraphRicciCurvature", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "GraphRicciCurvature", "package_url": "https://pypi.org/project/GraphRicciCurvature/", "platform": "", "project_url": "https://pypi.org/project/GraphRicciCurvature/", "project_urls": { "Homepage": "https://github.com/saibalmars/GraphRicciCurvature" }, "release_url": "https://pypi.org/project/GraphRicciCurvature/0.5.3/", "requires_dist": [ "cython", "numpy", "scipy (>=1.0)", "networkx (>=2.0)", "pot", "packaging", "networkit (>=6.1)", "python-louvain" ], "requires_python": "", "summary": "Compute discrete Ricci curvatures and Ricci flow on NetworkX graphs.", "version": "0.5.3", "yanked": false, "yanked_reason": null }, "last_serial": 10597384, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "69e91d0f084554c97b7fc35036765ec6", "sha256": "5a4c849d76cd2fe5343d938a3b543551d4711292d357d1ce2985f28da2404ede" }, "downloads": -1, "filename": "GraphRicciCurvature-0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "69e91d0f084554c97b7fc35036765ec6", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 14210, "upload_time": "2019-07-03T22:43:01", "upload_time_iso_8601": "2019-07-03T22:43:01.557388Z", "url": "https://files.pythonhosted.org/packages/c8/ec/b0a75488e008eebe67b79738f6759be1aa793facce1f74f5349bc8916d77/GraphRicciCurvature-0.1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "5958403c2e1de6fc04f701b8f7eee51b", "sha256": "a2ba04b57137e9d848a3331b98d6babade9e0fb1b3344f050738f7f44e1c72e5" }, "downloads": -1, "filename": "GraphRicciCurvature-0.1.tar.gz", "has_sig": false, "md5_digest": "5958403c2e1de6fc04f701b8f7eee51b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7557, "upload_time": "2019-07-03T22:43:04", "upload_time_iso_8601": "2019-07-03T22:43:04.513964Z", "url": "https://files.pythonhosted.org/packages/4e/88/4eaa263865e1c21fb60c92e70398801fd6b11d2a308a146af9a383eba86b/GraphRicciCurvature-0.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2": [ { "comment_text": "", "digests": { "md5": "e9d1b45d0c5c0de4680bd2fadea3f800", "sha256": "c71d5963b7f92f8a1f1b2d549d77e418b5754e620ef60ad4577027ca5ad26359" }, "downloads": -1, "filename": "GraphRicciCurvature-0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "e9d1b45d0c5c0de4680bd2fadea3f800", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 16750, "upload_time": "2019-07-15T08:14:48", "upload_time_iso_8601": "2019-07-15T08:14:48.797874Z", "url": "https://files.pythonhosted.org/packages/cb/9f/a5f632f373bf2e0c519a679861de4f52611ce21e18403ea14d3122f7fe83/GraphRicciCurvature-0.2-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "2cc5eee7c7a2bd0494e12648bac79d9e", "sha256": "ed9ddff62e433e06767dc8a0d4a585f41f4a7c5ccab276258bbfe56001424df2" }, "downloads": -1, "filename": "GraphRicciCurvature-0.2.tar.gz", "has_sig": false, "md5_digest": "2cc5eee7c7a2bd0494e12648bac79d9e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9085, "upload_time": "2019-07-15T08:14:50", "upload_time_iso_8601": "2019-07-15T08:14:50.418514Z", "url": "https://files.pythonhosted.org/packages/64/c3/5e4704d9604b1f5ca39a2d14e9fca3da12b3630fab291f546b0495c5c99f/GraphRicciCurvature-0.2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "fcf98913716b4218c01470485d417edd", "sha256": "4c51b0b525059bc2547e9538eef8f68424ebc8b150dec19133a0944e5de67f20" }, "downloads": -1, "filename": "GraphRicciCurvature-0.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "fcf98913716b4218c01470485d417edd", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 16946, "upload_time": "2019-07-18T11:15:36", "upload_time_iso_8601": "2019-07-18T11:15:36.992228Z", "url": "https://files.pythonhosted.org/packages/65/7e/9644bb3f78db8d2aeb47176975e31adf8eb064a20a80b2722a2c3b91032b/GraphRicciCurvature-0.2.1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "4e029ef8361e21f053ec5d4807affbb9", "sha256": "ca51a1c75541cc094ee5bce8d4c306132ee9de097269a7b35e196300d8ebf5a0" }, "downloads": -1, "filename": "GraphRicciCurvature-0.2.1.tar.gz", "has_sig": false, "md5_digest": "4e029ef8361e21f053ec5d4807affbb9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9331, "upload_time": "2019-07-18T11:15:38", "upload_time_iso_8601": "2019-07-18T11:15:38.580673Z", "url": "https://files.pythonhosted.org/packages/36/70/8d2f91f8c49ce1d4388ec82dc222bf7b2f22ed3089f37ad64aec639c7b7a/GraphRicciCurvature-0.2.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.1.1": [ { "comment_text": "", "digests": { "md5": "b994c881d89fc40aecf82c9eae2d72c2", "sha256": "75ffeddb967a034a8a48d44a03c67d9103ba81d4666ae685ecc37b8f821e9974" }, "downloads": -1, "filename": "GraphRicciCurvature-0.2.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "b994c881d89fc40aecf82c9eae2d72c2", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 16981, "upload_time": "2019-07-18T11:37:48", "upload_time_iso_8601": "2019-07-18T11:37:48.071709Z", "url": "https://files.pythonhosted.org/packages/29/39/6a069f14945c5459c193b842b604029f5aca1a5faaaff3dd672fbaca3ab5/GraphRicciCurvature-0.2.1.1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "146744f57f68fd5b05189f282b6bf048", "sha256": "4d496957ab2d42ad3ded5f2247cb01274e94c1a56ff7cb2ce143a7ab7bb01d26" }, "downloads": -1, "filename": "GraphRicciCurvature-0.2.1.1.tar.gz", "has_sig": false, "md5_digest": "146744f57f68fd5b05189f282b6bf048", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9339, "upload_time": "2019-07-18T11:37:49", "upload_time_iso_8601": "2019-07-18T11:37:49.534472Z", "url": "https://files.pythonhosted.org/packages/8c/84/67e06d609805bdd6fbc968585584f91674a45d10beeed008c73fa6dd6779/GraphRicciCurvature-0.2.1.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.3": [ { "comment_text": "", "digests": { "md5": "03a6faf8a9d3995ef10e1d1c7e0903cd", "sha256": "feb47759ce8288ff09553b0e044cc1ed0d6e2a031f8408689ada1bb3d86d88b1" }, "downloads": -1, "filename": "GraphRicciCurvature-0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "03a6faf8a9d3995ef10e1d1c7e0903cd", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 17648, "upload_time": "2019-10-29T21:44:05", "upload_time_iso_8601": "2019-10-29T21:44:05.845996Z", "url": "https://files.pythonhosted.org/packages/ad/5a/9cca431b0db71698033b4daa35d56fb1c05799aba5a868dcd9df4aa75e7a/GraphRicciCurvature-0.3-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "63644e6b9811d65b207949c26da8bdff", "sha256": "2d79178118d221fecdf821057fe2848a1cdd6b193276f97170572962ea315236" }, "downloads": -1, "filename": "GraphRicciCurvature-0.3.tar.gz", "has_sig": false, "md5_digest": "63644e6b9811d65b207949c26da8bdff", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10050, "upload_time": "2019-10-29T21:44:07", "upload_time_iso_8601": "2019-10-29T21:44:07.622781Z", "url": "https://files.pythonhosted.org/packages/0e/97/b2bee75f8acc6da18645c35d1fef883f8651f6ac1b5c1cb9685d73eecd1a/GraphRicciCurvature-0.3.tar.gz", "yanked": false, "yanked_reason": null } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "d2f3fc90a832dddc3aebf984a8a9acd4", "sha256": "c6e4376d8b8feb5424fc9c134dbafc8b36d5b96710d0622a04632b3b84e32f88" }, "downloads": -1, "filename": "GraphRicciCurvature-0.3.1.tar.gz", "has_sig": false, "md5_digest": "d2f3fc90a832dddc3aebf984a8a9acd4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10057, "upload_time": "2019-11-01T07:09:15", "upload_time_iso_8601": "2019-11-01T07:09:15.854306Z", "url": "https://files.pythonhosted.org/packages/b5/54/cc89dd3cceb34ef7ab4c5c33cd5e7eb9b7a8ff0035431ff1408bd90780b1/GraphRicciCurvature-0.3.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "8478697d2c962ec809633c617b289a40", "sha256": "0660b8c954321d5a7dc1686eed2c36b7fd05a4da43f2bf0c85380fced407f596" }, "downloads": -1, "filename": "GraphRicciCurvature-0.4.0-py3-none-any.whl", "has_sig": false, "md5_digest": "8478697d2c962ec809633c617b289a40", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 16344, "upload_time": "2020-02-11T07:42:49", "upload_time_iso_8601": "2020-02-11T07:42:49.774917Z", "url": "https://files.pythonhosted.org/packages/72/6c/40efbf0e16496a6403aa85e6fb7cd7a203a7195f8bd95fbf49bb6124dc2e/GraphRicciCurvature-0.4.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "1e3163f82b11be65fb318b6fa9abf775", "sha256": "2e8fc461005bb02aa210cbda1ad5c5c49b11a3e9e43545e86436f5597a63dbf0" }, "downloads": -1, "filename": "GraphRicciCurvature-0.4.0.tar.gz", "has_sig": false, "md5_digest": "1e3163f82b11be65fb318b6fa9abf775", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10287, "upload_time": "2020-02-11T07:42:51", "upload_time_iso_8601": "2020-02-11T07:42:51.343160Z", "url": "https://files.pythonhosted.org/packages/c5/08/b5d1cae9e66fd5bee9d1fecd366c9c9f03a05ccd9199c103511478e2a899/GraphRicciCurvature-0.4.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "d63b62ca055d98319cfaf612d988913e", "sha256": "b4ca2ddc681347e0dc99874314073b3cb1b3cb8f6c2703810ea12d504e43118c" }, "downloads": -1, "filename": "GraphRicciCurvature-0.4.1-py3-none-any.whl", "has_sig": false, "md5_digest": "d63b62ca055d98319cfaf612d988913e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 17966, "upload_time": "2020-02-12T05:59:05", "upload_time_iso_8601": "2020-02-12T05:59:05.813894Z", "url": "https://files.pythonhosted.org/packages/8c/20/0bd9664b6d45e4b8a4ca3ce4fc976eed3a8f4bf1caf06d016e97d4e47726/GraphRicciCurvature-0.4.1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "bd8422db527495721d15c74c44a7ed45", "sha256": "dac084fb25bc4da448c98981bcd1830bf15bdea1c6ecc628b65047deffbf16bf" }, "downloads": -1, "filename": "GraphRicciCurvature-0.4.1.tar.gz", "has_sig": false, "md5_digest": "bd8422db527495721d15c74c44a7ed45", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11329, "upload_time": "2020-02-12T05:59:07", "upload_time_iso_8601": "2020-02-12T05:59:07.525401Z", "url": "https://files.pythonhosted.org/packages/12/4a/7e31f04a5a626b0ea706dd7fbaa065766c57e378a0ce00db9c68f3937fb7/GraphRicciCurvature-0.4.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.4.2": [ { "comment_text": "", "digests": { "md5": "daca4e204abeb7951cf4f54aeb152849", "sha256": "4ba62735f5c28da7fd4cc7bed671aa4aee8ce1124d7056e49a7d35c110d78632" }, "downloads": -1, "filename": "GraphRicciCurvature-0.4.2-py3-none-any.whl", "has_sig": false, "md5_digest": "daca4e204abeb7951cf4f54aeb152849", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 18100, "upload_time": "2020-02-17T09:46:25", "upload_time_iso_8601": "2020-02-17T09:46:25.826777Z", "url": "https://files.pythonhosted.org/packages/b0/37/9742e2c2ca1bda1ad27f22d02432bb9a8a59802dcb8b8479e1e452f2c8c1/GraphRicciCurvature-0.4.2-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "c92ed8e3b25ea1ed61059dd26f8f69a0", "sha256": "f5701cd6207c11587aadea722f4017d1de49fa818e7f1dc8dad867672f25f79c" }, "downloads": -1, "filename": "GraphRicciCurvature-0.4.2.tar.gz", "has_sig": false, "md5_digest": "c92ed8e3b25ea1ed61059dd26f8f69a0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11465, "upload_time": "2020-02-17T09:46:27", "upload_time_iso_8601": "2020-02-17T09:46:27.502860Z", "url": "https://files.pythonhosted.org/packages/56/1f/1a01453ef03ff8423b1efeef39db5c3be510bf620d2e7efdea581288ebe4/GraphRicciCurvature-0.4.2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.4.3": [ { "comment_text": "", "digests": { "md5": "f15937c9bb6ebd31324139c96c4bb4f3", "sha256": "dcf4058a9c75c519b41d8d702ecdd502273eab137e751058a8ce7f7eea1bfe7f" }, "downloads": -1, "filename": "GraphRicciCurvature-0.4.3-py3-none-any.whl", "has_sig": false, "md5_digest": "f15937c9bb6ebd31324139c96c4bb4f3", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 18462, "upload_time": "2020-03-12T08:57:05", "upload_time_iso_8601": "2020-03-12T08:57:05.831283Z", "url": "https://files.pythonhosted.org/packages/b0/1f/1f6562a994a941397ac01ace9246f59108c1684e8df96f9efdee5bff7867/GraphRicciCurvature-0.4.3-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "50690a5642d87973216abf2261767c17", "sha256": "5bd7ac4ebab2989068f9151b9fae583dff45643eb483277a17937ace11f3c220" }, "downloads": -1, "filename": "GraphRicciCurvature-0.4.3.tar.gz", "has_sig": false, "md5_digest": "50690a5642d87973216abf2261767c17", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12243, "upload_time": "2020-03-12T08:57:06", "upload_time_iso_8601": "2020-03-12T08:57:06.978879Z", "url": "https://files.pythonhosted.org/packages/f7/2c/a782285a9cfaca708e165a532f027dcd37f869a23ad013e5481e7001d0aa/GraphRicciCurvature-0.4.3.tar.gz", "yanked": false, "yanked_reason": null } ], "0.4.3.1": [ { "comment_text": "", "digests": { "md5": "1670650cf8338f3cb12c1ae4f6f2efe5", "sha256": "5b8c1c7eb1ef9c8be42f6811d1d22a0ffeb5151414618cdcb956dbc2dfe923a4" }, "downloads": -1, "filename": "GraphRicciCurvature-0.4.3.1-py3-none-any.whl", "has_sig": false, "md5_digest": "1670650cf8338f3cb12c1ae4f6f2efe5", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 20119, "upload_time": "2020-03-12T22:45:01", "upload_time_iso_8601": "2020-03-12T22:45:01.620323Z", "url": "https://files.pythonhosted.org/packages/e4/8f/3bc0d756b26073844ef51da8946ae3fcfbb97d8b2b370c23ac501c975675/GraphRicciCurvature-0.4.3.1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "d8c7872bdf9e6b601168e4c3a4e16bf4", "sha256": "3cb0fa60d6e8c8a458bef46dbc22e8237913d22462db367019282c3f08349ae1" }, "downloads": -1, "filename": "GraphRicciCurvature-0.4.3.1.tar.gz", "has_sig": false, "md5_digest": "d8c7872bdf9e6b601168e4c3a4e16bf4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12267, "upload_time": "2020-03-12T22:45:03", "upload_time_iso_8601": "2020-03-12T22:45:03.334788Z", "url": "https://files.pythonhosted.org/packages/39/8b/e0facf600f5e8366017d950140f9def83463f789e95d220539219e645e6a/GraphRicciCurvature-0.4.3.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.4.4": [ { "comment_text": "", "digests": { "md5": "e1e905f12fde3d96f5f437815017424d", "sha256": "370039b875d0b4b0151fd03e7228534b16b1a09a063cd9d1e5df6fc3c6710a9a" }, "downloads": -1, "filename": "GraphRicciCurvature-0.4.4-py3-none-any.whl", "has_sig": false, "md5_digest": "e1e905f12fde3d96f5f437815017424d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 20514, "upload_time": "2020-03-24T18:21:29", "upload_time_iso_8601": "2020-03-24T18:21:29.636420Z", "url": "https://files.pythonhosted.org/packages/95/52/0ab0ef5fd799c02f463b6f7a4f0aadd7d424ee3c8bed9eeb845102086c76/GraphRicciCurvature-0.4.4-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "b4b20cc8660245d2a5beb4f06901721c", "sha256": "6c295cb2c9897f976d20d4743e58602fda5f4b94f29fe69f6d2837fc7de76856" }, "downloads": -1, "filename": "GraphRicciCurvature-0.4.4.tar.gz", "has_sig": false, "md5_digest": "b4b20cc8660245d2a5beb4f06901721c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12689, "upload_time": "2020-03-24T18:21:31", "upload_time_iso_8601": "2020-03-24T18:21:31.460234Z", "url": "https://files.pythonhosted.org/packages/22/5a/26814df638b1b3cd5db13d982161e086b5af33a1d912fcfeb429220ad0e0/GraphRicciCurvature-0.4.4.tar.gz", "yanked": false, "yanked_reason": null } ], "0.4.5": [ { "comment_text": "", "digests": { "md5": "ea9d8a18cde67706d6e73df40cbb1dc8", "sha256": "6cfee740c4fc866d44a15dbb957ba52c4482b331e9e59d8f0bb89fff8ed31abb" }, "downloads": -1, "filename": "GraphRicciCurvature-0.4.5-py3-none-any.whl", "has_sig": false, "md5_digest": "ea9d8a18cde67706d6e73df40cbb1dc8", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 20513, "upload_time": "2020-04-02T21:29:17", "upload_time_iso_8601": "2020-04-02T21:29:17.185850Z", "url": "https://files.pythonhosted.org/packages/f9/a2/fd0d69f0aa003de7f1b93734d6d71a4e9dfec5e2c2b0ff682e1e80e1acf5/GraphRicciCurvature-0.4.5-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "732da52aaaf33ef9b7611582040c6fac", "sha256": "76d32473db87c56408fe07af84b52eb1153f52546bba7e9fa8e2af6769701ec7" }, "downloads": -1, "filename": "GraphRicciCurvature-0.4.5.tar.gz", "has_sig": false, "md5_digest": "732da52aaaf33ef9b7611582040c6fac", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12692, "upload_time": "2020-04-02T21:29:19", "upload_time_iso_8601": "2020-04-02T21:29:19.070796Z", "url": "https://files.pythonhosted.org/packages/d4/f0/c26c1621317eafe28a3883cde73a5309c71e46f66b1d546fc9b9da4607be/GraphRicciCurvature-0.4.5.tar.gz", "yanked": false, "yanked_reason": null } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "3b22b8660f2e5c65c7cc203be40f4ced", "sha256": "80b9aba65d035f1919ed3dd9b415b4df170c77028960da5745944af8abcd26b2" }, "downloads": -1, "filename": "GraphRicciCurvature-0.5.0-py3-none-any.whl", "has_sig": false, "md5_digest": "3b22b8660f2e5c65c7cc203be40f4ced", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 22849, "upload_time": "2020-07-15T08:04:48", "upload_time_iso_8601": "2020-07-15T08:04:48.458786Z", "url": "https://files.pythonhosted.org/packages/15/cc/ec6866a4cc78e96b04f66a7dfa35f47dcfac5a6cb80abd747bac2963ae0b/GraphRicciCurvature-0.5.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "45c35835639cdd54211f9130a49a6c33", "sha256": "654b1025b70304f7a21cf580e8ee6b015c1d5822a4bcffad5a5a06251b316396" }, "downloads": -1, "filename": "GraphRicciCurvature-0.5.0.tar.gz", "has_sig": false, "md5_digest": "45c35835639cdd54211f9130a49a6c33", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14828, "upload_time": "2020-07-15T08:04:50", "upload_time_iso_8601": "2020-07-15T08:04:50.070777Z", "url": "https://files.pythonhosted.org/packages/ea/03/20542dba16b15f7fd3f0c11bbc2b0b8db14aeaa4b11720c78e7c0d411948/GraphRicciCurvature-0.5.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.5.1": [ { "comment_text": "", "digests": { "md5": "a1e49e7dec198a82f65455d807c1bc2a", "sha256": "4adae22d8df7585509986a0df7d609fea2d120460a60cdc189c1fa78a81625ad" }, "downloads": -1, "filename": "GraphRicciCurvature-0.5.1-py3-none-any.whl", "has_sig": false, "md5_digest": "a1e49e7dec198a82f65455d807c1bc2a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 23228, "upload_time": "2020-07-28T01:07:51", "upload_time_iso_8601": "2020-07-28T01:07:51.635951Z", "url": "https://files.pythonhosted.org/packages/f5/96/bf7a0d6e8d872b6ce5e0477188eebc81788a02150801f0101e37ce726688/GraphRicciCurvature-0.5.1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "682ea68fa8839d24272a0ff6161d0685", "sha256": "14d7caf7e1471f47bef50be97448079c87624db6d5283dd6419f37d1290e32d7" }, "downloads": -1, "filename": "GraphRicciCurvature-0.5.1.tar.gz", "has_sig": false, "md5_digest": "682ea68fa8839d24272a0ff6161d0685", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15606, "upload_time": "2020-07-28T01:07:52", "upload_time_iso_8601": "2020-07-28T01:07:52.991192Z", "url": "https://files.pythonhosted.org/packages/aa/bc/403e08784ff4b4c2af84daad902efb9e218e6c415722f2c0dc72b2fa19d0/GraphRicciCurvature-0.5.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.5.2": [ { "comment_text": "", "digests": { "md5": "5922ceb61d51c3e614cf711fa96e1681", "sha256": "b331b5fc3d80f819bb6c26f1a52b21500e47f768b3d42433e17123a5c0ec21bb" }, "downloads": -1, "filename": "GraphRicciCurvature-0.5.2-py3-none-any.whl", "has_sig": false, "md5_digest": "5922ceb61d51c3e614cf711fa96e1681", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 24393, "upload_time": "2020-10-30T01:14:37", "upload_time_iso_8601": "2020-10-30T01:14:37.464584Z", "url": "https://files.pythonhosted.org/packages/74/67/6e5914aecdef27b4d67abbe374602e02304eb45c3b5dc44942a28141b04d/GraphRicciCurvature-0.5.2-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "42f94ca5a1599da89805df0caa3cb0ae", "sha256": "8f402d064082518895b3c0daabd6b9bbb14db9c4dd9adc1a53e5a3124a713093" }, "downloads": -1, "filename": "GraphRicciCurvature-0.5.2.tar.gz", "has_sig": false, "md5_digest": "42f94ca5a1599da89805df0caa3cb0ae", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16661, "upload_time": "2020-10-30T01:14:39", "upload_time_iso_8601": "2020-10-30T01:14:39.072579Z", "url": "https://files.pythonhosted.org/packages/dc/97/15ea998ee4ae308d6ac16124099e8caaf7c47ea3411b76cadbbe91ede38a/GraphRicciCurvature-0.5.2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.5.2.1": [ { "comment_text": "", "digests": { "md5": "20b3fda3db30cfb46a0e011c4152b9eb", "sha256": "972890b6985d4baf1deff7d495f80486729d24963a9671c54c4b84023c9d7b51" }, "downloads": -1, "filename": "GraphRicciCurvature-0.5.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "20b3fda3db30cfb46a0e011c4152b9eb", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 24790, "upload_time": "2020-12-28T08:54:26", "upload_time_iso_8601": "2020-12-28T08:54:26.704420Z", "url": "https://files.pythonhosted.org/packages/85/e3/c0f7cf1e56d6f0a6a5a6e8b201b7e2ab1e9a15556a5a2fa85eef355efe50/GraphRicciCurvature-0.5.2.1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "07eba0f4a56e4a05cd0d7330c556abbf", "sha256": "6c863e51afc39200402c45aebc8ea4e78ae53b2f35dced7b908f7153e49f2f5d" }, "downloads": -1, "filename": "GraphRicciCurvature-0.5.2.1.tar.gz", "has_sig": false, "md5_digest": "07eba0f4a56e4a05cd0d7330c556abbf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16511, "upload_time": "2020-12-28T08:54:28", "upload_time_iso_8601": "2020-12-28T08:54:28.087585Z", "url": "https://files.pythonhosted.org/packages/3e/f2/c9661081c6e81107a9c31390370d9057c5a01bba3b016062d688ec06042b/GraphRicciCurvature-0.5.2.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.5.3": [ { "comment_text": "", "digests": { "md5": "c5eca282fb9fc9a7799b3bc9b26288e4", "sha256": "020b34d6f52048ff17847d950353e3331044fbca27deeb04a6f4f88d37da0f0e" }, "downloads": -1, "filename": "GraphRicciCurvature-0.5.3-py3.7.egg", "has_sig": false, "md5_digest": "c5eca282fb9fc9a7799b3bc9b26288e4", "packagetype": "bdist_egg", "python_version": "3.7", "requires_python": null, "size": 41156, "upload_time": "2021-06-09T07:18:16", "upload_time_iso_8601": "2021-06-09T07:18:16.994230Z", "url": "https://files.pythonhosted.org/packages/3e/a1/c689e0667ccdc2f1930f2da50d2e0f553919cef81cac8809dd7e8fba9d47/GraphRicciCurvature-0.5.3-py3.7.egg", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "55a688700367a6b417d30db702e1b13f", "sha256": "c23690113d0b5950db1e8c83989cdbdb076b29ee0372d2c403202fb56d8d221f" }, "downloads": -1, "filename": "GraphRicciCurvature-0.5.3-py3-none-any.whl", "has_sig": false, "md5_digest": "55a688700367a6b417d30db702e1b13f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 24734, "upload_time": "2021-06-09T07:18:15", "upload_time_iso_8601": "2021-06-09T07:18:15.306873Z", "url": "https://files.pythonhosted.org/packages/99/2e/f0d229186a0b8a9db1f380a63b4d59bf07e9bedc13fb58e3015a6428839c/GraphRicciCurvature-0.5.3-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "dd5d5a1db1cfacc4ea27836922504a4d", "sha256": "8e8b754ab7f1f5c61b515ff5d376b057f965895d6467692d7bccd81ffe4adfca" }, "downloads": -1, "filename": "GraphRicciCurvature-0.5.3.tar.gz", "has_sig": false, "md5_digest": "dd5d5a1db1cfacc4ea27836922504a4d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16455, "upload_time": "2021-06-09T07:18:18", "upload_time_iso_8601": "2021-06-09T07:18:18.444520Z", "url": "https://files.pythonhosted.org/packages/a7/0e/234cc0d8127b1cd032fd17ca209dde19576b664633ff2e3dfa625c09c61f/GraphRicciCurvature-0.5.3.tar.gz", "yanked": false, "yanked_reason": null } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "c5eca282fb9fc9a7799b3bc9b26288e4", "sha256": "020b34d6f52048ff17847d950353e3331044fbca27deeb04a6f4f88d37da0f0e" }, "downloads": -1, "filename": "GraphRicciCurvature-0.5.3-py3.7.egg", "has_sig": false, "md5_digest": "c5eca282fb9fc9a7799b3bc9b26288e4", "packagetype": "bdist_egg", "python_version": "3.7", "requires_python": null, "size": 41156, "upload_time": "2021-06-09T07:18:16", "upload_time_iso_8601": "2021-06-09T07:18:16.994230Z", "url": "https://files.pythonhosted.org/packages/3e/a1/c689e0667ccdc2f1930f2da50d2e0f553919cef81cac8809dd7e8fba9d47/GraphRicciCurvature-0.5.3-py3.7.egg", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "55a688700367a6b417d30db702e1b13f", "sha256": "c23690113d0b5950db1e8c83989cdbdb076b29ee0372d2c403202fb56d8d221f" }, "downloads": -1, "filename": "GraphRicciCurvature-0.5.3-py3-none-any.whl", "has_sig": false, "md5_digest": "55a688700367a6b417d30db702e1b13f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 24734, "upload_time": "2021-06-09T07:18:15", "upload_time_iso_8601": "2021-06-09T07:18:15.306873Z", "url": "https://files.pythonhosted.org/packages/99/2e/f0d229186a0b8a9db1f380a63b4d59bf07e9bedc13fb58e3015a6428839c/GraphRicciCurvature-0.5.3-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "dd5d5a1db1cfacc4ea27836922504a4d", "sha256": "8e8b754ab7f1f5c61b515ff5d376b057f965895d6467692d7bccd81ffe4adfca" }, "downloads": -1, "filename": "GraphRicciCurvature-0.5.3.tar.gz", "has_sig": false, "md5_digest": "dd5d5a1db1cfacc4ea27836922504a4d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16455, "upload_time": "2021-06-09T07:18:18", "upload_time_iso_8601": "2021-06-09T07:18:18.444520Z", "url": "https://files.pythonhosted.org/packages/a7/0e/234cc0d8127b1cd032fd17ca209dde19576b664633ff2e3dfa625c09c61f/GraphRicciCurvature-0.5.3.tar.gz", "yanked": false, "yanked_reason": null } ], "vulnerabilities": [] }