Symbolics.jl icon indicating copy to clipboard operation
Symbolics.jl copied to clipboard

Basic operations on `Num` have `Any` return type

Open baggepinnen opened this issue 2 years ago • 2 comments

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

baggepinnen avatar Jun 20 '22 14:06 baggepinnen

This needs the update for Unityper IIRC, which @shashi is working on.

ChrisRackauckas avatar Jun 20 '22 14:06 ChrisRackauckas

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

shashi avatar Jun 28 '22 18:06 shashi