@@ -131,7 +131,7 @@ struct SymbolicContinuousCallback
131
131
finalize = NULL_AFFECT,
132
132
rootfind = SciMLBase. LeftRootFind,
133
133
reinitializealg = SciMLBase. CheckInit ())
134
- new (eqs, initialize, finalize, make_affect (affect),
134
+ new (eqs, initialize, finalize, make_affect (affect),
135
135
make_affect (affect_neg), rootfind, reinitializealg)
136
136
end # Default affect to nothing
137
137
end
@@ -227,18 +227,19 @@ function SymbolicContinuousCallback(args...)
227
227
end # wrap eq in vector
228
228
SymbolicContinuousCallback (p:: Pair ) = SymbolicContinuousCallback (p[1 ], p[2 ])
229
229
SymbolicContinuousCallback (cb:: SymbolicContinuousCallback ) = cb # passthrough
230
- function SymbolicContinuousCallback (eqs:: Equation , affect = NULL_AFFECT;
231
- initialize= NULL_AFFECT, finalize= NULL_AFFECT,
232
- affect_neg = affect, rootfind = SciMLBase. LeftRootFind)
230
+ function SymbolicContinuousCallback (eqs:: Equation , affect = NULL_AFFECT;
231
+ initialize = NULL_AFFECT, finalize = NULL_AFFECT,
232
+ affect_neg = affect, rootfind = SciMLBase. LeftRootFind)
233
233
SymbolicContinuousCallback (
234
- eqs = [eqs], affect = affect, affect_neg = affect_neg,
235
- initialize= initialize, finalize= finalize, rootfind = rootfind)
234
+ eqs = [eqs], affect = affect, affect_neg = affect_neg,
235
+ initialize = initialize, finalize = finalize, rootfind = rootfind)
236
236
end
237
237
function SymbolicContinuousCallback (eqs:: Vector{Equation} , affect = NULL_AFFECT;
238
- affect_neg = affect, initialize= NULL_AFFECT, finalize= NULL_AFFECT,
238
+ affect_neg = affect, initialize = NULL_AFFECT, finalize = NULL_AFFECT,
239
239
rootfind = SciMLBase. LeftRootFind)
240
240
SymbolicContinuousCallback (
241
- eqs = eqs, affect = affect, affect_neg = affect_neg, initialize= initialize, finalize= finalize, rootfind = rootfind)
241
+ eqs = eqs, affect = affect, affect_neg = affect_neg,
242
+ initialize = initialize, finalize = finalize, rootfind = rootfind)
242
243
end
243
244
244
245
SymbolicContinuousCallbacks (cb:: SymbolicContinuousCallback ) = [cb]
@@ -334,10 +335,11 @@ struct SymbolicDiscreteCallback
334
335
335
336
function SymbolicDiscreteCallback (
336
337
condition, affects = NULL_AFFECT; reinitializealg = SciMLBase. CheckInit (),
337
- initialize= NULL_AFFECT, finalize= NULL_AFFECT)
338
+ initialize = NULL_AFFECT, finalize = NULL_AFFECT)
338
339
c = scalarize_condition (condition)
339
340
a = scalarize_affects (affects)
340
- new (c, a, scalarize_affects (initialize), scalarize_affects (finalize), reinitializealg)
341
+ new (c, a, scalarize_affects (initialize),
342
+ scalarize_affects (finalize), reinitializealg)
341
343
end # Default affect to nothing
342
344
end
343
345
@@ -376,14 +378,17 @@ function Base.show(io::IO, db::SymbolicDiscreteCallback)
376
378
end
377
379
378
380
function Base.:(== )(e1:: SymbolicDiscreteCallback , e2:: SymbolicDiscreteCallback )
379
- isequal (e1. condition, e2. condition) && isequal (e1. affects, e2. affects) &&
380
- isequal (e1. initialize, e2. initialize) && isequal (e1. finalize, e2. finalize)
381
+ isequal (e1. condition, e2. condition) && isequal (e1. affects, e2. affects) &&
382
+ isequal (e1. initialize, e2. initialize) && isequal (e1. finalize, e2. finalize)
381
383
end
382
384
function Base. hash (cb:: SymbolicDiscreteCallback , s:: UInt )
383
385
s = hash (cb. condition, s)
384
- s = cb. affects isa AbstractVector ? foldr (hash, cb. affects, init = s) : hash (cb. affects, s)
385
- s = cb. initialize isa AbstractVector ? foldr (hash, cb. initialize, init = s) : hash (cb. initialize, s)
386
- s = cb. finalize isa AbstractVector ? foldr (hash, cb. finalize, init = s) : hash (cb. finalize, s)
386
+ s = cb. affects isa AbstractVector ? foldr (hash, cb. affects, init = s) :
387
+ hash (cb. affects, s)
388
+ s = cb. initialize isa AbstractVector ? foldr (hash, cb. initialize, init = s) :
389
+ hash (cb. initialize, s)
390
+ s = cb. finalize isa AbstractVector ? foldr (hash, cb. finalize, init = s) :
391
+ hash (cb. finalize, s)
387
392
s = hash (cb. reinitializealg, s)
388
393
return s
389
394
end
@@ -405,7 +410,6 @@ function reinitialization_algs(cbs::Vector{SymbolicDiscreteCallback})
405
410
reinitialization_alg, vcat, cbs, init = SciMLBase. DAEInitializationAlgorithm[])
406
411
end
407
412
408
-
409
413
initialize_affects (cb:: SymbolicDiscreteCallback ) = cb. initialize
410
414
function initialize_affects (cbs:: Vector{SymbolicDiscreteCallback} )
411
415
mapreduce (initialize_affects, vcat, cbs, init = Equation[])
@@ -418,10 +422,13 @@ end
418
422
419
423
function namespace_callback (cb:: SymbolicDiscreteCallback , s):: SymbolicDiscreteCallback
420
424
function namespace_affects (af)
421
- return af isa AbstractVector ? namespace_affect .(af, Ref (s)) : namespace_affect (af, s)
425
+ return af isa AbstractVector ? namespace_affect .(af, Ref (s)) :
426
+ namespace_affect (af, s)
422
427
end
423
- SymbolicDiscreteCallback (namespace_condition (condition (cb), s), namespace_affects (affects (cb)),
424
- reinitializealg= cb. reinitializealg, initialize= namespace_affects (initialize_affects (cb)), finalize= namespace_affects (finalize_affects (cb)))
428
+ SymbolicDiscreteCallback (
429
+ namespace_condition (condition (cb), s), namespace_affects (affects (cb)),
430
+ reinitializealg = cb. reinitializealg, initialize = namespace_affects (initialize_affects (cb)),
431
+ finalize = namespace_affects (finalize_affects (cb)))
425
432
end
426
433
427
434
SymbolicDiscreteCallbacks (cb:: Pair ) = SymbolicDiscreteCallback[SymbolicDiscreteCallback (cb)]
@@ -698,7 +705,7 @@ function generate_single_rootfinding_callback(
698
705
end
699
706
end
700
707
user_initfun = isnothing (affect_function. initialize) ? SciMLBase. INITIALIZE_DEFAULT :
701
- (c, u, t, i) -> affect_function. initialize (i)
708
+ (c, u, t, i) -> affect_function. initialize (i)
702
709
if has_index_cache (sys) && (ic = get_index_cache (sys)) != = nothing &&
703
710
(save_idxs = get (ic. callback_to_clocks, cb, nothing )) != = nothing
704
711
initfn = let save_idxs = save_idxs
@@ -715,7 +722,8 @@ function generate_single_rootfinding_callback(
715
722
return ContinuousCallback (
716
723
cond, affect_function. affect, affect_function. affect_neg, rootfind = cb. rootfind,
717
724
initialize = initfn,
718
- finalize = isnothing (affect_function. finalize) ? SciMLBase. FINALIZE_DEFAULT : (c, u, t, i) -> affect_function. finalize (i),
725
+ finalize = isnothing (affect_function. finalize) ? SciMLBase. FINALIZE_DEFAULT :
726
+ (c, u, t, i) -> affect_function. finalize (i),
719
727
initializealg = reinitialization_alg (cb))
720
728
end
721
729
@@ -742,8 +750,8 @@ function generate_vector_rootfinding_callback(
742
750
affect_neg:: Union{Function, Nothing} ,
743
751
initialize:: Union{Function, Nothing} ,
744
752
finalize:: Union{Function, Nothing} }[
745
- compile_affect_fn (cb, sys, dvs, ps, kwargs)
746
- for cb in cbs]
753
+ compile_affect_fn (cb, sys, dvs, ps, kwargs)
754
+ for cb in cbs]
747
755
748
756
cond = function (out, u, t, integ)
749
757
rf_ip (out, u, parameter_values (integ), t)
@@ -789,31 +797,37 @@ function generate_vector_rootfinding_callback(
789
797
end
790
798
initialize = nothing
791
799
if has_index_cache (sys) && (ic = get_index_cache (sys)) != = nothing
792
- initialize = handle_optional_setup_fn (map ((cb, fn) -> begin
793
- if (save_idxs = get (ic. callback_to_clocks, cb, nothing )) != = nothing
794
- let save_idxs = save_idxs
795
- if ! isnothing (fn. initialize)
796
- (i) -> begin
797
- fn. initialize (i)
798
- for idx in save_idxs
799
- SciMLBase. save_discretes! (i, idx)
800
- end
801
- end
802
- else
803
- (i) -> begin
804
- for idx in save_idxs
805
- SciMLBase. save_discretes! (i, idx)
800
+ initialize = handle_optional_setup_fn (
801
+ map (
802
+ (cb, fn) -> begin
803
+ if (save_idxs = get (ic. callback_to_clocks, cb, nothing )) != = nothing
804
+ let save_idxs = save_idxs
805
+ if ! isnothing (fn. initialize)
806
+ (i) -> begin
807
+ fn. initialize (i)
808
+ for idx in save_idxs
809
+ SciMLBase. save_discretes! (i, idx)
810
+ end
811
+ end
812
+ else
813
+ (i) -> begin
814
+ for idx in save_idxs
815
+ SciMLBase. save_discretes! (i, idx)
816
+ end
817
+ end
806
818
end
807
819
end
820
+ else
821
+ fn. initialize
808
822
end
809
- end
810
- else
811
- fn. initialize
812
- end
813
- end , cbs, affect_functions), SciMLBase. INITIALIZE_DEFAULT)
814
-
823
+ end ,
824
+ cbs,
825
+ affect_functions),
826
+ SciMLBase. INITIALIZE_DEFAULT)
827
+
815
828
else
816
- initialize = handle_optional_setup_fn (map (fn -> fn. initialize, affect_functions), SciMLBase. INITIALIZE_DEFAULT)
829
+ initialize = handle_optional_setup_fn (
830
+ map (fn -> fn. initialize, affect_functions), SciMLBase. INITIALIZE_DEFAULT)
817
831
end
818
832
819
833
finalize = handle_optional_setup_fn (
@@ -833,10 +847,13 @@ function compile_affect_fn(cb, sys::AbstractODESystem, dvs, ps, kwargs)
833
847
if eq_neg_aff === eq_aff
834
848
affect_neg = affect
835
849
else
836
- affect_neg = _compile_optional_affect (NULL_AFFECT, eq_neg_aff, cb, sys, dvs, ps; kwargs... )
850
+ affect_neg = _compile_optional_affect (
851
+ NULL_AFFECT, eq_neg_aff, cb, sys, dvs, ps; kwargs... )
837
852
end
838
- initialize = _compile_optional_affect (NULL_AFFECT, initialize_affects (cb), cb, sys, dvs, ps; kwargs... )
839
- finalize = _compile_optional_affect (NULL_AFFECT, finalize_affects (cb), cb, sys, dvs, ps; kwargs... )
853
+ initialize = _compile_optional_affect (
854
+ NULL_AFFECT, initialize_affects (cb), cb, sys, dvs, ps; kwargs... )
855
+ finalize = _compile_optional_affect (
856
+ NULL_AFFECT, finalize_affects (cb), cb, sys, dvs, ps; kwargs... )
840
857
(affect = affect, affect_neg = affect_neg, initialize = initialize, finalize = finalize)
841
858
end
842
859
@@ -928,7 +945,6 @@ function compile_affect(affect::FunctionalAffect, cb, sys, dvs, ps; kwargs...)
928
945
compile_user_affect (affect, cb, sys, dvs, ps; kwargs... )
929
946
end
930
947
931
-
932
948
function _compile_optional_affect (default, aff, cb, sys, dvs, ps; kwargs... )
933
949
if isnothing (aff) || aff == default
934
950
return nothing
@@ -942,13 +958,15 @@ function generate_timed_callback(cb, sys, dvs, ps; postprocess_affect_expr! = no
942
958
as = compile_affect (affects (cb), cb, sys, dvs, ps; expression = Val{false },
943
959
postprocess_affect_expr!, kwargs... )
944
960
945
- user_initfun = _compile_optional_affect (NULL_AFFECT, initialize_affects (cb), cb, sys, dvs, ps; kwargs... )
946
- user_finfun = _compile_optional_affect (NULL_AFFECT, finalize_affects (cb), cb, sys, dvs, ps; kwargs... )
961
+ user_initfun = _compile_optional_affect (
962
+ NULL_AFFECT, initialize_affects (cb), cb, sys, dvs, ps; kwargs... )
963
+ user_finfun = _compile_optional_affect (
964
+ NULL_AFFECT, finalize_affects (cb), cb, sys, dvs, ps; kwargs... )
947
965
if has_index_cache (sys) && (ic = get_index_cache (sys)) != = nothing &&
948
966
(save_idxs = get (ic. callback_to_clocks, cb, nothing )) != = nothing
949
- initfn = let
967
+ initfn = let
950
968
save_idxs = save_idxs
951
- initfun= user_initfun
969
+ initfun = user_initfun
952
970
function (cb, u, t, integrator)
953
971
if ! isnothing (initfun)
954
972
initfun (integrator)
@@ -959,17 +977,21 @@ function generate_timed_callback(cb, sys, dvs, ps; postprocess_affect_expr! = no
959
977
end
960
978
end
961
979
else
962
- initfn = isnothing (user_initfun) ? SciMLBase. INITIALIZE_DEFAULT : (_,_,_,i) -> user_initfun (i)
980
+ initfn = isnothing (user_initfun) ? SciMLBase. INITIALIZE_DEFAULT :
981
+ (_, _, _, i) -> user_initfun (i)
963
982
end
964
- finfun = isnothing (user_finfun) ? SciMLBase. FINALIZE_DEFAULT : (_,_,_,i) -> user_finfun (i)
983
+ finfun = isnothing (user_finfun) ? SciMLBase. FINALIZE_DEFAULT :
984
+ (_, _, _, i) -> user_finfun (i)
965
985
if cond isa AbstractVector
966
986
# Preset Time
967
987
return PresetTimeCallback (
968
- cond, as; initialize = initfn, finalize= finfun, initializealg = reinitialization_alg (cb))
988
+ cond, as; initialize = initfn, finalize = finfun,
989
+ initializealg = reinitialization_alg (cb))
969
990
else
970
991
# Periodic
971
992
return PeriodicCallback (
972
- as, cond; initialize = initfn, finalize= finfun, initializealg = reinitialization_alg (cb))
993
+ as, cond; initialize = initfn, finalize = finfun,
994
+ initializealg = reinitialization_alg (cb))
973
995
end
974
996
end
975
997
@@ -983,8 +1005,10 @@ function generate_discrete_callback(cb, sys, dvs, ps; postprocess_affect_expr! =
983
1005
as = compile_affect (affects (cb), cb, sys, dvs, ps; expression = Val{false },
984
1006
postprocess_affect_expr!, kwargs... )
985
1007
986
- user_initfun = _compile_optional_affect (NULL_AFFECT, initialize_affects (cb), cb, sys, dvs, ps; kwargs... )
987
- user_finfun = _compile_optional_affect (NULL_AFFECT, finalize_affects (cb), cb, sys, dvs, ps; kwargs... )
1008
+ user_initfun = _compile_optional_affect (
1009
+ NULL_AFFECT, initialize_affects (cb), cb, sys, dvs, ps; kwargs... )
1010
+ user_finfun = _compile_optional_affect (
1011
+ NULL_AFFECT, finalize_affects (cb), cb, sys, dvs, ps; kwargs... )
988
1012
if has_index_cache (sys) && (ic = get_index_cache (sys)) != = nothing &&
989
1013
(save_idxs = get (ic. callback_to_clocks, cb, nothing )) != = nothing
990
1014
initfn = let save_idxs = save_idxs, initfun = user_initfun
@@ -998,11 +1022,14 @@ function generate_discrete_callback(cb, sys, dvs, ps; postprocess_affect_expr! =
998
1022
end
999
1023
end
1000
1024
else
1001
- initfn = isnothing (user_initfun) ? SciMLBase. INITIALIZE_DEFAULT : (_,_,_,i) -> user_initfun (i)
1025
+ initfn = isnothing (user_initfun) ? SciMLBase. INITIALIZE_DEFAULT :
1026
+ (_, _, _, i) -> user_initfun (i)
1002
1027
end
1003
- finfun = isnothing (user_finfun) ? SciMLBase. FINALIZE_DEFAULT : (_,_,_,i) -> user_finfun (i)
1028
+ finfun = isnothing (user_finfun) ? SciMLBase. FINALIZE_DEFAULT :
1029
+ (_, _, _, i) -> user_finfun (i)
1004
1030
return DiscreteCallback (
1005
- c, as; initialize = initfn, finalize = finfun, initializealg = reinitialization_alg (cb))
1031
+ c, as; initialize = initfn, finalize = finfun,
1032
+ initializealg = reinitialization_alg (cb))
1006
1033
end
1007
1034
end
1008
1035
0 commit comments