Hi again, I'm following the cookbook and I'm collecting vertex marginals during mcmc_equilibrate, so pv = [None] * len(state.get_levels()) def collect_marginals(s): global pv pv = [sl.collect_vertex_marginals(pv[l]) for l, sl in enumerate(s.get_levels())] gt.mcmc_equilibrate(state, force_niter=1000, mcmc_args=dict(niter=10), wait=wait, nbreaks=nbreaks, epsilon=epsilon, callback=collect_marginals ) After this is done, every element of pv will be, basically, a list of arrays with as many elements as many vertexs are at specific level, each with the counts for memberships. In fact, when I need to assign groups to the original vertexs to a blockstate at level L > 0 (say, level 2) I can use state.project_partition(2, 0) the vertex map will contain as many elements as the number of vertex of my graph, each labeled according to the blocks at level 2 of the hierarchy. I cannot find a smart way to project the marginals I've collected, would it be sufficient to sum numbers for pv[0] following the hierarchy (that is, summing counts for all groups at level 0 which are included in the same group at level 2)? Thanks d