Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
graph-tool
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
43
Issues
43
List
Boards
Labels
Service Desk
Milestones
Merge Requests
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Incidents
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Tiago Peixoto
graph-tool
Commits
5908da56
Commit
5908da56
authored
Aug 25, 2015
by
Tiago Peixoto
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Implement "block_list" parameter in mcmc_sweep()
parent
dfd68d0d
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
123 additions
and
85 deletions
+123
-85
src/graph/community/graph_blockmodel.cc
src/graph/community/graph_blockmodel.cc
+21
-14
src/graph/community/graph_blockmodel.hh
src/graph/community/graph_blockmodel.hh
+8
-7
src/graph/community/graph_blockmodel_covariates.cc
src/graph/community/graph_blockmodel_covariates.cc
+31
-22
src/graph/community/graph_blockmodel_overlap.cc
src/graph/community/graph_blockmodel_overlap.cc
+24
-19
src/graph/community/graph_blockmodel_overlap.hh
src/graph/community/graph_blockmodel_overlap.hh
+25
-21
src/graph_tool/community/blockmodel.py
src/graph_tool/community/blockmodel.py
+11
-1
src/graph_tool/community/covariate_blockmodel.py
src/graph_tool/community/covariate_blockmodel.py
+2
-1
src/graph_tool/community/overlap_blockmodel.py
src/graph_tool/community/overlap_blockmodel.py
+1
-0
No files found.
src/graph/community/graph_blockmodel.cc
View file @
5908da56
...
...
@@ -236,18 +236,20 @@ struct move_sweep_dispatch
{
move_sweep_dispatch
(
Eprop
eweight
,
Vprop
vweight
,
boost
::
any
egroups
,
VEprop
esrcpos
,
VEprop
etgtpos
,
Vprop
label
,
vector
<
int64_t
>&
vlist
,
vector
<
int64_t
>&
target_list
,
bool
deg_corr
,
bool
dense
,
bool
multigraph
,
double
beta
,
bool
sequential
,
bool
parallel
,
bool
random_move
,
double
c
,
bool
verbose
,
size_t
max_edge_index
,
size_t
nmerges
,
size_t
niter
,
Vprop
merge_map
,
partition_stats_t
&
partition_stats
,
rng_t
&
rng
,
double
&
S
,
size_t
&
nmoves
,
GraphInterface
&
bgi
)
vector
<
int64_t
>&
vlist
,
vector
<
int64_t
>&
block_list
,
vector
<
int64_t
>&
target_list
,
bool
deg_corr
,
bool
dense
,
bool
multigraph
,
double
beta
,
bool
sequential
,
bool
parallel
,
bool
random_move
,
double
c
,
bool
verbose
,
size_t
max_edge_index
,
size_t
nmerges
,
size_t
niter
,
Vprop
merge_map
,
partition_stats_t
&
partition_stats
,
rng_t
&
rng
,
double
&
S
,
size_t
&
nmoves
,
GraphInterface
&
bgi
)
:
eweight
(
eweight
),
vweight
(
vweight
),
oegroups
(
egroups
),
esrcpos
(
esrcpos
),
etgtpos
(
etgtpos
),
label
(
label
),
vlist
(
vlist
),
target_list
(
target_list
),
deg_corr
(
deg_corr
),
dense
(
dense
),
multigraph
(
multigraph
),
beta
(
beta
),
sequential
(
sequential
),
parallel
(
parallel
),
random_move
(
random_move
),
etgtpos
(
etgtpos
),
label
(
label
),
vlist
(
vlist
),
block_list
(
block_list
),
target_list
(
target_list
),
deg_corr
(
deg_corr
),
dense
(
dense
),
multigraph
(
multigraph
),
beta
(
beta
),
sequential
(
sequential
),
parallel
(
parallel
),
random_move
(
random_move
),
c
(
c
),
verbose
(
verbose
),
max_edge_index
(
max_edge_index
),
nmerges
(
nmerges
),
niter
(
niter
),
merge_map
(
merge_map
),
partition_stats
(
partition_stats
),
rng
(
rng
),
S
(
S
),
...
...
@@ -262,6 +264,7 @@ struct move_sweep_dispatch
Vprop
label
;
size_t
n
;
vector
<
int64_t
>&
vlist
;
vector
<
int64_t
>&
block_list
;
vector
<
int64_t
>&
target_list
;
bool
deg_corr
;
bool
dense
;
...
...
@@ -405,8 +408,9 @@ struct move_sweep_dispatch
wr
.
get_unchecked
(
num_vertices
(
bg
)),
b
.
get_unchecked
(
num_vertices
(
g
)),
cv
,
vmap
,
label
.
get_unchecked
(
num_vertices
(
bg
)),
vlist
,
deg_corr
,
dense
,
multigraph
,
beta
,
label
.
get_unchecked
(
num_vertices
(
bg
)),
vlist
,
block_list
,
deg_corr
,
dense
,
multigraph
,
beta
,
eweight
.
get_unchecked
(
max_edge_index
),
vweight
.
get_unchecked
(
num_vertices
(
g
)),
g
,
sequential
,
parallel
,
random_move
,
c
,
...
...
@@ -438,7 +442,9 @@ boost::python::object do_move_sweep(GraphInterface& gi, GraphInterface& bgi,
boost
::
any
cavity_sampler
,
boost
::
any
omrs
,
boost
::
any
omrp
,
boost
::
any
omrm
,
boost
::
any
owr
,
boost
::
any
ob
,
boost
::
any
olabel
,
vector
<
int64_t
>&
vlist
,
boost
::
any
olabel
,
vector
<
int64_t
>&
vlist
,
vector
<
int64_t
>&
block_list
,
vector
<
int64_t
>&
target_list
,
bool
deg_corr
,
bool
dense
,
bool
multigraph
,
boost
::
any
oeweight
,
boost
::
any
ovweight
,
...
...
@@ -480,7 +486,8 @@ boost::python::object do_move_sweep(GraphInterface& gi, GraphInterface& bgi,
run_action
<
graph_tool
::
detail
::
all_graph_views
,
boost
::
mpl
::
true_
>
()
(
gi
,
std
::
bind
(
move_sweep_dispatch
<
emap_t
,
vmap_t
,
vemap_t
>
(
eweight
,
vweight
,
oegroups
,
esrcpos
,
etgtpos
,
label
,
vlist
,
target_list
,
deg_corr
,
dense
,
multigraph
,
label
,
vlist
,
block_list
,
target_list
,
deg_corr
,
dense
,
multigraph
,
beta
,
sequential
,
parallel
,
random_move
,
c
,
verbose
,
gi
.
GetMaxEdgeIndex
(),
nmerges
,
niter
,
merge_map
,
partition_stats
,
rng
,
S
,
nmoves
,
bgi
),
...
...
src/graph/community/graph_blockmodel.hh
View file @
5908da56
...
...
@@ -2644,11 +2644,12 @@ template <class Graph, class Vprop, class VVprop, class VLprop,
class
Eprop
,
class
RNG
,
class
BlockState
,
class
MEntries
>
void
move_sweep
(
vector
<
BlockState
>&
states
,
vector
<
MEntries
>&
m_entries_r
,
Vprop
wr
,
Vprop
b
,
VLprop
cv
,
VVprop
vmap
,
Vprop
clabel
,
vector
<
int64_t
>&
vlist
,
bool
deg_corr
,
bool
dense
,
bool
multigraph
,
double
beta
,
Eprop
eweight
,
Vprop
vweight
,
Graph
&
g
,
bool
sequential
,
bool
parallel
,
bool
random_move
,
double
c
,
size_t
nmerges
,
Vprop
merge_map
,
size_t
niter
,
size_t
B
,
bool
verbose
,
RNG
&
rng
,
double
&
S
,
size_t
&
nmoves
)
vector
<
int64_t
>&
vlist
,
vector
<
int64_t
>&
block_list
,
bool
deg_corr
,
bool
dense
,
bool
multigraph
,
double
beta
,
Eprop
eweight
,
Vprop
vweight
,
Graph
&
g
,
bool
sequential
,
bool
parallel
,
bool
random_move
,
double
c
,
size_t
nmerges
,
Vprop
merge_map
,
size_t
niter
,
size_t
B
,
bool
verbose
,
RNG
&
rng
,
double
&
S
,
size_t
&
nmoves
)
{
typedef
typename
graph_traits
<
Graph
>::
vertex_descriptor
vertex_t
;
...
...
@@ -2684,7 +2685,7 @@ void move_sweep(vector<BlockState>& states, vector<MEntries>& m_entries_r,
if
(
nmerges
>
0
||
parallel
)
best_move
.
resize
(
num_vertices
(
g
),
make_pair
(
vertex_t
(
0
),
numeric_limits
<
double
>::
max
()));
std
::
uniform_int_distribution
<
size_t
>
s_rand
(
0
,
B
-
1
);
std
::
uniform_int_distribution
<
size_t
>
s_rand
(
0
,
block_list
.
size
()
-
1
);
vector
<
MEntries
>
m_entries
=
m_entries_r
;
...
...
@@ -2734,7 +2735,7 @@ void move_sweep(vector<BlockState>& states, vector<MEntries>& m_entries_r,
past_moves
.
clear
();
// attempt random block
vertex_t
s
=
s_rand
(
*
rngs
[
tid
])
;
vertex_t
s
=
block_list
[
s_rand
(
*
rngs
[
tid
])]
;
if
(
!
random_move
&&
total_degreeS
()(
v
,
g
)
>
0
)
{
...
...
src/graph/community/graph_blockmodel_covariates.cc
View file @
5908da56
...
...
@@ -56,6 +56,7 @@ struct cov_move_sweep_dispatch
vector
<
std
::
reference_wrapper
<
VEprop
>>&
esrcpos
,
vector
<
std
::
reference_wrapper
<
VEprop
>>&
etgtpos
,
Vprop
&
label
,
vector
<
int64_t
>&
vlist
,
vector
<
int64_t
>&
block_list
,
vector
<
int64_t
>&
target_blocks
,
bool
deg_corr
,
bool
dense
,
bool
multigraph
,
double
beta
,
bool
sequential
,
bool
parallel
,
bool
random_move
,
...
...
@@ -76,7 +77,7 @@ struct cov_move_sweep_dispatch
:
ce
(
ce
),
cv
(
cv
),
vmap
(
vmap
),
eweight
(
eweight
),
vweight
(
vweight
),
oegroups
(
egroups
),
esrcpos
(
esrcpos
),
etgtpos
(
etgtpos
),
label
(
label
),
vlist
(
vlist
),
target_blocks
(
target_blocks
),
vlist
(
vlist
),
block_list
(
block_list
),
target_blocks
(
target_blocks
),
deg_corr
(
deg_corr
),
dense
(
dense
),
multigraph
(
multigraph
),
beta
(
beta
),
sequential
(
sequential
),
parallel
(
parallel
),
random_move
(
random_move
),
node_coherent
(
node_coherent
),
confine_layers
(
confine_layers
),
...
...
@@ -102,6 +103,7 @@ struct cov_move_sweep_dispatch
Vprop
&
label
;
size_t
n
;
vector
<
int64_t
>&
vlist
;
vector
<
int64_t
>&
block_list
;
vector
<
int64_t
>&
target_blocks
;
bool
deg_corr
;
bool
dense
;
...
...
@@ -333,7 +335,7 @@ struct cov_move_sweep_dispatch
cv
.
get_unchecked
(
num_vertices
(
g
)),
vmap
.
get_unchecked
(
num_vertices
(
g
)),
label
.
get_unchecked
(
B
),
vlist
,
deg_corr
,
vlist
,
block_list
,
deg_corr
,
dense
,
multigraph
,
beta
,
eweight
[
0
].
get
().
get_unchecked
(
max_edge_index
[
0
]),
vweight
[
0
].
get
().
get_unchecked
(
num_vertices
(
g
)),
...
...
@@ -407,29 +409,35 @@ struct cov_move_sweep_dispatch
{
if
(
!
node_coherent
)
{
move_sweep_overlap
(
states
,
m_entries
,
overlap_stats
[
0
].
get
(),
move_sweep_overlap
(
states
,
m_entries
,
overlap_stats
[
0
].
get
(),
wr
[
0
].
get
().
get_unchecked
(
B
),
b
.
get_unchecked
(
num_vertices
(
g
)),
cv
,
vmap
,
label
.
get_unchecked
(
B
),
vlist
,
deg_corr
,
dense
,
multigraph
,
beta
,
vweight
[
0
].
get
().
get_unchecked
(
num_vertices
(
g
)),
g
,
sequential
,
parallel
,
random_move
,
c
,
niter
,
B
,
verbose
,
rng
,
S
,
nmoves
);
b
.
get_unchecked
(
num_vertices
(
g
)),
cv
,
vmap
,
label
.
get_unchecked
(
B
),
vlist
,
block_list
,
deg_corr
,
dense
,
multigraph
,
beta
,
vweight
[
0
].
get
().
get_unchecked
(
num_vertices
(
g
)),
g
,
sequential
,
parallel
,
random_move
,
c
,
niter
,
B
,
verbose
,
rng
,
S
,
nmoves
);
}
else
{
vector
<
EntrySet
<
Graph
>>
m_entries
;
for
(
auto
&
state
:
states
)
m_entries
.
emplace_back
(
num_vertices
(
state
.
bg
));
coherent_move_sweep_overlap
(
states
,
m_entries
,
overlap_stats
[
0
].
get
(),
coherent_move_sweep_overlap
(
states
,
m_entries
,
overlap_stats
[
0
].
get
(),
wr
[
0
].
get
().
get_unchecked
(
B
),
b
.
get_unchecked
(
num_vertices
(
g
)),
cv
,
vmap
,
label
.
get_unchecked
(
B
),
vlist
,
deg_corr
,
dense
,
multigraph
,
beta
,
vweight
[
0
].
get
().
get_unchecked
(
num_vertices
(
g
)),
g
,
sequential
,
random_move
,
c
,
confine_layers
,
niter
,
B
,
rng
,
S
,
nmoves
);
b
.
get_unchecked
(
num_vertices
(
g
)),
cv
,
vmap
,
label
.
get_unchecked
(
B
),
vlist
,
block_list
,
deg_corr
,
dense
,
multigraph
,
beta
,
vweight
[
0
].
get
().
get_unchecked
(
num_vertices
(
g
)),
g
,
sequential
,
random_move
,
c
,
confine_layers
,
niter
,
B
,
rng
,
S
,
nmoves
);
}
}
else
...
...
@@ -438,7 +446,7 @@ struct cov_move_sweep_dispatch
wr
[
0
].
get
().
get_unchecked
(
B
),
b
.
get_unchecked
(
num_vertices
(
g
)),
ce
,
cv
,
vmap
,
label
.
get_unchecked
(
B
),
vlist
,
deg_corr
,
dense
,
multigraph
,
g
,
block_list
,
deg_corr
,
dense
,
multigraph
,
g
,
random_move
,
confine_layers
,
nmerges
,
niter
,
B
,
rng
,
S
,
nmoves
);
}
...
...
@@ -586,7 +594,8 @@ boost::python::object do_cov_move_sweep(GraphInterface& gi,
auto
slave
=
from_list
<
bool
>
(
oslave
);
vector
<
int64_t
>&
vlist
=
boost
::
python
::
extract
<
vector
<
int64_t
>&>
(
ovlist
[
0
]);
vector
<
int64_t
>&
target_blocks
=
boost
::
python
::
extract
<
vector
<
int64_t
>&>
(
ovlist
[
1
]);
vector
<
int64_t
>&
block_list
=
boost
::
python
::
extract
<
vector
<
int64_t
>&>
(
ovlist
[
1
]);
vector
<
int64_t
>&
target_blocks
=
boost
::
python
::
extract
<
vector
<
int64_t
>&>
(
ovlist
[
2
]);
bool
node_coherent
=
python
::
extract
<
bool
>
(
onode_coherent
[
0
]);
bool
confine_layers
=
python
::
extract
<
bool
>
(
onode_coherent
[
1
]);
...
...
@@ -594,9 +603,9 @@ boost::python::object do_cov_move_sweep(GraphInterface& gi,
run_action
<
graph_tool
::
detail
::
all_graph_views
,
boost
::
mpl
::
true_
>
()
(
gi
,
std
::
bind
(
cov_move_sweep_dispatch
<
emap_t
,
vmap_t
,
vvmap_t
,
emap_t
,
bmap_t
>
(
ce
,
cv
,
vmap
,
eweight
,
vweight
,
egroups
,
esrcpos
,
etgtpos
,
label
,
vlist
,
target_blocks
,
deg_corr
,
dense
,
multigraph
,
beta
,
sequential
,
parallel
,
random_move
,
node_coherent
,
confine_layers
,
c
,
verbose
,
label
,
vlist
,
block_list
,
target_blocks
,
deg_corr
,
dense
,
multigraph
,
beta
,
sequential
,
parallel
,
random_move
,
node_coherent
,
confine_layers
,
c
,
verbose
,
gi
.
GetMaxEdgeIndex
(),
eidx
,
nmerges
,
niter
,
merge_map
,
partition_stats
,
overlap_partition_stats
,
overlap_stats
,
master
,
slave
,
rng
,
S
,
nmoves
,
bgi
,
bmap
,
brmap
,
free_blocks
,
B
),
...
...
src/graph/community/graph_blockmodel_overlap.cc
View file @
5908da56
...
...
@@ -52,6 +52,7 @@ struct move_sweep_overlap_dispatch
boost
::
any
egroups
,
VEprop
esrcpos
,
VEprop
etgtpos
,
Vprop
label
,
vector
<
int64_t
>&
vlist
,
vector
<
int64_t
>&
block_list
,
vector
<
int64_t
>&
target_blocks
,
bool
deg_corr
,
bool
dense
,
bool
multigraph
,
bool
parallel_edges
,
double
beta
,
...
...
@@ -65,11 +66,11 @@ struct move_sweep_overlap_dispatch
GraphInterface
&
bgi
)
:
eweight
(
eweight
),
vweight
(
vweight
),
oegroups
(
egroups
),
esrcpos
(
esrcpos
),
etgtpos
(
etgtpos
),
label
(
label
),
vlist
(
vlist
),
target_blocks
(
target_blocks
),
deg_corr
(
deg_corr
),
dense
(
dense
),
multigraph
(
multigraph
),
parallel_edges
(
parallel_edges
),
beta
(
beta
),
sequential
(
sequential
),
parallel
(
parallel
),
random_move
(
random_move
),
c
(
c
),
node_coherent
(
node_coherent
),
verbose
(
verbose
),
etgtpos
(
etgtpos
),
label
(
label
),
vlist
(
vlist
),
block_list
(
block_list
),
target_blocks
(
target_blocks
),
deg_corr
(
deg_corr
),
dense
(
dense
),
multigraph
(
multigraph
),
parallel_edges
(
parallel_edges
),
beta
(
beta
),
sequential
(
sequential
),
parallel
(
parallel
),
random_move
(
random_move
),
c
(
c
),
node_coherent
(
node_coherent
),
verbose
(
verbose
),
max_edge_index
(
max_edge_index
),
nmerges
(
nmerges
),
niter
(
niter
),
merge_map
(
merge_map
),
overlap_stats
(
overlap_stats
),
partition_stats
(
partition_stats
),
rng
(
rng
),
S
(
S
),
nmoves
(
nmoves
),
bgi
(
bgi
)
...
...
@@ -83,6 +84,7 @@ struct move_sweep_overlap_dispatch
Vprop
label
;
size_t
n
;
vector
<
int64_t
>&
vlist
;
vector
<
int64_t
>&
block_list
;
vector
<
int64_t
>&
target_blocks
;
bool
deg_corr
;
bool
dense
;
...
...
@@ -222,7 +224,8 @@ struct move_sweep_overlap_dispatch
wr
.
get_unchecked
(
num_vertices
(
bg
)),
b
.
get_unchecked
(
num_vertices
(
g
)),
cv
,
vmap
,
label
.
get_unchecked
(
num_vertices
(
bg
)),
vlist
,
deg_corr
,
dense
,
multigraph
,
beta
,
vlist
,
block_list
,
deg_corr
,
dense
,
multigraph
,
beta
,
vweight
.
get_unchecked
(
num_vertices
(
g
)),
g
,
sequential
,
parallel
,
random_move
,
c
,
niter
,
num_vertices
(
bg
),
verbose
,
rng
,
S
,
nmoves
);
...
...
@@ -234,7 +237,8 @@ struct move_sweep_overlap_dispatch
wr
.
get_unchecked
(
num_vertices
(
bg
)),
b
.
get_unchecked
(
num_vertices
(
g
)),
cv
,
vmap
,
label
.
get_unchecked
(
num_vertices
(
bg
)),
vlist
,
deg_corr
,
dense
,
multigraph
,
beta
,
vlist
,
block_list
,
deg_corr
,
dense
,
multigraph
,
beta
,
vweight
.
get_unchecked
(
num_vertices
(
g
)),
g
,
sequential
,
random_move
,
c
,
false
,
niter
,
...
...
@@ -245,11 +249,12 @@ struct move_sweep_overlap_dispatch
{
merge_sweep_overlap
(
states
,
m_entries
,
overlap_stats
,
wr
.
get_unchecked
(
num_vertices
(
bg
)),
b
.
get_unchecked
(
num_vertices
(
g
)),
ce
,
cv
,
vmap
,
label
.
get_unchecked
(
num_vertices
(
bg
)),
vlist
,
deg_corr
,
dense
,
multigraph
,
g
,
random_move
,
false
,
nmerges
,
niter
,
num_vertices
(
bg
),
rng
,
S
,
nmoves
);
b
.
get_unchecked
(
num_vertices
(
g
)),
ce
,
cv
,
vmap
,
label
.
get_unchecked
(
num_vertices
(
bg
)),
vlist
,
block_list
,
deg_corr
,
dense
,
multigraph
,
g
,
random_move
,
false
,
nmerges
,
niter
,
num_vertices
(
bg
),
rng
,
S
,
nmoves
);
}
}
else
...
...
@@ -276,8 +281,8 @@ do_move_sweep_overlap(GraphInterface& gi, GraphInterface& bgi, boost::any& emat,
boost
::
any
sampler
,
boost
::
any
cavity_sampler
,
boost
::
any
omrs
,
boost
::
any
omrp
,
boost
::
any
omrm
,
boost
::
any
owr
,
boost
::
any
ob
,
boost
::
any
olabel
,
vector
<
int64_t
>&
vlist
,
vector
<
int64_t
>&
target_blocks
,
bool
deg_corr
,
bool
dense
,
vector
<
int64_t
>&
vlist
,
vector
<
int64_t
>&
block_list
,
vector
<
int64_t
>&
target_blocks
,
bool
deg_corr
,
bool
dense
,
bool
multigraph
,
bool
parallel_edges
,
boost
::
any
oeweight
,
boost
::
any
ovweight
,
boost
::
any
oegroups
,
boost
::
any
oesrcpos
,
boost
::
any
oetgtpos
,
double
beta
,
...
...
@@ -317,11 +322,11 @@ do_move_sweep_overlap(GraphInterface& gi, GraphInterface& bgi, boost::any& emat,
run_action
<
graph_tool
::
detail
::
all_graph_views
,
boost
::
mpl
::
true_
>
()
(
gi
,
std
::
bind
(
move_sweep_overlap_dispatch
<
emap_t
,
vmap_t
,
vemap_t
>
(
eweight
,
vweight
,
oegroups
,
esrcpos
,
etgtpos
,
label
,
vlist
,
target_blocks
,
deg_corr
,
dense
,
multigraph
,
parallel_edges
,
beta
,
sequential
,
parallel
,
random_move
,
c
,
node_coherent
,
verbose
,
gi
.
GetMaxEdgeIndex
(),
nmerges
,
n
iter
,
merge_map
,
overlap_stats
,
partition_stats
,
rng
,
S
,
nmoves
,
bgi
),
label
,
vlist
,
block_list
,
target_blocks
,
deg_corr
,
dense
,
multigraph
,
parallel_edges
,
beta
,
sequential
,
parallel
,
random_move
,
c
,
node_coherent
,
verbose
,
gi
.
GetMaxEdgeIndex
()
,
n
merges
,
niter
,
merge_map
,
overlap_stats
,
partition_stats
,
rng
,
S
,
nmoves
,
bgi
),
mrs
,
mrp
,
mrm
,
wr
,
b
,
placeholders
::
_1
,
std
::
ref
(
emat
),
sampler
,
cavity_sampler
,
weighted
))();
return
boost
::
python
::
make_tuple
(
S
,
nmoves
);
...
...
src/graph/community/graph_blockmodel_overlap.hh
View file @
5908da56
...
...
@@ -1302,11 +1302,11 @@ void move_sweep_overlap(vector<BlockState>& states,
vector
<
MEntries
>&
m_entries_r
,
overlap_stats_t
&
overlap_stats
,
Vprop
wr
,
Vprop
b
,
VLprop
cv
,
VVprop
vmap
,
Vprop
clabel
,
vector
<
int64_t
>&
vlist
,
bool
deg_corr
,
bool
dense
,
bool
multigraph
,
double
beta
,
Vprop
vweight
,
Graph
&
g
,
bool
sequential
,
bool
parallel
,
bool
random_move
,
double
c
,
size_t
niter
,
size_t
B
,
bool
verbose
,
RNG
&
rng
,
double
&
S
,
size_t
&
nmoves
)
vector
<
int64_t
>&
vlist
,
vector
<
int64_t
>&
block_list
,
bool
deg_corr
,
bool
dense
,
bool
multigraph
,
double
beta
,
Vprop
vweight
,
Graph
&
g
,
bool
sequential
,
bool
parallel
,
bool
random_move
,
double
c
,
size_t
niter
,
size_t
B
,
bool
verbose
,
RNG
&
rng
,
double
&
S
,
size_t
&
nmoves
)
{
typedef
typename
graph_traits
<
Graph
>::
vertex_descriptor
vertex_t
;
...
...
@@ -1339,6 +1339,8 @@ void move_sweep_overlap(vector<BlockState>& states,
rngs
.
push_back
(
&
rng
);
}
std
::
uniform_int_distribution
<
size_t
>
s_rand
(
0
,
block_list
.
size
()
-
1
);
half_edge_neighbour_policy
<
Graph
>
npolicy
(
g
);
vector
<
MEntries
>
m_entries
=
m_entries_r
;
...
...
@@ -1362,7 +1364,6 @@ void move_sweep_overlap(vector<BlockState>& states,
typedef
std
::
uniform_real_distribution
<>
rdist_t
;
auto
rand_real
=
std
::
bind
(
rdist_t
(),
std
::
ref
(
*
rngs
[
tid
]));
std
::
uniform_int_distribution
<
size_t
>
s_rand
(
0
,
B
-
1
);
vertex_t
v
;
if
(
sequential
)
...
...
@@ -1380,7 +1381,7 @@ void move_sweep_overlap(vector<BlockState>& states,
continue
;
// attempt random block
vertex_t
s
=
s_rand
(
*
rngs
[
tid
])
;
vertex_t
s
=
block_list
[
s_rand
(
*
rngs
[
tid
])]
;
if
(
!
random_move
&&
total_degreeS
()(
v
,
g
)
>
0
)
{
...
...
@@ -1550,18 +1551,20 @@ void coherent_move_sweep_overlap(vector<BlockState>& states,
vector
<
MEntries
>&
m_entries
,
overlap_stats_t
&
overlap_stats
,
Vprop
wr
,
Vprop
b
,
VLprop
cv
,
VVprop
vmap
,
Vprop
clabel
,
vector
<
int64_t
>&
vlist
,
bool
deg_corr
,
bool
dense
,
bool
multigraph
,
double
beta
,
Vprop
vweight
,
Graph
&
g
,
bool
sequential
,
bool
random_move
,
double
c
,
bool
confine_layers
,
size_t
niter
,
size_t
B
,
RNG
&
rng
,
double
&
S
,
size_t
&
nmoves
)
vector
<
int64_t
>&
vlist
,
vector
<
int64_t
>&
block_list
,
bool
deg_corr
,
bool
dense
,
bool
multigraph
,
double
beta
,
Vprop
vweight
,
Graph
&
g
,
bool
sequential
,
bool
random_move
,
double
c
,
bool
confine_layers
,
size_t
niter
,
size_t
B
,
RNG
&
rng
,
double
&
S
,
size_t
&
nmoves
)
{
typedef
typename
graph_traits
<
Graph
>::
vertex_descriptor
vertex_t
;
typedef
std
::
uniform_real_distribution
<>
rdist_t
;
auto
rand_real
=
std
::
bind
(
rdist_t
(),
std
::
ref
(
rng
));
std
::
uniform_int_distribution
<
size_t
>
s_rand
(
0
,
B
-
1
);
std
::
uniform_int_distribution
<
size_t
>
s_rand
(
0
,
block_list
.
size
()
-
1
);
nmoves
=
0
;
S
=
0
;
...
...
@@ -1599,7 +1602,7 @@ void coherent_move_sweep_overlap(vector<BlockState>& states,
continue
;
// attempt random block
vertex_t
s
=
s_rand
(
rng
)
;
vertex_t
s
=
block_list
[
s_rand
(
rng
)]
;
if
(
!
random_move
&&
total_degreeS
()(
v
,
g
)
>
0
)
{
...
...
@@ -1689,7 +1692,7 @@ void coherent_move_sweep_overlap(vector<BlockState>& states,
double
dS
=
virtual_move
(
vs
,
s
,
b
,
cv
,
vmap
,
states
,
m_entries
,
dense
,
deg_corr
,
multigraph
,
npolicy
);
assert
(
!
std
::
isinf
(
dS
)
&&
!
std
::
isnan
(
dS
));
assert
(
!
std
::
isinf
(
dS
)
&&
!
std
::
isnan
(
dS
));
bool
accept
=
false
;
if
(
std
::
isinf
(
beta
))
...
...
@@ -1752,10 +1755,11 @@ void merge_sweep_overlap(vector<BlockState>& states,
vector
<
MEntries
>&
m_entries
,
overlap_stats_t
&
overlap_stats
,
Vprop
wr
,
Vprop
b
,
EVprop
ce
,
VLprop
cv
,
VVprop
vmap
,
Vprop
clabel
,
vector
<
int64_t
>&
vlist
,
bool
deg_corr
,
bool
dense
,
bool
multigraph
,
Graph
&
g
,
bool
random_move
,
size_t
confine_layers
,
size_t
nmerges
,
size_t
ntries
,
size_t
B
,
RNG
&
rng
,
double
&
S
,
size_t
&
nmoves
)
vector
<
int64_t
>&
vlist
,
vector
<
int64_t
>&
block_list
,
bool
deg_corr
,
bool
dense
,
bool
multigraph
,
Graph
&
g
,
bool
random_move
,
size_t
confine_layers
,
size_t
nmerges
,
size_t
ntries
,
size_t
B
,
RNG
&
rng
,
double
&
S
,
size_t
&
nmoves
)
{
typedef
typename
graph_traits
<
Graph
>::
vertex_descriptor
vertex_t
;
...
...
@@ -1799,7 +1803,7 @@ void merge_sweep_overlap(vector<BlockState>& states,
}
}
std
::
uniform_int_distribution
<
size_t
>
s_rand
(
0
,
B
-
1
);
std
::
uniform_int_distribution
<
size_t
>
s_rand
(
0
,
block_list
.
size
()
-
1
);
nmoves
=
0
;
S
=
0
;
...
...
@@ -1838,7 +1842,7 @@ void merge_sweep_overlap(vector<BlockState>& states,
else
{
// attempt random block
s
=
uniform_sample
(
blocks
[
clabel
[
r
]],
rng
)
;
s
=
block_list
[
s_rand
(
rng
)]
;
}
if
(
s
==
r
)
...
...
src/graph_tool/community/blockmodel.py
View file @
5908da56
...
...
@@ -201,6 +201,7 @@ class BlockState(object):
self
.
egroups
=
None
self
.
nsampler
=
None
self
.
sweep_vertices
=
None
self
.
block_list
=
None
self
.
overlap_stats
=
libcommunity
.
overlap_stats
()
self
.
partition_stats
=
libcommunity
.
partition_stats
()
self
.
edges_dl
=
False
...
...
@@ -994,6 +995,7 @@ def mcmc_sweep(state, beta=1., c=1., niter=1, dl=False, dense=False,
merge_map
=
kwargs
.
get
(
"merge_map"
,
None
)
coherent_merge
=
kwargs
.
get
(
"coherent_merge"
,
False
)
edges_dl
=
kwargs
.
get
(
"edges_dl"
,
False
)
block_list
=
kwargs
.
get
(
"block_list"
,
None
)
if
state
.
B
==
1
:
return
0.
,
0
...
...
@@ -1018,6 +1020,12 @@ def mcmc_sweep(state, beta=1., c=1., niter=1, dl=False, dense=False,
else
:
target_blocks
=
libcommunity
.
get_vector
(
0
)
if
block_list
is
not
None
:
state
.
block_list
=
libcommunity
.
get_vector
(
len
(
block_list
))
state
.
block_list
.
a
=
block_list
elif
state
.
block_list
is
None
or
len
(
state
.
block_list
)
!=
state
.
B
:
state
.
block_list
=
libcommunity
.
get_vector
(
state
.
B
)
state
.
block_list
.
a
=
arange
(
state
.
B
)
random_move
=
c
==
numpy
.
inf
...
...
@@ -1098,6 +1106,7 @@ def mcmc_sweep(state, beta=1., c=1., niter=1, dl=False, dense=False,
_prop
(
"v"
,
state
.
g
,
state
.
b
),
_prop
(
"v"
,
state
.
bg
,
bclabel
),
state
.
sweep_vertices
,
state
.
block_list
,
target_blocks
,
state
.
deg_corr
,
dense
,
multigraph
,
_prop
(
"e"
,
state
.
g
,
state
.
eweight
),
...
...
@@ -1126,6 +1135,7 @@ def mcmc_sweep(state, beta=1., c=1., niter=1, dl=False, dense=False,
_prop
(
"v"
,
state
.
g
,
state
.
b
),
_prop
(
"v"
,
state
.
bg
,
bclabel
),
state
.
sweep_vertices
,
state
.
block_list
,
target_blocks
,
state
.
deg_corr
,
dense
,
multigraph
,
multigraph
,
...
...
@@ -1175,7 +1185,7 @@ def mcmc_sweep(state, beta=1., c=1., niter=1, dl=False, dense=False,
[
state
.
master
for
state
in
states
],
[
state
.
slave
for
state
in
states
],
_prop
(
"v"
,
None
,
bclabel
),
[
main_state
.
sweep_vertices
,
target_blocks
],
[
main_state
.
sweep_vertices
,
main_state
.
block_list
,
target_blocks
],
main_state
.
deg_corr
,
dense
,
multigraph
,
[
_prop
(
"e"
,
state
.
g
,
state
.
eweight
)
for
state
in
states
],
[
_prop
(
"v"
,
state
.
g
,
state
.
vweight
)
for
state
in
states
],
...
...
src/graph_tool/community/covariate_blockmodel.py
View file @
5908da56
...
...
@@ -212,7 +212,8 @@ class CovariateBlockState(BlockState):
self
.
total_state
.
clear_cache
()
self
.
sweep_vertices
=
self
.
total_state
.
sweep_vertices
self
.
sweep_vertices
=
None
self
.
block_list
=
None
self
.
emat
=
None
self
.
overlap_stats
=
self
.
total_state
.
overlap_stats
self
.
__layer_entropy
=
None
...
...
src/graph_tool/community/overlap_blockmodel.py
View file @
5908da56
...
...
@@ -223,6 +223,7 @@ class OverlapBlockState(BlockState):
self
.
egroups
=
None
self
.
nsampler
=
None
self
.
sweep_vertices
=
None
self
.
block_list
=
None
self
.
partition_stats
=
libcommunity
.
overlap_partition_stats
()
self
.
edges_dl
=
False
self
.
emat
=
None
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment