You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Funsors currently store data in immutable structures that are typically either nested tuples or frozensets, e.g. Subs converts its dict argument to a nested tuple-of-tuples representing key,value pairs. These internal data structures complicate funsor traversal algorithms (e.g. reinterpret, ast(), get_children()), since the intermediate non-Funsor data structures lack metadata such as .inputs, .output, .fresh, .bound. This complication manifests as extra checks for isinstance(-, Funsor) and extra handling to manually traverse funsor data asts.
Proposed solution
This issue proposes to replace all internal data structure of funsors by additional low-level Pythonic funsors Tuple, Dict, and Set. Like other more mathy funsors, these data structural funsors implement metadata like .inputs, .output, substitution via .__call__() and reinterpreted construction and hash consing via type(-).__call__().
For example Subs.subs : Dict, Delta.terms : Dict, etc.
Remaining questions
Should we also implement Funsor subclasses for constants Str as used as keys? Ideally all terms would be immutable and hash-consed, however strs are used so ubiquitously as keys that it may not be worth the performance overhead. One option would be to instead rely on Python's built-in hash-consing of strings via sys.intern() and move metadata elsewhere, as in Support Python immutable datatypes without subclassing Funsor #526
Tasks
Implement an immutable Dict funsor
Implement an immutable Set funsor
Use Dict and Set internally in other Funsors
Simplify funsor.interpreter
The text was updated successfully, but these errors were encountered:
I'm unsure whether this is still relevant, and I'd be fine closing this. I haven't minded the singledispatch solutions to special casing. I'm also concerned that being more abstract will lead to higher overhead.
Alternative to #526
The problem
Funsors currently store data in immutable structures that are typically either nested tuples or frozensets, e.g.
Subs
converts its dict argument to a nested tuple-of-tuples representing key,value pairs. These internal data structures complicate funsor traversal algorithms (e.g.reinterpret
,ast()
,get_children()
), since the intermediate non-Funsor
data structures lack metadata such as.inputs
,.output
,.fresh
,.bound
. This complication manifests as extra checks forisinstance(-, Funsor)
and extra handling to manually traverse funsor data asts.Proposed solution
This issue proposes to replace all internal data structure of funsors by additional low-level Pythonic funsors
Tuple
,Dict
, andSet
. Like other more mathy funsors, these data structural funsors implement metadata like.inputs
,.output
, substitution via.__call__()
and reinterpreted construction and hash consing viatype(-).__call__()
.For example
Subs.subs : Dict
,Delta.terms : Dict
, etc.Remaining questions
Funsor
subclasses for constantsStr
as used as keys? Ideally all terms would be immutable and hash-consed, howeverstr
s are used so ubiquitously as keys that it may not be worth the performance overhead. One option would be to instead rely on Python's built-in hash-consing of strings via sys.intern() and move metadata elsewhere, as in Support Python immutable datatypes without subclassing Funsor #526Tasks
Dict
funsorSet
funsorDict
andSet
internally in otherFunsor
sfunsor.interpreter
The text was updated successfully, but these errors were encountered: