def assign_caches(self, caches=None): from sfepy.terms import cache_table, DataCaches if not hasattr(self, "use_caches"): return if caches is None: caches = DataCaches() ## print self.name for name, arg_lists in self.use_caches.iteritems(): ## print self.arg_names ## print name, arg_lists for args in arg_lists: ## Order should be handled in terms... args = copy(args) if len(args) and (type(args[-1]) == dict): history_sizes = args.pop() else: history_sizes = None ans = [self.get_arg_name(arg, full=True) for arg in args] cname = "_".join([name] + ans) ## print self.name, name, arg_lists, args, cname ## print history_sizes if caches.has_key(cname): caches[cname].merge_history_sizes(history_sizes) else: ## print 'new' try: constructor = cache_table[name] except: raise RuntimeError, "cache not found! %s in %s" % (name, sorted(cache_table.keys())) cache = constructor(cname, ans, history_sizes) caches.insert_cache(cache) caches.insert_term(cname, self.name, ans) self.caches = caches