Skip to content

Commit 451becb

Browse files
committed
fix: remove the plural constructors
1 parent 44c4306 commit 451becb

File tree

8 files changed

+22
-112
lines changed

8 files changed

+22
-112
lines changed

docs/src/systems/DiscreteSystem.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ DiscreteSystem
1212
- `get_unknowns(sys)` or `unknowns(sys)`: The set of unknowns in the discrete system.
1313
- `get_ps(sys)` or `parameters(sys)`: The parameters of the discrete system.
1414
- `get_iv(sys)`: The independent variable of the discrete system
15-
- `discrete_events(sys)`: The set of discrete events in the discrete system.
1615

1716
## Transformations
1817

docs/src/systems/ImplicitDiscreteSystem.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ ImplicitDiscreteSystem
1212
- `get_unknowns(sys)` or `unknowns(sys)`: The set of unknowns in the implicit discrete system.
1313
- `get_ps(sys)` or `parameters(sys)`: The parameters of the implicit discrete system.
1414
- `get_iv(sys)`: The independent variable of the implicit discrete system
15-
- `discrete_events(sys)`: The set of discrete events in the implicit discrete system.
1615

1716
## Transformations
1817

src/systems/callbacks.jl

Lines changed: 10 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,6 @@ discretes(a::AffectSystem) = a.discretes
6969
unknowns(a::AffectSystem) = a.unknowns
7070
parameters(a::AffectSystem) = a.parameters
7171
aff_to_sys(a::AffectSystem) = a.aff_to_sys
72-
previous_vals(a::AffectSystem) = parameters(system(a))
7372
all_equations(a::AffectSystem) = vcat(equations(system(a)), observed(system(a)))
7473

7574
function Base.show(iio::IO, aff::AffectSystem)
@@ -149,7 +148,6 @@ function (p::Pre)(x)
149148
end
150149
return result
151150
end
152-
153151
haspre(eq::Equation) = haspre(eq.lhs) || haspre(eq.rhs)
154152
haspre(O) = recursive_hasoperator(Pre, O)
155153

@@ -247,11 +245,8 @@ end
247245
function SymbolicContinuousCallback(p::Pair, args...; kwargs...)
248246
SymbolicContinuousCallback(p[1], p[2], args...; kwargs...)
249247
end
250-
251-
function SymbolicContinuousCallback(cb::SymbolicContinuousCallback, args...;
252-
iv = nothing, alg_eqs = Equation[], kwargs...)
253-
cb
254-
end
248+
SymbolicContinuousCallback(cb::SymbolicContinuousCallback, args...; kwargs...) = cb
249+
SymbolicContinuousCallback(cb::Nothing, args...; kwargs...) = nothing
255250

256251
make_affect(affect::Nothing; kwargs...) = nothing
257252
make_affect(affect::Tuple; kwargs...) = FunctionalAffect(affect...)
@@ -310,7 +305,6 @@ function make_affect(affect::Vector{Equation}; discrete_parameters = Any[],
310305

311306
# add scalarized unknowns to the map.
312307
_dvs = reduce(vcat, map(scalarize, _dvs), init = Any[])
313-
@show _dvs
314308
for u in _dvs
315309
aff_map[u] = u
316310
end
@@ -323,25 +317,6 @@ function make_affect(affect; kwargs...)
323317
error("Malformed affect $(affect). This should be a vector of equations or a tuple specifying a functional affect.")
324318
end
325319

326-
"""
327-
Generate continuous callbacks.
328-
"""
329-
function SymbolicContinuousCallbacks(events; discrete_parameters = Any[],
330-
alg_eqs::Vector{Equation} = Equation[], iv = nothing)
331-
callbacks = SymbolicContinuousCallback[]
332-
isnothing(events) && return callbacks
333-
334-
events isa AbstractVector || (events = [events])
335-
isempty(events) && return callbacks
336-
337-
for event in events
338-
cond, affs = event isa Pair ? (event[1], event[2]) : (event, nothing)
339-
push!(callbacks,
340-
SymbolicContinuousCallback(cond, affs; iv, alg_eqs, discrete_parameters))
341-
end
342-
callbacks
343-
end
344-
345320
function Base.show(io::IO, cb::AbstractCallback)
346321
indent = get(io, :indent, 0)
347322
iio = IOContext(io, :indent => indent + 1)
@@ -422,8 +397,6 @@ end
422397
################################
423398
######## Discrete events #######
424399
################################
425-
426-
# TODO: Iterative callbacks
427400
"""
428401
SymbolicDiscreteCallback(conditions::Vector{Equation}, affect = nothing, iv = nothing;
429402
initialize = nothing, finalize = nothing, alg_eqs = Equation[])
@@ -468,25 +441,7 @@ function SymbolicDiscreteCallback(p::Pair, args...; kwargs...)
468441
SymbolicDiscreteCallback(p[1], p[2], args...; kwargs...)
469442
end
470443
SymbolicDiscreteCallback(cb::SymbolicDiscreteCallback, args...; kwargs...) = cb
471-
472-
"""
473-
Generate discrete callbacks.
474-
"""
475-
function SymbolicDiscreteCallbacks(events; discrete_parameters::Vector = Any[],
476-
alg_eqs::Vector{Equation} = Equation[], iv = nothing)
477-
callbacks = SymbolicDiscreteCallback[]
478-
479-
isnothing(events) && return callbacks
480-
events isa AbstractVector || (events = [events])
481-
isempty(events) && return callbacks
482-
483-
for event in events
484-
cond, affs = event isa Pair ? (event[1], event[2]) : (event, nothing)
485-
push!(callbacks,
486-
SymbolicDiscreteCallback(cond, affs; iv, alg_eqs, discrete_parameters))
487-
end
488-
callbacks
489-
end
444+
SymbolicDiscreteCallback(cb::Nothing, args...; kwargs...) = nothing
490445

491446
function is_timed_condition(condition::T) where {T}
492447
if T === Num
@@ -500,10 +455,14 @@ function is_timed_condition(condition::T) where {T}
500455
end
501456
end
502457

458+
to_cb_vector(cbs::Vector{<:AbstractCallback}) = cbs
459+
to_cb_vector(cbs::Vector) = Vector{AbstractCallback}(cbs)
460+
to_cb_vector(cbs::Nothing) = AbstractCallback[]
461+
to_cb_vector(cb::AbstractCallback) = [cb]
462+
503463
############################################
504464
########## Namespacing Utilities ###########
505465
############################################
506-
507466
function namespace_affects(affect::FunctionalAffect, s)
508467
FunctionalAffect(func(affect),
509468
renamespace.((s,), unknowns(affect)),
@@ -530,7 +489,7 @@ function namespace_callback(cb::SymbolicContinuousCallback, s)::SymbolicContinuo
530489
affect_neg = namespace_affects(affect_negs(cb), s),
531490
initialize = namespace_affects(initialize_affects(cb), s),
532491
finalize = namespace_affects(finalize_affects(cb), s),
533-
rootfind = cb.rootfind)
492+
rootfind = cb.rootfind, reinitializealg = cb.reinitializealg)
534493
end
535494

536495
function namespace_conditions(condition, s)
@@ -542,7 +501,7 @@ function namespace_callback(cb::SymbolicDiscreteCallback, s)::SymbolicDiscreteCa
542501
namespace_conditions(conditions(cb), s),
543502
namespace_affects(affects(cb), s),
544503
initialize = namespace_affects(initialize_affects(cb), s),
545-
finalize = namespace_affects(finalize_affects(cb), s))
504+
finalize = namespace_affects(finalize_affects(cb), s), reinitializealg = cb.reinitializealg)
546505
end
547506

548507
function Base.hash(cb::AbstractCallback, s::UInt)

src/systems/diffeqs/odesystem.jl

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -313,8 +313,11 @@ function ODESystem(deqs::AbstractVector{<:Equation}, iv, dvs, ps;
313313

314314
alg_eqs = filter(eq -> eq.lhs isa Union{Symbolic, Number} && !is_diff_equation(eq),
315315
deqs)
316-
cont_callbacks = SymbolicContinuousCallbacks(continuous_events; alg_eqs, iv)
317-
disc_callbacks = SymbolicDiscreteCallbacks(discrete_events; alg_eqs, iv)
316+
@show continuous_events
317+
@show discrete_events
318+
cont_callbacks = to_cb_vector(SymbolicContinuousCallback.(
319+
continuous_events; alg_eqs, iv))
320+
disc_callbacks = to_cb_vector(SymbolicDiscreteCallback.(discrete_events; alg_eqs, iv))
318321

319322
if is_dde === nothing
320323
is_dde = _check_if_dde(deqs, iv′, systems)

src/systems/diffeqs/sdesystem.jl

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -270,8 +270,10 @@ function SDESystem(deqs::AbstractVector{<:Equation}, neqs::AbstractArray, iv, dv
270270

271271
alg_eqs = filter(eq -> eq.lhs isa Union{Symbolic, Number} && !is_diff_equation(eq),
272272
deqs)
273-
cont_callbacks = SymbolicContinuousCallbacks(continuous_events; alg_eqs, iv)
274-
disc_callbacks = SymbolicDiscreteCallbacks(discrete_events; alg_eqs, iv)
273+
cont_callbacks = to_cb_vector(SymbolicContinuousCallback.(
274+
continuous_events; alg_eqs, iv))
275+
disc_callbacks = to_cb_vector(SymbolicDiscreteCallback.(discrete_events; alg_eqs, iv))
276+
275277
if is_dde === nothing
276278
is_dde = _check_if_dde(deqs, iv′, systems)
277279
end

src/systems/jumps/jumpsystem.jl

Lines changed: 1 addition & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,5 @@
11
const JumpType = Union{VariableRateJump, ConstantRateJump, MassActionJump}
22

3-
# modifies the expression representing an affect function to
4-
# call reset_aggregated_jumps!(integrator).
5-
# assumes iip
6-
function _reset_aggregator!(expr, integrator)
7-
@assert Meta.isexpr(expr, :function)
8-
body = expr.args[end]
9-
body = quote
10-
$body
11-
$reset_aggregated_jumps!($integrator)
12-
end
13-
expr.args[end] = body
14-
return nothing
15-
end
16-
173
"""
184
$(TYPEDEF)
195
@@ -90,11 +76,6 @@ struct JumpSystem{U <: ArrayPartition} <: AbstractTimeDependentSystem
9076
"""
9177
connector_type::Any
9278
"""
93-
A `Vector{SymbolicContinuousCallback}` that model events.
94-
The integrator will use root finding to guarantee that it steps at each zero crossing.
95-
"""
96-
continuous_events::Vector{SymbolicContinuousCallback}
97-
"""
9879
A `Vector{SymbolicDiscreteCallback}` that models events. Symbolic
9980
analog to `SciMLBase.DiscreteCallback` that executes an affect when a given condition is
10081
true at the end of an integration step. Note, one must make sure to call
@@ -230,8 +211,7 @@ function JumpSystem(eqs, iv, unknowns, ps;
230211
end
231212
end
232213

233-
cont_callbacks = SymbolicContinuousCallbacks(continuous_events; iv)
234-
disc_callbacks = SymbolicDiscreteCallbacks(discrete_events; iv)
214+
disc_callbacks = to_cb_vector(SymbolicDiscreteCallback.(discrete_events; iv))
235215

236216
JumpSystem{typeof(ap)}(Threads.atomic_add!(SYSTEM_COUNT, UInt(1)),
237217
ap, iv′, us′, ps′, var_to_name, observed, name, description, systems,

test/symbolic_events.jl

Lines changed: 0 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
using ModelingToolkit, OrdinaryDiffEq, StochasticDiffEq, JumpProcesses, Test
22
using SciMLStructures: canonicalize, Discrete
33
using ModelingToolkit: SymbolicContinuousCallback,
4-
SymbolicContinuousCallbacks,
54
SymbolicDiscreteCallback,
6-
SymbolicDiscreteCallbacks,
75
get_callback,
86
t_nounits as t,
97
D_nounits as D,
@@ -88,37 +86,6 @@ affect_neg = [x ~ 1]
8886
@test e isa SymbolicContinuousCallback
8987
@test isequal(equations(e), eqs)
9088
@test e.rootfind == SciMLBase.LeftRootFind
91-
92-
# test plural constructor
93-
e = SymbolicContinuousCallbacks(eqs[])
94-
@test e isa Vector{SymbolicContinuousCallback}
95-
@test isequal(equations(e[]), eqs)
96-
@test e[].affect == nothing
97-
98-
e = SymbolicContinuousCallbacks(eqs)
99-
@test e isa Vector{SymbolicContinuousCallback}
100-
@test isequal(equations(e[]), eqs)
101-
@test e[].affect == nothing
102-
103-
e = SymbolicContinuousCallbacks(eqs[] => affect)
104-
@test e isa Vector{SymbolicContinuousCallback}
105-
@test isequal(equations(e[]), eqs)
106-
@test e[].affect isa AffectSystem
107-
108-
e = SymbolicContinuousCallbacks(eqs => affect)
109-
@test e isa Vector{SymbolicContinuousCallback}
110-
@test isequal(equations(e[]), eqs)
111-
@test e[].affect isa AffectSystem
112-
113-
e = SymbolicContinuousCallbacks([eqs[] => affect])
114-
@test e isa Vector{SymbolicContinuousCallback}
115-
@test isequal(equations(e[]), eqs)
116-
@test e[].affect isa AffectSystem
117-
118-
e = SymbolicContinuousCallbacks([eqs => affect])
119-
@test e isa Vector{SymbolicContinuousCallback}
120-
@test isequal(equations(e[]), eqs)
121-
@test e[].affect isa AffectSystem
12289
end
12390

12491
@testset "ImperativeAffect constructors" begin

test/symbolic_indexing_interface.jl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using ModelingToolkit, SymbolicIndexingInterface, SciMLBase
2-
using ModelingToolkit: t_nounits as t, D_nounits as D, ParameterIndex
2+
using ModelingToolkit: t_nounits as t, D_nounits as D, ParameterIndex,
3+
SymbolicContinuousCallback
34
using SciMLStructures: Tunable
45

56
@testset "ODESystem" begin

0 commit comments

Comments
 (0)