From a774bc101e6d3c0a88b1e7847fccd0e96e584d4a Mon Sep 17 00:00:00 2001
From: dmt <>
Date: Thu, 24 Oct 2019 21:44:28 +0200
Subject: [PATCH] Initialize pragmatic machine learning models with meta
 information.

---
 cml/domain/reconstruction.py | 42 +++++++++++++++++++++++++++++++-----
 1 file changed, 37 insertions(+), 5 deletions(-)

diff --git a/cml/domain/reconstruction.py b/cml/domain/reconstruction.py
index 830aab6..fef8f6e 100644
--- a/cml/domain/reconstruction.py
+++ b/cml/domain/reconstruction.py
@@ -95,10 +95,16 @@ class Reconstructor:
         self.ml_models = ml_models
         self.knowledge_domain = knowlege_domain
         self._category = None
+        self._free_id = None
         self.__reconstruction = None
 
-    def reconstruct(self, learnblock):
-        reliabilities_to_model = self.__reconstruction(learnblock)
+    def reconstruct(self, learnblock, which_models=None, meta=None):
+        if not which_models:
+            which_models = [m.abbreviation for m in self.ml_models]
+
+        reliabilities_to_model = self.__reconstruction(learnblock,
+                                                       which_models,
+                                                       meta)
         if reliabilities_to_model.keys():
             return determine_winner(reliabilities_to_model)
         raise NoModelReconstructedError()
@@ -118,9 +124,22 @@ class Reconstructor:
         else:
             raise ValueError()
 
-    def _reconstruct_conceptual(self, learnblock, krippen=None):
+    @property
+    def free_id(self):
+        return self._free_id
+
+    @free_id.setter
+    def free_id(self, value):
+        self._free_id = iter(value)
+
+    def _reconstruct_conceptual(self,
+                                learnblock,
+                                which_models,
+                                krippen=None,
+                                meta=None):
         reliability_to_model = defaultdict(list)
         for model in self.ml_models:
+            if model.abbreviation not in which_models: continue
 
             # train model
             train_block, eval_block = self.split(learnblock)
@@ -134,12 +153,25 @@ class Reconstructor:
                                                     learnblock,
                                                     krippen)
                 if reliability >= self.settings.min_reliability:
+                    # TODO (dmt): Fix the knowledge tier after first iteration!
+                    prag_meta_data = Metadata(
+                        "C",
+                        1,
+                        next(self.free_id),
+                        learnblock.indexes,
+                        learnblock.min_timestamp,
+                        learnblock.max_timestamp,
+                        [model.subject],
+                        [".".join(["C", '1', learnblock.purpose])]
+                    )
+
                     reliability_to_model[reliability].append(
-                        PragmaticMachineLearningModel(trained_model,
+                        PragmaticMachineLearningModel(prag_meta_data,
+                                                      trained_model,
                                                       learnblock))
         return reliability_to_model
 
-    def _reconstruct_procedural(self, learnblock, krippen=None):
+    def _reconstruct_procedural(self, learnblock, krippen=None, meta=None):
         reliability_to_model = defaultdict(list)
         for model in self.ml_models:
 
-- 
GitLab