API Reference¶
Chart Calculation¶
calculate_chart()¶
Calculate a complete Vedic birth chart.
from vedic_calc import calculate_chart
chart = calculate_chart(
year=1990,
month=3,
day=15,
hour=10,
minute=30,
second=0,
latitude=19.0760, # Mumbai
longitude=72.8777,
timezone_offset=5.5, # IST = UTC+5:30
)
Parameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
year |
int |
required | Birth year |
month |
int |
required | Birth month (1-12) |
day |
int |
required | Birth day (1-31) |
hour |
int |
0 |
Birth hour, local time (0-23) |
minute |
int |
0 |
Birth minute (0-59) |
second |
int |
0 |
Birth second (0-59) |
latitude |
float |
0.0 |
Geographic latitude (north positive) |
longitude |
float |
0.0 |
Geographic longitude (east positive) |
timezone_offset |
float |
0.0 |
UTC offset in hours (e.g., 5.5 for IST) |
ayanamsa |
Ayanamsa |
LAHIRI |
Precession correction mode |
Returns: BirthChart
Dasha Calculation¶
calculate_dasha()¶
Calculate Vimsottari dasha (planetary period) timeline from a birth chart.
from vedic_calc import calculate_chart, calculate_dasha
chart = calculate_chart(1990, 3, 15, 10, 30, 0, 19.076, 72.878, 5.5)
periods = calculate_dasha(chart, levels=2)
# Print mahadashas
for p in periods:
if p.level == "mahadasha":
print(f"{p.lord.name}: {p.start.date()} → {p.end.date()} ({p.duration_years:.1f} yrs)")
Parameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
chart |
BirthChart |
required | A calculated birth chart |
levels |
int |
2 |
Depth: 1=mahadasha, 2=+antardasha, 3=+pratyantardasha, 4=+sookshmadasha, 5=+pranadasha |
Returns: list[DashaPeriod] — flat list sorted chronologically, with level field to distinguish depths.
Note: levels=4 adds sookshmadashas (9^4 = 6,561 periods) and levels=5 adds pranadashas (9^5 = 59,049 periods).
get_current_dasha()also supportslevels=1..5.
get_current_dasha()¶
Get the active dasha periods for a specific date.
from vedic_calc import get_current_dasha
from datetime import datetime
current = get_current_dasha(chart, datetime(2026, 3, 8))
print(f"Mahadasha: {current[0].lord.name}") # e.g., SATURN
print(f"Antardasha: {current[1].lord.name}") # e.g., VENUS
print(f"Pratyantardasha: {current[2].lord.name}") # e.g., KETU
Parameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
chart |
BirthChart |
required | A calculated birth chart |
date |
datetime |
now() |
Date to query |
levels |
int |
3 |
How many levels to return (1-3) |
Returns: list[DashaPeriod] — one entry per active level.
Panchanga¶
calculate_panchanga()¶
Calculate the daily Panchanga (five-element Vedic calendar).
from vedic_calc import calculate_panchanga
p = calculate_panchanga(
year=2026, month=3, day=8,
latitude=19.076, longitude=72.878,
timezone_offset=5.5,
)
print(f"Vara: {p.vara}")
print(f"Tithi: {p.tithi_name}")
print(f"Nakshatra: {p.nakshatra.name}")
print(f"Yoga: {p.yoga_name}")
print(f"Karana: {p.karana_name}")
print(f"Sunrise: {p.sunrise}")
print(f"Sunset: {p.sunset}")
Parameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
year |
int |
required | Calendar year |
month |
int |
required | Month (1-12) |
day |
int |
required | Day (1-31) |
latitude |
float |
required | Geographic latitude |
longitude |
float |
required | Geographic longitude |
timezone_offset |
float |
0.0 |
UTC offset in hours |
ayanamsa |
Ayanamsa |
LAHIRI |
Precession correction mode |
Returns: PanchangaInfo
calculate_panchanga_transitions()¶
Find exact times when tithi, nakshatra, yoga, and karana change during a Vedic day (sunrise to next sunrise).
from vedic_calc import calculate_panchanga_transitions
t = calculate_panchanga_transitions(
year=2026, month=3, day=8,
latitude=19.076, longitude=72.878,
timezone_offset=5.5,
)
print(f"Sunrise: {t.sunrise}")
for m in t.transitions:
print(f" {m.transition_time.strftime('%H:%M')} — {m.element}: {m.from_name} → {m.to_name}")
Parameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
year |
int |
required | Calendar year |
month |
int |
required | Month (1-12) |
day |
int |
required | Day (1-31) |
latitude |
float |
required | Geographic latitude |
longitude |
float |
required | Geographic longitude |
timezone_offset |
float |
0.0 |
UTC offset in hours |
ayanamsa |
Ayanamsa |
LAHIRI |
Precession correction mode |
Returns: PanchangaTransitions — with sunrise, next_sunrise, and sorted transitions list of TransitionMoment objects.
Chart Rendering¶
render_south_indian()¶
Render a South Indian style kundali as ASCII art.
from vedic_calc import calculate_chart, render_south_indian
chart = calculate_chart(1990, 3, 15, 10, 30, 0, 19.076, 72.878, 5.5)
print(render_south_indian(chart))
Returns: str — multi-line ASCII art with signs in fixed positions, planets placed in their signs.
render_north_indian()¶
Render a North Indian style kundali as ASCII art.
Returns: str — multi-line ASCII art with houses in fixed positions (H1 at top), signs rotating.
render_svg()¶
Render a kundali as an SVG image string.
from vedic_calc import render_svg
# South Indian (default)
svg = render_svg(chart, style="south")
# North Indian
svg = render_svg(chart, style="north")
# Save to file
with open("chart.svg", "w") as f:
f.write(svg)
Parameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
chart |
BirthChart |
required | A calculated birth chart |
style |
str |
"south" |
"south" or "north" |
Returns: str — complete SVG markup, ready to embed in HTML or save as .svg.
Data Models¶
All models are frozen (immutable) and JSON-serializable.
BirthChart¶
The complete birth chart.
chart.planets # dict[Planet, PlanetPosition] — all 9 planets
chart.houses # list[HousePosition] — 12 houses
chart.ascendant # PlanetPosition — the rising sign
chart.ayanamsa # Ayanamsa — which mode was used
chart.ayanamsa_degrees # float — ayanamsa value in degrees
chart.birth_datetime # datetime — birth date/time (local)
chart.latitude # float
chart.longitude # float
chart.timezone_offset # float
# Serialize to JSON
json_str = chart.model_dump_json(indent=2)
# Convert to dict
data = chart.model_dump()
PlanetPosition¶
A planet's position in the sidereal zodiac.
pos = chart.planets[Planet.MOON]
pos.planet # Planet.MOON
pos.longitude # 192.55 (sidereal degrees, 0-360)
pos.sign # Sign.LIBRA
pos.degree_in_sign # 12.55 (degrees within the sign, 0-30)
pos.nakshatra_info # NakshatraInfo (see below)
pos.is_retrograde # False
NakshatraInfo¶
Nakshatra (lunar mansion) details.
nak = pos.nakshatra_info
nak.nakshatra # Nakshatra.SWATI
nak.pada # 2 (quarter, 1-4)
nak.lord # Planet.RAHU (ruling planet)
nak.degree_in_nakshatra # 5.88 (degrees within this nakshatra)
HousePosition¶
A house in the chart (Whole Sign system).
house = chart.houses[0] # 1st house
house.house_number # 1
house.sign # Sign.TAURUS
house.lord # Planet.VENUS
DashaPeriod¶
A single planetary period.
period.lord # Planet.SATURN
period.level # "mahadasha", "antardasha", or "pratyantardasha"
period.start # datetime(2016, 4, 4, ...)
period.end # datetime(2035, 4, 5, ...)
period.duration_years # 19.0
PanchangaInfo¶
Daily five-element Vedic calendar.
p.date # datetime — the date
p.vara # "Sunday (Ravivara)"
p.tithi_number # 20 (1-30)
p.tithi_name # "Krishna Panchami"
p.nakshatra # Nakshatra.SWATI
p.yoga_number # 12 (1-27)
p.yoga_name # "Dhruva"
p.karana_number # 39 (1-60)
p.karana_name # "Kaulava"
p.sunrise # datetime or None
p.sunset # datetime or None
Enumerations¶
Planet¶
from vedic_calc.core.constants import Planet
Planet.SUN # 0
Planet.MOON # 1
Planet.MARS # 2
Planet.MERCURY # 3
Planet.JUPITER # 4
Planet.VENUS # 5
Planet.SATURN # 6
Planet.RAHU # 7
Planet.KETU # 8
Sign¶
from vedic_calc.core.constants import Sign
Sign.ARIES # 1
Sign.TAURUS # 2
# ... through ...
Sign.PISCES # 12
Nakshatra¶
from vedic_calc.core.constants import Nakshatra
Nakshatra.ASHWINI # 1
Nakshatra.BHARANI # 2
# ... through ...
Nakshatra.REVATI # 27
Ayanamsa¶
from vedic_calc.core.constants import Ayanamsa
Ayanamsa.LAHIRI # 1 — most common in India
Ayanamsa.RAMAN # 3
Ayanamsa.KP # 5 — Krishnamurti Paddhati
Ayanamsa.TRUE_CHITRAPAKSHA # 27
Divisional Charts¶
calculate_divisional_chart()¶
Calculate a divisional (varga) chart.
from vedic_calc import calculate_chart, calculate_divisional_chart
chart = calculate_chart(1990, 3, 15, 10, 30, 0, 19.076, 72.878, 5.5)
navamsa = calculate_divisional_chart(chart, division=9)
for planet, pos in navamsa.planets.items():
print(f"{planet.name}: {pos.sign.name}")
Parameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
chart |
BirthChart |
required | A calculated birth chart |
division |
int |
required | Division number: 2,3,4,7,9,10,12,16,20,24,27,30,40,45,60 |
Returns: DivisionalChart
Aspects¶
calculate_aspects()¶
Calculate planetary aspects (drishti) in a chart.
from vedic_calc import calculate_chart, calculate_aspects
chart = calculate_chart(1990, 3, 15, 10, 30, 0, 19.076, 72.878, 5.5)
aspects = calculate_aspects(chart)
for a in aspects:
print(f"{a.aspecting_planet.name} aspects house {a.aspected_house} ({a.aspect_type})")
Returns: list[AspectInfo] — all aspects from all planets, including special aspects of Mars, Jupiter, and Saturn.
Combustion¶
calculate_combustion()¶
Check which planets are combust (too close to the Sun).
from vedic_calc import calculate_chart, calculate_combustion
chart = calculate_chart(1990, 3, 15, 10, 30, 0, 19.076, 72.878, 5.5)
combustion = calculate_combustion(chart)
for c in combustion:
if c.is_combust:
print(f"{c.planet.name} is combust ({c.angular_distance:.1f}° from Sun)")
Returns: list[CombustionStatus] — one per planet (excluding Sun, Rahu, Ketu).
Planetary States¶
calculate_planet_states()¶
Calculate the dignity and special states of each planet (exalted, debilitated, own sign, vargottama, etc.).
from vedic_calc import calculate_chart, calculate_planet_states
chart = calculate_chart(1990, 3, 15, 10, 30, 0, 19.076, 72.878, 5.5)
states = calculate_planet_states(chart)
for planet, state in states.items():
print(f"{planet.name}: {state.dignity}, vargottama={state.is_vargottama}")
Returns: dict[Planet, PlanetState]
House Analysis¶
analyze_houses()¶
Get comprehensive analysis for all 12 houses.
from vedic_calc import calculate_chart, analyze_houses
chart = calculate_chart(1990, 3, 15, 10, 30, 0, 19.076, 72.878, 5.5)
houses = analyze_houses(chart)
for h in houses:
print(f"House {h.house_number}: {h.sign.name}, lord={h.lord.name}, "
f"occupants={[p.name for p in h.occupants]}")
Returns: list[HouseAnalysis] — 12 entries with sign, lord, occupants, aspecting planets, house category.
Transits¶
calculate_transit_chart()¶
Calculate current planetary positions (transit chart).
from vedic_calc import calculate_transit_chart
transit = calculate_transit_chart(
year=2026, month=3, day=17,
hour=12, minute=0,
latitude=19.076, longitude=72.878,
timezone_offset=5.5,
)
for planet, pos in transit.planets.items():
print(f"{planet.name}: {pos.sign.name} {pos.degree_in_sign:.1f}°")
Returns: TransitChart
calculate_event_timeline()¶
Calculate a chronological timeline of major astrological events: dasha transitions, Sade Sati phases, Saturn returns, Jupiter transits over natal Moon, and Rahu-Ketu returns.
from vedic_calc import calculate_chart, calculate_event_timeline
from datetime import datetime
chart = calculate_chart(1990, 3, 15, 10, 30, 0, 19.076, 72.878, 5.5)
timeline = calculate_event_timeline(chart, datetime(1990, 1, 1), datetime(2050, 1, 1))
for event in timeline.events:
print(f"{event.date.date()} [{event.event_type}] {event.description}")
Parameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
chart |
BirthChart |
required | A calculated birth chart |
start_date |
datetime |
required | Start of the timeline range |
end_date |
datetime |
required | End of the timeline range |
ayanamsa |
Ayanamsa |
LAHIRI |
Ayanamsa for transit calculations |
Returns: EventTimeline — with sorted events list of TimelineEvent objects (each with event_type, date, description, details).
Yogas¶
detect_yogas()¶
Detect ~24 classical yogas in a chart.
from vedic_calc import calculate_chart, detect_yogas
chart = calculate_chart(1990, 3, 15, 10, 30, 0, 19.076, 72.878, 5.5)
yogas = detect_yogas(chart)
for y in yogas:
if y.is_present:
print(f"{y.name} ({y.category}): {y.description}")
Returns: list[YogaResult] — includes both present and absent yogas.
score_yogas()¶
Score every detected yoga on a 0-100 strength scale, weighted by planetary dignity, Shadbala, combustion, retrograde status, and house placement.
from vedic_calc import calculate_chart, score_yogas
chart = calculate_chart(1990, 3, 15, 10, 30, 0, 19.076, 72.878, 5.5)
scored = score_yogas(chart)
for y in scored:
if y.is_present:
print(f"{y.name}: strength={y.strength}/100")
for f in y.factors:
print(f" {f.name}: {f.description}")
Parameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
chart |
BirthChart |
required | A calculated birth chart |
Returns: list[ScoredYogaResult] — with strength (0-100) and factors breakdown.
Doshas¶
detect_doshas()¶
Detect 6 classical doshas (afflictions) with cancellation checking.
from vedic_calc import calculate_chart, detect_doshas
chart = calculate_chart(1990, 3, 15, 10, 30, 0, 19.076, 72.878, 5.5)
doshas = detect_doshas(chart)
for d in doshas:
status = "PRESENT" if d.is_present else "absent"
cancelled = " (cancelled)" if d.is_cancelled else ""
print(f"{d.name}: {status}{cancelled}")
Returns: list[DoshaResult] — with is_present, is_cancelled, severity, description.
score_doshas()¶
Score every detected dosha on a 0-100 severity scale, refined by cancellation factors, afflicting-planet Shadbala, and house placement.
from vedic_calc import calculate_chart, score_doshas
chart = calculate_chart(1990, 3, 15, 10, 30, 0, 19.076, 72.878, 5.5)
scored = score_doshas(chart)
for d in scored:
if d.is_present:
print(f"{d.name}: severity={d.severity_score}/100")
for f in d.factors:
print(f" {f.name}: {f.description}")
Parameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
chart |
BirthChart |
required | A calculated birth chart |
Returns: list[ScoredDoshaResult] — with severity_score (0-100) and factors breakdown.
Compatibility¶
calculate_compatibility()¶
Calculate Ashtakoot Milan (8-factor North Indian compatibility).
from vedic_calc import calculate_chart, calculate_compatibility
chart1 = calculate_chart(1990, 3, 15, 10, 30, 0, 19.076, 72.878, 5.5)
chart2 = calculate_chart(1992, 7, 20, 14, 0, 0, 19.076, 72.878, 5.5)
result = calculate_compatibility(chart1, chart2)
print(f"Total: {result.total_points}/36")
for factor in result.factors:
print(f" {factor.name}: {factor.obtained}/{factor.maximum}")
Returns: CompatibilityResult — 8 factor scores + total.
calculate_porutham()¶
Calculate 10-factor South Indian compatibility.
from vedic_calc import calculate_chart, calculate_porutham
result = calculate_porutham(chart1, chart2)
Returns: PoruthamResult — 10 factor results + summary.
calculate_papasamyam()¶
Compare malefic balance between two charts (South Indian compatibility check). Scores malefic planets in houses 1,2,4,7,8,12 from Lagna, Moon, and Venus.
from vedic_calc import calculate_chart, calculate_papasamyam
chart1 = calculate_chart(1990, 3, 15, 10, 30, 0, 19.076, 72.878, 5.5)
chart2 = calculate_chart(1992, 7, 20, 14, 0, 0, 19.076, 72.878, 5.5)
result = calculate_papasamyam(chart1, chart2)
print(f"Person 1: {result.person1.total:.1f} pts, Person 2: {result.person2.total:.1f} pts")
print(f"Balanced: {result.is_balanced}")
print(result.description)
Parameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
chart1 |
BirthChart |
required | First person's birth chart |
chart2 |
BirthChart |
required | Second person's birth chart |
Returns: PapasamyamResult — with person1/person2 scores (lagna/moon/venus breakdown), is_balanced, difference, and description.
Strength¶
calculate_shadbala()¶
Calculate six-fold planetary strength (Shadbala).
from vedic_calc import calculate_chart, calculate_shadbala
chart = calculate_chart(1990, 3, 15, 10, 30, 0, 19.076, 72.878, 5.5)
strengths = calculate_shadbala(chart)
for planet, sb in strengths.items():
print(f"{planet.name}: total={sb.total_rupas:.2f} rupas "
f"(required={sb.required_rupas:.2f})")
Returns: dict[Planet, ShadbalaResult] — with all 6 components and total.
calculate_ashtakavarga()¶
Calculate Ashtakavarga (benefic point grid).
from vedic_calc import calculate_chart, calculate_ashtakavarga
chart = calculate_chart(1990, 3, 15, 10, 30, 0, 19.076, 72.878, 5.5)
av = calculate_ashtakavarga(chart)
# Sarvashtakavarga (sum across all planets per sign)
for sign, points in av.sarvashtakavarga.items():
print(f"{sign.name}: {points} bindus")
Returns: AshtakavargaResult — with BAV per planet and SAV totals.
Muhurta¶
calculate_muhurta()¶
Calculate daily muhurta windows (Rahu Kalam, Yamagandam, Abhijit, Choghadiya, Hora).
from vedic_calc import calculate_muhurta
m = calculate_muhurta(2026, 3, 17, 19.076, 72.878, 5.5)
rk_start, rk_end = m.rahu_kalam
print(f"Rahu Kalam: {rk_start.strftime('%H:%M')} - {rk_end.strftime('%H:%M')}")
print(f"Abhijit: {m.abhijit_muhurta[0].strftime('%H:%M')} - {m.abhijit_muhurta[1].strftime('%H:%M')}")
Returns: MuhurtaInfo
find_muhurta_windows()¶
Search for auspicious windows across a date range.
from vedic_calc import find_muhurta_windows
result = find_muhurta_windows(
activity="marriage",
start_date=(2026, 4, 1),
end_date=(2026, 4, 30),
latitude=19.076, longitude=72.878,
timezone_offset=5.5,
natal_moon_nakshatra=4, # Rohini
natal_moon_sign=2, # Taurus
max_results=5,
)
for w in result.windows:
print(f"{w.start.date()} score={w.score:.0f}: {', '.join(w.reasoning)}")
Returns: MuhurtaSearchResult — ranked windows with panchanga details and reasoning.
Prashna (Horary)¶
cast_prashna_chart()¶
Cast a chart for the moment a question is asked.
from vedic_calc import cast_prashna_chart
chart = cast_prashna_chart(
year=2026, month=3, day=17,
hour=14, minute=30,
latitude=19.076, longitude=72.878,
timezone_offset=5.5,
)
Returns: BirthChart — same structure as a birth chart, but for the question moment.
evaluate_prashna()¶
Get a full Prashna verdict (Tajika yogas + chart analysis).
from vedic_calc import cast_prashna_chart, evaluate_prashna
chart = cast_prashna_chart(2026, 3, 17, 14, 30, 0, 19.076, 72.878, 5.5)
verdict = evaluate_prashna(chart, query_house=10) # Career question
print(f"Verdict: {verdict.verdict}") # "favorable" / "unfavorable" / "mixed"
for reason in verdict.reasoning:
print(f" - {reason}")
Returns: PrashnaVerdict — with verdict, Tajika yogas found, and reasoning.
detect_tajika_yogas()¶
Detect Tajika yogas between two planets.
from vedic_calc import cast_prashna_chart, detect_tajika_yogas
chart = cast_prashna_chart(2026, 3, 17, 14, 30, 0, 19.076, 72.878, 5.5)
yogas = detect_tajika_yogas(chart, query_house=10)
for y in yogas:
if y.is_present:
print(f"{y.name}: {y.significance} — {y.description}")
Returns: list[TajikaYoga]
Jaimini¶
calculate_chara_karakas()¶
Calculate the 8 Chara (variable) Karakas.
from vedic_calc import calculate_chart, calculate_chara_karakas
chart = calculate_chart(1990, 3, 15, 10, 30, 0, 19.076, 72.878, 5.5)
karakas = calculate_chara_karakas(chart)
for k in karakas:
print(f"{k.karaka_name}: {k.planet.name} ({k.degree_in_sign:.1f}°)")
Returns: list[CharaKaraka] — 8 karakas ranked by degree.
calculate_arudha_padas()¶
Calculate Arudha Padas for all 12 houses.
from vedic_calc import calculate_chart, calculate_arudha_padas
chart = calculate_chart(1990, 3, 15, 10, 30, 0, 19.076, 72.878, 5.5)
arudhas = calculate_arudha_padas(chart)
for a in arudhas:
print(f"A{a.house_number} ({a.name}): {a.sign.name}")
Returns: list[ArudhaPada] — with house number, sign, named pada (AL, A7/Darapada, etc.).
Varshaphal (Solar Return)¶
calculate_varshaphal()¶
Calculate annual predictions chart (solar return).
from vedic_calc import calculate_chart, calculate_varshaphal
birth_chart = calculate_chart(1990, 3, 15, 10, 30, 0, 19.076, 72.878, 5.5)
varsha = calculate_varshaphal(birth_chart, target_year=2026)
print(f"Year Lord: {varsha.year_lord.name}")
print(f"Muntha: {varsha.muntha.sign.name} (house {varsha.muntha.house})")
for md in varsha.mudda_dasha[:3]:
print(f" {md.lord.name}: {md.start.date()} - {md.end.date()}")
Returns: VarshaphalResult — with annual chart, muntha, year lord, and mudda dasha periods.
Note: Mudda Dasha periods support
levelsinternally: level 1 = mudda dashas, level 2 = mudda antardashas.
calculate_panchavargeeya_bala()¶
Calculate 5-fold dignity strength across D1 (Rasi), D2 (Hora), D3 (Drekkana), D9 (Navamsa), and D12 (Dwadasamsa). Total points range 0-20.
from vedic_calc import calculate_chart, calculate_varshaphal, calculate_panchavargeeya_bala
birth = calculate_chart(1990, 3, 15, 10, 30, 0, 19.076, 72.878, 5.5)
varsha = calculate_varshaphal(birth, year=2026)
bala = calculate_panchavargeeya_bala(varsha.annual_chart)
for b in bala:
print(f"{b.planet.name}: D1={b.d1_dignity} D2={b.d2_dignity} D3={b.d3_dignity} "
f"D9={b.d9_dignity} D12={b.d12_dignity} → {b.total_points}/20")
Parameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
annual_chart |
BirthChart |
required | An annual (solar return) chart |
Returns: list[PanchavargeeaBala] — 9 entries with per-division dignity strings and total_points.
KP (Krishnamurti Paddhati)¶
calculate_kp_chart()¶
Calculate a KP chart with Placidus cusps and sub-lords.
from vedic_calc import calculate_chart, calculate_kp_chart
chart = calculate_chart(1990, 3, 15, 10, 30, 0, 19.076, 72.878, 5.5)
kp = calculate_kp_chart(chart)
for cusp in kp.cusps:
print(f"House {cusp.house_number}: {cusp.sign.name} {cusp.degree:.1f}° "
f"(sub-lord: {cusp.sublord.name})")
Returns: KPChartResult — with cusps, planet sub-lords, and significators.
get_kp_sublord()¶
Get the KP sub-lord for any zodiacal longitude.
from vedic_calc import get_kp_sublord
info = get_kp_sublord(45.0) # 15° Taurus
print(f"Star lord: {info.star_lord.name}, Sub-lord: {info.sub_lord.name}")
Returns: KPSublordInfo
get_kp_significators()¶
Get per-planet KP significators at 4 levels (occupation, star-lord connection, ownership, star-lord ownership).
from vedic_calc import calculate_chart, get_kp_significators
chart = calculate_chart(1990, 3, 15, 10, 30, 0, 19.076, 72.878, 5.5)
sigs = get_kp_significators(chart)
for s in sigs:
print(f"{s.planet.name}: L1={s.level1_houses} L2={s.level2_houses} "
f"L3={s.level3_houses} L4={s.level4_houses} → {s.all_signified_houses}")
Parameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
chart |
BirthChart |
required | A calculated birth chart |
Returns: list[KPSignificatorDetail] — 9 entries (one per planet) with level1_houses through level4_houses and all_signified_houses.
get_kp_house_significators()¶
Get per-house significator planets (which planets signify each house).
from vedic_calc import calculate_chart, get_kp_house_significators
chart = calculate_chart(1990, 3, 15, 10, 30, 0, 19.076, 72.878, 5.5)
house_sigs = get_kp_house_significators(chart)
for h in house_sigs:
names = [p.name for p in h.significators]
print(f"House {h.house_number}: {', '.join(names)}")
Parameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
chart |
BirthChart |
required | A calculated birth chart |
Returns: list[KPHouseSignificators] — 12 entries with house_number and significators (list of planets).
Numerology¶
calculate_numerology()¶
Calculate Chaldean numerology numbers.
from vedic_calc import calculate_numerology
result = calculate_numerology(
year=1990, month=3, day=15,
full_name="Rahul Sharma",
)
print(f"Destiny: {result.destiny_number}")
print(f"Radical: {result.radical_number}")
print(f"Name: {result.name_number}")
print(f"Lucky numbers: {result.lucky_numbers}")
Returns: NumerologyResult — with destiny, radical, name numbers, lucky/unlucky numbers, and compatibility.
Sudarshana Chakra¶
calculate_sudarshana_chakra()¶
Calculate the Sudarshana Chakra — a three-ring concentric chart from Lagna, Moon, and Sun reference points.
from vedic_calc import calculate_chart, calculate_sudarshana_chakra
chart = calculate_chart(1990, 3, 15, 10, 30, 0, 19.076, 72.878, 5.5)
chakra = calculate_sudarshana_chakra(chart)
for ring_name, ring in [("Lagna", chakra.lagna_ring), ("Moon", chakra.moon_ring), ("Sun", chakra.sun_ring)]:
print(f"\n{ring_name} Ring:")
for h in ring:
planets = [p.name for p in h.planets]
print(f" House {h.house_number}: {h.sign.name} {planets or ''}")
Parameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
chart |
BirthChart |
required | A calculated birth chart |
Returns: SudarshanaChakra — with lagna_ring, moon_ring, and sun_ring (each a list of 12 SudarshanaHouse objects).
Additional Dasha Systems¶
calculate_yogini_dasha()¶
Calculate Yogini Dasha (36-year cycle).
from vedic_calc import calculate_chart, calculate_yogini_dasha
chart = calculate_chart(1990, 3, 15, 10, 30, 0, 19.076, 72.878, 5.5)
periods = calculate_yogini_dasha(chart)
Returns: list[DashaPeriod]
calculate_ashtottari_dasha()¶
Calculate Ashtottari Dasha (108-year cycle, 8 planets).
from vedic_calc import calculate_chart, calculate_ashtottari_dasha
chart = calculate_chart(1990, 3, 15, 10, 30, 0, 19.076, 72.878, 5.5)
periods = calculate_ashtottari_dasha(chart)
Returns: list[DashaPeriod]
calculate_narayana_dasha()¶
Calculate Narayana Dasha (Jaimini sign-based).
from vedic_calc import calculate_chart, calculate_narayana_dasha
chart = calculate_chart(1990, 3, 15, 10, 30, 0, 19.076, 72.878, 5.5)
periods = calculate_narayana_dasha(chart)
Returns: list[DashaPeriod]
Special Calculations¶
calculate_special_lagnas()¶
Calculate Bhava Lagna, Hora Lagna, Ghati Lagna, and Vighati Lagna.
from vedic_calc import calculate_chart, calculate_special_lagnas
chart = calculate_chart(1990, 3, 15, 10, 30, 0, 19.076, 72.878, 5.5)
lagnas = calculate_special_lagnas(chart)
for l in lagnas:
print(f"{l.name}: {l.sign.name} {l.degree_in_sign:.1f}°")
Returns: list[SpecialLagna]
calculate_upagrahas()¶
Calculate the 5 Sun-based upagrahas (Dhuma, Vyatipata, Parivesha, Chapa, Upaketu).
from vedic_calc import calculate_chart, calculate_upagrahas
chart = calculate_chart(1990, 3, 15, 10, 30, 0, 19.076, 72.878, 5.5)
upagrahas = calculate_upagrahas(chart)
for u in upagrahas:
print(f"{u.name}: {u.sign.name} {u.degree_in_sign:.1f}°")
Returns: list[UpagrahaPosition]
calculate_sahams()¶
Calculate Arabic Parts / Sahams (Punya, Vidya, Yashas, etc.).
from vedic_calc import calculate_chart, calculate_sahams
chart = calculate_chart(1990, 3, 15, 10, 30, 0, 19.076, 72.878, 5.5)
sahams = calculate_sahams(chart)
for s in sahams:
print(f"{s.name}: {s.sign.name} {s.degree_in_sign:.1f}°")
Returns: list[SahamPosition]
get_festivals()¶
Detect Hindu festivals in a given year.
from vedic_calc import get_festivals
festivals = get_festivals(2026, 19.076, 72.878, 5.5)
for f in festivals:
print(f"{f.date.date()}: {f.name} — {f.description}")
Returns: list[FestivalInfo]
Lookup Tables¶
from vedic_calc.core.constants import (
SIGN_LORDS, # {Sign.ARIES: Planet.MARS, ...}
NAKSHATRA_LORDS, # {Nakshatra.ASHWINI: Planet.KETU, ...}
PLANET_NAMES, # {Planet.SUN: "Sun (Surya)", ...}
SIGN_NAMES, # {Sign.ARIES: "Aries (Mesha)", ...}
NAKSHATRA_NAMES, # {Nakshatra.ASHWINI: "Ashwini", ...}
VIMSOTTARI_YEARS, # {Planet.KETU: 7, Planet.VENUS: 20, ...}
VIMSOTTARI_ORDER, # [Planet.KETU, Planet.VENUS, Planet.SUN, ...]
TITHI_NAMES, # {1: "Shukla Pratipada", ..., 30: "Amavasya"}
YOGA_NAMES, # {1: "Vishkambha", ..., 27: "Vaidhriti"}
KARANA_NAMES, # {1: "Kimstughna", ..., 60: "Nagava"}
VARA_NAMES, # {0: "Monday (Somavara)", ..., 6: "Sunday (Ravivara)"}
PLANET_ABBREVIATIONS, # {Planet.SUN: "Su", ...}
SIGN_ABBREVIATIONS, # {Sign.ARIES: "Ar", ...}
)