defrag / app /engine.py
cjo93's picture
Update app/engine.py
e537d07 verified
import swisseph as swe
import math
import datetime
import os
from .models import GeoLocation, PlanetPosition, HexagramAddress, CognitiveProfile
class PrecisionEngine:
def __init__(self):
ephe_path = os.getenv("SE_EPHE_PATH", "/app/ephe")
swe.set_ephe_path(ephe_path)
def _get_julian_day(self, dt):
decimal_hour = dt.hour + dt.minute / 60.0 + dt.second / 3600.0
return swe.julday(dt.year, dt.month, dt.day, decimal_hour)
def _decode_fractal(self, longitude):
gate = int((longitude % 360) / 360 * 64) + 1
line = int((longitude % (360 / 64)) / (360 / 64) * 6) + 1
return HexagramAddress(gate=gate, line=line, color=1, tone=1, base=1)
def calculate_chart(self, natal_dt, location):
jd = self._get_julian_day(natal_dt)
result = {}
planet_ids = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
planet_names = ['Sun', 'Moon', 'Mercury', 'Venus', 'Mars', 'Jupiter', 'Saturn', 'Uranus', 'Neptune', 'Pluto']
for pid, name in zip(planet_ids, planet_names):
try:
res, _ = swe.calc_ut(jd, pid)
lon = res[0]
lat = res[1]
speed = res[3]
fractal = self._decode_fractal(lon)
result[name] = PlanetPosition(
name=name,
longitude=lon,
latitude=lat,
speed=speed,
house=int(((lon + 30) % 360) / 30),
is_retrograde=speed < 0,
gate=fractal.gate,
line=fractal.line
)
except: pass
return result
def get_live_overlay(self):
now = datetime.datetime.utcnow()
return self.calculate_chart(now, None)