PAX2Graphml first steps tutorial

  • Convert a BIOPAX file to a GRAPHML file containing a reaction graph
  • Efficiently iterate on the graph nodes and edges
  • Display the GRAPHML file content
  • Import and export node properties
  • Extract unique node property values
  • Compute graph connected components
  • Extract subgraphs by datasources
  • Merge nodes based on properties and preserve edges
  • Merge 2 graphs based on node property values
In [16]:
import pax2graphml  as p2g
In [17]:
rootPath="/home/user/example/"
resultPath=rootPath+"result/"
biopaxfile1=rootPath+"biopax/G6P_neig_1.owl"
graphmlfile=resultPath+"G6P_neig_1.graphml"
In [18]:
 
p2g.pax_import.biopax_to_reaction_graph(biopaxfile1,graphmlfile)
Out[18]:
{'message': 'graph file generated',
 'output': '/home/user/example/result/G6P_neig_1.graphml',
 'status': 0}
In [19]:
g=p2g.graph_explore.load_graphml(graphmlfile, directed=True)
nodes=p2g.node_list(g)
edges=p2g.edge_list(g)
print("nodes count: %s edges count: %s "  %(len(nodes),len(edges)  )   )
nodes count: 48 edges count: 65 
In [20]:
for n in nodes[:3]:
    print("  node %s"  %(n)  )    
  node 0
  node 1
  node 2
In [21]:
for e in edges[:3]:
    print("  edge %s"  %(e)  )   
  edge (0, 4)
  edge (1, 23)
  edge (5, 33)
In [22]:
xmlnodes=p2g.graph_explore.graphml_xml_string(graphmlfile ,[3,20,21,200],"node") 
for x in xmlnodes:
    print("%s\n\n" %(x))
<node id="3">

           <data key="biopaxType">Complex</data>
           <data key="name">PGM1:Mg++</data>
           <data key="alias">PGM1:Mg++</data>	       
           <data key="provider">Reactome</data>
           <data key="uri">http://www.reactome.org/biopax/56/71387#Complex66</data>
           <data key="uniprot">P36871</data>
           <data key="hgnc"/>
           <data key="chebi"/>
           <data key="organism">Homo sapiens</data>
           <data key="color">LightGreen</data>
           <data key="input">0</data>
           <data key="shape">Octagon</data>
           <data key="spaimCase"/>
           <data key="evidence"/>
           <data key="generic">false</data>
        </node>


<node id="20">

           <data key="biopaxType">ComplexAssembly</data>
           <data key="name">assembly of PGM1:Mg++</data>
           <data key="alias"/>	       
           <data key="provider"/>
           <data key="uri"/>
           <data key="uniprot"/>
           <data key="hgnc"/>
           <data key="chebi"/>
           <data key="organism"/>
           <data key="color">LightSalmon</data>
           <data key="input">0</data>
           <data key="shape">Rectangle</data>
           <data key="spaimCase">R3COMPLX</data>
           <data key="evidence"/>
           <data key="generic">false</data>
        </node>


<node id="21">

           <data key="biopaxType">Catalysis</data>
           <data key="name">R/56/71387#Catalysis57</data>
           <data key="alias"/>	       
           <data key="provider">Reactome</data>
           <data key="uri">http://www.reactome.org/biopax/56/71387#Catalysis57</data>
           <data key="uniprot"/>
           <data key="hgnc"/>
           <data key="chebi"/>
           <data key="organism"/>
           <data key="color">Coral</data>
           <data key="input">0</data>
           <data key="shape">Diamond</data>
           <data key="spaimCase">R2</data>
           <data key="evidence"/>
           <data key="generic">false</data>
        </node>


In [23]:
propertiesfile=resultPath+"properties.json"
p2g.pax_import.name_alias(biopaxfile1,propertiesfile)
Out[23]:
{'message': 'alias file properties.json created', 'status': 0}
In [24]:
p2g.pax_import.join_annotation(g,propertiesfile,"label","importedfield","any")
graphmlOutFile=resultPath+"out.graphml"
p2g.graph_explore.save_graphml(g,graphmlOutFile,True)
In [25]:
"""
Extraction of all values of a node property  
"""

providerList=p2g.properties.property_values(g,"provider")
print("all datasources:%s\n" %(providerList))

uniprotList=p2g.properties.property_values(g,"uniprot")
print("all uniprot:%s\n" %(uniprotList))
      
chebiList=p2g.properties.property_values(g,"chebi")
print("all chebi:%s\n" %(chebiList))
      
all datasources:['', 'Reactome']

all uniprot:['', 'Q96G03', 'P06744', 'P13807;P46976', 'P36871', 'P46976', 'P11217', 'Q9BRR6', 'P13807', 'P36871;Q96G03', 'P52790;P19367;P52789;P35557']

all chebi:['', 'CHEBI:15946', 'CHEBI:18420', 'CHEBI:18066', 'CHEBI:15422', 'CHEBI:16027', 'CHEBI:15377', 'CHEBI:17659', 'CHEBI:17665', 'CHEBI:16077', 'CHEBI:16938', 'CHEBI:16474', 'CHEBI:18009', 'CHEBI:17925', 'CHEBI:18367', 'CHEBI:15378', 'CHEBI:16761']

In [26]:
"""
Extraction of Connected components 
(entity neighbourhood)
example of the neighbourhood of a list of entities (protein +metabolite)
"""

#    print(mccid)
targ=["P46976","P11217","Q96G03","P13807","TPNH","PGYM b dimer:AMP","ADP"]    
#targ=["ADP"]    
sg,targmap=p2g.extract.connected_component_by_annotation(g,targ,["uniprot","name"])    
print('------sub-graph-including-inputs------')
print(p2g.graph_explore.summary(sg))

subsetgraphmlOutFile=resultPath+"subset.graphml"
print("--------exporting sub graph to file: %s-------" %(subsetgraphmlOutFile) )
p2g.graph_explore.save_graphml(sg,subsetgraphmlOutFile,True)
print('---------------')
------sub-graph-including-inputs------
nodes count: 22 
edges count: 24 

--------exporting sub graph to file: /home/user/example/result/subset.graphml-------
---------------
In [27]:
"""
Extraction of subgraphs by datasources
"""


print(p2g.graph_explore.summary(g))
# add update a prop value list to a value
print("we extract sub graphs by provider(datasource) values\n") 
subgraphList=p2g.extract.subgraphs_by_datasource(g)
 
for d in subgraphList:
    pvlist=d["datasource"]
    ssg=d["subgraph"]
    print("  datasources:%s" %(pvlist))
    print(p2g.graph_explore.summary(ssg))
    
print("we define a default value ('any') for missing value ")

p2g.properties.defaultNodeValue(g,"provider","any")

print("and  extract the sub graphs\n") 
subgraphList2=p2g.extract.subgraphs_by_datasource(g,False)
for d in subgraphList2:
    pvlist=d["datasource"]
    ssg=d["subgraph"]
    print("  datasources:%s" %(pvlist))
    print(p2g.graph_explore.summary(ssg))
    
    
nodes count: 48 
edges count: 65 

we extract sub graphs by provider(datasource) values

  datasources:['']
nodes count: 5 
edges count: 0 

  datasources:['Reactome']
nodes count: 43 
edges count: 48 

we define a default value ('any') for missing value 
and  extract the sub graphs

  datasources:['any']
nodes count: 5 
edges count: 0 

  datasources:['Reactome']
nodes count: 43 
edges count: 48 

In [28]:
"""
 how to merge nodes and keep all edges
"""

import graph_tool as gt
 
    
gg = gt.Graph() 
gg.vp.group=gg.new_vertex_property("int")
gg.vp.tag=gg.new_vertex_property("string")
gg.ep.interact=gg.new_edge_property("string")

v0=gg.add_vertex() 
v1=gg.add_vertex() 
v2=gg.add_vertex() 
v3=gg.add_vertex() 
v4=gg.add_vertex() 
v5=gg.add_vertex()

gg.add_edge(v0,v5) 
gg.add_edge(v1,v5) 
gg.add_edge(v2,v5) 
gg.add_edge(v3,v5) 
gg.add_edge(v4,v5) 

for v in gg.vertices(): 
   gg.vp["group"][v]=1
   gg.vp["tag"][v]="keep"
    
nnode=gg.add_vertex() 
gg.add_edge(v0,nnode) 
gg.add_edge(v1,nnode) 
gg.add_edge(nnode,nnode) 

gg.vp["group"][nnode]=2
gg.vp["tag"][nnode]="new"

p2g.properties.default_edge_value(gg,"interact","+")



p2g.graph_explore.describe_graph(gg)     
print(p2g.graph_explore.summary(gg))
print("we merge node %s with %s " %(v5,nnode))
p2g.extract.merge_nodes(gg,v5,nnode)

p2g.graph_explore.describe_graph(gg)     
print(p2g.graph_explore.summary(gg))
 
  vertex 0 (group=1,tag=keep,)
      0 out_edge:(0, 5) (interact=+,)
      0 out_edge:(0, 6) (interact=+,)


  vertex 1 (group=1,tag=keep,)
      1 out_edge:(1, 5) (interact=+,)
      1 out_edge:(1, 6) (interact=+,)


  vertex 2 (group=1,tag=keep,)
      2 out_edge:(2, 5) (interact=+,)


  vertex 3 (group=1,tag=keep,)
      3 out_edge:(3, 5) (interact=+,)


  vertex 4 (group=1,tag=keep,)
      4 out_edge:(4, 5) (interact=+,)


  vertex 5 (group=1,tag=keep,)
     5 in_edge:(0, 5) (interact=+,)
     5 in_edge:(1, 5) (interact=+,)
     5 in_edge:(2, 5) (interact=+,)
     5 in_edge:(3, 5) (interact=+,)
     5 in_edge:(4, 5) (interact=+,)


  vertex 6 (group=2,tag=new,)
     6 in_edge:(1, 6) (interact=+,)
     6 in_edge:(0, 6) (interact=+,)
     6 in_edge:(6, 6) (interact=+,)
      6 out_edge:(6, 6) (interact=+,)



nodes count: 7 
edges count: 8 

we merge node 5 with 6 
  vertex 0 (group=1,tag=keep,)
      0 out_edge:(0, 5) (interact=+,)


  vertex 1 (group=1,tag=keep,)
      1 out_edge:(1, 5) (interact=+,)


  vertex 2 (group=1,tag=keep,)
      2 out_edge:(2, 5) (interact=+,)


  vertex 3 (group=1,tag=keep,)
      3 out_edge:(3, 5) (interact=+,)


  vertex 4 (group=1,tag=keep,)
      4 out_edge:(4, 5) (interact=+,)


  vertex 5 (group=1,tag=keep,)
     5 in_edge:(1, 5) (interact=+,)
     5 in_edge:(0, 5) (interact=+,)
     5 in_edge:(5, 5) (interact=+,)
     5 in_edge:(2, 5) (interact=+,)
     5 in_edge:(3, 5) (interact=+,)
     5 in_edge:(4, 5) (interact=+,)
      5 out_edge:(5, 5) (interact=+,)



nodes count: 6 
edges count: 6 

In [29]:
"""
   how to merge 2 graphs based on node property values
"""

import graph_tool as gt

 
    
def defineGraph1():
    
  gr = gt.Graph() 
  gr.vp.tag=gr.new_vertex_property("string")
  gr.vp.uri=gr.new_vertex_property("string")
  gr.vp.alias=gr.new_vertex_property("string")
  gr.vp.biopaxType=gr.new_vertex_property("string")    
  
  v0=gr.add_vertex() 
  v1=gr.add_vertex() 
  v2=gr.add_vertex() 
  v3=gr.add_vertex() 
  v4=gr.add_vertex() 
  v5=gr.add_vertex()

  gr.add_edge(v0,v2) 
  gr.add_edge(v1,v3) 
  gr.add_edge(v2,v4) 
  gr.add_edge(v3,v2) 
  gr.add_edge(v4,v5) 
  

  for v in gr.vertices(): 
      gr.vp["tag"][v]="graph1"

  gr.vp["uri"][v1]="http://www.reactome.org/biopax/56/71387#SmallMolecule28"
  gr.vp["alias"][v1]="Adenosine 5'-diphosphate;ADP"
  gr.vp["biopaxType"][v1]="SmallMolecule"
  

  gr.vp["uri"][v2]="http://www.reactome.org/biopax/56/71387#Protein130"
  gr.vp["alias"][v2]="phosphorylated glycogen synthase 1;phospho-GYS1;p-S-GYS1"
  gr.vp["biopaxType"][v2]="Protein"


  gr.vp["uri"][v3]="http://www.reactome.org/biopax/56/71387#Protein5540"
  gr.vp["alias"][v3]="p-S-GYS1X;pS_GYS1X"
  gr.vp["biopaxType"][v3]="Protein"

  return gr


 
def defineGraph2():
    
  gr = gt.Graph() 
  gr.vp.tag=gr.new_vertex_property("string")
  gr.vp.uri=gr.new_vertex_property("string")
  gr.vp.alias=gr.new_vertex_property("string")
  gr.vp.biopaxType=gr.new_vertex_property("string")    
 
  v0=gr.add_vertex() 
  v1=gr.add_vertex() 
  v2=gr.add_vertex() 
  v3=gr.add_vertex() 
  v4=gr.add_vertex() 
  v5=gr.add_vertex()

  gr.add_edge(v1,v0) 
  gr.add_edge(v1,v2) 
  gr.add_edge(v4,v3) 
  gr.add_edge(v2,v4) 
  gr.add_edge(v0,v2) 
  gr.add_edge(v1,v5) 
  

  for v in gr.vertices(): 
      gr.vp["tag"][v]="graph2"

  gr.vp["uri"][v1]="http://www.reactome.org/biopax/56/71387#SmallMolecule28"
  gr.vp["alias"][v1]="Adenosine 5'-diphosphate;ADP"
  gr.vp["biopaxType"][v1]="SmallMolecule"
  

  gr.vp["uri"][v2]="http://www.reactome.org/biopax/56/71387#Protein130"
  gr.vp["alias"][v2]="p-S-GYS1"
  gr.vp["biopaxType"][v2]="Protein"


  gr.vp["uri"][v3]="http://www.reactome.org/biopax/56/71387#Protein129"
  gr.vp["alias"][v3]="oligo((1,4)-alpha-glucosyl) GN-1;oligo((1,4)-alpha-glucosyl) GYG1"
  gr.vp["biopaxType"][v3]="Protein"

  gr.vp["uri"][v4]="http://www.reactome.org/biopax/56/71387#Protein75175"
  gr.vp["alias"][v4]="pS_GYS1X"
  gr.vp["biopaxType"][v4]="Protein"

  return gr



  #for v in g1.vertices(): 
 
 

g1=defineGraph1()
g2=defineGraph2()
#properties=["uri"]
properties=["alias"]
##todo :on alias (list)
g3=p2g.extract.merge_graph(g1,g2,properties)
print("-------------")
print("first graph\n")
p2g.graph_explore.describe_graph(g1)   
print("-------------")      
print("-------------")
print("second graph\n")
p2g.graph_explore.describe_graph(g2)   
print("-------------")      
print("-------------")
print("merged graph\n")
print("-------------")
p2g.graph_explore.describe_graph(g3)     


 
-------------
first graph

  vertex 0 (tag=graph1,uri=,alias=,biopaxType=,)
      0 out_edge:(0, 5) ()


  vertex 1 (tag=graph1,uri=,alias=,biopaxType=,)
     1 in_edge:(5, 1) ()
      1 out_edge:(1, 2) ()


  vertex 2 (tag=graph1,uri=,alias=,biopaxType=,)
     2 in_edge:(1, 2) ()


  vertex 3 (tag=graph2,uri=,alias=,biopaxType=,)
     3 in_edge:(4, 3) ()
      3 out_edge:(3, 5) ()


  vertex 4 (tag=graph1,uri=http://www.reactome.org/biopax/56/71387#SmallMolecule28,alias=Adenosine 5'-diphosphate;ADP,biopaxType=SmallMolecule,)
      4 out_edge:(4, 3) ()
      4 out_edge:(4, 5) ()
      4 out_edge:(4, 8) ()
      4 out_edge:(4, 7) ()


  vertex 5 (tag=graph1,uri=http://www.reactome.org/biopax/56/71387#Protein130,alias=phosphorylated glycogen synthase 1;phospho-GYS1;p-S-GYS1,biopaxType=Protein,)
     5 in_edge:(3, 5) ()
     5 in_edge:(0, 5) ()
     5 in_edge:(4, 5) ()
     5 in_edge:(7, 5) ()
      5 out_edge:(5, 7) ()
      5 out_edge:(5, 1) ()


  vertex 6 (tag=graph2,uri=http://www.reactome.org/biopax/56/71387#Protein129,alias=oligo((1,4)-alpha-glucosyl) GN-1;oligo((1,4)-alpha-glucosyl) GYG1,biopaxType=Protein,)
     6 in_edge:(7, 6) ()


  vertex 7 (tag=graph1,uri=http://www.reactome.org/biopax/56/71387#Protein5540,alias=p-S-GYS1X;pS_GYS1X,biopaxType=Protein,)
     7 in_edge:(4, 7) ()
     7 in_edge:(5, 7) ()
      7 out_edge:(7, 6) ()
      7 out_edge:(7, 5) ()


  vertex 8 (tag=graph2,uri=,alias=,biopaxType=,)
     8 in_edge:(4, 8) ()



-------------
-------------
second graph

  vertex 0 (tag=graph2,uri=,alias=,biopaxType=,)
     0 in_edge:(1, 0) ()
      0 out_edge:(0, 2) ()


  vertex 1 (tag=graph2,uri=http://www.reactome.org/biopax/56/71387#SmallMolecule28,alias=Adenosine 5'-diphosphate;ADP,biopaxType=SmallMolecule,)
      1 out_edge:(1, 0) ()
      1 out_edge:(1, 2) ()
      1 out_edge:(1, 5) ()


  vertex 2 (tag=graph2,uri=http://www.reactome.org/biopax/56/71387#Protein130,alias=p-S-GYS1,biopaxType=Protein,)
     2 in_edge:(1, 2) ()
     2 in_edge:(0, 2) ()
      2 out_edge:(2, 4) ()


  vertex 3 (tag=graph2,uri=http://www.reactome.org/biopax/56/71387#Protein129,alias=oligo((1,4)-alpha-glucosyl) GN-1;oligo((1,4)-alpha-glucosyl) GYG1,biopaxType=Protein,)
     3 in_edge:(4, 3) ()


  vertex 4 (tag=graph2,uri=http://www.reactome.org/biopax/56/71387#Protein75175,alias=pS_GYS1X,biopaxType=Protein,)
     4 in_edge:(2, 4) ()
      4 out_edge:(4, 3) ()


  vertex 5 (tag=graph2,uri=,alias=,biopaxType=,)
     5 in_edge:(1, 5) ()



-------------
-------------
merged graph

-------------
  vertex 0 (tag=graph1,uri=,alias=,biopaxType=,)
      0 out_edge:(0, 5) ()


  vertex 1 (tag=graph1,uri=,alias=,biopaxType=,)
     1 in_edge:(5, 1) ()
      1 out_edge:(1, 2) ()


  vertex 2 (tag=graph1,uri=,alias=,biopaxType=,)
     2 in_edge:(1, 2) ()


  vertex 3 (tag=graph2,uri=,alias=,biopaxType=,)
     3 in_edge:(4, 3) ()
      3 out_edge:(3, 5) ()


  vertex 4 (tag=graph1,uri=http://www.reactome.org/biopax/56/71387#SmallMolecule28,alias=Adenosine 5'-diphosphate;ADP,biopaxType=SmallMolecule,)
      4 out_edge:(4, 3) ()
      4 out_edge:(4, 5) ()
      4 out_edge:(4, 8) ()
      4 out_edge:(4, 7) ()


  vertex 5 (tag=graph1,uri=http://www.reactome.org/biopax/56/71387#Protein130,alias=phosphorylated glycogen synthase 1;phospho-GYS1;p-S-GYS1,biopaxType=Protein,)
     5 in_edge:(3, 5) ()
     5 in_edge:(0, 5) ()
     5 in_edge:(4, 5) ()
     5 in_edge:(7, 5) ()
      5 out_edge:(5, 7) ()
      5 out_edge:(5, 1) ()


  vertex 6 (tag=graph2,uri=http://www.reactome.org/biopax/56/71387#Protein129,alias=oligo((1,4)-alpha-glucosyl) GN-1;oligo((1,4)-alpha-glucosyl) GYG1,biopaxType=Protein,)
     6 in_edge:(7, 6) ()


  vertex 7 (tag=graph1,uri=http://www.reactome.org/biopax/56/71387#Protein5540,alias=p-S-GYS1X;pS_GYS1X,biopaxType=Protein,)
     7 in_edge:(4, 7) ()
     7 in_edge:(5, 7) ()
      7 out_edge:(7, 6) ()
      7 out_edge:(7, 5) ()


  vertex 8 (tag=graph2,uri=,alias=,biopaxType=,)
     8 in_edge:(4, 8) ()



Out[29]:
"  vertex 0 (tag=graph1,uri=,alias=,biopaxType=,)\n      0 out_edge:(0, 5) ()\n\n\n  vertex 1 (tag=graph1,uri=,alias=,biopaxType=,)\n     1 in_edge:(5, 1) ()\n      1 out_edge:(1, 2) ()\n\n\n  vertex 2 (tag=graph1,uri=,alias=,biopaxType=,)\n     2 in_edge:(1, 2) ()\n\n\n  vertex 3 (tag=graph2,uri=,alias=,biopaxType=,)\n     3 in_edge:(4, 3) ()\n      3 out_edge:(3, 5) ()\n\n\n  vertex 4 (tag=graph1,uri=http://www.reactome.org/biopax/56/71387#SmallMolecule28,alias=Adenosine 5'-diphosphate;ADP,biopaxType=SmallMolecule,)\n      4 out_edge:(4, 3) ()\n      4 out_edge:(4, 5) ()\n      4 out_edge:(4, 8) ()\n      4 out_edge:(4, 7) ()\n\n\n  vertex 5 (tag=graph1,uri=http://www.reactome.org/biopax/56/71387#Protein130,alias=phosphorylated glycogen synthase 1;phospho-GYS1;p-S-GYS1,biopaxType=Protein,)\n     5 in_edge:(3, 5) ()\n     5 in_edge:(0, 5) ()\n     5 in_edge:(4, 5) ()\n     5 in_edge:(7, 5) ()\n      5 out_edge:(5, 7) ()\n      5 out_edge:(5, 1) ()\n\n\n  vertex 6 (tag=graph2,uri=http://www.reactome.org/biopax/56/71387#Protein129,alias=oligo((1,4)-alpha-glucosyl) GN-1;oligo((1,4)-alpha-glucosyl) GYG1,biopaxType=Protein,)\n     6 in_edge:(7, 6) ()\n\n\n  vertex 7 (tag=graph1,uri=http://www.reactome.org/biopax/56/71387#Protein5540,alias=p-S-GYS1X;pS_GYS1X,biopaxType=Protein,)\n     7 in_edge:(4, 7) ()\n     7 in_edge:(5, 7) ()\n      7 out_edge:(7, 6) ()\n      7 out_edge:(7, 5) ()\n\n\n  vertex 8 (tag=graph2,uri=,alias=,biopaxType=,)\n     8 in_edge:(4, 8) ()\n\n\n"
In [30]:
gr3=p2g.extract.merge_graph(g1,g2,properties)
gr3b=gr3.copy()
gr4=p2g.extract.merge_node_by_property(gr3b,["tag"])
print("-------------")
print("first graph\n")
p2g.graph_explore.describe_graph(gr3)   
print("resulting graph\n")
p2g.graph_explore.describe_graph(gr4)   
print("-------------")         
#TODO remove self edge
#TODO remove double edge
-------------
first graph

  vertex 0 (tag=graph1,uri=,alias=,biopaxType=,)
      0 out_edge:(0, 7) ()


  vertex 1 (tag=graph1,uri=,alias=,biopaxType=,)
     1 in_edge:(7, 1) ()
      1 out_edge:(1, 2) ()


  vertex 2 (tag=graph1,uri=,alias=,biopaxType=,)
     2 in_edge:(1, 2) ()


  vertex 3 (tag=graph2,uri=,alias=,biopaxType=,)
     3 in_edge:(6, 3) ()
      3 out_edge:(3, 7) ()


  vertex 4 (tag=graph2,uri=,alias=,biopaxType=,)
     4 in_edge:(6, 4) ()


  vertex 5 (tag=graph2,uri=,alias=,biopaxType=,)
     5 in_edge:(6, 5) ()
      5 out_edge:(5, 7) ()


  vertex 6 (tag=graph1,uri=http://www.reactome.org/biopax/56/71387#SmallMolecule28,alias=Adenosine 5'-diphosphate;ADP,biopaxType=SmallMolecule,)
      6 out_edge:(6, 5) ()
      6 out_edge:(6, 7) ()
      6 out_edge:(6, 10) ()
      6 out_edge:(6, 3) ()
      6 out_edge:(6, 4) ()
      6 out_edge:(6, 9) ()


  vertex 7 (tag=graph1,uri=http://www.reactome.org/biopax/56/71387#Protein130,alias=phosphorylated glycogen synthase 1;phospho-GYS1;p-S-GYS1,biopaxType=Protein,)
     7 in_edge:(3, 7) ()
     7 in_edge:(0, 7) ()
     7 in_edge:(6, 7) ()
     7 in_edge:(5, 7) ()
     7 in_edge:(9, 7) ()
      7 out_edge:(7, 9) ()
      7 out_edge:(7, 1) ()


  vertex 8 (tag=graph2,uri=http://www.reactome.org/biopax/56/71387#Protein129,alias=oligo((1,4)-alpha-glucosyl) GN-1;oligo((1,4)-alpha-glucosyl) GYG1,biopaxType=Protein,)
     8 in_edge:(9, 8) ()


  vertex 9 (tag=graph1,uri=http://www.reactome.org/biopax/56/71387#Protein5540,alias=p-S-GYS1X;pS_GYS1X,biopaxType=Protein,)
     9 in_edge:(6, 9) ()
     9 in_edge:(7, 9) ()
      9 out_edge:(9, 8) ()
      9 out_edge:(9, 7) ()


  vertex 10 (tag=graph2,uri=,alias=,biopaxType=,)
     10 in_edge:(6, 10) ()



resulting graph

  vertex 0 (tag=graph1,uri=http://www.reactome.org/biopax/56/71387#Protein5540,alias=p-S-GYS1X;pS_GYS1X,biopaxType=Protein,)
     0 in_edge:(1, 0) ()
     0 in_edge:(0, 0) ()
      0 out_edge:(0, 0) ()
      0 out_edge:(0, 1) ()


  vertex 1 (tag=graph2,uri=,alias=,biopaxType=,)
     1 in_edge:(0, 1) ()
      1 out_edge:(1, 0) ()



-------------
In [ ]: