From 1d0596dc21fe690a38ff0850ec7295b6b28d5bc9 Mon Sep 17 00:00:00 2001
From: Jorrit Schaap <schaap@astron.nl>
Date: Wed, 18 Oct 2023 10:55:39 +0200
Subject: [PATCH] workaround for astropy bug

---
 SAS/TMSS/backend/src/tmss/tmssapp/conversions.py | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/SAS/TMSS/backend/src/tmss/tmssapp/conversions.py b/SAS/TMSS/backend/src/tmss/tmssapp/conversions.py
index b675b621c80..f070832a7ec 100644
--- a/SAS/TMSS/backend/src/tmss/tmssapp/conversions.py
+++ b/SAS/TMSS/backend/src/tmss/tmssapp/conversions.py
@@ -446,8 +446,16 @@ def coordinates_timestamp_and_station_to_target_transit(pointing: Pointing, time
         return target_transit
 
     if pointing.direction_type == 'SUN':
-        target_transit = observer.noon(time=Time(timestamp), n_grid_points=n_grid_points, which=which)
-        return target_transit.to_datetime()
+        try:
+            target_transit = observer.noon(time=Time(timestamp), n_grid_points=n_grid_points, which=which)
+            return target_transit.to_datetime()
+        except ValueError:
+            # workaround for astropy bug
+            # on rare occasions, astropy can't compute noon.
+            # probably due to rounding/precision.
+            # try again (recurse) with a slightly altered timestamp and n_grid_points
+            # in the very worst case this leads to a recursion stack overflow
+            return coordinates_timestamp_and_station_to_target_transit(pointing, timestamp + timedelta(minutes=1), observer, n_grid_points+1, which)
 
     if pointing.direction_type == 'MOON':
         if which != 'nearest':
-- 
GitLab