Polymake.jl icon indicating copy to clipboard operation
Polymake.jl copied to clipboard

Enh/bb direct call

Open kalmarek opened this issue 5 years ago • 1 comments

kalmarek avatar Jul 30 '20 22:07 kalmarek

using Polymake

function BB_iterator(c)
    N = polytope.dim(c)
    @info "running bb using iterator over $N-dimensional polytope"
    bb = Polymake.BeneathBeyond(c.POINTS, c.LINEALITY_SPACE, redundant=true, triangulation=true, iscone=true)
    tr = GC.@preserve bb begin
        for x in bb
            @show length(Polymake.getTriangulation(bb.algo))
        end
        tr = Polymake.getTriangulation(bb.algo)
        @show last(tr)
        tr
    end
    @info "bb is done!"
    return tr
end


function BB_direct_call(c)
    N = polytope.dim(c)
    @info "running bb using direct calls over $N-dimensional polytope"
    bb = Polymake.BeneathBeyondAlgo{Polymake.Rational}()
    Polymake.bb_initialize!(bb, c.POINTS, c.LINEALITY_SPACE)
    
    for p in 0:6
        @time Polymake.bb_add_point!(bb, p)
    end
    
    @show Polymake.getTriangulation(bb)
    
    @time for p in 2:size(c.POINTS, 1)-1
        Polymake.bb_add_point!(bb, p)
    end
    tr = Polymake.getTriangulation(bb)
    @show last(tr)
    @info "bb is done!"
    return tr
end;



const rs = polytope.rand_sphere(4,30);

@info "running placing_triangulation"
t1 = polytope.placing_triangulation(rs.POINTS)
t2 = let rs = rs
    @info "running bb using bb_compute! over $N-dimensional polytope"
    bbalgo = Polymake.BeneathBeyondAlgo{Polymake.Rational}()
    GC.@preserve bbalgo begin
        Polymake.bb_compute!(bbalgo, rs.POINTS, rs.LINEALITY_SPACE)
        Polymake.getTriangulation(bbalgo)
    end
end

@assert t1 == t2

t3 = BB_direct_call(rs)
@assert t1 == t3
t4 = BB_iterator(rs)
@assert t1 == t4

occasionally (rather often?) crashes in different places (once I've seen this even in polytope.placing_triangulation).

kalmarek avatar Aug 02 '20 10:08 kalmarek