From 205f8c9edc49218555eae58da3c7532f081e7754 Mon Sep 17 00:00:00 2001
From: Daniel Friesel <daniel.friesel@uos.de>
Date: Fri, 3 Jun 2022 13:52:42 +0200
Subject: support ignoring 'irrelevant' parameters in FOL function

---
 lib/functions.py  |  3 ++-
 lib/parameters.py | 10 +++++++++-
 2 files changed, 11 insertions(+), 2 deletions(-)

(limited to 'lib')

diff --git a/lib/functions.py b/lib/functions.py
index 0b0044b..aa328ef 100644
--- a/lib/functions.py
+++ b/lib/functions.py
@@ -608,7 +608,7 @@ class FOLFunction(ModelFunction):
         self._num_args = num_args
         self.fit_success = False
 
-    def fit(self, param_values, data):
+    def fit(self, param_values, data, ignore_param_indexes=None):
         categorial_to_scalar = bool(
             int(os.getenv("DFATOOL_PARAM_CATEGORIAL_TO_SCALAR", "0"))
         )
@@ -616,6 +616,7 @@ class FOLFunction(ModelFunction):
             param_values,
             with_nan=False,
             categorial_to_scalar=categorial_to_scalar,
+            ignore_indexes=ignore_param_indexes,
         )
         self.categorial_to_index = categorial_to_index
         self.ignore_index = ignore_index
diff --git a/lib/parameters.py b/lib/parameters.py
index ed56bdd..a636b52 100644
--- a/lib/parameters.py
+++ b/lib/parameters.py
@@ -880,8 +880,16 @@ class ModelAttribute:
         return ret
 
     def build_fol_model(self):
+        ignore_irrelevant = bool(
+            int(os.getenv("DFATOOL_DTREE_IGNORE_IRRELEVANT_PARAMS", "1"))
+        )
+        ignore_param_indexes = list()
+        if ignore_irrelevant:
+            for i, param in enumerate(self.param_names):
+                if not self.stats.depends_on_param(param):
+                    ignore_param_indexes.append(i)
         x = df.FOLFunction(self.median, self.param_names)
-        x.fit(self.param_values, self.data)
+        x.fit(self.param_values, self.data, ignore_param_indexes=ignore_param_indexes)
         if x.fit_success:
             self.model_function = x
         else:
-- 
cgit v1.2.3