Skip to content

Commit 8a754f0

Browse files
feat: add inputs and outputs fields to System
1 parent 2426464 commit 8a754f0

File tree

2 files changed

+34
-5
lines changed

2 files changed

+34
-5
lines changed

src/systems/abstractsystem.jl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -784,6 +784,8 @@ const SYS_PROPS = [:eqs
784784
:parent
785785
:is_dde
786786
:tstops
787+
:inputs
788+
:outputs
787789
:index_cache
788790
:isscheduled
789791
:costs

src/systems/system.jl

Lines changed: 32 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,16 @@ struct System <: IntermediateDeprecationSystem
190190
"""
191191
tstops::Vector{Any}
192192
"""
193+
$INTERNAL_FIELD_WARNING
194+
The list of input variables of the system.
195+
"""
196+
inputs::OrderedSet{BasicSymbolic}
197+
"""
198+
$INTERNAL_FIELD_WARNING
199+
The list of output variables of the system.
200+
"""
201+
outputs::OrderedSet{BasicSymbolic}
202+
"""
193203
The `TearingState` of the system post-simplification with `mtkcompile`.
194204
"""
195205
tearing_state::Any
@@ -255,8 +265,9 @@ struct System <: IntermediateDeprecationSystem
255265
brownians, iv, observed, parameter_dependencies, var_to_name, name, description,
256266
defaults, guesses, systems, initialization_eqs, continuous_events, discrete_events,
257267
connector_type, assertions = Dict{BasicSymbolic, String}(),
258-
metadata = MetadataT(), gui_metadata = nothing,
259-
is_dde = false, tstops = [], tearing_state = nothing, namespacing = true,
268+
metadata = MetadataT(), gui_metadata = nothing, is_dde = false, tstops = [],
269+
inputs = Set{BasicSymbolic}(), outputs = Set{BasicSymbolic}(),
270+
tearing_state = nothing, namespacing = true,
260271
complete = false, index_cache = nothing, ignored_connections = nothing,
261272
preface = nothing, parent = nothing, initializesystem = nothing,
262273
is_initializesystem = false, is_discrete = false, isscheduled = false,
@@ -296,7 +307,8 @@ struct System <: IntermediateDeprecationSystem
296307
observed, parameter_dependencies, var_to_name, name, description, defaults,
297308
guesses, systems, initialization_eqs, continuous_events, discrete_events,
298309
connector_type, assertions, metadata, gui_metadata, is_dde,
299-
tstops, tearing_state, namespacing, complete, index_cache, ignored_connections,
310+
tstops, inputs, outputs, tearing_state, namespacing,
311+
complete, index_cache, ignored_connections,
300312
preface, parent, initializesystem, is_initializesystem, is_discrete,
301313
isscheduled, schedule)
302314
end
@@ -367,15 +379,27 @@ function System(eqs::Vector{Equation}, iv, dvs, ps, brownians = [];
367379

368380
defaults = anydict(defaults)
369381
guesses = anydict(guesses)
382+
inputs = Set{BasicSymbolic}()
383+
outputs = Set{BasicSymbolic}()
370384
var_to_name = anydict()
371385

372386
let defaults = discover_from_metadata ? defaults : Dict(),
373-
guesses = discover_from_metadata ? guesses : Dict()
387+
guesses = discover_from_metadata ? guesses : Dict(),
388+
inputs = discover_from_metadata ? inputs : Set(),
389+
outputs = discover_from_metadata ? outputs : Set()
374390

375391
process_variables!(var_to_name, defaults, guesses, dvs)
376392
process_variables!(var_to_name, defaults, guesses, ps)
377393
process_variables!(var_to_name, defaults, guesses, [eq.lhs for eq in observed])
378394
process_variables!(var_to_name, defaults, guesses, [eq.rhs for eq in observed])
395+
396+
for var in dvs
397+
if isinput(var)
398+
push!(inputs, var)
399+
elseif isoutput(var)
400+
push!(outputs, var)
401+
end
402+
end
379403
end
380404
filter!(!(isnothing last), defaults)
381405
filter!(!(isnothing last), guesses)
@@ -417,7 +441,8 @@ function System(eqs::Vector{Equation}, iv, dvs, ps, brownians = [];
417441
costs, consolidate, dvs, ps, brownians, iv, observed, Equation[],
418442
var_to_name, name, description, defaults, guesses, systems, initialization_eqs,
419443
continuous_events, discrete_events, connector_type, assertions, metadata, gui_metadata, is_dde,
420-
tstops, tearing_state, true, false, nothing, ignored_connections, preface, parent,
444+
tstops, inputs, outputs, tearing_state, true, false,
445+
nothing, ignored_connections, preface, parent,
421446
initializesystem, is_initializesystem, is_discrete; checks)
422447
end
423448

@@ -1143,6 +1168,8 @@ function Base.isapprox(sysa::System, sysb::System)
11431168
isequal(get_metadata(sysa), get_metadata(sysb)) &&
11441169
isequal(get_is_dde(sysa), get_is_dde(sysb)) &&
11451170
issetequal(get_tstops(sysa), get_tstops(sysb)) &&
1171+
issetequal(get_inputs(sysa), get_inputs(sysb)) &&
1172+
issetequal(get_outputs(sysa), get_outputs(sysb)) &&
11461173
safe_issetequal(get_ignored_connections(sysa), get_ignored_connections(sysb)) &&
11471174
isequal(get_is_initializesystem(sysa), get_is_initializesystem(sysb)) &&
11481175
isequal(get_is_discrete(sysa), get_is_discrete(sysb)) &&

0 commit comments

Comments
 (0)