@@ -124,6 +124,8 @@ function _instantiate_and_check(optimizer_constructor::OptimizerWithAttributes)
124124 return optimizer
125125end
126126
127+ struct IfIncrementalInterfaceNotSupported{T} end
128+
127129"""
128130 instantiate(
129131 optimizer_constructor,
@@ -163,6 +165,7 @@ function instantiate(
163165 (@nospecialize optimizer_constructor);
164166 with_bridge_type:: Union{Nothing,Type} = nothing ,
165167 with_cache_type:: Union{Nothing,Type} = nothing ,
168+ cache_only_if_incremental_interface_not_supported = false ,
166169)
167170 if with_bridge_type != = nothing && with_cache_type != = nothing
168171 if with_bridge_type != with_cache_type
@@ -175,20 +178,19 @@ function instantiate(
175178 end
176179 end
177180 optimizer = _instantiate_and_check (optimizer_constructor)
178- if with_bridge_type === nothing
179- if with_cache_type === nothing
180- return optimizer
181- end
181+ if ! isnothing (with_bridge_type) && isnothing (with_cache_type)
182+ with_cache_type = T
183+ cache_only_if_incremental_interface_not_supported = true
184+ end
185+ if cache_only_if_incremental_interface_not_supported && ! supports_incremental_interface (optimizer)
186+ with_cache_type = nothing
182187 cache = default_cache (optimizer, with_cache_type)
183- return Utilities. CachingOptimizer (cache, optimizer)
184- else
185- if with_cache_type != = nothing ||
186- ! supports_incremental_interface (optimizer)
187- cache = default_cache (optimizer, with_bridge_type)
188- optimizer = Utilities. CachingOptimizer (cache, optimizer)
189- end
190- return Bridges. full_bridge_optimizer (optimizer, with_bridge_type)
188+ optimizer = Utilities. CachingOptimizer (cache, optimizer)
189+ end
190+ if ! isnothing (with_bridge_type)
191+ optimizer = Bridges. full_bridge_optimizer (optimizer, with_bridge_type)
191192 end
193+ return optimizer
192194end
193195
194196"""
0 commit comments