{ "info": { "author": "Nico Schl\u00f6mer", "author_email": "nico.schloemer@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Science/Research", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3", "Topic :: Scientific/Engineering", "Topic :: Utilities" ], "description": "

\n \"optimesh\"\n

Triangular mesh optimization.

\n

\n\n[![CircleCI](https://img.shields.io/circleci/project/github/nschloe/optimesh/master.svg?style=flat-square)](https://circleci.com/gh/nschloe/optimesh)\n[![codecov](https://img.shields.io/codecov/c/github/nschloe/optimesh.svg?style=flat-square)](https://codecov.io/gh/nschloe/optimesh)\n[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg?style=flat-square)](https://github.com/psf/black)\n[![smooth](https://img.shields.io/badge/smooth-operator-8209ba.svg?style=flat-square)](https://youtu.be/4TYv2PhG89A)\n[![PyPi Version](https://img.shields.io/pypi/v/optimesh.svg?style=flat-square)](https://pypi.org/project/optimesh)\n[![GitHub stars](https://img.shields.io/github/stars/nschloe/optimesh.svg?style=flat-square&logo=github&label=Stars&logoColor=white)](https://github.com/nschloe/optimesh)\n[![PyPi downloads](https://img.shields.io/pypi/dm/optimesh.svg?style=flat-square)](https://pypistats.org/packages/optimesh)\n\nSeveral mesh smoothing/optimization methods with one simple interface. optimesh\n\n * is fast,\n * preserves submeshes,\n * only works for triangular meshes, flat and on a surface, (for now; upvote [this\n issue](https://github.com/nschloe/optimesh/issues/17) if you're interested in\n tetrahedral mesh smoothing), and\n * supports all mesh formats that [meshio](https://github.com/nschloe/meshio) can\n handle.\n\nInstall with\n```\npip3 install optimesh --user\n```\nExample call:\n```\noptimesh in.e out.vtk\n```\nOutput:\n![terminal-screenshot](https://nschloe.github.io/optimesh/term-screenshot.png)\n\nThe left hand-side graph shows the distribution of angles (the grid line is at the\noptimal 60 degrees). The right hand-side graph shows the distribution of simplex\nquality, where quality is twice the ratio of circumcircle and incircle radius.\n\nAll command-line options are documented at\n```\noptimesh -h\n```\n\n![disk-step0](https://nschloe.github.io/optimesh/disk-step0.png)\n\nThe following examples show the various algorithms at work, all starting from the same\nrandomly generated disk mesh above. The cell coloring indicates quality; dark green is\nbad, yellow is good.\n\n\n#### CVT (centroidal Voronoi tesselation)\n\n![cvt-uniform-lloyd2](https://nschloe.github.io/optimesh/lloyd2.webp) |\n![cvt-uniform-qnb](https://nschloe.github.io/optimesh/cvt-uniform-qnb.webp) |\n![cvt-uniform-qnf](https://nschloe.github.io/optimesh/cvt-uniform-qnf.webp) |\n:------------------------:|:---------------------:|:----:|\nuniform-density relaxed [Lloyd's algorithm](https://en.wikipedia.org/wiki/Lloyd%27s_algorithm) (`--method lloyd --omega 2.0`) | uniform-density quasi-Newton iteration (block-diagonal Hessian, `--method cvt-uniform-qnb`) | uniform-density quasi-Newton iteration (default method, full Hessian, `--method cvt-uniform-qnf`) |\n\nCentroidal Voronoi tessellation smoothing ([Du et al.](#relevant-publications)) is one\nof the oldest and most reliable approaches. optimesh provides classical Lloyd smoothing\nas well as several variants that result in better meshes.\n\n\n#### CPT (centroidal patch tesselation)\n\n![cpt-cp](https://nschloe.github.io/optimesh/cpt-dp.png) |\n![cpt-uniform-fp](https://nschloe.github.io/optimesh/cpt-uniform-fp.webp) |\n![cpt-uniform-qn](https://nschloe.github.io/optimesh/cpt-uniform-qn.webp) |\n:-----------------------------------------------------------------------:|:-----------------------------------------------------------------:|:--------------------------------------------------------:|\ndensity-preserving linear solve ([Laplacian smoothing](https://en.wikipedia.org/wiki/Laplacian_smoothing), `--method cpt-dp`) | uniform-density fixed-point iteration (`--method cpt-uniform-fp`) | uniform-density quasi-Newton (`--method cpt-uniform-qn`) |\n\nA smoothing method suggested by [Chen and Holst](#relevant-publications), mimicking CVT\nbut much more easily implemented. The density-preserving variant leads to the exact same\nequation system as Laplacian smoothing, so CPT smoothing can be thought of as a\ngeneralization.\n\nThe uniform-density variants are implemented classically as a fixed-point iteration and\nas a quasi-Newton method. The latter typically converges faster.\n\n\n#### ODT (optimal Delaunay tesselation)\n\n![odt-dp-fp](https://nschloe.github.io/optimesh/odt-dp-fp.webp) |\n![odt-uniform-fp](https://nschloe.github.io/optimesh/odt-uniform-fp.webp) |\n![odt-uniform-bfgs](https://nschloe.github.io/optimesh/odt-uniform-bfgs.webp) |\n:--------------------------------------------------------------:|:-----------------------------------------------------------------:|:------------------------------------------------------------------:|\ndensity-preserving fixed-point iteration (`--method odt-dp-fp`) | uniform-density fixed-point iteration (`--method odt-uniform-fp`) | uniform-density BFGS (`--method odt-uniform-bfgs`) |\n\nOptimal Delaunay Triangulation (ODT) as suggested by [Chen and\nHolst](#relevant-publications). Typically superior to CPT, but also more expensive to\ncompute.\n\nImplemented once classically as a fixed-point iteration, once as a nonlinear\noptimization method. The latter typically leads to better results.\n\n\n### Surface mesh smoothing\n\noptimesh also supports optimization of triangular meshes on surfaces which are defined\nimplicitly by a level set function (e.g., spheres). You'll need to specify the function\nand its gradient, so you'll have to do it in Python:\n```python\nimport meshzoo\nimport optimesh\n\npoints, cells = meshzoo.tetra_sphere(20)\n\nclass Sphere:\n def f(self, x):\n return 1.0 - (x[0] ** 2 + x[1] ** 2 + x[2] ** 2)\n\n def grad(self, x):\n return -2 * x\n\n# You can use all methods in optimesh:\n# points, cells = optimesh.cpt.fixed_point_uniform(\n# points, cells = optimesh.odt.fixed_point_uniform(\npoints, cells = optimesh.cvt.quasi_newton_uniform_full(\n points, cells, 1.0e-2, 100, verbose=False,\n implicit_surface=Sphere(),\n # step_filename_format=\"out{:03d}.vtk\"\n)\n```\nThis code first generates a mediocre mesh on a sphere using\n[meshzoo](https://github.com/nschloe/meshzoo/),\n\n\n\nand then optimizes. Some results:\n\n![odt-dp-fp](https://nschloe.github.io/optimesh/sphere-cpt.webp) |\n![odt-uniform-fp](https://nschloe.github.io/optimesh/sphere-odt.webp) |\n![odt-uniform-bfgs](https://nschloe.github.io/optimesh/sphere-cvt.webp) |\n:------------:|:----------:|:---------------------------------:|\nCPT | ODT | CVT (full Hessian) |\n\n\n### Which method is best?\n\nFrom practical experiments, it seems that the CVT smoothing variants, e.g.,\n```\noptimesh in.vtk out.vtk -m cvt-uniform-qnf\n```\ngive very satisfactory results. (This is also the default method, so you don't need to\nspecify it explicitly.) Here is a comparison of all uniform-density methods applied to\nthe random circle mesh seen above:\n\n\n\n(Mesh quality is twice the ratio of incircle and circumcircle radius, with the maximum\nbeing 1.)\n\n\n### Access from Python\n\nAll optimesh functions can also be accessed from Python directly, for example:\n```python\nimport optimesh\n\nX, cells = optimesh.odt.fixed_point_uniform(X, cells, 1.0e-2, 100, verbose=False)\n```\n\n### Installation\n\noptimesh is [available from the Python Package\nIndex](https://pypi.org/project/optimesh/), so simply do\n```\npip3 install --upgrade --user optimesh\n```\nto install or upgrade.\n\n### Relevant publications\n\n * [Qiang Du, Vance Faber, and Max Gunzburger, _Centroidal Voronoi Tessellations: Applications and Algorithms_,\n SIAM Rev., 41(4), 1999, 637\u2013676.](https://doi.org/10.1137/S0036144599352836)\n\n * [Yang Liu et al., _On centroidal Voronoi tessellation\u2014Energy smoothness and fast computation_,\n ACM Transactions on Graphics, Volume 28, Issue 4, August 2009.](https://dl.acm.org/citation.cfm?id=1559758)\n\n * [Long Chen, Michael Holst, _Efficient mesh optimization schemes based on Optimal Delaunay Triangulations_,\n Comput. Methods Appl. Mech. Engrg. 200 (2011) 967\u2013984.](https://doi.org/10.1016/j.cma.2010.11.007)\n\n\n### Testing\n\nTo run the optimesh unit tests, check out this repository and type\n```\npytest\n```\n\n### License\n\noptimesh is published under the [MIT license](https://en.wikipedia.org/wiki/MIT_License).\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/nschloe/optimesh", "keywords": "", "license": "License :: OSI Approved :: MIT License", "maintainer": "", "maintainer_email": "", "name": "optimesh", "package_url": "https://pypi.org/project/optimesh/", "platform": "any", "project_url": "https://pypi.org/project/optimesh/", "project_urls": { "Homepage": "https://github.com/nschloe/optimesh" }, "release_url": "https://pypi.org/project/optimesh/0.6.0/", "requires_dist": [ "meshio", "meshplex (<0.12.0,>=0.11.2)", "numpy", "quadpy", "termplotlib", "matplotlib ; extra == 'all'", "matplotlib ; extra == 'png'" ], "requires_python": ">=3", "summary": "Mesh optimization/smoothing", "version": "0.6.0" }, "last_serial": 5986786, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "890267875893eb93a5ff26ea81dfda51", "sha256": "56b9b9a2439d4c6fc37d9f665311cb04e1681257e1296aa642c9551650f22676" }, "downloads": -1, "filename": "optimesh-0.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "890267875893eb93a5ff26ea81dfda51", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 11802, "upload_time": "2018-07-01T10:31:30", "url": "https://files.pythonhosted.org/packages/3d/6a/8a768c207620d6fa952ed655e6061195963721fe9221324ec95e876fa011/optimesh-0.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f0d1bc053a740e9b70abb2b327f24859", "sha256": "010d7a48689a3c625ba464d19ba928188a97aa2f0485dfebcc97c36bf8e55f6f" }, "downloads": -1, "filename": "optimesh-0.1.0.tar.gz", "has_sig": false, "md5_digest": "f0d1bc053a740e9b70abb2b327f24859", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10494, "upload_time": "2018-07-01T10:31:31", "url": "https://files.pythonhosted.org/packages/19/00/b5a50838172b6ec228c7d790854eefc1509c5d7d9967e8960e671baec082/optimesh-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "1623db21b5d1df41a4ff7adf335fd86a", "sha256": "8516536ad64d61de6398234fa2e666d73d18123e7b449d60803da52164511a6c" }, "downloads": -1, "filename": "optimesh-0.1.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "1623db21b5d1df41a4ff7adf335fd86a", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 12626, "upload_time": "2018-07-05T17:50:17", "url": "https://files.pythonhosted.org/packages/15/79/d7d28c4088f34bf4aad007c4c36d3ca8bc9f8cc37a1f5e65c969299b90b8/optimesh-0.1.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "701a6bdaba15a647555c72f95bc1ee1e", "sha256": "194e0156bcbcff6af6675d16a8894718cefc82e7a9ff096c37c771d2d7aad86b" }, "downloads": -1, "filename": "optimesh-0.1.1.tar.gz", "has_sig": false, "md5_digest": "701a6bdaba15a647555c72f95bc1ee1e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11640, "upload_time": "2018-07-05T17:50:19", "url": "https://files.pythonhosted.org/packages/2a/77/55201427c973e07d48beb2cb3bfe8ba74561fd0a651086366882bbdcb169/optimesh-0.1.1.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "8bec9c0b1c2aee3921df77e89266a9a9", "sha256": "49f8503ed61d19968af00584a8a7e78600a56c3f5b94c0dc5000bace35ede3b0" }, "downloads": -1, "filename": "optimesh-0.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "8bec9c0b1c2aee3921df77e89266a9a9", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 15075, "upload_time": "2018-07-13T21:57:17", "url": "https://files.pythonhosted.org/packages/04/a5/f687b7edce289b59b75ae4e01249d18efd2b189f59cfaeacbb913b314ad7/optimesh-0.2.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e8b4d57f9bcc955c1e238bc3a6ecfc0a", "sha256": "ff5ad158887b9a8ee46fe23e7843662edc8619c6a6588e59f4e07bf26929a0d0" }, "downloads": -1, "filename": "optimesh-0.2.0.tar.gz", "has_sig": false, "md5_digest": "e8b4d57f9bcc955c1e238bc3a6ecfc0a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13072, "upload_time": "2018-07-13T21:57:18", "url": "https://files.pythonhosted.org/packages/fd/b1/cf230f68dbc4cdd0c531a7bef827857be0d54af02b0cff54bd50fe95d6be/optimesh-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "07e8d35ffe9f4fe1454a61a58914a2f1", "sha256": "9a35a982ac7dbdae3e005365c136a011e97dc4fa26cae4e05ca29cbb74e06660" }, "downloads": -1, "filename": "optimesh-0.2.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "07e8d35ffe9f4fe1454a61a58914a2f1", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 15295, "upload_time": "2018-07-16T10:06:11", "url": "https://files.pythonhosted.org/packages/a9/42/69b0a94cebf61039d449e1b47edb15ce1a05e59ae80a7745e615bfc9b4ad/optimesh-0.2.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "bace06ba8ef40e9359896f54c1d0f825", "sha256": "1b1a474fc2566ad32336a432015afe47d52e90bbc94189f67e4d47bec95e983c" }, "downloads": -1, "filename": "optimesh-0.2.1.tar.gz", "has_sig": false, "md5_digest": "bace06ba8ef40e9359896f54c1d0f825", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13887, "upload_time": "2018-07-16T10:06:13", "url": "https://files.pythonhosted.org/packages/b5/a8/61ee54ce7eea337909f4698dae29739432e4c431281c9dd3ecef1df21da9/optimesh-0.2.1.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "17256f53c61ff70437c661386730d5e0", "sha256": "4419274e763cc185820b00be7b8782baba98eab005ea97a77f86e47ec954d798" }, "downloads": -1, "filename": "optimesh-0.3.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "17256f53c61ff70437c661386730d5e0", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 17215, "upload_time": "2018-08-03T08:03:53", "url": "https://files.pythonhosted.org/packages/d1/be/9f83bcc7ee993682ce081f77f828069a1f5b0bcf86762f26604a401a943f/optimesh-0.3.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "93c831a4df0ed1d02b41b5888ef4b05b", "sha256": "a450f42c9bbb5ee97a71d8f7381f792bd4a69179554d70b9a4a975d6f24913c1" }, "downloads": -1, "filename": "optimesh-0.3.0.tar.gz", "has_sig": false, "md5_digest": "93c831a4df0ed1d02b41b5888ef4b05b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15741, "upload_time": "2018-08-03T08:03:54", "url": "https://files.pythonhosted.org/packages/0b/ab/dcda576b6786e990ddccaabb5c48cb6626037f16832a0bf3b9fd4b741c72/optimesh-0.3.0.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "83e6d75de4ebf3182648b1048913ae30", "sha256": "4cd69efc510070a6853b050ab2a45d259a6726eee6ac9d2fb6e9eab726df897d" }, "downloads": -1, "filename": "optimesh-0.4.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "83e6d75de4ebf3182648b1048913ae30", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 24247, "upload_time": "2018-08-09T14:31:56", "url": "https://files.pythonhosted.org/packages/74/87/7cabc35eb8705711f44a85ca5d6df3bc7a7a271f6b7ac156eb5659d11ead/optimesh-0.4.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a048eac8879bb0a6ce35f186f4df5ce4", "sha256": "b0cf311009436fd70a61fbbf7c20a31e4921d11b9faa009406bac059eaecee94" }, "downloads": -1, "filename": "optimesh-0.4.0.tar.gz", "has_sig": false, "md5_digest": "a048eac8879bb0a6ce35f186f4df5ce4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19038, "upload_time": "2018-08-09T14:31:57", "url": "https://files.pythonhosted.org/packages/c3/7c/aff2019edeaeca7b486b5ce6c13b6f00973c531344710b244d9e82ddd2fe/optimesh-0.4.0.tar.gz" } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "645f0f2c08363cd5aa4e196ed36ef143", "sha256": "91e46be4d2ab30c2804e5e827ee92aab562c70076344b2bb09377042f08e2835" }, "downloads": -1, "filename": "optimesh-0.4.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "645f0f2c08363cd5aa4e196ed36ef143", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 24143, "upload_time": "2018-08-11T12:16:02", "url": "https://files.pythonhosted.org/packages/ed/86/d9ed09f868a6f80c95069262727637e46430e7e4a594b6aa1564eb931bfd/optimesh-0.4.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d97e91c61980ea1244b95eb237c5bccf", "sha256": "9fe6b9c51b9ca3c2ab7dbb23c25ea1ba0797a58d22a4ded9404f19695a93808d" }, "downloads": -1, "filename": "optimesh-0.4.1.tar.gz", "has_sig": false, "md5_digest": "d97e91c61980ea1244b95eb237c5bccf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19581, "upload_time": "2018-08-11T12:16:04", "url": "https://files.pythonhosted.org/packages/91/d4/f1b01024418bf6bb4577f97cee5de7a7446da906d29f42c17ec181a668a1/optimesh-0.4.1.tar.gz" } ], "0.4.2": [ { "comment_text": "", "digests": { "md5": "6490902dc7eea7c6c97af1e1c6ecc691", "sha256": "519e95c7ec3f139474e04b17cd3ebbdbf7a394bca6d632b9a6906594748f5309" }, "downloads": -1, "filename": "optimesh-0.4.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "6490902dc7eea7c6c97af1e1c6ecc691", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 21489, "upload_time": "2018-08-11T12:44:15", "url": "https://files.pythonhosted.org/packages/9b/8c/45623a0e81d4cf5d06a5ff25257f33de69f86831edbe84e21d1289c8cef1/optimesh-0.4.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c4dfd086bef6e3bac31bd45a74cf88ad", "sha256": "4e034c09e0c286a9aa265fa348d823dc3a16301930b9ff82b60cf61047811dc9" }, "downloads": -1, "filename": "optimesh-0.4.2.tar.gz", "has_sig": false, "md5_digest": "c4dfd086bef6e3bac31bd45a74cf88ad", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19290, "upload_time": "2018-08-11T12:44:16", "url": "https://files.pythonhosted.org/packages/fa/d3/062af95b551af7ed7a8ebd708b3505e05228b634ec7db1972f16a324a971/optimesh-0.4.2.tar.gz" } ], "0.4.3": [ { "comment_text": "", "digests": { "md5": "deb95d7ba40da1d689e4ad8081710cd6", "sha256": "5172e19d947688d073f89a6956c15250f62a6425bbb57371226b8ec38d7b2cc0" }, "downloads": -1, "filename": "optimesh-0.4.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "deb95d7ba40da1d689e4ad8081710cd6", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 21557, "upload_time": "2018-08-14T14:14:23", "url": "https://files.pythonhosted.org/packages/e3/53/62d1ef05f81cbf652316d7f5537c1b767029b02807d0e4c0bbe3986686c9/optimesh-0.4.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d36d2777163387e486e9e2913deccf49", "sha256": "460ea677282db7bc02ad7894e7b26a303e783491d645fb51b7e689000af69526" }, "downloads": -1, "filename": "optimesh-0.4.3.tar.gz", "has_sig": false, "md5_digest": "d36d2777163387e486e9e2913deccf49", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19380, "upload_time": "2018-08-14T14:14:27", "url": "https://files.pythonhosted.org/packages/50/75/c190359b496213dcbc53a62bb004cee38219bb72bcf21284f2d3842c3a5c/optimesh-0.4.3.tar.gz" } ], "0.4.4": [ { "comment_text": "", "digests": { "md5": "8a922fe794a5ee01f6ffc164f97d8fdb", "sha256": "0918ed5e0f665b051b52cef2bf392d824e9dbf2c19d87b6e7ee5460589690add" }, "downloads": -1, "filename": "optimesh-0.4.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "8a922fe794a5ee01f6ffc164f97d8fdb", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 22366, "upload_time": "2019-03-27T10:10:45", "url": "https://files.pythonhosted.org/packages/cd/dd/ee023ea35f61f3651883361675c9bc260f44dd11305d38c81b6f0375a860/optimesh-0.4.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6d137082a8664e386e40046be37c248d", "sha256": "625cac92531033b42d90b9b9eb1d282b1ee3cf9e5ca6e5c9a088f3ca0ed1ea63" }, "downloads": -1, "filename": "optimesh-0.4.4.tar.gz", "has_sig": false, "md5_digest": "6d137082a8664e386e40046be37c248d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21623, "upload_time": "2019-03-27T10:10:46", "url": "https://files.pythonhosted.org/packages/0f/c3/2905e973d05235086b4e4a5e56ee5af2c08b95d91a7371d86ded94604eb0/optimesh-0.4.4.tar.gz" } ], "0.4.5": [ { "comment_text": "", "digests": { "md5": "ab11a89874e6a027813f7555fc392bb8", "sha256": "073eddbcf1cc68cad643200f2e36dd855b69e654d99c8d62603fa8a8c4b50099" }, "downloads": -1, "filename": "optimesh-0.4.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "ab11a89874e6a027813f7555fc392bb8", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 23264, "upload_time": "2019-05-23T16:28:24", "url": "https://files.pythonhosted.org/packages/1e/a7/712516576bd3535cd41b078b5107c0a6cf68e581a84106ef62e4e74b0ada/optimesh-0.4.5-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4d234fa9aeacb9b14df9fc57becafae2", "sha256": "34bbb37c6a4fc50a66864996ca552d882542734efd17b6db2d72d93a43d37ba9" }, "downloads": -1, "filename": "optimesh-0.4.5.tar.gz", "has_sig": false, "md5_digest": "4d234fa9aeacb9b14df9fc57becafae2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22301, "upload_time": "2019-05-23T16:28:26", "url": "https://files.pythonhosted.org/packages/66/7a/8be8790e40e2e9a5276863ffb76ea658b0072dc5e26d95f8dbebfd74925f/optimesh-0.4.5.tar.gz" } ], "0.4.6": [ { "comment_text": "", "digests": { "md5": "fd1a8873ce812f373f52d13ec7fbdfde", "sha256": "2a57e2ec55761ce9d0292fb236e93a2771b7c8714f0e4babbc3fdbf5c1ef4dad" }, "downloads": -1, "filename": "optimesh-0.4.6-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "fd1a8873ce812f373f52d13ec7fbdfde", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 23462, "upload_time": "2019-05-27T22:27:03", "url": "https://files.pythonhosted.org/packages/f6/77/307c851bde148c6faf88f0f7e69f8457795f861c3279411fd72e77132e2e/optimesh-0.4.6-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "16dd62da881dbfdbc0803e6fec793ac6", "sha256": "d5ad831a3879246d011bb5445308dbd5a5d450a2d5fc41b596558a4bdbc774a3" }, "downloads": -1, "filename": "optimesh-0.4.6.tar.gz", "has_sig": false, "md5_digest": "16dd62da881dbfdbc0803e6fec793ac6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22831, "upload_time": "2019-05-27T22:27:05", "url": "https://files.pythonhosted.org/packages/6b/2c/aa2d1dd0e49a3d39568f4282efd6fe7fe1adbc80c42d7fc17dc53fb54c01/optimesh-0.4.6.tar.gz" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "330c4b136d703977b6d97b75431069bd", "sha256": "74e8cea397e4d45788062f2f3711f3973dd736b085481773d817dd5c4d4ec4e0" }, "downloads": -1, "filename": "optimesh-0.5.0-py3-none-any.whl", "has_sig": false, "md5_digest": "330c4b136d703977b6d97b75431069bd", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 28390, "upload_time": "2019-07-29T18:23:11", "url": "https://files.pythonhosted.org/packages/b3/ce/66e1a32a63f7729487142d5c2c0b9aa4ee50a7fd55028a576fe417fe67c6/optimesh-0.5.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6c08e4f625b960153a2a77d59ed3e4ff", "sha256": "7509ab6f8cea57e76965a96083f3feba8f6c166d8dfa38c3d85e577d3a2997f1" }, "downloads": -1, "filename": "optimesh-0.5.0.tar.gz", "has_sig": false, "md5_digest": "6c08e4f625b960153a2a77d59ed3e4ff", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 22097, "upload_time": "2019-07-29T18:23:13", "url": "https://files.pythonhosted.org/packages/ec/e0/c395fbb29b9cd08b9c2b37215d4d37b28ebc5dda41de70542144b704489a/optimesh-0.5.0.tar.gz" } ], "0.5.1": [ { "comment_text": "", "digests": { "md5": "2b1115c7f016c60f1c38db93eba03f7b", "sha256": "1b8e9a31a104bcb80fe12eff3febb9b0555104a96dc3aad63e2b9ebfd0ff95e0" }, "downloads": -1, "filename": "optimesh-0.5.1-py3-none-any.whl", "has_sig": false, "md5_digest": "2b1115c7f016c60f1c38db93eba03f7b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 22032, "upload_time": "2019-07-29T20:43:26", "url": "https://files.pythonhosted.org/packages/6b/b1/5a54c8b27bccbf30f29a9f8fccc25ddae653371cb055e8137e93abecf2ac/optimesh-0.5.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6bee614a8ccd44bb37b126ee4c060e8e", "sha256": "ac5846a95654ec0b9682fde0f0585233c9e29188461c7779e219d3292d1ee3ed" }, "downloads": -1, "filename": "optimesh-0.5.1.tar.gz", "has_sig": false, "md5_digest": "6bee614a8ccd44bb37b126ee4c060e8e", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 22083, "upload_time": "2019-07-29T20:43:27", "url": "https://files.pythonhosted.org/packages/ee/0d/2a4f71e1b2e0b2cb745e63bc9a0c585d524c450b2930a6551418ff00b639/optimesh-0.5.1.tar.gz" } ], "0.5.2": [ { "comment_text": "", "digests": { "md5": "2e77d1abb90195c93f1f1f005b6dc0af", "sha256": "cce9a72abd34bb9d37ee4e75c721719f384dfadbf2a99652aeda8d4e74a98880" }, "downloads": -1, "filename": "optimesh-0.5.2-py3-none-any.whl", "has_sig": false, "md5_digest": "2e77d1abb90195c93f1f1f005b6dc0af", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 21990, "upload_time": "2019-07-30T09:46:21", "url": "https://files.pythonhosted.org/packages/28/70/33d55240171e925408fd6c11d2aa5e13694dccdaac33e6a4153670f11a88/optimesh-0.5.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5c35236244a54e8174ced8d446bc268d", "sha256": "c0ffe7159bd426aa024d8c8b8c22ce0856f2919b4fb7112035e9aaec3d70b107" }, "downloads": -1, "filename": "optimesh-0.5.2.tar.gz", "has_sig": false, "md5_digest": "5c35236244a54e8174ced8d446bc268d", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 22058, "upload_time": "2019-07-30T09:46:22", "url": "https://files.pythonhosted.org/packages/d7/ed/67d2d8778f79e98d0fbf37e6f59faacca226503faf5dd126e736fe7b9d3c/optimesh-0.5.2.tar.gz" } ], "0.6.0": [ { "comment_text": "", "digests": { "md5": "04670f28e996d6238b039a0fa16d58a4", "sha256": "8d2b3810b60691ea7bdaf4657855ac044a72ad4c91f4655bbac4d04909d65402" }, "downloads": -1, "filename": "optimesh-0.6.0-py3-none-any.whl", "has_sig": false, "md5_digest": "04670f28e996d6238b039a0fa16d58a4", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 22650, "upload_time": "2019-10-16T23:00:23", "url": "https://files.pythonhosted.org/packages/dd/4c/df81b7a7dcaf40f92e9fc6f3d0dc033618d24dda40106be8883c5df6fff5/optimesh-0.6.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0c7bc8e2646cb0fb583720a771056ebc", "sha256": "4407a3aa7466ad1093583d9843b33cdcde122aa5e6175b08034656a8d6e595d5" }, "downloads": -1, "filename": "optimesh-0.6.0.tar.gz", "has_sig": false, "md5_digest": "0c7bc8e2646cb0fb583720a771056ebc", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 23223, "upload_time": "2019-10-16T23:00:26", "url": "https://files.pythonhosted.org/packages/56/d9/586d8815072fc7dc126cbd17f25aff331e8b4f3477eb809d804c1e5e4ce9/optimesh-0.6.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "04670f28e996d6238b039a0fa16d58a4", "sha256": "8d2b3810b60691ea7bdaf4657855ac044a72ad4c91f4655bbac4d04909d65402" }, "downloads": -1, "filename": "optimesh-0.6.0-py3-none-any.whl", "has_sig": false, "md5_digest": "04670f28e996d6238b039a0fa16d58a4", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 22650, "upload_time": "2019-10-16T23:00:23", "url": "https://files.pythonhosted.org/packages/dd/4c/df81b7a7dcaf40f92e9fc6f3d0dc033618d24dda40106be8883c5df6fff5/optimesh-0.6.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0c7bc8e2646cb0fb583720a771056ebc", "sha256": "4407a3aa7466ad1093583d9843b33cdcde122aa5e6175b08034656a8d6e595d5" }, "downloads": -1, "filename": "optimesh-0.6.0.tar.gz", "has_sig": false, "md5_digest": "0c7bc8e2646cb0fb583720a771056ebc", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 23223, "upload_time": "2019-10-16T23:00:26", "url": "https://files.pythonhosted.org/packages/56/d9/586d8815072fc7dc126cbd17f25aff331e8b4f3477eb809d804c1e5e4ce9/optimesh-0.6.0.tar.gz" } ] }