Symbolics.jl
Symbolics.jl copied to clipboard
Basic operations on `Num` have `Any` return type
Would it make sense to try to make basic operations between Num
, such as the one below, type stable, at least in their return type?
julia> @code_warntype a/a
MethodInstance for /(::Num, ::Num)
from /(a::Num, b::Num) in Symbolics at /home/fredrikb/.julia/packages/SymbolicUtils/9IZDP/src/methods.jl:67
Arguments
f::Core.Const(/)
a::Num
b::Num
Body::Any
1 ─ (SymbolicUtils.assert_like)(f, Symbolics.Number, a, b)
│ %2 = Symbolics.value(a)::Any
│ %3 = Symbolics.value(b)::Any
│ %4 = (f)(%2, %3)::Any
│ %5 = Symbolics.Num(%4)::Any
└── return %5
This needs the update for Unityper IIRC, which @shashi is working on.
On Julia 1.8:
julia> versioninfo()
Julia Version 1.8.0-rc1
Commit 6368fdc6565 (2022-05-27 18:33 UTC)
julia> @code_warntype x/x
MethodInstance for /(::Num, ::Num)
from /(a::Num, b::Num) in Symbolics at /Users/shashig/.julia/packages/SymbolicUtils/9IZDP/src/methods.jl:67
Arguments
f::Core.Const(/)
a::Num
b::Num
Body::Num
1 ─ (SymbolicUtils.assert_like)(f, Symbolics.Number, a, b)
│ %2 = Symbolics.value(a)::Any
│ %3 = Symbolics.value(b)::Any
│ %4 = (f)(%2, %3)::Any
│ %5 = Symbolics.Num(%4)::Num
└── return %5