Address #13: Use sympy.codegen.rewriting.optimize
It's really comfortable to write optimizations in terms of sympy.codegen.rewrite.RewriteOptim
:
# Evaluates all constant terms
evaluate_constant_terms = ReplaceOptim(
lambda e: hasattr(e, 'is_constant') and e.is_constant,
lambda p: p.evalf()
)
This PR adds a parameter sympy_optimizations
to the create_*_kernel
functions that applies the list of optimizations to the assignments before creating the AST.
sympy.codegen.rewrite
already has some optimizations. Some similar to the optimizations of pystencils.
For example create_expand_pow_optimization(limit)
is really similar to the logic in CustomSympyPrinter._print_Pow
.
See #13 (closed)
Problem: old versions of sympy (e.g. from ubuntu CI) don't have sympy.codegen.rewrite
. The optimizations are skipped in that case. test_and_coverage
applies all optimizations.
We could also try to implement a fma-optimization (fused-multipy add) with that and sympy.Wild
.