# Unioning MetaGraphs

**URL:** <https://discourse.julialang.org/t/unioning-metagraphs/49204>\
**Category:** Graphs\
**Tags:** question, lightgraphs, metagraphs\
**Created:** [October 28, 2020, 8:33pm UTC](https://discourse.julialang.org/t/unioning-metagraphs/49204 "2020-10-28T20:33:40Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![mkarikom](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mkarikom/32/7096_2.png) [@mkarikom](https://discourse.julialang.org/u/mkarikom)\
**Post date:** [October 28, 2020, 8:33pm UTC](https://discourse.julialang.org/t/unioning-metagraphs/49204/1 "2020-10-28T20:33:40Z")

</div>

I don’t completely understand the error, but looks like some methods from Base might need to be exended.

What is the minimum I would need to implement to make this work?:

```julia
g1 = MetaDiGraph(4)
add_edge!(g1, 1, 2)
add_edge!(g1, 2, 3)
add_edge!(g1, 3, 4)
set_props!(g1, 1, Dict(:name=>"A", :id => 1))
set_props!(g1, 2, Dict(:name=>"B", :id => 2))
set_props!(g1, 3, Dict(:name=>"C", :id => 3))
set_props!(g1, 4, Dict(:name=>"D", :id => 4))

g2 = MetaDiGraph(2)
add_edge!(g2, 1, 2)
set_props!(g2, 1, Dict(:name=>"E", :id => 5))
set_props!(g2, 2, Dict(:name=>"F", :id => 6))

h = union(g1, g2) # something like 
get_props!(h,1) == Dict(:name=>"A", :id => 1)
get_props!(h,2) == Dict(:name=>"B", :id => 2)
get_props!(h,3) == Dict(:name=>"C", :id => 3)
get_props!(h,4) == Dict(:name=>"D", :id => 4)
get_props!(h,5) == Dict(:name=>"E", :id => 5)
get_props!(h,6) == Dict(:name=>"F", :id => 6)

collect(edges(h)) # something like
Edge 1=>2
Edge 2=>3
Edge 3=>4
Edge 4=>5
Edge 5=>6

```

> **Error output**
>
> ```julia
> ERROR: MethodError: no method matching sort!(::MetaDiGraph{Int64,Float64})
> Closest candidates are:
> sort!(::Any, ::Integer, ::Integer, ::LightGraphs.Experimental.Traversals.NOOPSortAlg, ::Base.Order.Ordering) at /home/me/.julia/packages/LightGraphs/siFgP/src/Experimental/Traversals/bfs.jl:7
> sort!(::DataFrame) at /home/me/.julia/packages/DataFrames/GtZ1l/src/dataframe/sort.jl:72
> sort!(::DataFrame, ::Base.Sort.Algorithm, ::Base.Order.Ordering) at /home/me/.julia/packages/DataFrames/GtZ1l/src/dataframe/sort.jl:88
> ...
> Stacktrace:
> [1] merge_vertices(::MetaDiGraph{Int64,Float64}, ::MetaDiGraph{Int64,Float64}) at /home/me/.julia/packages/LightGraphs/siFgP/src/operators.jl:749
> [2] top-level scope at /home/me/code/BioPAXwork/local/pcquery/Ex_annotate_10X.jl:114
> [3] include_string(::Function, ::Module, ::String, ::String) at ./loading.jl:1088
> ERROR: MethodError: no method matching iterate(::MetaDiGraph{Int64,Float64})
> Closest candidates are:
> iterate(::DataStructures.IntSet) at /home/me/.julia/packages/DataStructures/DLSxi/src/int_set.jl:177
> iterate(::DataStructures.IntSet, ::Int64) at /home/me/.julia/packages/DataStructures/DLSxi/src/int_set.jl:179
> iterate(::DataStructures.IntSet, ::Int64, ::Any) at /home/me/.julia/packages/DataStructures/DLSxi/src/int_set.jl:179
> ...
> Stacktrace:
> [1] mapfilter(::Base.var"#89#90"{typeof(∉),typeof(push!),Set{Int64}}, ::typeof(push!), ::MetaDiGraph{Int64,Float64}, ::Array{Int64,1}) at ./abstractset.jl:421
> [2] _grow! at ./array.jl:2537 [inlined]
> [3] union! at ./array.jl:2542 [inlined]
> [4] union(::MetaDiGraph{Int64,Float64}, ::MetaDiGraph{Int64,Float64}) at ./abstractset.jl:48
> [5] top-level scope at /home/me/code/BioPAXwork/local/pcquery/Ex_annotate_10X.jl:114
> [6] include_string(::Function, ::Module, ::String, ::String) at ./loading.jl:1088
> 
> ```
