def to_G_2_dx_dx(decomp):
    if isinstance(decomp, pybo.ProdClass):
        g = decomp.second
    else:
        g = decomp
    g = g.underive_all()
    assert isinstance(g, EdgeRootedTwoConnectedPlanarGraph), g
    return pybo.LDerivedClass(
        pybo.LDerivedClass(TwoConnectedPlanarGraph(g.half_edge)))
Пример #2
0
 def set(self, graphs):
     # Merge a set of l-derived one-connected planar graphs at their marked vertices.
     # If the set is empty, return a single-node graph.
     if len(graphs) is 0:
         g = OneConnectedPlanarGraph()
         return pybo.LDerivedClass(OneConnectedPlanarGraph(), g.half_edge)
     result = graphs.pop()
     for g in graphs:
         result.marked_atom.insert_all_after(g.marked_atom)
     assert isinstance(result, pybo.LDerivedClass)
     return result
    def sample_iterative(self, stack, result_stack, prev, grammar):
        if prev is None or self in prev.children:
            stack.append(self._sampler)
        else:
            obj_to_check = result_stack.pop()

            def is_acceptable(gamma):
                return pybo.bern((1 / self._alpha_l_u) * (gamma.l_size /
                                                          (gamma.u_size + 1)))

            if is_acceptable(obj_to_check):
                stack.pop()
                result_stack.append(
                    pybo.LDerivedClass(obj_to_check.base_class_object))
            else:
                stack.append(self._sampler)
def to_G_2_arrow_dx_dx(network):
    return pybo.LDerivedClass(to_G_2_arrow_dx(network))
def to_K_dy_dx(tree):
    # TODO In fact K_dx_dy, notation a bit messed up here
    tree.leaves_count += 1
    tree = pybo.LDerivedClass(tree)
    return pybo.UDerivedClass(tree)