Skip to content

Commit ed52a33

Browse files
fix: remove invalidating ::Any methods
1 parent 844f5a5 commit ed52a33

File tree

3 files changed

+10
-13
lines changed

3 files changed

+10
-13
lines changed

src/MultivariatePolynomials.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ Abstract type for a polynomial of coefficient type `T`, i.e. a sum of `AbstractT
5858
abstract type AbstractPolynomial{T} <: AbstractPolynomialLike{T} end
5959

6060
const _APL{T} = AbstractPolynomialLike{T}
61+
const _Constant = Union{Number,MA.AbstractMutable,AbstractArray}
6162

6263
include("zip.jl")
6364
include("lazy_iterators.jl")

src/comparison.jl

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,8 @@ function Base.isone(p::AbstractPolynomial)
1010
return isone(nterms(p)) && isone(first(terms(p)))
1111
end
1212

13-
# See https://github.com/blegat/MultivariatePolynomials.jl/issues/22
14-
# avoids the call to be transfered to left_constant_eq
15-
Base.:(==)(α::Nothing, x::_APL) = false
16-
Base.:(==)(x::_APL, α::Nothing) = false
1713
Base.:(==)(α::Dict, x::_APL) = false
1814
Base.:(==)(x::_APL, α::Dict) = false
19-
Base.:(==)(α::Nothing, x::RationalPoly) = false
20-
Base.:(==)(x::RationalPoly, α::Nothing) = false
2115
Base.:(==)(α::Dict, x::RationalPoly) = false
2216
Base.:(==)(x::RationalPoly, α::Dict) = false
2317

@@ -133,16 +127,16 @@ Base.:(==)(p::RationalPoly, q::RationalPoly) = p.num * q.den == q.num * p.den
133127
# Solve ambiguity with (::PolyType, ::Any)
134128
Base.:(==)(p::_APL, q::RationalPoly) = p * q.den == q.num
135129
Base.:(==)(q::RationalPoly, p::_APL) = p == q
136-
Base.:(==)(α, q::RationalPoly) = α * q.den == q.num
137-
Base.:(==)(q::RationalPoly, α) = α == q
130+
Base.:(==)(α::_Constant, q::RationalPoly) = α * q.den == q.num
131+
Base.:(==)(q::RationalPoly, α::_Constant) = α == q
138132
function Base.isequal(p::RationalPoly, q::RationalPoly)
139133
return isequal(p.num * q.den, q.num * p.den)
140134
end
141135
# Solve ambiguity with (::PolyType, ::Any)
142136
Base.isequal(p::_APL, q::RationalPoly) = isequal(p * q.den, q.num)
143137
Base.isequal(q::RationalPoly, p::_APL) = isequal(p, q)
144-
Base.isequal(α, q::RationalPoly) = isequal* q.den, q.num)
145-
Base.isequal(q::RationalPoly, α) = isequal(α, q)
138+
Base.isequal::_Constant, q::RationalPoly) = isequal* q.den, q.num)
139+
Base.isequal(q::RationalPoly, α::_Constant) = isequal(α, q)
146140

147141
# α could be a JuMP affine expression
148142
isapproxzero(α; ztol::Real = 0.0) = false

src/operators.jl

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,18 +30,20 @@ for (op, fun) in [
3030
(:+, :right_constant_plus),
3131
(:-, :right_constant_minus),
3232
(:*, :right_constant_mult),
33-
(:(==), :right_constant_eq),
3433
]
3534
@eval Base.$op(p::_APL, α) = $fun(p, α)
3635
end
36+
Base.:(==)(p::_APL, α::_Constant) = right_constant_eq(p, α)
37+
3738
for (op, fun) in [
3839
(:+, :left_constant_plus),
3940
(:-, :left_constant_minus),
4041
(:*, :left_constant_mult),
41-
(:(==), :left_constant_eq),
4242
]
43-
@eval Base.$op(α, p::_APL) = $fun(α, p)
43+
@eval Base.$op , p::_APL) = $fun(α, p)
4444
end
45+
Base.:(==)(α::_Constant, p::_APL) = left_constant_eq(α, p)
46+
4547
## Fix ambiguity between above methods and methods in MA
4648
Base.:+(::MA.Zero, p::_APL) = MA.copy_if_mutable(p)
4749
Base.:+(p::_APL, ::MA.Zero) = MA.copy_if_mutable(p)

0 commit comments

Comments
 (0)