diff --git a/cml/domain/reconstruction.py b/cml/domain/reconstruction.py index 14a7dd387eea681d12fd6e763a0c73d56e92b6a9..830aab67904a519c68edeb2cb8400cc8cf03083d 100644 --- a/cml/domain/reconstruction.py +++ b/cml/domain/reconstruction.py @@ -1,5 +1,6 @@ from random import sample from collections import defaultdict +from dataclasses import dataclass from functools import partial import krippendorff @@ -12,10 +13,79 @@ __all__ = ( ) +@dataclass +class Metadata: + knowledge_domain: str + knowledge_tier: int + identifier: int + pre_image: list + t_min: int + t_max: int + sigma: list + zeta: list + + def __str__(self): + return f"Knowledge domain: <{self.knowledge_domain}> " \ + f"Knowledge tier: <{self.knowledge_tier}> " \ + f"Identifier: <{self.identifier}> " \ + f"Pre image: <{self.pre_image}> " \ + f"T min: <{self.t_min}> " \ + f"T max: <{self.t_max}> " \ + f"Subjects: <{self.sigma}> " \ + f"Puposes: <{self.zeta}>" + + class PragmaticMachineLearningModel: - def __init__(self, model, learnblock): + def __init__(self, meta, model, learnblock): + self.meta = meta self.model = model self.domain_size = learnblock.n_features + self.domain = learnblock.indexes + + def __hash__(self): + return hash(self.uid) + + def __eq__(self, other): + if isinstance(other, PragmaticMachineLearningModel): + return hash(self) == hash(other) + raise NotImplementedError() + + @property + def tier(self): + return self.meta.knowledge_tier + + @property + def min_timestamp(self): + return self.meta.t_min + + @property + def max_timestamp(self): + return self.meta.t_max + + @property + def pre_image(self): + return self.meta.pre_image + + @property + def subject(self): + return self.meta.sigma + + @property + def purpose(self): + return self.meta.zeta + + @property + def uid(self): + return ".".join([self.meta.knowledge_domain, + str(self.meta.knowledge_tier), + str(self.meta.identifier)]) + + @property + def sample_times(self): + pass + + def fusion(self, prag_model): + pass class Reconstructor: