Skip to content

Commit 16c4fe5

Browse files
authored
Fix ambiguities found by Aqua (#647)
1 parent e85899b commit 16c4fe5

File tree

6 files changed

+34
-11
lines changed

6 files changed

+34
-11
lines changed

src/atoms/VcatAtom.jl

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,3 +127,7 @@ function Base.getindex(x::VcatAtom, inds::AbstractVector{<:Real})
127127
remaining = VcatAtom(keep_children...)
128128
return IndexAtom(remaining, inds)
129129
end
130+
131+
function Base.getindex(x::VcatAtom, inds::AbstractVector{Bool})
132+
return getindex(x, first.(filter!(last, collect(enumerate(inds)))))
133+
end

src/constraints/GenericConstraint.jl

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,11 @@ function _add_constraint!(context::Context, c::GenericConstraint)
9696
return
9797
end
9898

99-
function populate_dual!(model::MOI.ModelLike, c::GenericConstraint, indices)
99+
function populate_dual!(
100+
model::MOI.ModelLike,
101+
c::GenericConstraint,
102+
indices::MOI.ConstraintIndex,
103+
)
100104
ret = MOI.get(model, MOI.ConstraintDual(), indices)
101105
c.dual = output(reshape(ret, c.child.size))
102106
return
@@ -241,7 +245,11 @@ end
241245

242246
head(io::IO, ::MOI.PositiveSemidefiniteConeSquare) = print(io, "PSD")
243247

244-
function is_feasible(x, ::MOI.PositiveSemidefiniteConeSquare, tol)
248+
function is_feasible(
249+
x::AbstractMatrix,
250+
::MOI.PositiveSemidefiniteConeSquare,
251+
tol,
252+
)
245253
return x transpose(x) && LinearAlgebra.eigmin(x) >= -tol
246254
end
247255

src/problems.jl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,9 +186,10 @@ end
186186
function Problem{T}(
187187
head::Symbol,
188188
objective::AbstractExpr,
189+
constraint::Constraint,
189190
constraints::Constraint...,
190191
) where {T<:Real}
191-
return Problem{T}(head, objective, [constraints...])
192+
return Problem{T}(head, objective, [constraint, constraints...])
192193
end
193194

194195
# Allow users to simply type minimize

src/reformulations/quadform.jl

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ Represents `x' * A * x` where either:
6666
semidefinite or negative semidefinite.
6767
* or `A` is a matrix-valued variable and `x` is a vector.
6868
"""
69-
quadform(x::Value, A::AbstractExpr; assume_psd = false) = x' * A * x
69+
quadform(x::Value, A::AbstractExpr; kwargs...) = x' * A * x
7070

7171
function quadform(x::AbstractExpr, A::Value; assume_psd = false)
7272
if length(size(A)) != 2 || size(A, 1) != size(A, 2)
@@ -85,15 +85,19 @@ function quadform(x::AbstractExpr, A::Value; assume_psd = false)
8585
return factor * square(norm2(P * x))
8686
end
8787

88-
function quadform(x::Constant, A::AbstractExpr; assume_psd = false)
89-
return quadform(evaluate(x), A; assume_psd)
88+
function quadform(x::Constant, A::AbstractExpr; kwargs...)
89+
return quadform(evaluate(x), A; kwargs...)
9090
end
9191

92-
function quadform(x::AbstractExpr, A::Constant; assume_psd = false)
93-
return quadform(x, evaluate(A); assume_psd)
92+
function quadform(x::AbstractExpr, A::Constant; kwargs...)
93+
return quadform(x, evaluate(A); kwargs...)
9494
end
9595

96-
function quadform(x::AbstractExpr, A::AbstractExpr; assume_psd = false)
96+
function quadform(x::Constant, A::Constant; kwargs...)
97+
return evaluate(x)' * evaluate(A) * evaluate(x)
98+
end
99+
100+
function quadform(x::AbstractExpr, A::AbstractExpr; kwargs...)
97101
return error(
98102
"Convex.jl v0.13.5 introduced the ability to use `fix!`ed variables " *
99103
"in `quadform`. However, this did not consider the case that the " *

test/runtests.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,6 @@ end
2121
Aqua.test_all(Convex; ambiguities = false, piracies = false)
2222
# Convex currently has some light piracy of `hcat`, `vcat` and `hvcat`
2323
Aqua.test_piracies(Convex; treat_as_own = [hcat, vcat, hvcat])
24-
# Convex currently has some ambiguities
25-
Aqua.test_ambiguities(Convex; broken = true)
24+
# Test ambiguities only in Convex.jl
25+
Aqua.test_ambiguities(Convex)
2626
end

test/test_atoms.jl

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -866,6 +866,11 @@ function test_VcatAtom_getindex()
866866
@test vexity(v[5:6, 1:2]) isa Convex.ConcaveVexity
867867
@test vexity(v[1:3, 1]) isa Convex.ConvexVexity
868868
end
869+
x = Variable()
870+
y = square(x)
871+
f = vcat(x, y)
872+
@test isequal(f[[true, false]], x)
873+
@test isequal(f[[false, true]], y)
869874
return
870875
end
871876

@@ -2210,6 +2215,7 @@ function test_quadform()
22102215
ErrorException("quadform only defined for Hermitian matrices"),
22112216
quadform(Variable(2), [1 0; -2 1]),
22122217
)
2218+
@test quadform(constant([1, 2]), constant([1 2; 2 3])) == 21
22132219
return
22142220
end
22152221

0 commit comments

Comments
 (0)