Hi,

Thanks for the bug report, and the succinct example!

Could you please open an issue for it in gitlab, so we can keep track of
this more easily?

Thanks!

Best,
Tiago

Am 28.04.20 um 15:26 schrieb [email protected]:
> Hi,
> 
>  
> 
> There seems to be problem with get_edges_prob for the layered SBM. Here
> is a minimal example:
> 
>  
> 
> import graph_tool.all as gt
> 
> import numpy as np
> 
> gr=gt.generate_sbm(b=np.array([0]*500+[1]*500),probs=np.array([[10000,200],[200,10000]]))
> 
> etype=gr.new_edge_property('int')
> 
> gr.ep.etype=etype
> 
> t=0
> 
> for e in gr.edges():
> 
>     gr.ep.etype[e]=t%4
> 
>     t+=1
> 
> state = gt.minimize_nested_blockmodel_dl(gr,
> deg_corr=True,layers=True,state_args=dict(ec=gr.ep.etype,layers=True))
> 
> print(state.get_edges_prob(missing=[[2,32,0]],spurious=[]))
> 
> print(state.get_edges_prob(missing=[[2,32,0],[3,4,2]],spurious=[]))
> 
> print(state.get_edges_prob(missing=[[2,32,0],[3,4,2],[36,7,0]],spurious=[]))
> 
> pr=state.get_edges_prob(missing=[[2,32,0],[3,4,2]],spurious=gr.get_edges([gr.ep.etype])[:3])
> 
>  
> 
> Output:
> 
> 0.0
> 
> -7.883180576649465
> 
> -7.883180576649465
> 
> ---------------------------------------------------------------------------
> 
> ValueError                                Traceback (most recent call last)
> 
> <ipython-input-11-1f73a43d95dd> in <module>
> 
>      12 print(state.get_edges_prob(missing=[[2,32,0],[3,4,2]],spurious=[]))
> 
>      13
> print(state.get_edges_prob(missing=[[2,32,0],[3,4,2],[36,7,0]],spurious=[]))
> 
> ---> 14
> pr=state.get_edges_prob(missing=[[2,32,0],[3,4,2]],spurious=gr.get_edges([gr.ep.etype])[:3])
> 
>  
> 
> /usr/lib/python3/dist-packages/graph_tool/inference/nested_blockmodel.py
> in get_edges_prob(self, missing, spurious, entropy_args)
> 
>     499                     lstate._state.clear_egroups()
> 
>     500
> 
> --> 501             L += lstate.get_edges_prob(missing, spurious,
> entropy_args=eargs)
> 
>     502             if isinstance(self.levels[0], LayeredBlockState):
> 
>     503                 missing = [(lstate.b[u], lstate.b[v], l_) for u,
> v, l_ in missing]
> 
>  
> 
> /usr/lib/python3/dist-packages/graph_tool/inference/layered_blockmodel.py in
> get_edges_prob(self, missing, spurious, entropy_args)
> 
>     896                 if e is None:
> 
>     897                     raise ValueError("edge not found: (%d, %d,
> %d)" % \
> 
> --> 898                                      (int(u), int(v), l[0]))
> 
>     899
> 
>     900                 if state.is_weighted:
> 
>  
> 
> ValueError: edge not found: (3, 4, 2)
> 
>  
> 
> The error occurs only when spurious edges are included but even without
> spurious edges the outputs above seem to be inaccurate.  I tried to
> resolve the issue myself but couldn’t make it work.
> 
>  
> 
> Best wishes,
> 
> Anatol
> 
> 
> _______________________________________________
> graph-tool mailing list
> [email protected]
> https://lists.skewed.de/mailman/listinfo/graph-tool
> 


-- 
Tiago de Paula Peixoto <[email protected]>

Attachment: signature.asc
Description: OpenPGP digital signature

_______________________________________________
graph-tool mailing list
[email protected]
https://lists.skewed.de/mailman/listinfo/graph-tool

Reply via email to