Address #13: Use sympy.codegen.rewriting.optimize
It's really comfortable to write optimizations in terms of
# 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.
create_expand_pow_optimization(limit) is really similar to the logic in
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