Skip to content

Commit 1768e27

Browse files
committed
add variable dependencies
1 parent d855b1b commit 1768e27

File tree

2 files changed

+30
-5
lines changed

2 files changed

+30
-5
lines changed

src/systems/dependency_graphs.jl

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ function equation_dependencies(sys::AbstractSystem; variables=states(sys))
66
depeqs_to_vars = Vector{Vector{Variable}}(undef,length(eqs))
77

88
for (i,eq) in enumerate(eqs)
9-
depeqs_to_vars[i] = collect(equation_dependencies!(deps, eq, variables))
9+
depeqs_to_vars[i] = collect(get_variables!(deps, eq, variables))
1010
empty!(deps)
1111
end
1212

@@ -31,16 +31,41 @@ function asgraph(eqdeps, vtois)
3131
ne = 0
3232
for (eqidx,vidxs) in enumerate(fadjlist)
3333
foreach(vidx -> push!(badjlist[vidx], eqidx), vidxs)
34-
ne += 1
34+
ne += length(vidxs)
3535
end
3636

3737
BipartiteGraph(ne, fadjlist, badjlist)
3838
end
3939

4040
# could be made to directly generate graph and save memory
4141
function asgraph(sys::AbstractSystem; variables=nothing, variablestoids=nothing)
42-
vs = isnothing(variables) ? states(sys) : variables
42+
vs = isnothing(variables) ? states(sys) : variables
4343
eqdeps = equation_dependencies(sys, variables=vs)
4444
vtois = isnothing(variablestoids) ? Dict(convert(Variable, v) => i for (i,v) in enumerate(vs)) : variablestoids
4545
asgraph(eqdeps, vtois)
4646
end
47+
48+
49+
# for each variable determine the equations that modify it
50+
function variable_dependencies(sys::AbstractSystem; variables=states(sys), variablestoids=nothing)
51+
eqs = equations(sys)
52+
vtois = isnothing(variablestoids) ? Dict(convert(Variable, v) => i for (i,v) in enumerate(variables)) : variablestoids
53+
54+
deps = Set{Variable}()
55+
badjlist = Vector{Vector{Int}}(undef, length(eqs))
56+
for (eidx,eq) in enumerate(eqs)
57+
modified_states!(deps, eq, variables)
58+
badjlist[eidx] = sort!([vtois[var] for var in deps])
59+
empty!(deps)
60+
end
61+
62+
fadjlist = [Vector{Int}() for i = 1:length(variables)]
63+
ne = 0
64+
for (eqidx,vidxs) in enumerate(badjlist)
65+
println(vidxs)
66+
foreach(vidx -> push!(fadjlist[vidx], eqidx), vidxs)
67+
ne += length(vidxs)
68+
end
69+
70+
BipartiteGraph(ne, fadjlist, badjlist)
71+
end

src/systems/jumps/jumpsystem.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -128,12 +128,12 @@ end
128128

129129

130130
### Functions to determine which states a jump depends on
131-
function equation_dependencies!(dep, jump::Union{ConstantRateJump,VariableRateJump}, variables)
131+
function get_variables!(dep, jump::Union{ConstantRateJump,VariableRateJump}, variables)
132132
foreach(var -> (var in variables) && push!(dep, var), vars(jump.rate))
133133
dep
134134
end
135135

136-
function equation_dependencies!(dep, jump::MassActionJump, variables)
136+
function get_variables!(dep, jump::MassActionJump, variables)
137137
jsr = jump.scaled_rates
138138

139139
if jsr isa Variable

0 commit comments

Comments
 (0)