## zmesh: Multi-Label Marching Cubes & Mesh Simplification
[![Tests](https://github.com/seung-lab/zmesh/actions/workflows/test.yml/badge.svg?branch=master)](https://github.com/seung-lab/zmesh/actions/workflows/test.yml) [![PyPI version](https://badge.fury.io/py/zmesh.svg)](https://badge.fury.io/py/zmesh)
```python
from zmesh import Mesher
labels = ... # some dense volumetric labeled image
mesher = Mesher( (4,4,40) ) # anisotropy of image
# initial marching cubes pass
# close controls whether meshes touching
# the image boundary are left open or closed
mesher.mesh(labels, close=False)
meshes = []
for obj_id in mesher.ids():
meshes.append(
mesher.get(
obj_id,
normals=False, # whether to calculate normals or not
# tries to reduce triangles by this factor
# 0 disables simplification
reduction_factor=100,
# Max tolerable error in physical distance
# note: if max_error is not set, the max error
# will be set equivalent to one voxel along the
# smallest dimension.
max_error=8,
# whether meshes should be centered in the voxel
# on (0,0,0) [False] or (0.5,0.5,0.5) [True]
voxel_centered=False,
)
)
mesher.erase(obj_id) # delete high res mesh
mesher.clear() # clear memory retained by mesher
mesh = meshes[0]
mesh = mesher.simplify(
mesh,
# same as reduction_factor in get
reduction_factor=100,
# same as max_error in get
max_error=40,
compute_normals=False, # whether to also compute face normals
) # apply simplifier to a pre-existing mesh
# compute normals without simplifying
mesh = mesher.compute_normals(mesh)
mesh.vertices
mesh.faces
mesh.normals
mesh.triangles() # compute triangles from vertices and faces
# Extremely common obj format
with open('iconic_doge.obj', 'wb') as f:
f.write(mesh.to_obj())
# Common binary format
with open('iconic_doge.ply', 'wb') as f:
f.write(mesh.to_ply())
# Neuroglancer Precomputed format
with open('10001001:0', 'wb') as f:
f.write(mesh.to_precomputed())
```
Note: As of the latest version, `mesher.get_mesh` has been deprecated in favor of `mesher.get` which fixes a long standing bug where you needed to transpose your data in order to get a mesh in the correct orientation.
## Installation
If binaries are not available for your system, ensure you have a C++ compiler installed.
```bash
pip install zmesh
```
## Performance Tuning & Notes
- The mesher will consume about double memory in 64 bit mode if the size of the
object exceeds <1023, 1023, 511> on the x, y, or z axes. This is due to a limitation
of the 32-bit format.
- The mesher is ambidextrous, it can handle C or Fortran order arrays.
- The maximum vertex range supported `.simplify` after converting to voxel space is 2<sup>20</sup> (appx. 1M) due to the packed 64-bit vertex format.
## Related Projects
- [zi_lib](https://github.com/zlateski/zi_lib) - zmesh makes heavy use of Aleks' C++ library.
- [Igneous](https://github.com/seung-lab/igneous) - Visualization of connectomics data using cloud computing.
## Credits
Thanks to Aleks Zlateski for creating and sharing this beautiful mesher.
Later changes by Will Silversmith, Nico Kemnitz, and Jingpeng Wu.
## References
1. W. Lorensen and H. Cline. "Marching Cubes: A High Resolution 3D Surface Construction Algorithm". pp 163-169. Computer Graphics, Volume 21, Number 4, July 1987. ([link](https://people.eecs.berkeley.edu/~jrs/meshpapers/LorensenCline.pdf))
2. M. Garland and P. Heckbert. "Surface simplification using quadric error metrics". SIGGRAPH '97: Proceedings of the 24th annual conference on Computer graphics and interactive techniques. Pages 209–216. August 1997. doi: 10.1145/258734.258849 ([link](https://mgarland.org/files/papers/quadrics.pdf))
3. H. Hoppe. "New Quadric Metric for Simplifying Meshes with Appearance Attributes". IEEE Visualization 1999 Conference. pp. 59-66. doi: 10.1109/VISUAL.1999.809869 ([link](http://hhoppe.com/newqem.pdf))
Raw data
{
"_id": null,
"home_page": "https://github.com/seung-lab/zmesh/",
"name": "zmesh",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.8",
"maintainer_email": null,
"keywords": null,
"author": "William Silversmith (maintainer), Aleks Zlateski (original author)",
"author_email": "ws9@princeton.edu",
"download_url": "https://files.pythonhosted.org/packages/63/da/87d51faee9b9e3298cf78df843eee5fa8fb155c3e09edfaa167b439ec916/zmesh-1.8.0.tar.gz",
"platform": null,
"description": "## zmesh: Multi-Label Marching Cubes & Mesh Simplification\n[![Tests](https://github.com/seung-lab/zmesh/actions/workflows/test.yml/badge.svg?branch=master)](https://github.com/seung-lab/zmesh/actions/workflows/test.yml) [![PyPI version](https://badge.fury.io/py/zmesh.svg)](https://badge.fury.io/py/zmesh) \n\n```python\nfrom zmesh import Mesher\n\nlabels = ... # some dense volumetric labeled image\nmesher = Mesher( (4,4,40) ) # anisotropy of image\n\n# initial marching cubes pass\n# close controls whether meshes touching\n# the image boundary are left open or closed\nmesher.mesh(labels, close=False) \n\nmeshes = []\nfor obj_id in mesher.ids():\n meshes.append(\n mesher.get(\n obj_id, \n normals=False, # whether to calculate normals or not\n\n # tries to reduce triangles by this factor\n # 0 disables simplification\n reduction_factor=100, \n\n # Max tolerable error in physical distance\n # note: if max_error is not set, the max error\n # will be set equivalent to one voxel along the \n # smallest dimension.\n max_error=8,\n # whether meshes should be centered in the voxel\n # on (0,0,0) [False] or (0.5,0.5,0.5) [True]\n voxel_centered=False, \n )\n )\n mesher.erase(obj_id) # delete high res mesh\n\nmesher.clear() # clear memory retained by mesher\n\nmesh = meshes[0]\nmesh = mesher.simplify(\n mesh, \n # same as reduction_factor in get\n reduction_factor=100, \n # same as max_error in get\n max_error=40, \n compute_normals=False, # whether to also compute face normals\n) # apply simplifier to a pre-existing mesh\n\n# compute normals without simplifying\nmesh = mesher.compute_normals(mesh) \n\nmesh.vertices\nmesh.faces \nmesh.normals\nmesh.triangles() # compute triangles from vertices and faces\n\n# Extremely common obj format\nwith open('iconic_doge.obj', 'wb') as f:\n f.write(mesh.to_obj())\n\n# Common binary format\nwith open('iconic_doge.ply', 'wb') as f:\n f.write(mesh.to_ply())\n\n# Neuroglancer Precomputed format\nwith open('10001001:0', 'wb') as f:\n f.write(mesh.to_precomputed())\n```\n\nNote: As of the latest version, `mesher.get_mesh` has been deprecated in favor of `mesher.get` which fixes a long standing bug where you needed to transpose your data in order to get a mesh in the correct orientation.\n\n## Installation \n\nIf binaries are not available for your system, ensure you have a C++ compiler installed.\n\n```bash\npip install zmesh\n```\n\n## Performance Tuning & Notes\n\n- The mesher will consume about double memory in 64 bit mode if the size of the \nobject exceeds <1023, 1023, 511> on the x, y, or z axes. This is due to a limitation \nof the 32-bit format. \n- The mesher is ambidextrous, it can handle C or Fortran order arrays.\n- The maximum vertex range supported `.simplify` after converting to voxel space is 2<sup>20</sup> (appx. 1M) due to the packed 64-bit vertex format.\n\n## Related Projects \n\n- [zi_lib](https://github.com/zlateski/zi_lib) - zmesh makes heavy use of Aleks' C++ library.\n- [Igneous](https://github.com/seung-lab/igneous) - Visualization of connectomics data using cloud computing.\n\n## Credits\n\nThanks to Aleks Zlateski for creating and sharing this beautiful mesher. \n\nLater changes by Will Silversmith, Nico Kemnitz, and Jingpeng Wu. \n\n## References \n\n1. W. Lorensen and H. Cline. \"Marching Cubes: A High Resolution 3D Surface Construction Algorithm\". pp 163-169. Computer Graphics, Volume 21, Number 4, July 1987. ([link](https://people.eecs.berkeley.edu/~jrs/meshpapers/LorensenCline.pdf)) \n2. M. Garland and P. Heckbert. \"Surface simplification using quadric error metrics\". SIGGRAPH '97: Proceedings of the 24th annual conference on Computer graphics and interactive techniques. Pages 209\u2013216. August 1997. doi: 10.1145/258734.258849 ([link](https://mgarland.org/files/papers/quadrics.pdf)) \n3. H. Hoppe. \"New Quadric Metric for Simplifying Meshes with Appearance Attributes\". IEEE Visualization 1999 Conference. pp. 59-66. doi: 10.1109/VISUAL.1999.809869 ([link](http://hhoppe.com/newqem.pdf))\n\n",
"bugtrack_url": null,
"license": "GPLv3+",
"summary": "Multilabel marching cubes and simplification of volumetric data.",
"version": "1.8.0",
"project_urls": {
"Homepage": "https://github.com/seung-lab/zmesh/"
},
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "e90c507f91332d3d82cd4e10cc43b49d532f6d7a1cb0ec04f5837cd946423510",
"md5": "c7c087d3146da36a1fb0e7fa3b1fbf2f",
"sha256": "47021fb62281c0fa0eab1eebb48c3f4d940cb8fe6e6e38ef362e50acd51a4ceb"
},
"downloads": -1,
"filename": "zmesh-1.8.0-cp310-cp310-macosx_10_9_universal2.whl",
"has_sig": false,
"md5_digest": "c7c087d3146da36a1fb0e7fa3b1fbf2f",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.8",
"size": 375005,
"upload_time": "2024-09-19T22:43:53",
"upload_time_iso_8601": "2024-09-19T22:43:53.846565Z",
"url": "https://files.pythonhosted.org/packages/e9/0c/507f91332d3d82cd4e10cc43b49d532f6d7a1cb0ec04f5837cd946423510/zmesh-1.8.0-cp310-cp310-macosx_10_9_universal2.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "be45bbd9a5770731f8644bdccd8c822b74ab1dc3c21cbe35d0e6ee24091b0605",
"md5": "4828230f047bdd2134aad06d870f0dce",
"sha256": "0e455aa2f5862957dd059fdf1ef0184ea65f93283a1b5750463c812ee5d02e78"
},
"downloads": -1,
"filename": "zmesh-1.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "4828230f047bdd2134aad06d870f0dce",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.8",
"size": 1794915,
"upload_time": "2024-09-19T22:43:55",
"upload_time_iso_8601": "2024-09-19T22:43:55.912990Z",
"url": "https://files.pythonhosted.org/packages/be/45/bbd9a5770731f8644bdccd8c822b74ab1dc3c21cbe35d0e6ee24091b0605/zmesh-1.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "b07ff034d91b55d8ef8a5a7e5f232a6a52fb2754a4189692bc641b86abe68f3f",
"md5": "c2f5debb127705054978a9d83b007af7",
"sha256": "cf841f2979e7384db2545d9c253a6976163d56813dbd15a7708cbb9dcc4eaf10"
},
"downloads": -1,
"filename": "zmesh-1.8.0-cp310-cp310-win_amd64.whl",
"has_sig": false,
"md5_digest": "c2f5debb127705054978a9d83b007af7",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.8",
"size": 159451,
"upload_time": "2024-09-19T22:43:57",
"upload_time_iso_8601": "2024-09-19T22:43:57.607886Z",
"url": "https://files.pythonhosted.org/packages/b0/7f/f034d91b55d8ef8a5a7e5f232a6a52fb2754a4189692bc641b86abe68f3f/zmesh-1.8.0-cp310-cp310-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "328be89afd49db02df0c3915f6608e1fd192c3d5941ad830c039ddc0b38cf9ac",
"md5": "e83c416c76d45e52f461e85794a0c8c7",
"sha256": "c3cf177bf21b5f328b8388907cf082d30bb338e74cdf9310ef2e8f0358fb1faf"
},
"downloads": -1,
"filename": "zmesh-1.8.0-cp311-cp311-macosx_10_9_universal2.whl",
"has_sig": false,
"md5_digest": "e83c416c76d45e52f461e85794a0c8c7",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.8",
"size": 377999,
"upload_time": "2024-09-19T22:43:59",
"upload_time_iso_8601": "2024-09-19T22:43:59.082773Z",
"url": "https://files.pythonhosted.org/packages/32/8b/e89afd49db02df0c3915f6608e1fd192c3d5941ad830c039ddc0b38cf9ac/zmesh-1.8.0-cp311-cp311-macosx_10_9_universal2.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "79378316f20907ebd930ac126db1f46f3ad979c709ca16258ac0966b595a820e",
"md5": "778236f1918cdc12dafbb2ae651798c1",
"sha256": "6f563a3a215a3d71912c7a00abc376b3606240c8b23411301db0a123b1acf6ef"
},
"downloads": -1,
"filename": "zmesh-1.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "778236f1918cdc12dafbb2ae651798c1",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.8",
"size": 1846856,
"upload_time": "2024-09-19T22:44:00",
"upload_time_iso_8601": "2024-09-19T22:44:00.450800Z",
"url": "https://files.pythonhosted.org/packages/79/37/8316f20907ebd930ac126db1f46f3ad979c709ca16258ac0966b595a820e/zmesh-1.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "47e48370628019c94a38f20cdb812fca52dabaccb0c434e2be939624c58feb75",
"md5": "499ff313a569931eb0109dd969d07d31",
"sha256": "2abe1bf663ce8d0fcbd45e3f5085be2585cee20932469037e7dcc16e878ccf58"
},
"downloads": -1,
"filename": "zmesh-1.8.0-cp311-cp311-win_amd64.whl",
"has_sig": false,
"md5_digest": "499ff313a569931eb0109dd969d07d31",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.8",
"size": 159607,
"upload_time": "2024-09-19T22:44:02",
"upload_time_iso_8601": "2024-09-19T22:44:02.384189Z",
"url": "https://files.pythonhosted.org/packages/47/e4/8370628019c94a38f20cdb812fca52dabaccb0c434e2be939624c58feb75/zmesh-1.8.0-cp311-cp311-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "fd46549083ef39f15ad4dd9fc7e01f298b37b9113504b2adefbbf3f0466c5c76",
"md5": "743cd9d75baa04ef4c7bd462ef6ea3c2",
"sha256": "d55196ce8a3b52071222701236e2f4ba483262876c94df1c9e5cae123264c4f9"
},
"downloads": -1,
"filename": "zmesh-1.8.0-cp312-cp312-macosx_10_9_universal2.whl",
"has_sig": false,
"md5_digest": "743cd9d75baa04ef4c7bd462ef6ea3c2",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.8",
"size": 372029,
"upload_time": "2024-09-19T22:44:03",
"upload_time_iso_8601": "2024-09-19T22:44:03.701171Z",
"url": "https://files.pythonhosted.org/packages/fd/46/549083ef39f15ad4dd9fc7e01f298b37b9113504b2adefbbf3f0466c5c76/zmesh-1.8.0-cp312-cp312-macosx_10_9_universal2.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "0c4786755361ba0c7b83aed2cdbe6e2d221479da2c6c4fcf61da036633da04ce",
"md5": "db2ff39735557570a2ebe2613a8e7298",
"sha256": "1a8b69f854f083b235508e989476bb42e1cc5f37515f748cc8a9afd2991e0368"
},
"downloads": -1,
"filename": "zmesh-1.8.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "db2ff39735557570a2ebe2613a8e7298",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.8",
"size": 1826894,
"upload_time": "2024-09-19T22:44:06",
"upload_time_iso_8601": "2024-09-19T22:44:06.036288Z",
"url": "https://files.pythonhosted.org/packages/0c/47/86755361ba0c7b83aed2cdbe6e2d221479da2c6c4fcf61da036633da04ce/zmesh-1.8.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "42a22f4628621060cbc79a14b5ea987e0e91a8a1a54d0ab587330029f5561932",
"md5": "93d809f261d74dda8862cd388364f932",
"sha256": "f0bee3c29718a8e4d1a6cfba9cfc37913349946ce12ea456b78e34013782501c"
},
"downloads": -1,
"filename": "zmesh-1.8.0-cp312-cp312-win_amd64.whl",
"has_sig": false,
"md5_digest": "93d809f261d74dda8862cd388364f932",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.8",
"size": 157321,
"upload_time": "2024-09-19T22:44:07",
"upload_time_iso_8601": "2024-09-19T22:44:07.633972Z",
"url": "https://files.pythonhosted.org/packages/42/a2/2f4628621060cbc79a14b5ea987e0e91a8a1a54d0ab587330029f5561932/zmesh-1.8.0-cp312-cp312-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "4eab47cb9817c040b0089ed2cb75ae66588d645b35ae2d5685add44397788d91",
"md5": "e26396dc127c51f6a7643de4c2700d77",
"sha256": "c948938fa47ed1e0a807120b9ca63ce17fd1404a85c445d293ea1fd61124bb16"
},
"downloads": -1,
"filename": "zmesh-1.8.0-cp38-cp38-macosx_11_0_universal2.whl",
"has_sig": false,
"md5_digest": "e26396dc127c51f6a7643de4c2700d77",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8",
"size": 331275,
"upload_time": "2024-09-19T22:44:08",
"upload_time_iso_8601": "2024-09-19T22:44:08.660489Z",
"url": "https://files.pythonhosted.org/packages/4e/ab/47cb9817c040b0089ed2cb75ae66588d645b35ae2d5685add44397788d91/zmesh-1.8.0-cp38-cp38-macosx_11_0_universal2.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "35b64da47f8238499efedfd6ce465792fe2354aa9b21a8ad8b180c668f66055c",
"md5": "5f02fce5cd658a4907b138afee1fdecf",
"sha256": "c960fbda9ff9f5e0ac54a3c83ea5981eb530060535bc45380a20de3a45199ea8"
},
"downloads": -1,
"filename": "zmesh-1.8.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "5f02fce5cd658a4907b138afee1fdecf",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8",
"size": 1809936,
"upload_time": "2024-09-19T22:44:10",
"upload_time_iso_8601": "2024-09-19T22:44:10.042843Z",
"url": "https://files.pythonhosted.org/packages/35/b6/4da47f8238499efedfd6ce465792fe2354aa9b21a8ad8b180c668f66055c/zmesh-1.8.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "4f3f8c13bd268a8a4035cf6431ef74c603340143b4fa8079ef5d6e4a8a07304b",
"md5": "970c8f08c672d61152a9e1655a7858a8",
"sha256": "42c64b40240324b6de5ac34d8d65a206df1751592935973b71b901c677d2d3d6"
},
"downloads": -1,
"filename": "zmesh-1.8.0-cp38-cp38-win_amd64.whl",
"has_sig": false,
"md5_digest": "970c8f08c672d61152a9e1655a7858a8",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8",
"size": 160865,
"upload_time": "2024-09-19T22:44:11",
"upload_time_iso_8601": "2024-09-19T22:44:11.423506Z",
"url": "https://files.pythonhosted.org/packages/4f/3f/8c13bd268a8a4035cf6431ef74c603340143b4fa8079ef5d6e4a8a07304b/zmesh-1.8.0-cp38-cp38-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "a8cad57f037132e8a0f6d64dc05f8455bb7fd50460e27c765eb208267f251f85",
"md5": "ee2f10c53df3f70bcd644f5d5f5c07e2",
"sha256": "038b5f5b0ccdf73a56f40878047e4e6fbde7a817e5b446d3896bb6c9ffb81df8"
},
"downloads": -1,
"filename": "zmesh-1.8.0-cp39-cp39-macosx_10_9_universal2.whl",
"has_sig": false,
"md5_digest": "ee2f10c53df3f70bcd644f5d5f5c07e2",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.8",
"size": 376187,
"upload_time": "2024-09-19T22:44:13",
"upload_time_iso_8601": "2024-09-19T22:44:13.169508Z",
"url": "https://files.pythonhosted.org/packages/a8/ca/d57f037132e8a0f6d64dc05f8455bb7fd50460e27c765eb208267f251f85/zmesh-1.8.0-cp39-cp39-macosx_10_9_universal2.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "7049f3e914b9c4fcd6d16711a1df7804905d79a5160dd5452bdbfa8844fd3b42",
"md5": "24fab3eef193a23e3c65105b4b25db66",
"sha256": "0ea5e63cffb348649cc342574dc3b65dd19378b807ed0562bfa8ed4ea29a9553"
},
"downloads": -1,
"filename": "zmesh-1.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "24fab3eef193a23e3c65105b4b25db66",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.8",
"size": 1797738,
"upload_time": "2024-09-19T22:44:14",
"upload_time_iso_8601": "2024-09-19T22:44:14.509919Z",
"url": "https://files.pythonhosted.org/packages/70/49/f3e914b9c4fcd6d16711a1df7804905d79a5160dd5452bdbfa8844fd3b42/zmesh-1.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "e80de9af5a02944c1d8bdc8e5efb0ae08abb69ed015ca667f0914f03a2229829",
"md5": "37a4ae0146c96d7b87b37299378d9bfc",
"sha256": "3ed992a733e298c3421b72bfde1fcc9fb77be2d76865401aac3d82a66bad525a"
},
"downloads": -1,
"filename": "zmesh-1.8.0-cp39-cp39-win_amd64.whl",
"has_sig": false,
"md5_digest": "37a4ae0146c96d7b87b37299378d9bfc",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.8",
"size": 160007,
"upload_time": "2024-09-19T22:44:16",
"upload_time_iso_8601": "2024-09-19T22:44:16.339113Z",
"url": "https://files.pythonhosted.org/packages/e8/0d/e9af5a02944c1d8bdc8e5efb0ae08abb69ed015ca667f0914f03a2229829/zmesh-1.8.0-cp39-cp39-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "63da87d51faee9b9e3298cf78df843eee5fa8fb155c3e09edfaa167b439ec916",
"md5": "04ee88a17481d10d90e09993d6a0643d",
"sha256": "5811f8794a14ce1d8796758408a64ad2c2c752bace0574d0195f4f43e741ba38"
},
"downloads": -1,
"filename": "zmesh-1.8.0.tar.gz",
"has_sig": false,
"md5_digest": "04ee88a17481d10d90e09993d6a0643d",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8",
"size": 263271,
"upload_time": "2024-09-19T22:44:18",
"upload_time_iso_8601": "2024-09-19T22:44:18.286017Z",
"url": "https://files.pythonhosted.org/packages/63/da/87d51faee9b9e3298cf78df843eee5fa8fb155c3e09edfaa167b439ec916/zmesh-1.8.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-09-19 22:44:18",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "seung-lab",
"github_project": "zmesh",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"requirements": [],
"tox": true,
"lcname": "zmesh"
}