# 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": null,
"docs_url": null,
"requires_python": ">=3.9",
"maintainer_email": null,
"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/66/33/174106049bdea633e537f14fc39ebc68f2f97994591911b4e64e4870803c/pygeodesic-0.1.11.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.11",
"project_urls": {
"Download": "https://github.com/mhogg/pygeodesic/releases",
"Homepage": "https://github.com/mhogg/pygeodesic"
},
"split_keywords": [
"geodesic",
" distance",
" path",
" triangle",
" mesh",
" python",
" cython"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "5d467b82ededbd6f5b1b1383053f88df5ffd16c66ed0623a8e778787458569bb",
"md5": "c37e5dadcf817da234f2b9c61af203d2",
"sha256": "aad31c623cfe122cac223a7e603fc30ba6b8a56436d0a986fb1f60045c635e0c"
},
"downloads": -1,
"filename": "pygeodesic-0.1.11-cp310-cp310-macosx_10_9_x86_64.whl",
"has_sig": false,
"md5_digest": "c37e5dadcf817da234f2b9c61af203d2",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.9",
"size": 258774,
"upload_time": "2024-11-26T20:53:56",
"upload_time_iso_8601": "2024-11-26T20:53:56.382469Z",
"url": "https://files.pythonhosted.org/packages/5d/46/7b82ededbd6f5b1b1383053f88df5ffd16c66ed0623a8e778787458569bb/pygeodesic-0.1.11-cp310-cp310-macosx_10_9_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "c0b0b768a59be46f633f1ada3f818de630c73265867dc8b0ff2a1e6dc2b80ffc",
"md5": "2530841f655d2375c66727ba5b43f8c3",
"sha256": "e66ecde93fa2ec3362c0d80aacc2270ad4b5882d4835444bff34223f6d6f5f51"
},
"downloads": -1,
"filename": "pygeodesic-0.1.11-cp310-cp310-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "2530841f655d2375c66727ba5b43f8c3",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.9",
"size": 253077,
"upload_time": "2024-11-26T20:53:58",
"upload_time_iso_8601": "2024-11-26T20:53:58.167975Z",
"url": "https://files.pythonhosted.org/packages/c0/b0/b768a59be46f633f1ada3f818de630c73265867dc8b0ff2a1e6dc2b80ffc/pygeodesic-0.1.11-cp310-cp310-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "1a66c134db3ed52a1c968d755620145381379478c7a4c451f0d3e58e898454a4",
"md5": "e7cc453d7cb150966aa924edfdd693a3",
"sha256": "32a318f41f0910579a85aeadf2810c815f41e33d06d5abba3d9c3b475838b5cc"
},
"downloads": -1,
"filename": "pygeodesic-0.1.11-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "e7cc453d7cb150966aa924edfdd693a3",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.9",
"size": 986273,
"upload_time": "2024-11-26T20:53:59",
"upload_time_iso_8601": "2024-11-26T20:53:59.966744Z",
"url": "https://files.pythonhosted.org/packages/1a/66/c134db3ed52a1c968d755620145381379478c7a4c451f0d3e58e898454a4/pygeodesic-0.1.11-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "67b41a869fe63d296073c6d71f825cc4a84584348fe93a2bb1afb405139ce531",
"md5": "21e64991ff5c7d3988fbfa174b70612c",
"sha256": "bcb310b9fa23e869f0662d0ceaeed3497eaccaa8165b2d60a37d1484069c2e7e"
},
"downloads": -1,
"filename": "pygeodesic-0.1.11-cp310-cp310-win_amd64.whl",
"has_sig": false,
"md5_digest": "21e64991ff5c7d3988fbfa174b70612c",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.9",
"size": 1337184,
"upload_time": "2024-11-26T20:54:01",
"upload_time_iso_8601": "2024-11-26T20:54:01.780424Z",
"url": "https://files.pythonhosted.org/packages/67/b4/1a869fe63d296073c6d71f825cc4a84584348fe93a2bb1afb405139ce531/pygeodesic-0.1.11-cp310-cp310-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "85a6300133dfa4f0b33276763fbdd94550829e33401ecc2893cb3b3aca5cf7e7",
"md5": "df167b21a6ccd387292011da084c2069",
"sha256": "02228e385e8ae35d520f9de8872063f88a1faf475e396a3363617b83a2fb51d3"
},
"downloads": -1,
"filename": "pygeodesic-0.1.11-cp311-cp311-macosx_10_9_x86_64.whl",
"has_sig": false,
"md5_digest": "df167b21a6ccd387292011da084c2069",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.9",
"size": 258983,
"upload_time": "2024-11-26T20:54:03",
"upload_time_iso_8601": "2024-11-26T20:54:03.650371Z",
"url": "https://files.pythonhosted.org/packages/85/a6/300133dfa4f0b33276763fbdd94550829e33401ecc2893cb3b3aca5cf7e7/pygeodesic-0.1.11-cp311-cp311-macosx_10_9_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "42e14404622c488a86fa255578ffa6366db26b008e127c917003fb5cc1c0ba5c",
"md5": "518649a2e5866498f1a068259cf10ce8",
"sha256": "a6bde2fef5e06e6d3579bae9273dde166e068abd67616c76b96be10cd70ef9e9"
},
"downloads": -1,
"filename": "pygeodesic-0.1.11-cp311-cp311-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "518649a2e5866498f1a068259cf10ce8",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.9",
"size": 252850,
"upload_time": "2024-11-26T20:54:05",
"upload_time_iso_8601": "2024-11-26T20:54:05.402290Z",
"url": "https://files.pythonhosted.org/packages/42/e1/4404622c488a86fa255578ffa6366db26b008e127c917003fb5cc1c0ba5c/pygeodesic-0.1.11-cp311-cp311-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "2b9ecd246386d325c37e78508cd92d7766b379ed34591189c578864e623d3839",
"md5": "1e3bb1e2104391eab2e48540a9cf1f84",
"sha256": "054242d85e7c7ed0c65d8de94aebb869c0a29b0b1719bfbc4f321088159e5255"
},
"downloads": -1,
"filename": "pygeodesic-0.1.11-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "1e3bb1e2104391eab2e48540a9cf1f84",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.9",
"size": 1013099,
"upload_time": "2024-11-26T20:54:06",
"upload_time_iso_8601": "2024-11-26T20:54:06.481724Z",
"url": "https://files.pythonhosted.org/packages/2b/9e/cd246386d325c37e78508cd92d7766b379ed34591189c578864e623d3839/pygeodesic-0.1.11-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "6889bcd63cb7bee31fffe526bdd31f4a65abe40beacba894a7f208ed10ee9576",
"md5": "66a1117d5bd8ab98fea123f2cf1b038e",
"sha256": "e8aad25facf737ce70669e6bf16056426ae0f786721f272077ee6fbc2dfdff1c"
},
"downloads": -1,
"filename": "pygeodesic-0.1.11-cp311-cp311-win_amd64.whl",
"has_sig": false,
"md5_digest": "66a1117d5bd8ab98fea123f2cf1b038e",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.9",
"size": 1337934,
"upload_time": "2024-11-26T20:54:07",
"upload_time_iso_8601": "2024-11-26T20:54:07.676320Z",
"url": "https://files.pythonhosted.org/packages/68/89/bcd63cb7bee31fffe526bdd31f4a65abe40beacba894a7f208ed10ee9576/pygeodesic-0.1.11-cp311-cp311-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "d44bfa724ded65584cff1b024016783614393c770a3b8ff9e0b2b2352153f955",
"md5": "84ae108e42e4e38923985c14014c2e0e",
"sha256": "4bb9675435dbe1291989f8d3b33b80421e6ac7da819fe362fa82eab5519a16e2"
},
"downloads": -1,
"filename": "pygeodesic-0.1.11-cp312-cp312-macosx_10_13_x86_64.whl",
"has_sig": false,
"md5_digest": "84ae108e42e4e38923985c14014c2e0e",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.9",
"size": 258144,
"upload_time": "2024-11-26T20:54:08",
"upload_time_iso_8601": "2024-11-26T20:54:08.838128Z",
"url": "https://files.pythonhosted.org/packages/d4/4b/fa724ded65584cff1b024016783614393c770a3b8ff9e0b2b2352153f955/pygeodesic-0.1.11-cp312-cp312-macosx_10_13_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "505a61e8e9f8616427cf29310da628d5e5a836892c6a0503a08fee3439140285",
"md5": "1658e1e74eb3600ea52e10345d71033c",
"sha256": "fc730367f4b2f7067c6f79269097d00eda969ea044c6d123db0769abca306638"
},
"downloads": -1,
"filename": "pygeodesic-0.1.11-cp312-cp312-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "1658e1e74eb3600ea52e10345d71033c",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.9",
"size": 252273,
"upload_time": "2024-11-26T20:54:09",
"upload_time_iso_8601": "2024-11-26T20:54:09.858839Z",
"url": "https://files.pythonhosted.org/packages/50/5a/61e8e9f8616427cf29310da628d5e5a836892c6a0503a08fee3439140285/pygeodesic-0.1.11-cp312-cp312-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "6b3d972e2207d5845b6129f553376010b0bddecc2b1b74799e186d97e0f326d6",
"md5": "7b94215e08e3e76de6c562256bbc9464",
"sha256": "495101cd634df7afe108a63419a864c77098c490608934c642b9d6eabc946ec1"
},
"downloads": -1,
"filename": "pygeodesic-0.1.11-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "7b94215e08e3e76de6c562256bbc9464",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.9",
"size": 1016926,
"upload_time": "2024-11-26T20:54:10",
"upload_time_iso_8601": "2024-11-26T20:54:10.904222Z",
"url": "https://files.pythonhosted.org/packages/6b/3d/972e2207d5845b6129f553376010b0bddecc2b1b74799e186d97e0f326d6/pygeodesic-0.1.11-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "e60b03af381ad00eaf56dde8156d48c0c4b7c5b928dd128221619d8b3cfea901",
"md5": "b58b27a66867c6367e95c6e8f7ae4591",
"sha256": "585e6fd35babbda2fa9b87f23d05e0ec26e1e416e069997ed137ac04b94f05b9"
},
"downloads": -1,
"filename": "pygeodesic-0.1.11-cp312-cp312-win_amd64.whl",
"has_sig": false,
"md5_digest": "b58b27a66867c6367e95c6e8f7ae4591",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.9",
"size": 1335932,
"upload_time": "2024-11-26T20:54:12",
"upload_time_iso_8601": "2024-11-26T20:54:12.072741Z",
"url": "https://files.pythonhosted.org/packages/e6/0b/03af381ad00eaf56dde8156d48c0c4b7c5b928dd128221619d8b3cfea901/pygeodesic-0.1.11-cp312-cp312-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "1f03b7e5e98cc2a1a738d07daf6a2736b6c83c394e997ddca41a675eed11ae1e",
"md5": "9d4b2697df442a8f83b1c8d5879a08f4",
"sha256": "223e77235d0cefafb9b37ab2bcd8b99f94d4f819dfcf18c32e6f83d270eaf614"
},
"downloads": -1,
"filename": "pygeodesic-0.1.11-cp313-cp313-macosx_10_13_x86_64.whl",
"has_sig": false,
"md5_digest": "9d4b2697df442a8f83b1c8d5879a08f4",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.9",
"size": 257300,
"upload_time": "2024-11-26T20:54:13",
"upload_time_iso_8601": "2024-11-26T20:54:13.484974Z",
"url": "https://files.pythonhosted.org/packages/1f/03/b7e5e98cc2a1a738d07daf6a2736b6c83c394e997ddca41a675eed11ae1e/pygeodesic-0.1.11-cp313-cp313-macosx_10_13_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "28ea37deeb6c02599048ee1a05750a119744e394d2f746f2f51cf5e02f030ed2",
"md5": "bbfe80027dce83bdb90dcee33c6050e4",
"sha256": "4ebb75522b7e668a056ae33958d912dfbf5f6926048eb581cd1411c109a60475"
},
"downloads": -1,
"filename": "pygeodesic-0.1.11-cp313-cp313-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "bbfe80027dce83bdb90dcee33c6050e4",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.9",
"size": 251506,
"upload_time": "2024-11-26T20:54:15",
"upload_time_iso_8601": "2024-11-26T20:54:15.160962Z",
"url": "https://files.pythonhosted.org/packages/28/ea/37deeb6c02599048ee1a05750a119744e394d2f746f2f51cf5e02f030ed2/pygeodesic-0.1.11-cp313-cp313-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "7dd4c0e2fa21ca048e0199a3bee1438d5fef6591b65d2c856d8b7934c9bb5af7",
"md5": "f9d25de77f24ce0f7283cd4c5095709f",
"sha256": "667dbfc3692b0d205140275157e6275d05910de9b3cecadff2d439ebb5386e8d"
},
"downloads": -1,
"filename": "pygeodesic-0.1.11-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "f9d25de77f24ce0f7283cd4c5095709f",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.9",
"size": 1013238,
"upload_time": "2024-11-26T20:54:16",
"upload_time_iso_8601": "2024-11-26T20:54:16.235642Z",
"url": "https://files.pythonhosted.org/packages/7d/d4/c0e2fa21ca048e0199a3bee1438d5fef6591b65d2c856d8b7934c9bb5af7/pygeodesic-0.1.11-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "9829967ad2b817a530a866ee9531452439bd1f1bf61c564b2fb85f37741795a5",
"md5": "ddb809e4d1f3e21cef8a174bb26d1222",
"sha256": "a76e838faf172001a12ca4cab6f6df17fc5e8cba13dd2317675df83e8a14c9ae"
},
"downloads": -1,
"filename": "pygeodesic-0.1.11-cp313-cp313-win_amd64.whl",
"has_sig": false,
"md5_digest": "ddb809e4d1f3e21cef8a174bb26d1222",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.9",
"size": 1335787,
"upload_time": "2024-11-26T20:54:17",
"upload_time_iso_8601": "2024-11-26T20:54:17.425899Z",
"url": "https://files.pythonhosted.org/packages/98/29/967ad2b817a530a866ee9531452439bd1f1bf61c564b2fb85f37741795a5/pygeodesic-0.1.11-cp313-cp313-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "cdeb8c8097db37f26883d0cad27eb6b8ddf1fbc1c71767a5da55b4086325822e",
"md5": "3d5f4641662b292a805a69bb7bf3e29c",
"sha256": "22606383c2de4d23c684508a23275e785759b34f78ea9b60222fe520277ab820"
},
"downloads": -1,
"filename": "pygeodesic-0.1.11-cp39-cp39-macosx_10_9_x86_64.whl",
"has_sig": false,
"md5_digest": "3d5f4641662b292a805a69bb7bf3e29c",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.9",
"size": 149450,
"upload_time": "2024-11-26T20:54:18",
"upload_time_iso_8601": "2024-11-26T20:54:18.562752Z",
"url": "https://files.pythonhosted.org/packages/cd/eb/8c8097db37f26883d0cad27eb6b8ddf1fbc1c71767a5da55b4086325822e/pygeodesic-0.1.11-cp39-cp39-macosx_10_9_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "5663c3ad7b8aca07942a9d6726145ce9838a5c27b22c5aaa99d554c5749bd330",
"md5": "c5535567fbc7d389b1789c8443d52284",
"sha256": "b98e74f6b22dce80c74ed1aa4fedc01ca1b13cd0b660fdeb2732a15cdaa28d6e"
},
"downloads": -1,
"filename": "pygeodesic-0.1.11-cp39-cp39-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "c5535567fbc7d389b1789c8443d52284",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.9",
"size": 143697,
"upload_time": "2024-11-26T20:54:19",
"upload_time_iso_8601": "2024-11-26T20:54:19.534509Z",
"url": "https://files.pythonhosted.org/packages/56/63/c3ad7b8aca07942a9d6726145ce9838a5c27b22c5aaa99d554c5749bd330/pygeodesic-0.1.11-cp39-cp39-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "0d918d037492bd6fc47edaac97a8bea86df8215a13c51063cdf3c3dd8ddc7373",
"md5": "52e2b733cf42a16e515bd08e87f54d94",
"sha256": "4f46c00dd763ff6bebae6c5fc2437b115bd59d0a0b4f9d0158f36389680f1f1a"
},
"downloads": -1,
"filename": "pygeodesic-0.1.11-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "52e2b733cf42a16e515bd08e87f54d94",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.9",
"size": 877114,
"upload_time": "2024-11-26T20:54:20",
"upload_time_iso_8601": "2024-11-26T20:54:20.624503Z",
"url": "https://files.pythonhosted.org/packages/0d/91/8d037492bd6fc47edaac97a8bea86df8215a13c51063cdf3c3dd8ddc7373/pygeodesic-0.1.11-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "5abcaa653f5c817213698e75be0006cd426dcebc29714685810b21bbafde2410",
"md5": "3dd7220271fdfc3dcd46d7f051f2cb61",
"sha256": "6c8fc3a92087e9757e0c4f7ebf8dd47cb031367bbf48c0277392c852b4b6e609"
},
"downloads": -1,
"filename": "pygeodesic-0.1.11-cp39-cp39-win_amd64.whl",
"has_sig": false,
"md5_digest": "3dd7220271fdfc3dcd46d7f051f2cb61",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.9",
"size": 1227788,
"upload_time": "2024-11-26T20:54:21",
"upload_time_iso_8601": "2024-11-26T20:54:21.910840Z",
"url": "https://files.pythonhosted.org/packages/5a/bc/aa653f5c817213698e75be0006cd426dcebc29714685810b21bbafde2410/pygeodesic-0.1.11-cp39-cp39-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "6633174106049bdea633e537f14fc39ebc68f2f97994591911b4e64e4870803c",
"md5": "b16534fa2ca253720fab0220be0ce83b",
"sha256": "a9b54eb20d57f5499d8b2a4a67ece675a44c6fc8d00b11e8c14c8c99edeee5ed"
},
"downloads": -1,
"filename": "pygeodesic-0.1.11.tar.gz",
"has_sig": false,
"md5_digest": "b16534fa2ca253720fab0220be0ce83b",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.9",
"size": 36275,
"upload_time": "2024-11-26T20:54:23",
"upload_time_iso_8601": "2024-11-26T20:54:23.088241Z",
"url": "https://files.pythonhosted.org/packages/66/33/174106049bdea633e537f14fc39ebc68f2f97994591911b4e64e4870803c/pygeodesic-0.1.11.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-11-26 20:54:23",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "mhogg",
"github_project": "pygeodesic",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "pygeodesic"
}