# pygeodesic
Python library to compute geodesic distance over a triangular based surface mesh.
A Cython wrapper of the C++ code by [Kirsanov](https://code.google.com/archive/p/geodesic/), which is an implementation of the exact geodesic algorithm for triangular mesh first described by Mitchell, Mount and Papadimitriou in 1987.
`pygeodesic` is similar to other libraries on PyPi (such as [gdist](https://pypi.org/project/gdist/) and [tvb-gdist](https://pypi.org/project/tvb-gdist/)), but:
* provides a wrapper of the GeodesicAlgorithmExact class
* exposes geodesic path (not just geodesic distance)
* licensed under MIT license similar to the orginal Kirsanov C++ code, rather than GPL
A good alternative to `pygeodesic` is [potpourri3d](https://pypi.org/project/potpourri3d/), which uses the *heat method* and *vector heat method* to compute geodesic distance over surfaces and point clouds. However, this library does not currently output the geodesic path on the surface.
## Requirements
A C++ compiler is required if you are not installing one of the precompiled wheels. Although `pygeodesic` is a Cython wrapper, Cython is not required as the cythonized C++ file is also provided.
[VTK](https://pypi.org/project/vtk/) is used for visualisation in the example notebooks.
## Installation
Install from PyPi:
```
pip install pygeodesic
```
Installation from source (from within folder containing `setup.py`):
```
python setup.py install
```
## Usage
Loading pygeodesic:
```python
import pygeodesic.geodesic as geodesic
```
To read the mesh files provided with the original C++ code:
```python
filename = r'data/flat_triangular_mesh.txt'
result = geodesic.read_mesh_from_file(filename)
if result:
points, faces = result
```
To calculate the geodesic distance and path between two points (the *source* and the *target*) on the mesh:
```python
# Initialise the PyGeodesicAlgorithmExact class instance
geoalg = geodesic.PyGeodesicAlgorithmExact(points, faces)
# Define the source and target point ids with respect to the points array
sourceIndex = 25
targetIndex = 97
# Compute the geodesic distance and the path
distance, path = geoalg.geodesicDistance(sourceIndex, targetIndex)
```
To calculate the geodesic distances from a single point (the source point) to all other points on the mesh:
```python
source_indices = np.array([25])
target_indices = None
distances, best_source = geoalg.geodesicDistances(source_indices, target_indices)
```
To calculate the geodesic distances from two source points to 3 target points:
```python
source_indices = np.array([25,100])
target_indices = np.array([0,10,50])
distances, best_source = geoalg.geodesicDistances(source_indices, target_indices)
```
For more detail, a Jupyter notebook is provided in the examples folder to show how to use `pygeodesic` to compute geodesic distances and paths.
## Example using the Stanford Bunny
A Jupyter notebook is provided showing how to use `pygeodesic` to calculate the geodesic distance and path using the Stanford Bunny as an example.
<img src="https://github.com/mhogg/pygeodesic/blob/main/images/stanford_bunny_geodesic_path.png?raw=true" height="400"/>
Raw data
{
"_id": null,
"home_page": "https://github.com/mhogg/pygeodesic",
"name": "pygeodesic",
"maintainer": "",
"docs_url": null,
"requires_python": "",
"maintainer_email": "",
"keywords": "geodesic,distance,path,triangle,mesh,python,cython",
"author": "Michael Hogg",
"author_email": "michael.christopher.hogg@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/cc/ec/51a0ca644d19eb40fe85cd7e4f9b9d7b4c1bd590acc8a0b0a8bd22a16fbd/pygeodesic-0.1.8.tar.gz",
"platform": null,
"description": "# pygeodesic\n\nPython library to compute geodesic distance over a triangular based surface mesh.\n\nA Cython wrapper of the C++ code by [Kirsanov](https://code.google.com/archive/p/geodesic/), which is an implementation of the exact geodesic algorithm for triangular mesh first described by Mitchell, Mount and Papadimitriou in 1987.\n\n`pygeodesic` is similar to other libraries on PyPi (such as [gdist](https://pypi.org/project/gdist/) and [tvb-gdist](https://pypi.org/project/tvb-gdist/)), but:\n* provides a wrapper of the GeodesicAlgorithmExact class\n* exposes geodesic path (not just geodesic distance)\n* licensed under MIT license similar to the orginal Kirsanov C++ code, rather than GPL\n\nA good alternative to `pygeodesic` is [potpourri3d](https://pypi.org/project/potpourri3d/), which uses the *heat method* and *vector heat method* to compute geodesic distance over surfaces and point clouds. However, this library does not currently output the geodesic path on the surface.\n\n## Requirements\n\nA C++ compiler is required if you are not installing one of the precompiled wheels. Although `pygeodesic` is a Cython wrapper, Cython is not required as the cythonized C++ file is also provided.\n\n[VTK](https://pypi.org/project/vtk/) is used for visualisation in the example notebooks.\n\n\n## Installation\n\nInstall from PyPi:\n```\npip install pygeodesic\n```\n\nInstallation from source (from within folder containing `setup.py`):\n```\npython setup.py install\n```\n\n## Usage\n\nLoading pygeodesic:\n```python\nimport pygeodesic.geodesic as geodesic\n```\n\nTo read the mesh files provided with the original C++ code:\n```python\nfilename = r'data/flat_triangular_mesh.txt'\nresult = geodesic.read_mesh_from_file(filename)\nif result:\n points, faces = result\n```\n\nTo calculate the geodesic distance and path between two points (the *source* and the *target*) on the mesh:\n```python\n# Initialise the PyGeodesicAlgorithmExact class instance\ngeoalg = geodesic.PyGeodesicAlgorithmExact(points, faces)\n\n# Define the source and target point ids with respect to the points array\nsourceIndex = 25\ntargetIndex = 97\n\n# Compute the geodesic distance and the path\ndistance, path = geoalg.geodesicDistance(sourceIndex, targetIndex)\n```\n\nTo calculate the geodesic distances from a single point (the source point) to all other points on the mesh:\n```python\nsource_indices = np.array([25])\ntarget_indices = None\ndistances, best_source = geoalg.geodesicDistances(source_indices, target_indices)\n```\n\nTo calculate the geodesic distances from two source points to 3 target points:\n```python\nsource_indices = np.array([25,100]) \ntarget_indices = np.array([0,10,50])\ndistances, best_source = geoalg.geodesicDistances(source_indices, target_indices)\n```\n\nFor more detail, a Jupyter notebook is provided in the examples folder to show how to use `pygeodesic` to compute geodesic distances and paths.\n\n## Example using the Stanford Bunny\n\nA Jupyter notebook is provided showing how to use `pygeodesic` to calculate the geodesic distance and path using the Stanford Bunny as an example.\n\n<img src=\"https://github.com/mhogg/pygeodesic/blob/main/images/stanford_bunny_geodesic_path.png?raw=true\" height=\"400\"/>\n\n\n\n",
"bugtrack_url": null,
"license": "MIT license",
"summary": "Python library for calculating geodesic distance on triangular based surface meshes",
"version": "0.1.8",
"split_keywords": [
"geodesic",
"distance",
"path",
"triangle",
"mesh",
"python",
"cython"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "e83c33a8fdd7b448516cc5a88a06cb22e6cc25c61e5e668a1e1d6e8045cd975a",
"md5": "242c061880c6d9a9ba7318ed6069b63b",
"sha256": "6a4547210d523eea6760fedb003b1ed8774ea45760f1daef61d49a37b1ec9a66"
},
"downloads": -1,
"filename": "pygeodesic-0.1.8-cp310-cp310-macosx_10_9_universal2.whl",
"has_sig": false,
"md5_digest": "242c061880c6d9a9ba7318ed6069b63b",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": null,
"size": 348895,
"upload_time": "2023-01-26T22:46:32",
"upload_time_iso_8601": "2023-01-26T22:46:32.254550Z",
"url": "https://files.pythonhosted.org/packages/e8/3c/33a8fdd7b448516cc5a88a06cb22e6cc25c61e5e668a1e1d6e8045cd975a/pygeodesic-0.1.8-cp310-cp310-macosx_10_9_universal2.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "943fda167d3351a9082a6d4f51254a16f47b8456821a853b91032cc81e720299",
"md5": "799b8bb2d439dabc169f508f7c405305",
"sha256": "922d244d032a2862890a6615dc0579356f9f2f65730fe2270c44cac4d6e2640d"
},
"downloads": -1,
"filename": "pygeodesic-0.1.8-cp310-cp310-macosx_10_9_x86_64.whl",
"has_sig": false,
"md5_digest": "799b8bb2d439dabc169f508f7c405305",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": null,
"size": 253199,
"upload_time": "2023-01-26T22:46:33",
"upload_time_iso_8601": "2023-01-26T22:46:33.919841Z",
"url": "https://files.pythonhosted.org/packages/94/3f/da167d3351a9082a6d4f51254a16f47b8456821a853b91032cc81e720299/pygeodesic-0.1.8-cp310-cp310-macosx_10_9_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "9a395a147b4552884ceeea55756301772b934ce1346ff6948c2076c66433b2f4",
"md5": "95ec146075dfc46533d1b0537c360572",
"sha256": "779039bcbd284aea243bdf07ecf1bb3c7e55ca3442ebca62a005f14ed3a7e3b3"
},
"downloads": -1,
"filename": "pygeodesic-0.1.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "95ec146075dfc46533d1b0537c360572",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": null,
"size": 977301,
"upload_time": "2023-01-26T22:46:35",
"upload_time_iso_8601": "2023-01-26T22:46:35.441873Z",
"url": "https://files.pythonhosted.org/packages/9a/39/5a147b4552884ceeea55756301772b934ce1346ff6948c2076c66433b2f4/pygeodesic-0.1.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "cb870aaf98cae8ad052b706ad6fd89d2aec029814e0313bc8c31bcb3219a6453",
"md5": "a2a8b1b863a0bd261c844b1d39a7227e",
"sha256": "97d0aaf2f3291978e5657781d6c593faf0ae031d71a130be143354c6e2ddbd2d"
},
"downloads": -1,
"filename": "pygeodesic-0.1.8-cp310-cp310-win_amd64.whl",
"has_sig": false,
"md5_digest": "a2a8b1b863a0bd261c844b1d39a7227e",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": null,
"size": 1327035,
"upload_time": "2023-01-26T22:46:36",
"upload_time_iso_8601": "2023-01-26T22:46:36.683596Z",
"url": "https://files.pythonhosted.org/packages/cb/87/0aaf98cae8ad052b706ad6fd89d2aec029814e0313bc8c31bcb3219a6453/pygeodesic-0.1.8-cp310-cp310-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "0f8a01df851291e314cdff8ce241c2fadc964380e61667627de08df8a8f0c7e8",
"md5": "57e468de9c8bc9144f0c4e577285c057",
"sha256": "0b08c7f6b121c693e08b20cc8f849cc2ef8f6f14d1885b218cf12a828576e804"
},
"downloads": -1,
"filename": "pygeodesic-0.1.8-cp311-cp311-macosx_10_9_universal2.whl",
"has_sig": false,
"md5_digest": "57e468de9c8bc9144f0c4e577285c057",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": null,
"size": 350475,
"upload_time": "2023-01-26T22:46:37",
"upload_time_iso_8601": "2023-01-26T22:46:37.791498Z",
"url": "https://files.pythonhosted.org/packages/0f/8a/01df851291e314cdff8ce241c2fadc964380e61667627de08df8a8f0c7e8/pygeodesic-0.1.8-cp311-cp311-macosx_10_9_universal2.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "01e08f95bdc9cda22ed86d85ad3bd88f0d40143b4d6621ca95bf5acd39647c00",
"md5": "ca81a8dde22e4b22ad5acaedc81ed472",
"sha256": "3535c309e316db9eb32533a2da3535b9c23e91f33747bd917c61b3a1b15f1c98"
},
"downloads": -1,
"filename": "pygeodesic-0.1.8-cp311-cp311-macosx_10_9_x86_64.whl",
"has_sig": false,
"md5_digest": "ca81a8dde22e4b22ad5acaedc81ed472",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": null,
"size": 254465,
"upload_time": "2023-01-26T22:46:39",
"upload_time_iso_8601": "2023-01-26T22:46:39.479536Z",
"url": "https://files.pythonhosted.org/packages/01/e0/8f95bdc9cda22ed86d85ad3bd88f0d40143b4d6621ca95bf5acd39647c00/pygeodesic-0.1.8-cp311-cp311-macosx_10_9_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "1a326973b963c3105dc96311ea331900f55626b2001f648e10e2503f004b4dff",
"md5": "ca1bbbe60f78e0a5f1f3055ded67d8f9",
"sha256": "b670b6c2d086bd58d09effccb6aa3bbdfcd6e15f81d087b7181f2340d810b4c1"
},
"downloads": -1,
"filename": "pygeodesic-0.1.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "ca1bbbe60f78e0a5f1f3055ded67d8f9",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": null,
"size": 1008884,
"upload_time": "2023-01-26T22:46:40",
"upload_time_iso_8601": "2023-01-26T22:46:40.811417Z",
"url": "https://files.pythonhosted.org/packages/1a/32/6973b963c3105dc96311ea331900f55626b2001f648e10e2503f004b4dff/pygeodesic-0.1.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "6c5c8a02b01de0592fcd138f969c9a9b4881959b400e69178f27048aff9e0f82",
"md5": "3bbc441f77cf7bdd9846fd525fb5c0aa",
"sha256": "ed761a63c2b26075c6fd78053100f585f83241e4cb72bc07916fd5e71c5caa1f"
},
"downloads": -1,
"filename": "pygeodesic-0.1.8-cp311-cp311-win_amd64.whl",
"has_sig": false,
"md5_digest": "3bbc441f77cf7bdd9846fd525fb5c0aa",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": null,
"size": 1328221,
"upload_time": "2023-01-26T22:46:42",
"upload_time_iso_8601": "2023-01-26T22:46:42.088438Z",
"url": "https://files.pythonhosted.org/packages/6c/5c/8a02b01de0592fcd138f969c9a9b4881959b400e69178f27048aff9e0f82/pygeodesic-0.1.8-cp311-cp311-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "b992784d79500591779c9da8f1325ec906cfd2a9c40c8565812ad38d6b8eb3b5",
"md5": "53d0ebed5999f4c9a9611adf92c24145",
"sha256": "cd68fc0245436cf27908ee7002ae35e9725db6abc6cbc56d5107ff3fdad0a3ce"
},
"downloads": -1,
"filename": "pygeodesic-0.1.8-cp37-cp37m-macosx_10_9_x86_64.whl",
"has_sig": false,
"md5_digest": "53d0ebed5999f4c9a9611adf92c24145",
"packagetype": "bdist_wheel",
"python_version": "cp37",
"requires_python": null,
"size": 150187,
"upload_time": "2023-01-26T22:46:43",
"upload_time_iso_8601": "2023-01-26T22:46:43.382113Z",
"url": "https://files.pythonhosted.org/packages/b9/92/784d79500591779c9da8f1325ec906cfd2a9c40c8565812ad38d6b8eb3b5/pygeodesic-0.1.8-cp37-cp37m-macosx_10_9_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "d0bc15c2f0976c0df475c82df82b1232d15ecddd4a4b181dd26a3a47f309324f",
"md5": "38900e00847865ecbc06901f0db9419e",
"sha256": "b51b327b2221a8ac83a1047bcd27b6152d028b276d953b41987e790dae8dac90"
},
"downloads": -1,
"filename": "pygeodesic-0.1.8-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "38900e00847865ecbc06901f0db9419e",
"packagetype": "bdist_wheel",
"python_version": "cp37",
"requires_python": null,
"size": 837575,
"upload_time": "2023-01-26T22:46:44",
"upload_time_iso_8601": "2023-01-26T22:46:44.645905Z",
"url": "https://files.pythonhosted.org/packages/d0/bc/15c2f0976c0df475c82df82b1232d15ecddd4a4b181dd26a3a47f309324f/pygeodesic-0.1.8-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "ae518dd582ae1c5293a4ac85b4fe7f3263be05898261d89ed2460bfa683f668d",
"md5": "51fe8406de25d76d726a5e49dc8146bb",
"sha256": "f15fc8999dcb705b5701131d0d3b499f92645a8fec0b1c5ef241978afd088e47"
},
"downloads": -1,
"filename": "pygeodesic-0.1.8-cp37-cp37m-win_amd64.whl",
"has_sig": false,
"md5_digest": "51fe8406de25d76d726a5e49dc8146bb",
"packagetype": "bdist_wheel",
"python_version": "cp37",
"requires_python": null,
"size": 1223306,
"upload_time": "2023-01-26T22:46:45",
"upload_time_iso_8601": "2023-01-26T22:46:45.828782Z",
"url": "https://files.pythonhosted.org/packages/ae/51/8dd582ae1c5293a4ac85b4fe7f3263be05898261d89ed2460bfa683f668d/pygeodesic-0.1.8-cp37-cp37m-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "42e8d60fcede1d865f254f54cc2ac29a2c84a8cf572db30170ce21690c311077",
"md5": "64815e0e2176abc3cbd98ffd06fcc08e",
"sha256": "4f7f29dae1e293cef873e7240472dc7fc1868809599548c5d72a866e9db50a61"
},
"downloads": -1,
"filename": "pygeodesic-0.1.8-cp38-cp38-macosx_10_9_universal2.whl",
"has_sig": false,
"md5_digest": "64815e0e2176abc3cbd98ffd06fcc08e",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": null,
"size": 351011,
"upload_time": "2023-01-26T22:46:47",
"upload_time_iso_8601": "2023-01-26T22:46:47.534041Z",
"url": "https://files.pythonhosted.org/packages/42/e8/d60fcede1d865f254f54cc2ac29a2c84a8cf572db30170ce21690c311077/pygeodesic-0.1.8-cp38-cp38-macosx_10_9_universal2.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "05263166e2a385e8e6502f3da49c205c577b25ae4db3df03b5de30397ac56531",
"md5": "b670e37b0a7aeb7eac90f4e9bfd8c68e",
"sha256": "1bf5ed520af5066962857c032d5abaf061b1fca815cfbdc4e43d6117508ae931"
},
"downloads": -1,
"filename": "pygeodesic-0.1.8-cp38-cp38-macosx_10_9_x86_64.whl",
"has_sig": false,
"md5_digest": "b670e37b0a7aeb7eac90f4e9bfd8c68e",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": null,
"size": 254736,
"upload_time": "2023-01-26T22:46:48",
"upload_time_iso_8601": "2023-01-26T22:46:48.951984Z",
"url": "https://files.pythonhosted.org/packages/05/26/3166e2a385e8e6502f3da49c205c577b25ae4db3df03b5de30397ac56531/pygeodesic-0.1.8-cp38-cp38-macosx_10_9_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "c963cea765a3f04d539414417ae73b0a53dba544113092388f68f6a62c609707",
"md5": "7e23c12e2d7df5f59123e63eaba9eced",
"sha256": "03155d45116d0595e5fcd1f1357a2d8a90f2dbf91589c63228311730ff96e9c8"
},
"downloads": -1,
"filename": "pygeodesic-0.1.8-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "7e23c12e2d7df5f59123e63eaba9eced",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": null,
"size": 983794,
"upload_time": "2023-01-26T22:46:50",
"upload_time_iso_8601": "2023-01-26T22:46:50.199298Z",
"url": "https://files.pythonhosted.org/packages/c9/63/cea765a3f04d539414417ae73b0a53dba544113092388f68f6a62c609707/pygeodesic-0.1.8-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "95d111de8b928183bff4f7469463dcc7d004a51c097452cf4ca40146ddf220b6",
"md5": "be8457c7e07ac08a24b8feff99251921",
"sha256": "9e626db32bbb29f94130fb9a13d7c095120bfb47c0b372d4f112831ed7797351"
},
"downloads": -1,
"filename": "pygeodesic-0.1.8-cp38-cp38-win_amd64.whl",
"has_sig": false,
"md5_digest": "be8457c7e07ac08a24b8feff99251921",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": null,
"size": 1327942,
"upload_time": "2023-01-26T22:46:51",
"upload_time_iso_8601": "2023-01-26T22:46:51.990485Z",
"url": "https://files.pythonhosted.org/packages/95/d1/11de8b928183bff4f7469463dcc7d004a51c097452cf4ca40146ddf220b6/pygeodesic-0.1.8-cp38-cp38-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "133de8911ab38236f91ebaacbd1dbe621e083d193fb30ac275345adb26dbc0be",
"md5": "becde5fe5968f7dffe39c62b585912e0",
"sha256": "56abd963fada34656e19794f5bce0b1f9c475bf508e6f9a040a4e14fb198d05e"
},
"downloads": -1,
"filename": "pygeodesic-0.1.8-cp39-cp39-macosx_10_9_universal2.whl",
"has_sig": false,
"md5_digest": "becde5fe5968f7dffe39c62b585912e0",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": null,
"size": 348722,
"upload_time": "2023-01-26T22:46:53",
"upload_time_iso_8601": "2023-01-26T22:46:53.208034Z",
"url": "https://files.pythonhosted.org/packages/13/3d/e8911ab38236f91ebaacbd1dbe621e083d193fb30ac275345adb26dbc0be/pygeodesic-0.1.8-cp39-cp39-macosx_10_9_universal2.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "2cbd5e37538099e0be710bc71b7ca865e3abf62be346d6154b8590ccfae634a3",
"md5": "338f4ff0e1c836a3ab70f4661f4ac94b",
"sha256": "4bb3852dea0ac33fc759d8d7b59968a11e97873381e996f4cbdee58c94c3f9b1"
},
"downloads": -1,
"filename": "pygeodesic-0.1.8-cp39-cp39-macosx_10_9_x86_64.whl",
"has_sig": false,
"md5_digest": "338f4ff0e1c836a3ab70f4661f4ac94b",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": null,
"size": 253768,
"upload_time": "2023-01-26T22:46:55",
"upload_time_iso_8601": "2023-01-26T22:46:55.067467Z",
"url": "https://files.pythonhosted.org/packages/2c/bd/5e37538099e0be710bc71b7ca865e3abf62be346d6154b8590ccfae634a3/pygeodesic-0.1.8-cp39-cp39-macosx_10_9_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "5b599c4e9d0c019a4ecbe776766a153624cae7889356e57dfef990e9ea749c44",
"md5": "6c0b7a19f77217e52dfa00d8a1bef719",
"sha256": "1423f99081dc946cf7de81c80f922a9d77ecdb69315c0101e698912e8892e2c0"
},
"downloads": -1,
"filename": "pygeodesic-0.1.8-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "6c0b7a19f77217e52dfa00d8a1bef719",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": null,
"size": 973777,
"upload_time": "2023-01-26T22:46:56",
"upload_time_iso_8601": "2023-01-26T22:46:56.825337Z",
"url": "https://files.pythonhosted.org/packages/5b/59/9c4e9d0c019a4ecbe776766a153624cae7889356e57dfef990e9ea749c44/pygeodesic-0.1.8-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "d6e2c96ced1faec25c677f0c6a661dcb526879be9d121416b168e085ee206e15",
"md5": "ac5e049e0422108573e5156a2a42bd55",
"sha256": "2b12f776d2d08dd7427347d5dbbc0e58128f4207016cf641cb26e0532e17cc0a"
},
"downloads": -1,
"filename": "pygeodesic-0.1.8-cp39-cp39-win_amd64.whl",
"has_sig": false,
"md5_digest": "ac5e049e0422108573e5156a2a42bd55",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": null,
"size": 1327655,
"upload_time": "2023-01-26T22:46:58",
"upload_time_iso_8601": "2023-01-26T22:46:58.718456Z",
"url": "https://files.pythonhosted.org/packages/d6/e2/c96ced1faec25c677f0c6a661dcb526879be9d121416b168e085ee206e15/pygeodesic-0.1.8-cp39-cp39-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "ccec51a0ca644d19eb40fe85cd7e4f9b9d7b4c1bd590acc8a0b0a8bd22a16fbd",
"md5": "5fb81d193e4f3be5c61fad3807f61b41",
"sha256": "56b73149ad15fdb88cab905486c178cb3a918f59fa2eb65705a19e22644573b8"
},
"downloads": -1,
"filename": "pygeodesic-0.1.8.tar.gz",
"has_sig": false,
"md5_digest": "5fb81d193e4f3be5c61fad3807f61b41",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 35414,
"upload_time": "2023-01-26T22:47:00",
"upload_time_iso_8601": "2023-01-26T22:47:00.323368Z",
"url": "https://files.pythonhosted.org/packages/cc/ec/51a0ca644d19eb40fe85cd7e4f9b9d7b4c1bd590acc8a0b0a8bd22a16fbd/pygeodesic-0.1.8.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-01-26 22:47:00",
"github": true,
"gitlab": false,
"bitbucket": false,
"github_user": "mhogg",
"github_project": "pygeodesic",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "pygeodesic"
}