aehmc. Time for a good clean.
RandomStreamseeding ones then
Apply-based caching might be the easiest and most "amortized" approach
dictlookup + storage cost, those are generally very cheap for the relevant object types (i.e.
Op.make_nodeconstruction plus the caching cost
Op.make_nodecan easily be much larger than the cache lookup cost, there's the solid potential for a cost reduction with this approach
Op.make_nodecalls that would be removed
Opare combined again later on within the same session, a new unique representative term is constructed and cached
Applynode is no longer being used in a given session (i.e. isn't in a user-owned graph object or something), then the object will be garbage collected and the weak reference invalidated
FunctionGraphwould need to be change so that
Applynodes are no longer updated in-place, which we've already discussed and prototyped
Applynodes to have a usable record of all equivalent graphs under rewrites
Op.make_nodecalls would be cached and the same output returned?