Skip to main content

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.

Metadata

Release files for mayaastrolib 0.5.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for mayaastrolib 0.5.0
File Size Uploaded
mayaastrolib-0.5.0.tar.gz 5.9 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for mayaastrolib 0.5.0
File Interpreter ABI Platform
mayaastrolib-0.5.0-py3-none-any.whl Python 3 none any Details

Total release size: 11.7 MB

Release files / mayaastrolib-0.5.0.tar.gz

Download URL mayaastrolib-0.5.0.tar.gz
Size 5.9 MB
Tags Source
SHA-256 checksum
How to use checksums
77e8e288e9a901d550e7d99f9f29c8fcc3e87807b3ebfc4a23c262b70fa59a8b
BLAKE2b-256 checksum
How to use checksums
3d0c3b8199b68731ae6c3a3f95111da4ed8e08e84fccde0810a62a199b9419a9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jun 8, 2026.

Transparency log

Release files / mayaastrolib-0.5.0-py3-none-any.whl

Download URL mayaastrolib-0.5.0-py3-none-any.whl
Size 5.8 MB
Tags Python 3
SHA-256 checksum
How to use checksums
56a218f6fff4dbd175aa92f90f34e02f3d294bdf2ce043ade662c11f4eae93fc
BLAKE2b-256 checksum
How to use checksums
cc0ecbfcf585add00680e3e9864cd90f3aae4482d50dbe8645e60dfb39f8fb05
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jun 8, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.5.0 This release

2 release files

0.4.0

2 release files

0.3.2

2 release files

0.3.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page