{ "info": { "author": "Anthony Zhang (Uberi)", "author_email": "azhang9@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "Intended Audience :: Science/Research", "License :: OSI Approved :: BSD License", "Natural Language :: English", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.2", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3 :: Only", "Topic :: Scientific/Engineering :: Mathematics", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "anglr\n=====\n\n.. image:: https://img.shields.io/pypi/dm/anglr.svg\n :target: https://pypi.python.org/pypi/anglr/\n :alt: Downloads\n\n.. image:: https://img.shields.io/pypi/v/anglr.svg\n :target: https://pypi.python.org/pypi/anglr/\n :alt: Latest Version\n\n.. image:: https://img.shields.io/pypi/status/anglr.svg\n :target: https://pypi.python.org/pypi/anglr/\n :alt: Development Status\n\n.. image:: https://img.shields.io/pypi/pyversions/anglr.svg\n :target: https://pypi.python.org/pypi/anglr/\n :alt: Supported Python Versions\n\n.. image:: https://img.shields.io/pypi/l/anglr.svg\n :target: https://pypi.python.org/pypi/anglr/\n :alt: License\n\nPlanar angle mathematics library for Python.\n\nThis library contains many different functions for converting between units, comparing angles, and doing angle arithmetic.\n\nLinks:\n\n- `PyPI `__\n- `GitHub `__\n\nQuickstart: ``pip3 install anglr``.\n\nRationale\n---------\n\nConsider the following trivial angle comparison code:\n\n.. code:: python\n\n import math\n heading = get_compass_value() # angle in radians normalized to $[0, 2*pi)$\n if target - math.pi / 4 <= heading <= target + math.pi / 4:\n print(\"Facing the target\")\n else:\n print(\"Not facing the target\")\n\nAngle code is everywhere. The above is totally, utterly **wrong** (consider what happens when ``target`` is 0), yet this could easily be overlooked while writing and during code review.\n\nWith anglr, there is a better way:\n\n.. code:: python\n\n import math\n from anglr import Angle\n heading = Angle(get_compass_value())\n if heading.angle_between(target) <= math.pi / 4:\n print(\"Facing the target\")\n else:\n print(\"Not facing the target\")\n\nMuch better - this will now correctly take modular arithmetic into account when comparing angles.\n\nExamples\n--------\n\nAngle creation:\n\n.. code:: python\n\n from math import pi\n from anglr import Angle\n print(Angle())\n print(Angle(87 * pi / 2))\n print(Angle(pi / 2, \"radians\"))\n print(Angle(Angle(pi / 2, \"radians\"))) # same as above\n print(Angle(64.2, \"degrees\"))\n print(Angle(384.9, \"gradians\"))\n print(Angle(4.5, \"hours\"))\n print(Angle(203.8, \"arcminutes\"))\n print(Angle(42352.7, \"arcseconds\"))\n print(Angle((56, 32), \"vector\")) # angle in standard position - counterclockwise from positive X-axis\n\nAngle conversion:\n\n.. code:: python\n\n from anglr import Angle\n x = Angle(58.3)\n print([x], str(x), x.radians, x.degrees, x.gradians, x.hours, x.arcminutes, x.arcseconds, x.vector, x.x, x.y)\n print(complex(x))\n print(float(x))\n print(int(x))\n x.radians = pi / 2\n print(x.dump())\n x.degrees = 64.2\n print(x.dump())\n x.gradians = 384.9\n print(x.dump())\n x.hours = 4.5\n print(x.dump())\n x.arcminutes = 203.8\n print(x.dump())\n x.arcseconds = 42352.7\n print(x.dump())\n x.vector = (56, 32)\n print(x.dump())\n\nAngle arithmetic:\n\n.. code:: python\n\n from math import pi\n from anglr import Angle\n print(Angle(pi / 6) + Angle(2 * pi / 3))\n print(x * 2 + Angle(3 * pi / 4) / 4 + 5 * Angle(pi / 3))\n print(-abs(+Angle(pi)))\n print(round(Angle(-75.87)))\n print(Angle(-4.3) <= Angle(pi / 4) > Angle(0.118) == Angle(0.118))\n print(Angle(-870.3, \"gradians\").normalized())\n print(Angle(-870.3, \"gradians\").normalized(0)) # same as above\n print(Angle(-870.3, \"gradians\").normalized(0, 2 * pi)) # same as above\n print(Angle(-870.3, \"gradians\").normalized(-pi, pi))\n print(Angle(-870.3, \"gradians\").normalized(-pi, 0))\n print(Angle(1, \"degrees\").angle_between_clockwise(Angle(0, \"degrees\")))\n print(Angle(1, \"degrees\").angle_between(Angle(0, \"degrees\")))\n print(Angle(0, \"degrees\").angle_within(Angle(-45, \"degrees\"), Angle(45, \"degrees\")))\n print(Angle(-1, \"degrees\").angle_within(Angle(-1, \"degrees\"), Angle(1, \"degrees\"), strictly_within=True))\n print(Angle(-1, \"degrees\").angle_to(Angle(180, \"degrees\")))\n print(Angle(0, \"degrees\").angle_to(Angle(180, \"degrees\")))\n\nTo run all of the above as tests, simply run ``python3 tests.py`` in the project directory.\n\nInstalling\n----------\n\nThe easiest way to install this is using ``pip3 install anglr``.\n\nOtherwise, download the source distribution from `PyPI `__, and extract the archive.\n\nIn the folder, run ``python3 setup.py install``.\n\nRequirements\n------------\n\nThis library requires Python 3.2 or higher to run.\n\nAuthors\n-------\n\n::\n\n Uberi (Anthony Zhang)\n\nPlease report bugs and suggestions at the `issue tracker `__!\n\nLicense\n-------\n\nCopyright 2014-2015 `Anthony Zhang (Uberi) `__.\n\nThe source code is available online at `GitHub `__.\n\nThis program is made available under the 3-clause BSD license. See ``LICENSE.txt`` for more information.", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/Uberi/anglr#readme", "keywords": "angle angles radians unit convert", "license": "BSD", "maintainer": null, "maintainer_email": null, "name": "anglr", "package_url": "https://pypi.org/project/anglr/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/anglr/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://github.com/Uberi/anglr#readme" }, "release_url": "https://pypi.org/project/anglr/1.1.0/", "requires_dist": null, "requires_python": null, "summary": "Planar angle mathematics library for Python.", "version": "1.1.0" }, "last_serial": 1784621, "releases": { "1.0.0": [], "1.0.1": [ { "comment_text": "", "digests": { "md5": "dff2698d60c349bd1efce7ad0500bb0d", "sha256": "18c848b0a77f83dd301fb6b24c0952f73c469bbdea106aa5d0baed48f1b3ca94" }, "downloads": -1, "filename": "anglr-1.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "dff2698d60c349bd1efce7ad0500bb0d", "packagetype": "bdist_wheel", "python_version": "any", "requires_python": null, "size": 7204, "upload_time": "2015-03-23T04:33:18", "url": "https://files.pythonhosted.org/packages/5b/61/390e9061ce5fc9c2ef66d262b7372cd5e22ea9b04593611cda75829d6f1e/anglr-1.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "700a90b4116fbbcb5ffa063def7dbd2f", "sha256": "8195fa5b4496440131a8538c03ee69a01154b9ec64c7d15e242812338810d2a9" }, "downloads": -1, "filename": "anglr-1.0.1.tar.gz", "has_sig": false, "md5_digest": "700a90b4116fbbcb5ffa063def7dbd2f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6023, "upload_time": "2015-03-23T04:33:08", "url": "https://files.pythonhosted.org/packages/10/25/724bc863dc1041bc8d8acedaef01f53c2a9d60e089a8bd2278c70e8ab5f2/anglr-1.0.1.tar.gz" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "724fcced35c66934143864b0d98e07ce", "sha256": "ba65a6f9c76ff44fb3aa41bc7593c1a4ccd8d055caa9a1de58212fdd5e202dfb" }, "downloads": -1, "filename": "anglr-1.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "724fcced35c66934143864b0d98e07ce", "packagetype": "bdist_wheel", "python_version": "any", "requires_python": null, "size": 8286, "upload_time": "2015-03-27T01:31:04", "url": "https://files.pythonhosted.org/packages/a1/b4/d4244cd5697aad53c67c5b20e978eaf6b09f3b8014b60fb753422e13d23d/anglr-1.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4711a1509b9fb62a7863d0f62f246b25", "sha256": "176b8c9b8bf7a14cb562182a1854d2b4d141b9a80f36d8e1252494734770993b" }, "downloads": -1, "filename": "anglr-1.0.2.tar.gz", "has_sig": false, "md5_digest": "4711a1509b9fb62a7863d0f62f246b25", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6806, "upload_time": "2015-03-27T01:30:42", "url": "https://files.pythonhosted.org/packages/93/76/f44f3a6d9fb10acb2d9830b39175eee7e2639fdb638d9d57316bb61e39fd/anglr-1.0.2.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "f1ff1a3cbb891e41f6e631fa77f097ac", "sha256": "fc51780ad80515c8b3363f385594cbf260328c91ad534673a9bc2b1f18782b40" }, "downloads": -1, "filename": "anglr-1.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "f1ff1a3cbb891e41f6e631fa77f097ac", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 7908, "upload_time": "2015-10-24T21:19:50", "url": "https://files.pythonhosted.org/packages/6e/37/4a465512ad2d271a6f3cd0b3a293e565485effdac415162a751dbd593dd3/anglr-1.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d48ec77f763e2ede8ea3ecbc25e91df1", "sha256": "53d6df951e6ab63263c2baa2bf6570c70be11faa92c93cfac30ee9f003a093c5" }, "downloads": -1, "filename": "anglr-1.1.0.tar.gz", "has_sig": false, "md5_digest": "d48ec77f763e2ede8ea3ecbc25e91df1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6369, "upload_time": "2015-10-24T21:19:47", "url": "https://files.pythonhosted.org/packages/ce/d5/46446e2cff86e14c60cf2838a3178a453687ba1f8fd1987e64197354354d/anglr-1.1.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "f1ff1a3cbb891e41f6e631fa77f097ac", "sha256": "fc51780ad80515c8b3363f385594cbf260328c91ad534673a9bc2b1f18782b40" }, "downloads": -1, "filename": "anglr-1.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "f1ff1a3cbb891e41f6e631fa77f097ac", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 7908, "upload_time": "2015-10-24T21:19:50", "url": "https://files.pythonhosted.org/packages/6e/37/4a465512ad2d271a6f3cd0b3a293e565485effdac415162a751dbd593dd3/anglr-1.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d48ec77f763e2ede8ea3ecbc25e91df1", "sha256": "53d6df951e6ab63263c2baa2bf6570c70be11faa92c93cfac30ee9f003a093c5" }, "downloads": -1, "filename": "anglr-1.1.0.tar.gz", "has_sig": false, "md5_digest": "d48ec77f763e2ede8ea3ecbc25e91df1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6369, "upload_time": "2015-10-24T21:19:47", "url": "https://files.pythonhosted.org/packages/ce/d5/46446e2cff86e14c60cf2838a3178a453687ba1f8fd1987e64197354354d/anglr-1.1.0.tar.gz" } ] }