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