move input logic to flow
This commit is contained in:
parent
bba9366ec7
commit
600b3fb54c
@ -2,8 +2,9 @@ module Flux
|
|||||||
|
|
||||||
using MacroTools, Lazy, DataFlow, Juno
|
using MacroTools, Lazy, DataFlow, Juno
|
||||||
import DataFlow: graphm, syntax, prewalk!, postwalk!, prewalk, postwalk,
|
import DataFlow: graphm, syntax, prewalk!, postwalk!, prewalk, postwalk,
|
||||||
iscyclic, Constant, constant, isconstant, Group, group, value, inputs,
|
iscyclic, Constant, constant, isconstant, Group, group, Split, splitnode,
|
||||||
thread!, value, inputs, Split
|
detuple, value, inputs, thread!, value, inputs, Split, splitnode, inputnode,
|
||||||
|
spliceinputs, bumpinputs
|
||||||
import Juno: Tree, Row
|
import Juno: Tree, Row
|
||||||
|
|
||||||
# Zero Flux Given
|
# Zero Flux Given
|
||||||
@ -12,7 +13,6 @@ include("model.jl")
|
|||||||
include("utils.jl")
|
include("utils.jl")
|
||||||
include("data.jl")
|
include("data.jl")
|
||||||
|
|
||||||
include("compiler/graph.jl")
|
|
||||||
include("compiler/diff.jl")
|
include("compiler/diff.jl")
|
||||||
include("compiler/code.jl")
|
include("compiler/code.jl")
|
||||||
include("compiler/loops.jl")
|
include("compiler/loops.jl")
|
||||||
|
@ -1,45 +0,0 @@
|
|||||||
# TODO: most (all?) of this could be in DataFlow
|
|
||||||
|
|
||||||
immutable ModelInput end
|
|
||||||
|
|
||||||
splitnode(v, n) = vertex(Split(n), v)
|
|
||||||
|
|
||||||
inputnode(n) = splitnode(constant(ModelInput()), n)
|
|
||||||
|
|
||||||
isinput(v::IVertex) = isa(value(v), Split) && value(v[1]) == Constant(ModelInput())
|
|
||||||
|
|
||||||
function bumpinputs(v::IVertex)
|
|
||||||
prewalk(v) do v
|
|
||||||
isinput(v) ?
|
|
||||||
inputnode(value(v).n + 1) :
|
|
||||||
v
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function spliceinput(v::IVertex, input::IVertex)
|
|
||||||
postwalk(v) do v
|
|
||||||
value(v) == Constant(ModelInput()) ? input : v
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
spliceinputs(v::IVertex, inputs::Vertex...) =
|
|
||||||
spliceinput(v, vertex(Group(), inputs...))
|
|
||||||
|
|
||||||
function ninputs(v::IVertex)
|
|
||||||
n = 0
|
|
||||||
prewalk(v) do v
|
|
||||||
isinput(v) && (n = max(n, value(v).n))
|
|
||||||
v
|
|
||||||
end
|
|
||||||
return n
|
|
||||||
end
|
|
||||||
|
|
||||||
function detuple(v::IVertex)
|
|
||||||
postwalk(v) do v
|
|
||||||
if isa(value(v), Split) && isa(value(v[1]), Group)
|
|
||||||
v[1][value(v).n]
|
|
||||||
else
|
|
||||||
v
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
Loading…
Reference in New Issue
Block a user