Skip to content

Commit

Permalink
Merge pull request #980 from isaacsas/history_migration_tweaks
Browse files Browse the repository at this point in the history
doc updates
  • Loading branch information
isaacsas committed Jul 11, 2024
2 parents a515321 + 91e2bc2 commit 6d3c8b5
Show file tree
Hide file tree
Showing 4 changed files with 198 additions and 118 deletions.
271 changes: 164 additions & 107 deletions HISTORY.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,44 @@

## Catalyst 14.0

#### Breaking changes
Catalyst v14 was prompted by the (breaking) release of ModelingToolkit v9, which introduced several breaking changes to Catalyst. A summary of these (and how to handle them) can be found [here](https://docs.sciml.ai/Catalyst/stable/v14_migration_guide/). These are briefly summarised in the following bullet points:
- `ReactionSystem`s must now be marked *complete* before they are exposed to most forms of simulation and analysis. With the exception of `ReactionSystem`s created through the `@reaction_network` macro, all `ReactionSystem`s are *not* marked complete upon construction. The `complete` function can be used to mark `ReactionSystem`s as complete. To construct a `ReactionSystem` that is not marked complete via the DSL the new `@network_component` macro can be used.
- The `states` function has been replaced with `unknowns`. The `get_states` function has been replaced with `get_unknowns`.
- Support for most units (with the exception of `s`, `m`, `kg`, `A`, `K`, `mol`, and `cd`) has currently been dropped by ModelingToolkit, and hence they are unavailable via Catalyst too. Its is expected that eventually support for relevant chemical units such as molar will return to ModelingToolkit (and should then immediately work in Catalyst too).
- Problem parameter values are now accessed through `prob.ps[p]` (rather than `prob[p]`).
- A significant bug prevents the safe application of the `remake` function on problems for which `remove_conserved = true` was used when updating the values of initial conditions. Instead, the values of each conserved constant must be directly specified.
- The `reactionparams`, `numreactionparams`, and `reactionparamsmap` functions have been deprecated and removed.
- To be more consistent with ModelingToolkit's immutability requirement for systems, we have removed API functions that mutate `ReactionSystem`s such as `addparam!`, `addreaction!`, `addspecies`, `@add_reactions`, and `merge!`. Please use `ModelingToolkit.extend` and `ModelingToolkit.compose` to generate new merged and/or composed `ReactionSystem`s from multiple component systems.
#### Breaking changes
Catalyst v14 was prompted by the (breaking) release of ModelingToolkit v9, which
introduced several breaking changes to Catalyst. A summary of these (and how to
handle them) can be found
[here](https://docs.sciml.ai/Catalyst/stable/v14_migration_guide/). These are
briefly summarised in the following bullet points:
- `ReactionSystem`s must now be marked *complete* before they are exposed to
most forms of simulation and analysis. With the exception of `ReactionSystem`s
created through the `@reaction_network` macro, all `ReactionSystem`s are *not*
marked complete upon construction. The `complete` function can be used to mark
`ReactionSystem`s as complete. To construct a `ReactionSystem` that is not
marked complete via the DSL the new `@network_component` macro can be used.
- The `states` function has been replaced with `unknowns`. The `get_states`
function has been replaced with `get_unknowns`.
- Support for most units (with the exception of `s`, `m`, `kg`, `A`, `K`, `mol`,
and `cd`) has currently been dropped by ModelingToolkit, and hence they are
unavailable via Catalyst too. Its is expected that eventually support for
relevant chemical units such as molar will return to ModelingToolkit (and
should then immediately work in Catalyst too).
- Problem parameter values are now accessed through `prob.ps[p]` (rather than
`prob[p]`).
- ModelingToolkit currently does not support the safe application of the
`remake` function, or safe direct mutation, for problems for which
`remove_conserved = true` was used when updating the values of initial
conditions. Instead, the values of each conserved constant must be directly
specified.
- The `reactionparams`, `numreactionparams`, and `reactionparamsmap` functions
have been deprecated and removed.
- To be more consistent with ModelingToolkit's immutability requirement for
systems, we have removed API functions that mutate `ReactionSystem`s such as
`addparam!`, `addreaction!`, `addspecies`, `@add_reactions`, and `merge!`.
Please use `ModelingToolkit.extend` and `ModelingToolkit.compose` to generate
new merged and/or composed `ReactionSystem`s from multiple component systems.

#### General changes
- The `default_t()` and `default_time_deriv()` functions are now the preferred approaches for creating the default time independent variable and its differential. i.e.
- The `default_t()` and `default_time_deriv()` functions are now the preferred
approaches for creating the default time independent variable and its
differential. i.e.
```julia
# do
t = default_t()
Expand All @@ -25,110 +51,141 @@ Catalyst v14 was prompted by the (breaking) release of ModelingToolkit v9, which
@variables t
@species A(t)
- It is now possible to add metadata to individual reactions, e.g. using:
```julia
rn = @reaction_network begin
@parameters η
k, 2X --> X2, [description="Dimerisation"]
end
getdescription(rn)
```
a more detailed description can be found [here](https://docs.sciml.ai/Catalyst/dev/model_creation/dsl_advanced/#dsl_advanced_options_reaction_metadata).
- `SDEProblem` no longer takes the `noise_scaling` argument. Noise scaling is now handled through the `noise_scaling` metadata (described in more detail [here](https://docs.sciml.ai/Catalyst/stable/model_simulation/simulation_introduction/#simulation_intro_SDEs_noise_saling))
- Fields of the internal `Reaction` structure have been changed. `ReactionSystems`s saved using `serialize` on previous Catalyst versions cannot be loaded using this (or later) versions.
- A new function, `save_reactionsystem`, which permits the writing of `ReactionSystem` models to files, has been created. A thorough description of this function can be found [here](https://docs.sciml.ai/Catalyst/stable/model_creation/model_file_loading_and_export/#Saving-Catalyst-models-to,-and-loading-them-from,-Julia-files)
- Update how compounds are created. E.g. use
```julia
@variables t C(t) O(t)
@compound CO2 ~ C + 2O
```
to create a compound species `CO2` that consists of `C` and 2 `O`.
- Added documentation for chemistry-related functionality (compound creation and reaction balancing).
```julia
rn = @reaction_network begin
@parameters η
k, 2X --> X2, [description="Dimerisation"]
end
getdescription(rn)
```
a more detailed description can be found [here](https://docs.sciml.ai/Catalyst/dev/model_creation/dsl_advanced/#dsl_advanced_options_reaction_metadata).
- `SDEProblem` no longer takes the `noise_scaling` argument. Noise scaling is
now handled through the `noise_scaling` metadata (described in more detail
[here](https://docs.sciml.ai/Catalyst/stable/model_simulation/simulation_introduction/#simulation_intro_SDEs_noise_saling))
- Fields of the internal `Reaction` structure have been changed.
`ReactionSystems`s saved using `serialize` on previous Catalyst versions
cannot be loaded using this (or later) versions.
- A new function, `save_reactionsystem`, which permits the writing of
`ReactionSystem` models to files, has been created. A thorough description of
this function can be found
[here](https://docs.sciml.ai/Catalyst/stable/model_creation/model_file_loading_and_export/#Saving-Catalyst-models-to,-and-loading-them-from,-Julia-files)
- Updated how compounds are created. E.g. use
```julia
@variables t C(t) O(t)
@compound CO2 ~ C + 2O
```
to create a compound species `CO2` that consists of `C` and two `O`.
- Added documentation for chemistry-related functionality (compound creation and
reaction balancing).
- Added function `isautonomous` to check if a `ReactionSystem` is autonomous.
- Added function `steady_state_stability` to compute stability for steady states. Example:
```julia
# Creates model.
rn = @reaction_network begin
(p,d), 0 <--> X
end
p = [:p => 1.0, :d => 0.5]
- Added function `steady_state_stability` to compute stability for steady
states. Example:
```julia
# Creates model.
rn = @reaction_network begin
(p,d), 0 <--> X
end
p = [:p => 1.0, :d => 0.5]
# Finds (the trivial) steady state, and computes stability.
steady_state = [2.0]
steady_state_stability(steady_state, rn, p)
```
Here, `steady_state_stability` takes an optional argument `tol = 10*sqrt(eps())`, which is used to check that the real part of all eigenvalues are at least `tol` away from zero. Eigenvalues within `tol` of zero indicate that stability may not be reliably calculated.
- Added a DSL option, `@combinatoric_ratelaws`, which can be used to toggle whether to use combinatorial rate laws within the DSL (this feature was already supported for programmatic modelling). Example:
```julia
# Creates model.
rn = @reaction_network begin
@combinatoric_ratelaws false
(kB,kD), 2X <--> X2
end
```
- Added a DSL option, `@observables` for [creating observables](https://docs.sciml.ai/Catalyst/stable/model_creation/dsl_advanced/#dsl_advanced_options_observables) (this feature was already supported for programmatic modelling).
- Added DSL options `@continuous_events` and `@discrete_events` to add events to a model as part of its creation (this feature was already supported for programmatic modelling). Example:
```julia
rn = @reaction_network begin
@continuous_events begin
[X ~ 1.0] => [X ~ X + 1.0]
end
d, X --> 0
end
```
- Added DSL option `@equations` to add (algebraic or differential) equations to a model as part of its creation (this feature was already supported for programmatic modelling). Example:
```julia
rn = @reaction_network begin
@equations begin
D(V) ~ 1 - V
end
(p/V,d/V), 0 <--> X
end
```
- Coupled reaction network + differential equation (or algebraic differential equation) systems can now be converted to `SDESystem`s and `NonlinearSystem`s.

#### Structural identifiability extension
- Added CatalystStructuralIdentifiabilityExtension, which permits StructuralIdentifiability.jl function to be applied directly to Catalyst systems. E.g. use
```julia
using Catalyst, StructuralIdentifiability
goodwind_oscillator = @reaction_network begin
(mmr(P,pₘ,1), dₘ), 0 <--> M
(pₑ*M,dₑ), 0 <--> E
(pₚ*E,dₚ), 0 <--> P
end
assess_identifiability(goodwind_oscillator; measured_quantities=[:M])
```
to assess (global) structural identifiability for all parameters and variables of the `goodwind_oscillator` model (under the presumption that we can measure `M` only).
- Automatically handles conservation laws for structural identifiability problems (eliminates these internally to speed up computations).
- A more detailed of how this extension works can be found [here](https://docs.sciml.ai/Catalyst/stable/inverse_problems/structural_identifiability/).
# Finds (the trivial) steady state, and computes stability.
steady_state = [2.0]
steady_state_stability(steady_state, rn, p)
```
Here, `steady_state_stability` takes an optional keyword argument `tol =
10*sqrt(eps())`, which is used to check that the real part of all eigenvalues
are at least `tol` away from zero. Eigenvalues within `tol` of zero indicate
that stability may not be reliably calculated.
- Added a DSL option, `@combinatoric_ratelaws`, which can be used to toggle
whether to use combinatorial rate laws within the DSL (this feature was
already supported for programmatic modelling). Example:
```julia
# Creates model.
rn = @reaction_network begin
@combinatoric_ratelaws false
(kB,kD), 2X <--> X2
end
```
- Added a DSL option, `@observables` for [creating
observables](https://docs.sciml.ai/Catalyst/stable/model_creation/dsl_advanced/#dsl_advanced_options_observables)
(this feature was already supported for programmatic modelling).
- Added DSL options `@continuous_events` and `@discrete_events` to add events to
a model as part of its creation (this feature was already supported for
programmatic modelling). Example:
```julia
rn = @reaction_network begin
@continuous_events begin
[X ~ 1.0] => [X ~ X + 1.0]
end
d, X --> 0
end
```
- Added DSL option `@equations` to add (algebraic or differential) equations to
a model as part of its creation (this feature was already supported for
programmatic modelling). Example:
```julia
rn = @reaction_network begin
@equations begin
D(V) ~ 1 - V
end
(p/V,d/V), 0 <--> X
end
```
couples the ODE $dV/dt = 1 - V$ to the reaction system.
- Coupled reaction networks and differential equation (or algebraic differential
equation) systems can now be converted to `SDESystem`s and `NonlinearSystem`s.

#### Bifurcation analysis extension
- Add a CatalystBifurcationKitExtension, permitting BifurcationKit's `BifurcationProblem`s to be created from Catalyst reaction networks. Example usage:
```julia
using Catalyst
wilhelm_2009_model = @reaction_network begin
k1, Y --> 2X
k2, 2X --> X + Y
k3, X + Y --> Y
k4, X --> 0
k5, 0 --> X
end
#### Structural identifiability extension
- Added CatalystStructuralIdentifiabilityExtension, which permits
StructuralIdentifiability.jl to be applied directly to Catalyst systems. E.g.
use
```julia
using Catalyst, StructuralIdentifiability
goodwind_oscillator = @reaction_network begin
(mmr(P,pₘ,1), dₘ), 0 <--> M
(pₑ*M,dₑ), 0 <--> E
(pₚ*E,dₚ), 0 <--> P
end
assess_identifiability(goodwind_oscillator; measured_quantities=[:M])
```
to assess (global) structural identifiability for all parameters and variables
of the `goodwind_oscillator` model (under the presumption that we can measure
`M` only).
- Automatically handles conservation laws for structural identifiability
problems (eliminates these internally to speed up computations).
- A more detailed of how this extension works can be found
[here](https://docs.sciml.ai/Catalyst/stable/inverse_problems/structural_identifiability/).

#### Bifurcation analysis extension
- Add a CatalystBifurcationKitExtension, permitting BifurcationKit's
`BifurcationProblem`s to be created from Catalyst reaction networks. Example
usage:
```julia
using Catalyst
wilhelm_2009_model = @reaction_network begin
k1, Y --> 2X
k2, 2X --> X + Y
k3, X + Y --> Y
k4, X --> 0
k5, 0 --> X
end
using BifurcationKit
bif_par = :k1
u_guess = [:X => 5.0, :Y => 2.0]
p_start = [:k1 => 4.0, :k2 => 1.0, :k3 => 1.0, :k4 => 1.5, :k5 => 1.25]
plot_var = :X
bprob = BifurcationProblem(wilhelm_2009_model, u_guess, p_start, bif_par; plot_var = plot_var)
using BifurcationKit
bif_par = :k1
u_guess = [:X => 5.0, :Y => 2.0]
p_start = [:k1 => 4.0, :k2 => 1.0, :k3 => 1.0, :k4 => 1.5, :k5 => 1.25]
plot_var = :X
bprob = BifurcationProblem(wilhelm_2009_model, u_guess, p_start, bif_par; plot_var = plot_var)
p_span = (2.0, 20.0)
opts_br = ContinuationPar(p_min = p_span[1], p_max = p_span[2], max_steps = 1000)
p_span = (2.0, 20.0)
opts_br = ContinuationPar(p_min = p_span[1], p_max = p_span[2], max_steps = 1000)
bif_dia = bifurcationdiagram(bprob, PALC(), 2, (args...) -> opts_br; bothside = true)
bif_dia = bifurcationdiagram(bprob, PALC(), 2, (args...) -> opts_br; bothside = true)
using Plots
plot(bif_dia; xguide = "k1", guide = "X")
```
- Automatically handles elimination of conservation laws for computing bifurcation diagrams.
using Plots
plot(bif_dia; xguide = "k1", guide = "X")
```
- Automatically handles elimination of conservation laws for computing
bifurcation diagrams.
- Updated Bifurcation documentation with respect to this new feature.

## Catalyst 13.5
Expand Down
1 change: 1 addition & 0 deletions docs/src/api.md
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@ plot(p1, p2, p3; layout = (3,1))

```@docs
@reaction_network
@network_component
make_empty_network
@reaction
Reaction
Expand Down
Loading

0 comments on commit 6d3c8b5

Please sign in to comment.