- [X] Move to a struct-based primitive nodes rather than an enum based.
- The problem with enum-based node is that it is quite difficult to extend with sub-classes
- However, for structs it is as simple as making sure that, probably this needs some scary template-fu, which is not quite bad in itself.
- [X] Implement visitors
- [X] IdentityMapper
- [X] Fold to a different type?
- Like a StringifyMapper?
- [X] Rewrite IdentityMapper using FoldableMapper?
- Tried this and was unsuccessful.
- This should mostly be done using macros.
- [X] IdentityMapperWithContext
- [X] MutIdentityMapper?
- [X] CombineMapper
- [X] CombineMapperWithContext
- [X] WalkMapper
- [X] DependencyMapper
- [X] Force Expression to be derived from:
- [X]
std::fmt::Display
- [X]
std::cmp::Eq
- [X] Probably all the mappers that we implement.
- [X]
- [X] String parsing.
- [ ] Do the Binary Ops have to to “binary”, can they instead be rewritten to take arbitrary number of operands like pymbolic?
- [ ] Parsing: needs helpful error messages.
- Idea: We should probably implement something like IdentityMappers as derive macros.
- [X] Implement get_dependencies
- [ ] Implement substitute
- [ ] Implement evaluate
- [X] Make a deduplicating helper function
- [X] Implement equality mapper
- [X] Implement PartialEq trait for Rc<Expression>
- Not possible.
- [X] Implement Bitwise Operators
- [X] Implement Cached variants of mappers
- [ ] Implement out sub-language as the `eval!` macro
- [X] Add Continuous Integration
- [X] StringifyMapper as Display and Repr for Debug.
- [X] Repr should truncate results with
(...)
. - [X]
expression_trees
is a terrible name, probably rename it to something else?- [X] Rename to SymOxide
- [ ] Implement
scalars!()
which is similar tovariables!
. - [ ] Start working on a design doc
- [X] Visualize to graphviz
- [X] Fix graphvix error detection.