From 2ffa8d141426ca2e2397c65c6cc358b8c09c59d9 Mon Sep 17 00:00:00 2001
From: Colm Talbot <colm.talbot@ligo.org>
Date: Tue, 7 Apr 2020 11:00:00 -0400
Subject: [PATCH] Add hyperpe caching

---
 bilby/hyper/model.py | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/bilby/hyper/model.py b/bilby/hyper/model.py
index 9b6e45b53..925525e68 100644
--- a/bilby/hyper/model.py
+++ b/bilby/hyper/model.py
@@ -16,13 +16,24 @@ class Model(object):
             List of functions to compute.
         """
         self.models = model_functions
+        self._cached_parameters = {model: None for model in self.models}
+        self._cached_probability = {model: None for model in self.models}
 
         self.parameters = dict()
 
     def prob(self, data, **kwargs):
         probability = 1.0
         for ii, function in enumerate(self.models):
-            probability *= function(data, **self._get_function_parameters(function))
+            function_parameters = self._get_function_parameters(function)
+            if self._cached_parameters[function] == function_parameters:
+                new_probability = self._cached_probability[function]
+            else:
+                new_probability = function(
+                    data, **self._get_function_parameters(function)
+                )
+                self._cached_parameters[function] = function_parameters
+                self._cached_probability[function] = new_probability
+            probability *= new_probability
         return probability
 
     def _get_function_parameters(self, func):
-- 
GitLab