From ab7748eec21e57b4723c8e3b478e20cb14a0ceb2 Mon Sep 17 00:00:00 2001
From: Philipp Arras <parras@mpa-garching.mpg.de>
Date: Thu, 28 Oct 2021 00:16:36 +0200
Subject: [PATCH] Observation: properly sort time when binning

---
 resolve/data/observation.py | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/resolve/data/observation.py b/resolve/data/observation.py
index a290b499..bc202224 100644
--- a/resolve/data/observation.py
+++ b/resolve/data/observation.py
@@ -531,6 +531,7 @@ class Observation(BaseObservation):
             ind = np.logical_and(ts >= lo, ts < hi)
             assert np.all(np.isnan(row_to_bin_map[ind]))
             row_to_bin_map[ind] = ii
+        assert np.all(np.diff(row_to_bin_map) >= 0)
 
         assert np.all(~np.isnan(row_to_bin_map))
         row_to_bin_map = row_to_bin_map.astype(int)
@@ -540,7 +541,9 @@ class Observation(BaseObservation):
         assert np.max(ant1) < 1000
         assert np.max(ant2) < 1000
         assert np.max(row_to_bin_map) < np.iinfo(np.dtype("int64")).max / 1000000
-        atset = set(zip(ant1, ant2, row_to_bin_map))
+        atset = np.array(list(set(zip(ant1, ant2, row_to_bin_map))))
+        atset = atset[np.lexsort(atset.T)]
+        atset = tuple(map(tuple, atset))
         dct = {aa: ii for ii, aa in enumerate(atset)}
         dct_inv = {yy: xx for xx, yy in dct.items()}
         masterindex = np.array([dct[(a1, a2, tt)] for a1, a2, tt in zip(ant1, ant2, row_to_bin_map)])
@@ -567,6 +570,8 @@ class Observation(BaseObservation):
         new_times = np.array([dct_inv[ii][2] for ii in range(len(atset))])
         new_times = np.mean(np.array(list_of_timebins), axis=1)[new_times]
 
+        assert np.all(np.diff(new_times) >= 0)
+
         new_ant1 = np.array([dct_inv[ii][0] for ii in range(len(atset))])
         new_ant2 = np.array([dct_inv[ii][1] for ii in range(len(atset))])
         ap = AntennaPositions(new_uvw, new_ant1, new_ant2, new_times)
-- 
GitLab