@@ -252,13 +252,13 @@ function coo_sym_dot(
252252end
253253
254254"""
255- parser_SAF(fun, set, linrows, lincols, linvals, nlin, lin_lcon, lin_ucon, index_map )
255+ parser_SAF(fun, set, linrows, lincols, linvals, nlin, lin_lcon, lin_ucon)
256256
257257Parse a `ScalarAffineFunction` fun with its associated set.
258258`linrows`, `lincols`, `linvals`, `lin_lcon` and `lin_ucon` are updated.
259259"""
260- function parser_SAF (fun, set, linrows, lincols, linvals, nlin, lin_lcon, lin_ucon, index_map )
261- _index (v:: MOI.VariableIndex ) = index_map[v] . value
260+ function parser_SAF (fun, set, linrows, lincols, linvals, nlin, lin_lcon, lin_ucon)
261+ _index (v:: MOI.VariableIndex ) = v . value
262262
263263 # Parse a ScalarAffineTerm{Float64}(coefficient, variable)
264264 for term in fun. terms
@@ -285,13 +285,13 @@ function parser_SAF(fun, set, linrows, lincols, linvals, nlin, lin_lcon, lin_uco
285285end
286286
287287"""
288- parser_VAF(fun, set, linrows, lincols, linvals, nlin, lin_lcon, lin_ucon, index_map )
288+ parser_VAF(fun, set, linrows, lincols, linvals, nlin, lin_lcon, lin_ucon)
289289
290290Parse a `VectorAffineFunction` fun with its associated set.
291291`linrows`, `lincols`, `linvals`, `lin_lcon` and `lin_ucon` are updated.
292292"""
293- function parser_VAF (fun, set, linrows, lincols, linvals, nlin, lin_lcon, lin_ucon, index_map )
294- _index (v:: MOI.VariableIndex ) = index_map[v] . value
293+ function parser_VAF (fun, set, linrows, lincols, linvals, nlin, lin_lcon, lin_ucon)
294+ _index (v:: MOI.VariableIndex ) = v . value
295295
296296 # Parse a VectorAffineTerm{Float64}(output_index, scalar_term)
297297 for term in fun. terms
@@ -314,13 +314,13 @@ function parser_VAF(fun, set, linrows, lincols, linvals, nlin, lin_lcon, lin_uco
314314end
315315
316316"""
317- parser_SQF(fun, set, nvar, qcons, quad_lcon, quad_ucon, index_map )
317+ parser_SQF(fun, set, nvar, qcons, quad_lcon, quad_ucon)
318318
319319Parse a `ScalarQuadraticFunction` fun with its associated set.
320320`qcons`, `quad_lcon`, `quad_ucon` are updated.
321321"""
322- function parser_SQF (fun, set, nvar, qcons, quad_lcon, quad_ucon, index_map )
323- _index (v:: MOI.VariableIndex ) = index_map[v] . value
322+ function parser_SQF (fun, set, nvar, qcons, quad_lcon, quad_ucon)
323+ _index (v:: MOI.VariableIndex ) = v . value
324324
325325 b = spzeros (Float64, nvar)
326326 rows = Int[]
@@ -376,13 +376,13 @@ function parser_SQF(fun, set, nvar, qcons, quad_lcon, quad_ucon, index_map)
376376end
377377
378378"""
379- parser_VQF(fun, set, nvar, qcons, quad_lcon, quad_ucon, index_map )
379+ parser_VQF(fun, set, nvar, qcons, quad_lcon, quad_ucon)
380380
381381Parse a `VectorQuadraticFunction` fun with its associated set.
382382`qcons`, `quad_lcon`, `quad_ucon` are updated.
383383"""
384- function parser_VQF (fun, set, nvar, qcons, quad_lcon, quad_ucon, index_map )
385- _index (v:: MOI.VariableIndex ) = index_map[v] . value
384+ function parser_VQF (fun, set, nvar, qcons, quad_lcon, quad_ucon)
385+ _index (v:: MOI.VariableIndex ) = v . value
386386
387387 ncon = length (fun. constants)
388388 for k = 1 : ncon
@@ -443,11 +443,14 @@ function parser_VQF(fun, set, nvar, qcons, quad_lcon, quad_ucon, index_map)
443443end
444444
445445"""
446- parser_MOI(moimodel, index_map, nvar )
446+ parser_MOI(moimodel, variables )
447447
448448Parse linear constraints of a `MOI.ModelLike`.
449449"""
450- function parser_MOI (moimodel, index_map, nvar)
450+ function parser_MOI (moimodel, variables)
451+
452+ # Number of variables
453+ nvar = length (variables)
451454
452455 # Variables associated to linear constraints
453456 nlin = 0
@@ -475,30 +478,25 @@ function parser_MOI(moimodel, index_map, nvar)
475478 F <: AF || F <: QF || F == SNF || F == VI || error (" Function $F is not supported." )
476479 S <: LS || error (" Set $S is not supported." )
477480
481+ (F == VI) && continue
478482 conindices = MOI. get (moimodel, MOI. ListOfConstraintIndices {F, S} ())
479483 for cidx in conindices
480484 fun = MOI. get (moimodel, MOI. ConstraintFunction (), cidx)
481- if F == VI
482- index_map[cidx] = MOI. ConstraintIndex {F, S} (fun. value)
483- continue
484- else
485- index_map[cidx] = MOI. ConstraintIndex {F, S} (nlin)
486- end
487485 set = MOI. get (moimodel, MOI. ConstraintSet (), cidx)
488486 if typeof (fun) <: SAF
489- parser_SAF (fun, set, linrows, lincols, linvals, nlin, lin_lcon, lin_ucon, index_map )
487+ parser_SAF (fun, set, linrows, lincols, linvals, nlin, lin_lcon, lin_ucon)
490488 nlin += 1
491489 end
492490 if typeof (fun) <: VAF
493- parser_VAF (fun, set, linrows, lincols, linvals, nlin, lin_lcon, lin_ucon, index_map )
491+ parser_VAF (fun, set, linrows, lincols, linvals, nlin, lin_lcon, lin_ucon)
494492 nlin += set. dimension
495493 end
496494 if typeof (fun) <: SQF
497- parser_SQF (fun, set, nvar, qcons, quad_lcon, quad_ucon, index_map )
495+ parser_SQF (fun, set, nvar, qcons, quad_lcon, quad_ucon)
498496 nquad += 1
499497 end
500498 if typeof (fun) <: VQF
501- parser_VQF (fun, set, nvar, qcons, quad_lcon, quad_ucon, index_map )
499+ parser_VQF (fun, set, nvar, qcons, quad_lcon, quad_ucon)
502500 nquad += set. dimension
503501 end
504502 end
@@ -633,7 +631,7 @@ function parser_oracles(moimodel)
633631 MOI. ListOfConstraintIndices {MOI.VectorOfVariables, MOI.VectorNonlinearOracle{Float64}} (),
634632 )
635633 f = MOI. get (moimodel, MOI. ConstraintFunction (), ci) # ::MOI.VectorOfVariables
636- set = MOI. get (moimodel, MOI. ConstraintSet (), ci) # ::MOI.VectorNonlinearOracle{Float64}
634+ set = MOI. get (moimodel, MOI. ConstraintSet (), ci) # ::MOI.VectorNonlinearOracle{Float64}
637635
638636 cache = _VectorNonlinearOracleCache (set)
639637 push! (oracles, (f, cache))
@@ -668,20 +666,23 @@ Parse variables informations of a `MOI.ModelLike`.
668666"""
669667function parser_variables (model:: MOI.ModelLike )
670668 # Number of variables and bounds constraints
671- vars = MOI. get (model, MOI. ListOfVariableIndices ())
672- nvar = length (vars )
669+ variables = MOI. get (model, MOI. ListOfVariableIndices ())
670+ nvar = length (variables )
673671 lvar = zeros (nvar)
674672 uvar = zeros (nvar)
673+
675674 # Initial solution
676675 x0 = zeros (nvar)
677676 has_start = MOI. VariablePrimalStart () in MOI. get (model, MOI. ListOfVariableAttributesSet ())
678677
679- index_map = MOI. Utilities. IndexMap ()
680- for (i, vi) in enumerate (vars)
681- index_map[vi] = MOI. VariableIndex (i)
682- end
678+ jump_variables = Dict {String,Int} ()
679+ sizehint! (jump_variables, nvar)
680+
681+ for vi in variables
682+ i = vi. value
683+ name = MOI. get (model, MOI. VariableName (), vi)
684+ jump_variables[name] = i
683685
684- for (i, vi) in enumerate (vars)
685686 lvar[i], uvar[i] = MOI. Utilities. get_bounds (model, Float64, vi)
686687 if has_start
687688 val = MOI. get (model, MOI. VariablePrimalStart (), vi)
@@ -691,16 +692,19 @@ function parser_variables(model::MOI.ModelLike)
691692 end
692693 end
693694
694- return index_map , nvar, lvar, uvar, x0
695+ return jump_variables, variables , nvar, lvar, uvar, x0
695696end
696697
697698"""
698- parser_objective_MOI(moimodel, nvar, index_map )
699+ parser_objective_MOI(moimodel, variables )
699700
700701Parse linear and quadratic objective of a `MOI.ModelLike`.
701702"""
702- function parser_objective_MOI (moimodel, nvar, index_map)
703- _index (v:: MOI.VariableIndex ) = index_map[v]. value
703+ function parser_objective_MOI (moimodel, variables)
704+ _index (v:: MOI.VariableIndex ) = v. value
705+
706+ # Number of variables
707+ nvar = length (variables)
704708
705709 # Variables associated to linear and quadratic objective
706710 type = " UNKNOWN"
@@ -751,11 +755,14 @@ function parser_objective_MOI(moimodel, nvar, index_map)
751755end
752756
753757"""
754- parser_linear_expression(cmodel, nvar, index_map , F)
758+ parser_linear_expression(cmodel, variables , F)
755759
756760Parse linear expressions of type `VariableRef` and `GenericAffExpr{Float64,VariableRef}`.
757761"""
758- function parser_linear_expression (cmodel, nvar, index_map, F)
762+ function parser_linear_expression (cmodel, variables, F)
763+
764+ # Number of variables
765+ nvar = length (variables)
759766
760767 # Variables associated to linear expressions
761768 rows = Int[]
@@ -810,7 +817,7 @@ function parser_linear_expression(cmodel, nvar, index_map, F)
810817 end
811818 end
812819 moimodel = backend (cmodel)
813- lls = parser_objective_MOI (moimodel, nvar, index_map )
820+ lls = parser_objective_MOI (moimodel, variables )
814821 return lls, LinearEquations (COO (rows, cols, vals), constants, length (vals)), nlinequ
815822end
816823
@@ -844,11 +851,14 @@ function add_constraint_model(Fmodel, Fi::AbstractArray)
844851end
845852
846853"""
847- parser_nonlinear_expression(cmodel, nvar , F; hessian)
854+ parser_nonlinear_expression(cmodel, variables , F; hessian)
848855
849856Parse nonlinear expressions of type `NonlinearExpression`.
850857"""
851- function parser_nonlinear_expression (cmodel, nvar, F; hessian:: Bool = true )
858+ function parser_nonlinear_expression (cmodel, variables, F; hessian:: Bool = true )
859+
860+ # Number of variables
861+ nvar = length (variables)
852862
853863 # Nonlinear least squares model
854864 F_is_array_of_containers = F isa Array{<: AbstractArray }
0 commit comments