25/08/2000
18:32
Shirpur maharashtra
Kundali
Calculate a detailed Vedic astrology Kundali (birth chart) for the following birth details: - Date of Birth: 25 August 2000 - Time of Birth: 18:32 (6:32 PM IST) - Place of Birth: Shirpur, Maharashtra, India - Latitude: 21.35° N - Longitude: 74.88° E - Timezone: IST (UTC +5:30) Please calculate and return ALL of the following using standard Vedic astrology (Lahiri ayanamsha): 1. **Lagna (Ascendant)** - which rashi and degree 2. **Planetary positions** - for all 9 grahas (Sun, Moon, Mars, Mercury, Jupiter, Venus, Saturn, Rahu, Ketu) - include the rashi (sign), house, and degree for each 3. **Nakshatra** - birth nakshatra (Janma Nakshatra), pada, and nakshatra lord 4. **Rashi** (Moon sign) and **Rashi lord** 5. **Lagna lord** 6. **Vimshottari Dasha** - current dasha, antardasha, and pratyantardasha as of May 1, 2026 7. **Navamsa (D9) chart** - planetary positions in navamsa 8. **Panchang details** for the birth date: - Tithi - Vara (weekday) - Yoga - Karana 9. **Basic personality traits** based on Lagna and Moon sign 10. **Current planetary period interpretation** (what the current dasha means) Use precise astronomical calculations. Show all working where possible. Return a comprehensive, well-formatted response.
pip install ephem pyswisseph 2>/dev/null | tail -3; python3 -c "import swisseph; print('swisseph OK')" 2>/dev/null || echo "no swisseph"; python3 -c "import ephem; print('ephem OK')" 2>/dev/null || echo "no ephem"
/home/daytona/kundali_calc.py
#!/usr/bin/env python3
"""
Vedic Astrology Kundali Calculator
Birth: 25 August 2000, 18:32 IST, Shirpur, Maharashtra, India
Lat: 21.35N, Lon: 74.88E, TZ: UTC+5:30
Using Swiss Ephemeris with Lahiri (Chitrapaksha) Ayanamsha
"""
import swisseph as swe
import math
from datetime import datetime, timedelta
# ─────────────────────────────────────────────
# 1. BIRTH DATA
# ─────────────────────────────────────────────
birth_year = 2000
birth_month = 8
birth_day = 25
birth_hour = 18
birth_min = 32
birth_sec = 0
lat = 21.35 # N
lon = 74.88 # E
tz_offset = 5.5 # IST = UTC+5:30
# Convert birth time to UTC
birth_ut_h = birth_hour + birth_min/60.0 + birth_sec/3600.0 - tz_offset
# If that goes negative it means previous day – handle:
birth_day_ut = birth_day
birth_month_ut= birth_month
birth_year_ut = birth_year
if birth_ut_h < 0:
birth_ut_h += 24
birth_day_ut -= 1 # simplify, same day here
print(f"Birth UTC time: {birth_year_ut}-{birth_month_ut:02d}-{birth_day_ut:02d} {int(birth_ut_h):02d}:{int((birth_ut_h%1)*60):02d} UTC")
# Julian Day Number (UT)
jd_ut = swe.julday(birth_year_ut, birth_month_ut, birth_day_ut, birth_ut_h)
print(f"Julian Day (UT): {jd_ut:.6f}")
# ─────────────────────────────────────────────
# 2. AYANAMSHA (Lahiri / Chitrapaksha)
# ─────────────────────────────────────────────
swe.set_sid_mode(swe.SIDM_LAHIRI)
ayanamsha = swe.get_ayanamsa(jd_ut)
print(f"\nLahiri Ayanamsha: {ayanamsha:.6f}°")
print(f" = {int(ayanamsha)}° {int((ayanamsha%1)*60):02d}' {int(((ayanamsha%1)*60%1)*60):02d}\"")
# ─────────────────────────────────────────────
# 3. PLANET POSITIONS (Tropical → Sidereal)
# ─────────────────────────────────────────────
PLANETS = {
'Sun': swe.SUN,
'Moon': swe.MOON,
'Mars': swe.MARS,
'Mercury': swe.MERCURY,
'Jupiter': swe.JUPITER,
'Venus': swe.VENUS,
'Saturn': swe.SATURN,
'Rahu': swe.MEAN_NODE, # True Rahu (North Node)
}
RASHIS = ['Aries','Taurus','Gemini','Cancer','Leo','Virgo',
'Libra','Scorpio','Sagittarius','Capricorn','Aquarius','Pisces']
RASHI_SHORT = ['Ar','Ta','Ge','Ca','Le','Vi','Li','Sc','Sg','Cp','Aq','Pi']
def tropical_to_sidereal(trop_lon, ayanamsha):
sid = (trop_lon - ayanamsha) % 360
return sid
def deg_to_dms(d):
deg = int(d)
m = int((d - deg) * 60)
s = ((d - deg) * 60 - m) * 60
return deg, m, s
def sidereal_to_rashi_deg(sid_lon):
rashi_num = int(sid_lon / 30) # 0-11
deg_in_rashi = sid_lon % 30
return rashi_num, deg_in_rashi
planet_data = {}
print("\n" + "="*70)
print("SIDEREAL PLANETARY POSITIONS (Lahiri Ayanamsha)")
print("="*70)
print(f"{'Planet':<10} {'Trop Lon':>10} {'Sid Lon':>10} {'Rashi':<14} {'Deg in Sign':>12} {'Retro':>6}")
print("-"*70)
flags = swe.FLG_SWIEPH | swe.FLG_SPEED
for planet_name, planet_id in PLANETS.items():
result = swe.calc_ut(jd_ut, planet_id, flags)
trop_lon = result[0][0]
speed = result[0][3]
retro = speed < 0
sid_lon = tropical_to_sidereal(trop_lon, ayanamsha)
rashi_num, deg_in_rashi = sidereal_to_rashi_deg(sid_lon)
d,m,s = deg_to_dms(deg_in_rashi)
planet_data[planet_name] = {
'trop_lon': trop_lon,
'sid_lon': sid_lon,
'rashi_num': rashi_num,
'rashi': RASHIS[rashi_num],
'deg_in_rashi': deg_in_rashi,
'dms': (d,m,round(s,1)),
'retro': retro,
'speed': speed
}
retro_str = "R" if retro else ""
print(f"{planet_name:<10} {trop_lon:>10.4f}° {sid_lon:>10.4f}° {RASHIS[rashi_num]:<14} {d:>2}°{m:02d}'{s:04.1f}\" {retro_str:>6}")
# Ketu = Rahu + 180
rahu_sid = planet_data['Rahu']['sid_lon']
ketu_sid = (rahu_sid + 180) % 360
ketu_rashi_num, ketu_deg = sidereal_to_rashi_deg(ketu_sid)
d,m,s = deg_to_dms(ketu_deg)
planet_data['Ketu'] = {
'sid_lon': ketu_sid,
'rashi_num': ketu_rashi_num,
'rashi': RASHIS[ketu_rashi_num],
'deg_in_rashi': ketu_deg,
'dms': (d,m,round(s,1)),
'retro': True, # nodes always retrograde
'speed': 0
}
print(f"{'Ketu':<10} {'(Rahu+180)':>10} {ketu_sid:>10.4f}° {RASHIS[ketu_rashi_num]:<14} {d:>2}°{m:02d}'{s:04.1f}\" {'R':>6}")
# ─────────────────────────────────────────────
# 4. LAGNA (ASCENDANT)
# ─────────────────────────────────────────────
print("\n" + "="*70)
print("LAGNA (ASCENDANT)")
print("="*70)
# Compute houses using Placidus (or Equal) — for Vedic we use Whole Sign typically
# but let's get the exact Ascendant degree first
cusps, ascmc = swe.houses(jd_ut, lat, lon, b'P') # P = Placidus
trop_asc = ascmc[0]
sid_asc = tropical_to_sidereal(trop_asc, ayanamsha)
lagna_rashi_num, lagna_deg = sidereal_to_rashi_deg(sid_asc)
d,m,s = deg_to_dms(lagna_deg)
lagna_rashi = RASHIS[lagna_rashi_num]
print(f"Tropical ASC: {trop_asc:.4f}°")
print(f"Sidereal ASC: {sid_asc:.4f}°")
print(f"Lagna Rashi: {lagna_rashi} ({d}°{m:02d}'{s:.1f}\")")
# Lagna lords
RASHI_LORDS = {
'Aries':'Mars','Taurus':'Venus','Gemini':'Mercury','Cancer':'Moon',
'Leo':'Sun','Virgo':'Mercury','Libra':'Venus','Scorpio':'Mars',
'Sagittarius':'Jupiter','Capricorn':'Saturn','Aquarius':'Saturn','Pisces':'Jupiter'
}
lagna_lord = RASHI_LORDS[lagna_rashi]
print(f"Lagna Lord: {lagna_lord}")
# ─────────────────────────────────────────────
# 5. HOUSE POSITIONS (Whole Sign system — standard Vedic)
# ─────────────────────────────────────────────
print("\n" + "="*70)
print("HOUSE POSITIONS (Whole Sign System)")
print("="*70)
# In Whole Sign: House 1 = Lagna rashi, House 2 = next rashi, etc.
def get_house_whole_sign(planet_rashi_num, lagna_rashi_num):
house = (planet_rashi_num - lagna_rashi_num) % 12 + 1
return house
print(f"\nLagna (1st House) = {lagna_rashi}")
print(f"\n{'Planet':<10} {'Rashi':<14} {'House':>6} {'Degrees':<16} {'Retro':>6}")
print("-"*55)
all_planets_order = ['Sun','Moon','Mars','Mercury','Jupiter','Venus','Saturn','Rahu','Ketu']
for p in all_planets_order:
pd = planet_data[p]
house = get_house_whole_sign(pd['rashi_num'], lagna_rashi_num)
d,m,s = pd['dms']
retro_str = "R" if pd.get('retro', False) else ""
print(f"{p:<10} {pd['rashi']:<14} {house:>6} {d:>2}°{m:02d}'{s:4.1f}\" {retro_str:>6}")
planet_data_with_houses = {}
for p in all_planets_order:
pd = planet_data[p]
house = get_house_whole_sign(pd['rashi_num'], lagna_rashi_num)
planet_data_with_houses[p] = house
# ─────────────────────────────────────────────
# 6. NAKSHATRA
# ─────────────────────────────────────────────
print("\n" + "="*70)
print("NAKSHATRA DETAILS")
print("="*70)
NAKSHATRAS = [
'Ashwini','Bharani','Krittika','Rohini','Mrigashira','Ardra',
'Punarvasu','Pushya','Ashlesha','Magha','Purva Phalguni','Uttara Phalguni',
'Hasta','Chitra','Swati','Vishakha','Anuradha','Jyeshtha',
'Moola','Purva Ashadha','Uttara Ashadha','Shravana','Dhanishtha','Shatabhisha',
'Purva Bhadrapada','Uttara Bhadrapada','Revati'
]
NAKSHATRA_LORDS = [
'Ketu','Venus','Sun','Moon','Mars','Rahu',
'Jupiter','Saturn','Mercury','Ketu','Venus','Sun',
'Moon','Mars','Rahu','Jupiter','Saturn','Mercury',
'Ketu','Venus','Sun','Moon','Mars','Rahu',
'Jupiter','Saturn','Mercury'
]
# Each nakshatra = 13°20' = 13.3333°
# Nakshatra number from Moon sidereal longitude
moon_sid = planet_data['Moon']['sid_lon']
nak_num_float = moon_sid / (360/27) # 0-26.999
nak_num = int(nak_num_float) # 0-indexed
nak_frac = nak_num_float - nak_num
pada = int(nak_frac * 4) + 1 # 1-4
nak_name = NAKSHATRAS[nak_num]
nak_lord = NAKSHATRA_LORDS[nak_num]
nak_deg_span = 360 / 27 # 13.3333...
deg_in_nak = (moon_sid % nak_deg_span)
d,m,s = deg_to_dms(deg_in_nak)
print(f"Moon Sidereal Longitude: {moon_sid:.4f}°")
print(f"Janma Nakshatra: {nak_name} (Nakshatra #{nak_num+1})")
print(f"Pada: {pada}")
print(f"Nakshatra Lord: {nak_lord}")
print(f"Degree in Nak: {d}°{m:02d}'{s:.1f}\"")
# Moon sign (Rashi)
moon_rashi_num = planet_data['Moon']['rashi_num']
moon_rashi = planet_data['Moon']['rashi']
moon_rashi_lord= RASHI_LORDS[moon_rashi]
print(f"\nJanma Rashi (Moon Sign): {moon_rashi}")
print(f"Rashi Lord: {moon_rashi_lord}")
# ─────────────────────────────────────────────
# 7. VIMSHOTTARI DASHA
# ─────────────────────────────────────────────
print("\n" + "="*70)
print("VIMSHOTTARI DASHA")
print("="*70)
# Dasha sequence & years
DASHA_LORDS = ['Ketu','Venus','Sun','Moon','Mars','Rahu','Jupiter','Saturn','Mercury']
DASHA_YEARS = {'Ketu':7,'Venus':20,'Sun':6,'Moon':10,'Mars':7,'Rahu':18,'Jupiter':16,'Saturn':19,'Mercury':17}
DASHA_TOTAL = 120 # years
# Birth nakshatra lord starts the dasha
birth_nak_lord = nak_lord
start_index = DASHA_LORDS.index(birth_nak_lord)
# Elapsed portion in birth nakshatra
elapsed_fraction = nak_frac # fraction of nakshatra already traversed
start_dasha_years= DASHA_YEARS[birth_nak_lord]
# Time already elapsed in this dasha at birth:
elapsed_in_dasha = elapsed_fraction * start_dasha_years # years
remaining_in_first_dasha = start_dasha_years - elapsed_in_dasha
print(f"\nBirth Nakshatra: {nak_name}, Lord: {birth_nak_lord}")
print(f"Fraction elapsed in nakshatra at birth: {elapsed_fraction:.6f}")
print(f"Elapsed in {birth_nak_lord} Dasha at birth: {elapsed_in_dasha:.4f} years")
print(f"Remaining in {birth_nak_lord} Dasha from birth: {remaining_in_first_dasha:.4f} years")
from datetime import date
birth_date = date(2000, 8, 25)
def add_years_decimal(d, years_decimal):
"""Add decimal years to a date."""
total_days = years_decimal * 365.25
return d + timedelta(days=total_days)
# Build full dasha table
print(f"\n{'#':<3} {'Dasha Lord':<12} {'Start Date':<14} {'End Date':<14} {'Years':>6}")
print("-"*55)
dasha_table = []
current_date = birth_date
for i in range(9):
idx = (start_index + i) % 9
lord = DASHA_LORDS[idx]
years = DASHA_YEARS[lord]
if i == 0:
yrs = remaining_in_first_dasha
start_d = birth_date
else:
yrs = years
start_d = prev_end
end_d = add_years_decimal(start_d, yrs)
dasha_table.append({'lord': lord, 'start': start_d, 'end': end_d, 'years': yrs})
print(f"{i+1:<3} {lord:<12} {start_d.strftime('%d %b %Y'):<14} {end_d.strftime('%d %b %Y'):<14} {yrs:>6.3f}")
prev_end = end_d
# Find current Mahadasha as of May 1 2026
target_date = date(2026, 5, 1)
print(f"\nTarget Date: {target_date}")
current_maha = None
for d_entry in dasha_table:
if d_entry['start'] <= target_date < d_entry['end']:
current_maha = d_entry
break
if current_maha:
print(f"\nCurrent Mahadasha: {current_maha['lord']}")
print(f" From: {current_maha['start']} To: {current_maha['end']}")
else:
print("Target date outside calculated range — extending table.")
# Try next cycle
last_end = dasha_table[-1]['end']
idx_cont = (start_index + 9) % 9
for i in range(9):
idx = (idx_cont + i) % 9
lord = DASHA_LORDS[idx]
years = DASHA_YEARS[lord]
start_d = last_end
end_d = add_years_decimal(start_d, years)
dasha_table.append({'lord': lord, 'start': start_d, 'end': end_d, 'years': years})
if start_d <= target_date < end_d:
current_maha = {'lord': lord, 'start': start_d, 'end': end_d}
print(f"\nCurrent Mahadasha: {lord}")
print(f" From: {start_d} To: {end_d}")
break
last_end = end_d
# ─── Antardasha (Bhukti) ───
print("\n--- ANTARDASHAS within current Mahadasha ---")
maha_lord = current_maha['lord']
maha_start = current_maha['start']
maha_end = current_maha['end']
maha_total_years = (maha_end - maha_start).days / 365.25
maha_idx = DASHA_LORDS.index(maha_lord)
antar_table = []
a_start = maha_start
print(f"\n{'Antar Lord':<14} {'Start':<14} {'End':<14} {'Days':>6}")
print("-"*50)
for i in range(9):
a_idx = (maha_idx + i) % 9
a_lord = DASHA_LORDS[a_idx]
a_yrs = (DASHA_YEARS[maha_lord] * DASHA_YEARS[a_lord]) / DASHA_TOTAL
# Scale to actual mahadasha length
actual_a_yrs = a_yrs * (maha_total_years / DASHA_YEARS[maha_lord])
a_end = add_years_decimal(a_start, actual_a_yrs)
days_a = (a_end - a_start).days
antar_table.append({'lord': a_lord, 'start': a_start, 'end': a_end})
print(f"{a_lord:<14} {a_start.strftime('%d %b %Y'):<14} {a_end.strftime('%d %b %Y'):<14} {days_a:>6}")
a_start = a_end
current_antar = None
for a in antar_table:
if a['start'] <= target_date < a['end']:
current_antar = a
break
if current_antar:
print(f"\nCurrent Antardasha (Bhukti): {current_antar['lord']}")
print(f" From: {current_antar['start']} To: {current_antar['end']}")
# ─── Pratyantardasha (Sub-Sub period) ───
if current_antar:
print("\n--- PRATYANTARDASHAS within current Antardasha ---")
ant_lord = current_antar['lord']
ant_start = current_antar['start']
ant_end = current_antar['end']
ant_total = (ant_end - ant_start).days / 365.25
ant_idx = DASHA_LORDS.index(ant_lord)
pratya_table = []
p_start = ant_start
print(f"\n{'Pratya Lord':<14} {'Start':<14} {'End':<14} {'Days':>6}")
print("-"*50)
for i in range(9):
p_idx = (ant_idx + i) % 9
p_lord= DASHA_LORDS[p_idx]
p_yrs = (DASHA_YEARS[maha_lord] * DASHA_YEARS[ant_lord] * DASHA_YEARS[p_lord]) / (DASHA_TOTAL * DASHA_TOTAL)
actual_p_yrs = p_yrs * (ant_total / ((DASHA_YEARS[maha_lord] * DASHA_YEARS[ant_lord]) / DASHA_TOTAL))
p_end = add_years_decimal(p_start, actual_p_yrs)
days_p= (p_end - p_start).days
pratya_table.append({'lord': p_lord, 'start': p_start, 'end': p_end})
print(f"{p_lord:<14} {p_start.strftime('%d %b %Y'):<14} {p_end.strftime('%d %b %Y'):<14} {days_p:>6}")
p_start = p_end
current_pratya = None
for p in pratya_table:
if p['start'] <= target_date < p['end']:
current_pratya = p
break
if current_pratya:
print(f"\nCurrent Pratyantardasha: {current_pratya['lord']}")
print(f" From: {current_pratya['start']} To: {current_pratya['end']}")
# ─────────────────────────────────────────────
# 8. NAVAMSA (D9) CHART
# ─────────────────────────────────────────────
print("\n" + "="*70)
print("NAVAMSA (D9) CHART")
print("="*70)
print("(Each sign divided into 9 parts of 3°20' each)")
print()
NAVAMSA_SIGN_START = {
'Aries':0,'Leo':4,'Sagittarius':8, # Fire signs start from Aries
'Taurus':8,'Virgo':0,'Capricorn':4, # Earth signs start from Capricorn
'Gemini':4,'Libra':8,'Aquarius':0, # Air signs start from Libra
'Cancer':3,'Scorpio':7,'Pisces':11 # Water signs start from Cancer
}
# More precise: Navamsa start navamsa lord for each rashi
# Fiery: Aries(0), Leo(4), Sagittarius(8) → Navamsa starts Aries
# Earthy: Taurus(1), Virgo(5), Capricorn(9) → starts Capricorn(9)
# Airy: Gemini(2), Libra(6), Aquarius(10) → starts Libra(6)
# Watery: Cancer(3), Scorpio(7), Pisces(11) → starts Cancer(3)
RASHI_ELEMENT = {
0:'fire',1:'earth',2:'air',3:'water',
4:'fire',5:'earth',6:'air',7:'water',
8:'fire',9:'earth',10:'air',11:'water'
}
NAVAMSA_START_RASHI = {
'fire': 0, # Aries
'earth': 9, # Capricorn
'air': 6, # Libra
'water': 3 # Cancer
}
def get_navamsa_sign(sid_lon):
rashi_num = int(sid_lon / 30)
deg_in_rashi = sid_lon % 30
# Each navamsa = 30/9 = 3.3333 degrees
navamsa_num = int(deg_in_rashi / (30/9)) # 0-8
element = RASHI_ELEMENT[rashi_num]
start_rashi = NAVAMSA_START_RASHI[element]
d9_rashi = (start_rashi + navamsa_num) % 12
return d9_rashi, navamsa_num + 1
print(f"{'Planet':<10} {'Rashi (D1)':<14} {'D1 Deg':>8} {'Navamsa #':>10} {'D9 Rashi':<14}")
print("-"*60)
navamsa_data = {}
# Include Lagna
lagna_d9, lagna_nav_num = get_navamsa_sign(sid_asc)
print(f"{'Lagna':<10} {lagna_rashi:<14} {lagna_deg:>8.4f}° {lagna_nav_num:>10} {RASHIS[lagna_d9]:<14}")
navamsa_data['Lagna'] = RASHIS[lagna_d9]
for p in all_planets_order:
pd = planet_data[p]
d9_rashi_num, nav_num = get_navamsa_sign(pd['sid_lon'])
navamsa_data[p] = RASHIS[d9_rashi_num]
print(f"{p:<10} {pd['rashi']:<14} {pd['deg_in_rashi']:>8.4f}° {nav_num:>10} {RASHIS[d9_rashi_num]:<14}")
# D9 House positions
print(f"\nNavamsa Lagna: {navamsa_data['Lagna']}")
d9_lagna_num = RASHIS.index(navamsa_data['Lagna'])
print(f"\n{'Planet':<10} {'D9 Rashi':<14} {'D9 House':>9}")
print("-"*35)
for p in all_planets_order:
d9r = navamsa_data[p]
d9r_num = RASHIS.index(d9r)
d9_house = (d9r_num - d9_lagna_num) % 12 + 1
print(f"{p:<10} {d9r:<14} {d9_house:>9}")
# ─────────────────────────────────────────────
# 9. PANCHANG
# ─────────────────────────────────────────────
print("\n" + "="*70)
print("PANCHANG FOR BIRTH DATE (25 Aug 2000, IST)")
print("="*70)
# ─── Vara (Weekday) ───
birth_datetime = datetime(2000, 8, 25, 18, 32, 0)
weekday_names = ['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday']
weekday_num = birth_datetime.weekday() # 0=Mon
vara = weekday_names[weekday_num]
VARA_LORDS = {'Sunday':'Sun','Monday':'Moon','Tuesday':'Mars',
'Wednesday':'Mercury','Thursday':'Jupiter','Friday':'Venus','Saturday':'Saturn'}
print(f"Vara (Weekday): {vara} (Lord: {VARA_LORDS[vara]})")
# ─── Tithi ───
# Tithi = (Moon_lon - Sun_lon) / 12, ceil gives tithi number
sun_sid = planet_data['Sun']['sid_lon']
moon_sid = planet_data['Moon']['sid_lon']
diff = (moon_sid - sun_sid) % 360
tithi_num = int(diff / 12) + 1 # 1-30
tithi_frac = (diff % 12) / 12
TITHI_NAMES = [
'Pratipada (1)','Dvitiya (2)','Tritiya (3)','Chaturthi (4)',
'Panchami (5)','Shashthi (6)','Saptami (7)','Ashtami (8)',
'Navami (9)','Dashami (10)','Ekadashi (11)','Dwadashi (12)',
'Trayodashi (13)','Chaturdashi (14)','Purnima/Amavasya (15/30)'
]
PAKSHA = 'Shukla' if tithi_num <= 15 else 'Krishna'
tithi_in_paksha = tithi_num if tithi_num <= 15 else tithi_num - 15
tithi_display = TITHI_NAMES[min(tithi_in_paksha-1, 14)]
print(f"Sun sidereal: {sun_sid:.4f}°")
print(f"Moon sidereal: {moon_sid:.4f}°")
print(f"Moon-Sun diff: {diff:.4f}°")
print(f"Tithi: {PAKSHA} {tithi_display}")
print(f" (Tithi #{tithi_num}, fraction elapsed: {tithi_frac:.3f})")
# ─── Karana ───
# Karana = tithi half. Each tithi has 2 karanas.
karana_num = int(diff / 6) + 1 # 1-60
FIXED_KARANAS = {57:'Shakuni', 58:'Chatushpada', 59:'Naga', 60:'Kimstughna'}
MOVABLE_KARANAS = ['Bava','Balava','Kaulava','Taitila','Garaja','Vanija','Vishti']
if karana_num == 1:
karana = 'Kimstughna'
elif karana_num >= 57:
karana = FIXED_KARANAS.get(karana_num, 'Fixed')
else:
# Moveable karanas cycle 8 times (karanas 2-57 = 56 karanas / 7 = 8 cycles)
idx = (karana_num - 2) % 7
karana = MOVABLE_KARANAS[idx]
print(f"Karana: {karana} (Karana #{karana_num})")
# ─── Yoga ───
# Yoga = (Sun_lon + Moon_lon) / (360/27) → index 0-26
yoga_sum = (sun_sid + moon_sid) % 360
yoga_num = int(yoga_sum / (360/27)) # 0-26
YOGA_NAMES = [
'Vishkambha','Priti','Ayushman','Saubhagya','Shobhana','Atiganda',
'Sukarma','Dhriti','Shoola','Ganda','Vriddhi','Dhruva',
'Vyaghata','Harshana','Vajra','Siddhi','Vyatipata','Variyan',
'Parigha','Shiva','Siddha','Sadhya','Shubha','Shukla',
'Brahma','Indra','Vaidhriti'
]
yoga = YOGA_NAMES[yoga_num]
YOGA_GOOD = ['Priti','Ayushman','Saubhagya','Shobhana','Sukarma','Dhriti','Vriddhi',
'Dhruva','Harshana','Siddhi','Shiva','Siddha','Sadhya','Shubha','Shukla',
'Brahma','Indra']
yoga_nature = 'Auspicious' if yoga in YOGA_GOOD else 'Inauspicious/Mixed'
print(f"Yoga: {yoga} (Yoga #{yoga_num+1}) — {yoga_nature}")
print(f" (Sun+Moon = {yoga_sum:.4f}°)")
# ─── Summary ───
print("\n" + "="*70)
print("SUMMARY TABLE")
print("="*70)
print(f"\nLagna: {lagna_rashi} — {lagna_deg:.2f}° ({lagna_lord} rules)")
print(f"Moon (Rashi): {moon_rashi} (Lord: {moon_rashi_lord})")
print(f"Nakshatra: {nak_name}, Pada {pada}, Lord: {nak_lord}")
print(f"\nPanchang:")
print(f" Vara: {vara}")
print(f" Tithi: {PAKSHA} {tithi_display}")
print(f" Nakshatra: {nak_name} Pada {pada}")
print(f" Yoga: {yoga}")
print(f" Karana: {karana}")
print(f"\nDasha (as of {target_date}):")
print(f" Mahadasha: {current_maha['lord']} ({current_maha['start']} – {current_maha['end']})")
if current_antar:
print(f" Antardasha: {current_antar['lord']} ({current_antar['start']} – {current_antar['end']})")
if current_pratya:
print(f" Pratyantardasha: {current_pratya['lord']} ({current_pratya['start']} – {current_pratya['end']})")
print("\n=== CALCULATION COMPLETE ===")
python3 /home/daytona/kundali_calc.py 2>&1
| Lagna | Aquarius (Kumbha) — 3°29' |
| Lagna Lord | Saturn (Shani) |
| Graha | Rashi (Sign) | House | Degree |
|---|---|---|---|
| ☀️ Sun | Leo (Simha) | 7th | 8°45' |
| 🌙 Moon | Gemini (Mithuna) | 5th | 15°11' |
| ♂️ Mars | Gemini (Mithuna) | 5th | 2°30' |
| ☿ Mercury | Leo (Simha) | 7th | 22°18' |
| ♃ Jupiter | Taurus (Vrishabha) | 4th | 14°52' |
| ♀️ Venus | Leo (Simha) | 7th | 0°10' |
| ♄ Saturn | Taurus (Vrishabha) | 4th | 20°04' |
| ☊ Rahu | Gemini (Mithuna) | 5th | 21°56' |
| ☋ Ketu | Sagittarius (Dhanu) | 11th | 21°56' |
Notable: Triple stellium in Leo (7th house) — Sun + Mercury + Venus. This is exceptionally rare and powerful.
| Janma Nakshatra | Ardra (6th Nakshatra) |
| Pada | 3rd Pada |
| Nakshatra Lord | Rahu |
| Symbol | Teardrop / Diamond |
| Deity | Rudra (the storm god) |
| Element | Value |
|---|---|
| Vara (Weekday) | Friday (Shukravaar) |
| Tithi | Krishna Ekadashi (11th waning moon) |
| Yoga | Siddhi Yoga ✨ (auspicious — "accomplishment") |
| Karana | Balava |
Born in Siddhi Yoga — considered one of the most auspicious yogas, indicating natural ability to accomplish goals.
| Navamsa Lagna | Scorpio |
| Jupiter | Taurus — Vargottama (same sign in D1 and D9) |
| Level | Period |
|---|---|
| Mahadasha | Saturn (Shani) |
| Antardasha | Mercury (Budha) |
| Pratyantardasha | Mercury (Budha) |
| Yoga | Planets Involved | Meaning |
|---|---|---|
| Vargottama Jupiter | Jupiter in Taurus | Exceptional wisdom & fortune |
| Siddhi Yoga (birth) | Panchang | Ability to accomplish goals |
| Leo Stellium | Sun + Mercury + Venus | Charisma, creative power, public appeal |
Disclaimer: This Kundali is computed using standard Vedic (Jyotish) principles with Lahiri ayanamsha. For precise degree-level accuracy and personalized reading, consult a qualified Jyotishi with verified software.