Skip to content

Commit bc6d339

Browse files
authored
Merge pull request #916 from SciML/formatting
[WIP] Formating
2 parents d9701d9 + 0cadeea commit bc6d339

28 files changed

+900
-776
lines changed

docs/make.jl

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -31,17 +31,17 @@ include("pages.jl")
3131
# pages = pages)
3232

3333
makedocs(sitename = "Catalyst.jl",
34-
authors = "Samuel Isaacson",
35-
format = Documenter.HTML(; analytics = "UA-90474609-3",
36-
prettyurls = (get(ENV, "CI", nothing) == "true"),
37-
assets = ["assets/favicon.ico"],
38-
canonical = "https://docs.sciml.ai/Catalyst/stable/"),
39-
modules = [Catalyst, ModelingToolkit],
40-
doctest = false,
41-
clean = true,
42-
pages = pages,
43-
pagesonly = true,
44-
warnonly = [:missing_docs])
34+
authors = "Samuel Isaacson",
35+
format = Documenter.HTML(; analytics = "UA-90474609-3",
36+
prettyurls = (get(ENV, "CI", nothing) == "true"),
37+
assets = ["assets/favicon.ico"],
38+
canonical = "https://docs.sciml.ai/Catalyst/stable/"),
39+
modules = [Catalyst, ModelingToolkit],
40+
doctest = false,
41+
clean = true,
42+
pages = pages,
43+
pagesonly = true,
44+
warnonly = [:missing_docs])
4545

4646
deploydocs(repo = "github.com/SciML/Catalyst.jl.git";
47-
push_preview = true)
47+
push_preview = true)

docs/pages.jl

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,21 +18,20 @@ pages = Any[
1818
"Model creation examples" => Any[
1919
"model_creation/examples/basic_CRN_library.md",
2020
"model_creation/examples/programmatic_generative_linear_pathway.md",
21-
"model_creation/examples/hodgkin_huxley_equation.md",
22-
#"model_creation/examples/smoluchowski_coagulation_equation.md"
21+
"model_creation/examples/hodgkin_huxley_equation.md" #"model_creation/examples/smoluchowski_coagulation_equation.md"
2322
]
2423
],
2524
"Model simulation" => Any[
2625
"model_simulation/simulation_introduction.md",
2726
"model_simulation/simulation_plotting.md",
2827
"model_simulation/simulation_structure_interfacing.md",
2928
"model_simulation/ensemble_simulations.md",
30-
"model_simulation/ode_simulation_performance.md",
29+
"model_simulation/ode_simulation_performance.md"
3130
],
3231
"Steady state analysis" => Any[
3332
"steady_state_functionality/homotopy_continuation.md",
3433
"steady_state_functionality/nonlinear_solve.md",
35-
"steady_state_functionality/steady_state_stability_computation.md",
34+
"steady_state_functionality/steady_state_stability_computation.md",
3635
"steady_state_functionality/bifurcation_diagrams.md",
3736
"steady_state_functionality/dynamical_systems.md"
3837
],

ext/CatalystBifurcationKitExtension.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,4 @@ import BifurcationKit as BK
77
# Creates and exports hc_steady_states function.
88
include("CatalystBifurcationKitExtension/bifurcation_kit_extension.jl")
99

10-
end
10+
end

ext/CatalystBifurcationKitExtension/bifurcation_kit_extension.jl

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,30 @@
22

33
# Creates a BifurcationProblem, using a ReactionSystem as an input.
44
function BK.BifurcationProblem(rs::ReactionSystem, u0_bif, ps, bif_par, args...;
5-
plot_var=nothing, record_from_solution=BK.record_sol_default, jac=true, u0=[], kwargs...)
6-
if !isautonomous(rs)
5+
plot_var = nothing, record_from_solution = BK.record_sol_default, jac = true, u0 = [], kwargs...)
6+
if !isautonomous(rs)
77
error("Attempting to create a `BifurcationProblem` for a non-autonomous system (e.g. where some rate depend on $(rs.iv)). This is not possible.")
88
end
99

1010
# Converts symbols to symbolics.
1111
(bif_par isa Symbol) && (bif_par = ModelingToolkit.get_var_to_name(rs)[bif_par])
1212
(plot_var isa Symbol) && (plot_var = ModelingToolkit.get_var_to_name(rs)[plot_var])
13-
((u0_bif isa Vector{<:Pair{Symbol,<:Any}}) || (u0_bif isa Dict{Symbol, <:Any})) && (u0_bif = symmap_to_varmap(rs, u0_bif))
14-
((ps isa Vector{<:Pair{Symbol,<:Any}}) || (ps isa Dict{Symbol, <:Any})) && (ps = symmap_to_varmap(rs, ps))
15-
((u0 isa Vector{<:Pair{Symbol,<:Any}}) || (u0 isa Dict{Symbol, <:Any})) && (u0 = symmap_to_varmap(rs, u0))
13+
if (u0_bif isa Vector{<:Pair{Symbol, <:Any}}) || (u0_bif isa Dict{Symbol, <:Any})
14+
u0_bif = symmap_to_varmap(rs, u0_bif)
15+
end
16+
if (ps isa Vector{<:Pair{Symbol, <:Any}}) || (ps isa Dict{Symbol, <:Any})
17+
ps = symmap_to_varmap(rs, ps)
18+
end
19+
if (u0 isa Vector{<:Pair{Symbol, <:Any}}) || (u0 isa Dict{Symbol, <:Any})
20+
u0 = symmap_to_varmap(rs, u0)
21+
end
1622

1723
# Creates NonlinearSystem.
1824
Catalyst.conservationlaw_errorcheck(rs, vcat(ps, u0))
19-
nsys = complete(convert(NonlinearSystem, rs; remove_conserved=true, defaults=Dict(u0)))
25+
nsys = convert(NonlinearSystem, rs; remove_conserved = true, defaults = Dict(u0))
26+
nsys = complete(nsys)
2027

2128
# Makes BifurcationProblem (this call goes through the ModelingToolkit-based BifurcationKit extension).
22-
return BK.BifurcationProblem(nsys, u0_bif, ps, bif_par, args...; plot_var=plot_var,
23-
record_from_solution=record_from_solution, jac=jac, kwargs...)
24-
end
29+
return BK.BifurcationProblem(nsys, u0_bif, ps, bif_par, args...; plot_var,
30+
record_from_solution, jac, kwargs...)
31+
end

ext/CatalystHomotopyContinuationExtension.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,4 @@ import Symbolics: unwrap, wrap, Rewriters, symtype, issym, istree
1111
# Creates and exports hc_steady_states function.
1212
include("CatalystHomotopyContinuationExtension/homotopy_continuation_extension.jl")
1313

14-
end
14+
end

ext/CatalystHomotopyContinuationExtension/homotopy_continuation_extension.jl

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,9 @@ Notes:
3535
- Homotopy-based steady state finding only works when all rates are rational polynomials (e.g. constant, linear, mm, or hill functions).
3636
```
3737
"""
38-
function Catalyst.hc_steady_states(rs::ReactionSystem, ps; filter_negative=true, neg_thres=-1e-20, u0=[], kwargs...)
39-
if !isautonomous(rs)
38+
function Catalyst.hc_steady_states(rs::ReactionSystem, ps; filter_negative = true,
39+
neg_thres = -1e-20, u0 = [], kwargs...)
40+
if !isautonomous(rs)
4041
error("Attempting to compute steady state for a non-autonomous system (e.g. where some rate depend on $(rs.iv)). This is not possible.")
4142
end
4243
ss_poly = steady_state_polynomial(rs, ps, u0)
@@ -49,10 +50,11 @@ end
4950
function steady_state_polynomial(rs::ReactionSystem, ps, u0)
5051
rs = Catalyst.expand_registered_functions(rs)
5152
ns = complete(convert(NonlinearSystem, rs; remove_conserved = true))
52-
pre_varmap = [symmap_to_varmap(rs,u0)..., symmap_to_varmap(rs,ps)...]
53+
pre_varmap = [symmap_to_varmap(rs, u0)..., symmap_to_varmap(rs, ps)...]
5354
Catalyst.conservationlaw_errorcheck(rs, pre_varmap)
54-
p_vals = ModelingToolkit.varmap_to_vars(pre_varmap, parameters(ns); defaults = ModelingToolkit.defaults(ns))
55-
p_dict = Dict(parameters(ns) .=> p_vals)
55+
p_vals = ModelingToolkit.varmap_to_vars(pre_varmap, parameters(ns);
56+
defaults = ModelingToolkit.defaults(ns))
57+
p_dict = Dict(parameters(ns) .=> p_vals)
5658
eqs_pars_funcs = vcat(equations(ns), conservedequations(rs))
5759
eqs = map(eq -> substitute(eq.rhs - eq.lhs, p_dict), eqs_pars_funcs)
5860
eqs_intexp = make_int_exps.(eqs)
@@ -61,12 +63,14 @@ function steady_state_polynomial(rs::ReactionSystem, ps, u0)
6163
end
6264

6365
# Parses and expression and return a version where any exponents that are Float64 (but an int, like 2.0) are turned into Int64s.
64-
make_int_exps(expr) = wrap(Rewriters.Postwalk(Rewriters.PassThrough(___make_int_exps))(unwrap(expr))).val
66+
function make_int_exps(expr)
67+
wrap(Rewriters.Postwalk(Rewriters.PassThrough(___make_int_exps))(unwrap(expr))).val
68+
end
6569
function ___make_int_exps(expr)
6670
!istree(expr) && return expr
67-
if (operation(expr) == ^)
71+
if (operation(expr) == ^)
6872
if isinteger(arguments(expr)[2])
69-
return arguments(expr)[1] ^ Int64(arguments(expr)[2])
73+
return arguments(expr)[1]^Int64(arguments(expr)[2])
7074
else
7175
error("An non integer ($(arguments(expr)[2])) was found as a variable exponent. Non-integer exponents are not supported for homotopy continuation based steady state finding.")
7276
end
@@ -95,7 +99,7 @@ function reorder_sols!(sols, ss_poly, rs::ReactionSystem)
9599
end
96100

97101
# Filters away solutions with negative species concentrations (and for neg_thres < val < 0.0, sets val=0.0).
98-
function filter_negative_f(sols; neg_thres=-1e-20)
102+
function filter_negative_f(sols; neg_thres = -1e-20)
99103
for sol in sols, idx in 1:length(sol)
100104
(neg_thres < sol[idx] < 0) && (sol[idx] = 0)
101105
end
@@ -104,9 +108,13 @@ end
104108

105109
# Sometimes (when polynomials are created from coupled CRN/DAEs), the steady state polynomial have the wrong type.
106110
# This converts it to the correct type, which homotopy continuation can handle.
107-
const WRONG_POLY_TYPE = Vector{DynamicPolynomials.Polynomial{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, DynamicPolynomials.Graded{DynamicPolynomials.LexOrder}}}
108-
const CORRECT_POLY_TYPE = Vector{DynamicPolynomials.Polynomial{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, DynamicPolynomials.Graded{DynamicPolynomials.LexOrder}, Float64}}
111+
const WRONG_POLY_TYPE = Vector{DynamicPolynomials.Polynomial{
112+
DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder},
113+
DynamicPolynomials.Graded{DynamicPolynomials.LexOrder}}}
114+
const CORRECT_POLY_TYPE = Vector{DynamicPolynomials.Polynomial{
115+
DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder},
116+
DynamicPolynomials.Graded{DynamicPolynomials.LexOrder}, Float64}}
109117
function poly_type_convert(ss_poly)
110118
(typeof(ss_poly) == WRONG_POLY_TYPE) && return convert(CORRECT_POLY_TYPE, ss_poly)
111119
return ss_poly
112-
end
120+
end

ext/CatalystStructuralIdentifiabilityExtension.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,4 @@ import StructuralIdentifiability as SI
77
# Creates and exports hc_steady_states function.
88
include("CatalystStructuralIdentifiabilityExtension/structural_identifiability_extension.jl")
99

10-
end
10+
end

ext/CatalystStructuralIdentifiabilityExtension/structural_identifiability_extension.jl

Lines changed: 36 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,13 @@ Notes:
2626
- This function is part of the StructuralIdentifiability.jl extension. StructuralIdentifiability.jl must be imported to access it.
2727
- `measured_quantities` and `known_p` input may also be symbolic (e.g. measured_quantities = [rs.X])
2828
"""
29-
function Catalyst.make_si_ode(rs::ReactionSystem; measured_quantities = [], known_p = [],
30-
ignore_no_measured_warn = false, remove_conserved = true)
29+
function Catalyst.make_si_ode(rs::ReactionSystem; measured_quantities = [], known_p = [],
30+
ignore_no_measured_warn = false, remove_conserved = true)
3131
# Creates a MTK ODESystem, and a list of measured quantities (there are equations).
3232
# Gives these to SI to create an SI ode model of its preferred form.
3333
osys, conseqs, _ = make_osys(rs; remove_conserved)
34-
measured_quantities = make_measured_quantities(rs, measured_quantities, known_p, conseqs; ignore_no_measured_warn)
34+
measured_quantities = make_measured_quantities(rs, measured_quantities, known_p,
35+
conseqs; ignore_no_measured_warn)
3536
return SI.mtk_to_si(osys, measured_quantities)[1]
3637
end
3738

@@ -62,16 +63,18 @@ Notes:
6263
- This function is part of the StructuralIdentifiability.jl extension. StructuralIdentifiability.jl must be imported to access it.
6364
- `measured_quantities` and `known_p` input may also be symbolic (e.g. measured_quantities = [rs.X])
6465
"""
65-
function SI.assess_local_identifiability(rs::ReactionSystem, args...; measured_quantities = [],
66-
known_p = [], funcs_to_check = Vector(), remove_conserved = true,
67-
ignore_no_measured_warn=false, kwargs...)
66+
function SI.assess_local_identifiability(rs::ReactionSystem, args...;
67+
measured_quantities = [], known_p = [], funcs_to_check = Vector(),
68+
remove_conserved = true, ignore_no_measured_warn = false, kwargs...)
6869
# Creates a ODESystem, list of measured quantities, and functions to check, of SI's preferred form.
6970
osys, conseqs, vars = make_osys(rs; remove_conserved)
70-
measured_quantities = make_measured_quantities(rs, measured_quantities, known_p, conseqs; ignore_no_measured_warn)
71+
measured_quantities = make_measured_quantities(rs, measured_quantities, known_p,
72+
conseqs; ignore_no_measured_warn)
7173
funcs_to_check = make_ftc(funcs_to_check, conseqs, vars)
7274

7375
# Computes identifiability and converts it to a easy to read form.
74-
out = SI.assess_local_identifiability(osys, args...; measured_quantities, funcs_to_check, kwargs...)
76+
out = SI.assess_local_identifiability(sys, args...; measured_quantities,
77+
funcs_to_check, kwargs...)
7578
return make_output(out, funcs_to_check, reverse.(conseqs))
7679
end
7780

@@ -100,16 +103,18 @@ Notes:
100103
- This function is part of the StructuralIdentifiability.jl extension. StructuralIdentifiability.jl must be imported to access it.
101104
- `measured_quantities` and `known_p` input may also be symbolic (e.g. measured_quantities = [rs.X])
102105
"""
103-
function SI.assess_identifiability(rs::ReactionSystem, args...; measured_quantities = [], known_p = [],
104-
funcs_to_check = Vector(), remove_conserved = true,
105-
ignore_no_measured_warn=false, kwargs...)
106+
function SI.assess_identifiability(rs::ReactionSystem, args...;
107+
measured_quantities = [], known_p = [], funcs_to_check = Vector(),
108+
remove_conserved = true, ignore_no_measured_warn = false, kwargs...)
106109
# Creates a ODESystem, list of measured quantities, and functions to check, of SI's preferred form.
107110
osys, conseqs, vars = make_osys(rs; remove_conserved)
108-
measured_quantities = make_measured_quantities(rs, measured_quantities, known_p, conseqs; ignore_no_measured_warn)
111+
measured_quantities = make_measured_quantities(rs, measured_quantities, known_p,
112+
conseqs; ignore_no_measured_warn)
109113
funcs_to_check = make_ftc(funcs_to_check, conseqs, vars)
110114

111115
# Computes identifiability and converts it to a easy to read form.
112-
out = SI.assess_identifiability(osys, args...; measured_quantities, funcs_to_check, kwargs...)
116+
out = SI.assess_identifiability(osys, args...; measured_quantities,
117+
funcs_to_check, kwargs...)
113118
return make_output(out, funcs_to_check, reverse.(conseqs))
114119
end
115120

@@ -138,12 +143,13 @@ Notes:
138143
- This function is part of the StructuralIdentifiability.jl extension. StructuralIdentifiability.jl must be imported to access it.
139144
- `measured_quantities` and `known_p` input may also be symbolic (e.g. measured_quantities = [rs.X])
140145
"""
141-
function SI.find_identifiable_functions(rs::ReactionSystem, args...; measured_quantities = [],
142-
known_p = [], remove_conserved = true, ignore_no_measured_warn=false,
143-
kwargs...)
146+
function SI.find_identifiable_functions(rs::ReactionSystem, args...;
147+
measured_quantities = [], known_p = [], remove_conserved = true,
148+
ignore_no_measured_warn = false, kwargs...)
144149
# Creates a ODESystem, and list of measured quantities, of SI's preferred form.
145150
osys, conseqs = make_osys(rs; remove_conserved)
146-
measured_quantities = make_measured_quantities(rs, measured_quantities, known_p, conseqs; ignore_no_measured_warn)
151+
measured_quantities = make_measured_quantities(rs, measured_quantities, known_p,
152+
conseqs; ignore_no_measured_warn)
147153

148154
# Computes identifiable functions and converts it to a easy to read form.
149155
out = SI.find_identifiable_functions(osys, args...; measured_quantities, kwargs...)
@@ -154,10 +160,12 @@ end
154160

155161
# From a reaction system, creates the corresponding MTK-style ODESystem for SI application
156162
# Also compute the, later needed, conservation law equations and list of system symbols (unknowns and parameters).
157-
function make_osys(rs::ReactionSystem; remove_conserved=true)
163+
function make_osys(rs::ReactionSystem; remove_conserved = true)
158164
# Creates the ODESystem corresponding to the ReactionSystem (expanding functions and flattening it).
159165
# Creates a list of the systems all symbols (unknowns and parameters).
160-
ModelingToolkit.iscomplete(rs) || error("Identifiability should only be computed for complete systems. A ReactionSystem can be marked as complete using the `complete` function.")
166+
if !ModelingToolkit.iscomplete(rs)
167+
error("Identifiability should only be computed for complete systems. A ReactionSystem can be marked as complete using the `complete` function.")
168+
end
161169
rs = complete(Catalyst.expand_registered_functions(flatten(rs)))
162170
osys = complete(convert(ODESystem, rs; remove_conserved))
163171
vars = [unknowns(rs); parameters(rs)]
@@ -177,10 +185,11 @@ end
177185
# Creates a list of measured quantities of a form that SI can read.
178186
# Each measured quantity must have a form like:
179187
# `obs_var ~ X` # (Here, `obs_var` is a variable, and X is whatever we can measure).
180-
function make_measured_quantities(rs::ReactionSystem, measured_quantities::Vector{T}, known_p::Vector{S},
181-
conseqs; ignore_no_measured_warn=false) where {T,S}
188+
function make_measured_quantities(
189+
rs::ReactionSystem, measured_quantities::Vector{T}, known_p::Vector{S},
190+
conseqs; ignore_no_measured_warn = false) where {T, S}
182191
# Warning if the user didn't give any measured quantities.
183-
if ignore_no_measured_warn || isempty(measured_quantities)
192+
if ignore_no_measured_warn || isempty(measured_quantities)
184193
@warn "No measured quantity provided to the `measured_quantities` argument, any further identifiability analysis will likely fail. You can disable this warning by setting `ignore_no_measured_warn=true`."
185194
end
186195

@@ -192,7 +201,8 @@ function make_measured_quantities(rs::ReactionSystem, measured_quantities::Vecto
192201
# Creates one internal observation variable for each measured quantity (`___internal_observables`).
193202
# Creates a vector of equations, setting each measured quantity equal to one observation variable.
194203
@variables t (___internal_observables(Catalyst.get_iv(rs)))[1:length(mqs)]
195-
return Equation[(q isa Equation) ? q : (___internal_observables[i] ~ q) for (i,q) in enumerate(mqs)]
204+
return Equation[(q isa Equation) ? q : (___internal_observables[i] ~ q)
205+
for (i, q) in enumerate(mqs)]
196206
end
197207

198208
# Creates the functions that we wish to check for identifiability.
@@ -211,9 +221,9 @@ end
211221
function make_output(out, funcs_to_check, conseqs)
212222
funcs_to_check = vector_subs(funcs_to_check, conseqs)
213223
out = Dict(zip(vector_subs(keys(out), conseqs), values(out)))
214-
sortdict = Dict(ftc => i for (i,ftc) in enumerate(funcs_to_check))
215-
return sort(out; by = x -> sortdict[x])
224+
sortdict = Dict(ftc => i for (i, ftc) in enumerate(funcs_to_check))
225+
return sort(out; by = x -> sortdict[x])
216226
end
217227

218228
# For a vector of expressions and a conservation law, substitutes the law into every equation.
219-
vector_subs(eqs, subs) = [substitute(eq, subs) for eq in eqs]
229+
vector_subs(eqs, subs) = [substitute(eq, subs) for eq in eqs]

src/Catalyst.jl

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ using DocStringExtensions
77
using SparseArrays, DiffEqBase, Reexport, Setfield
88
using LaTeXStrings, Latexify, Requires
99
using LinearAlgebra, Combinatorics
10-
using JumpProcesses: JumpProcesses, JumpProblem,
10+
using JumpProcesses: JumpProcesses, JumpProblem,
1111
MassActionJump, ConstantRateJump, VariableRateJump,
1212
SpatialMassActionJump
1313

@@ -16,7 +16,6 @@ using ModelingToolkit
1616
const MT = ModelingToolkit
1717
using DynamicQuantities#, Unitful # Having Unitful here as well currently gives an error.
1818

19-
2019
@reexport using ModelingToolkit
2120
using Symbolics
2221
using LinearAlgebra
@@ -81,7 +80,7 @@ const CONSERVED_CONSTANT_SYMBOL = :Γ
8180
# Declares symbols which may neither be used as parameters nor unknowns.
8281
const forbidden_symbols_skip = Set([:ℯ, :pi, , :t, :∅])
8382
const forbidden_symbols_error = union(Set([:im, :nothing, CONSERVED_CONSTANT_SYMBOL]),
84-
forbidden_symbols_skip)
83+
forbidden_symbols_skip)
8584
const forbidden_variables_error = let
8685
fvars = copy(forbidden_symbols_error)
8786
delete!(fvars, :t)
@@ -183,7 +182,6 @@ include("spatial_reaction_systems/utility.jl")
183182
include("spatial_reaction_systems/spatial_ODE_systems.jl")
184183
include("spatial_reaction_systems/lattice_jump_systems.jl")
185184

186-
187185
### ReactionSystem Serialisation ###
188186
# Has to be at the end (because it uses records of all metadata declared by Catalyst).
189187
include("reactionsystem_serialisation/serialisation_support.jl")

0 commit comments

Comments
 (0)