Skip to content

Commit 24df5ab

Browse files
committed
Cache on Operator
1 parent d854085 commit 24df5ab

File tree

1 file changed

+5
-3
lines changed

1 file changed

+5
-3
lines changed

pyadjoint/adjfloat.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from functools import cached_property, lru_cache, wraps
1+
from functools import cached_property, wraps
22
from itertools import count
33
import numbers
44
import operator
@@ -45,7 +45,6 @@ def fdiff(self, argindex=1):
4545
return sp.Integer(1) / (sp.Integer(1) + self.args[0])
4646

4747

48-
@lru_cache(maxsize=128)
4948
def codegen(expr, symbols, diff=()):
5049
for idx in diff:
5150
expr = expr.diff(symbols[idx])
@@ -58,6 +57,7 @@ class Operator:
5857
def __init__(self, sp_operator, nargs):
5958
self._sp_operator = sp_operator
6059
self._nargs = nargs
60+
self._cache = {}
6161

6262
@property
6363
def sp_operator(self):
@@ -76,7 +76,9 @@ def expr(self):
7676
return self.sp_operator(*self.symbols)
7777

7878
def codegen(self, diff=()):
79-
return codegen(self.expr, self.symbols, diff=diff)
79+
if diff not in self._cache:
80+
self._cache[diff] = codegen(self.expr, self.symbols, diff=diff)
81+
return self._cache[diff]
8082

8183

8284
class AdjFloatExprBlock(Block):

0 commit comments

Comments
 (0)