Skip to content

Commit c57ad8c

Browse files
committed
added tests
1 parent e4b39c6 commit c57ad8c

File tree

3 files changed

+14
-9
lines changed

3 files changed

+14
-9
lines changed

src/Catalyst.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ export @reaction_network, @network_component, @reaction, @species
127127
include("network_analysis.jl")
128128
export reactioncomplexmap, reactioncomplexes, incidencemat
129129
export complexstoichmat
130-
export complexoutgoingmat, incidencematgraph, linkageclasses, deficiency, subnetworks
130+
export complexoutgoingmat, incidencematgraph, linkageclasses, stronglinkageclasses, terminallinkageclasses, deficiency, subnetworks
131131
export linkagedeficiencies, isreversible, isweaklyreversible
132132
export conservationlaws, conservedquantities, conservedequations, conservationlaw_constants
133133

src/network_analysis.jl

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -373,7 +373,7 @@ function stronglinkageclasses(rn::ReactionSystem)
373373
nps.stronglinkageclasses
374374
end
375375

376-
stronglinkageclasses(incidencegraph) = Graphs.strongly_connected_components(g)
376+
stronglinkageclasses(incidencegraph) = Graphs.strongly_connected_components(incidencegraph)
377377

378378
"""
379379
terminallinkageclasses(rn::ReactionSystem)
@@ -382,19 +382,22 @@ stronglinkageclasses(incidencegraph) = Graphs.strongly_connected_components(g)
382382
"""
383383

384384
function terminallinkageclasses(rn::ReactionSystem)
385-
slcs = stronglinkageclasses(rn)
386-
387-
tslcs = filter!(slcs, lc->isterminal(lc))
388-
tslcs
385+
nps = get_networkproperties(rn)
386+
if isempty(nps.terminallinkageclasses)
387+
slcs = stronglinkageclasses(rn)
388+
tslcs = filter(lc->isterminal(lc, rn), slcs)
389+
nps.terminallinkageclasses = tslcs
390+
end
391+
nps.terminallinkageclasses
389392
end
390393

391394
function isterminal(lc::Vector, rn::ReactionSystem)
392395
imat = incidencemat(rn)
393396

394-
for col in columns(imat)
395-
s = findfirst(==(-1), @view D[:, r])
397+
for r in 1:size(imat, 2)
398+
s = findfirst(==(-1), @view imat[:, r])
396399
if s in Set(lc)
397-
p = findfirst(==(1), @view D[:, r])
400+
p = findfirst(==(1), @view imat[:, r])
398401
p in Set(lc) ? continue : return false
399402
end
400403
end

src/reactionsystem.jl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,8 @@ Base.@kwdef mutable struct NetworkProperties{I <: Integer, V <: BasicSymbolic{Re
9494
complexoutgoingmat::Union{Matrix{Int}, SparseMatrixCSC{Int, Int}} = Matrix{Int}(undef, 0, 0)
9595
incidencegraph::Graphs.SimpleDiGraph{Int} = Graphs.DiGraph()
9696
linkageclasses::Vector{Vector{Int}} = Vector{Vector{Int}}(undef, 0)
97+
stronglinkageclasses::Vector{Vector{Int}} = Vector{Vector{Int}}(undef, 0)
98+
terminallinkageclasses::Vector{Vector{Int}} = Vector{Vector{Int}}(undef, 0)
9799
deficiency::Int = 0
98100
end
99101
#! format: on

0 commit comments

Comments
 (0)