User documentation
==================
.. image:: https://readthedocs.org/projects/spherical-geometry/badge/?version=latest
:target: https://spherical-geometry.readthedocs.io/en/latest/?badge=latest
:alt: Documentation Status
.. image:: https://github.com/spacetelescope/spherical_geometry/actions/workflows/spherical_geometry.yml/badge.svg?branch=master
:target: https://github.com/spacetelescope/spherical_geometry/actions/workflows/spherical_geometry.yml
:alt: Spherical Geometry's Github Actions CI Status
.. image:: https://codecov.io/gh/spacetelescope/spherical_geometry/branch/master/graph/badge.svg
:target: https://codecov.io/gh/spacetelescope/spherical_geometry
:alt: Spherical Geometry's Coverage Status
.. image:: https://img.shields.io/pypi/v/spherical-geometry
:target: https://pypi.org/project/spherical-geometry/
:alt: PyPI
.. image:: https://zenodo.org/badge/20937470.svg
:target: https://zenodo.org/doi/10.5281/zenodo.10020243
:alt: 10.5281/zenodo.10020243
The ``spherical_geometry`` library is a Python package for handling spherical
polygons that represent arbitrary regions of the sky.
Installation
------------
On PyPI::
pip install spherical-geometry
On conda::
conda install -c conda-forge spherical-geometry
Requirements
------------
- Python 3.9 or later
- Numpy 1.23 or later
- astropy 5.0.4 or later
- qd-library 2.3.7 or later (optional: if not available, the
bundled version will be used). To force using the system-installed
version, build with ``USE_SYSTEM_QD=1 pip install .``.
Bundled qd-library
------------------
Origin: https://www.davidhbailey.com/dhbsoftware/qd-2.3.24.tar.gz
- A custom ``libqd/include/qd/qd_config.h`` is provided to circumvent the need
to run any configuration scripts. This generalized configuration may not be
optimized for your system.
- The ``spherical_geometry`` test suite fail when linked to a system-optimized
``qd`` library, because the tests are written for the general case.
Coordinate representation
-------------------------
Coordinates in world space are traditionally represented by right
ascension and declination (*ra* and *dec*), or longitude and latitude.
While these representations are convenient, they have discontinuities
at the poles, making operations on them trickier at arbitrary
locations on the sky sphere. Therefore, all internal operations of
this library are done in 3D vector space, where coordinates are
represented as (*x*, *y*, *z*) vectors. The ``spherical_geometry.vector`` module
contains functions to convert between (*ra*, *dec*) and (*x*, *y*,
*z*) representations.
While any (*x*, *y*, *z*) triple represents a vector and therefore a
location on the sky sphere, a distinction must be made between
normalized coordinates that fall exactly on the unit sphere, and
unnormalized coordinates which do not. A normalized coordinate is
defined as a vector whose length is 1, i.e.:
.. math::
\sqrt{x^2 + y^2 + z^2} = 1
To prevent unnecessary recomputation, many methods in this library
assume that the vectors passed in are already normalized. If this is
not the case, ``spherical_geometry.vector.normalize_vector`` can be used to
normalize an array of vectors.
When not working in Cartesian vectors, the library allows the user to
work in either degrees or radians. All methods that require or return
an angular value have a ``degrees`` keyword argument. When
``degrees`` is ``True``, these measurements are in degrees, otherwise
they are in radians.
Spherical polygons
------------------
Spherical polygons are arbitrary areas on the sky sphere enclosed by
great circle arcs. They are represented by the
``~spherical_geometry.polygon.SphericalPolygon`` class.
Representation
``````````````
The points defining the polygon are available from the
``~polygon.SphericalPolygon.points`` property. It is a Nx3 array where
each row is an (*x*, *y*, *z*) vector, normalized. The polygon points
are explicitly closed, i.e., the first and last points are the same.
Where is the inside?
^^^^^^^^^^^^^^^^^^^^
The edges of a polygon serve to separate the “inside” from the
“outside” area. On a traditional 2D planar surface, the “inside” is
defined as the finite area and the “outside” is the infinite area.
However, since the surface of a sphere is cyclical, i.e., it wraps
around on itself, the a spherical polygon actually defines two finite
areas. To specify which should be considered the “inside” vs. the
“outside”, the definition of the polygon also has an “inside point”
which is just any point that should be considered inside of the
polygon.
In the following image, the inside point (marked with the red dot)
declares that the area of the polygon is the green region, and not the
white region.
.. image:: inside.png
The inside point of the the polygon can be obtained from the
``~polygon.SphericalPolygon.inside`` property.
What is the orientation?
^^^^^^^^^^^^^^^^^^^^^^^^
The correctness of several of the algorithms using polygons depends on
a consistent orientation of the points defining it. That is, the points
should have a clockwise order. When creating a new spherical polygon,
the order of the points defining a polygon will be reversed if they are
not in clockwise order. The method ``SphericalPolygon.is_clockwise`` is
used to est if the points are in clockwise order. It takes two
successive sides and computes the normal vector to the sides. If the
normal vector points inward towards the center of the sphere, the two
sides are counter clockwise. If the normal vector points outward, the
two sides are clockwise. The code determines the orientation by
computing the triple product of the two sides with the vertex of the
the two sides. Summing the triple product over all the sides gives the
predominant orientation of the points in the polygon.
Disjoint Polygons
^^^^^^^^^^^^^^^^^
If a polygon is the result of the intersection of polygons, it may be
disjoint. Disjoint polygons are represented as a list of spherical
polygons. The library handles the details of this internally. However,
the user must be aware that several of the properties of polygons are
generators and return the value for a single polygon at a time. To
access all the values of a proeprty, either use a for loop, or coerce
the property to a list. The properties which are generators are:
- ``SphericalPolygon.points``: The points defining each polygon
- ``SphericalPolygon.inside`` : The inside point of each polygon
If the intersection of two polygons generates disjoint polygons the
code computes a new interior point for the disjoint polygons.
Creating spherical polygons
```````````````````````````
``SphericalPolygon`` objects have 5 different constructors:
- ``SphericalPolygon``: Takes an array of (*x*, *y*, *z*) points, or a
list of disjoint ``SphericalPolygon`` instances.
- ``SphericalPolygon.from_radec``: Takes an array of (*ra*, *dec*)
points and an inside point.
- ``SphericalPolygon.from_cone``: Creates a polygon from a cone on the
sky shere. Takes (*ra*, *dec*, *radius*).
- ``SphericalPolygon.from_wcs``: Creates a polygon from the footprint
of a FITS image using its WCS header keywords. Takes a FITS
filename or a ``astropy.io.fits.Header`` object.
- ``SphericalPolygon.convex_hull``: Creates a polygon that is the
convex hull of a list of points.
Operations on Spherical Polygons
````````````````````````````````
Once one has a ``SphericalPolygon`` object, there are a number of
operations available:
- ``~SphericalPolygon.contains_point``: Determines if the given point
is inside the polygon.
- ``~SphericalPolygon.intersects_poly``: Determines if one polygon
intersects with another.
- ``~SphericalPolygon.area``: Determine the area of a polygon.
- ``~SphericalPolygon.union`` and ``~SphericalPolygon.multi_union``:
Return a new polygon that is the union of two or more polygons.
- ``~SphericalPolygon.intersection`` and
``~SphericalPolygon.multi_intersection``: Return a new polygon that
is the intersection of two or more polygons.
- ``~SphericalPolygon.overlap``: Determine how much a given polygon
overlaps another.
- ``~SphericalPolygon.to_radec``: Convert (*x*, *y*, *z*) points in the
polygon to (*ra*, *dec*) points.
- ``~SphericalPolygon.draw``: Plots the polygon using matplotlib’s
Basemap toolkit. This feature is rather bare and intended
primarily for debugging purposes.
Great circle arcs
-----------------
As seen above, great circle arcs are used to define the edges of the
polygon. The ``spherical_geometry.great_circle_arc`` module contains a number of
functions that are useful for dealing with them.
- ``length``: Returns the angular distance between two points on the sphere.
- ``intersection``: Returns the intersection point between two great
circle arcs.
- ``intersects``: Determines if two great circle arcs intersect.
- ``intersects_point``: Determines if a point is along the great circle
arc.
- ``angle``: Calculate the angle between two great circle arcs.
- ``midpoint``: Calculate the midpoint along a great circle arc.
Raw data
{
"_id": null,
"home_page": null,
"name": "spherical-geometry",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.9",
"maintainer_email": null,
"keywords": "astronomy, astrophysics, space, science, spherical, geometry",
"author": null,
"author_email": "STScI <help@stsci.edu>",
"download_url": "https://files.pythonhosted.org/packages/ca/e5/e4619b3aaa0b318c30a05f512aa679e5ac92c14df99d73e61a0376890107/spherical_geometry-1.3.2.tar.gz",
"platform": null,
"description": "User documentation\n==================\n\n.. image:: https://readthedocs.org/projects/spherical-geometry/badge/?version=latest\n :target: https://spherical-geometry.readthedocs.io/en/latest/?badge=latest\n :alt: Documentation Status\n\n.. image:: https://github.com/spacetelescope/spherical_geometry/actions/workflows/spherical_geometry.yml/badge.svg?branch=master\n :target: https://github.com/spacetelescope/spherical_geometry/actions/workflows/spherical_geometry.yml\n :alt: Spherical Geometry's Github Actions CI Status\n\n.. image:: https://codecov.io/gh/spacetelescope/spherical_geometry/branch/master/graph/badge.svg\n :target: https://codecov.io/gh/spacetelescope/spherical_geometry\n :alt: Spherical Geometry's Coverage Status\n\n.. image:: https://img.shields.io/pypi/v/spherical-geometry\n :target: https://pypi.org/project/spherical-geometry/\n :alt: PyPI\n\n.. image:: https://zenodo.org/badge/20937470.svg\n :target: https://zenodo.org/doi/10.5281/zenodo.10020243\n :alt: 10.5281/zenodo.10020243\n\nThe ``spherical_geometry`` library is a Python package for handling spherical\npolygons that represent arbitrary regions of the sky.\n\nInstallation\n------------\n\nOn PyPI::\n\n pip install spherical-geometry\n\nOn conda::\n\n conda install -c conda-forge spherical-geometry\n\nRequirements\n------------\n\n- Python 3.9 or later\n\n- Numpy 1.23 or later\n\n- astropy 5.0.4 or later\n\n- qd-library 2.3.7 or later (optional: if not available, the\n bundled version will be used). To force using the system-installed\n version, build with ``USE_SYSTEM_QD=1 pip install .``.\n\nBundled qd-library\n------------------\n\nOrigin: https://www.davidhbailey.com/dhbsoftware/qd-2.3.24.tar.gz\n\n- A custom ``libqd/include/qd/qd_config.h`` is provided to circumvent the need\n to run any configuration scripts. This generalized configuration may not be\n optimized for your system.\n\n- The ``spherical_geometry`` test suite fail when linked to a system-optimized\n ``qd`` library, because the tests are written for the general case.\n\nCoordinate representation\n-------------------------\n\nCoordinates in world space are traditionally represented by right\nascension and declination (*ra* and *dec*), or longitude and latitude.\nWhile these representations are convenient, they have discontinuities\nat the poles, making operations on them trickier at arbitrary\nlocations on the sky sphere. Therefore, all internal operations of\nthis library are done in 3D vector space, where coordinates are\nrepresented as (*x*, *y*, *z*) vectors. The ``spherical_geometry.vector`` module\ncontains functions to convert between (*ra*, *dec*) and (*x*, *y*,\n*z*) representations.\n\nWhile any (*x*, *y*, *z*) triple represents a vector and therefore a\nlocation on the sky sphere, a distinction must be made between\nnormalized coordinates that fall exactly on the unit sphere, and\nunnormalized coordinates which do not. A normalized coordinate is\ndefined as a vector whose length is 1, i.e.:\n\n.. math::\n\n \\sqrt{x^2 + y^2 + z^2} = 1\n\nTo prevent unnecessary recomputation, many methods in this library\nassume that the vectors passed in are already normalized. If this is\nnot the case, ``spherical_geometry.vector.normalize_vector`` can be used to\nnormalize an array of vectors.\n\nWhen not working in Cartesian vectors, the library allows the user to\nwork in either degrees or radians. All methods that require or return\nan angular value have a ``degrees`` keyword argument. When\n``degrees`` is ``True``, these measurements are in degrees, otherwise\nthey are in radians.\n\nSpherical polygons\n------------------\n\nSpherical polygons are arbitrary areas on the sky sphere enclosed by\ngreat circle arcs. They are represented by the\n``~spherical_geometry.polygon.SphericalPolygon`` class.\n\nRepresentation\n``````````````\n\nThe points defining the polygon are available from the\n``~polygon.SphericalPolygon.points`` property. It is a Nx3 array where\neach row is an (*x*, *y*, *z*) vector, normalized. The polygon points\nare explicitly closed, i.e., the first and last points are the same.\n\nWhere is the inside?\n^^^^^^^^^^^^^^^^^^^^\n\nThe edges of a polygon serve to separate the \u201cinside\u201d from the\n\u201coutside\u201d area. On a traditional 2D planar surface, the \u201cinside\u201d is\ndefined as the finite area and the \u201coutside\u201d is the infinite area.\nHowever, since the surface of a sphere is cyclical, i.e., it wraps\naround on itself, the a spherical polygon actually defines two finite\nareas. To specify which should be considered the \u201cinside\u201d vs. the\n\u201coutside\u201d, the definition of the polygon also has an \u201cinside point\u201d\nwhich is just any point that should be considered inside of the\npolygon.\n\nIn the following image, the inside point (marked with the red dot)\ndeclares that the area of the polygon is the green region, and not the\nwhite region.\n\n.. image:: inside.png\n\nThe inside point of the the polygon can be obtained from the\n``~polygon.SphericalPolygon.inside`` property.\n\nWhat is the orientation?\n^^^^^^^^^^^^^^^^^^^^^^^^\n\nThe correctness of several of the algorithms using polygons depends on\na consistent orientation of the points defining it. That is, the points\nshould have a clockwise order. When creating a new spherical polygon,\nthe order of the points defining a polygon will be reversed if they are\nnot in clockwise order. The method ``SphericalPolygon.is_clockwise`` is\nused to est if the points are in clockwise order. It takes two\nsuccessive sides and computes the normal vector to the sides. If the\nnormal vector points inward towards the center of the sphere, the two\nsides are counter clockwise. If the normal vector points outward, the\ntwo sides are clockwise. The code determines the orientation by\ncomputing the triple product of the two sides with the vertex of the\nthe two sides. Summing the triple product over all the sides gives the\npredominant orientation of the points in the polygon.\n\n\nDisjoint Polygons\n^^^^^^^^^^^^^^^^^\n\nIf a polygon is the result of the intersection of polygons, it may be\ndisjoint. Disjoint polygons are represented as a list of spherical\npolygons. The library handles the details of this internally. However,\nthe user must be aware that several of the properties of polygons are\ngenerators and return the value for a single polygon at a time. To\naccess all the values of a proeprty, either use a for loop, or coerce\nthe property to a list. The properties which are generators are:\n\n - ``SphericalPolygon.points``: The points defining each polygon\n\n - ``SphericalPolygon.inside`` : The inside point of each polygon\n\n\nIf the intersection of two polygons generates disjoint polygons the\ncode computes a new interior point for the disjoint polygons.\n\nCreating spherical polygons\n```````````````````````````\n\n``SphericalPolygon`` objects have 5 different constructors:\n\n - ``SphericalPolygon``: Takes an array of (*x*, *y*, *z*) points, or a\n list of disjoint ``SphericalPolygon`` instances.\n\n - ``SphericalPolygon.from_radec``: Takes an array of (*ra*, *dec*)\n points and an inside point.\n\n - ``SphericalPolygon.from_cone``: Creates a polygon from a cone on the\n sky shere. Takes (*ra*, *dec*, *radius*).\n\n - ``SphericalPolygon.from_wcs``: Creates a polygon from the footprint\n of a FITS image using its WCS header keywords. Takes a FITS\n filename or a ``astropy.io.fits.Header`` object.\n\n - ``SphericalPolygon.convex_hull``: Creates a polygon that is the\n convex hull of a list of points.\n\nOperations on Spherical Polygons\n````````````````````````````````\n\nOnce one has a ``SphericalPolygon`` object, there are a number of\noperations available:\n\n - ``~SphericalPolygon.contains_point``: Determines if the given point\n is inside the polygon.\n\n - ``~SphericalPolygon.intersects_poly``: Determines if one polygon\n intersects with another.\n\n - ``~SphericalPolygon.area``: Determine the area of a polygon.\n\n - ``~SphericalPolygon.union`` and ``~SphericalPolygon.multi_union``:\n Return a new polygon that is the union of two or more polygons.\n\n - ``~SphericalPolygon.intersection`` and\n ``~SphericalPolygon.multi_intersection``: Return a new polygon that\n is the intersection of two or more polygons.\n\n - ``~SphericalPolygon.overlap``: Determine how much a given polygon\n overlaps another.\n\n - ``~SphericalPolygon.to_radec``: Convert (*x*, *y*, *z*) points in the\n polygon to (*ra*, *dec*) points.\n\n - ``~SphericalPolygon.draw``: Plots the polygon using matplotlib\u2019s\n Basemap toolkit. This feature is rather bare and intended\n primarily for debugging purposes.\n\nGreat circle arcs\n-----------------\n\nAs seen above, great circle arcs are used to define the edges of the\npolygon. The ``spherical_geometry.great_circle_arc`` module contains a number of\nfunctions that are useful for dealing with them.\n\n- ``length``: Returns the angular distance between two points on the sphere.\n\n- ``intersection``: Returns the intersection point between two great\n circle arcs.\n\n- ``intersects``: Determines if two great circle arcs intersect.\n\n- ``intersects_point``: Determines if a point is along the great circle\n arc.\n\n- ``angle``: Calculate the angle between two great circle arcs.\n\n- ``midpoint``: Calculate the midpoint along a great circle arc.\n",
"bugtrack_url": null,
"license": "BSD-3-Clause",
"summary": "Python based tools for spherical geometry",
"version": "1.3.2",
"project_urls": {
"bug": "https://github.com/spacetelescope/spherical_geometry/issues/",
"documentation": "http://spherical-geometry.readthedocs.io/",
"help": "https://hsthelp.stsci.edu",
"source": "https://github.com/spacetelescope/spherical_geometry/"
},
"split_keywords": [
"astronomy",
" astrophysics",
" space",
" science",
" spherical",
" geometry"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "5a37e52237d48cdf4466cc685bf83c4cbdc2df02b0f4386aa9bb37290423efff",
"md5": "be188f73212a6d9724ee45a60a2ddbc7",
"sha256": "06cb0965aed16f4247dee04df5a177cff24076b40bf752fc3c6885d2f0006185"
},
"downloads": -1,
"filename": "spherical_geometry-1.3.2-cp310-cp310-macosx_10_9_x86_64.whl",
"has_sig": false,
"md5_digest": "be188f73212a6d9724ee45a60a2ddbc7",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.9",
"size": 7749916,
"upload_time": "2024-06-13T11:20:09",
"upload_time_iso_8601": "2024-06-13T11:20:09.120334Z",
"url": "https://files.pythonhosted.org/packages/5a/37/e52237d48cdf4466cc685bf83c4cbdc2df02b0f4386aa9bb37290423efff/spherical_geometry-1.3.2-cp310-cp310-macosx_10_9_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "bf3b6587b4ba284ce4da31caf3452aa905b485c3d91650e0e9b258a80e5b5656",
"md5": "3ca4c6ffcf021c03c66764610eb16d99",
"sha256": "b87668f88f0a16cff4061f8d4d6099b800316888e27824db3d1892fb4d0b97fb"
},
"downloads": -1,
"filename": "spherical_geometry-1.3.2-cp310-cp310-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "3ca4c6ffcf021c03c66764610eb16d99",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.9",
"size": 7731218,
"upload_time": "2024-06-13T11:20:12",
"upload_time_iso_8601": "2024-06-13T11:20:12.157896Z",
"url": "https://files.pythonhosted.org/packages/bf/3b/6587b4ba284ce4da31caf3452aa905b485c3d91650e0e9b258a80e5b5656/spherical_geometry-1.3.2-cp310-cp310-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "cd930af19edd6d5cd7bcb90eb949240e52ce9ad29c93c1a5db38468046f3ecd1",
"md5": "3d2c3832d18ee4581cce9cb6bfe316a5",
"sha256": "005e2e529ed6c21609c77fed787efbd5731fe0f86d729fb6ed9f1ac9ae7ab2b7"
},
"downloads": -1,
"filename": "spherical_geometry-1.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "3d2c3832d18ee4581cce9cb6bfe316a5",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.9",
"size": 8562322,
"upload_time": "2024-06-13T11:20:14",
"upload_time_iso_8601": "2024-06-13T11:20:14.584390Z",
"url": "https://files.pythonhosted.org/packages/cd/93/0af19edd6d5cd7bcb90eb949240e52ce9ad29c93c1a5db38468046f3ecd1/spherical_geometry-1.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "d9ee5032360d26bc6a03c696daa24b54f94eedf961989983de2d283af74dfaf9",
"md5": "7a19c6590d955293bb6f33196114021b",
"sha256": "0c09f8caba44873398dbe1a5dfbefd9d70e17140125593ec9ec4eef753f2f111"
},
"downloads": -1,
"filename": "spherical_geometry-1.3.2-cp310-cp310-musllinux_1_2_x86_64.whl",
"has_sig": false,
"md5_digest": "7a19c6590d955293bb6f33196114021b",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.9",
"size": 9534147,
"upload_time": "2024-06-13T11:20:17",
"upload_time_iso_8601": "2024-06-13T11:20:17.494657Z",
"url": "https://files.pythonhosted.org/packages/d9/ee/5032360d26bc6a03c696daa24b54f94eedf961989983de2d283af74dfaf9/spherical_geometry-1.3.2-cp310-cp310-musllinux_1_2_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "93e62dcbc65f68a36ed29524780a35f217deff5a6fd718e5f12ed87054983643",
"md5": "937ab0f420f18b83e8ab744740947d07",
"sha256": "06cd418fb475fb6a51b2b62dbc35a5e828ae00fd6e7f1c08dc902f8a97faa52a"
},
"downloads": -1,
"filename": "spherical_geometry-1.3.2-cp310-cp310-win32.whl",
"has_sig": false,
"md5_digest": "937ab0f420f18b83e8ab744740947d07",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.9",
"size": 7698099,
"upload_time": "2024-06-13T11:20:20",
"upload_time_iso_8601": "2024-06-13T11:20:20.392712Z",
"url": "https://files.pythonhosted.org/packages/93/e6/2dcbc65f68a36ed29524780a35f217deff5a6fd718e5f12ed87054983643/spherical_geometry-1.3.2-cp310-cp310-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "8e5481d610de18ac372830d808ec2095fb11f03aad5ef957695d080fe7a7f1b7",
"md5": "8f1d06a2e702ba820b3f9f99276d607b",
"sha256": "1513841201510a071168cb6bbaaf03a5054878d373a3f8fe9a3aa38c4edf4b63"
},
"downloads": -1,
"filename": "spherical_geometry-1.3.2-cp310-cp310-win_amd64.whl",
"has_sig": false,
"md5_digest": "8f1d06a2e702ba820b3f9f99276d607b",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.9",
"size": 7700099,
"upload_time": "2024-06-13T11:20:22",
"upload_time_iso_8601": "2024-06-13T11:20:22.778831Z",
"url": "https://files.pythonhosted.org/packages/8e/54/81d610de18ac372830d808ec2095fb11f03aad5ef957695d080fe7a7f1b7/spherical_geometry-1.3.2-cp310-cp310-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "894bfbc162b25d93932de384dd11cc7f6e177a5e3e521c94903db0d13c3cd4cb",
"md5": "2cff475006961112121e8fe492f7de29",
"sha256": "03e010efaa470d708201262cf8f1ac94b26775e8e039f6ea77559c798a3cf697"
},
"downloads": -1,
"filename": "spherical_geometry-1.3.2-cp311-cp311-macosx_10_9_x86_64.whl",
"has_sig": false,
"md5_digest": "2cff475006961112121e8fe492f7de29",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.9",
"size": 7749920,
"upload_time": "2024-06-13T11:20:25",
"upload_time_iso_8601": "2024-06-13T11:20:25.293353Z",
"url": "https://files.pythonhosted.org/packages/89/4b/fbc162b25d93932de384dd11cc7f6e177a5e3e521c94903db0d13c3cd4cb/spherical_geometry-1.3.2-cp311-cp311-macosx_10_9_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "56538a2e1b46de05c7775c9d9e7946998c8c7c51ba3354be94249ed4d5a4a10d",
"md5": "8de47cf4d99ae7fad0bfd7aa2cbb7d3b",
"sha256": "0e27786b7509aa16f15809a1ed2d2fcca7570a65e7376c5b867bc0c726557322"
},
"downloads": -1,
"filename": "spherical_geometry-1.3.2-cp311-cp311-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "8de47cf4d99ae7fad0bfd7aa2cbb7d3b",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.9",
"size": 7731218,
"upload_time": "2024-06-13T11:20:28",
"upload_time_iso_8601": "2024-06-13T11:20:28.274691Z",
"url": "https://files.pythonhosted.org/packages/56/53/8a2e1b46de05c7775c9d9e7946998c8c7c51ba3354be94249ed4d5a4a10d/spherical_geometry-1.3.2-cp311-cp311-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "5dc18447207a8e8245843e6b28016535f29c58c9ce50bbc6c598d2b0c8034d24",
"md5": "03f6ab52ee91bcc4368476cd3d0cbf02",
"sha256": "6ebefd216e64bfdbe150036c117593b5cb22f75ecf552598e35aa3cd1b822310"
},
"downloads": -1,
"filename": "spherical_geometry-1.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "03f6ab52ee91bcc4368476cd3d0cbf02",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.9",
"size": 8562496,
"upload_time": "2024-06-13T11:20:30",
"upload_time_iso_8601": "2024-06-13T11:20:30.584581Z",
"url": "https://files.pythonhosted.org/packages/5d/c1/8447207a8e8245843e6b28016535f29c58c9ce50bbc6c598d2b0c8034d24/spherical_geometry-1.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "b54cb99dffaf8193da118724a322d7ac14149596d8fd9ba0efe76652798acf43",
"md5": "05b66731af99aedc9f662175dc2854d2",
"sha256": "6b125ac4dc9ed8cab0325a84b6d2c676fc3a32c9f8c1d5055a053c30413f67fb"
},
"downloads": -1,
"filename": "spherical_geometry-1.3.2-cp311-cp311-musllinux_1_2_x86_64.whl",
"has_sig": false,
"md5_digest": "05b66731af99aedc9f662175dc2854d2",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.9",
"size": 9534216,
"upload_time": "2024-06-13T11:20:35",
"upload_time_iso_8601": "2024-06-13T11:20:35.067440Z",
"url": "https://files.pythonhosted.org/packages/b5/4c/b99dffaf8193da118724a322d7ac14149596d8fd9ba0efe76652798acf43/spherical_geometry-1.3.2-cp311-cp311-musllinux_1_2_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "fca1b2c8eb18f58e319d088eeadb6985239f0119c4bb44d15b0d11c726167af8",
"md5": "76560d1af45be9e4001bd3bf2c843be5",
"sha256": "e3c01f2074c2b36f803311180d1a78b914bb30283f6eea1644c93928e7782c20"
},
"downloads": -1,
"filename": "spherical_geometry-1.3.2-cp311-cp311-win32.whl",
"has_sig": false,
"md5_digest": "76560d1af45be9e4001bd3bf2c843be5",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.9",
"size": 7698094,
"upload_time": "2024-06-13T11:20:37",
"upload_time_iso_8601": "2024-06-13T11:20:37.888663Z",
"url": "https://files.pythonhosted.org/packages/fc/a1/b2c8eb18f58e319d088eeadb6985239f0119c4bb44d15b0d11c726167af8/spherical_geometry-1.3.2-cp311-cp311-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "f4db3668a968b7b88ec0d4ee2c117e19d9185c306888fe019fd8e001ac64525e",
"md5": "fd6d6dd0266aae55704ad94d283c7e60",
"sha256": "54d178c3cddc271ae5e0f1e4c49cd99e22358f8047a12804fcf201979172de9c"
},
"downloads": -1,
"filename": "spherical_geometry-1.3.2-cp311-cp311-win_amd64.whl",
"has_sig": false,
"md5_digest": "fd6d6dd0266aae55704ad94d283c7e60",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.9",
"size": 7700094,
"upload_time": "2024-06-13T11:20:40",
"upload_time_iso_8601": "2024-06-13T11:20:40.602251Z",
"url": "https://files.pythonhosted.org/packages/f4/db/3668a968b7b88ec0d4ee2c117e19d9185c306888fe019fd8e001ac64525e/spherical_geometry-1.3.2-cp311-cp311-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "a1bcb6c2abafce560d0b649abf0b6c2c31df2129144619807177a7dc58f4e09b",
"md5": "1c289980b4d86e741941db3e28c145b3",
"sha256": "ce5ceef9902e2564d44b5c22c11a7e4590918acf149c06f99611e10b6a76a3f7"
},
"downloads": -1,
"filename": "spherical_geometry-1.3.2-cp312-cp312-macosx_10_9_x86_64.whl",
"has_sig": false,
"md5_digest": "1c289980b4d86e741941db3e28c145b3",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.9",
"size": 7749939,
"upload_time": "2024-06-13T11:20:43",
"upload_time_iso_8601": "2024-06-13T11:20:43.155755Z",
"url": "https://files.pythonhosted.org/packages/a1/bc/b6c2abafce560d0b649abf0b6c2c31df2129144619807177a7dc58f4e09b/spherical_geometry-1.3.2-cp312-cp312-macosx_10_9_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "d7bfa21de23ab3887bc5ec7883c8748ffe2731eb3323eaccecea3e443e566e43",
"md5": "9523c22788844e9fbd330a7fb5b0bac5",
"sha256": "5173f56001b8721181adc12b377898c58afca76159937a3391aafcfc756d2a05"
},
"downloads": -1,
"filename": "spherical_geometry-1.3.2-cp312-cp312-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "9523c22788844e9fbd330a7fb5b0bac5",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.9",
"size": 7731233,
"upload_time": "2024-06-13T11:20:45",
"upload_time_iso_8601": "2024-06-13T11:20:45.453078Z",
"url": "https://files.pythonhosted.org/packages/d7/bf/a21de23ab3887bc5ec7883c8748ffe2731eb3323eaccecea3e443e566e43/spherical_geometry-1.3.2-cp312-cp312-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "4aea878a89446f9c08ca68e8d1cad6d732b34bb9608ada00f790897591df8e1e",
"md5": "0ed09b1cf6614f51c43fd4ddee49f129",
"sha256": "728e1cda8ad1ebebf60cbb48d763946813169133f12640bc1c11b49ea838b8db"
},
"downloads": -1,
"filename": "spherical_geometry-1.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "0ed09b1cf6614f51c43fd4ddee49f129",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.9",
"size": 8563373,
"upload_time": "2024-06-13T11:20:48",
"upload_time_iso_8601": "2024-06-13T11:20:48.615115Z",
"url": "https://files.pythonhosted.org/packages/4a/ea/878a89446f9c08ca68e8d1cad6d732b34bb9608ada00f790897591df8e1e/spherical_geometry-1.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "870af324afd2ac9adb2f58bcdaff94287320fecee534e4eb6df08a0e26222048",
"md5": "9c025144d774c9c570a44b3134976c96",
"sha256": "8fd68dffe3fc33ea6e1c50730ed59ffcd433d609a51daf599fd4ec1848652901"
},
"downloads": -1,
"filename": "spherical_geometry-1.3.2-cp312-cp312-musllinux_1_2_x86_64.whl",
"has_sig": false,
"md5_digest": "9c025144d774c9c570a44b3134976c96",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.9",
"size": 9534834,
"upload_time": "2024-06-13T11:20:51",
"upload_time_iso_8601": "2024-06-13T11:20:51.118502Z",
"url": "https://files.pythonhosted.org/packages/87/0a/f324afd2ac9adb2f58bcdaff94287320fecee534e4eb6df08a0e26222048/spherical_geometry-1.3.2-cp312-cp312-musllinux_1_2_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "9f0c58d482db7f7ebbe7cc0aa68de36a6471a1c24fc076274bb589f23a164e85",
"md5": "b3a0d97065120556e4a8e41b61bda9be",
"sha256": "0c59cae46ede5a0c1352edebffef8651620c6ab2e863f1dd35043b74ac298b77"
},
"downloads": -1,
"filename": "spherical_geometry-1.3.2-cp312-cp312-win32.whl",
"has_sig": false,
"md5_digest": "b3a0d97065120556e4a8e41b61bda9be",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.9",
"size": 7698207,
"upload_time": "2024-06-13T11:20:54",
"upload_time_iso_8601": "2024-06-13T11:20:54.724954Z",
"url": "https://files.pythonhosted.org/packages/9f/0c/58d482db7f7ebbe7cc0aa68de36a6471a1c24fc076274bb589f23a164e85/spherical_geometry-1.3.2-cp312-cp312-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "c1c0c43f75bb0ceb508b31d043b8aad758bbb652301365bb0a820b62f64681d8",
"md5": "cb80366a1c58e573f47a3e160804ed36",
"sha256": "a3090d10f67ad0cb9497fe2517028c7241de32e97e5d6cf5042d7cd85a2db4c2"
},
"downloads": -1,
"filename": "spherical_geometry-1.3.2-cp312-cp312-win_amd64.whl",
"has_sig": false,
"md5_digest": "cb80366a1c58e573f47a3e160804ed36",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.9",
"size": 7700135,
"upload_time": "2024-06-13T11:20:57",
"upload_time_iso_8601": "2024-06-13T11:20:57.092993Z",
"url": "https://files.pythonhosted.org/packages/c1/c0/c43f75bb0ceb508b31d043b8aad758bbb652301365bb0a820b62f64681d8/spherical_geometry-1.3.2-cp312-cp312-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "acaace807aa7210ba0393a9802fbd23b773347f239a390adb59a787afee1f540",
"md5": "2879d4e7aa118f2f26a1e50e098d4c18",
"sha256": "accab32117fdaf7aa94b3ffe7568b9f5fe9cb0d519a59d15f44ddab6030a277e"
},
"downloads": -1,
"filename": "spherical_geometry-1.3.2-cp39-cp39-macosx_10_9_x86_64.whl",
"has_sig": false,
"md5_digest": "2879d4e7aa118f2f26a1e50e098d4c18",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.9",
"size": 7749921,
"upload_time": "2024-06-13T11:20:59",
"upload_time_iso_8601": "2024-06-13T11:20:59.340894Z",
"url": "https://files.pythonhosted.org/packages/ac/aa/ce807aa7210ba0393a9802fbd23b773347f239a390adb59a787afee1f540/spherical_geometry-1.3.2-cp39-cp39-macosx_10_9_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "aa83986d436933f065a57912b38d9385ef26ffcd9e19227b1b9f98ed7b66c501",
"md5": "e7cffa881c3927ba3a3583e7ae8388f1",
"sha256": "b0a1ff01e0c7f2f749c0c038ba91fa0096069ae243febda2c980f455fb99e886"
},
"downloads": -1,
"filename": "spherical_geometry-1.3.2-cp39-cp39-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "e7cffa881c3927ba3a3583e7ae8388f1",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.9",
"size": 7731223,
"upload_time": "2024-06-13T11:21:01",
"upload_time_iso_8601": "2024-06-13T11:21:01.937160Z",
"url": "https://files.pythonhosted.org/packages/aa/83/986d436933f065a57912b38d9385ef26ffcd9e19227b1b9f98ed7b66c501/spherical_geometry-1.3.2-cp39-cp39-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "9cd5288a42ca95e88743c229ee0352976664eba0851686bb9e2bf09141c8b443",
"md5": "57c351a5d6512365046ea5c2a1859754",
"sha256": "8c6e34806b25f965e4564ef11e4c487df6afc71e25605772e2d56244cc57cb62"
},
"downloads": -1,
"filename": "spherical_geometry-1.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "57c351a5d6512365046ea5c2a1859754",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.9",
"size": 8562187,
"upload_time": "2024-06-13T11:21:04",
"upload_time_iso_8601": "2024-06-13T11:21:04.593693Z",
"url": "https://files.pythonhosted.org/packages/9c/d5/288a42ca95e88743c229ee0352976664eba0851686bb9e2bf09141c8b443/spherical_geometry-1.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "610f7a696e0bb58398c52cdb3e8669c838b8e2fff49ddf5cfe6a1d12d3a57a90",
"md5": "e7d878c408d575b4bd4d530a5e1f590a",
"sha256": "bc9e125bd75014f8ad6c677ca2913e70b039c14125680811336ba0247956a54e"
},
"downloads": -1,
"filename": "spherical_geometry-1.3.2-cp39-cp39-musllinux_1_2_x86_64.whl",
"has_sig": false,
"md5_digest": "e7d878c408d575b4bd4d530a5e1f590a",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.9",
"size": 9534025,
"upload_time": "2024-06-13T11:21:07",
"upload_time_iso_8601": "2024-06-13T11:21:07.269849Z",
"url": "https://files.pythonhosted.org/packages/61/0f/7a696e0bb58398c52cdb3e8669c838b8e2fff49ddf5cfe6a1d12d3a57a90/spherical_geometry-1.3.2-cp39-cp39-musllinux_1_2_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "fc29f4d51f9caade93bf05c280d770a8e6aecd672ee51b93d96785ba78b5565b",
"md5": "004b8803da20b9260c9b5b82088088e5",
"sha256": "c910d4767b73a2c9f695135aefb7ff5eca6263c1b4cfba2a2d366e5ab30d9e15"
},
"downloads": -1,
"filename": "spherical_geometry-1.3.2-cp39-cp39-win32.whl",
"has_sig": false,
"md5_digest": "004b8803da20b9260c9b5b82088088e5",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.9",
"size": 7698093,
"upload_time": "2024-06-13T11:21:10",
"upload_time_iso_8601": "2024-06-13T11:21:10.141217Z",
"url": "https://files.pythonhosted.org/packages/fc/29/f4d51f9caade93bf05c280d770a8e6aecd672ee51b93d96785ba78b5565b/spherical_geometry-1.3.2-cp39-cp39-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "e7e911e6fbbff500ad3f2f12f62d8bdd43ec9bd6e940e0f5a0acbc08d5e1a9b0",
"md5": "6834cc85feb00a6f4ccc46c6ada11851",
"sha256": "caf55117b9fbb130cb1ca090d395bb89bd032bd449534a74f095e9490dbcec50"
},
"downloads": -1,
"filename": "spherical_geometry-1.3.2-cp39-cp39-win_amd64.whl",
"has_sig": false,
"md5_digest": "6834cc85feb00a6f4ccc46c6ada11851",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.9",
"size": 7700088,
"upload_time": "2024-06-13T11:21:11",
"upload_time_iso_8601": "2024-06-13T11:21:11.936073Z",
"url": "https://files.pythonhosted.org/packages/e7/e9/11e6fbbff500ad3f2f12f62d8bdd43ec9bd6e940e0f5a0acbc08d5e1a9b0/spherical_geometry-1.3.2-cp39-cp39-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "cae5e4619b3aaa0b318c30a05f512aa679e5ac92c14df99d73e61a0376890107",
"md5": "f18f7a1f53a65ebdf94035dfeec8c6f7",
"sha256": "bed481a8b080748bf93434c3b113eae53609a61d0c0694db83c07685b52c3d23"
},
"downloads": -1,
"filename": "spherical_geometry-1.3.2.tar.gz",
"has_sig": false,
"md5_digest": "f18f7a1f53a65ebdf94035dfeec8c6f7",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.9",
"size": 8715965,
"upload_time": "2024-06-13T11:21:14",
"upload_time_iso_8601": "2024-06-13T11:21:14.405763Z",
"url": "https://files.pythonhosted.org/packages/ca/e5/e4619b3aaa0b318c30a05f512aa679e5ac92c14df99d73e61a0376890107/spherical_geometry-1.3.2.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-06-13 11:21:14",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "spacetelescope",
"github_project": "spherical_geometry",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"tox": true,
"lcname": "spherical-geometry"
}