🌌 solarsystem
solarsystem is a lightweight, dependency-free Python library for computing Solar System positions, Solar-Lunar events, and coordinate transformations.
It is designed for education, visualization, and lightweight astronomical computation, without requiring external ephemeris datasets or heavy scientific dependencies.
Supported Celestial Bodies
- The Sun (our central star)
- All 8 major planets: Mercury, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune
- Dwarf planets: Pluto, Ceres, Eris (with additional bodies planned to be included in future releases)
- Minor bodies: Chiron (Centaur class)
- Natural satellites: Earth's Moon (Luna / Selene)
Features
The library provides tools for:
Planetary Positioning
- Approximate heliocentric positions of planets
- Geocentric positions for Earth-based observations
- Support for dwarf planets and selected minor bodies
Astronomical Events
- Sunrise and sunset times (any Earth location)
- Moonrise and moonset calculations
- Lunar phase and illumination percentage
Coordinate Transformations
- Spherical ↔ Cartesian
- Ecliptic ↔ Equatorial
- Ecliptic ↔ Spherical projections
⚡ Installation
Install directly from PyPI:
pip install solarsystem
Or install from GitHub:
pip install git+https://github.com/IoannisNasios/solarsystem
or
git clone https://github.com/IoannisNasios/solarsystem
cd solarsystem
pip install .
Quick start
import solarsystem
Initialize Heliocentric class
H = solarsystem.Heliocentric(year=2020, month=1, day=1, hour=12, minute=0, precession=True)
Compute position of planets around sun
planets_dict=H.planets()
print('Planet',' \t','Longitude',' \t','Latitude',' \t','Distance in AU')
for planet in planets_dict:
pos=planets_dict[planet]
print(planet,' \t',round(pos[0],2),' \t',round(pos[1],2),' \t',round(pos[2],2))
# Planet Longitude Latitude Distance in AU
# Mercury 263.55 -4.06 0.47
# Venus 4.95 -3.22 0.73
# Earth 100.25 0.0 0.98
# Mars 214.1 0.49 1.59
# Jupiter 275.83 0.1 5.23
# Saturn 292.23 0.05 10.05
# Uranus 35.07 -0.48 19.81
# Neptune 347.74 -1.04 29.91
# Pluto 292.47 -0.67 33.88
# Ceres 290.44 -5.4 2.92
# Chiron 3.86 2.94 18.81
# Eris 23.08 -11.74 96.0
Example Applications
The repository includes Jupyter notebooks:
-
Solar System Live
Real-time planetary visualization and animation
https://github.com/IoannisNasios/solarsystem/blob/master/examples/Solar_System_Live.ipynb -
RiseSet Calendar
https://github.com/IoannisNasios/solarsystem/blob/master/examples/RiseSet_Calendar.ipynb
Yearly calendar of:- sunrise / sunset
- moonrise / moonset
- lunar illumination
🌀 Precession Support (v0.1.6+)
Starting from version 0.1.6, the library includes an optional precession of the equinoxes correction.
- Default:
precession=True - Can be disabled:
precession=False
Why this matters:
- Improves long-term coordinate consistency
- Reduces systematic longitude drift across epochs
- Allows both:
- modern ephemeris-style calculations
- fixed-frame educational mode
📊 Accuracy and Validation
To evaluate numerical performance, the library was compared against JPL DE440 ephemerides.
Summary of results:
- Mean longitude error: << 1° (mean absolute error ~0.007°)
- Mean latitude error: ~0.002°
- Mean distance error: ~0.05 AU
- Lunar illumination error: ~0.8%
- Moonrise / Moonset timing difference: ~12 minutes
Full results and figures are included in the accompanying research paper.
These results indicate that solarsystem achieves adequate calculations for various use cases, while maintaining a lightweight computational design.
📚 Documentation
Full documentation is available at:
https://solarsystem.readthedocs.io
Build documentation locally
pip install sphinx
cd docs
make html
Open _build/html/index.html in browser.
Requirements
Core package:
No external dependencies
Optional:
matplotlib → for visualization notebooks
pytest, numpy → for running tests
matplotlib, skyfield → for performance evaluation notebooks
Python Support
Tested on:
Python 3.4+
Python 2.7 (legacy support)
Newer Python versions are recommended for best performance and compatibility.
📖 Citing
If you use this library in your work, please cite:
@misc{Nasios:2020,
Author = {Ioannis Nasios},
Title = {solarsystem},
Year = {2020},
Publisher = {GitHub},
Journal = {GitHub repository},
Howpublished = {\url{https://github.com/IoannisNasios/solarsystem}}
}
License
MIT License ©
Metadata
Release files for solarsystem 0.1.8
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| solarsystem-0.1.8.tar.gz | 25.0 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| solarsystem-0.1.8-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 44.4 kB
Release files / solarsystem-0.1.8.tar.gz
| Download URL | solarsystem-0.1.8.tar.gz |
|---|---|
| Size | 25.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
abfea31f64d16584e7c4456d5a6f8c8d3a7958a07ab92ebb36986077340bc2c9
|
|
BLAKE2b-256 checksum How to use checksums |
e9d59b75097e0485e07a2a0eb5f4029eba7bbd5ead40cc04aa4aa5c915789401
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.8.10
|
Release files / solarsystem-0.1.8-py3-none-any.whl
| Download URL | solarsystem-0.1.8-py3-none-any.whl |
|---|---|
| Size | 19.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
78c4e13fe09e083b61a4f34cfb497f266ef9f253efe6d0d2fec2756bf4e5779a
|
|
BLAKE2b-256 checksum How to use checksums |
7c8cc204717d7de4473b170070258bad4291546fd7a808522217cf4d37cd2339
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.8.10
|
Security for solarsystem 0.1.8
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.