@@ -2,17 +2,6 @@ struct BiGraph{T}
22 data:: Vector{Vector{T}}
33end
44
5- function sys2bigraph (sys)
6- ss = states (sys)
7- data = Operation[]
8- for eq in sys. eqs
9- es = []
10- lhs = eq. lhs
11- lhs. op isa Differential && push! (eq, lhs)
12- push! (data, es)
13- end
14- end
15-
165function get_vnodes (sys)
176 diffnodes = []
187 diffedges = Tuple{Int, Int}[]
@@ -33,7 +22,7 @@ function get_vnodes(sys)
3322 return diffnodes, diffedges, algvars
3423end
3524
36- function sys2bigraph2 (sys)
25+ function sys2bigraph (sys)
3726 diffvars, edges, algvars = get_vnodes (sys)
3827 varnumber_offset = length (diffvars)
3928
@@ -61,3 +50,36 @@ function print_bigraph(io::IO, sys, vars, edges)
6150 println (io, " Eq $i has $(vars[j]) " )
6251 end
6352end
53+
54+
55+ function matching_equation! (edges, i, assignments= Dict {Int, Int} (), colored= Set {Int} ())
56+ push! (colored, i)
57+ # select a v
58+ vars = unique (last .(filter (isequal (i)∘ first, edges)))
59+ for v in vars
60+ if ! haskey (assignments, v)# && !(v in colored)
61+ # v found
62+ assignments[v] = i
63+ return true
64+ end
65+ end
66+ # Else
67+ remaining = setdiff (vars, colored)
68+ for v in remaining
69+ push! (colored, v)
70+ if match_equation! (edges, assignments[v], colored, assignments)
71+ assignments[v] = i
72+ return true
73+ end
74+ end
75+ return false
76+ end
77+
78+ function matching (sys, vars, edges)
79+ assignments= Dict {Int, Int} ()
80+ colored= Set {Int} ()
81+ for i in 1 : length (sys. eqs)
82+ @show matching_equation! (edges, i, assignments, colored)
83+ end
84+ assignments
85+ end
0 commit comments