SymPy.jl vs SymEngine.jl vs Reduce.jl vs

Thank you!

I tried to play around with it. However, I do not seem to understand how to get it to work. For example, I try to expand a function and to differentiate a function, by slightly modifying your codes:

using ModelingTools
using SymEngine

julia> f( (x,f) ) = x^2 + y
f (generic function with 1 method)

julia> vars = @variables x, y
(x, y)

julia> ex = f(vars)
x ^ 2 + y

julia> diff(ex, x)
ERROR: MethodError: no method matching diff(::Operation, ::Operation)
Stacktrace:
 [1] top-level scope at REPL[48]:1

julia> f( (x,f) ) = x^2 + y*x + (x+1)*(x+2)
f (generic function with 1 method)

julia> vars = @variables x, y
(x, y)

julia> ex = f(vars)
(x ^ 2 + y * x) + (x + 1) * (x + 2)

julia> diff(ex, x)
ERROR: MethodError: no method matching diff(::Operation, ::Operation)
Stacktrace:
 [1] top-level scope at REPL[52]:1

julia> expand(ex, x)
ERROR: MethodError: no method matching expand(::Operation, ::Operation)
Stacktrace:
 [1] top-level scope at REPL[53]:1