Skip to content

Commit 57f55a9

Browse files
authored
Fix promotion with nonconcrete types (#71)
* Fix promotion with nonconcrete types * Add Combinatorics for tests
1 parent 747359e commit 57f55a9

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-1
lines changed

Project.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,12 @@ julia = "1"
2020

2121
[extras]
2222
BenchmarkTools = "6e4b80f9-dd63-53aa-95a3-0cdb28fa8baf"
23+
Combinatorics = "861a8166-3701-5b0c-9a16-15d98fcdc6aa"
2324
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
2425
NBInclude = "0db19996-df87-5ea3-a455-e3a50d440464"
2526
Pkg = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f"
2627
Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
2728
Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
2829

2930
[targets]
30-
test = ["Pkg", "NBInclude", "LinearAlgebra", "Test", "Random", "BenchmarkTools"]
31+
test = ["Pkg", "NBInclude", "LinearAlgebra", "Test", "Random", "BenchmarkTools", "Combinatorics"]

src/promotion.jl

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,3 +50,18 @@ end
5050
vars = merge(V1, V2...)
5151
Monomial{vars, length(vars)}
5252
end
53+
54+
MP.promote_rule(::Type{Term{C,M1} where {C}}, M2::Type{<:MonomialLike}) where {M1} = (Term{C,promote_type(M1, M2)} where {C})
55+
MP.promote_rule(M1::Type{<:MonomialLike}, ::Type{Term{C,M2} where {C}}) where {M2} = (Term{C,promote_type(M1, M2)} where {C})
56+
MP.promote_rule(::Type{Term{C,M1} where {C}}, ::Type{Term{T,M2}}) where {T,M1,M2} = (Term{C,promote_type(M1, M2)} where {C})
57+
MP.promote_rule(::Type{Term{T,M2}}, ::Type{Term{C,M1} where {C}}) where {T,M1,M2} = (Term{C,promote_type(M1, M2)} where {C})
58+
MP.promote_rule(::Type{Term{C,M1} where {C}}, ::Type{Term{T,M2}}) where {T,M1,M2} = (Term{C,promote_type(M1, M2)} where {C})
59+
MP.promote_rule(::Type{<:Polynomial}, ::Type{Term{C,M} where {C}}) where {M} = Polynomial
60+
MP.promote_rule(::Type{Term{C,M} where {C}}, ::Type{<:Polynomial}) where {M} = Polynomial
61+
MP.promote_rule(::Type{Polynomial}, ::Type{<:PolynomialLike}) = Polynomial
62+
MP.promote_rule(::Type{<:PolynomialLike}, ::Type{Polynomial}) = Polynomial
63+
MP.promote_rule_constant(::Type, ::Type{Polynomial}) = Any
64+
MP.promote_rule_constant(::Type, ::Type{Term{C,M} where {C}}) where {M} = Any
65+
66+
Base.convert(::Type{Term{C,M} where {C}}, m::MonomialLike) where {M} = MP.term(convert(M, m))
67+
Base.convert(::Type{Polynomial}, t::TermLike) = MP.polynomial(t)

0 commit comments

Comments
 (0)