File size: 3,902 Bytes
113e62f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
import gradio as gr
import swisseph as swe
import pytz
import random
from datetime import datetime
from timezonefinder import TimezoneFinder

# Define Constants
PLANET_NAMES = ["Sun", "Moon", "Mars", "Mercury", "Jupiter", "Venus", "Saturn", "Rahu", "Ketu"]
RASHIS = ["Aries", "Taurus", "Gemini", "Cancer", "Leo", "Virgo", "Libra", "Scorpio", "Sagittarius", "Capricorn", "Aquarius", "Pisces"]
NAKSHATRAS = ["Ashwini", "Bharani", "Krittika", "Rohini", "Mrigashira", "Ardra", "Punarvasu", "Pushya", "Ashlesha",
              "Magha", "Purva Phalguni", "Uttara Phalguni", "Hasta", "Chitra", "Swati", "Vishakha", "Anuradha",
              "Jyeshtha", "Mula", "Purva Ashadha", "Uttara Ashadha", "Shravana", "Dhanishta", "Shatabhisha",
              "Purva Bhadrapada", "Uttara Bhadrapada", "Revati"]

# Function to get timezone
def get_timezone(lat, lon):
    tf = TimezoneFinder()
    tz = tf.timezone_at(lat=lat, lng=lon)
    return pytz.timezone(tz)

# Function to convert birth details into Julian Date
def get_julian_date(date, time, lat, lon):
    dt_obj = datetime.strptime(f"{date} {time}", "%Y-%m-%d %H:%M")
    local_tz = get_timezone(lat, lon)
    local_dt = local_tz.localize(dt_obj)
    utc_dt = local_dt.astimezone(pytz.utc)
    julian_date = swe.julday(utc_dt.year, utc_dt.month, utc_dt.day, utc_dt.hour + utc_dt.minute / 60.0)
    return julian_date

# Function to compute Rahu-Ketu Karmic Analysis
def get_rahu_ketu_analysis(jd):
    rahu_pos = swe.calc_ut(jd, swe.TRUE_NODE)[0]
    ketu_pos = (rahu_pos + 180) % 360  # Ketu is always opposite Rahu
    
    rahu_sign = RASHIS[int(rahu_pos / 30)]
    ketu_sign = RASHIS[int(ketu_pos / 30)]

    return f"๐ŸŒŒ **Rahu (Karmic Desires):** {rahu_sign}\n๐Ÿ”ฅ **Ketu (Past Life Karma):** {ketu_sign}"

# Function to compute D60 Shastiamsa Karma Chart
def get_d60_chart(jd):
    shastiamsa_signs = RASHIS * 5
    planetary_positions = {planet: swe.calc_ut(jd, getattr(swe, planet.upper()))[0] for planet in PLANET_NAMES}
    d60_details = {planet: shastiamsa_signs[int((deg % 30) / 0.5)] for planet, deg in planetary_positions.items()}

    return "\n".join([f"{planet}: {sign}" for planet, sign in d60_details.items()])

# Function to calculate Guna Milan (Kundali Matching)
def guna_milan(nakshatra_1, nakshatra_2):
    compatibility_table = {  # Simplified points for each nakshatra pair
        ("Ashwini", "Bharani"): 32, ("Rohini", "Mrigashira"): 34, ("Magha", "Purva Phalguni"): 30,
        ("Hasta", "Chitra"): 33, ("Anuradha", "Jyeshtha"): 28, ("Shravana", "Dhanishta"): 35,
        ("Purva Bhadrapada", "Uttara Bhadrapada"): 36, ("Revati", "Ashwini"): 29
    }
    
    score = compatibility_table.get((nakshatra_1, nakshatra_2), random.randint(18, 36))
    return f"๐Ÿ’‘ **Kundali Matching Score:** {score}/36"

# Main Function to Generate Astrology Report
def astrology_report(date, time, lat, lon, partner_nakshatra):
    jd = get_julian_date(date, time, lat, lon)
    rahu_ketu_analysis = get_rahu_ketu_analysis(jd)
    d60_chart = get_d60_chart(jd)

    user_moon_pos = swe.calc_ut(jd, swe.MOON)[0]
    user_nakshatra = NAKSHATRAS[int(user_moon_pos / (360 / 27))]
    
    compatibility_score = guna_milan(user_nakshatra, partner_nakshatra)

    report = f"""
    ๐Ÿ“œ **Advanced Astrology Report** ๐Ÿ“œ
    
    ๐ŸŒŒ **Rahu-Ketu Karmic Analysis:**  
    {rahu_ketu_analysis}

    ๐Ÿ”ฅ **D60 Shastiamsa Karma Chart:**  
    {d60_chart}

    ๐Ÿ’‘ **Kundali Matching Results:**  
    {compatibility_score}
    """
    return report

# Gradio UI
iface = gr.Interface(
    fn=astrology_report,
    inputs=[
        gr.Textbox(label="Birth Date (YYYY-MM-DD)"),
        gr.Textbox(label="Birth Time (HH:MM)"),
        gr.Number(label="Latitude"),
        gr.Number(label="Longitude"),
        gr.Dropdown(NAKSHATRAS, label="Partner's Nakshatra")
    ],
    outputs="text",
    title="๐Ÿ”ฎ Advanced Karmic Astrology Tool"
)

iface.launch()