From 534df357cd96f95947be03394ed37f524e90cdc5 Mon Sep 17 00:00:00 2001
From: Jean-Baptiste Bayle <j2b.bayle@gmail.com>
Date: Tue, 2 Feb 2021 13:40:10 +0100
Subject: [PATCH] Optimize to use scalar when constant frequency offset

---
 lisainstrument/containers.py |  7 +++++++
 lisainstrument/instrument.py | 18 ++++++++++--------
 2 files changed, 17 insertions(+), 8 deletions(-)

diff --git a/lisainstrument/containers.py b/lisainstrument/containers.py
index bd08ee2..434a14e 100644
--- a/lisainstrument/containers.py
+++ b/lisainstrument/containers.py
@@ -93,6 +93,13 @@ class ForEachObject(abc.ABC):
         """Return dictionary items."""
         return self.dict.items()
 
+    def __eq__(self, other):
+        if isinstance(other, self.__class__):
+            return self.dict == other.dict
+        if isinstance(other, dict):
+            return self.dict == other
+        return numpy.all([self[index] == other for index in self.indices()])
+
     def __repr__(self):
         return repr(self.dict)
 
diff --git a/lisainstrument/instrument.py b/lisainstrument/instrument.py
index d41cb06..2917444 100644
--- a/lisainstrument/instrument.py
+++ b/lisainstrument/instrument.py
@@ -762,17 +762,19 @@ class Instrument:
             )
 
         ## Clock noise
-        # TODO: better optimize when clock_freqlindrifts and clock_freqquaddrifts == 0
 
         logging.info("Generating clock noise time series")
-        t = self.physics_t
-        self.clock_noise_offsets = ForEachSC(lambda sc:
-            self.clock_freqoffsets[sc] + self.clock_freqlindrifts[sc] * t + self.clock_freqquaddrifts[sc] * t**2
-        )
 
-        for sc in self.SCS:
-            if self.physics_size and numpy.all(self.clock_noise_offsets[sc] == self.clock_noise_offsets[sc][0]):
-                self.clock_noise_offsets[sc] = self.clock_noise_offsets[sc][0]
+        if self.clock_freqlindrifts == self.clock_freqquaddrifts == 0:
+            # Optimize to use a scalar if we only have a constant frequency offset
+            self.clock_noise_offsets = ForEachSC(lambda sc:
+                self.clock_freqoffsets[sc]
+            )
+        else:
+            t = self.physics_t
+            self.clock_noise_offsets = ForEachSC(lambda sc:
+                self.clock_freqoffsets[sc] + self.clock_freqlindrifts[sc] * t + self.clock_freqquaddrifts[sc] * t**2
+            )
 
 
         logging.info("Generating clock noise fluctuations time series")
-- 
GitLab