Skip to content

Commit d1246c0

Browse files
authored
Merge pull request #3665 from SciML/lintransform
refactor AP transform into exported API
2 parents 9201dbf + 3e3b5f0 commit d1246c0

File tree

2 files changed

+20
-5
lines changed

2 files changed

+20
-5
lines changed

src/ModelingToolkit.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -307,7 +307,7 @@ export independent_variable, equations, observed, full_equations, jumps, cost,
307307
brownians
308308
export initialization_equations, guesses, defaults, parameter_dependencies, hierarchy
309309
export mtkcompile, expand_connections, linearize, linearization_function,
310-
LinearizationProblem, structural_simplify
310+
LinearizationProblem, linearization_ap_transform, structural_simplify
311311
export solve
312312
export Pre
313313

src/systems/analysis_points.jl

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -930,13 +930,22 @@ function open_loop(sys, ap::Union{Symbol, AnalysisPoint}; system_modifier = iden
930930
return system_modifier(sys), vars
931931
end
932932

933-
function linearization_function(sys::AbstractSystem,
933+
"""
934+
sys, input_vars, output_vars = $(TYPEDSIGNATURES)
935+
936+
Apply analysis-point transformations to prepare a system for linearization.
937+
938+
Returns
939+
- `sys`: The transformed system.
940+
- `input_vars`: A vector of input variables corresponding to the input analysis points.
941+
- `output_vars`: A vector of output variables corresponding to the output analysis points.
942+
"""
943+
function linearization_ap_transform(sys,
934944
inputs::Union{Symbol, Vector{Symbol}, AnalysisPoint, Vector{AnalysisPoint}},
935-
outputs; loop_openings = [], system_modifier = identity, kwargs...)
945+
outputs, loop_openings)
936946
loop_openings = Set(map(nameof, canonicalize_ap(sys, loop_openings)))
937947
inputs = canonicalize_ap(sys, inputs)
938948
outputs = canonicalize_ap(sys, outputs)
939-
940949
input_vars = []
941950
for input in inputs
942951
if nameof(input) in loop_openings
@@ -958,9 +967,15 @@ function linearization_function(sys::AbstractSystem,
958967
end
959968
push!(output_vars, output_var)
960969
end
961-
962970
sys = handle_loop_openings(sys, map(AnalysisPoint, collect(loop_openings)))
971+
return sys, input_vars, output_vars
972+
end
973+
974+
function linearization_function(sys::AbstractSystem,
975+
inputs::Union{Symbol, Vector{Symbol}, AnalysisPoint, Vector{AnalysisPoint}},
976+
outputs; loop_openings = [], system_modifier = identity, kwargs...)
963977

978+
sys, input_vars, output_vars = linearization_ap_transform(sys, inputs, outputs, loop_openings)
964979
return linearization_function(system_modifier(sys), input_vars, output_vars; kwargs...)
965980
end
966981

0 commit comments

Comments
 (0)