Spaces:
Sleeping
Sleeping
| 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() | |