{ "info": { "author": "lucas bourneuf", "author_email": "lucas.bourneuf@openmailbox.org", "bugtrack_url": null, "classifiers": [ "Development Status :: 2 - Pre-Alpha", "Intended Audience :: Science/Research", "License :: OSI Approved :: GNU General Public License (GPL)", "Natural Language :: English", "Programming Language :: C", "Programming Language :: Python :: 3", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "# gerobust \u2014 Robust Geometry\nPython extension of the C implementation of robust and quick incircles tests,\nproduced by [Janathan Richard Shewchuk](https://www.cs.cmu.edu/~quake/robust.html) and explained in its paper *Robust Adaptive Floating-Point Geometric Predicates*.\n\n## usage example\n(see more in [tests](test/))\n\n from gerobust.predicates import clockwise, counter_clockwise, incircle\n\n triangle = (0, 0), (0, 1), (1, 0)\n\n print(clockwise(*triangle)) # True\n print(counter_clockwise.fast(*triangle)) # False\n print(incircle(*triangle, (1, 1))) # False\n print(incircle(*triangle, (1, 1), strict=False)) # True\n\n\n## installation\n\n pip install gerobust\n\n### Tests\n\n git clone git@github.com:Aluriak/gerobust.git\n cd gerobust\n make tests\n\n## links\n[github](http://github.com/aluriak/gerobust) and [pypi](http://pypi.python.org/pypi/gerobust)\n\n\n## Floating-point and compiler\nThe technics used in the C code needs the compiler to work with the\nIEEE 754 floating-point standard.\n\nBy looking about it in the web, i found [the gcc wiki](https://gcc.gnu.org/wiki/FloatingPointMath)\nthat seems to get its full support (without micro optimization that could kill the C implementation)\nwith the `-frounding-math -fsignaling-nans` options or the `#pragma STDC FENV ACCESS ON` pragma.\n\nThe former [is used](gerobust/build_geolib.py#L33). I however expect that only gcc is handled with this library. IEEE 754 compliancy through a standard way should be a short-term goal.\n\n## Contributions\nPatches as PR and ideas as issues are welcome.\n\nFew ways to improve this lib :\n\n- more geometric applications of the global method, for a more complete library\n- compatibility with others compiler/OS\n- unit test showing the (\u00ac)robustness of functions\n- general improvements over the python codebase (organization, style, efficiency, doc)\n\n\n## Bibliography\nAbstract and citation reproduced below.\n\n Robust Adaptive Floating-Point Geometric Predicates\n\n Jonathan Richard Shewchuk\n School of Computer Science\n Carnegie Mellon University\n Pittsburgh, Pennsylvania 15213\n\n Fast C implementations of four geometric predicates, the 2D and 3D orientation\n and incircle tests, are publicly available. Their inputs are ordinary single\n or double precision floating-point numbers. They owe their speed to two\n features. First, they employ new fast algorithms for arbitrary precision\n arithmetic that have a strong advantage over other software techniques in\n computations that manipulate values of extended but small precision. Second,\n they are adaptive; their running time depends on the degree of uncertainty of\n the result, and is usually small. These algorithms work on computers whose\n floating-point arithmetic uses radix two and exact rounding, including machines\n that comply with the IEEE 754 floating-point standard. Timings of the\n predicates, in isolation and embedded in 2D and 3D Delaunay triangulation\n programs, verify their effectiveness.\n\n\n Proceedings of the Twelfth Annual Symposium on Computational Geometry\n (Philadelphia, Pennsylvania), pages 141-150, ACM, May 1996. PostScript (310k).\n\n\n Paper available through the URL\n http://www.cs.berkeley.edu/~jrs/papers/robust-predicates.ps\n\n\n For additional details and associated software, see the Web page\n http://www.cs.cmu.edu/~quake/robust.html", "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/aluriak/gerobust", "keywords": "C function robust geometry", "license": "", "maintainer": "", "maintainer_email": "", "name": "gerobust", "package_url": "https://pypi.org/project/gerobust/", "platform": "", "project_url": "https://pypi.org/project/gerobust/", "project_urls": { "Homepage": "https://github.com/aluriak/gerobust" }, "release_url": "https://pypi.org/project/gerobust/0.4.1/", "requires_dist": null, "requires_python": "", "summary": "Extension in C for incircles tests (2D/3D)", "version": "0.4.1" }, "last_serial": 5855733, "releases": { "0.1.2": [ { "comment_text": "", "digests": { "md5": "aad5de309616a76bd8d5e3e8a2fdee83", "sha256": "55ce08db9bc04dfdfeb3e7855142dcfc4577349c2a4c8092410e58bfd78e099e" }, "downloads": -1, "filename": "gerobust-0.1.2.tar.gz", "has_sig": false, "md5_digest": "aad5de309616a76bd8d5e3e8a2fdee83", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 41269, "upload_time": "2017-04-07T21:21:25", "url": "https://files.pythonhosted.org/packages/a0/62/ca605bed24ab896b625aafd8eaa507870d364e39efa0e486c10f7bebd60d/gerobust-0.1.2.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "fffc99ae39ebb95b91790e1a5b803881", "sha256": "5f97cb469bfc5314ac79ee3f57780575a19b660086bc7eb2585426b34f1854cf" }, "downloads": -1, "filename": "gerobust-0.3.0.tar.gz", "has_sig": false, "md5_digest": "fffc99ae39ebb95b91790e1a5b803881", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 43454, "upload_time": "2017-04-14T18:53:17", "url": "https://files.pythonhosted.org/packages/2f/22/a23549c235e2da12bb924e0f34d323acd846d49b36401cfcfc325015f9cf/gerobust-0.3.0.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "2d58bbac2e1c840951b5a0bd22e5b886", "sha256": "b8b7a92d4f1e49cd935beb4eea9fa7fa8331b46bdb13a22f521bee355300978e" }, "downloads": -1, "filename": "gerobust-0.4.0.tar.gz", "has_sig": false, "md5_digest": "2d58bbac2e1c840951b5a0bd22e5b886", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 43731, "upload_time": "2017-04-14T19:41:02", "url": "https://files.pythonhosted.org/packages/c2/3d/25bdb1ca88546f3bae247ba6a1a6336d773a78e58e6ad8285700170b2270/gerobust-0.4.0.tar.gz" } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "cd9649bbd7b45518c5eee77d79ebe87f", "sha256": "615d146d58d82fd9c92e37f84838ebba5dd1fbd265a01c9c2e522c89537f0328" }, "downloads": -1, "filename": "gerobust-0.4.1.tar.gz", "has_sig": false, "md5_digest": "cd9649bbd7b45518c5eee77d79ebe87f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 44468, "upload_time": "2019-09-19T11:36:58", "url": "https://files.pythonhosted.org/packages/21/06/d97f6ef06b3b37c88d283443f876a7e4be50639e4c64feac87a229b029e5/gerobust-0.4.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "cd9649bbd7b45518c5eee77d79ebe87f", "sha256": "615d146d58d82fd9c92e37f84838ebba5dd1fbd265a01c9c2e522c89537f0328" }, "downloads": -1, "filename": "gerobust-0.4.1.tar.gz", "has_sig": false, "md5_digest": "cd9649bbd7b45518c5eee77d79ebe87f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 44468, "upload_time": "2019-09-19T11:36:58", "url": "https://files.pythonhosted.org/packages/21/06/d97f6ef06b3b37c88d283443f876a7e4be50639e4c64feac87a229b029e5/gerobust-0.4.1.tar.gz" } ] }