Hello,

I am trying to add a more detailed level at the bottom of a nested blockmodel. Given a graph g, I run

c = gt.is_bipartite(g, True)[1]
state = gt.minimize_nested_blockmodel_dl(g, deg_corr=True, layers=True, 
            state_args=dict(ec=g.ep.visits, layers=False, pclabel=c), verbose=True)

to find a nestedBlockState 'state'. Then I run 

state.duplicate_level(0)
bstate = state.find_new_level(0, bisection_args={'verbose': True})

This seems to correctly invoke the bisection_minimize() method and runs for a while, then raises a ValueError: provided clabel is inconsistent with node partition.

The output is below. Where exactly is the inconsistency coming from? 

Thank you,

Peter

    B: 90666 <- 165691    shrinking 165691 -> 90666

    B: 90666 <- 165691    B=90666  niter:     1  count:    0  breaks:  0  min_S: 4549865.6  max_S: 4549925.5  S: 4549865.6  ΔS:     -59.8492  moves:   768 

    B: 90666 <- 165691    B=90666  niter:     2  count:    0  breaks:  0  min_S: 4549799.7  max_S: 4549925.5  S: 4549799.7  ΔS:     -65.8762  moves:   720 

    B: 90666 <- 165691    B=90666  niter:     3  count:    0  breaks:  0  min_S: 4549799.5  max_S: 4549925.5  S: 4549799.5  ΔS:    -0.251813  moves:   759 

    B: 90666 <- 165691    B=90666  niter:     4  count:    0  breaks:  0  min_S: 4549671.3  max_S: 4549925.5  S: 4549671.3  ΔS:     -128.157  moves:   788 

    B: 90666 <- 165691    B=90666  niter:     5  count:    0  breaks:  0  min_S: 4549577.9  max_S: 4549925.5  S: 4549577.9  ΔS:     -93.3804  moves:   797 

    B: 90666 <- 165691    B=90666  niter:     6  count:    0  breaks:  0  min_S: 4549495.5  max_S: 4549925.5  S: 4549495.5  ΔS:     -82.3979  moves:   787 

    B: 90666 <- 165691    B=90666  niter:     7  count:    0  breaks:  0  min_S: 4549459.7  max_S: 4549925.5  S: 4549459.7  ΔS:     -35.8572  moves:   777 

...
...
...

Current bracket: (851, 90666, 165691) (2756226.276337453, 4857281.779995878, 4882260.334948147)

    B: 44298 <- 90666    shrinking 90666 -> 45333

Traceback (most recent call last):

  File "code/add_layer.py", line 9, in <module>

    bstate = state.find_new_level(0, bisection_args={'verbose': True})

  File "/usr/lib/python2.7/dist-packages/graph_tool/inference/nested_blockmodel.py", line 447, in find_new_level

    state = bisection_minimize([min_state, max_state], **bisection_args)

  File "/usr/lib/python2.7/dist-packages/graph_tool/inference/bisection.py", line 157, in bisection_minimize

    f_mid = get_state_dl(B=mid_B, **kwargs)

  File "/usr/lib/python2.7/dist-packages/graph_tool/inference/bisection.py", line 85, in get_state_dl

    (B, B_prev)))))

  File "/usr/lib/python2.7/dist-packages/graph_tool/inference/mcmc.py", line 358, in mcmc_multilevel

    state = state.shrink(B=B_next, **shrink_args)

  File "/usr/lib/python2.7/dist-packages/graph_tool/inference/layered_blockmodel.py", line 862, in shrink

    return BlockState.shrink(self, B, **kwargs)

  File "/usr/lib/python2.7/dist-packages/graph_tool/inference/blockmodel.py", line 1580, in shrink

    state = self.copy(b=b)

  File "/usr/lib/python2.7/dist-packages/graph_tool/inference/layered_blockmodel.py", line 434, in copy

    "rec_params", "allow_empty"]))

  File "/usr/lib/python2.7/dist-packages/graph_tool/inference/layered_blockmodel.py", line 149, in __init__

    "layer_entropy"]))

  File "/usr/lib/python2.7/dist-packages/graph_tool/inference/blockmodel.py", line 310, in __init__

    raise ValueError("provided clabel is inconsistent with node partition")

ValueError: provided clabel is inconsistent with node partition


Dr Peter Straka
Research Fellow (DECRA)
School of Physical Engineering and Mathematical Sciences | UNSW Canberra
skype: straka.ps