@@ -92,8 +92,8 @@ mutable struct GraphMOIBackend <: MOI.AbstractOptimizer
9292 graph_to_element_map:: GraphToElementMap
9393
9494 # map of nodes and edges to variables and constraints.
95- node_variables:: OrderedDict{OptiNode,Vector {MOI.VariableIndex}}
96- element_constraints:: OrderedDict{OptiElement,Vector {MOI.ConstraintIndex}}
95+ node_variables:: OrderedDict{OptiNode,OrderedSet {MOI.VariableIndex}}
96+ element_constraints:: OrderedDict{OptiElement,OrderedSet {MOI.ConstraintIndex}}
9797 element_attributes:: OrderedDict{Tuple{OptiObject,MOI.AbstractModelAttribute},Any}
9898 operator_map:: OrderedDict{Tuple{OptiObject,MOI.UserDefinedFunction},Symbol}
9999end
@@ -245,10 +245,10 @@ end
245245
246246function _add_node (backend:: GraphMOIBackend , node:: OptiNode )
247247 if ! haskey (backend. node_variables, node)
248- backend. node_variables[node] = MOI. VariableIndex[]
248+ backend. node_variables[node] = OrderedSet { MOI.VariableIndex} ()
249249 end
250250 if ! haskey (backend. element_constraints, node)
251- backend. element_constraints[node] = MOI. ConstraintIndex[]
251+ backend. element_constraints[node] = OrderedSet { MOI.ConstraintIndex} ()
252252 end
253253 return nothing
254254end
264264
265265function _add_edge (backend:: GraphMOIBackend , edge:: OptiEdge )
266266 if ! haskey (backend. element_constraints, edge)
267- backend. element_constraints[edge] = MOI. ConstraintIndex[]
267+ backend. element_constraints[edge] = OrderedSet { MOI.ConstraintIndex} ()
268268 end
269269 return nothing
270270end
472472function MOI. delete (backend:: GraphMOIBackend , nvref:: NodeVariableRef )
473473 index = backend. element_to_graph_map[nvref]
474474 MOI. delete (backend. moi_backend, index)
475-
476- # delete from list
477- list_index = findall (x -> x == index, backend. node_variables[nvref. node])
478- deleteat! (backend. node_variables[nvref. node], list_index)
475+ delete! (backend. node_variables[nvref. node], index)
479476
480477 # delete dictionary entries
481478 delete! (backend. graph_to_element_map. var_map, backend. element_to_graph_map[nvref])
@@ -487,10 +484,7 @@ function MOI.delete(backend::GraphMOIBackend, cref::ConstraintRef)
487484 # delete backend index
488485 index = backend. element_to_graph_map[cref]
489486 MOI. delete (backend. moi_backend, index)
490-
491- # delete from list
492- list_index = findall (x -> x == index, backend. element_constraints[cref. model])
493- deleteat! (backend. element_constraints[cref. model], list_index)
487+ delete! (backend. element_constraints[cref. model], index)
494488
495489 # delete dicionary entries
496490 delete! (backend. graph_to_element_map. con_map, backend. element_to_graph_map[cref])
@@ -543,7 +537,7 @@ function MOI.add_variable(backend::GraphMOIBackend, vref::NodeVariableRef)
543537
544538 # create key for node if necessary
545539 if ! haskey (backend. node_variables, vref. node)
546- backend. node_variables[vref. node] = MOI. VariableIndex[]
540+ backend. node_variables[vref. node] = OrderedSet { MOI.VariableIndex} ()
547541 end
548542 push! (backend. node_variables[vref. node], graph_var_index)
549543 return graph_var_index
@@ -571,10 +565,10 @@ function MOI.add_constrained_variable(
571565
572566 # create key for node if necessary
573567 if ! haskey (backend. node_variables, vref. node)
574- backend. node_variables[vref. node] = MOI. VariableIndex[]
568+ backend. node_variables[vref. node] = OrderedSet { MOI.VariableIndex} ()
575569 end
576570 if ! haskey (backend. element_constraints, vref. node)
577- graph_backend. element_constraints[vref. node] = MOI. ConstraintIndex[]
571+ graph_backend. element_constraints[vref. node] = OrderedSet { MOI.ConstraintIndex} ()
578572 end
579573 push! (backend. node_variables[vref. node], graph_var_index)
580574 push! (backend. element_constraints[vref. node], graph_con_index)
@@ -589,7 +583,7 @@ function MOI.add_constraint(
589583
590584 # create key for element if necessary
591585 if ! haskey (backend. element_constraints, cref. model)
592- graph_backend. element_constraints[cref. model] = MOI. ConstraintIndex[]
586+ graph_backend. element_constraints[cref. model] = OrderedSet { MOI.ConstraintIndex} ()
593587 end
594588
595589 # create the constraint
@@ -869,7 +863,7 @@ function _copy_node_to_backend!(backend::GraphMOIBackend, node::OptiNode)
869863
870864 # copy constraints and constraint attributes
871865 # NOTE: for now, we split between variable and non-variable, but they do the same thing.
872- # eventually, we might try doing something more similar to MOI `default_copy_to` where
866+ # eventually, we might try doing something more similar to MOI `default_copy_to` whereF
873867 # we try to constrain variables on creation.
874868 all_constraint_types = MOI. get (node, MOI. ListOfConstraintTypesPresent ())
875869 variable_constraint_types = filter (all_constraint_types) do (F, S)
0 commit comments