Skip to content
Snippets Groups Projects
Commit 5b3b8563 authored by Radek Hušek's avatar Radek Hušek
Browse files

add option to disable caching

parent 157aed9b
No related branches found
No related tags found
No related merge requests found
......@@ -129,9 +129,9 @@ def _init_():
_gadget_cache = utils.DynamicLRU()
def eval(self, p, track_origins=False):
def eval(self, p, track_origins=False, **kwargs):
assert self.is_graph()
ret = self.eval_gadget(p, track_origins=track_origins)
ret = self.eval_gadget(p, track_origins=track_origins, **kwargs)
if not track_origins: return p.finalize(ret)
return (p.finalize(ret), self.enumerate(ret))
......@@ -150,12 +150,12 @@ def _init_():
super().__init__(size)
self.value = value
def eval_gadget(self, _, track_origins=None):
def eval_gadget(self, _, track_origins=None, no_cache=False):
return self.value
class BaseGadget(Gadget):
def eval_gadget(self, parameter, track_origins=None):
def eval_gadget(self, parameter, track_origins=None, no_cache=False):
try:
if self is CUBIC_VERTEX:
return parameter.CUBIC_VERTEX
......@@ -186,7 +186,7 @@ def _init_():
self._info = (tuple(gadgets), joins, outs)
def eval_gadget(self, parameter, track_origins=False):
def eval_gadget(self, parameter, track_origins=False, no_cache=False):
gadgets, joins, outs = self._info
def do_eval():
......@@ -196,9 +196,8 @@ def _init_():
)
return ret
return self._cache.get((parameter, self._info), do_eval)
if no_cache: return do_eval()
return self._cache.get((parameter, self), do_eval)
def ParametrizedGraphSequence(cls):
......@@ -246,7 +245,8 @@ def _init_():
start_gadget = self.gadget(start_at)
boundaries = set()
new_boundaries = set( b.boundary for b in start_gadget.eval_gadget(parameter) )
new_boundaries = set( b.boundary for b in
start_gadget.eval_gadget(parameter, no_cache=True) )
i = 0
while True:
......@@ -258,7 +258,7 @@ def _init_():
start_gadget.size(),
[ Boundary(k, 1) for k in boundaries ]
)
out = self._next_gadget(gadget).eval_gadget(parameter)
out = self._next_gadget(gadget).eval_gadget(parameter, no_cache=True)
new_boundaries = set( b.boundary for b in out )
print("Loop %i done - %i boundaries (%i new)" % \
(i, len(new_boundaries), len(new_boundaries.difference(boundaries))))
......@@ -271,15 +271,18 @@ def _init_():
m = matrix(QQ, size, size, {
(rename[b.boundary], rename[col]): b.value
for col in sorted_boundaries
for b in self._next_gadget(FakeGadget(start_gadget.size(), [ Boundary(col, 1) ])).eval_gadget(parameter)
for b in self._next_gadget(FakeGadget(start_gadget.size(),
[ Boundary(col, 1) ])).eval_gadget(parameter, no_cache=True)
})
iv = matrix(QQ, size, 1, {
(rename[b.boundary], 0): b.value for b in start_gadget.eval_gadget(parameter)
(rename[b.boundary], 0): b.value for b in
start_gadget.eval_gadget(parameter, no_cache=True)
})
fin = matrix(QQ, 1, size, {
(0, rename[col]): self._make_graph(FakeGadget(start_gadget.size(), [ Boundary(col, 1) ])).eval(parameter)
(0, rename[col]): self._make_graph(FakeGadget(start_gadget.size(),
[ Boundary(col, 1) ])).eval(parameter, no_cache=True)
for col in sorted_boundaries
})
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment