fix(rectification): scan chart boundaries in the user's ayanamsa (BUG-1307, BUG-1309)
This commit is contained in:
@@ -15,6 +15,23 @@ from scripts import domain_calculation_service, varga
|
||||
TARGETS = ("D1", "D9", "D10")
|
||||
BOUNDARY_CHARTS = ("D1", "D2", "D4", "D5", "D7", "D9", "D10", "D11", "D12", "D24", "D30")
|
||||
VERSION = "rectification-varga-segments-v1"
|
||||
SEGMENT_AYANAMSAS = frozenset(("raman", "lahiri", "kp", "true_citra", "true_pushya", "fagan_bradley"))
|
||||
|
||||
|
||||
def _segment_ayanamsa(value: Any) -> str:
|
||||
"""Blank stays Raman. Unknown names raise; they do not fall back."""
|
||||
if value is None or (isinstance(value, str) and not value.strip()):
|
||||
return "raman"
|
||||
if not isinstance(value, str):
|
||||
raise ValueError("invalid_ayanamsa")
|
||||
key = value.strip().lower().replace("-", "_")
|
||||
if key in {"krishnamurti", "krishnamurti_paddhati", "krishnamurti/kp"}:
|
||||
key = "kp"
|
||||
elif key == "true_chitra":
|
||||
key = "true_citra"
|
||||
if key not in SEGMENT_AYANAMSAS:
|
||||
raise ValueError("invalid_ayanamsa")
|
||||
return key
|
||||
|
||||
|
||||
def _number(body, name, low, high):
|
||||
@@ -47,11 +64,12 @@ def scan_varga_segments(body: dict[str, Any], *, cache_dir: Path | None = None)
|
||||
or len(set(targets)) != len(targets)):
|
||||
raise ValueError("invalid_target_charts")
|
||||
boundary_charts, recorded_time = _boundary_request(body)
|
||||
ayanamsa = _segment_ayanamsa(body.get("ayanamsa"))
|
||||
profile = {
|
||||
"lat": _number(body, "latitude", -90, 90),
|
||||
"lon": _number(body, "longitude", -180, 180),
|
||||
"tz": _number(body, "timezone_offset", -14, 14),
|
||||
"ayanamsa": "raman", "node_mode": "mean",
|
||||
"ayanamsa": ayanamsa, "node_mode": "mean",
|
||||
}
|
||||
if boundary_charts:
|
||||
profile["boundary_charts"] = list(boundary_charts)
|
||||
@@ -78,7 +96,7 @@ def scan_varga_segments(body: dict[str, Any], *, cache_dir: Path | None = None)
|
||||
moment = start + timedelta(minutes=offset)
|
||||
chart = domain_calculation_service.compute_chart({
|
||||
"lat": profile["lat"], "lon": profile["lon"], "tz": profile["tz"],
|
||||
"ayanamsa": "raman", "node_mode": "mean",
|
||||
"ayanamsa": ayanamsa, "node_mode": "mean",
|
||||
"year": moment.year, "month": moment.month, "day": moment.day,
|
||||
"hour": moment.hour, "minute": moment.minute,
|
||||
})
|
||||
@@ -106,7 +124,7 @@ def scan_varga_segments(body: dict[str, Any], *, cache_dir: Path | None = None)
|
||||
payload = {"version": VERSION, "window_key": key, "start_at": body["start_at"], "end_at": body["end_at"],
|
||||
"window_minutes": width, "target_charts": targets, "minutes": minutes,
|
||||
"segments": segments, "full_window_unique": {target: len({row['sign'] for row in rows}) == 1 for target, rows in segments.items()},
|
||||
"ayanamsa": "raman", "node_mode": "mean", "step_minutes": 1}
|
||||
"ayanamsa": ayanamsa, "node_mode": "mean", "step_minutes": 1}
|
||||
if boundary_charts:
|
||||
payload["nearest_boundary"] = _nearest_from_signs(boundary_signs, [row["time"] for row in minutes], recorded_time)
|
||||
root.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
Reference in New Issue
Block a user