Skip to content

Commit 77e4e70

Browse files
fix: fix incorrect folding in substitute in OptimizationSystem
1 parent 5691fa3 commit 77e4e70

File tree

2 files changed

+25
-4
lines changed

2 files changed

+25
-4
lines changed

src/systems/optimization/optimizationsystem.jl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -114,8 +114,8 @@ function OptimizationSystem(op, unknowns, ps;
114114
unknowns′[i] = irrvar
115115
end
116116
end
117-
op′ = substitute(op′, irreducible_subs)
118-
constraints = substitute.(constraints, (irreducible_subs,))
117+
op′ = fast_substitute(op′, irreducible_subs)
118+
constraints = fast_substitute.(constraints, (irreducible_subs,))
119119

120120
if !(isempty(default_u0) && isempty(default_p))
121121
Base.depwarn(
@@ -127,7 +127,7 @@ function OptimizationSystem(op, unknowns, ps;
127127
throw(ArgumentError("System names must be unique."))
128128
end
129129
defaults = todict(defaults)
130-
defaults = Dict(substitute(value(k), irreducible_subs) => substitute(
130+
defaults = Dict(fast_substitute(value(k), irreducible_subs) => fast_substitute(
131131
value(v), irreducible_subs)
132132
for (k, v) in pairs(defaults) if value(v) !== nothing)
133133

test/optimizationsystem.jl

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using ModelingToolkit, SparseArrays, Test, Optimization, OptimizationOptimJL,
2-
OptimizationMOI, Ipopt, AmplNLWriter, Ipopt_jll, SymbolicIndexingInterface
2+
OptimizationMOI, Ipopt, AmplNLWriter, Ipopt_jll, SymbolicIndexingInterface,
3+
LinearAlgebra
34
using ModelingToolkit: get_metadata
45

56
@testset "basic" begin
@@ -388,3 +389,23 @@ end
388389
@test all(y -> any(x -> isequal(x, y), unknowns(sys2)), [x2, sys1.x1])
389390
@test all(y -> any(x -> isequal(x, y), parameters(sys2)), [p2, sys1.p1])
390391
end
392+
393+
function myeigvals_1(A::AbstractMatrix)
394+
eigvals(A)[1]
395+
end
396+
397+
@register_symbolic myeigvals_1(A::AbstractMatrix)
398+
399+
@testset "Issue#3473: Registered array function in objective, no irreducible variables" begin
400+
p_free = @variables begin
401+
p1, [bounds = (0, 1)]
402+
p2, [bounds = (0, 1)]
403+
p3, [bounds = (0, 1)]
404+
p4, [bounds = (0, 1)]
405+
end
406+
407+
m = diagm(p_free)
408+
409+
obj = myeigvals_1(m)
410+
@test_nowarn OptimizationSystem(obj, p_free, []; name = :osys)
411+
end

0 commit comments

Comments
 (0)