y s jagan hs
from astral import LocationInfo
from astral.sun import sun
import datetime
import ephem
from pytz import timezone
def calculate_planetary_positions(birth_date_str, birth_time_str, latitude, longitude, timezone_str="Asia/Kolkata"):
"""Calculates planetary positions and assigns them to houses (simplified)."""
try:
# 1. Parse birth date and time, handling timezone
birth_date = datetime.datetime.strptime(birth_date_str, "%Y-%m-%d").date()
birth_time_obj = datetime.datetime.strptime(birth_time_str, "%I:%M %p")
tz = timezone(timezone_str)
birth_datetime = tz.localize(datetime.datetime.combine(birth_date, birth_time_obj.time()))
# 2. Set geolocation directly using provided latitude and longitude
city = LocationInfo("Jammalamadugu", "India", timezone_str, latitude, longitude)
# 3. Sunrise calculation
sr = sun(city.observer, date=birth_date)
sunrise_time = sr['sunrise']
# 4. Ephemeris calculations using PyEphem
observer = ephem.Observer()
observer.lat = city.latitude
observer.lon = city.longitude
observer.date = birth_datetime
planets = {
'Sun': ephem.Sun(),
'Moon': ephem.Moon(),
'Mars': ephem.Mars(),
'Mercury': ephem.Mercury(),
'Jupiter': ephem.Jupiter(),
'Venus': ephem.Venus(),
'Saturn': ephem.Saturn(),
}
planetary_positions = {}
for planet_name, planet_obj in planets.items():
planet_obj.compute(observer)
planetary_positions[planet_name] = {
'longitude': ephem.degrees(planet_obj.ra),
'latitude': ephem.degrees(planet_obj.dec),
}
# 5. Lagna Calculation (Improved but still simplified)
lagna = calculate_lagna(sunrise_time, birth_datetime)
# 6. House positions (still simplified - needs a proper astrological library)
house_positions = assign_planets_to_houses(lagna, planetary_positions)
return {"lagna": lagna, "planetary_positions": planetary_positions, "house_positions": house_positions}
except ValueError as e:
return f"Error: {e}" # More informative error message
except Exception as e:
return f"An error occurred: {e}"
# Improved (but still simplified) Lagna calculation
def calculate_lagna(sunrise_time, birth_time):
time_diff_hours = (birth_time - sunrise_time).total_seconds() / 3600
approx_lagna_degrees = (time_diff_hours / 24) * 360
return approx_lagna_degrees % 360
def assign_planets_to_houses(lagna, planetary_positions):
# This is a VERY simplified placeholder.
houses = {}
house_size = 360 / 12 # 30 degrees per house (simplification!)
for planet, pos in planetary_positions.items():
house_num = int((pos['longitude'] - lagna + 360) // house_size) % 12 + 1 # Adjust for negative values
houses[planet] = house_num
return houses
# Example usage:
birth_date = "1972-12-21"
birth_time = "1:30 AM"
latitude = 14.8473457 # Replace with accurate latitude
longitude = 78.382172 # Replace with accurate longitude
positions = calculate_planetary_positions(birth_date, birth_time, latitude, longitude)
print(positions)
neec to check code. giving error.
----> 6 from geopy.geocators import Nominatim 7 8 from geopy.extra.rate_limiter import RateLimiter
ModuleNotFoundError: No module named 'geopy.geocators'