@@ -630,25 +630,33 @@ end
630630function 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... )
654662end
0 commit comments