JuliaMath / Polynomials.jl

Polynomial manipulations in Julia
http://juliamath.github.io/Polynomials.jl/
Other
303 stars 74 forks source link

type stability: `(::Polynomial)(::ImmutablePolynomial)` composition yields `ImmutablePolynomial` #520

Open nsajko opened 1 year ago

nsajko commented 1 year ago

With v4.0.0:

julia> using Test, Polynomials

julia> p = ImmutablePolynomial((1,))
ImmutablePolynomial(1)

julia> q = Polynomial([10, 20])
Polynomial(10 + 20*x)

julia> @inferred q(p)
ERROR: return type Polynomials.ImmutableDensePolynomial{Polynomials.StandardBasis, Int64, :x, 1} does not match inferred return type Any

It doesn't make sense for this composition to return an ImmutableDensePolynomial, because that makes type stability impossible, because the degree of q is not available in the type domain.

jverzani commented 1 year ago

Hmm, not sure what is right here, as q(p) will return something with container type of p in other cases. The mixed case is tricky with immutable polynomials.

jverzani commented 1 year ago

I just put in a PR to start addressing issue like this. I'd also like to special case a path for p(q) when both are immutable.