@@ -65,9 +65,10 @@ mutable struct MockOptimizer{MT<:MOI.ModelLike,T} <: MOI.AbstractOptimizer
6565 # Constraint conflicts
6666 compute_conflict_called:: Bool
6767 conflict_status:: MOI.ConflictStatusCode
68+ conflict_count:: Int
6869 constraint_conflict_status:: Dict {
6970 MOI. ConstraintIndex,
70- MOI. ConflictParticipationStatusCode,
71+ Dict{Int, MOI. ConflictParticipationStatusCode} ,
7172 }
7273 # Basis status
7374 constraint_basis_status:: Dict {
@@ -124,7 +125,11 @@ function MockOptimizer(
124125 #
125126 false ,
126127 MOI. COMPUTE_CONFLICT_NOT_CALLED,
127- Dict {MOI.ConstraintIndex,MOI.ConflictParticipationStatusCode} (),
128+ 0 ,
129+ Dict{
130+ MOI. ConstraintIndex,
131+ Dict{Int,MOI. ConflictParticipationStatusCode},
132+ }(),
128133 # Basis status
129134 Dict {MOI.ConstraintIndex,Dict{Int,MOI.BasisStatusCode}} (),
130135 Dict {MOI.VariableIndex,Dict{Int,MOI.BasisStatusCode}} (),
@@ -302,6 +307,13 @@ function MOI.set(
302307 return
303308end
304309
310+ MOI. get (mock:: MockOptimizer , :: MOI.ConflictCount ) = mock. conflict_count
311+
312+ function MOI. set (mock:: MockOptimizer , :: MOI.ConflictCount , x)
313+ mock. conflict_count = x
314+ return
315+ end
316+
305317function MOI. set (
306318 mock:: MockOptimizer ,
307319 :: MOI.ConflictStatus ,
@@ -449,11 +461,11 @@ end
449461
450462function MOI. set (
451463 mock:: MockOptimizer ,
452- :: MOI.ConstraintConflictStatus ,
464+ attr :: MOI.ConstraintConflictStatus ,
453465 idx:: MOI.ConstraintIndex ,
454466 value,
455467)
456- mock. constraint_conflict_status[ xor_index (idx)] = value
468+ _safe_set_result ( mock. constraint_conflict_status, attr, idx, value)
457469 return
458470end
459471
@@ -723,11 +735,17 @@ end
723735
724736function MOI. get (
725737 mock:: MockOptimizer ,
726- :: MOI.ConstraintConflictStatus ,
738+ attr :: MOI.ConstraintConflictStatus ,
727739 idx:: MOI.ConstraintIndex ,
728740)
741+ MOI. check_conflict_index_bounds (mock, attr)
729742 MOI. throw_if_not_valid (mock, idx)
730- return mock. constraint_conflict_status[xor_index (idx)]
743+ return _safe_get_result (
744+ mock. constraint_conflict_status,
745+ attr,
746+ idx,
747+ " conflict status" ,
748+ )
731749end
732750
733751function _safe_set_result (
@@ -740,6 +758,9 @@ function _safe_set_result(
740758 if ! haskey (dict, xored)
741759 dict[xored] = V ()
742760 end
761+ if hasproperty (attr, :conflict_index )
762+ return dict[xored][attr. conflict_index] = value
763+ end
743764 return dict[xored][attr. result_index] = value
744765end
745766
@@ -754,11 +775,16 @@ function _safe_get_result(
754775 if result_to_value === nothing
755776 error (" No mock $name is set for " , index_name, " `" , index, " `." )
756777 end
757- value = get (result_to_value, attr. result_index, nothing )
778+ data_index = if hasproperty (attr, :conflict_index )
779+ attr. conflict_index
780+ else
781+ attr. result_index
782+ end
783+ value = get (result_to_value, data_index, nothing )
758784 if value === nothing
759785 error (
760786 " No mock $name is set for $(index_name) `$(index) ` at result " *
761- " index `$(attr . result_index ) `." ,
787+ " index `$(data_index ) `." ,
762788 )
763789 end
764790 return value
@@ -996,10 +1022,10 @@ end
9961022 <:Vector,
9971023 }
9981024 dual_status::MOI.ResultStatusCode,
999- constraint_duals::Pair{Tuple{DataTypeDataType },<:Vector}...;
1000- constraint_basis_status = Pair{Tuple{DataTypeDataType },<:Vector}[],
1025+ constraint_duals::Pair{Tuple{DataType,DataType },<:Vector}...;
1026+ constraint_basis_status = Pair{Tuple{DataType,DataType },<:Vector}[],
10011027 variable_basis_status = MOI.BasisStatusCode[],
1002- constraint_conflict_status = Pair{Tuple{Type,Type },<:Vector}[],
1028+ constraint_conflict_status = Pair{Tuple{DataType,DataType },<:Vector}[],
10031029 )
10041030
10051031Fake the result of a call to `optimize!` in the mock optimizer by storing the
@@ -1053,28 +1079,19 @@ function mock_optimize!(
10531079 MOI. set (mock, MOI. ResultCount (), 1 )
10541080 _set_mock_primal (mock, primal)
10551081 _set_mock_dual (mock, dual_status_constraint_duals... )
1056- for con_basis_pair in constraint_basis_status
1057- F, S = con_basis_pair. first
1082+ for ((F, S), result) in constraint_basis_status
10581083 indices = MOI. get (mock, MOI. ListOfConstraintIndices {F,S} ())
10591084 for (i, ci) in enumerate (indices)
1060- MOI. set (
1061- mock,
1062- MOI. ConstraintBasisStatus (),
1063- ci,
1064- con_basis_pair. second[i],
1065- )
1085+ MOI. set (mock, MOI. ConstraintBasisStatus (), ci, result[i])
10661086 end
10671087 end
1068- for con_conflict_pair in constraint_conflict_status
1069- F, S = con_conflict_pair. first
1088+ if length (constraint_conflict_status) > 0
1089+ MOI. set (mock, MOI. ConflictCount (), 1 )
1090+ end
1091+ for ((F, S), result) in constraint_conflict_status
10701092 indices = MOI. get (mock, MOI. ListOfConstraintIndices {F,S} ())
10711093 for (i, ci) in enumerate (indices)
1072- MOI. set (
1073- mock,
1074- MOI. ConstraintConflictStatus (),
1075- ci,
1076- con_conflict_pair. second[i],
1077- )
1094+ MOI. set (mock, MOI. ConstraintConflictStatus (), ci, result[i])
10781095 end
10791096 end
10801097 if length (variable_basis_status) > 0
0 commit comments