Skip to main content

Python library for Traditional and Vedic Astrology (fork of flatangle/flatlib)

Project description

mayaastrolib

A modern, typed, unified Western + Vedic astrology engine for Python 3.10+.

PyPI Python License: MIT

mayaastrolib is a Python library for Traditional (Hellenistic/Western) and Vedic (Jyotisha) astrology, computed on the Swiss Ephemeris. It is a thoroughly modernised, heavily extended fork of flatangle/flatlib (MIT, unmaintained in practice since 2024).

Original copyright © João Ventura, MIT licensed. Fork modifications © Rangan C., 2026. See docs/FORK-RATIONALE.md for why this fork exists.

from mayaastrolib import const
from mayaastrolib.chart import Chart
from mayaastrolib.datetime import Datetime
from mayaastrolib.geopos import GeoPos

date = Datetime('2015/03/13', '17:00', '+00:00')
pos = GeoPos('38n32', '8w54')
chart = Chart(date, pos)

sun = chart.get(const.SUN)
print(sun)
# <Sun Pisces +22:47:25 +00:59:51>

What this fork adds over flatlib

flatlib is an excellent traditional-astrology core, but it stopped at Python-2-era packaging, had no type hints, ~34% test coverage, and no sidereal/Vedic support. mayaastrolib keeps the calculation core's correctness and rebuilds everything around it:

🪔 A complete Vedic (Jyotisha) subsystem — new, ~3,600 LOC, 12 modules

flatlib is tropical-only. mayaastrolib adds a full sidereal engine behind one switch (Chart(zodiac=const.ZODIAC_SIDEREAL, ayanamsa=const.AYANAMSA_LAHIRI)):

Module What it computes
vedic.ayanamsa Lahiri, Krishnamurti (KP), Raman, Fagan-Bradley
vedic.nakshatras 27 nakshatras, lords, padas, tarabala
vedic.divisional all 16 BPHS divisional charts (D1–D60 / Shodashavarga)
vedic.dasha Vimshottari Mahadasha / Antardasha / Pratyantardasha
vedic.ashtakavarga BAV/SAV (337-bindu system), prastara, trikona/ekadhipatya shodhana, kakshya
vedic.yogas Pancha Mahapurusha, Raja, Dhana, Vipareeta, Neecha-Bhanga, Gaja-Kesari, lesser yogas + strength scoring
vedic.sadesati Sade Sati phases + small-panoti (ashtama/kantaka shani)
vedic.upagrahas Sun-derived upagrahas + Gulika/Mandi
vedic.tajika (+_bala, _aspects) annual charts (Varshaphala), Mudda dasha, Sahams, Harsha/Panchavargiya Bala, Ithasala/Isharafa/Nakta
vedic.kp Krishnamurti Paddhati — 249-row sub-lord table, sub-sub-lord, horary, Ruling Planets

⚙️ Modern engineering — the whole codebase brought to current standards

  • Python 3.10+ baseline (3.12 target); all Python-2 compatibility code removed.
  • Type hints rolling out across the public API (geopos, datetime done; core classes in progress).
  • Modern packaging — single pyproject.toml (PEP 621); setup.py, requirements.txt, and README.rst deleted.
  • ruff format + lint (clean across 121 files) and mypy in CI.
  • CI — GitHub Actions matrix on Python 3.10 / 3.11 / 3.12.

🧪 Real correctness guarantees — coverage 34% → 94%

  • 553 tests (+87 subtests), all passing, 94% coverage (80% CI floor).
  • Golden tests anchor planet positions against Skyfield — an independent ephemeris — at ±2 arc-minutes for reference charts (Einstein, Kahlo, Amundsen), plus astronomical-invariant suites (houses sum to 360°, cusps ordered, etc.).

✨ API ergonomics & correctness fixes

  • Chart.houseOf(), Chart.objectsInHouse(), Object.house, House.objects (object↔house links).
  • Datetime.from_pydatetime() / .now() / .to_pydatetime().
  • Immutable Object.with_longitude(), Chart.profected(), zodiac-aware Chart.solarReturn().
  • GeoPos now validates latitude/longitude ranges instead of silently producing a wrong chart.
  • Thread-safe sidereal calculation (lock-guarded Swiss-Ephemeris global state).
  • Eclipse-keyword bug fixed for pyswisseph 2.x; fixed-star magnitude lookups cached (144× speedup).

See CHANGELOG.md for the full task-by-task history.


Development & provenance

Most of the fork's commits — the entire Vedic subsystem, the modernisation, and the test suite — were authored through Claude Code (Anthropic's agentic CLI), with minimal line-by-line human review of individual diffs.

That makes the test discipline the load-bearing part of this project, by design — correctness is verified, not taken on trust:

  • Structural tests pin every public function's contract (553 tests, 94% coverage).
  • Golden tests anchor the astronomical output against Skyfield — a completely independent ephemeris — at ±2 arc-minutes for known reference charts, so a wrong calculation fails CI rather than shipping silently.
  • The library is exercised in real applications (the mayaastro.com lunar site and its local demo), which surfaces integration issues that unit tests don't.

In other words: the code is AI-generated, but the behaviour is held to an independent, reproducible, real-world standard. Classical-technique simplifications (e.g. yoga strength using accidental dignity rather than full Shadbala) are documented honestly in CHANGELOG.md and docs/PROJECT-LOG.md rather than hidden.


Documentation

Start here:

The original flatlib API documentation is largely still applicable — substitute flatlib with mayaastrolib in import paths.

Installation

mayaastrolib requires Python 3.10 or later:

pip install mayaastrolib

The only runtime dependency is pyswisseph (Swiss Ephemeris). To install from source instead (e.g. for development), see the Development section below.

Migrating from flatlib

mayaastrolib ships a compatibility shim: existing import flatlib and from flatlib.x import Y calls keep working but emit a DeprecationWarning. Update imports to mayaastrolib at your convenience; the shim is removed in version 1.0.

Development

git clone https://github.com/ranganc007/mayaastrolib.git
cd mayaastrolib
pip install -e ".[dev]"
pytest
ruff check . && ruff format --check . && mypy mayaastrolib/

Licensing

mayaastrolib is MIT-licensed (preserving flatlib's original copyright chain). It depends on pyswisseph (LGPL) and the Swiss Ephemeris data, which is GPL / commercial dual-licensed — if you ship mayaastrolib in a closed-source product you must comply with the Swiss Ephemeris GPL terms or hold a commercial Swiss Ephemeris licence. See LICENSING.md.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mayaastrolib-0.5.0.tar.gz (5.9 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mayaastrolib-0.5.0-py3-none-any.whl (5.8 MB view details)

Uploaded Python 3

File details

Details for the file mayaastrolib-0.5.0.tar.gz.

File metadata

  • Download URL: mayaastrolib-0.5.0.tar.gz
  • Upload date:
  • Size: 5.9 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for mayaastrolib-0.5.0.tar.gz
Algorithm Hash digest
SHA256 77e8e288e9a901d550e7d99f9f29c8fcc3e87807b3ebfc4a23c262b70fa59a8b
MD5 eb55f03c0b5bf935cf65448ddc6e2e50
BLAKE2b-256 3d0c3b8199b68731ae6c3a3f95111da4ed8e08e84fccde0810a62a199b9419a9

See more details on using hashes here.

Provenance

The following attestation bundles were made for mayaastrolib-0.5.0.tar.gz:

Publisher: publish.yml on ranganc007/mayaastrolib

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mayaastrolib-0.5.0-py3-none-any.whl.

File metadata

  • Download URL: mayaastrolib-0.5.0-py3-none-any.whl
  • Upload date:
  • Size: 5.8 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for mayaastrolib-0.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 56a218f6fff4dbd175aa92f90f34e02f3d294bdf2ce043ade662c11f4eae93fc
MD5 05a5587bac3976d240fa8b2ebcb0d595
BLAKE2b-256 cc0ecbfcf585add00680e3e9864cd90f3aae4482d50dbe8645e60dfb39f8fb05

See more details on using hashes here.

Provenance

The following attestation bundles were made for mayaastrolib-0.5.0-py3-none-any.whl:

Publisher: publish.yml on ranganc007/mayaastrolib

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page