@@ -630,25 +630,33 @@ end
630
630
function linearization_function (sys:: AbstractSystem ,
631
631
inputs:: Union{Symbol, Vector{Symbol}, AnalysisPoint, Vector{AnalysisPoint}} ,
632
632
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)))
635
634
inputs = canonicalize_ap (inputs)
636
635
outputs = canonicalize_ap (outputs)
637
636
638
637
input_vars = []
639
638
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
641
645
push! (input_vars, input_var)
642
646
end
643
647
output_vars = []
644
648
for output in outputs
645
649
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)
648
653
else
649
- push! (output_vars, output)
654
+ output_var = output
650
655
end
656
+ push! (output_vars, output_var)
651
657
end
652
658
659
+ sys = handle_loop_openings (sys, collect (loop_openings))
660
+
653
661
return linearization_function (system_modifier (sys), input_vars, output_vars; kwargs... )
654
662
end
0 commit comments