Beispiel #1
0
    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