Skip to main content

JyotiPy

PyPI version Python versions License: MIT

Pure-Python Vedic (Jyotish) astrology library. Computes sidereal planetary positions, ascendant, houses, divisional charts, dashas, panchanga, transits, Ashtakavarga, Shadbala, and a conservative set of yogas with zero C extensions or external ephemeris files.

Built as a permissive-license alternative to pyswisseph. All computations use PyMeeus for planetary positions (VSOP87 + ELP2000-82) followed by pure-Python ayanamsa, house, dasha, and strength-system logic. Supports Python 3.8+.

Installation

pip install jyotipy

Or install from source:

git clone https://github.com/AnandShah10/jyotipy.git
cd jyotipy
pip install -e .

Quick Start

from datetime import datetime
from jyotipy import BirthChart, Graha

chart = BirthChart(
    dt=datetime(1990, 6, 15, 14, 32),
    utc_offset_hours=5.5,
    latitude=23.03, longitude=72.58,   # Ahmedabad
)

print(chart.summary())          # sign, degree, nakshatra, pada per graha
print(chart.ascendant)          # sidereal Lagna longitude
print(chart.houses("whole_sign"))
print(chart.varga("D9"))        # Navamsha
print(chart.mahadashas()[:3])   # first 3 Vimshottari mahadashas
print(chart.yogas())
print(chart.panchanga())

New in 0.2

chart.reduced_ashtakavarga(Graha.SUN)                # Bhinnashtakavarga after Trikona + Ekadhipatya Sodhana
chart.transits(datetime(2026, 9, 1, 12, 0), 5.5)     # Gochara + Vedha-aware transit report
chart.sade_sati(datetime(2026, 9, 1, 12, 0), 5.5)    # Sade Sati / Kantaka Sani / Ashtama Sani status
chart.dasha_bhukti_activation(datetime(2026, 9, 1))  # which period lord dominates, via Shadbala
chart.full_shadbala()                                # all six Shadbala components, all 7 planets, Yuddha Bala applied
chart.houses("placidus")                             # or "sripati"

See CHANGELOG.md for the full list of what shipped in 0.2.

What's implemented (v0.2)

Area Status
Tropical planetary positions (Sun, Moon, Mercury-Saturn) Done, via PyMeeus
Rahu/Ketu (mean node default, true node optional) Done
Ayanamsa: Lahiri, True Chitrapaksha, KP-Newcomb, Raman Done -- Raman now independently sourced (397 CE epoch), not a Lahiri offset
Ascendant / Midheaven Done
Houses: Whole Sign, Equal, Porphyry, Placidus, Sripati Done -- see Accuracy notes for two honest caveats
Nakshatra + Pada Done
Divisional charts: all 16 vargas, D1 through D60 Done
Vimshottari Mahadasha + Antardasha Done
Dasha/Bhukti activation weighting (which period lord dominates, via Shadbala comparison) Done
Yogas: Pancha Mahapurusha, Gajakesari, Budhaditya, Chandra-Mangal, Sunapha/Anapha/Durudhara, Kemadruma, Neechabhanga Done, deliberately conservative set
Panchanga: Tithi, Vara, Nakshatra, Nitya Yoga, Karana Done
Ashtakavarga: Bhinnashtakavarga, Sarvashtakavarga, Trikona Sodhana, Ekadhipatya Sodhana Done
Transit/Gochara: good/bad houses from Moon, Vedha, Sade Sati, Ashtakavarga-qualified verdicts Done
Shadbala: all six components (Sthana, Dig, Kala, Chesta, Naisargika, Drik) Done -- see Accuracy notes for two narrow open items

Accuracy notes -- read this before using it for real work

  • Planetary positions: PyMeeus implements full VSOP87 (planets) and ELP2000-82 (Moon), validated in this project against Meeus's own published worked examples. Cross-check a real chart against JHora or astro.com before relying on this for client work.
  • Ayanamsa: Lahiri/KP-Newcomb/True Chitrapaksha are cross-checked against multiple independent public sources and numerically validated against published reference values. Raman is now independently sourced from its own base epoch (397 CE) and precession rate, confirmed by 7 independent sources including B.V. Raman's grandson.
  • Divisional charts: all 16 vargas (D1-D60) are implemented and cross-sourced. D60 specifically has a documented, unresolved disagreement between two classical methods in the wider literature; this implementation uses the one modern software (JHora) actually uses -- see varga.py for the alternate reading.
  • Houses: Whole Sign and Equal House are exact by construction. Porphyry, Placidus, and Sripati are all implemented, but Placidus in particular required unusually extensive debugging -- see houses.py's module comments for the full story if you want to understand exactly what's verified (boundary conditions to numerical precision, universal house-numbering convention against real Swiss Ephemeris output) versus what has no external numeric example to check against (the final 12-cusp output end-to-end). Sripati has one known quirk: for some ordinary, non-polar charts, its House 1 cusp doesn't sit exactly at the true Ascendant, because the real reference algorithm (transcribed directly from Swiss Ephemeris source) includes a swap condition that triggers more broadly than its own documentation suggests.
  • Ashtakavarga: the base bindu tables and both reduction techniques (Trikona/Ekadhipatya Sodhana) are implemented. The base tables are validated against a fully worked B.V. Raman example (all 7 planets plus Sarvashtakavarga matched exactly). The two reductions don't have an external worked example to check against; confidence rests on exhaustive coverage of every documented rule branch in the test suite instead.
  • Shadbala: all six classical components (Sthana, Dig, Kala, Chesta, Naisargika, Drik) are now implemented. Two narrow open items remain: Yuddha Bala's victor rule doesn't implement a secondary "Venus always wins" exception some sources describe, and Drik Bala's formula was reconstructed from a worked reference grid (not a primary text) -- both documented in their respective modules (yuddhabala.py, drikbala.py).
  • Transit/Gochara: the base good/bad-house and Vedha tables are cross-validated against multiple sources and a full worked example. Dasha/Bhukti activation weighting layers Shadbala-based strength judgment on top, per B.V. Raman's own stated method, but doesn't attempt his complete predictive synthesis (house lordships, functional benefic/malefic status, classical yogas).
  • Vimshottari year length: uses 365.25 days/year, a common but not universal convention. Check what a reference tool uses if you need bit-for-bit agreement with it.

Roadmap

  1. Nadi astrology, Prashna (horary), Muhurta (electional), Varshaphal/Tajika (annual charts), Compatibility/Synastry (Guna Milan) -- none started yet
  2. A CLI for the library
  3. Full documentation coverage as new modules are added (currently up to date as of 0.2.0)

License

MIT License (see the LICENSE file in the GitHub repository).

JyotiPy depends on PyMeeus (LGPLv3) as an unmodified runtime dependency. This does not change JyotiPy's own MIT license, but if you vendor or fork PyMeeus itself, the LGPL terms apply to that portion.

Full documentation: https://jyotipy.readthedocs.io

Source code, examples, and issue reports are at the GitHub repository.

Metadata

Release files for jyotipy 0.2.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 jyotipy 0.2.0
File Size Uploaded
jyotipy-0.2.0.tar.gz 73.4 kB Details

Built distribution (wheel)

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

Total release size: 136.6 kB

Release files / jyotipy-0.2.0.tar.gz

Download URL jyotipy-0.2.0.tar.gz
Size 73.4 kB
Tags Source
SHA-256 checksum
How to use checksums
c23295752c18becf55fcdcf59359614387dcbf9dc8b87af00e2d308065d6c1a1
BLAKE2b-256 checksum
How to use checksums
acb06538d47d460e14c35eb0163315a71eb7cc61307c22c500822bca84c83bc5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Sep 11, 2026.

Transparency log

Release files / jyotipy-0.2.0-py3-none-any.whl

Download URL jyotipy-0.2.0-py3-none-any.whl
Size 63.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
5645790cb7e0e74ac633faf6321ffaf9d7514d50fe9ff58bc5a16f15f9eeee9b
BLAKE2b-256 checksum
How to use checksums
27d985bd782803305690719a33c0eed2f028c75d13db7673914706856449d79f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Sep 11, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.2.0 This release

2 release files

0.1.0

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