{ "info": { "author": "Prasanth Nair", "author_email": "prasanthhn@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 6 - Mature", "Intended Audience :: Science/Research", "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: Implementation :: CPython", "Topic :: Scientific/Engineering", "Topic :: Scientific/Engineering :: Astronomy" ], "description": "Angles\r\n======\r\n\r\n.. _TPM: http://www.sal.wisc.edu/~jwp/astro/tpm/tpm.html\r\n.. _Jeffrey W. Percival: http://www.sal.wisc.edu/~jwp/\r\n.. _pip: http://pypi.python.org/pypi/pip\r\n.. _easy_install: packages.python.org/distribute/easy_install.html\r\n\r\nThe Angles module defines several classes for representing angles, and positions\r\non a sphere. It also has several functions for performing common operations\r\non angles, such as unit conversion, normalization, creating string\r\nrepresentations and others.\r\n\r\nThe position of M100 reported by SIMBAD is \"12 22 54.899 +15 49 20.57\". We can\r\neasily parse these coordinates as follows:\r\n\r\n.. code-block:: python\r\n\r\n >>> from __future__ import print_function \r\n >>> from angles import AngularPosition\r\n\r\n >>> a = AngularPosition.from_hd(\"12 22 54.899 +15 49 20.57\")\r\n >>> a.alpha\r\n 3.24157813039\r\n >>> a.delta\r\n 0.276152636198\r\n\r\n >>> print(a.alpha)\r\n +12HH 22MM 54.899SS\r\n >>> print(a.delta)\r\n +15DD 49MM 20.570SS\r\n\r\n >>> a.alpha.hms.hms\r\n (1, 12, 22, 54.899)\r\n >>> a.delta.dms.dms\r\n (1, 15, 49, 20.57)\r\n >>> a.alpha.dms.dms\r\n (1, 185, 43, 43.485)\r\n >>> a.delta.hms.hms\r\n (1, 1, 3, 17.371)\r\n\r\n >>> a.alpha.r, a.alpha.d, a.alpha.h, a.alpha.arcs\r\n (3.2415781303913653, 185.72874583333328, 12.381916388888886, 668623.4849999998)\r\n >>> a.delta.r, a.delta.d, a.delta.h, a.delta.arcs\r\n (0.27615263619797403, 15.822380555555556, 1.0548253703703705, 56960.57)\r\n\r\n\r\nInstallation\r\n------------\r\n\r\nUse `pip`_ or `easy_install`_::\r\n\r\n $ pip install angles\r\n\r\nor,\r\n\r\n::\r\n\r\n $ easy_install angles\r\n\r\n\r\nTests are in the file ``test_angles.py``.\r\n\r\nExamples\r\n--------\r\n\r\nSome examples are given below. For more details see docstrings of functions and\r\nclasses.\r\n\r\nUnit conversion\r\n~~~~~~~~~~~~~~~\r\n\r\nConvert between radians, degrees, hours and arc-seconds.\r\n\r\n.. code-block:: python\r\n\r\n >>> import math\r\n >>> from angles import r2d, r2arcs, h2r, h2d, d2arcs\r\n\r\n >>> r2d(math.pi)\r\n 180.0\r\n >>> r2arcs(math.pi)\r\n 648000.0\r\n >>> h2r(12.0)\r\n 3.141592653589793\r\n >>> h2d(12.0)\r\n 180.0\r\n >>> d2arcs(1.0)\r\n 3600.0\r\n\r\nNormalizing angles\r\n~~~~~~~~~~~~~~~~~~\r\n\r\nNormalize value between two limits using ``normalize``.\r\n\r\n.. code-block:: python\r\n\r\n >>> from angles import normalize\r\n\r\n >>> normalize(-180, -180, 180)\r\n -180.0\r\n >>> normalize(180, -180, 180)\r\n -180.0\r\n >>> normalize(180, -180, 180, b=True)\r\n 180.0\r\n >>> normalize(181,-180,180)\r\n -179.0\r\n >>> normalize(181, -180, 180, b=True)\r\n 179.0\r\n >>> normalize(-180,0,360)\r\n 180.0\r\n >>> normalize(36,0,24)\r\n 12.0\r\n >>> normalize(368.5,-180,180)\r\n 8.5\r\n >>> normalize(-100, -90, 90)\r\n 80.0\r\n >>> normalize(-100, -90, 90, b=True)\r\n -80.0\r\n >>> normalize(100, -90, 90, b=True)\r\n 80.0\r\n >>> normalize(181, -90, 90, b=True)\r\n -1.0\r\n >>> normalize(270, -90, 90, b=True)\r\n -90.0\r\n >>> normalize(271, -90, 90, b=True)\r\n -89.0\r\n\r\nNormalizing angles on a sphere\r\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\r\n\r\nSimplify point on sphere to simplest representation using ``normalize_sphere``.\r\n\r\n.. code-block:: python\r\n\r\n >>> from angles import normalize_sphere\r\n\r\n >>> normalize_sphere(180, 91)\r\n (0.0, 89.0000000000001)\r\n\r\n >>> normalize_sphere(180, -91)\r\n (0.0, -89.0000000000001)\r\n\r\n >>> normalize_sphere(0, 91)\r\n (180.0, 89.0000000000001)\r\n\r\n >>> normalize_sphere(0, -91)\r\n (180.0, -89.0000000000001)\r\n\r\n >>> normalize_sphere(120, 280)\r\n (119.99999999999999, -80.00000000000003)\r\n\r\n >>> normalize_sphere(375, 45) # 25 hours ,45 degrees\r\n (14.999999999999966, 44.99999999999999)\r\n\r\n >>> normalize_sphere(-375, -45)\r\n (345.00000000000006, -44.99999999999999)\r\n\r\nSexagesimal representation\r\n~~~~~~~~~~~~~~~~~~~~~~~~~~\r\n\r\nConvert decimal value into sexagesimal representation.\r\n\r\n.. code-block:: python\r\n\r\n >>> from angles import deci2sexa\r\n\r\n >>> deci2sexa(-11.2345678)\r\n (-1, 11, 14, 4.444)\r\n >>> deci2sexa(-11.2345678, pre=5)\r\n (-1, 11, 14, 4.44408)\r\n >>> deci2sexa(-11.2345678, pre=4)\r\n (-1, 11, 14, 4.4441)\r\n >>> deci2sexa(-11.2345678, pre=4, trunc=True)\r\n (-1, 11, 14, 4.444)\r\n\r\n >>> deci2sexa(-11.2345678, pre=1)\r\n (-1, 11, 14, 4.4)\r\n >>> deci2sexa(-11.2345678, pre=0)\r\n (-1, 11, 14, 4.0)\r\n >>> deci2sexa(-11.2345678, pre=-1)\r\n (-1, 11, 14, 0.0)\r\n\r\n >>> x = 23+59/60.0+59.99999/3600.0\r\n \r\n >>> deci2sexa(x, pre=3, lower=0, upper=24)\r\n (1, 24, 0, 0.0)\r\n >>> deci2sexa(x, pre=3, lower=0, upper=24, upper_trim=True)\r\n (1, 0, 0, 0.0)\r\n \r\n >>> deci2sexa(x, pre=5, lower=0, upper=24, upper_trim=True)\r\n (1, 23, 59, 59.99999)\r\n\r\nFormatting angles\r\n~~~~~~~~~~~~~~~~~\r\n\r\nFormat an angle into various string representations using ``fmt_angle``.\r\n\r\n.. code-block:: python\r\n\r\n >>> from angles import fmt_angle\r\n\r\n >>> fmt_angle(12.348978659, pre=4, trunc=True)\r\n '+12 20 56.3231'\r\n >>> fmt_angle(12.348978659, pre=5)\r\n '+12 20 56.32317'\r\n >>> fmt_angle(12.348978659, s1='HH ', s2='MM ', s3='SS', pre=5)\r\n '+12HH 20MM 56.32317SS'\r\n\r\n >>> x = 23+59/60.0+59.99999/3600.0\r\n >>> fmt_angle(x)\r\n '+24 00 00.000'\r\n >>> fmt_angle(x, lower=0, upper=24, upper_trim=True)\r\n '+00 00 00.000'\r\n >>> fmt_angle(x, pre=5)\r\n '+23 59 59.99999'\r\n >>> fmt_angle(-x, lower=0, upper=24, upper_trim=True)\r\n '+00 00 00.000'\r\n >>> fmt_angle(-x)\r\n '-24 00 00.000'\r\n\r\n\r\nParsing sexagesimal strings\r\n~~~~~~~~~~~~~~~~~~~~~~~~~~~\r\n\r\nParse a sexagesimal number from a string using ``phmsdms``.\r\n\r\n.. code-block:: python\r\n\r\n >>> from angles import phmsdms\r\n\r\n >>> phmsdms(\"12\") == {\r\n ... 'parts': [12.0, None, None],\r\n ... 'sign': 1,\r\n ... 'units': 'degrees',\r\n ... 'vals': [12.0, 0.0, 0.0]\r\n ... }\r\n True\r\n\r\n >>> phmsdms(\"12h\") == {\r\n ... 'parts': [12.0, None, None],\r\n ... 'sign': 1,\r\n ... 'units': 'hours',\r\n ... 'vals': [12.0, 0.0, 0.0]\r\n ... }\r\n True\r\n\r\n >>> phmsdms(\"12d13m14.56\") == {\r\n ... 'parts': [12.0, 13.0, 14.56],\r\n ... 'sign': 1,\r\n ... 'units': 'degrees',\r\n ... 'vals': [12.0, 13.0, 14.56]\r\n ... }\r\n True\r\n\r\n >>> phmsdms(\"12d14.56ss\") == {\r\n ... 'parts': [12.0, None, 14.56],\r\n ... 'sign': 1,\r\n ... 'units': 'degrees',\r\n ... 'vals': [12.0, 0.0, 14.56]\r\n ... }\r\n True\r\n\r\n >>> phmsdms(\"14.56ss\") == {\r\n ... 'parts': [None, None, 14.56],\r\n ... 'sign': 1,\r\n ... 'units': 'degrees',\r\n ... 'vals': [0.0, 0.0, 14.56]\r\n ... }\r\n True\r\n\r\n >>> phmsdms(\"12h13m12.4s\") == {\r\n ... 'parts': [12.0, 13.0, 12.4],\r\n ... 'sign': 1,\r\n ... 'units': 'hours',\r\n ... 'vals': [12.0, 13.0, 12.4]\r\n ... }\r\n True\r\n\r\n >>> phmsdms(\"12:13:12.4s\") == {\r\n ... 'parts': [12.0, 13.0, 12.4],\r\n ... 'sign': 1,\r\n ... 'units': 'degrees',\r\n ... 'vals': [12.0, 13.0, 12.4]\r\n ... }\r\n True\r\n\r\n\r\nParse string containing angular position\r\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\r\n\r\nParse coordinates of a point on sphere using ``pposition``.\r\n\r\n.. code-block:: python\r\n\r\n >>> from angles import pposition\r\n\r\n >>> ra, de = pposition(\"12 22 54.899 +15 49 20.57\")\r\n >>> ra\r\n 12.38191638888889\r\n >>> de\r\n 15.822380555555556\r\n\r\n >>> pposition(\"12 22 54.899 +15 49 20.57\", details=True) # doctest: +SKIP\r\n {'y': 15.822380555555556, \r\n 'x': 12.38191638888889, \r\n 'numvals': 6, \r\n 'raw_x': {\r\n 'vals': [12.0, 22.0, 54.899],\r\n 'units': 'degrees', \r\n 'parts': [12.0, 22.0, 54.899], \r\n 'sign': 1\r\n }, \r\n 'raw_y': {\r\n 'vals': [15.0, 49.0, 20.57], \r\n 'units': 'degrees', \r\n 'parts': [15.0, 49.0, 20.57], \r\n 'sign': 1\r\n }\r\n }\r\n\r\nSeparation angle along a great circle\r\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\r\n\r\nFind angular separation along a great circle using ``sep``. This function\r\nuses vectors to find the angle of separation.\r\n\r\n.. code-block:: python\r\n\r\n >>> from angles import r2d, d2r, sep\r\n\r\n >>> r2d(sep(0, 0, 0, d2r(90.0)))\r\n 90.0\r\n >>> r2d(sep(0, d2r(45.0), 0, d2r(90.0)))\r\n 45.00000000000001\r\n >>> r2d(sep(0, d2r(-45.0), 0, d2r(90.0)))\r\n 135.0\r\n\r\n >>> r2d(sep(0, d2r(-90.0), 0, d2r(90.0)))\r\n 180.0\r\n >>> r2d(sep(d2r(45.0), d2r(-90.0), d2r(45.0), d2r(90.0)))\r\n 180.0\r\n >>> r2d(sep(0, 0, d2r(90.0), 0))\r\n 90.0\r\n\r\n >>> r2d(sep(0, d2r(45.0), d2r(90.0), d2r(45.0)))\r\n 60.00000000000001\r\n >>> import math\r\n >>> 90.0 * math.cos(d2r(45.0)) # Distance along latitude circle.\r\n 63.63961030678928\r\n\r\nBearing between two points\r\n~~~~~~~~~~~~~~~~~~~~~~~~~~\r\n\r\nFind bearing of one point with respect to another using ``bear``. Like ``sep``\r\nthis function uses vectors.\r\n\r\n.. code-block:: python\r\n\r\n >>> from angles import bear, r2d, d2r\r\n >>> bear(0, 0, 0, -d2r(90.0))\r\n 3.141592653589793\r\n >>> bear(0, -d2r(90.0), 0, 0)\r\n 0.0\r\n >>> bear(0, -d2r(45.0), 0, 0)\r\n 0.0\r\n >>> bear(0, -d2r(89.678), 0, 0)\r\n 0.0\r\n\r\n >>> r2d(bear(d2r(45.0), d2r(45.0), d2r(46.0), d2r(45.0)))\r\n 89.64644212193384\r\n\r\n >>> r2d(bear(d2r(45.0), d2r(45.0), d2r(44.0), d2r(45.0)))\r\n -89.64644212193421\r\n\r\n\r\nAngle class\r\n~~~~~~~~~~~\r\n\r\nClass for representing an angle, conversion between different \r\nunits, generating string representations.\r\n\r\n.. code-block:: python\r\n\r\n >>> from __future__ import print_function\r\n >>> from angles import Angle\r\n\r\n >>> a = Angle(sg=\"12h34m16.592849219\")\r\n >>> a.r, a.d, a.h, a.arcs # doctest: +NORMALIZE_WHITESPACE\r\n (3.291152306055805, 188.56913687174583, 12.571275791449722, 678848.892738285)\r\n\r\n >>> a.hms.sign, a.hms.hh, a.hms.mm, a.hms.ss\r\n (1, 12, 34, 16.593)\r\n >>> a.hms.hms\r\n (1, 12, 34, 16.593)\r\n >>> a.h\r\n 12.571275791449722\r\n\r\n >>> a.dms.sign, a.dms.dd, a.dms.mm, a.dms.ss\r\n (1, 188, 34, 8.893)\r\n >>> a.dms.dms\r\n (1, 188, 34, 8.893)\r\n >>> a.d\r\n 188.56913687174583\r\n\r\n >>> print(a.ounit)\r\n hours\r\n >>> print(a)\r\n +12 34 16.593\r\n >>> a.pre, a.trunc\r\n (3, False)\r\n >>> a.pre = 4\r\n >>> print(a)\r\n +12 34 16.5928\r\n >>> a.pre = 3\r\n >>> a.trunc = True\r\n >>> print(a)\r\n +12 34 16.592\r\n\r\n >>> a.ounit = \"degrees\"\r\n >>> print(a)\r\n +188 34 08.892\r\n >>> a.ounit = \"radians\"\r\n >>> print(a) # doctest: +SKIP\r\n 3.29115230606\r\n\r\n >>> a.ounit = \"degrees\"\r\n >>> a.s1 = \"DD \"\r\n >>> a.s2 = \"MM \"\r\n >>> a.s3 = \"SS\"\r\n >>> print(a)\r\n +188DD 34MM 08.892SS\r\n\r\n >>> a = Angle(r=10)\r\n >>> a.d, a.h, a.r, a.arcs, a.ounit # doctest: +NORMALIZE_WHITESPACE\r\n (572.9577951308232, 38.197186342054884, 10, 2062648.0624709637, 'radians')\r\n\r\n >>> a.d = 10\r\n >>> a.d, a.h, a.r, a.arcs, a.ounit # doctest: +NORMALIZE_WHITESPACE\r\n (10.0, 0.6666666666666666, 0.17453292519943295, 36000.0, 'radians')\r\n\r\n >>> a.dms.mm = 60\r\n >>> a.d, a.h, a.r, a.arcs, a.ounit # doctest: +NORMALIZE_WHITESPACE\r\n (11.0, 0.7333333333333333, 0.19198621771937624, 39600.0, 'radians')\r\n\r\n >>> a.dms.dms = (1, 12, 10, 5.234)\r\n >>> a.d, a.h, a.r, a.arcs, a.ounit # doctest: +NORMALIZE_WHITESPACE\r\n (12.168120555555557, 0.8112080370370371, 0.21237376747404604,\r\n 43805.234000000004, 'radians')\r\n\r\n >>> a.hms.hms = (1, 1, 1, 1)\r\n >>> a.d, a.h, a.r, a.arcs, a.ounit # doctest: +NORMALIZE_WHITESPACE\r\n (15.254166666666668, 1.0169444444444444, 0.2662354329813017,\r\n 54915.00000000001, 'radians')\r\n\r\n >>> print(a) # doctest: +SKIP\r\n 0.266235432981\r\n >>> a.ounit = 'hours'\r\n >>> print(a)\r\n +01 01 01.000\r\n >>> a.ounit = 'degrees'\r\n >>> print(a)\r\n +15 15 15.000\r\n\r\n\r\nClass for longitudinal angles\r\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\r\n\r\nA subclass of ``Angle`` that is normalized to the range ``[0, 24)``, i.e., a\r\nRight Ascension like angle. The ``ounit`` attribute is always \"hours\".\r\n\r\n.. code-block:: python\r\n\r\n >>> from __future__ import print_function\r\n >>> from angles import AlphaAngle\r\n \r\n >>> a = AlphaAngle(d=180.5)\r\n >>> print(a)\r\n +12HH 02MM 00.000SS\r\n >>> a = AlphaAngle(h=12.0)\r\n >>> print(a)\r\n +12HH 00MM 00.000SS\r\n >>> a = AlphaAngle(h=-12.0)\r\n\r\n >>> a = AlphaAngle(\"12h14m23.4s\")\r\n >>> print(a)\r\n +12HH 14MM 23.400SS\r\n >>> a.r, a.d, a.h, a.arcs\r\n (3.204380873430289, 183.5975, 12.239833333333333, 660951.0)\r\n\r\n >>> a = AlphaAngle(h=12.54678345)\r\n >>> a.hms.hms\r\n (1, 12, 32, 48.42)\r\n >>> a.hms.sign, a.hms.hh, a.hms.mm, a.hms.ss\r\n (1, 12, 32, 48.42)\r\n >>> print(a)\r\n +12HH 32MM 48.420SS\r\n >>> a.pre = 5\r\n >>> a.hms.hms\r\n (1, 12, 32, 48.42042)\r\n >>> print(a)\r\n +12HH 32MM 48.42042SS\r\n\r\n >>> a.s1 = \" : \"\r\n >>> a.s2 = \" : \"\r\n >>> a.s3 = \"\"\r\n >>> print(a)\r\n +12 : 32 : 48.42042\r\n\r\n >>> a.pre = 3\r\n >>> a.dms.dms\r\n (1, 188, 12, 6.306)\r\n\r\n >>> a = AlphaAngle(h=25.0)\r\n >>> print(a)\r\n +01HH 00MM 00.000SS\r\n >>> a = AlphaAngle(h=-1.0)\r\n >>> print(a)\r\n +23HH 00MM 00.000SS\r\n\r\n >>> a.hms.hh = 23\r\n >>> a.hms.mm = 59\r\n >>> a.hms.ss = 59.99999\r\n >>> a.hms.hms\r\n (1, 0, 0, 0.0)\r\n >>> print(a)\r\n +00HH 00MM 00.000SS\r\n >>> a.pre = 5\r\n >>> a.hms.hms\r\n (1, 23, 59, 59.99999)\r\n >>> print(a)\r\n +23HH 59MM 59.99999SS\r\n\r\nClass for latitudinal angles\r\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~\r\n\r\nA subclass of ``Angle`` that is normalized to the range ``[-90, 90]``, i.e., a\r\nDeclination like angle. The ``ounit`` attribute is always \"degrees\".\r\n\r\n\r\n.. code-block:: python\r\n\r\n >>> from __future__ import print_function\r\n >>> from angles import DeltaAngle\r\n\r\n >>> a = DeltaAngle(d=-45.0)\r\n >>> print(a)\r\n -45DD 00MM 00.000SS\r\n >>> a = DeltaAngle(d=180.0)\r\n >>> print(a)\r\n +00DD 00MM 00.000SS\r\n >>> a = DeltaAngle(h=12.0)\r\n >>> print(a)\r\n +00DD 00MM 00.000SS\r\n >>> a = DeltaAngle(sg=\"91d\")\r\n >>> print(a)\r\n +89DD 00MM 00.000SS\r\n\r\n >>> a = DeltaAngle(\"12d23m14.2s\")\r\n >>> print(a)\r\n +12DD 23MM 14.200SS\r\n >>> a.r, a.d, a.h, a.arcs\r\n (0.2161987825813487, 12.387277777777777, 0.8258185185185185, 44594.2)\r\n\r\n >>> a = DeltaAngle(d=12.1987546)\r\n >>> a.dms.dms\r\n (1, 12, 11, 55.517)\r\n >>> a.pre = 5\r\n >>> a.dms.dms\r\n (1, 12, 11, 55.51656)\r\n >>> a.dms.dd, a.dms.mm, a.dms.ss\r\n (12, 11, 55.51656)\r\n >>> a.pre = 0\r\n >>> a.dms.dms\r\n (1, 12, 11, 56.0)\r\n\r\n >>> a = DeltaAngle(d=12.3459876)\r\n >>> a.s1 = \" : \"\r\n >>> a.s2 = \" : \"\r\n >>> a.s3 = \"\"\r\n >>> print(a)\r\n +12 : 20 : 45.555\r\n\r\n >>> a = DeltaAngle(d=-91.0)\r\n >>> print(a)\r\n -89DD 00MM 00.000SS\r\n >>> a = DeltaAngle(d=91.0)\r\n >>> print(a)\r\n +89DD 00MM 00.000SS\r\n\r\n >>> a.dms.sign = 1\r\n >>> a.dms.dd = 89\r\n >>> a.dms.mm = 59\r\n >>> a.dms.ss = 59.9999\r\n >>> a.pre = 3\r\n >>> print(a)\r\n +90DD 00MM 00.000SS\r\n >>> a.pre = 5\r\n >>> print(a)\r\n +89DD 59MM 59.99990SS\r\n\r\n >>> a.dms.dms = (1, 0, 0, 0.0)\r\n >>> a.dms.dd = 89\r\n >>> a.dms.mm = 60\r\n >>> a.dms.ss = 60\r\n >>> a.pre = 3\r\n >>> print(a)\r\n +89DD 59MM 00.000SS\r\n\r\nClass for points on a unit sphere\r\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\r\n\r\nA class for representing a point on a sphere. The input angle values are \r\nnormalized to get the simplest representation of the coordinates of the point.\r\n\r\n.. code-block:: python\r\n\r\n >>> from __future__ import print_function\r\n >>> from angles import AngularPosition, r2d\r\n\r\n >>> a = AngularPosition.from_hd(\"12 22 54.899 +15 49 20.57\")\r\n >>> print(a)\r\n +12HH 22MM 54.899SS +15DD 49MM 20.570SS\r\n >>> a = AngularPosition.from_hd(\"12dd 22 54.899 +15 49 20.57\")\r\n >>> print(a)\r\n +00HH 49MM 31.660SS +15DD 49MM 20.570SS\r\n >>> a = AngularPosition.from_hd(\"12d 22 54.899 +15 49 20.57\")\r\n >>> print(a)\r\n +00HH 49MM 31.660SS +15DD 49MM 20.570SS\r\n\r\n >>> a = AngularPosition(alpha=165, delta=-91) # alpha should flip by 180 degrees\r\n >>> round(a.alpha.d , 12), round(a.delta.d, 12)\r\n (345.0, -89.0)\r\n\r\n >>> a.delta.d = -91 # alpha should now do another 180 flip and come back to 165\r\n >>> round(a.alpha.d, 12), round(a.delta.d, 12)\r\n (165.0, -89.0)\r\n \r\n >>> a.delta.d = 89 # there should be no change in normalized angles\r\n >>> round(a.alpha.d, 12), round(a.delta.d, 12)\r\n (165.0, 89.0)\r\n \r\n >>> a.alpha.d = -180 # alpha should normalize to 180 delta shouldn't change\r\n >>> round(a.alpha.d, 12), round(a.delta.d, 12)\r\n (180.0, 89.0)\r\n\r\n >>> pos1 = AngularPosition(alpha=12.0, delta=90.0)\r\n >>> pos2 = AngularPosition(alpha=12.0, delta=0.0)\r\n >>> r2d(pos2.bear(pos1))\r\n 0.0\r\n >>> r2d(pos1.bear(pos2))\r\n 0.0\r\n >>> r2d(pos1.sep(pos2))\r\n 90.0\r\n >>> pos1.alpha.h = 0.0\r\n >>> pos2.alpha.h = 0.0\r\n >>> r2d(pos1.sep(pos2))\r\n 90.0\r\n >>> r2d(pos2.bear(pos1))\r\n 0.0\r\n >>> r2d(pos1.bear(pos2))\r\n 0.0\r\n\r\nCredits\r\n--------\r\n\r\nSome of the functions are adapted from the `TPM`_ C library by `Jeffrey\r\nW. Percival`_.\r\n\r\nLicense\r\n-------\r\n\r\nReleased under BSD; see LICENSE.txt.\r\n\r\nFor comments and suggestions, email to user `prasanthhn` in the `gmail.com`\r\ndomain.", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://github.com/phn/angles", "keywords": "", "license": "BSD", "maintainer": "", "maintainer_email": "", "name": "angles", "package_url": "https://pypi.org/project/angles/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/angles/", "project_urls": { "Download": "UNKNOWN", "Homepage": "http://github.com/phn/angles" }, "release_url": "https://pypi.org/project/angles/2.0/", "requires_dist": null, "requires_python": null, "summary": "Classes for representing angles, and positions on a unit sphere.", "version": "2.0" }, "last_serial": 1809225, "releases": { "1.0": [ { "comment_text": "", "digests": { "md5": "7e99bbe34778706384473b384497565a", "sha256": "85dea40028d2e78a22a37fcd650d7a98697e5a3dd378c7656543f06f864e4357" }, "downloads": -1, "filename": "angles-1.0.tar.gz", "has_sig": false, "md5_digest": "7e99bbe34778706384473b384497565a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17187, "upload_time": "2011-10-08T09:48:01", "url": "https://files.pythonhosted.org/packages/a8/a3/153905d086aa72b4ff53876836e71680fa7d79460ad1cc2d29dcc16a6b64/angles-1.0.tar.gz" } ], "1.1": [ { "comment_text": "", "digests": { "md5": "cf51a42d62c23a9562431f764193a1f5", "sha256": "5fba469f0aa9ae127d86fc9b002e5fdc3edc352dbbc25695aec79ddd2ea8995b" }, "downloads": -1, "filename": "angles-1.1.tar.gz", "has_sig": false, "md5_digest": "cf51a42d62c23a9562431f764193a1f5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18641, "upload_time": "2011-11-11T07:44:39", "url": "https://files.pythonhosted.org/packages/46/9f/0ac960b5abf3692a144844ea8a4ea1d659a57551b8da5bbc8e7637e1ee47/angles-1.1.tar.gz" } ], "2.0": [ { "comment_text": "", "digests": { "md5": "add19920bbb21ae98669ad444b52b416", "sha256": "7cd0b8c0b13065a98af80a30175470f55c5b09f4c33532729769d75c76e3198b" }, "downloads": -1, "filename": "angles-2.0.tar.gz", "has_sig": false, "md5_digest": "add19920bbb21ae98669ad444b52b416", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 30291, "upload_time": "2015-11-09T10:34:33", "url": "https://files.pythonhosted.org/packages/01/cf/b32482b388c87bc8d5f0fde72488005babbd286bbf9a249b92c9444f6596/angles-2.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "add19920bbb21ae98669ad444b52b416", "sha256": "7cd0b8c0b13065a98af80a30175470f55c5b09f4c33532729769d75c76e3198b" }, "downloads": -1, "filename": "angles-2.0.tar.gz", "has_sig": false, "md5_digest": "add19920bbb21ae98669ad444b52b416", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 30291, "upload_time": "2015-11-09T10:34:33", "url": "https://files.pythonhosted.org/packages/01/cf/b32482b388c87bc8d5f0fde72488005babbd286bbf9a249b92c9444f6596/angles-2.0.tar.gz" } ] }