-
Haak, R. (Romeo) authoredHaak, R. (Romeo) authored
model.py 4.18 KiB
from statistics import Statistics
from utils import Utils as ut
class Model:
"""Internal data representation and processing."""
def __init__(self):
self._stats = Statistics(None)
self._data_source = None
self._multi_data_shadow = {} # dict because fast and indexing
self._multi_data_source = {}
self._data_shadow = None
self._analysis_results = {}
self._multi_results = {}
self._save_pref = None
self._id = "" # this is a string
@property
def multi_results(self):
return self._multi_results
@multi_results.setter
def multi_results(self, results):
self._multi_results = results
@property
def analysis_results(self):
return self._analysis_results
@analysis_results.setter
def analysis_results(self, results):
self._analysis_results = results
@property
def data_shadow(self):
return self._data_shadow
@data_shadow.setter
def data_shadow(self, data):
self._data_shadow = data
@property
def multi_data_shadow(self):
return self._multi_data_shadow
@multi_data_shadow.setter
def multi_data_shadow(self, data):
self._multi_data_shadow = data
@property
def id(self):
return self._id
@id.setter # TODO: DO we still use this? As far as I have seen, we do not. Also, change name of id here.
def id(self, id):
self._id = id
@property
def save_pref(self):
return self._save_pref
@save_pref.setter
def save_pref(self, save_pref_code):
self._save_pref = save_pref_code
@property
def data_source(self):
return self._data_source
@data_source.setter
def data_source(self, data):
self._data_source = data
@property
def multi_data_source(self):
return self._multi_data_source
@multi_data_source.setter
def multi_data_source(self, data):
self._multi_data_source = data
def has_source(self):
"""Check whether self._data_source has a value."""
return self._data_source is not None \
or self._multi_data_source is not None
def has_shadow(self):
"""Check whether self._data_shadow has a value."""
return self._data_shadow is not None \
or self._multi_data_shadow is not None
def analysis_complete(self):
"""Check whether self._analysis_results has a value."""
return self._analysis_results or self._multi_results
def get_multi_data(self, data_type): #TODO: Why do we have this as well when you can also just get multi_data_source itself?
"""Get data according to type
Args:
data_type: the type of data to get (either source or shadow)
"""
if data_type == "source":
return self._multi_data_source
else:
return self._multi_data_shadow
def compare(self):
""""Run the analyses and saves the results."""
if self.has_source() and self.has_shadow():
if self._multi_data_shadow and not self._multi_data_source:
for key, data in self._multi_data_shadow.items():
if self._id is ut.filter_key(key):
result = self._stats.analyze(self._data_source, data)
ut.add_to_dict(key+"_res", result, self._multi_results)
else:
pass
elif self._multi_data_shadow and self._multi_data_source:
for key, source in self._multi_data_source.items():
for key2, shadow in self._multi_data_shadow.items():
if key == ut.filter_key(key2):
result = self._stats.analyze(source, shadow)
ut.add_to_dict(key+"_res",
result, self._multi_results)
else:
pass
elif self._data_source and self._data_shadow:
self._analysis_results = \
self._stats.analyze(self._data_source, self._data_shadow)
else:
print("cannot do this yet")
else:
pass