Skip to content

Commit 98be11f

Browse files
committed
Less restrictive algebraicsets
1 parent d8cf94f commit 98be11f

File tree

2 files changed

+18
-34
lines changed

2 files changed

+18
-34
lines changed

src/algebraicset.jl

Lines changed: 16 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,28 @@
11
export AlgebraicSet, BasicSemialgebraicSet, addequality!, addinequality!
22
# Semialgebraic set described by polynomials with coefficients in T
3-
abstract AbstractSemialgebraicSet{T}
3+
abstract AbstractSemialgebraicSet
44

5-
addequality!{T}(S::AbstractSemialgebraicSet{T}, p) = addequality!(S, VecPolynomial{T}(p))
6-
addinequality!{T}(S::AbstractSemialgebraicSet{T}, p) = addinequality!(S, VecPolynomial{T}(p))
5+
abstract AbstractBasicSemialgebraicSet <: AbstractSemialgebraicSet
6+
abstract AbstractAlgebraicSet <: AbstractBasicSemialgebraicSet
77

8-
abstract AbstractBasicSemialgebraicSet{T} <: AbstractSemialgebraicSet{T}
9-
abstract AbstractAlgebraicSet{T} <: AbstractBasicSemialgebraicSet{T}
8+
addinequality!(S::AbstractAlgebraicSet, p) = throw(ArgumentError("Cannot add inequality to an algebraic set"))
109

11-
addinequality!{T}(S::AbstractAlgebraicSet{T}, p) = throw(ArgumentError("Cannot add inequality to an algebraic set"))
12-
13-
type AlgebraicSet{T} <: AbstractAlgebraicSet{T}
14-
p::Vector{VecPolynomial{T}}
15-
end
16-
function (::Type{AlgebraicSet{T}}){T}()
17-
AlgebraicSet{T}(VecPolynomial{T}[])
10+
type AlgebraicSet <: AbstractAlgebraicSet
11+
p::Vector
1812
end
19-
20-
21-
function Base.convert{T,U}(::Type{AlgebraicSet{T}}, V::AlgebraicSet{U})
22-
AlgebraicSet{T}(Vector{VecPolynomial{T}}(V.p))
13+
function (::Type{AlgebraicSet})()
14+
AlgebraicSet(Any[])
2315
end
2416

25-
addequality!{T}(V::AlgebraicSet{T}, p::VecPolynomial{T}) = push!(V.p, p)
17+
addequality!(V::AlgebraicSet, p) = push!(V.p, p)
2618

27-
type BasicSemialgebraicSet{T} <: AbstractBasicSemialgebraicSet{T}
28-
V::AlgebraicSet{T}
29-
p::Vector{VecPolynomial{T}}
19+
type BasicSemialgebraicSet <: AbstractBasicSemialgebraicSet
20+
V::AlgebraicSet
21+
p::Vector
3022
end
31-
function (::Type{BasicSemialgebraicSet{T}}){T}()
32-
BasicSemialgebraicSet{T}(AlgebraicSet{T}(), VecPolynomial{T}[])
33-
end
34-
35-
36-
function Base.convert{T,U}(::Type{BasicSemialgebraicSet{T}}, S::BasicSemialgebraicSet{U})
37-
BasicSemialgebraicSet{T}(convert(AlgebraicSet{T}, S.V), Vector{VecPolynomial{T}}(S.p))
23+
function (::Type{BasicSemialgebraicSet})()
24+
BasicSemialgebraicSet(AlgebraicSet(), Any[])
3825
end
3926

40-
addequality!{T}(S::BasicSemialgebraicSet{T}, p::VecPolynomial{T}) = addequality!(S.V, p)
41-
addinequality!{T}(S::BasicSemialgebraicSet{T}, p::VecPolynomial{T}) = push!(S.p, p)
27+
addequality!(S::BasicSemialgebraicSet, p) = addequality!(S.V, p)
28+
addinequality!(S::BasicSemialgebraicSet, p) = push!(S.p, p)

test/algebraicset.jl

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,14 @@
11
facts("Algebraic set") do
22
@polyvar x y
3-
V = AlgebraicSet{Int}()
3+
V = AlgebraicSet()
44
@fact_throws ArgumentError addinequality!(V, x*y)
5-
S = BasicSemialgebraicSet{Int}()
5+
S = BasicSemialgebraicSet()
66
addequality!(S, x)
77
addinequality!(S, x^2*y)
88
addequality!(S, 2*x^2*y)
99
@fact typeof(Int32(2)*x^2*y) --> Term{Int32}
1010
addequality!(S, Int32(2)*x^2*y)
1111
addinequality!(S, 1.0x^2*y)
1212
addequality!(S, (6//3)*x^2*y+y)
13-
@fact_throws InexactError addinequality!(S, 1.5x^2*y)
14-
S = BasicSemialgebraicSet{Float64}(S)
15-
@fact typeof(S) --> BasicSemialgebraicSet{Float64}
1613
addinequality!(S, 1.5x+y)
1714
end

0 commit comments

Comments
 (0)