Commit 990b4739 authored by Tiago Peixoto's avatar Tiago Peixoto

Fix "correlated" rewiring mode

This fixes a bug in the "correlated" mode in random_rewire().
parent bad74126
...@@ -245,13 +245,18 @@ struct graph_rewire ...@@ -245,13 +245,18 @@ struct graph_rewire
typedef typename graph_traits<Graph>::edge_descriptor edge_t; typedef typename graph_traits<Graph>::edge_descriptor edge_t;
vector<edge_t> edges; vector<edge_t> edges;
typedef random_permutation_iterator<typename vector<edge_t>::iterator, vector<size_t> edge_pos;
typedef random_permutation_iterator<typename vector<size_t>::iterator,
rng_t> rng_t>
random_edge_iter; random_edge_iter;
typename graph_traits<Graph>::edge_iterator e, e_end; typename graph_traits<Graph>::edge_iterator e, e_end;
for (tie(e, e_end) = boost::edges(g); e != e_end; ++e) for (tie(e, e_end) = boost::edges(g); e != e_end; ++e)
{
edges.push_back(*e); edges.push_back(*e);
edge_pos.push_back(edge_pos.size());
}
RewireStrategy<Graph, EdgeIndexMap, CorrProb, BlockDeg> RewireStrategy<Graph, EdgeIndexMap, CorrProb, BlockDeg>
rewire(g, edge_index, edges, corr_prob, bd, rng); rewire(g, edge_index, edges, corr_prob, bd, rng);
...@@ -266,8 +271,8 @@ struct graph_rewire ...@@ -266,8 +271,8 @@ struct graph_rewire
for (size_t i = 0; i < niter; ++i) for (size_t i = 0; i < niter; ++i)
{ {
random_edge_iter random_edge_iter
ei_begin(edges.begin(), edges.end(), rng), ei_begin(edge_pos.begin(), edge_pos.end(), rng),
ei_end(edges.end(), edges.end(), rng); ei_end(edge_pos.end(), edge_pos.end(), rng);
// for each edge rewire its source or target // for each edge rewire its source or target
for (random_edge_iter ei = ei_begin; ei != ei_end; ++ei) for (random_edge_iter ei = ei_begin; ei != ei_end; ++ei)
...@@ -276,7 +281,7 @@ struct graph_rewire ...@@ -276,7 +281,7 @@ struct graph_rewire
if (verbose) if (verbose)
print_progress(i, niter, e_pos, no_sweep ? 1 : edges.size(), print_progress(i, niter, e_pos, no_sweep ? 1 : edges.size(),
str); str);
bool success = rewire(e_pos, self_loops, parallel_edges); bool success = rewire(*ei, self_loops, parallel_edges);
if (!success) if (!success)
++pcount; ++pcount;
...@@ -492,11 +497,9 @@ public: ...@@ -492,11 +497,9 @@ public:
base_t; base_t;
typedef Graph graph_t; typedef Graph graph_t;
typedef EdgeIndexMap edge_index_t;
typedef typename graph_traits<Graph>::vertex_descriptor vertex_t; typedef typename graph_traits<Graph>::vertex_descriptor vertex_t;
typedef typename graph_traits<Graph>::edge_descriptor edge_t; typedef typename graph_traits<Graph>::edge_descriptor edge_t;
typedef typename EdgeIndexMap::value_type index_t;
CorrelatedRewireStrategy(Graph& g, EdgeIndexMap edge_index, CorrelatedRewireStrategy(Graph& g, EdgeIndexMap edge_index,
vector<edge_t>& edges, CorrProb, BlockDeg, vector<edge_t>& edges, CorrProb, BlockDeg,
...@@ -506,40 +509,42 @@ public: ...@@ -506,40 +509,42 @@ public:
for (size_t ei = 0; ei < base_t::_edges.size(); ++ei) for (size_t ei = 0; ei < base_t::_edges.size(); ++ei)
{ {
// For undirected graphs, there is no difference between source and // For undirected graphs, there is no difference between source and
// target, and each edge will appear _twice_ in the lists below, // target, and each edge will appear _twice_ in the list below,
// once for each different ordering of source and target. // once for each different ordering of source and target.
edge_t& e = base_t::_edges[ei]; edge_t& e = base_t::_edges[ei];
_edges_by_target[make_pair(in_degreeS()(target(e, _g), _g), vertex_t t = target(e, _g);
out_degree(target(e, _g), _g))] deg_t tdeg = make_pair(in_degreeS()(t, _g), out_degree(t, _g));
.push_back(make_pair(ei, false)); _edges_by_target[tdeg].push_back(make_pair(ei, false));
if (!is_directed::apply<Graph>::type::value) if (!is_directed::apply<Graph>::type::value)
{ {
_edges_by_target[make_pair(in_degreeS()(source(e, _g), _g), t = source(e, _g);
out_degree(source(e, _g), _g))] tdeg = make_pair(in_degreeS()(t, _g), out_degree(t, _g));
.push_back(make_pair(ei, true)); _edges_by_target[tdeg].push_back(make_pair(ei, true));
} }
} }
} }
pair<size_t,bool> get_target_edge(size_t ei) pair<size_t,bool> get_target_edge(size_t ei)
{ {
pair<size_t, size_t> deg = edge_t& e = base_t::_edges[ei];
make_pair(in_degreeS()(target(base_t::_edges[ei], _g), _g), vertex_t t = target(e, _g);
out_degree(target(base_t::_edges[ei], _g), _g)); deg_t tdeg = make_pair(in_degreeS()(t, _g), out_degree(t, _g));
edges_by_end_deg_t& edges = _edges_by_target; typename edges_by_end_deg_t::mapped_type& elist =
typename edges_by_end_deg_t::mapped_type& elist = edges[deg]; _edges_by_target[tdeg];
tr1::uniform_int<> sample(0, elist.size() - 1); tr1::uniform_int<> sample(0, elist.size() - 1);
return elist[sample(base_t::_rng)]; return elist[sample(base_t::_rng)];
} }
void update_edge(size_t e, bool insert) {} void update_edge(size_t e, bool insert) {}
private: private:
typedef tr1::unordered_map<pair<size_t, size_t>, typedef pair<size_t, size_t> deg_t;
vector<pair<index_t, bool> >, typedef tr1::unordered_map<deg_t,
hash<pair<size_t, size_t> > > vector<pair<size_t, bool> >,
hash<deg_t> >
edges_by_end_deg_t; edges_by_end_deg_t;
edges_by_end_deg_t _edges_by_target; edges_by_end_deg_t _edges_by_target;
......
...@@ -132,23 +132,23 @@ def pagerank(g, damping=0.85, pers=None, weight=None, prop=None, epsilon=1e-6, ...@@ -132,23 +132,23 @@ def pagerank(g, damping=0.85, pers=None, weight=None, prop=None, epsilon=1e-6,
>>> g = gt.random_graph(100, lambda: (poisson(3), poisson(3))) >>> g = gt.random_graph(100, lambda: (poisson(3), poisson(3)))
>>> pr = gt.pagerank(g) >>> pr = gt.pagerank(g)
>>> print pr.a >>> print pr.a
[ 0.00867754 0.00729246 0.00363279 0.00668265 0.0015 0.00859964 [ 0.00865316 0.0054067 0.00406312 0.00426668 0.0015 0.00991696
0.00449637 0.00961946 0.01295288 0.00882362 0.00719256 0.00280697 0.00550065 0.00936397 0.00347917 0.00731864 0.00689843 0.00286274
0.00518114 0.01047904 0.00569656 0.00519058 0.00759745 0.00700835 0.00508731 0.01020047 0.00562247 0.00584915 0.02457086 0.00438568
0.00870244 0.00522561 0.00233159 0.00236035 0.0015 0.00255374 0.0057385 0.00621745 0.001755 0.0045073 0.0015 0.00225167
0.00872139 0.00227483 0.00686341 0.001755 0.00488567 0.01045994 0.00698342 0.00206302 0.01094466 0.001925 0.00710093 0.00519877
0.00393206 0.00988283 0.01376133 0.00721883 0.01429166 0.00752748 0.00460646 0.00994648 0.01005248 0.00904629 0.00676221 0.00789208
0.01846797 0.00674401 0.00412138 0.00842639 0.0015 0.00233159 0.00933103 0.00301154 0.00264951 0.00842812 0.0015 0.00191034
0.00306271 0.01902149 0.0099247 0.00428981 0.00215072 0.01123842 0.00594069 0.00884372 0.00453417 0.00388987 0.00317433 0.0086067
0.00236035 0.00768803 0.00463719 0.01130437 0.00392423 0.00491263 0.00385394 0.00672702 0.00258411 0.01468262 0.00454 0.00381159
0.00899519 0.00680983 0.0091988 0.00459334 0.00809094 0.00881614 0.00402607 0.00451133 0.00480966 0.00811557 0.00571949 0.00317433
0.01381946 0.00489171 0.00425249 0.01957383 0.00708763 0.0015 0.00856838 0.00280517 0.00280563 0.00906324 0.00614421 0.0015
0.00418613 0.00607306 0.01287535 0.00639268 0.01578391 0.0015 0.00292034 0.00479769 0.00552694 0.00604799 0.0115922 0.0015
0.01541987 0.00860721 0.01378758 0.0173314 0.00775072 0.00247939 0.00676183 0.00695336 0.01023352 0.01737541 0.00451443 0.00197688
0.00524088 0.00686587 0.00436895 0.00755964 0.00708251 0.0015 0.00553866 0.00486233 0.0078653 0.00867599 0.01248092 0.0015
0.00226438 0.00184085 0.00555171 0.01159494 0.01297596 0.00460887 0.00399605 0.00399605 0.00881571 0.00638008 0.01056944 0.00353724
0.00406717 0.00578091 0.00548516 0.01197071 0.00674202 0.01011666 0.00249869 0.00684919 0.00241374 0.01061397 0.00673569 0.00590937
0.01072786 0.00646937 0.01430012 0.01483996] 0.01004638 0.00331612 0.00926359 0.00460809]
Now with a personalization vector, and edge weights: Now with a personalization vector, and edge weights:
...@@ -159,23 +159,23 @@ def pagerank(g, damping=0.85, pers=None, weight=None, prop=None, epsilon=1e-6, ...@@ -159,23 +159,23 @@ def pagerank(g, damping=0.85, pers=None, weight=None, prop=None, epsilon=1e-6,
>>> p.a /= p.a.sum() >>> p.a /= p.a.sum()
>>> pr = gt.pagerank(g, pers=p, weight=w) >>> pr = gt.pagerank(g, pers=p, weight=w)
>>> print pr.a >>> print pr.a
[ 0.00761942 0.00761689 0.00418938 0.00947758 0.00092715 0.00349991 [ 0.00712999 0.00663336 0.00685722 0.00402663 0.00092715 0.01021926
0.00811226 0.00448968 0.01209889 0.01384828 0.00600036 0.00221745 0.00269502 0.0073301 0.00449892 0.00582793 0.00580542 0.00275149
0.00432908 0.01036427 0.00536132 0.00692364 0.00575216 0.00750936 0.00676363 0.01157972 0.00486918 0.00616345 0.02506695 0.00607967
0.00924536 0.00461255 0.00422277 0.00055639 0.00250025 0.00289125 0.00553375 0.00359075 0.00293808 0.00362247 0.00250025 0.00186946
0.00925617 0.003356 0.00642017 0.00298276 0.00571097 0.01115541 0.00895516 0.00318147 0.01489786 0.00312436 0.0074751 0.0040342
0.00452616 0.01670105 0.01788592 0.00580217 0.01350007 0.00837655 0.006254 0.00687051 0.0098073 0.01076278 0.00887077 0.00806759
0.01535733 0.00497981 0.00436008 0.01324374 0.00148972 0.00287379 0.00969532 0.00252648 0.00278688 0.00972144 0.00148972 0.00215428
0.00408663 0.02785282 0.00790422 0.00491795 0.00070143 0.00789247 0.00713602 0.00559849 0.00495517 0.00457118 0.00323767 0.01257406
0.00033551 0.00777089 0.00278393 0.00801468 0.00452296 0.00378295 0.00120179 0.00514838 0.00130655 0.01724465 0.00343819 0.00420962
0.00642244 0.00698618 0.01069855 0.0019177 0.00742151 0.00872767 0.00297617 0.00588287 0.00657206 0.00775082 0.00758217 0.00433776
0.01868187 0.00442359 0.00593616 0.01517386 0.00712472 0.00238803 0.00576829 0.00464595 0.00307274 0.00585795 0.00745881 0.00238803
0.00468324 0.0024983 0.011788 0.00577489 0.01242015 0.00300867 0.00230431 0.00437046 0.00492464 0.00275414 0.01524646 0.00300867
0.01390361 0.00796192 0.00822753 0.01062897 0.00815637 0.00332914 0.00816665 0.00548853 0.00874738 0.01871498 0.00216776 0.00245196
0.00911336 0.00915715 0.00945334 0.00880299 0.00758402 0.0009367 0.00308878 0.00646323 0.01287978 0.00911384 0.01628604 0.0009367
0.00378413 0.00174124 0.00283594 0.00929262 0.01090867 0.00460206 0.00222119 0.00864202 0.01199119 0.01126539 0.01086846 0.00309224
0.00341061 0.00699703 0.00232131 0.01244958 0.00731098 0.01288061 0.0020319 0.00659422 0.00226965 0.0134399 0.01094141 0.00732916
0.00820259 0.00430521 0.01633379 0.0119308 ] 0.00489314 0.0030402 0.00783914 0.00278588]
References References
---------- ----------
...@@ -259,23 +259,23 @@ def betweenness(g, vprop=None, eprop=None, weight=None, norm=True): ...@@ -259,23 +259,23 @@ def betweenness(g, vprop=None, eprop=None, weight=None, norm=True):
>>> g = gt.random_graph(100, lambda: (poisson(3), poisson(3))) >>> g = gt.random_graph(100, lambda: (poisson(3), poisson(3)))
>>> vb, eb = gt.betweenness(g) >>> vb, eb = gt.betweenness(g)
>>> print vb.a >>> print vb.a
[ 0.02412512 0.08233748 0.01789612 0.03997773 0. 0.03476439 [ 0.04889806 0.07181892 0.0256799 0.02885791 0. 0.05060927
0.03490215 0.02812729 0.05385124 0.01614861 0.01894254 0.03552189 0.04490836 0.03763462 0.02033383 0.03163202 0.02641248 0.03171598
0.01648793 0.02743878 0.02243743 0.0052126 0. 0.02648145 0.03771112 0.02194663 0.0374907 0.01072567 0. 0.03079281
0.05045875 0.01670867 0.00027069 0.00235053 0. 0.00424986 0.05409258 0.00163434 0.00051978 0.01045902 0. 0.00796784
0.02153982 0.01635659 0.03177692 0.00152088 0.02099129 0.05311383 0.0494527 0.00647576 0.03708252 0.00304503 0.0663657 0.03903257
0.00802715 0. 0.06129706 0.03148129 0.10265395 0.02762436 0.03305169 0. 0.07787098 0.03938866 0.08577116 0.020183
0.05323276 0.028209 0.01641328 0.03547918 0. 0.00998142 0.06024004 0.01004935 0.0443127 0.06397736 0. 0.00363548
0.01043084 0.06810444 0.01435047 0.02884138 0. 0.02336079 0.01742486 0.03216543 0.01918144 0.02059159 0. 0.01476213
0. 0.09098673 0.02911358 0.05909676 0.01314448 0.0304931 0. 0.0466751 0.01072612 0.10288046 0.00563973 0.03850413
0.01315283 0.03795536 0.02756845 0.020655 0.00268182 0.0151298 0.00629595 0.01292137 0.0537963 0.04454985 0.01227018 0.00729488
0.05597887 0.04095171 0.00853146 0.06176456 0.03165429 0. 0.0114488 0.02092959 0.02308238 0.00712703 0.02193975 0.03823342 0.
0.05435076 0.04046437 0.0122299 0.03417369 0. 0.05979601 0.00995364 0.04023839 0.0312708 0.0111312 0.00228516 0.
0.01502672 0.05908044 0.09567821 0.01206665 0.01259951 0.02381255 0.09659583 0.01327402 0.05792071 0.08606828 0.0143541 0.00221604
0. 0.01840359 0.00708731 0. 0. 0.01274922 0.02144698 0. 0.04023879 0.00715758 0. 0.
0.00385357 0. 0.11470908 0.04903743 0.03336991 0.01270614 0.02348452 0.00760922 0.01486521 0.08132792 0.0382674 0.03078318
0.00448173 0.02163365 0.06685948 0.01032924 0.02400925 0. 0.0300603 0.00430209 0.01772787 0.02280666 0.0373011 0.03077511 0.02871265
0.03220004 0.03932736] 0. 0.01044655 0.04415432 0.04447525]
References References
---------- ----------
...@@ -341,7 +341,7 @@ def central_point_dominance(g, betweenness): ...@@ -341,7 +341,7 @@ def central_point_dominance(g, betweenness):
>>> g = gt.random_graph(100, lambda: (poisson(3), poisson(3))) >>> g = gt.random_graph(100, lambda: (poisson(3), poisson(3)))
>>> vb, eb = gt.betweenness(g) >>> vb, eb = gt.betweenness(g)
>>> print gt.central_point_dominance(g, vb) >>> print gt.central_point_dominance(g, vb)
0.0888588565184 0.0766473408634
References References
---------- ----------
...@@ -419,25 +419,25 @@ def eigenvector(g, weight=None, vprop=None, epsilon=1e-6, max_iter=None): ...@@ -419,25 +419,25 @@ def eigenvector(g, weight=None, vprop=None, epsilon=1e-6, max_iter=None):
>>> w.a = random(g.num_edges()) * 42 >>> w.a = random(g.num_edges()) * 42
>>> x = gt.eigenvector(g, w) >>> x = gt.eigenvector(g, w)
>>> print x[0] >>> print x[0]
0.0144966901652 0.0160851991895
>>> print x[1].a >>> print x[1].a
[ 0.06930562 0.15259089 0.02186899 0.16605389 0. 0.03329417 [ 0.1376411 0.07207366 0.02727508 0.05805304 0. 0.10690994
0.15389839 0.05956241 0.02364241 0.14555449 0.12223866 0.04284837 0.04315491 0.01040908 0.02300252 0.08874163 0.04968119 0.06718114
0.02930074 0.12362235 0.08914056 0.06613553 0.04127041 0.06894616 0.05526028 0.20449371 0.02337425 0.07581173 0.19993899 0.14718912
0.11768146 0.10576438 0.03184658 0.01097733 0. 0.00244834 0.08464664 0.08474977 0. 0.04843894 0. 0.0089388
0.12373674 0.04521477 0.06729261 0. 0.0119752 0.09613809 0.16831573 0.00138653 0.11741616 0. 0.13455019 0.03642682
0.05371652 0.0760725 0.26342747 0.06901843 0.12261332 0.07428021 0.06729803 0.06229526 0.08937098 0.05693976 0.0793375 0.04076743
0.16074381 0.04316101 0.01382325 0.07976272 0. 0.02358784 0.22176891 0.07717256 0.00518048 0.05722748 0. 0.00055799
0.04087066 0.22404933 0.05037626 0.07311321 0.00118498 0.10162138 0.04541778 0.06420469 0.06189998 0.08011859 0.05377224 0.29979873
0.00695398 0.15475802 0.03601454 0.12771193 0.00204537 0.00850904 0.01211309 0.15503588 0.02804072 0.1692873 0.01420732 0.02507
0.06338004 0.11785637 0.171928 0.00577511 0.08163299 0.02358024 0.02959899 0.02702304 0.1652933 0.01434992 0.1073001 0.04582697
0.25112631 0.05618482 0.00868661 0.15998601 0.11513557 0. 0.04618913 0.0220902 0.01421926 0.09891276 0.04522928 0.
0.07307991 0.06984483 0.1043859 0.15786829 0.12612902 0. 0.00236599 0.07686829 0.03243909 0.00346715 0.1954776 0.
0.11247494 0.06210605 0.07547538 0.09774456 0.01932 0.01132741 0.25583217 0.11710921 0.07804282 0.21188464 0.04800656 0.00321866
0.07459586 0.14437367 0.06477981 0.13211211 0.04886609 0. 0.0552824 0.11204116 0.11420818 0.24071304 0.15451676 0.
0.09043424 0.00644994 0.0112379 0.10472704 0.2077468 0.04146317 0.00475456 0.10680434 0.17054333 0.18945499 0.15673649 0.03405238
0.04745921 0.07442587 0.00757032 0.18575827 0.09975438 0.11682436 0.01653319 0.02563015 0.00186129 0.12061027 0.11449362 0.11114196
0.22233397 0.08072367 0.13527766 0.16050936] 0.06779788 0.00595725 0.09127559 0.02380386]
References References
---------- ----------
...@@ -525,23 +525,31 @@ def eigentrust(g, trust_map, vprop=None, norm=False, epsilon=1e-6, max_iter=0, ...@@ -525,23 +525,31 @@ def eigentrust(g, trust_map, vprop=None, norm=False, epsilon=1e-6, max_iter=0,
>>> trust.a = random(g.num_edges())*42 >>> trust.a = random(g.num_edges())*42
>>> t = gt.eigentrust(g, trust, norm=True) >>> t = gt.eigentrust(g, trust, norm=True)
>>> print t.a >>> print t.a
[ 0.01047704 0.00916079 0.00329728 0.02183509 0. 0.00570515 [ 1.12095562e-02 3.97280231e-03 1.31675503e-02 9.61282478e-03
0.01795154 0.00745325 0.01556352 0.02103068 0.00766733 0.0017898 0.00000000e+00 1.73295741e-02 3.53395497e-03 1.06203582e-02
0.00477604 0.02075469 0.00596795 0.00777273 0.00486571 0.00922539 1.36906165e-03 8.64587777e-03 1.12049516e-02 3.18891993e-03
0.00947171 0.00808096 0.00159634 0.00039577 0. 0.00170102 9.28265221e-03 2.25294315e-02 3.24795656e-03 9.16555333e-03
0.01221233 0.00105577 0.00499953 0. 0.00104692 0.02124238 5.68412465e-02 6.79686311e-03 6.37474649e-03 6.04696712e-03
0.00460677 0.02377163 0.03682221 0.00788995 0.01588396 0.01090949 0.00000000e+00 8.51131034e-03 0.00000000e+00 1.09336777e-03
0.01738658 0.00629269 0.00252249 0.01494837 0. 0.00118236 1.49885187e-02 1.09327367e-04 3.73928902e-02 0.00000000e+00
0.00086828 0.04746846 0.01541295 0.00777287 0.00014366 0.01079173 1.74638522e-02 8.21101864e-03 5.79876899e-03 1.34905262e-02
0.00025071 0.0110701 0.0041122 0.00931269 0.0003396 0.00085525 1.71525132e-02 2.25425503e-02 1.04184903e-02 1.05537922e-02
0.00715489 0.01178172 0.01968206 0.00086696 0.01155932 0.01291423 1.34096247e-02 2.82760533e-03 4.31713918e-04 7.39114668e-03
0.03650986 0.00409654 0.00635913 0.02706258 0.01329375 0. 0.004781 0.00000000e+00 2.21328121e-05 8.79050007e-03 7.08148889e-03
0.00393831 0.0159743 0.01175119 0.01924371 0. 0.01624875 5.88651144e-03 7.45401425e-03 5.66098580e-03 2.80738199e-02
0.01213196 0.01327894 0.02122698 0.01120801 0.00261826 0.01197119 2.41472197e-03 1.00673881e-02 2.29910658e-03 3.23790630e-02
0.01071532 0.01065604 0.00891656 0.00394593 0. 0.00519856 3.02136064e-03 2.25030440e-03 3.53325357e-03 6.90672383e-03
0.00013063 0.00206336 0.01471883 0.02029324 0.00793793 0.00560927 1.01692058e-02 1.03783022e-02 1.22476413e-02 4.82453065e-03
0.00944371 0.00205155 0.01610597 0.009506 0.0211548 0.01688137 1.15878890e-02 3.41943633e-03 1.57958469e-03 6.56648121e-03
0.00731456 0.0175582 0.02643281] 1.28152141e-02 0.00000000e+00 1.29192164e-03 9.35867476e-03
3.89329603e-03 1.78002682e-03 2.81987911e-02 0.00000000e+00
1.74943514e-02 6.24079508e-03 1.57572103e-02 3.77119257e-02
4.78552984e-03 3.30463136e-04 5.60118687e-03 5.75656186e-03
2.65412905e-02 1.59663210e-02 2.88844192e-02 0.00000000e+00
7.87754853e-04 1.76957899e-02 3.19907905e-02 1.94650690e-02
1.32052233e-02 3.57577093e-03 7.09968545e-04 8.70787481e-03
1.24901391e-04 2.61215462e-02 2.25923034e-02 1.10928239e-02
9.39210737e-03 5.61073138e-04 1.59987179e-02 3.02799309e-03]
References References
---------- ----------
...@@ -643,23 +651,31 @@ def trust_transitivity(g, trust_map, source=None, target=None, vprop=None): ...@@ -643,23 +651,31 @@ def trust_transitivity(g, trust_map, source=None, target=None, vprop=None):
>>> trust.a = random(g.num_edges()) >>> trust.a = random(g.num_edges())
>>> t = gt.trust_transitivity(g, trust, source=g.vertex(0)) >>> t = gt.trust_transitivity(g, trust, source=g.vertex(0))
>>> print t.a >>> print t.a
[ 1. 0.05067451 0.0289009 0.08405839 0. 0.03545782 [ 1.00000000e+00 9.59916062e-02 4.27717883e-02 7.70755875e-02
0.07538031 0.22379499 0.05854478 0.07125532 0.05587198 0.02518448 0.00000000e+00 2.04476926e-01 5.55315822e-02 2.82854665e-02
0.02466963 0.15362921 0.06018343 0.05567524 0.27358358 0.05275904 5.08479257e-02 1.68128402e-01 3.28567434e-02 7.39525583e-02
0.03729045 0.09492006 0.05238415 0.00737096 0. 0.00510552 1.34463196e-01 8.83740756e-02 1.79990535e-01 7.08809615e-02
0.08817629 0.03785795 0.02446122 0. 0.00738919 0.05119031 6.37757645e-02 7.24187957e-02 4.83082241e-02 9.90676983e-02
0.34527065 0.03114924 0.07197484 0.47425602 0.03472084 0.04662672 0.00000000e+00 6.50497060e-02 0.00000000e+00 1.77344948e-02
0.05560849 0.02364994 0.01215894 0.31788601 0. 0.03879942 1.08677897e-01 1.00958718e-03 4.49524961e-02 0.00000000e+00
0.01857147 0.06889803 0.04377159 0.08730759 0.00246369 0.39098931 1.64902280e-01 4.31492976e-02 2.19446085e-01 3.00890381e-02
0.0046694 0.04502054 0.02463968 0.02645761 0.00707666 0.00472783 6.86750847e-02 2.72460575e-02 3.57314594e-02 4.87776483e-02
0.02984028 0.1148617 0.0572029 0.00675625 0.02800698 0.12556046 4.11748930e-01 7.91396467e-02 2.54835127e-03 3.01711432e-01
0.08124247 0.05626964 0.06027068 0.04269226 0.07518783 0. 0.00000000e+00 4.14406224e-04 4.24794624e-02 9.14096554e-02
0.02654427 0.013547 0.35126413 0.05338214 0.02683736 0. 4.17528677e-01 3.79112573e-02 1.16489950e-01 5.18112902e-02
0.03967174 0.15764245 0.03434911 0.06712879 0.01081633 0.01438191 8.49111259e-03 5.26399996e-02 2.45690139e-02 7.51435125e-02
0.22453002 0.13426137 0.11622003 0.18696878 0.02270863 0. 5.62381854e-02 2.90115777e-02 2.72543383e-02 1.46877163e-01
0.09096154 0.00622639 0.01807092 0.06891202 0.05429632 0.03123112 7.81446822e-02 1.24417763e-02 1.01337976e-01 9.92776442e-02
0.04239384 0.06347529 0.00980117 0.08103904 0.06022526 0.09774797 3.14622176e-02 1.20097319e-01 3.30335980e-02 4.61757040e-02
0.0442361 0.03511221 0.09291923 0.10395899] 1.01085599e-01 0.00000000e+00 4.44660446e-03 6.31066845e-02
1.94702084e-02 8.45343379e-04 4.82190327e-02 0.00000000e+00
6.60346087e-02 7.44581695e-02 6.19535229e-02 1.82072422e-01
1.45366611e-02 2.59020075e-02 2.52208295e-02 6.80519730e-02
6.74671969e-02 1.14198914e-01 5.12493343e-02 0.00000000e+00
6.33427008e-03 1.42290348e-01 6.90459437e-02 1.00565411e-01
5.88966867e-02 3.28157280e-02 2.80046903e-02 2.41520032e-01
8.45879329e-04 6.76633672e-02 6.05080467e-02 9.12575826e-02
1.97789973e-02 6.40885493e-02 4.80934526e-02 1.28787181e-02]
References References
---------- ----------
......
...@@ -115,7 +115,7 @@ def local_clustering(g, prop=None, undirected=True): ...@@ -115,7 +115,7 @@ def local_clustering(g, prop=None, undirected=True):
>>> g = gt.random_graph(1000, lambda: (5,5)) >>> g = gt.random_graph(1000, lambda: (5,5))
>>> clust = gt.local_clustering(g) >>> clust = gt.local_clustering(g)
>>> print gt.vertex_average(g, clust) >>> print gt.vertex_average(g, clust)
(0.008338888888888889, 0.0004126098432127491) (0.00908888888888889, 0.0004449824521439575)
References References
---------- ----------
...@@ -172,7 +172,7 @@ def global_clustering(g): ...@@ -172,7 +172,7 @@ def global_clustering(g):
>>> seed(42) >>> seed(42)
>>> g = gt.random_graph(1000, lambda: (5,5)) >>> g = gt.random_graph(1000, lambda: (5,5))
>>> print gt.global_clustering(g) >>> print gt.global_clustering(g)
(0.008353381448810478, 0.00041351594365452094) (0.009114059777509717, 0.0004464454368899158)
References References
---------- ----------
...@@ -247,11 +247,11 @@ def extended_clustering(g, props=None, max_depth=3, undirected=False): ...@@ -247,11 +247,11 @@ def extended_clustering(g, props=None, max_depth=3, undirected=False):
>>> for i in xrange(0, 5): >>> for i in xrange(0, 5):
... print gt.vertex_average(g, clusts[i]) ... print gt.vertex_average(g, clusts[i])
... ...
(0.0061200000000000004, 0.0004859481453817887) (0.0058850000000000005, 0.0004726257592782405)
(0.024368333333333332, 0.0009455588573842338) (0.026346666666666668, 0.0009562588213100747)
(0.11548333333333334, 0.0020091290954595783) (0.11638833333333333, 0.002086419787711849)
(0.3999433333333333, 0.0030720255912562527) (0.3862533333333333, 0.003020064612995335)
(0.43571666666666664, 0.0031127199163718177) (0.44685499999999995, 0.003124572962377774)
References References
---------- ----------
...@@ -324,7 +324,7 @@ def motifs(g, k, p=1.0, motif_list=None): ...@@ -324,7 +324,7 @@ def motifs(g, k, p=1.0, motif_list=None):
>>> print len(motifs) >>> print len(motifs)
11 11
>>> print counts >>> print counts
[116256, 392719, 335, 380, 2954, 850, 808, 1, 11, 4, 1] [115104, 389090, 724, 820, 1828, 3208, 791, 4, 12, 12, 3]
References References
...@@ -489,7 +489,7 @@ def motif_significance(g, k, n_shuffles=100, p=1.0, motif_list=None, ...@@ -489,7 +489,7 @@ def motif_significance(g, k, n_shuffles=100, p=1.0, motif_list=None,
>>> print len(motifs) >>> print len(motifs)
11 11
>>> print zscores >>> print zscores
[0.37033485499317503, 0.2502032768488251, 0.11813557960717248, -0.64062741073137097, -0.6280946022901569, -0.36863102213820809, 0.54809736376108453, 1.89, 0.87, -0.48, -0.19] [0.014875553792545083, 0.016154998074953769, 0.002455801898331304, -1.9579019397305546, 0.83542298414538518, 0.84715258999068244, -0.93385230436820643, -0.11, -0.1, -0.31, -0.14]
""" """
s_ms, counts = motifs(g, k, p, motif_list) s_ms, counts = motifs(g, k, p, motif_list)
......
...@@ -109,7 +109,7 @@ def assortativity(g, deg): ...@@ -109,7 +109,7 @@ def assortativity(g, deg):
... lambda i,k: 1.0 / (1 + abs(i - k)), directed=False, ... lambda i,k: 1.0 / (1 + abs(i - k)), directed=False,
... mix_time=100) ... mix_time=100)
>>> gt.assortativity(g, "out") >>> gt.assortativity(g, "out")
(0.15024063611634234, 0.0051996387349654925) (0.14145218664992676, 0.005077209994557802)
References References
---------- ----------
...@@ -179,13 +179,13 @@ def scalar_assortativity(g, deg): ...@@ -179,13 +179,13 @@ def scalar_assortativity(g, deg):
>>> g = gt.random_graph(1000, lambda: sample_k(40), lambda i,k: abs(i-k), >>> g = gt.random_graph(1000, lambda: sample_k(40), lambda i,k: abs(i-k),
... directed=False, mix_time=100) ... directed=False, mix_time=100)
>>> gt.scalar_assortativity(g, "out") >>> gt.scalar_assortativity(g, "out")
(-0.4569707008340512, 0.010227503673605132) (-0.46972665544654923, 0.010035656615797507)
>>> g = gt.random_graph(1000, lambda: sample_k(40), >>> g = gt.random_graph(1000, lambda: sample_k(40),
... lambda i, k: 1.0 / (1 + abs(i - k)), ... lambda i, k: 1.0 / (1 + abs(i - k)),
... directed=False, mix_time=100) ... directed=False, mix_time=100)
>>> gt.scalar_assortativity(g, "out") >>> gt.scalar_assortativity(g, "out")
(0.5921961942149022, 0.011625836226217939) (0.6120658464996896, 0.011388445161055338)
References References
---------- ----------
......
...@@ -181,7 +181,7 @@ def random_graph(N, deg_sampler, deg_corr=None, directed=True, ...@@ -181,7 +181,7 @@ def random_graph(N, deg_sampler, deg_corr=None, directed=True,
... lambda i, k: 1.0 / (1 + abs(i - k)), directed=False, ... lambda i, k: 1.0 / (1 + abs(i - k)), directed=False,
... mix_time=100) ... mix_time=100)
>>> gt.scalar_assortativity(g, "out") >>> gt.scalar_assortativity(g, "out")
(0.6279771609121966, 0.010942827982112517) (0.6435658697163692, 0.010420519538259333)
The following samples an in,out-degree pair from the joint distribution: The following samples an in,out-degree pair from the joint distribution:
......
...@@ -84,12 +84,12 @@ def adjacency(g, sparse=True, weight=None): ...@@ -84,12 +84,12 @@ def adjacency(g, sparse=True, weight=None):
>>> m = gt.adjacency(g) >>> m = gt.adjacency(g)
>>> print m.todense() >>> print m.todense()
[[ 0. 0. 0. ..., 0. 0. 0.] [[ 0. 0. 0. ..., 0. 0. 0.]
[ 1. 0. 1. ..., 0. 0. 0.]
[ 0. 0. 0. ..., 0. 0. 0.] [ 0. 0. 0. ..., 0. 0. 0.]
...,
[ 0. 0. 0. ..., 0. 0. 0.] [ 0. 0. 0. ..., 0. 0. 0.]
[ 0. 0. 0. ..., 1. 0. 0.] ...,
[ 0. 0. 1. ..., 0. 0. 0.]] [ 0. 0. 0. ..., 0. 0. 1.]
[ 0. 0. 1. ..., 0. 0. 0.]
[ 0. 1. 0. ..., 0. 0. 0.]]
References References
---------- ----------
...@@ -192,12 +192,12 @@ def laplacian(g, deg="total", normalized=True, sparse=True, weight=None): ...@@ -192,12 +192,12 @@ def laplacian(g, deg="total", normalized=True, sparse=True, weight=None):
>>> m = gt.laplacian(g) >>> m = gt.laplacian(g)
>>> print m.todense() >>> print m.todense()
[[ 1. 0. 0. ..., 0. 0. 0. ] [[ 1. 0. 0. ..., 0. 0. 0. ]
[ 0.05 1. 0.05 ..., 0. 0. 0. ] [ 0. 1. 0. ..., 0. 0. 0. ]
[ 0. 0. 1. ..., 0. 0. 0. ] [ 0. 0. 1. ..., 0. 0. 0. ]
..., ...,
[ 0. 0. 0. ..., 1. 0. 0. ] [ 0. 0. 0. ..., 1. 0. 0.05]