Skip to content

Commit c8a4127

Browse files
fix: fix handling of loop_openings in linearization_function
1 parent ed5fa70 commit c8a4127

File tree

1 file changed

+14
-6
lines changed

1 file changed

+14
-6
lines changed

src/systems/analysis_points.jl

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -630,25 +630,33 @@ end
630630
function linearization_function(sys::AbstractSystem,
631631
inputs::Union{Symbol, Vector{Symbol}, AnalysisPoint, Vector{AnalysisPoint}},
632632
outputs; loop_openings = [], system_modifier = identity, kwargs...)
633-
sys = handle_loop_openings(sys, loop_openings)
634-
633+
loop_openings = Set(map(nameof, canonicalize_ap(loop_openings)))
635634
inputs = canonicalize_ap(inputs)
636635
outputs = canonicalize_ap(outputs)
637636

638637
input_vars = []
639638
for input in inputs
640-
sys, (input_var,) = apply_transformation(PerturbOutput(input), sys)
639+
if nameof(input) in loop_openings
640+
delete!(loop_openings, nameof(input))
641+
sys, (input_var,) = apply_transformation(Break(input, true), sys)
642+
else
643+
sys, (input_var,) = apply_transformation(PerturbOutput(input), sys)
644+
end
641645
push!(input_vars, input_var)
642646
end
643647
output_vars = []
644648
for output in outputs
645649
if output isa AnalysisPoint
646-
sys, (output_var,) = apply_transformation(GetInput(output), sys)
647-
push!(output_vars, output_var)
650+
sys, (output_var,) = apply_transformation(AddVariable(output), sys)
651+
sys, (input_var,) = apply_transformation(GetInput(output), sys)
652+
push!(get_eqs(sys), output_var ~ input_var)
648653
else
649-
push!(output_vars, output)
654+
output_var = output
650655
end
656+
push!(output_vars, output_var)
651657
end
652658

659+
sys = handle_loop_openings(sys, collect(loop_openings))
660+
653661
return linearization_function(system_modifier(sys), input_vars, output_vars; kwargs...)
654662
end

0 commit comments

Comments
 (0)