Skip to content

Commit ebe6ee4

Browse files
authored
Fix promotion with nonconcrete types (#88)
* Fix promotion with nonconcrete types * Add Combinatorics for tests
1 parent 538c811 commit ebe6ee4

File tree

3 files changed

+17
-0
lines changed

3 files changed

+17
-0
lines changed

Project.toml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,10 @@ MultivariatePolynomials = "0.3.5"
1919
MutableArithmetics = "0.2"
2020
Reexport = "0.2, 1.0"
2121
julia = "1"
22+
23+
[extras]
24+
Combinatorics = "861a8166-3701-5b0c-9a16-15d98fcdc6aa"
25+
Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
26+
27+
[targets]
28+
test = ["Combinatorics", "Test"]

src/DynamicPolynomials.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ MP.polynomial(p::PolyType) = Polynomial(p)
3636
function MP.polynomial(p::PolyType{C}, ::Type{T}) where {C, T}
3737
return convert(Polynomial{C, T}, p)
3838
end
39+
MP.polynomialtype(::Type{Term{C}}) where {C} = Polynomial{C}
3940
MP.polynomialtype(::Type{Term{C, T}}) where {T, C} = Polynomial{C, T}
4041
MP.polynomialtype(::Type{T}, ::Type{<:DMonomialLike{C}}) where {T, C} = Polynomial{C, T}
4142
MP.polynomialtype(::Union{PolyType{C}, Type{<:PolyType{C}}}, ::Type{T}) where {C, T} = Polynomial{C, T}

src/promote.jl

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,12 @@
11
MP.promote_rule_constant(::Type{T}, ::Type{<:DMonomialLike{C}}) where {C, T} = Term{C, promote_type(T, Int)}
22
MP.promote_rule_constant(::Type{S}, ::Type{Term{C, T}}) where {S, C, T} = Term{C, promote_type(S, T)}
33
MP.promote_rule_constant(::Type{S}, ::Type{<:TermPoly{C, T}}) where {S, C, T} = Polynomial{C, promote_type(S, T)}
4+
MP.promote_rule_constant(::Type, ::Type{Term{C}}) where {C} = Any
5+
MP.promote_rule_constant(::Type, ::Type{Polynomial{C}}) where {C} = Any
6+
Base.promote_rule(::Type{Term{C}}, ::Type{Term{C, T}}) where {C, T} = Term{C}
7+
Base.promote_rule(::Type{Term{C, T}}, ::Type{Term{C}}) where {C, T} = Term{C}
8+
Base.promote_rule(::Type{Term{C}}, ::Type{<:DMonomialLike{C}}) where {C} = Term{C}
9+
Base.promote_rule(::Type{<:DMonomialLike{C}}, ::Type{Term{C}}) where {C} = Term{C}
10+
11+
Base.convert(::Type{Term{C}}, m::DMonomialLike{C}) where {C} = convert(Term{C,Int}, m)
12+
Base.convert(::Type{Polynomial{C}}, t::Union{TermPoly{C},DMonomialLike{C}}) where {C} = MP.polynomial(t)

0 commit comments

Comments
 (0)