3 def memoize_with_backing(backing, has_inverses=set()):
6 res = backing.get((f, args), _nothing)
7 if res is not _nothing:
12 backing[(f, args)] = res
13 for inverse in has_inverses:
14 backing[(inverse, args[:-1] + (res,))] = args[-1]
21 return memoize_with_backing({})(f)