source: orange/orange/orngDataCaching.py @ 8042:ffcb93bc9028

Revision 8042:ffcb93bc9028, 1.8 KB checked in by markotoplak, 3 years ago (diff)

Hierarchical clustering: also catch RuntimeError when importing matplotlib (or the documentation could not be built on server).

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()
55   
Note: See TracBrowser for help on using the repository browser.