| Line | Exclusive | Inclusive | Code |
|---|---|---|---|
| 1 | Base.convert(::Type{M}, v::Variable) where {Vars, M <: Monomial{Vars}} = convert(M, Monomial(v)) | ||
| 2 | Base.convert(::Type{Monomial}, v::Variable) = Monomial(v) | ||
| 3 | Base.convert(::Type{Term{T, M1}}, m::Monomial) where {T, M1} = Term(one(T), convert(M1, m)) | ||
| 4 | Base.convert(::Type{Term{T, M}}, v::Variable) where {T, M} = Term(one(T), convert(M, v)) | ||
| 5 | Base.convert(T::Type{Polynomial{C1, T1, V1}}, p::Polynomial) where {C1, T1, V1} = T(convert(V1, p.terms)) | ||
| 6 | # Break ambibuity | ||
| 7 | Base.convert(T::Type{Polynomial{C1, T1, V1}}, x::MP.AbstractTermLike) where {C1, T1, V1} = convert(T, Polynomial(convert(T1, x))) | ||
| 8 | |||
| 9 | MP.convertconstant(T::Type{Term{T1, M1}}, α) where {T1, M1} = T(convert(T1, α), M1()) | ||
| 10 | MP.convertconstant(T::Type{Polynomial{C1, T1, V1}}, α) where {C1, T1, V1} = convert(T, Polynomial(convert(T1, α))) | ||
| 11 | |||
| 12 | Base.convert(T::Type{Monomial{V}}, m::Monomial) where {V} = convert(Monomial{V, nvariables(T)}, m) | ||
| 13 | |||
| 14 | @pure function matchindices(::Type{Monomial{V1, N1}}, ::Type{Monomial{V2, N2}}) where {V1, N1, V2, N2} | ||
| 15 | i2 = 1 | ||
| 16 | inds = ntuple(i -> begin | ||
| 17 | if i2 > N2 | ||
| 18 | 0 | ||
| 19 | elseif V1[i] === V2[i2] | ||
| 20 | i2 += 1 | ||
| 21 | i2 - 1 | ||
| 22 | else | ||
| 23 | 0 | ||
| 24 | end | ||
| 25 | end, Val{N1}()) | ||
| 26 | if i2 <= N2 | ||
| 27 | throw(InexactError(:matchindices, Monomial{V1, N1}, Monomial{V2, N2})) | ||
| 28 | end | ||
| 29 | inds | ||
| 30 | end | ||
| 31 | |||
| 32 | function Base.convert(::Type{Monomial{V1, N1}}, m::Monomial) where {V1, N1} | ||
| 33 | inds = matchindices(Monomial{V1, N1}, typeof(m)) | ||
| 34 | exps = ntuple(i -> begin | ||
| 35 | @inbounds ii = inds[i] | ||
| 36 | if ii == 0 | ||
| 37 | 0 | ||
| 38 | else | ||
| 39 | m.exponents[ii] | ||
| 40 | end | ||
| 41 | end, Val{N1}()) | ||
| 42 | Monomial{V1, N1}(exps) | ||
| 43 | end | ||
| 44 | |||
| 45 | Base.convert(::Type{Term{T1, M1}}, t::Term) where {T1, M1} = Term{T1, M1}(MA.scaling_convert(T1, t.coefficient), convert(M1, t.monomial)) | ||
| 46 | 79 (9 %) |
79 (100 %)
samples spent calling
Polynomial
MP.polynomial!(v::AbstractVector{<:Term}, ::MP.SortedUniqState) = Polynomial(v)
|
|
| 47 | function MP.polynomial(p::P, ::Type{C}) where {P<:PolynomialLike, C} | ||
| 48 | convert(polynomialtype(P, C), p) | ||
| 49 | end |