From 8d9d60c75ea152a49bdbbac985ce387a05b56f9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Doubravsk=C3=BD?= Date: Wed, 22 Apr 2026 11:27:07 +0200 Subject: [PATCH] Add Body.EARTH with Luna moon and switch Body indexing to 1-based --- CHANGELOG.md | 12 ++++++++++++ pyproject.toml | 2 +- src/planetarytime/_data.py | 2 ++ src/planetarytime/body.py | 7 +++++-- src/planetarytime/moon.py | 1 + 5 files changed, 21 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a4c60cb..d1d33fa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,18 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [1.3.1] - 2026-04-22 + +### Added + +- `Body.EARTH` enum value with `rotation_hours = 23.934`, `orbital_hours = 8766.0`, discovery epoch 1543-01-01 (Copernicus), contact epoch 1969-07-20 (Apollo 11) +- `Luna` moon (Earth's Moon): tidally locked, `rotation_hours = orbital_hours = 655.72`, discovery epoch 1609-11-01 (Galileo), contact epoch 1969-07-20 (Apollo 11) +- `LUNA` constant exported from `moon.py` + +### Changed + +- `Body.__getitem__` now uses 1-based indexing — `Body.MARS[1]` returns Phobos, `Body.MARS[2]` returns Deimos + ## [1.3.0] - 2026-04-21 ### Added diff --git a/pyproject.toml b/pyproject.toml index 77feec7..892b704 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "planetarytime" -version = "1.3.0" +version = "1.3.1" description = "Python library for representing and working with time on other bodies in the Solar System" authors = [ {name = "Jan Doubravský", email = "jan.doubravsky@gmail.com"} diff --git a/src/planetarytime/_data.py b/src/planetarytime/_data.py index 2883e0e..97fe987 100644 --- a/src/planetarytime/_data.py +++ b/src/planetarytime/_data.py @@ -5,6 +5,7 @@ from datetime import date PLANET_ROWS: list[tuple[str, float, float, date, date | None]] = [ ('Mercury' , 1407.600, 2111.2800, date(1631, 11, 7), date(2011, 3, 18)), ('Venus' , 5832.500, 5392.8000, date(1610, 1, 1), date(1970, 12, 15)), + ('Earth' , 23.934, 8766.0000, date(1543, 1, 1), date(1969, 7, 20)), ('Mars' , 24.600, 16487.2800, date(1610, 1, 1), date(1976, 7, 20)), ('Jupiter' , 9.900, 103982.1600, date(1610, 1, 7), None), ('Saturn' , 10.700, 258221.2800, date(1610, 7, 25), None), @@ -14,6 +15,7 @@ PLANET_ROWS: list[tuple[str, float, float, date, date | None]] = [ # (name, rotation_hours, orbital_hours, is_tidally_locked, discovery_date, contact_date | None) MOON_ROWS: list[tuple[str, float, float, bool, date, date | None]] = [ + ('Luna' , 655.720, 655.720, True , date(1609, 11, 1), date(1969, 7, 20)), ('Phobos' , 7.653, 7.653, True , date(1877, 8, 18), None), ('Deimos' , 30.312, 30.312, True , date(1877, 8, 12), None), ('Io' , 42.456, 42.456, True , date(1610, 1, 8), None), diff --git a/src/planetarytime/body.py b/src/planetarytime/body.py index add1ec4..ff6b924 100644 --- a/src/planetarytime/body.py +++ b/src/planetarytime/body.py @@ -11,6 +11,7 @@ from planetarytime.moon import ( EUROPA, GANYMEDE, IO, + LUNA, MIRANDA, Moon, OBERON, @@ -27,6 +28,7 @@ class Body(Enum): MERCURY = "Mercury" VENUS = "Venus" + EARTH = "Earth" MARS = "Mars" JUPITER = "Jupiter" SATURN = "Saturn" @@ -58,8 +60,8 @@ class Body(Enum): return self.value def __getitem__(self, index: int) -> Moon: - """Return the moon at the given index for this body.""" - return _MOONS[self][index] + """Return the moon at the given 1-based index for this body.""" + return _MOONS[self][index - 1] _ROTATION_HOURS: dict[Body, float] = { @@ -74,6 +76,7 @@ _ORBITAL_HOURS: dict[Body, float] = { _MOONS: dict[Body, list[Moon]] = { Body.MERCURY: [], Body.VENUS: [], + Body.EARTH: [LUNA], Body.MARS: [PHOBOS, DEIMOS], Body.JUPITER: [IO, EUROPA, GANYMEDE, CALLISTO], Body.SATURN: [TITAN, ENCELADUS], diff --git a/src/planetarytime/moon.py b/src/planetarytime/moon.py index aaa8fc5..722560a 100644 --- a/src/planetarytime/moon.py +++ b/src/planetarytime/moon.py @@ -56,6 +56,7 @@ _MOONS_BY_NAME: dict[str, Moon] = { row[0]: _make_moon(*row) for row in MOON_ROWS } +LUNA = _MOONS_BY_NAME["Luna"] PHOBOS = _MOONS_BY_NAME["Phobos"] DEIMOS = _MOONS_BY_NAME["Deimos"] IO = _MOONS_BY_NAME["Io"]