@@ -165,10 +165,33 @@ const OptimizerCache{T} = MOI.Utilities.GenericModel{
165165 },
166166}
167167
168+ MOI. default_cache (:: Optimizer{T} , :: Type{T} ) where {T} = MOI. Utilities. UniversalFallback (OptimizerCache {T} ())
169+
168170function MOI. optimize! (dest:: Optimizer{T} , src:: MOI.ModelLike ) where {T}
169- MOI. empty! (dest)
170- cache = OptimizerCache {T} ()
171+ cache = MOI. default_cache (dest, T)
171172 index_map = MOI. copy_to (cache, src)
173+ MOI. optimize! (dest, cache)
174+ return index_map, false
175+ end
176+
177+ function _pass_attributes (dest:: Optimizer{T} , cache:: MOI.Utilities.UniversalFallback{OptimizerCache{T}} , index_map) where {T}
178+ MOI. Utilities. pass_attributes (dest, cache, index_map, MOI. get (cache, MOI. ListOfVariableIndices ()))
179+
180+ attrs = MOI. Utilities. ModelFilter (a -> ! (a isa MOI. ObjectiveSense || a isa MOI. ObjectiveFunction), cache)
181+ MOI. Utilities. pass_attributes (dest, attrs, index_map)
182+
183+ for (F, S) in MOI. get (cache, MOI. ListOfConstraintTypesPresent ())
184+ idxs = MOI. get (cache, MOI. ListOfConstraintIndices {F, S} ())
185+ MOI. Utilities. pass_attributes (dest, cache, index_map, idxs)
186+ end
187+
188+ return cache. model
189+ end
190+
191+ function MOI. optimize! (dest:: Optimizer{T} , fcache:: MOI.Utilities.UniversalFallback{OptimizerCache{T}} ) where {T}
192+ MOI. empty! (dest)
193+ index_map = MOI. Utilities. identity_index_map (fcache)
194+ cache = _pass_attributes (dest, fcache, index_map)
172195
173196 n = cache. constraints. coefficients. n
174197 max_sense = cache. objective. sense == MOI. MAX_SENSE
0 commit comments