Skip to content

Commit c00b68b

Browse files
committed
Fixes
1 parent ac74d0d commit c00b68b

File tree

6 files changed

+32
-29
lines changed

6 files changed

+32
-29
lines changed

src/constraints/GreaterThanConstraint.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ function set_with_size(::Type{MOI.Nonnegatives}, sz::Tuple{Int,Int})
22
return MOI.Nonnegatives(prod(sz))
33
end
44

5-
head(io::IO, ::MOI.Nonnegatives) = print(io, "nonneg")
5+
head(io::IO, ::MOI.Nonnegatives) = print(io, "")
66

77
function is_feasible(f, ::MOI.Nonnegatives, tol)
88
return all(f .>= tol)

src/constraints/LessThanConstraint.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ function set_with_size(::Type{MOI.Nonpositives}, sz::Tuple{Int,Int})
22
return MOI.Nonpositives(prod(sz))
33
end
44

5-
head(io::IO, ::MOI.Nonpositives) = print(io, "nonpos")
5+
head(io::IO, ::MOI.Nonpositives) = print(io, "")
66

77
function is_feasible(f, ::MOI.Nonpositives, tol)
88
return all(f .<= -tol)

src/constraints/PositiveSemidefiniteConeConstraint.jl

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
1-
function set_with_size(::Type{MOI.PositiveSemidefiniteConeTriangle}, sz::Tuple{Int,Int})
1+
function set_with_size(::Type{MOI.PositiveSemidefiniteConeSquare}, sz::Tuple{Int,Int})
22
if sz[1] != sz[2]
33
error("Positive semidefinite expressions must be square")
44
end
5-
return MOI.PositiveSemidefiniteConeTriangle(sz[1])
5+
return MOI.PositiveSemidefiniteConeSquare(sz[1])
66
end
77

8-
head(io::IO, ::MOI.PositiveSemidefiniteConeTriangle) = print(io, "sdp")
8+
head(io::IO, ::MOI.PositiveSemidefiniteConeSquare) = print(io, "sdp")
99

10-
function vexity(vex, ::MOI.PositiveSemidefiniteConeTriangle)
10+
function vexity(vex, ::MOI.PositiveSemidefiniteConeSquare)
1111
if !(vex in (AffineVexity(), ConstVexity()))
1212
return NotDcp()
1313
end
1414
return AffineVexity()
1515
end
1616

17-
function is_feasible(x, ::MOI.PositiveSemidefiniteConeTriangle, tol)
17+
function is_feasible(x, ::MOI.PositiveSemidefiniteConeSquare, tol)
1818
if !(x transpose(x))
1919
@warn "constant SDP constraint is violated"
2020
return false
@@ -27,11 +27,11 @@ end
2727

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

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

src/expressions.jl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ abstract type AbstractExpr end
3232

3333
abstract type Constraint end
3434

35-
struct GenericConstraint{S<:MOI.AbstractSet} <: Constraint
35+
mutable struct GenericConstraint{S<:MOI.AbstractSet} <: Constraint
3636
child::AbstractExpr
3737
set::S
3838
dual::Union{Value,Nothing}
@@ -49,7 +49,7 @@ head(io::IO, c::GenericConstraint) = head(io, c.set)
4949
AbstractTrees.children(c::GenericConstraint) = (c.child,)
5050

5151
function vexity(c::GenericConstraint)
52-
return vexity(c.child, c.set)
52+
return vexity(vexity(c.child), c.set)
5353
end
5454

5555
function _add_constraint!(
@@ -71,7 +71,7 @@ end
7171

7272
function populate_dual!(model::MOI.ModelLike, c::GenericConstraint, indices)
7373
ret = MOI.get(model, MOI.ConstraintDual(), indices)
74-
c.dual = output(reshape(ret, c.size))
74+
c.dual = output(reshape(ret, c.child.size))
7575
return
7676
end
7777

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/GenericConstraint{MOI.PositiveSemidefiniteConeTriangle}
186+
### constraints/GenericConstraint{MOI.PositiveSemidefiniteConeSquare}
187187

188-
function test_GenericConstraint{MOI.PositiveSemidefiniteConeTriangle}()
188+
function test_GenericConstraint{MOI.PositiveSemidefiniteConeSquare}()
189189
@test_throws(
190190
ErrorException("Positive semidefinite expressions must be square"),
191-
Convex.GenericConstraint{MOI.PositiveSemidefiniteConeTriangle}(Variable(2, 3)),
191+
Convex.GenericConstraint{MOI.PositiveSemidefiniteConeSquare}(Variable(2, 3)),
192192
)
193193
X = Variable(2, 2)
194-
c = Convex.GenericConstraint{MOI.PositiveSemidefiniteConeTriangle}(X)
194+
c = Convex.GenericConstraint{MOI.PositiveSemidefiniteConeSquare}(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.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}
200+
@test (0 X) isa Convex.GenericConstraint{MOI.PositiveSemidefiniteConeSquare}
201+
@test (-X 0) isa Convex.GenericConstraint{MOI.PositiveSemidefiniteConeSquare}
202+
@test (-X constant(0)) isa Convex.GenericConstraint{MOI.PositiveSemidefiniteConeSquare}
203+
@test (constant(0) X) isa Convex.GenericConstraint{MOI.PositiveSemidefiniteConeSquare}
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_GenericConstraint{MOI.PositiveSemidefiniteConeTriangle}_violated()
209+
function test_GenericConstraint{MOI.PositiveSemidefiniteConeSquare}_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: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -171,11 +171,13 @@ function test_show()
171171
└─ real variable ($(Convex.show_id(x)))
172172
subject to
173173
├─ ≥ constraint (affine)
174-
│ ├─ real variable ($(Convex.show_id(x)))
175-
│ └─ $(reshape([1], 1, 1))
174+
| └─ + (affine; real)
175+
│ ├─ real variable ($(Convex.show_id(x)))
176+
│ └─ $(reshape([-1], 1, 1))
176177
└─ ≤ constraint (affine)
177-
├─ real variable ($(Convex.show_id(x)))
178-
└─ $(reshape([3], 1, 1))
178+
└─ + (affine; real)
179+
├─ real variable ($(Convex.show_id(x)))
180+
└─ $(reshape([-3], 1, 1))
179181
180182
status: `solve!` not called yet"""
181183

@@ -258,8 +260,9 @@ function test_show()
258260
└─ nothing
259261
subject to
260262
└─ ≥ constraint (affine)
261-
├─ real variable ($(Convex.show_id(x)))
262-
└─ $(reshape([0], 1, 1))
263+
└─ + (affine; real)
264+
├─ real variable ($(Convex.show_id(x)))
265+
└─ $(reshape([0], 1, 1))
263266
264267
termination status: OPTIMAL
265268
primal status: FEASIBLE_POINT
@@ -403,7 +406,7 @@ function test_Constructors()
403406
Semidefinite(2),
404407
]
405408
@test length(get_constraints(x)) == 1
406-
@test get_constraints(x)[] isa Convex.GenericConstraint{MOI.PositiveSemidefiniteConeTriangle}
409+
@test get_constraints(x)[] isa Convex.GenericConstraint{MOI.PositiveSemidefiniteConeSquare}
407410
end
408411

409412
@test_throws ErrorException HermitianSemidefinite(2, 3)
@@ -953,7 +956,7 @@ end
953956
function test_deprecation_in_symbol()
954957
x = Variable(2, 2)
955958
@test_logs (:warn,) (x in :SDP)
956-
@test in(x, :semidefinite) isa Convex.GenericConstraint{MOI.PositiveSemidefiniteConeTriangle}
959+
@test in(x, :semidefinite) isa Convex.GenericConstraint{MOI.PositiveSemidefiniteConeSquare}
957960
return
958961
end
959962

0 commit comments

Comments
 (0)