JyotiPy
Pure-Python Vedic (Jyotish) astrology library. Computes sidereal planetary positions, ascendant, houses, vargas, dashas, panchanga, 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, and yoga 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.chart import BirthChart
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())
Features
- Planetary positions: Sun–Saturn + Rahu/Ketu (mean node default; true node optional) using PyMeeus (VSOP87/ELP2000)
- Ayanamsa: Lahiri (default), True Chitrapaksha, KP-Newcomb, Raman
- Lagna & Houses: Whole-sign, Equal, Porphyry (Placidus and Sripati planned)
- Nakshatras: With pada and full support
- Divisional charts (Vargas): D1–D12 fully implemented using standard rules; D16+ raise
NotImplementedError(see Accuracy Notes) - Dashas: Vimshottari Mahadasha and Antardasha
- Yogas: Deliberately conservative core set (see
jyotipy.yogasfor details):- Pancha Mahapurusha (Ruchaka, Bhadra, Hamsa, Malavya, Sasa)
- Gajakesari, Budhaditya (Sun-Mercury), Chandra-Mangal (Moon-Mars)
- Sunapha, Anapha, Durudhara, Kemadruma (raw), Neechabhanga candidates
- Note: Many classical cancellation rules and variant definitions are not auto-applied; results are candidates for further analysis.
- Panchanga: Tithi, Vara, Nakshatra, Nitya Yoga, Karana
Accuracy Notes
- Planetary positions: PyMeeus implements full VSOP87 (planets) and ELP2000-82 (Moon), validated in this project against Meeus's own published worked examples. Expect arcsecond-to-sub-arcminute agreement with Swiss Ephemeris for the modern era. Not independently verified against Swiss Ephemeris output in this repo (no network access to fetch a reference dataset during development) — cross-check a real chart against JHora or astro.com before relying on this for client work.
- Ayanamsa: Lahiri/KP-Newcomb/True Chitrapaksha base epochs and rates are cross-checked against multiple independent public sources and numerically validated to match published 2026 reference values to ~0.01°. Raman is implemented as a calibrated offset from Lahiri rather than an independently derived base epoch — verify separately if your work is Raman-tradition-specific.
- Divisional charts D16 and beyond: deliberately not implemented. Their classical starting-sign rules vary across source texts and are easy to misremember in ways that silently produce wrong charts. D1 through D12 (the most commonly used divisions in practice, including Navamsha and Dashamsha) are implemented and use unambiguous, widely agreed rules.
- Kemadruma and Neechabhanga: both have several classical
cancellation (bhanga) conditions in the source texts; only the single
most commonly cited primary condition is checked for each. A
True/ candidate result means "the raw combination is present, worth checking further" — not a final verdict. - Vimshottari year length: uses 365.25 days/year, a common but not universal convention. If you need bit-for-bit agreement with a specific tool, check what year length it uses.
Roadmap
- D16–D60 divisional charts (requires careful primary-source verification)
- Placidus and true Sripati house systems
- Ashtakavarga
- Gochara (transit) analysis
- Shadbala (planetary strength calculations)
- Optional high-precision backend using JPL DE440 via
skyfield
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.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| jyotipy-0.1.0.tar.gz | 24.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| jyotipy-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 49.0 kB
Release files / jyotipy-0.1.0.tar.gz
| Download URL | jyotipy-0.1.0.tar.gz |
|---|---|
| Size | 24.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f6df400f3bdd7d8b271ce26b73477da6aa5b2535a9c5b253b25c5bf5ef7b251d
|
|
BLAKE2b-256 checksum How to use checksums |
e9528d4272a0330eeed4fa7d822af8c2ae40a88446b19765cd0150cbaa8a8206
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.11.9
|
Release files / jyotipy-0.1.0-py3-none-any.whl
| Download URL | jyotipy-0.1.0-py3-none-any.whl |
|---|---|
| Size | 24.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
c09b75ff518147c61d4d8de42009ae3f9b445c443e6b20d12d3161c49cedbded
|
|
BLAKE2b-256 checksum How to use checksums |
b258209d5657208368a8695b808caa16f32cb6ee260a82a2152a27a2f60ebe04
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.11.9
|