Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Hom DSL #101

Open
wants to merge 22 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
89bcf6c
Beta version of Homomorphism DSL. Has worked for an seir identity to…
neonWhiteout Aug 10, 2023
724b711
Slight changes to Syntax. Still long way to go.
neonWhiteout Aug 10, 2023
1d7704b
Created tests for hom
neonWhiteout Aug 10, 2023
a0af347
Began work on reformmating to Catlab standards. I apologize for the …
neonWhiteout Sep 28, 2023
a3ad45a
Added short, explanatory dosctrings to top of Composition and Stratif…
neonWhiteout Sep 28, 2023
dbf4419
Additional, project-wide conversion from four spaces to two spaces.
neonWhiteout Sep 28, 2023
82b7361
Updated spacing in PremadeModels.jl
neonWhiteout Sep 28, 2023
d72d4ee
Further test/Syntax.jl updates; removing out of date comments, moving…
neonWhiteout Sep 29, 2023
0564060
Merge branch 'master' into HomDSL
neonWhiteout Sep 29, 2023
2617c83
Updated Homomorphism DSL
neonWhiteout Sep 29, 2023
499f6c3
Merged Reformatting into Hom DSL
neonWhiteout Sep 29, 2023
7fd0e5e
Fixed some spacing in Homomorphism
neonWhiteout Sep 29, 2023
920d4c2
Further homomorphism work
neonWhiteout Sep 30, 2023
30ea333
Fixed homomorphism maps being backwards.
neonWhiteout Sep 30, 2023
5d2e54e
Removed a println from Syntax
neonWhiteout Sep 30, 2023
878c008
Homomorphism DSL now uses DSLArgument, allowing for substring matches…
neonWhiteout Sep 30, 2023
159df85
Merge branch 'master' into HomDSL
neonWhiteout Oct 1, 2023
e1bc700
Updated homomorphism. Removed unnecessary comments. Used state_dict
neonWhiteout Dec 6, 2023
26a6bff
Removed invert_vector from stratification
neonWhiteout Dec 6, 2023
6ee1902
Merge branch 'master' into HomDSL
neonWhiteout Dec 6, 2023
4405b1c
Removed duplicate code causing error in Syntax
neonWhiteout Dec 6, 2023
b224859
Removed commented code, fixed spacing
neonWhiteout Dec 6, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
108 changes: 54 additions & 54 deletions src/CausalLoop.jl
Original file line number Diff line number Diff line change
Expand Up @@ -30,18 +30,18 @@ add_edges!(c::AbstractCausalLoop,n,s,t;kw...) = add_parts!(c,:E,n,s=s,t=t;kw...)
Create causal loop diagram from collection of nodes and collection of edges.
"""
CausalLoop(ns,es) = begin
c = CausalLoop()
ns = vectorify(ns)
es = vectorify(es)
ns_idx=state_dict(ns)
add_nodes!(c, length(ns), nname=ns)

s=map(first,es)
t=map(last,es)
add_edges!(c, length(es), map(x->ns_idx[x], s), map(x->ns_idx[x], t))

c
c = CausalLoop()
ns = vectorify(ns)
es = vectorify(es)

ns_idx=state_dict(ns)
add_nodes!(c, length(ns), nname=ns)

s=map(first,es)
t=map(last,es)
add_edges!(c, length(es), map(x->ns_idx[x], s), map(x->ns_idx[x], t))

c
end

# return the count of each components
Expand All @@ -62,25 +62,25 @@ nnames(c::AbstractCausalLoop) = [nname(c, n) for n in 1:nn(c)]


function convertToCausalLoop(p::AbstractStockAndFlowStructure)
sns=snames(p)
fns=fnames(p)
svns=svnames(p)
flowVariableIndexs=[flowVariableIndex(p,f) for f in 1:nf(p)]
vNotf=setdiff(1:nvb(p),flowVariableIndexs)
vNotfns=[vname(p,v) for v in vNotf]
ns=vcat(sns,fns,svns,vNotfns)

lses=[sname(p,subpart(p,ls,:lss))=>svname(p,subpart(p,ls,:lssv)) for ls in 1:nls(p)]
lsvfes=[svname(p,subpart(p,lsv,:lsvsv))=>subpart(p,lsv,:lsvv) in flowVariableIndexs ? fname(p,only(incident(p,subpart(p,lsv,:lsvv),:fv))) : vname(p,subpart(p,lsv,:lsvv)) for lsv in 1:nlsv(p)]
lfves=[sname(p,subpart(p,lv,:lvs))=>subpart(p,lv,:lvv) in flowVariableIndexs ? fname(p,only(incident(p,subpart(p,lv,:lvv),:fv))) : vname(p,subpart(p,lv,:lvv)) for lv in 1:nlv(p)]
fies=[fname(p,subpart(p,i,:ifn))=>sname(p,subpart(p,i,:is)) for i in 1:ni(p)]
foes=[fname(p,subpart(p,o,:ofn))=>sname(p,subpart(p,o,:os)) for o in 1:no(p)]

es=vcat(lses,lsvfes,lfves,fies,foes)

return CausalLoop(ns,es)

sns=snames(p)
fns=fnames(p)
svns=svnames(p)
flowVariableIndexs=[flowVariableIndex(p,f) for f in 1:nf(p)]
vNotf=setdiff(1:nvb(p),flowVariableIndexs)
vNotfns=[vname(p,v) for v in vNotf]

ns=vcat(sns,fns,svns,vNotfns)

lses=[sname(p,subpart(p,ls,:lss))=>svname(p,subpart(p,ls,:lssv)) for ls in 1:nls(p)]
lsvfes=[svname(p,subpart(p,lsv,:lsvsv))=>subpart(p,lsv,:lsvv) in flowVariableIndexs ? fname(p,only(incident(p,subpart(p,lsv,:lsvv),:fv))) : vname(p,subpart(p,lsv,:lsvv)) for lsv in 1:nlsv(p)]
lfves=[sname(p,subpart(p,lv,:lvs))=>subpart(p,lv,:lvv) in flowVariableIndexs ? fname(p,only(incident(p,subpart(p,lv,:lvv),:fv))) : vname(p,subpart(p,lv,:lvv)) for lv in 1:nlv(p)]
fies=[fname(p,subpart(p,i,:ifn))=>sname(p,subpart(p,i,:is)) for i in 1:ni(p)]
foes=[fname(p,subpart(p,o,:ofn))=>sname(p,subpart(p,o,:os)) for o in 1:no(p)]

es=vcat(lses,lsvfes,lfves,fies,foes)

return CausalLoop(ns,es)
end

"""
Expand All @@ -89,27 +89,27 @@ Nodes: stocks, flows, sum variables, parameters, nonflow dynamic variables
Edges: morphisms in stock flow
"""
function convertToCausalLoop(p::AbstractStockAndFlowStructureF)
sns=snames(p)
fns=fnames(p)
svns=svnames(p)
pns=pnames(p)
flowVariableIndexs=[flowVariableIndex(p,f) for f in 1:nf(p)]
vNotf=setdiff(1:nvb(p),flowVariableIndexs)
vNotfns=[vname(p,v) for v in vNotf]
ns=vcat(sns,fns,svns,vNotfns,pns)

lses=[sname(p,subpart(p,ls,:lss))=>svname(p,subpart(p,ls,:lssv)) for ls in 1:nls(p)]
lsvfes=[svname(p,subpart(p,lsv,:lsvsv))=>subpart(p,lsv,:lsvv) in flowVariableIndexs ? fname(p,only(incident(p,subpart(p,lsv,:lsvv),:fv))) : vname(p,subpart(p,lsv,:lsvv)) for lsv in 1:nlsv(p)]
lfves=[sname(p,subpart(p,lv,:lvs))=>subpart(p,lv,:lvv) in flowVariableIndexs ? fname(p,only(incident(p,subpart(p,lv,:lvv),:fv))) : vname(p,subpart(p,lv,:lvv)) for lv in 1:nlv(p)]
fies=[fname(p,subpart(p,i,:ifn))=>sname(p,subpart(p,i,:is)) for i in 1:ni(p)]
foes=[fname(p,subpart(p,o,:ofn))=>sname(p,subpart(p,o,:os)) for o in 1:no(p)]
lpvs=[pname(p,subpart(p,lp,:lpvp))=>subpart(p,lp,:lpvv) in flowVariableIndexs ? fname(p,only(incident(p,subpart(p,lp,:lpvv),:fv))) : vname(p,subpart(p,lp,:lpvv)) for lp in 1:nlpv(p)]
lvvs=[subpart(p,lv,:lvsrc) in flowVariableIndexs ? fname(p,only(incident(p,subpart(p,lv,:lvsrc),:fv))) : vname(p,subpart(p,lv,:lvsrc))=>subpart(p,lv,:lvtgt) in flowVariableIndexs ? fname(p,only(incident(p,subpart(p,lv,:lvtgt),:fv))) : vname(p,subpart(p,lv,:lvtgt)) for lv in 1:nlvv(p)]


es=vcat(lses,lsvfes,lfves,fies,foes,lpvs,lvvs)

return CausalLoop(ns,es)

sns=snames(p)
fns=fnames(p)
svns=svnames(p)
pns=pnames(p)
flowVariableIndexs=[flowVariableIndex(p,f) for f in 1:nf(p)]
vNotf=setdiff(1:nvb(p),flowVariableIndexs)
vNotfns=[vname(p,v) for v in vNotf]

ns=vcat(sns,fns,svns,vNotfns,pns)

lses=[sname(p,subpart(p,ls,:lss))=>svname(p,subpart(p,ls,:lssv)) for ls in 1:nls(p)]
lsvfes=[svname(p,subpart(p,lsv,:lsvsv))=>subpart(p,lsv,:lsvv) in flowVariableIndexs ? fname(p,only(incident(p,subpart(p,lsv,:lsvv),:fv))) : vname(p,subpart(p,lsv,:lsvv)) for lsv in 1:nlsv(p)]
lfves=[sname(p,subpart(p,lv,:lvs))=>subpart(p,lv,:lvv) in flowVariableIndexs ? fname(p,only(incident(p,subpart(p,lv,:lvv),:fv))) : vname(p,subpart(p,lv,:lvv)) for lv in 1:nlv(p)]
fies=[fname(p,subpart(p,i,:ifn))=>sname(p,subpart(p,i,:is)) for i in 1:ni(p)]
foes=[fname(p,subpart(p,o,:ofn))=>sname(p,subpart(p,o,:os)) for o in 1:no(p)]
lpvs=[pname(p,subpart(p,lp,:lpvp))=>subpart(p,lp,:lpvv) in flowVariableIndexs ? fname(p,only(incident(p,subpart(p,lp,:lpvv),:fv))) : vname(p,subpart(p,lp,:lpvv)) for lp in 1:nlpv(p)]
lvvs=[subpart(p,lv,:lvsrc) in flowVariableIndexs ? fname(p,only(incident(p,subpart(p,lv,:lvsrc),:fv))) : vname(p,subpart(p,lv,:lvsrc))=>subpart(p,lv,:lvtgt) in flowVariableIndexs ? fname(p,only(incident(p,subpart(p,lv,:lvtgt),:fv))) : vname(p,subpart(p,lv,:lvtgt)) for lv in 1:nlvv(p)]


es=vcat(lses,lsvfes,lfves,fies,foes,lpvs,lvvs)

return CausalLoop(ns,es)
end
Loading