Skip to content

Commit

Permalink
ENH: add documentation for AlgebraicPetri
Browse files Browse the repository at this point in the history
Integration
  • Loading branch information
jpfairbanks committed Jun 8, 2024
1 parent 649bd83 commit b33b06c
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 5 deletions.
1 change: 1 addition & 0 deletions docs/make.jl
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ makedocs(
"examples/Ross-Macdonald.md"
],
"Threshold Linear Networks" => "TLN.md",
"AlgebraicPetri Integration" => "AlgebraicPetri.md",
"Library Reference" => "api.md"
]
)
Expand Down
19 changes: 19 additions & 0 deletions docs/src/AlgebraicPetri.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# AlgebraicPetri.jl Integration

You can construct a [`ContinuousResourceSharer`](@ref) from an Open Petri Net for any kind of network supported by AlgebraicPetri.jl including:

1. OpenPetriNet
2. OpenLabelledPetriNet
3. OpenLabelledReactionNet

````@example
Brusselator = LabelledPetriNet([:A, :B, :D, :E, :X, :Y],
:t1 => (:A => (:X, :A)),
:t2 => ((:X, :X, :Y) => (:X, :X, :X)),
:t3 => ((:B, :X) => (:Y, :D, :B)),
:t4 => (:X => :E)
)
open_bruss = Open([:A, :D], Brusselator, [:A, :B])
rs = ContinuousResourceSharer{Float64}(open_bruss)
````
18 changes: 13 additions & 5 deletions ext/AlgebraicDynamicsAlgebraicPetriExt.jl
Original file line number Diff line number Diff line change
Expand Up @@ -6,25 +6,33 @@ using Catlab
using LabelledArrays
import AlgebraicDynamics.UWDDynam: ContinuousResourceSharer

export OpenNet

""" OpenNet=Union{OpenPetriNet,OpenLabelledPetriNet,OpenLabelledReactionNet}
A type alias for any kind of open network from AlgebraicPetri.
"""
const OpenNet = Union{OpenPetriNet,OpenLabelledPetriNet,OpenLabelledReactionNet}

# vecfields need to be initialized differently depending on type of net
function vf(pn::OpenPetriNet,T::Type,ns::Int64)
function dynamics(pn::OpenPetriNet,T::Type,ns::Int64)
vf(u, p, t) = vectorfield(apex(pn))(zeros(T,ns), u, p, t)
end

function vf(pn::OpenLabelledPetriNet,T::Type,ns::Int64)
function dynamics(pn::OpenLabelledPetriNet,T::Type,ns::Int64)
vf(u, p, t) = vectorfield(apex(pn))(LVector(NamedTuple{tuple(snames(apex(pn))...)}(zeros(T,ns))), u, p, t)
end

function vf(pn::OpenLabelledReactionNet,T::Type,ns::Int64)
function dynamics(pn::OpenLabelledReactionNet,T::Type,ns::Int64)
vf(u, p, t) = vectorfield(apex(pn))(LVector(NamedTuple{tuple(snames(apex(pn))...)}(zeros(T,ns))), u, rates(apex(pn)), t)
end

function ContinuousResourceSharer{T}(pn::Union{OpenPetriNet,OpenLabelledPetriNet,OpenLabelledReactionNet}) where T
function ContinuousResourceSharer{T}(pn::OpenNet) where T
nstates = nparts(apex(pn), :S)
portmap = vcat(map(legs(pn)) do f
f[:S](parts(dom(f), :S))
end...)
nports = length(portmap)
ContinuousResourceSharer{T}(nports, nstates, vf(pn,T,nstates), portmap)
ContinuousResourceSharer{T}(nports, nstates, dynamics(pn,T,nstates), portmap)
end
end

0 comments on commit b33b06c

Please sign in to comment.