Comments (8)
I'm guessing the data structures you're using are de facto immutable. The cleanest thing IMO would be to switch to actually immutable data structures if that's possible. (tuple
, immutables.Map
). Is that in the cards for your use case?
from pymbolic.
Relatedly, I'm guessing this is for pystella. Would you want to include that in our downstream CI to allow us to not accidentally break your code?
from pymbolic.
I'm guessing the data structures you're using are de facto immutable. The cleanest thing IMO would be to switch to actually immutable data structures if that's possible. (tuple, immutables.Map). Is that in the cards for your use case?
I think that's the case (and the morally right thing to do), but I'd probably sooner be lazy just override __call__
to behave like CachingMapperMixin and simply recurse on any unhashable object. For me that's totally fine in effect, since lists and dicts are usually just expression containers that are mapped only once. (Edit: the containers are mapped once, not necessarily the contained expressions.)
But I might still argue that the base cached mappers (which do inherit map_list
methods, I think) could more gracefully handle lists (or numpy arrays, or whatever data structures the noncaching mappers support), whether by opting out of caching in the same way as that other CachingMapperMixin
or by yelling about it. (The current exception, e.g. line 69 here, is obviously not useless, but does require navigating to the pymbolic source to know what's going on.)
Would you want to include that in our downstream CI to allow us to not accidentally break your code?
Thanks very much for offering! But actually, no - I definitely wouldn't want (or need) to ever hold you up for that reason and am happy to let weekly CI keep me apprised. My own work is pinned to my streaming prefetch branch anyway, which I rebase on main on the semi-annual occasion that I feel like doing so. No need for the extra carbon =)
from pymbolic.
Oh, PS: loopy's pymbolic dep needs a version bump.
from pymbolic.
Thanks! inducer/loopy#619
from pymbolic.
@inducer - just so this issue doesn't needlessly linger, let me know if you're amenable to a patch along the lines of my suggestion, otherwise feel free to close this.
from pymbolic.
I kind of feel like extending CachedMapper
to deal with mutable structures is inviting mistakes. I also view map_list
as a mistake, so I'm not super-inclined to perpetuate it. So maybe that's a patch that I'd ask you to carry in your branch.
Btw thanks for reporting the CachingMapperMixin
/CachedMapper
duplication. #103 deprecates CachingMapperMixin
.
from pymbolic.
Totally reasonable, thanks for your thoughts!
from pymbolic.
Related Issues (20)
- Minimum python version for running tests is unexpectedly 3.10 HOT 2
- Test missing assertions HOT 3
- Pymbolic to SymEngine conversion error when using FloorDiv. HOT 6
- ParseError when parsing assignment expression HOT 4
- pymbolic interoperabiity with python ast described in the pymbolic documentation raises an exception under python 3.8.2 HOT 2
- Symengine version mismatch in CI HOT 9
- TypeError for foreign unhashable types HOT 4
- Mapper for deriving subexpressions as a list HOT 1
- [parser] Cannot parse boolean literals HOT 2
- Use a better parser HOT 3
- Applicability for Image Domain Delayed Operation Problem HOT 3
- Method for removing the `__getinitargs__` and `init_arg_names` boilerplate. HOT 1
- Symengine conversion fails due to potentially spurious isinstance check HOT 2
- [Parser] Incorrect if-else precedence
- StringifyMapper: Incorrect result for side-by-side product nodes HOT 7
- Stop auto-flattening HOT 3
- Equality comparison of DAGs can have exponential complexity
- EvaluationMapper can't handle math functions HOT 1
- Memoizing results of traversals HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from pymbolic.