source: orange/Orange/misc/caching.py @ 9702:0f1d2fffc2eb

Revision 9702:0f1d2fffc2eb, 1.8 KB checked in by anze <anze.staric@…>, 2 years ago (diff)

Moved orngDataCaching to misc.caching.

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