Skip to content

Commit ac74d0d

Browse files
committed
Fix tests
1 parent 0c68d3a commit ac74d0d

File tree

6 files changed

+33
-22
lines changed

6 files changed

+33
-22
lines changed

src/constraints/GreaterThanConstraint.jl

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
function set_with_size(::Type{MOI.Nonnegatives}, sz::Tuple{Int,Int})
2+
return MOI.Nonnegatives(prod(sz))
3+
end
4+
15
head(io::IO, ::MOI.Nonnegatives) = print(io, "nonneg")
26

37
function is_feasible(f, ::MOI.Nonnegatives, tol)

src/constraints/LessThanConstraint.jl

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
function set_with_size(::Type{MOI.Nonpositives}, sz::Tuple{Int,Int})
2+
return MOI.Nonpositives(prod(sz))
3+
end
4+
15
head(io::IO, ::MOI.Nonpositives) = print(io, "nonpos")
26

37
function is_feasible(f, ::MOI.Nonpositives, tol)

src/constraints/PositiveSemidefiniteConeConstraint.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,11 @@ end
2727

2828
function LinearAlgebra.isposdef(x::AbstractExpr)
2929
if iscomplex(x)
30-
return PositiveSemidefiniteConeConstraint(
30+
return GenericConstraint{MOI.PositiveSemidefiniteConeTriangle}(
3131
[real(x) -imag(x); imag(x) real(x)],
3232
)
3333
end
34-
return PositiveSemidefiniteConeConstraint(x)
34+
return GenericConstraint{MOI.PositiveSemidefiniteConeTriangle}(x)
3535
end
3636

3737
(x::AbstractExpr, y::AbstractExpr) = isposdef(x - y)

src/expressions.jl

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -26,26 +26,32 @@
2626
#
2727
#############################################################################
2828

29+
const Value = Union{Number,AbstractArray}
30+
2931
abstract type AbstractExpr end
3032

3133
abstract type Constraint end
3234

33-
struct GenericConstraint{S<:MOI.AbstractSet}
35+
struct GenericConstraint{S<:MOI.AbstractSet} <: Constraint
3436
child::AbstractExpr
3537
set::S
36-
dual::ValueOrNothing
37-
function Constraint(child, set::MOI.AbstractSet)
38+
dual::Union{Value,Nothing}
39+
function GenericConstraint(child, set::MOI.AbstractSet)
3840
return new{typeof(set)}(child, set)
3941
end
40-
function Constraint{S}(child) where {S<:MOI.AbstractSet}
41-
return Constraint(child, set_with_size(S, size(child)))
42+
function GenericConstraint{S}(child) where {S<:MOI.AbstractSet}
43+
return GenericConstraint(child, set_with_size(S, size(child)))
4244
end
4345
end
4446

4547
head(io::IO, c::GenericConstraint) = head(io, c.set)
4648

4749
AbstractTrees.children(c::GenericConstraint) = (c.child,)
4850

51+
function vexity(c::GenericConstraint)
52+
return vexity(c.child, c.set)
53+
end
54+
4955
function _add_constraint!(
5056
context::Context,
5157
c::GenericConstraint,
@@ -58,8 +64,7 @@ function _add_constraint!(
5864
return
5965
end
6066
f = conic_form!(context, c.child)
61-
set = MOI.PositiveSemidefiniteConeSquare(c.size[1])
62-
context.constr_to_moi_inds[c] = MOI_add_constraint(context.model, f, set)
67+
context.constr_to_moi_inds[c] = MOI_add_constraint(context.model, f, c.set)
6368
return
6469
end
6570

@@ -70,8 +75,6 @@ function populate_dual!(model::MOI.ModelLike, c::GenericConstraint, indices)
7075
return
7176
end
7277

73-
const Value = Union{Number,AbstractArray}
74-
7578
# We commandeer `==` to create a constraint.
7679
# Therefore we define `isequal` to still have a notion of equality
7780
# (Normally `isequal` falls back to `==`, so we need to provide a method).

test/test_constraints.jl

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -183,30 +183,30 @@ function test_LessThanConstraint_dual_maximize()
183183
return
184184
end
185185

186-
### constraints/PositiveSemidefiniteConeConstraint
186+
### constraints/GenericConstraint{MOI.PositiveSemidefiniteConeTriangle}
187187

188-
function test_PositiveSemidefiniteConeConstraint()
188+
function test_GenericConstraint{MOI.PositiveSemidefiniteConeTriangle}()
189189
@test_throws(
190190
ErrorException("Positive semidefinite expressions must be square"),
191-
Convex.PositiveSemidefiniteConeConstraint(Variable(2, 3)),
191+
Convex.GenericConstraint{MOI.PositiveSemidefiniteConeTriangle}(Variable(2, 3)),
192192
)
193193
X = Variable(2, 2)
194-
c = Convex.PositiveSemidefiniteConeConstraint(X)
194+
c = Convex.GenericConstraint{MOI.PositiveSemidefiniteConeTriangle}(X)
195195
p = minimize(tr(X), [c, X >= [1 2; 3 4]])
196196
solve!(p, SCS.Optimizer; silent_solver = true)
197197
@test isapprox(X.value, [2.25 3; 3 4]; atol = 1e-3)
198198
y = (c.dual + c.dual') / 2
199199
@test isapprox(y[1], 1; atol = 1e-3)
200-
@test (0 X) isa Convex.PositiveSemidefiniteConeConstraint
201-
@test (-X 0) isa Convex.PositiveSemidefiniteConeConstraint
202-
@test (-X constant(0)) isa Convex.PositiveSemidefiniteConeConstraint
203-
@test (constant(0) X) isa Convex.PositiveSemidefiniteConeConstraint
200+
@test (0 X) isa Convex.GenericConstraint{MOI.PositiveSemidefiniteConeTriangle}
201+
@test (-X 0) isa Convex.GenericConstraint{MOI.PositiveSemidefiniteConeTriangle}
202+
@test (-X constant(0)) isa Convex.GenericConstraint{MOI.PositiveSemidefiniteConeTriangle}
203+
@test (constant(0) X) isa Convex.GenericConstraint{MOI.PositiveSemidefiniteConeTriangle}
204204
@test_throws(ErrorException("Set PSD not understood"), X in :PSD)
205205
@test vexity(X square(Variable())) == Convex.NotDcp()
206206
return
207207
end
208208

209-
function test_PositiveSemidefiniteConeConstraint_violated()
209+
function test_GenericConstraint{MOI.PositiveSemidefiniteConeTriangle}_violated()
210210
X = constant([1 2; 3 4])
211211
p = satisfy([X 0])
212212
@test_logs (:warn,) (:warn,) solve!(p, SCS.Optimizer)

test/test_utilities.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -403,7 +403,7 @@ function test_Constructors()
403403
Semidefinite(2),
404404
]
405405
@test length(get_constraints(x)) == 1
406-
@test get_constraints(x)[] isa Convex.PositiveSemidefiniteConeConstraint
406+
@test get_constraints(x)[] isa Convex.GenericConstraint{MOI.PositiveSemidefiniteConeTriangle}
407407
end
408408

409409
@test_throws ErrorException HermitianSemidefinite(2, 3)
@@ -953,7 +953,7 @@ end
953953
function test_deprecation_in_symbol()
954954
x = Variable(2, 2)
955955
@test_logs (:warn,) (x in :SDP)
956-
@test in(x, :semidefinite) isa Convex.PositiveSemidefiniteConeConstraint
956+
@test in(x, :semidefinite) isa Convex.GenericConstraint{MOI.PositiveSemidefiniteConeTriangle}
957957
return
958958
end
959959

0 commit comments

Comments
 (0)