Skip to content

Commit 6ae8bb5

Browse files
authored
Update to JuMP v0.22, MOI v0.14, MP v0.4, MA, v0.3 (#224)
* Update to JuMP v0.22, MOI v0.14, MP v0.4, MA, v0.3 * Bump COI * Bump DynamicPolynomials * IndexInVector * Remove method rendered useless by MOI v0.10 * Fixes * TestConfig -> Config * ListOfConstraintTypesPresent * Fixes * Update with PolyJuMP v0.5.1 * Update univariate_solver to MOI v0.10
1 parent 0ce5257 commit 6ae8bb5

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

69 files changed

+186
-158
lines changed

Project.toml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,16 +22,16 @@ SymbolicWedderburn = "858aa9a9-4c7c-4c62-b466-2421203962a2"
2222

2323
[compat]
2424
Combinatorics = "1"
25-
ComplexOptInterface = "0.0.2"
25+
ComplexOptInterface = "0.0.3"
2626
DataStructures = "0.18"
27-
DynamicPolynomials = "0.3.6"
28-
JuMP = "0.21.7"
29-
MathOptInterface = "0.9.18"
27+
DynamicPolynomials = "0.4.1"
28+
JuMP = "0.22"
29+
MathOptInterface = "0.10"
3030
MultivariateBases = "0.1.2"
3131
MultivariateMoments = "0.3"
32-
MultivariatePolynomials = "~0.3.5"
33-
MutableArithmetics = "0.2"
34-
PolyJuMP = "0.4.2"
32+
MultivariatePolynomials = "0.4"
33+
MutableArithmetics = "0.3"
34+
PolyJuMP = "0.5.1"
3535
Reexport = "0.2, 1.0"
3636
SemialgebraicSets = "0.2"
3737
SymbolicWedderburn = "0.2"

docs/src/constraints.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ This approach adds the flexibility to choose the default cone for
106106
* constraints of the form
107107
`@constraint(mode, ..., some_matrix_of_polynomial in PSDCone(), ...)`
108108
or
109-
`@SDconstraint(mode, ..., some_matrix_of_polynomial other_matrix_of_polynomial, ...)`
109+
`@constraint(mode, ..., some_matrix_of_polynomial >= other_matrix_of_polynomial, PSDCone(), ...)`
110110
which is the cone given as default to `PolyJuMP.NonNegPolyMatrix`.
111111

112112
For instance, to use the diagonally-dominant-sum-of-squares cone (see

docs/src/tutorials/Extension/univariate_solver.jl

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,10 @@ function MOI.add_constraint(optimizer::Optimizer, func::MOI.VectorAffineFunction
9191
return MOI.ConstraintIndex{typeof(func),typeof(set)}(1) # There will be only ever one constraint so the index does not matter.
9292
end
9393

94+
MOI.supports_incremental_interface(::Optimizer) = true
95+
function MOI.copy_to(optimizer::Optimizer, model::MOI.ModelLike)
96+
return MOI.Utilities.default_copy_to(optimizer, model)
97+
end
9498
function MOI.optimize!(optimizer::Optimizer)
9599
optimizer.decomposition = decompose(optimizer.p, optimizer.tol)
96100
end

src/Bridges/Constraint/diagonally_dominant.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ function MOIB.Constraint.bridge_constraint(
3434
koff += 1
3535
# abs ≥ |Qij|
3636
abs_vars[koff] = MOI.add_variable(model)
37-
fabs = MOI.SingleVariable(abs_vars[koff])
37+
fabs = abs_vars[koff]
3838
MOIU.operate!(-, T, g[j], fabs)
3939
MOIU.operate!(-, T, g[i], fabs)
4040
abs_plus[koff] = MOI.add_constraint(
@@ -71,7 +71,7 @@ function MOIB.Constraint.concrete_bridge_type(
7171
::Type{SOS.DiagonallyDominantConeTriangle}) where T
7272

7373
S = MOIU.scalar_type(G)
74-
F = MOIU.promote_operation(-, T, S, MOI.SingleVariable)
74+
F = MOIU.promote_operation(-, T, S, MOI.VariableIndex)
7575
return DiagonallyDominantBridge{T, F, G}
7676
end
7777

src/Bridges/Constraint/sos_polynomial.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ function MOI.Bridges.Constraint.bridge_constraint(
4444
g, Q, cQ = SOS.add_gram_matrix(model, MCT, gram_basis, T)
4545
# MOI does not modify the coefficients of the functions so we can modify `r`.
4646
# without altering `f`.
47-
q = MA.operate!(-, r, g)
47+
q = MA.operate!!(-, r, g)
4848
set = PolyJuMP.ZeroPolynomialSet(s.domain, SOS.Certificate.zero_basis(s.certificate), MP.monomials(q))
4949
coefs = MOIU.vectorize(MP.coefficients(q))
5050
zero_constraint = MOI.add_constraint(model, coefs, set)

src/Bridges/Constraint/sos_polynomial_in_semialgebraic_set.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ function MOI.Bridges.Constraint.bridge_constraint(
4646
# `set.domain.V` is `FullSpace` or `FixedPolynomialsSet`.
4747
g = Certificate.get(set.certificate, Certificate.Generator(), index, preprocessed)
4848
# TODO replace with `MA.sub_mul` when it works.
49-
p = MA.operate!(MA.add_mul, p, -one(T), λ, MP.changecoefficienttype(g, T))
49+
p = MA.operate!!(MA.add_mul, p, -one(T), λ, MP.changecoefficienttype(g, T))
5050
end
5151
new_set = SOS.SOSPolynomialSet(
5252
set.domain.V, MP.monomials(p),

src/Bridges/Variable/copositive_inner.jl

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ function offdiag_vector_index(i, j)
9393
end
9494

9595
function MOI.get(model::MOI.ModelLike, attr::MOI.VariablePrimal,
96-
bridge::CopositiveInnerBridge, i::MOIB.Variable.IndexInVector)
96+
bridge::CopositiveInnerBridge, i::MOIB.IndexInVector)
9797
value = MOI.get(model, attr, bridge.matrix_variables[i.value])
9898
row, col = matrix_indices(i.value)
9999
if row != col
@@ -103,22 +103,22 @@ function MOI.get(model::MOI.ModelLike, attr::MOI.VariablePrimal,
103103
end
104104

105105
function MOIB.bridged_function(bridge::CopositiveInnerBridge{T},
106-
i::MOIB.Variable.IndexInVector) where T
106+
i::MOIB.IndexInVector) where T
107107
func = convert(MOI.ScalarAffineFunction{T},
108-
MOI.SingleVariable(bridge.matrix_variables[i.value]))
108+
bridge.matrix_variables[i.value])
109109
row, col = matrix_indices(i.value)
110110
if row != col
111-
func = MOIU.operate!(+, T, func, MOI.SingleVariable(
112-
bridge.nonneg_variables[vector_index(row, col - 1)]))
111+
func = MOIU.operate!(+, T, func,
112+
bridge.nonneg_variables[vector_index(row, col - 1)])
113113
end
114114
return func
115115
end
116116
function MOIB.Variable.unbridged_map(
117117
bridge::CopositiveInnerBridge{T},
118-
vi::MOI.VariableIndex, i::MOIB.Variable.IndexInVector) where T
118+
vi::MOI.VariableIndex, i::MOIB.IndexInVector) where T
119119

120120
F = MOI.ScalarAffineFunction{T}
121-
func = convert(F, MOI.SingleVariable(vi))
121+
func = convert(F, vi)
122122
map = bridge.matrix_variables[i.value] => func
123123
row, col = matrix_indices(i.value)
124124
if row == col

src/Bridges/Variable/psd2x2.jl

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ function MOI.get(model::MOI.ModelLike,
7171
return [dual[1], dual[3] / 2, dual[2]]
7272
end
7373

74-
function _variable_map(i::MOIB.Variable.IndexInVector)
74+
function _variable_map(i::MOIB.IndexInVector)
7575
if i.value == 1
7676
return 1
7777
elseif i.value == 2
@@ -82,12 +82,12 @@ function _variable_map(i::MOIB.Variable.IndexInVector)
8282
end
8383
end
8484
function _variable(bridge::PositiveSemidefinite2x2Bridge,
85-
i::MOIB.Variable.IndexInVector)
85+
i::MOIB.IndexInVector)
8686
return bridge.variables[_variable_map(i)]
8787
end
8888

8989
function MOI.get(model::MOI.ModelLike, attr::MOI.VariablePrimal,
90-
bridge::PositiveSemidefinite2x2Bridge, i::MOIB.Variable.IndexInVector)
90+
bridge::PositiveSemidefinite2x2Bridge, i::MOIB.IndexInVector)
9191
value = MOI.get(model, attr, _variable(bridge, i))
9292
if i.value == 2
9393
value /= 2
@@ -96,8 +96,8 @@ function MOI.get(model::MOI.ModelLike, attr::MOI.VariablePrimal,
9696
end
9797

9898
function MOIB.bridged_function(bridge::PositiveSemidefinite2x2Bridge{T},
99-
i::MOIB.Variable.IndexInVector) where T
100-
func = MOI.SingleVariable(_variable(bridge, i))
99+
i::MOIB.IndexInVector) where T
100+
func = _variable(bridge, i)
101101
if i.value == 2
102102
return MOIU.operate(/, T, func, convert(T, 2))
103103
else
@@ -106,13 +106,12 @@ function MOIB.bridged_function(bridge::PositiveSemidefinite2x2Bridge{T},
106106
end
107107
function MOIB.Variable.unbridged_map(
108108
bridge::PositiveSemidefinite2x2Bridge{T},
109-
vi::MOI.VariableIndex, i::MOIB.Variable.IndexInVector) where T
109+
vi::MOI.VariableIndex, i::MOIB.IndexInVector) where T
110110

111-
sv = MOI.SingleVariable(vi)
112111
if i.value == 2
113-
func = MOIU.operate(*, T, convert(T, 2), sv)
112+
func = MOIU.operate(*, T, convert(T, 2), vi)
114113
else
115-
func = convert(MOI.ScalarAffineFunction{T}, sv)
114+
func = convert(MOI.ScalarAffineFunction{T}, vi)
116115
end
117116
return (_variable(bridge, i) => func,)
118117
end

src/Bridges/Variable/scaled_diagonally_dominant.jl

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ end
9595
trimap(i, j) = div(j * (j - 1), 2) + i
9696

9797
function MOI.get(model::MOI.ModelLike, attr::MOI.VariablePrimal,
98-
bridge::ScaledDiagonallyDominantBridge{T}, i::MOIB.Variable.IndexInVector) where T
98+
bridge::ScaledDiagonallyDominantBridge{T}, i::MOIB.IndexInVector) where T
9999
i, j = matrix_indices(i.value)
100100
if i == j
101101
value = zero(T)
@@ -115,22 +115,22 @@ function MOI.get(model::MOI.ModelLike, attr::MOI.VariablePrimal,
115115
end
116116

117117
function MOIB.bridged_function(bridge::ScaledDiagonallyDominantBridge{T},
118-
i::MOIB.Variable.IndexInVector) where T
118+
i::MOIB.IndexInVector) where T
119119
i, j = matrix_indices(i.value)
120120
if i == j
121121
func = zero(MOI.ScalarAffineFunction{T})
122122
for k in 1:(i - 1)
123123
idx = offdiag_vector_index(k, i)
124-
MOIU.operate!(+, T, func, MOI.SingleVariable(bridge.variables[idx][3]))
124+
MOIU.operate!(+, T, func, bridge.variables[idx][3])
125125
end
126126
for k in (i + 1):bridge.side_dimension
127127
idx = offdiag_vector_index(i, k)
128-
MOIU.operate!(+, T, func, MOI.SingleVariable(bridge.variables[idx][1]))
128+
MOIU.operate!(+, T, func, bridge.variables[idx][1])
129129
end
130130
return func
131131
else
132132
idx = offdiag_vector_index(i, j)
133-
return MOI.convert(MOI.ScalarAffineFunction{T}, MOI.SingleVariable(bridge.variables[idx][2]))
133+
return MOI.convert(MOI.ScalarAffineFunction{T}, bridge.variables[idx][2])
134134
end
135135
end
136136
function MOIB.Variable.unbridged_map(
@@ -141,7 +141,7 @@ function MOIB.Variable.unbridged_map(
141141
umap = Pair{MOI.VariableIndex, SAF}[]
142142
k = 0
143143
z = zero(SAF)
144-
saf(i) = convert(SAF, MOI.SingleVariable(vis[i]))
144+
saf(i) = convert(SAF, vis[i])
145145
# vis[trimap(j, j)] is replaced by a sum of several variables.
146146
# The strategy is to replace all of them by zero except one.
147147
for j in 1:bridge.side_dimension

src/gram_matrix.jl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -98,17 +98,17 @@ function gram_operate(::typeof(+), p::GramMatrix{S, B, US, SymMatrix{S}}, q::Gra
9898
U = MA.promote_operation(+, S, T)
9999
n = length(basis)
100100
Qvec = Vector{U}(undef, div(n * (n + 1), 2))
101-
MA.mutable_operate!(zero, Qvec)
101+
MA.operate!(zero, Qvec)
102102
Q = SymMatrix(Qvec, n)
103103
for j in 1:n
104104
for i in 1:j
105105
if !iszero(Ip[j]) && !iszero(Ip[i])
106106
MultivariateMoments.symmetric_setindex!(
107-
Q, MA.add!(Q[i, j], p.Q[Ip[i], Ip[j]]), i, j)
107+
Q, MA.add!!(Q[i, j], p.Q[Ip[i], Ip[j]]), i, j)
108108
end
109109
if !iszero(Iq[j]) && !iszero(Iq[i])
110110
MultivariateMoments.symmetric_setindex!(
111-
Q, MA.add!(Q[i, j], q.Q[Iq[i], Iq[j]]), i, j)
111+
Q, MA.add!!(Q[i, j], q.Q[Iq[i], Iq[j]]), i, j)
112112
end
113113
end
114114
end
@@ -140,5 +140,5 @@ end
140140

141141
Base.zero(::Type{SparseGramMatrix{T, B, U, MT}}) where {T, B, U, MT} = SparseGramMatrix(GramMatrix{T, B, U, MT}[])
142142
function MP.polynomial(p::SparseGramMatrix)
143-
return mapreduce(identity, MA.add!, p.sub_gram_matrices, init = zero(MP.polynomialtype(p)))
143+
return mapreduce(identity, MA.add!!, p.sub_gram_matrices, init = zero(MP.polynomialtype(p)))
144144
end

src/sos_polynomial.jl

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,6 @@ function vectorized_matrix(Q, basis, ::Type{COI.HermitianPositiveSemidefiniteCon
1414
end
1515

1616
# Need these two methods to avoid ambiguity
17-
function build_gram_matrix(q::Vector{MOI.VariableIndex},
18-
basis::AbstractPolynomialBasis, matrix_cone_type, T::Type)
19-
return build_gram_matrix([MOI.SingleVariable(vi) for vi in q], basis, matrix_cone_type, T)
20-
end
21-
#function build_gram_matrix(q::Vector{MOI.VariableIndex},
22-
# basis::AbstractPolynomialBasis, T::Type, vectorization::HermitianVectorized)
23-
# return build_gram_matrix([MOI.SingleVariable(vi) for vi in q], basis, T, vectorization)
24-
#end
2517
function build_gram_matrix(q::Vector,
2618
basis::AbstractPolynomialBasis, matrix_cone_type, T::Type)
2719
n = length(basis)
@@ -50,10 +42,10 @@ end
5042
# for j in 1:n
5143
# for i in 1:j
5244
# k_real += 1
53-
# C[k_real] = MA.operate!(MA.add_mul, C[k_real], one(T), q[k_real])
45+
# C[k_real] = MA.operate!!(MA.add_mul, C[k_real], one(T), q[k_real])
5446
# if i != j
5547
# k_imag += 1
56-
# C[k_real] = MA.operate!(MA.add_mul, C[k_real], one(T) * im, q[N + k_imag])
48+
# C[k_real] = MA.operate!!(MA.add_mul, C[k_real], one(T) * im, q[N + k_imag])
5749
# end
5850
# end
5951
# end

src/utilities.jl

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,21 @@
11
# The second type is ignored. For `T = VariableRef`, it should be `Float64` anyway
22
# since JuMP only supports `Float64`.
33
_promote_sum(T::Type, ::Type=Float64) = MA.promote_operation(+, T, T)
4-
# `+` is not defined between `MOI.SingleVariable`.
5-
_promote_sum(::Type{MOI.SingleVariable}, T::Type=Float64) = MOI.ScalarAffineFunction{T}
4+
# `+` is not defined between `MOI.VariableIndex`.
5+
_promote_sum(::Type{MOI.VariableIndex}, T::Type=Float64) = MOI.ScalarAffineFunction{T}
66

77
_promote_add_mul(T::Type) = MA.promote_operation(MA.add_mul, T, T, T)
8-
_promote_add_mul(::Type{MOI.SingleVariable}) = MOI.ScalarQuadraticFunction{Float64}
9-
function MP.polynomial(p::GramMatrix{MOI.SingleVariable, B, U}) where {B, U}
8+
_promote_add_mul(::Type{MOI.VariableIndex}) = MOI.ScalarQuadraticFunction{Float64}
9+
function MP.polynomial(p::GramMatrix{MOI.VariableIndex, B, U}) where {B, U}
1010
Q = convert(Vector{U}, p.Q.Q)
1111
return MP.polynomial(GramMatrix(SymMatrix(Q, p.Q.n), p.basis))
1212
end
1313
#function MP.polynomial(p::GramMatrix{F}) where {F <: MOI.AbstractFunction}
1414
# MP.polynomial(p, MOIU.promote_operation(+, Float64, F, F))
1515
#end
1616

17-
function primal_value(model, p::GramMatrix{MOI.SingleVariable})
18-
# TODO [perf] use MOI typed mapped array
19-
Q = MOI.get(model, MOI.VariablePrimal(),
20-
MOI.VariableIndex[sv.variable for sv in p.Q.Q])
17+
function primal_value(model, p::GramMatrix{MOI.VariableIndex})
18+
Q = MOI.get(model, MOI.VariablePrimal(), p.Q.Q)
2119
return GramMatrix(SymMatrix(Q, p.Q.n), p.basis)
2220
end
2321

test/Mock/BPT12e399.jl

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,35 @@
1-
config = MOI.Test.TestConfig()
2-
optimize!_max(mock) = MOIU.mock_optimize!(mock, [ 6.0, 1.0, 9.0, -3.0*√2],
1+
config = MOI.Test.Config()
2+
optimize!_max_bridged(mock) = MOIU.mock_optimize!(mock, [ 6.0, 1.0, 9.0, -3.0*√2],
33
(MOI.VectorAffineFunction{Float64}, MOI.Zeros) => [[3, 1, 1/3]],
44
(MOI.VectorOfVariables, MOI.RotatedSecondOrderCone) => [[3, 1/3, 2]]
55
)
6-
optimize!_min(mock) = MOIU.mock_optimize!(mock, [-6.0, 1.0, 9.0, 3.0*√2],
6+
optimize!_min_bridged(mock) = MOIU.mock_optimize!(mock, [-6.0, 1.0, 9.0, 3.0*√2],
77
(MOI.VectorAffineFunction{Float64}, MOI.Zeros) => [[3, -1, 1/3]],
88
(MOI.VectorOfVariables, MOI.RotatedSecondOrderCone) => [[3, 1/3, -√2]]
99
)
10-
for mock in mocks(optimize!_max, optimize!_min)
10+
optimize!_max_cached(mock) = MOIU.mock_optimize!(mock, [1.0, 9.0, -3.0*√2, 6.0],
11+
(MOI.VectorAffineFunction{Float64}, MOI.Zeros) => [[3, 1, 1/3]],
12+
(MOI.VectorOfVariables, MOI.RotatedSecondOrderCone) => [[3, 1/3, 2]]
13+
)
14+
optimize!_min_cached(mock) = MOIU.mock_optimize!(mock, [1.0, 9.0, 3.0*√2, -6.0],
15+
(MOI.VectorAffineFunction{Float64}, MOI.Zeros) => [[3, -1, 1/3]],
16+
(MOI.VectorOfVariables, MOI.RotatedSecondOrderCone) => [[3, 1/3, -√2]]
17+
)
18+
for mock in [bridged_mock(optimize!_max_bridged, optimize!_min_bridged), cached_mock(optimize!_max_cached, optimize!_min_cached)]
1119
Tests.BPT12e399_rem_test(mock, config)
1220
end
13-
optimize!_max(mock) = MOIU.mock_optimize!(mock, [ 10.0, 4.0, 0.0, 5.0, 0.0, -5.0, 5.0],
21+
optimize!_max_bridged(mock) = MOIU.mock_optimize!(mock, [ 10.0, 4.0, 0.0, 5.0, 0.0, -5.0, 5.0],
22+
(MOI.VectorAffineFunction{Float64}, MOI.Zeros) => [[0.0, 1, 0, 1, 1]]
23+
)
24+
optimize!_min_bridged(mock) = MOIU.mock_optimize!(mock, [-10.0, 4.0, 0.0, 5.0, 0.0, 5.0, 5.0],
25+
(MOI.VectorAffineFunction{Float64}, MOI.Zeros) => [[0.0, 1, 0, -1, 1]]
26+
)
27+
optimize!_max_cached(mock) = MOIU.mock_optimize!(mock, [4.0, 0.0, 5.0, 0.0, -5.0, 5.0, 10.0],
1428
(MOI.VectorAffineFunction{Float64}, MOI.Zeros) => [[0.0, 1, 0, 1, 1]]
1529
)
16-
optimize!_min(mock) = MOIU.mock_optimize!(mock, [-10.0, 4.0, 0.0, 5.0, 0.0, 5.0, 5.0],
30+
optimize!_min_cached(mock) = MOIU.mock_optimize!(mock, [4.0, 0.0, 5.0, 0.0, 5.0, 5.0, -10.0],
1731
(MOI.VectorAffineFunction{Float64}, MOI.Zeros) => [[0.0, 1, 0, -1, 1]]
1832
)
19-
for mock in mocks(optimize!_max, optimize!_min)
33+
for mock in [bridged_mock(optimize!_max_bridged, optimize!_min_bridged), cached_mock(optimize!_max_cached, optimize!_min_cached)]
2034
Tests.BPT12e399_maxdegree_test(mock, config)
2135
end

test/Mock/chebyshev.jl

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
config = MOI.Test.TestConfig()
2-
optimize!(mock) = MOIU.mock_optimize!(mock, [[128.0, 0.0, -256.0, 0.0, 160.0, 0.0, -32.0, 0.0, 1.0]; zeros(90)])
3-
for mock in mocks(optimize!)
1+
config = MOI.Test.Config()
2+
optimize_bridged!(mock) = MOIU.mock_optimize!(mock, [[128.0, 0.0, -256.0, 0.0, 160.0, 0.0, -32.0, 0.0, 1.0]; zeros(90)])
3+
optimize_cached!(mock) = MOIU.mock_optimize!(mock, [zeros(90); [128.0, 0.0, -256.0, 0.0, 160.0, 0.0, -32.0, 0.0, 1.0]])
4+
for mock in [bridged_mock(optimize_bridged!), cached_mock(optimize_cached!)]
45
Tests.chebyshev_test(mock, config)
56
end

test/Mock/choi.jl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
config = MOI.Test.TestConfig()
2-
optimize!(mock) = MOIU.mock_optimize!(mock, MOI.INFEASIBLE, tuple(),
3-
MOI.INFEASIBILITY_CERTIFICATE)
1+
config = MOI.Test.Config()
2+
optimize!(mock) = MOIU.mock_optimize!(
3+
mock, MOI.INFEASIBLE, MOI.NO_SOLUTION, MOI.INFEASIBILITY_CERTIFICATE)
44
for mock in mocks(optimize!)
55
Tests.choi_test(mock, config)
66
end

0 commit comments

Comments
 (0)