From f81eca75e67c88be3cdc5c30844f95be9a58d6e9 Mon Sep 17 00:00:00 2001
From: "jannik.luethje" <=>
Date: Thu, 11 Apr 2024 15:48:57 +0200
Subject: [PATCH] Release version 0.0.11

---
 dep/mcpp                                  |  2 +-
 gaussian process/training/python/utils.py | 25 +++++++++++++++++++----
 2 files changed, 22 insertions(+), 5 deletions(-)

diff --git a/dep/mcpp b/dep/mcpp
index 69a763e..fb61bbb 160000
--- a/dep/mcpp
+++ b/dep/mcpp
@@ -1 +1 @@
-Subproject commit 69a763e55faf6557af0839a06fa82eb919b062e4
+Subproject commit fb61bbb8733b23a0b48cb86f016429594ee062c5
diff --git a/gaussian process/training/python/utils.py b/gaussian process/training/python/utils.py
index 7831b30..2caa3ae 100644
--- a/gaussian process/training/python/utils.py	
+++ b/gaussian process/training/python/utils.py	
@@ -4,6 +4,7 @@ from pathlib import Path
 import json
 import torch
 from gpytorch.means import ConstantMean, ZeroMean
+from gpytorch.likelihoods import GaussianLikelihood, FixedNoiseGaussianLikelihood
 # Import MeLOn
 import maingopy.melonpy as melonpy
 # If you are not getting MeLOn through MAiNGO, use:
@@ -51,8 +52,16 @@ def generate_melon_gp_object(GP_model, GP_likelihood, X, y, matern, scaler):
 
     noise = GP_likelihood.noise.detach().numpy()
     cov_mat = GP_model.covar_module(X)
-    gp_data.K = cov_mat.numpy() + noise * np.eye(N=gp_data.nX)
-    gp_data.invK = np.linalg.inv(gp_data.K)
+
+    if isinstance(GP_likelihood, GaussianLikelihood):
+        K_numpy = cov_mat.numpy() + noise * np.eye(N=gp_data.nX)
+    elif isinstance(GP_likelihood, FixedNoiseGaussianLikelihood):
+        K_numpy = cov_mat.numpy() + np.diag(noise)
+    else:
+        raise Exception(f'Likelihood {type(GP_likelihood)} currently not supported.') 
+
+    gp_data.K = K_numpy
+    gp_data.invK = np.linalg.inv(K_numpy)
 
     gp_data.matern = matern
     kernel_data = melonpy.KernelData()
@@ -106,8 +115,16 @@ def save_model_to_json(filepath, filename, GP_model, GP_likelihood, X, y, matern
     noise = GP_likelihood.noise.detach().numpy()
 
     cov_mat = GP_model.covar_module(X).numpy()
-    prediction_parameters["K"] = (cov_mat + noise * np.eye(N=prediction_parameters["nX"])).tolist()
-    prediction_parameters["invK"] = np.linalg.inv(cov_mat + noise * np.eye(N=prediction_parameters["nX"])).tolist()
+
+    if isinstance(GP_likelihood, GaussianLikelihood):
+        K_numpy = cov_mat.numpy() + noise * np.eye(N=prediction_parameters["nX"])
+    elif isinstance(GP_likelihood, FixedNoiseGaussianLikelihood):
+        K_numpy = cov_mat.numpy() + np.diag(noise)
+    else:
+        raise Exception(f'Likelihood {type(GP_likelihood)} currently not supported.') 
+
+    prediction_parameters["K"] = K_numpy.tolist()
+    prediction_parameters["invK"] = np.linalg.inv(K_numpy).tolist()
 
     if not 'input' in scalers or not isinstance(scalers['input'], MinMaxScaler):
         raise Exception("There has to be an inputscaler which is a scikit-learn MinMaxScaler instance")
-- 
GitLab