source: orange/Orange/utils/caching.py @ 10651:4f6fcf57db06

Revision 10651:4f6fcf57db06, 1.8 KB checked in by markotoplak, 2 years ago (diff)

Moved caching, collections, debugging, fileutil, r, testing from misc to utils.

Line 
1from __future__ import absolute_import
2from collections import defaultdict
3
4def getCached(data, funct, params = (), kwparams = {}):
5    if not data: return None
6    if getattr(data, "info", None) == None or data.info["__version__"] != data.version:
7        data.setattr("info", {"__version__": data.version})
8
9    if data.info.has_key(funct):
10        return data.info[funct]
11    else:
12        if type(funct) != str:
13            data.info[funct] = funct(*params, **kwparams)
14            return data.info[funct]
15        else:
16            return None
17
18
19def setCached(data, name, info):
20    if not data: return
21    if getattr(data, "info", None) == None or data.info["__version__"] != data.version:
22        data.setattr("info", {"__version__": data.version})
23    data.info[name] = info
24
25def delCached(data, name):
26    if not data: return
27    if getattr(data, "info", None) != None and data.info.has_key(name):
28        del data.info[name]
29
30class DataHintsCache(object):
31    def __init__(self, ):
32        self._hints = defaultdict(lambda: defaultdict(list))
33        pass
34
35    def set_hint(self, data, key, value, weight=1.0):
36        attrs = data.domain.variables + data.domain.getmetas().values()
37        for attr in attrs:
38            self._hints[key][attr].append((value, weight/len(attrs)))
39
40    def get_weighted_hints(self, data, key):
41        attrs = data.domain.variables + data.domain.getmetas().values()
42        weighted_hints = defaultdict(float)
43        for attr in attrs:
44            for val, w in self._hints[key][attr]:
45                weighted_hints[val] += w
46        return sorted(weighted_hints.items(), key=lambda key:key[1], reverse=True)
47
48    def get_hint(self, data, key, default=None):
49        hints = self.get_weighted_hints(data, key)
50        if hints:
51            return hints[0][0]
52        else:
53            return default
54
55data_hints = DataHintsCache()
Note: See TracBrowser for help on using the repository browser.