cysgp4


Namecysgp4 JSON
Version 0.4.0 PyPI version JSON
download
home_pageNone
Summarycysgp4: a wrapper around the SGP4 package, for sat TLE calculations
upload_time2025-02-02 23:09:50
maintainerNone
docs_urlNone
authorNone
requires_python>=3.10
licenseGPLv3
keywords astronomy science
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            ******
cysgp4
******

.. container::

    |License-GPL| |License-Apache| |License-BSD3|

.. container::

    |PyPI Badge| |PyPI Downloads|

.. container::

    |Conda-Version| |Conda-Platforms-Badge| |Conda-Downloads-Badge|

- *Version:* 0.4.0
- *Lead author/package maintainer:* Benjamin Winkel
- *Contributor(s):* Gyula I.G. Józsa, Boris Sorokin
- *Repository:* `on GitHub <https://github.com/bwinkel/cysgp4>`__
- *Bug tracker:* `on GitHub <https://github.com/bwinkel/cysgp4/issues>`__
- *User manual:* `stable <https://bwinkel.github.io/cysgp4/>`__ |  `developer <https://bwinkel.github.io/cysgp4/latest/>`__

Project Status
==============

.. container::

    |Azure Status|

Purpose
=======

The `cysgp4` package is a `Cython <https://www.cython.org>`_-powered wrapper
of the `sgp4lib <https://www.danrw.com/sgp4/>`_ library (by Daniel Warner) to
compute satellite positions from two-line elements (TLE).

It provides similar functionality as the well-known `sgp4
<https://pypi.org/project/sgp4/>`_ Python package (by Brandon Rhodes), which
uses `Numba <http://numba.pydata.org/>`_ internally to speed-up the
calculations. In contrast to `sgp4`_, `cysgp4` can work well with arrays of
TLEs and/or times and make use of multi-core platforms (via OpenMP) to boost
processing times a lot.

Installation
============

We highly recommend to use `cysgp4` with the `Anaconda Python distribution <https://www.anaconda.com/>`_, in which
case installiation is as easy as ::

    conda install -c conda-forge cysgp4

Otherwise, you should install cysgp4 via `pip`::

    python -m pip install cysgp4

The installation is also possible from source. `Detailed installation
instructions <https://bwinkel.github.io/cysgp4/latest/install.html>`_
can be found in the user manual.

Dependencies
------------

We kept the dependencies as minimal as possible. The following packages are
required:

- `Python 3.10` or later
- `numpy 2.0` or later (older numpy version may work)

If you want to run the notebooks yourself, you will also need the Jupyter
server and install matplotlib. To run the tests, you'll need `sgp4
<https://pypi.org/project/sgp4/>`_.

Note, for compiling the C-extension, OpenMP is used for parallelization. If you use gcc, for example, you should have at least version 4.8 otherwise the setup-script may fail. Again, see `Detailed installation instructions` for
more information.

Usage
=====

Using cysgp4 is possible via an object-oriented interface or with a
fast numpy-array functional approach. The former works like this:

.. code-block:: python

    import cysgp4

    # Define a date/time and an observer
    pydt = cysgp4.PyDateTime.from_mjd(58805.57)
    lon_deg, lat_deg = 6.88375, 50.525
    alt_km = 0.366
    obs = cysgp4.PyObserver(lon_deg, lat_deg, alt_km)

    # Define satellite properties/orbit via two-line element string (TLE)
    hst_tle = cysgp4.PyTle(
        'HST',
        '1 20580U 90037B   19321.38711875  .00000471  00000-0  17700-4 0  9991',
        '2 20580  28.4699 288.8102 0002495 321.7771 171.5855 15.09299865423838',
        )

    # Create a satellite object for querying coordinates
    sat = cysgp4.Satellite(hst_tle, obs, pydt)
    sat.eci_pos().loc  # ECI cartesian position, km
    (5879.5931344459295, 1545.7455647032068, 3287.4155452595)
    sat.eci_pos().vel  # ECI cartesian velocity, km/s
    (-1.8205895517672226, 7.374044252723081, -0.20697960810978586)
    sat.geo_pos()  # geographic (geodetic) position, lon/lat/alt
    <PyCoordGeodetic: 112.2146d, 28.5509d, 538.0186km>
    sat.topo_pos()  # topocentric position, az/el/dist/dist_rate
    <PyCoordTopocentric: 60.2453d, -35.6844d, 8314.5683km, 3.5087km/s>

    # One can change time to determine positions at another moment
    sat.mjd += 1 / 720.  # one minute later
    sat.topo_pos()
    <PyCoordTopocentric: 54.8446d, -38.2749d, 8734.9195km, 3.4885km/s>

In many cases, however, one probably wants to calculate coordinates for a
(large) number of satellites, observer locations, and/or observing times. For
this, the function `~cysgp4.propagate_many` is useful. This is an array
interface to the sgp4 calculations, which allows to perform calculations for
different satellite TLEs, observers and times in a parallelized manner.
`~numpy` broadcasting `rules
<https://docs.scipy.org/doc/numpy/user/basics.broadcasting.html>`_ apply:

.. code-block:: python

        import requests
        import numpy as np
        from cysgp4 import PyTle, PyObserver, propagate_many

        # Download many TLEs from a website
        url = 'http://celestrak.com/NORAD/elements/science.txt'
        ctrak_science = requests.get(url)
        all_lines = ctrak_science.text.split('\\r\\n')

        # Need to convert them to a list of tuples (each tuple consisting
        # of the three TLE strings)
        tle_list = list(zip(*tuple(
            all_lines[idx::3] for idx in range(3)
            )))
        # Create an array of PyTle and PyObserver objects, and MJDs
        tles = np.array([
            PyTle(*tle) for tle in tle_list
            ])[np.newaxis, np.newaxis, :20]  # use first 20 TLEs
        observers = np.array([
            PyObserver(6.88375, 50.525, 0.366),
            PyObserver(16.88375, 50.525, 0.366),
            ])[np.newaxis, :, np.newaxis]
        mjds = np.linspace(
            58805.5, 58806.5, 1000  # 1000 time steps
            )[:, np.newaxis, np.newaxis]

        # The result is a dictionary
        result = propagate_many(mjds, tles, observers)
        print(result.keys())
        dict_keys(['eci_pos', 'eci_vel', 'geo', 'topo'])

        # Returned array shapes are as follows; last array dimension
        # contains the coordinate pairs.
        print(np.broadcast(mjds, tles, observers).shape)
        (1000, 2, 20)
        print(result['eci_pos'].shape, result['topo'].shape)
        (1000, 2, 20, 3) (1000, 2, 20, 4)

        # One can also skip over coordinate frames.
        result = propagate_many(
            mjds, tles, observers,
            do_eci_pos=False, do_eci_vel=False, do_geo=False, do_topo=True
            )
        print(result.keys())
        dict_keys(['topo'])


More use-cases and tutorials
----------------------------

Check out the `user manual <https://bwinkel.github.io/cysgp4/latest/>`_ or the
`Jupyter tutorial notebooks <https://github.com/bwinkel/cysgp4/tree/master/notebooks>`_
in the repository for further examples of how to use `cysgp4`. Note that you
can only view the notebooks on GitHub, if you want to edit something
it is necessary to clone the repository or download a notebook to run it on
your machine.

Who do I talk to?
=================

If you encounter any problems or have questions, do not hesitate to raise an
issue or make a pull request. Moreover, you can contact the devs directly:

- <bwinkel@mpifr.de>

Licenses
========

`cysgp4` itself is published under `GPL v3 <https://www.github.com/bwinkel/cysgp4/blob/master/COPYING.GPLv3.txt>`_, an open-source license. The package
is a `Cython <https://www.cython.org>`_-powered wrapper of the `sgp4lib
<https://www.danrw.com/sgp4/>`_ library (by Daniel Warner) to compute
satellite positions from two-line elements (TLE). The sgp4lib source code is
licensed under `Apache-2.0 license
<https://www.github.com/bwinkel/cysgp4/blob/master/COPYING.Apache2>`_

The package is partly based on the `Astropy-affiliated package template <https://github.com/astropy/package-template>`_, which is under `BSD 3-clause <https://github.com/bwinkel/cysgp4/blob/master/TEMPLATE_LICENCE.rst>`_ license.




.. |PyPI Badge| image:: https://img.shields.io/pypi/v/cysgp4.svg
    :target: https://pypi.python.org/pypi/cysgp4
    :alt: PyPI tag

.. |PyPI Downloads| image:: https://img.shields.io/pypi/dm/cysgp4
   :target: https://pypi.python.org/pypi/cysgp4
   :alt: PyPI - Downloads

.. |License-GPL| image:: https://img.shields.io/badge/License-GPLv3-blue.svg
    :target: https://www.github.com/bwinkel/cysgp4/blob/master/COPYING.GPLv3.txt
    :alt: License-GPL3

.. |License-Apache| image:: https://img.shields.io/badge/License-Apache%202.0-blue.svg
    :target: https://www.github.com/bwinkel/cysgp4/blob/master/COPYING.Apache2
    :alt: License-Apache

.. |License-BSD3| image:: https://img.shields.io/badge/License-BSD%203--Clause-blue.svg
    :target: https://www.github.com/bwinkel/cysgp4/blob/master/TEMPLATE_LICENCE.rst
    :alt: License-BSD3

.. |Conda-Version| image:: https://anaconda.org/conda-forge/cysgp4/badges/version.svg
    :target: https://anaconda.org/conda-forge/cysgp4
    :alt: conda-forge platforms: Version on conda-forge

.. |Conda-Platforms-Badge| image:: https://anaconda.org/conda-forge/cysgp4/badges/platforms.svg
    :target: https://anaconda.org/conda-forge/cysgp4
    :alt: conda-forge platforms: linux-64, osx-64, win-64

.. |Conda-Downloads-Badge| image:: https://anaconda.org/conda-forge/cysgp4/badges/downloads.svg
    :target: https://anaconda.org/conda-forge/cysgp4
    :alt: conda-forge downloads


.. |Azure Status| image:: https://dev.azure.com/bwinkel78/Benjamin-Winkel-Projects/_apis/build/status/bwinkel.cysgp4?branchName=master
    :target: https://dev.azure.com/bwinkel78/Benjamin-Winkel-Projects/_build
    :alt: cysgp4's Azure Pipelines Status



            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "cysgp4",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.10",
    "maintainer_email": null,
    "keywords": "astronomy, science",
    "author": null,
    "author_email": "Benjamin Winkel <bwinkel@mpifr.de>",
    "download_url": "https://files.pythonhosted.org/packages/6f/33/3baf022b61f80f24995c74effff0f711c34707a6447f3f4538548cd18e26/cysgp4-0.4.0.tar.gz",
    "platform": null,
    "description": "******\ncysgp4\n******\n\n.. container::\n\n    |License-GPL| |License-Apache| |License-BSD3|\n\n.. container::\n\n    |PyPI Badge| |PyPI Downloads|\n\n.. container::\n\n    |Conda-Version| |Conda-Platforms-Badge| |Conda-Downloads-Badge|\n\n- *Version:* 0.4.0\n- *Lead author/package maintainer:* Benjamin Winkel\n- *Contributor(s):* Gyula I.G. J\u00f3zsa, Boris Sorokin\n- *Repository:* `on GitHub <https://github.com/bwinkel/cysgp4>`__\n- *Bug tracker:* `on GitHub <https://github.com/bwinkel/cysgp4/issues>`__\n- *User manual:* `stable <https://bwinkel.github.io/cysgp4/>`__ |  `developer <https://bwinkel.github.io/cysgp4/latest/>`__\n\nProject Status\n==============\n\n.. container::\n\n    |Azure Status|\n\nPurpose\n=======\n\nThe `cysgp4` package is a `Cython <https://www.cython.org>`_-powered wrapper\nof the `sgp4lib <https://www.danrw.com/sgp4/>`_ library (by Daniel Warner) to\ncompute satellite positions from two-line elements (TLE).\n\nIt provides similar functionality as the well-known `sgp4\n<https://pypi.org/project/sgp4/>`_ Python package (by Brandon Rhodes), which\nuses `Numba <http://numba.pydata.org/>`_ internally to speed-up the\ncalculations. In contrast to `sgp4`_, `cysgp4` can work well with arrays of\nTLEs and/or times and make use of multi-core platforms (via OpenMP) to boost\nprocessing times a lot.\n\nInstallation\n============\n\nWe highly recommend to use `cysgp4` with the `Anaconda Python distribution <https://www.anaconda.com/>`_, in which\ncase installiation is as easy as ::\n\n    conda install -c conda-forge cysgp4\n\nOtherwise, you should install cysgp4 via `pip`::\n\n    python -m pip install cysgp4\n\nThe installation is also possible from source. `Detailed installation\ninstructions <https://bwinkel.github.io/cysgp4/latest/install.html>`_\ncan be found in the user manual.\n\nDependencies\n------------\n\nWe kept the dependencies as minimal as possible. The following packages are\nrequired:\n\n- `Python 3.10` or later\n- `numpy 2.0` or later (older numpy version may work)\n\nIf you want to run the notebooks yourself, you will also need the Jupyter\nserver and install matplotlib. To run the tests, you'll need `sgp4\n<https://pypi.org/project/sgp4/>`_.\n\nNote, for compiling the C-extension, OpenMP is used for parallelization. If you use gcc, for example, you should have at least version 4.8 otherwise the setup-script may fail. Again, see `Detailed installation instructions` for\nmore information.\n\nUsage\n=====\n\nUsing cysgp4 is possible via an object-oriented interface or with a\nfast numpy-array functional approach. The former works like this:\n\n.. code-block:: python\n\n    import cysgp4\n\n    # Define a date/time and an observer\n    pydt = cysgp4.PyDateTime.from_mjd(58805.57)\n    lon_deg, lat_deg = 6.88375, 50.525\n    alt_km = 0.366\n    obs = cysgp4.PyObserver(lon_deg, lat_deg, alt_km)\n\n    # Define satellite properties/orbit via two-line element string (TLE)\n    hst_tle = cysgp4.PyTle(\n        'HST',\n        '1 20580U 90037B   19321.38711875  .00000471  00000-0  17700-4 0  9991',\n        '2 20580  28.4699 288.8102 0002495 321.7771 171.5855 15.09299865423838',\n        )\n\n    # Create a satellite object for querying coordinates\n    sat = cysgp4.Satellite(hst_tle, obs, pydt)\n    sat.eci_pos().loc  # ECI cartesian position, km\n    (5879.5931344459295, 1545.7455647032068, 3287.4155452595)\n    sat.eci_pos().vel  # ECI cartesian velocity, km/s\n    (-1.8205895517672226, 7.374044252723081, -0.20697960810978586)\n    sat.geo_pos()  # geographic (geodetic) position, lon/lat/alt\n    <PyCoordGeodetic: 112.2146d, 28.5509d, 538.0186km>\n    sat.topo_pos()  # topocentric position, az/el/dist/dist_rate\n    <PyCoordTopocentric: 60.2453d, -35.6844d, 8314.5683km, 3.5087km/s>\n\n    # One can change time to determine positions at another moment\n    sat.mjd += 1 / 720.  # one minute later\n    sat.topo_pos()\n    <PyCoordTopocentric: 54.8446d, -38.2749d, 8734.9195km, 3.4885km/s>\n\nIn many cases, however, one probably wants to calculate coordinates for a\n(large) number of satellites, observer locations, and/or observing times. For\nthis, the function `~cysgp4.propagate_many` is useful. This is an array\ninterface to the sgp4 calculations, which allows to perform calculations for\ndifferent satellite TLEs, observers and times in a parallelized manner.\n`~numpy` broadcasting `rules\n<https://docs.scipy.org/doc/numpy/user/basics.broadcasting.html>`_ apply:\n\n.. code-block:: python\n\n        import requests\n        import numpy as np\n        from cysgp4 import PyTle, PyObserver, propagate_many\n\n        # Download many TLEs from a website\n        url = 'http://celestrak.com/NORAD/elements/science.txt'\n        ctrak_science = requests.get(url)\n        all_lines = ctrak_science.text.split('\\\\r\\\\n')\n\n        # Need to convert them to a list of tuples (each tuple consisting\n        # of the three TLE strings)\n        tle_list = list(zip(*tuple(\n            all_lines[idx::3] for idx in range(3)\n            )))\n        # Create an array of PyTle and PyObserver objects, and MJDs\n        tles = np.array([\n            PyTle(*tle) for tle in tle_list\n            ])[np.newaxis, np.newaxis, :20]  # use first 20 TLEs\n        observers = np.array([\n            PyObserver(6.88375, 50.525, 0.366),\n            PyObserver(16.88375, 50.525, 0.366),\n            ])[np.newaxis, :, np.newaxis]\n        mjds = np.linspace(\n            58805.5, 58806.5, 1000  # 1000 time steps\n            )[:, np.newaxis, np.newaxis]\n\n        # The result is a dictionary\n        result = propagate_many(mjds, tles, observers)\n        print(result.keys())\n        dict_keys(['eci_pos', 'eci_vel', 'geo', 'topo'])\n\n        # Returned array shapes are as follows; last array dimension\n        # contains the coordinate pairs.\n        print(np.broadcast(mjds, tles, observers).shape)\n        (1000, 2, 20)\n        print(result['eci_pos'].shape, result['topo'].shape)\n        (1000, 2, 20, 3) (1000, 2, 20, 4)\n\n        # One can also skip over coordinate frames.\n        result = propagate_many(\n            mjds, tles, observers,\n            do_eci_pos=False, do_eci_vel=False, do_geo=False, do_topo=True\n            )\n        print(result.keys())\n        dict_keys(['topo'])\n\n\nMore use-cases and tutorials\n----------------------------\n\nCheck out the `user manual <https://bwinkel.github.io/cysgp4/latest/>`_ or the\n`Jupyter tutorial notebooks <https://github.com/bwinkel/cysgp4/tree/master/notebooks>`_\nin the repository for further examples of how to use `cysgp4`. Note that you\ncan only view the notebooks on GitHub, if you want to edit something\nit is necessary to clone the repository or download a notebook to run it on\nyour machine.\n\nWho do I talk to?\n=================\n\nIf you encounter any problems or have questions, do not hesitate to raise an\nissue or make a pull request. Moreover, you can contact the devs directly:\n\n- <bwinkel@mpifr.de>\n\nLicenses\n========\n\n`cysgp4` itself is published under `GPL v3 <https://www.github.com/bwinkel/cysgp4/blob/master/COPYING.GPLv3.txt>`_, an open-source license. The package\nis a `Cython <https://www.cython.org>`_-powered wrapper of the `sgp4lib\n<https://www.danrw.com/sgp4/>`_ library (by Daniel Warner) to compute\nsatellite positions from two-line elements (TLE). The sgp4lib source code is\nlicensed under `Apache-2.0 license\n<https://www.github.com/bwinkel/cysgp4/blob/master/COPYING.Apache2>`_\n\nThe package is partly based on the `Astropy-affiliated package template <https://github.com/astropy/package-template>`_, which is under `BSD 3-clause <https://github.com/bwinkel/cysgp4/blob/master/TEMPLATE_LICENCE.rst>`_ license.\n\n\n\n\n.. |PyPI Badge| image:: https://img.shields.io/pypi/v/cysgp4.svg\n    :target: https://pypi.python.org/pypi/cysgp4\n    :alt: PyPI tag\n\n.. |PyPI Downloads| image:: https://img.shields.io/pypi/dm/cysgp4\n   :target: https://pypi.python.org/pypi/cysgp4\n   :alt: PyPI - Downloads\n\n.. |License-GPL| image:: https://img.shields.io/badge/License-GPLv3-blue.svg\n    :target: https://www.github.com/bwinkel/cysgp4/blob/master/COPYING.GPLv3.txt\n    :alt: License-GPL3\n\n.. |License-Apache| image:: https://img.shields.io/badge/License-Apache%202.0-blue.svg\n    :target: https://www.github.com/bwinkel/cysgp4/blob/master/COPYING.Apache2\n    :alt: License-Apache\n\n.. |License-BSD3| image:: https://img.shields.io/badge/License-BSD%203--Clause-blue.svg\n    :target: https://www.github.com/bwinkel/cysgp4/blob/master/TEMPLATE_LICENCE.rst\n    :alt: License-BSD3\n\n.. |Conda-Version| image:: https://anaconda.org/conda-forge/cysgp4/badges/version.svg\n    :target: https://anaconda.org/conda-forge/cysgp4\n    :alt: conda-forge platforms: Version on conda-forge\n\n.. |Conda-Platforms-Badge| image:: https://anaconda.org/conda-forge/cysgp4/badges/platforms.svg\n    :target: https://anaconda.org/conda-forge/cysgp4\n    :alt: conda-forge platforms: linux-64, osx-64, win-64\n\n.. |Conda-Downloads-Badge| image:: https://anaconda.org/conda-forge/cysgp4/badges/downloads.svg\n    :target: https://anaconda.org/conda-forge/cysgp4\n    :alt: conda-forge downloads\n\n\n.. |Azure Status| image:: https://dev.azure.com/bwinkel78/Benjamin-Winkel-Projects/_apis/build/status/bwinkel.cysgp4?branchName=master\n    :target: https://dev.azure.com/bwinkel78/Benjamin-Winkel-Projects/_build\n    :alt: cysgp4's Azure Pipelines Status\n\n\n",
    "bugtrack_url": null,
    "license": "GPLv3",
    "summary": "cysgp4: a wrapper around the SGP4 package, for sat TLE calculations",
    "version": "0.4.0",
    "project_urls": {
        "Changelog": "https://github.com/bwinkel/cysgp4/CHANGES.rst",
        "Documentation": "https://bwinkel.github.io/cysgp4/",
        "Homepage": "https://pypi.org/project/cysgp4/",
        "Issues": "https://github.com/bwinkel/cysgp4/issues",
        "Repository": "https://github.com/bwinkel/cysgp4"
    },
    "split_keywords": [
        "astronomy",
        " science"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "39163bff5611da06502e847438191b7cfded15d8bf86d324d2a5402213960dc0",
                "md5": "e1c91d0863c83af4b27e6037dcfc9f83",
                "sha256": "007ba2d07ceb6e371e3ecfbe7c5ab84524497011f7f27de1740e8cbea47f87c9"
            },
            "downloads": -1,
            "filename": "cysgp4-0.4.0-cp310-cp310-macosx_10_13_x86_64.whl",
            "has_sig": false,
            "md5_digest": "e1c91d0863c83af4b27e6037dcfc9f83",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.10",
            "size": 743818,
            "upload_time": "2025-02-02T23:08:14",
            "upload_time_iso_8601": "2025-02-02T23:08:14.830189Z",
            "url": "https://files.pythonhosted.org/packages/39/16/3bff5611da06502e847438191b7cfded15d8bf86d324d2a5402213960dc0/cysgp4-0.4.0-cp310-cp310-macosx_10_13_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "ac69cb2a024ab55dcb61b837734f16cf1f272abca52e9abb3704ad26761e7cc3",
                "md5": "9e6644ef871428a8482929c797eac756",
                "sha256": "85ce63de2e8556ccb2f97c669bd4c8aea02ebaa7f5ab5e8b4eeba46e1f3d3241"
            },
            "downloads": -1,
            "filename": "cysgp4-0.4.0-cp310-cp310-manylinux_2_28_x86_64.whl",
            "has_sig": false,
            "md5_digest": "9e6644ef871428a8482929c797eac756",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.10",
            "size": 2500679,
            "upload_time": "2025-02-02T23:09:28",
            "upload_time_iso_8601": "2025-02-02T23:09:28.331874Z",
            "url": "https://files.pythonhosted.org/packages/ac/69/cb2a024ab55dcb61b837734f16cf1f272abca52e9abb3704ad26761e7cc3/cysgp4-0.4.0-cp310-cp310-manylinux_2_28_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "8e549b63ba4f6231680e918892128a49f914eb76790df6d50c5c605412ea0e7d",
                "md5": "0c2b2437fba42c98a96658189d067dd3",
                "sha256": "d91c847ea779bb235125866c6569255a7215fdd5da5f7920a83537748e6593b2"
            },
            "downloads": -1,
            "filename": "cysgp4-0.4.0-cp310-cp310-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "0c2b2437fba42c98a96658189d067dd3",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.10",
            "size": 691171,
            "upload_time": "2025-02-02T23:11:29",
            "upload_time_iso_8601": "2025-02-02T23:11:29.897162Z",
            "url": "https://files.pythonhosted.org/packages/8e/54/9b63ba4f6231680e918892128a49f914eb76790df6d50c5c605412ea0e7d/cysgp4-0.4.0-cp310-cp310-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "31bbb64df373622967849e0d3a6f8664a7f45054c7c9cae870a61e9396be5fbc",
                "md5": "7d0b6288cff5ef463adab8906e65ceaa",
                "sha256": "b1498e474be500dddb2f9c439fe954f6ea579eea506ea34bfbc88230993eb9b4"
            },
            "downloads": -1,
            "filename": "cysgp4-0.4.0-cp311-cp311-macosx_10_13_x86_64.whl",
            "has_sig": false,
            "md5_digest": "7d0b6288cff5ef463adab8906e65ceaa",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.10",
            "size": 738934,
            "upload_time": "2025-02-02T23:08:18",
            "upload_time_iso_8601": "2025-02-02T23:08:18.189226Z",
            "url": "https://files.pythonhosted.org/packages/31/bb/b64df373622967849e0d3a6f8664a7f45054c7c9cae870a61e9396be5fbc/cysgp4-0.4.0-cp311-cp311-macosx_10_13_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "638a640de6c8e9f1e16ef46686c4ce7e2ce809582955c345be4df7ec17a4296d",
                "md5": "a097086d9d79d5e5a8f8ab8ca313553c",
                "sha256": "a2f18f125726d25297df9579b8a7716b27c4489e0828e16a5a6097133b94695a"
            },
            "downloads": -1,
            "filename": "cysgp4-0.4.0-cp311-cp311-manylinux_2_28_x86_64.whl",
            "has_sig": false,
            "md5_digest": "a097086d9d79d5e5a8f8ab8ca313553c",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.10",
            "size": 2600213,
            "upload_time": "2025-02-02T23:09:46",
            "upload_time_iso_8601": "2025-02-02T23:09:46.213515Z",
            "url": "https://files.pythonhosted.org/packages/63/8a/640de6c8e9f1e16ef46686c4ce7e2ce809582955c345be4df7ec17a4296d/cysgp4-0.4.0-cp311-cp311-manylinux_2_28_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "a291feea64494b17f0880e7adaaf0a25b263e29f71257bcb032e7748ebefdab1",
                "md5": "5f6efac8348d4bb7238006d998e8307f",
                "sha256": "9e7170f87b1c169d60d839fb16e0d8e29319657574d0b928c4bfffe8e6753393"
            },
            "downloads": -1,
            "filename": "cysgp4-0.4.0-cp311-cp311-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "5f6efac8348d4bb7238006d998e8307f",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.10",
            "size": 691287,
            "upload_time": "2025-02-02T23:12:06",
            "upload_time_iso_8601": "2025-02-02T23:12:06.920652Z",
            "url": "https://files.pythonhosted.org/packages/a2/91/feea64494b17f0880e7adaaf0a25b263e29f71257bcb032e7748ebefdab1/cysgp4-0.4.0-cp311-cp311-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "f43034a1f0bbc43386e14167bcd85ae7c9ecb86dc0f91e4e910b1d61e6ac5fbf",
                "md5": "ef4fdae1825a8f7c7db0327ae404e6ad",
                "sha256": "f0726c30321e266e70329c65ca38ecc66c812af511a1d96ae2b4243e021b5975"
            },
            "downloads": -1,
            "filename": "cysgp4-0.4.0-cp312-cp312-macosx_10_13_x86_64.whl",
            "has_sig": false,
            "md5_digest": "ef4fdae1825a8f7c7db0327ae404e6ad",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.10",
            "size": 741771,
            "upload_time": "2025-02-02T23:08:26",
            "upload_time_iso_8601": "2025-02-02T23:08:26.294295Z",
            "url": "https://files.pythonhosted.org/packages/f4/30/34a1f0bbc43386e14167bcd85ae7c9ecb86dc0f91e4e910b1d61e6ac5fbf/cysgp4-0.4.0-cp312-cp312-macosx_10_13_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "bb23f97162e0f38b4ee48e1ad278f4370e87eb7fd42f5e142200e9ae57b2e2b6",
                "md5": "241b4d6be5a8a40627d9f16398492e4b",
                "sha256": "fb0fcc4ed822c6577a331f9a7411aee218cd244e36cd9717ff46f559754e7941"
            },
            "downloads": -1,
            "filename": "cysgp4-0.4.0-cp312-cp312-manylinux_2_28_x86_64.whl",
            "has_sig": false,
            "md5_digest": "241b4d6be5a8a40627d9f16398492e4b",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.10",
            "size": 2632881,
            "upload_time": "2025-02-02T23:08:51",
            "upload_time_iso_8601": "2025-02-02T23:08:51.792440Z",
            "url": "https://files.pythonhosted.org/packages/bb/23/f97162e0f38b4ee48e1ad278f4370e87eb7fd42f5e142200e9ae57b2e2b6/cysgp4-0.4.0-cp312-cp312-manylinux_2_28_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "21a693f11894350520a10c5f90ffad1de4402c296dd1e1f314a4e2dcecf0437c",
                "md5": "ee8480a4842126a2522df094ac100691",
                "sha256": "d132e073821691ddbc1f38a926f9ba7ff2e025b2a058c42850cb3a6019a97a73"
            },
            "downloads": -1,
            "filename": "cysgp4-0.4.0-cp312-cp312-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "ee8480a4842126a2522df094ac100691",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.10",
            "size": 689261,
            "upload_time": "2025-02-02T23:12:07",
            "upload_time_iso_8601": "2025-02-02T23:12:07.799932Z",
            "url": "https://files.pythonhosted.org/packages/21/a6/93f11894350520a10c5f90ffad1de4402c296dd1e1f314a4e2dcecf0437c/cysgp4-0.4.0-cp312-cp312-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "6f333baf022b61f80f24995c74effff0f711c34707a6447f3f4538548cd18e26",
                "md5": "815d860a555ac33ab3041cd29e9441cb",
                "sha256": "bb38659db575bddd8aae30c8e1cb8060a278ac06f867b2bd18e1b4ce483d8182"
            },
            "downloads": -1,
            "filename": "cysgp4-0.4.0.tar.gz",
            "has_sig": false,
            "md5_digest": "815d860a555ac33ab3041cd29e9441cb",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.10",
            "size": 955900,
            "upload_time": "2025-02-02T23:09:50",
            "upload_time_iso_8601": "2025-02-02T23:09:50.523248Z",
            "url": "https://files.pythonhosted.org/packages/6f/33/3baf022b61f80f24995c74effff0f711c34707a6447f3f4538548cd18e26/cysgp4-0.4.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-02-02 23:09:50",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "bwinkel",
    "github_project": "cysgp4",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "tox": true,
    "lcname": "cysgp4"
}
        
Elapsed time: 6.21447s