For some reason, in some cases where you do complete on a ReactionSystem, that can swap around the order on metadata. Since metadata is not overwritten, but just added to the metadata dict, that means that what is retrieved from getmetadata can change.
In principle, this just involves MTK functions, so everything should transfer to ReactionSystem. However, since things work fine for System, something is obviously going on in Catalyst.
using Catalyst, ModelingToolkitBase
t = default_t()
D = default_time_deriv()
# Create model.
@species X(t)
@parameters d
@named rs2 = ReactionSystem([Reaction(d, [X], nothing)], t; metadata = [MiscSystemData => π])
rs2 = ModelingToolkitBase.setmetadata(rs2, MiscSystemData, ones(2, 3))
ModelingToolkitBase.getmetadata(complete(rs2), MiscSystemData, nothing) # π = 3.1415926535897... (incorrect)
@species X(t)
@parameters d
@named sys2 = System([Differential(t)(X) ~ -d*X], t; metadata = [MiscSystemData => π])
sys2 = ModelingToolkitBase.setmetadata(sys2, MiscSystemData, ones(2, 3))
ModelingToolkitBase.getmetadata(complete(sys2), MiscSystemData, nothing) # 2×3 Matrix{Float64}: (correct)
And the actual metadata dicts are:
julia> ModelingToolkitBase.get_metadata((rs2))
Base.ImmutableDict{DataType, Any} with 3 entries:
MiscSystemData => [1.0 1.0 1.0; 1.0 1.0 1.0]
MutableCacheKey => Dict{DataType, Any}()
MiscSystemData => π
julia> ModelingToolkitBase.get_metadata(complete(rs2))
Base.ImmutableDict{DataType, Any} with 3 entries:
MiscSystemData => π
MutableCacheKey => Dict{DataType, Any}()
MiscSystemData => [1.0 1.0 1.0; 1.0 1.0 1.0]
julia> ModelingToolkitBase.get_metadata((sys2))
Base.ImmutableDict{DataType, Any} with 3 entries:
MiscSystemData => [1.0 1.0 1.0; 1.0 1.0 1.0]
MutableCacheKey => Dict{DataType, Any}()
MiscSystemData => π
julia> ModelingToolkitBase.get_metadata(complete(sys2))
Base.ImmutableDict{DataType, Any} with 3 entries:
MiscSystemData => [1.0 1.0 1.0; 1.0 1.0 1.0]
MutableCacheKey => Dict{DataType, Any}()
MiscSystemData => π
This is only relevant on the current branch for Catalyst v16 (but will likely remain after that merges)
For some reason, in some cases where you do
completeon aReactionSystem, that can swap around the order on metadata. Since metadata is not overwritten, but just added to the metadata dict, that means that what is retrieved fromgetmetadatacan change.In principle, this just involves MTK functions, so everything should transfer to
ReactionSystem. However, since things work fine forSystem, something is obviously going on in Catalyst.And the actual metadata dicts are:
This is only relevant on the current branch for Catalyst v16 (but will likely remain after that merges)