Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

einexpr function with HyPar optimizer sometimes gets stuck #61

Open
jofrevalles opened this issue Sep 16, 2024 · 0 comments
Open

einexpr function with HyPar optimizer sometimes gets stuck #61

jofrevalles opened this issue Sep 16, 2024 · 0 comments
Labels
bug Something isn't working

Comments

@jofrevalles
Copy link
Member

In some specific cases (for some values of the imbalance), the HyPar optimizer gets stuck trying to find a path, and when I use this in a .ipynb notebook, I have to even restart the whole VSCode, since it does not let me restart just the Julia kernel.

I think we could put some sort of a timeout argument, but I am not sure if this is the best way to deal with this.

See this example where the code gets stuck (at least in my computer):

julia> using EinExprs; using KaHyPar

julia> tensors = [
EinExpr([:A, , , ], Dict( => 2, :A => 2,  => 2,  => 2))
EinExpr([:B, ], Dict(:B => 2,  => 2))
EinExpr([:C, :F, , ], Dict( => 2,  => 2, :F => 2, :C => 2))
EinExpr([:D], Dict(:D => 2))
EinExpr([:E, ], Dict( => 2, :E => 2))
EinExpr([:G, ], Dict( => 2, :G => 2))
EinExpr([:H, ], Dict(:H => 2,  => 2))
EinExpr([:I, , , ], Dict(:I => 2,  => 2,  => 2,  => 2))
EinExpr([:J, ], Dict(:J => 2,  => 2))
EinExpr([:K], Dict(:K => 2))
EinExpr([:L, :C], Dict(:L => 2, :C => 2))
EinExpr([:M, , :e, ], Dict( => 2, :M => 2, :e => 2,  => 2))
EinExpr([:N, ], Dict(:N => 2,  => 2))
EinExpr([:O, , , ], Dict( => 2,  => 2,  => 2, :O => 2))
EinExpr([:P, :ſ, , ], Dict(:P => 2,  => 2,  => 2, :ſ => 2))
EinExpr([:Q, ], Dict(:Q => 2,  => 2))
EinExpr([:R, ], Dict(:R => 2,  => 2))
EinExpr([:S, , , ], Dict( => 2, :S => 2,  => 2,  => 2))
EinExpr([:T, ], Dict(:T => 2,  => 2))
EinExpr([:U, :K], Dict(:U => 2, :K => 2))
EinExpr([:V, , , ], Dict( => 2,  => 2, :V => 2,  => 2))
EinExpr([:W, , , ], Dict( => 2, :W => 2,  => 2,  => 2))
EinExpr([:X, ], Dict(:X => 2,  => 2))
EinExpr([:Y], Dict(:Y => 2))
EinExpr([:Z, ], Dict(:Z => 2,  => 2))
EinExpr([:Z, ], Dict(:Z => 2,  => 2))
EinExpr([:a, , , ], Dict(:a => 2,  => 2,  => 2,  => 2))
EinExpr([:f, , , ], Dict(:f => 2,  => 2,  => 2,  => 2))
EinExpr([:g, :A], Dict(:A => 2, :g => 2))
EinExpr([:h, ], Dict(:h => 2,  => 2))
EinExpr([:i, ], Dict( => 2, :i => 2))
EinExpr([:j, ], Dict(:j => 2,  => 2))
EinExpr([:k, ], Dict(:k => 2,  => 2))
EinExpr([:k, ], Dict(:k => 2,  => 2))
EinExpr([:l, ], Dict(:l => 2,  => 2))
EinExpr([:m, ], Dict(:m => 2,  => 2))
EinExpr([:m, ], Dict(:m => 2,  => 2))
EinExpr([:o, ], Dict(:o => 2,  => 2))
EinExpr([:p, ], Dict( => 2, :p => 2))
EinExpr([:q, , , ], Dict( => 2,  => 2,  => 2, :q => 2))
EinExpr([:r, ], Dict( => 2, :r => 2))
EinExpr([:s, , , ], Dict( => 2, :s => 2,  => 2,  => 2))
EinExpr([:t, :X], Dict(:X => 2, :t => 2))
EinExpr([:v], Dict(:v => 2))
EinExpr([:w, :i], Dict(:w => 2, :i => 2))
EinExpr([:w, ], Dict(:w => 2,  => 2))
EinExpr([:x, , , ], Dict( => 2,  => 2,  => 2, :x => 2))
EinExpr([:y, ], Dict(:y => 2,  => 2))
EinExpr([:z, ], Dict(:z => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, , , ], Dict( => 2,  => 2,  => 2,  => 2))
EinExpr([], Dict( => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([], Dict( => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, :u, , ], Dict( => 2, :u => 2,  => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, , , ], Dict( => 2,  => 2,  => 2,  => 2))
EinExpr([], Dict( => 2))
EinExpr([, :h], Dict( => 2, :h => 2))
EinExpr([], Dict( => 2))
EinExpr([, :x], Dict( => 2, :x => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([], Dict( => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([], Dict( => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, :f], Dict(:f => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, :c, , ], Dict( => 2,  => 2, :c => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, , , :ƿ], Dict( => 2, :ƿ => 2,  => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, , , ], Dict( => 2,  => 2,  => 2,  => 2))
EinExpr([, :M], Dict( => 2, :M => 2))
EinExpr([, :S], Dict(:S => 2,  => 2))
EinExpr([, :d], Dict(:d => 2,  => 2))
EinExpr([, , , ], Dict( => 2,  => 2,  => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, , , ], Dict( => 2,  => 2,  => 2,  => 2))
EinExpr([, , , ], Dict( => 2,  => 2,  => 2,  => 2))
EinExpr([, :J], Dict(:J => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([], Dict( => 2))
EinExpr([], Dict( => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([:ÿ, ], Dict(:ÿ => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, :U], Dict(:U => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([], Dict( => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, :r], Dict(:r => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, , , :G], Dict( => 2, :G => 2,  => 2,  => 2))
EinExpr([], Dict( => 2))
EinExpr([, , , ], Dict( => 2,  => 2,  => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, , , ], Dict( => 2,  => 2,  => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, , , ], Dict( => 2,  => 2,  => 2,  => 2))
EinExpr([, :e, , ], Dict( => 2,  => 2,  => 2, :e => 2))
EinExpr([, , , ], Dict( => 2,  => 2,  => 2,  => 2))
EinExpr([, , , ], Dict( => 2,  => 2,  => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, :j], Dict( => 2, :j => 2))
EinExpr([, , , ], Dict( => 2,  => 2,  => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, , , ], Dict( => 2,  => 2,  => 2,  => 2))
EinExpr([, , :n, :E], Dict( => 2,  => 2, :n => 2, :E => 2))
EinExpr([, , , ], Dict( => 2,  => 2,  => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, , , ], Dict( => 2,  => 2,  => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, , :b, ], Dict(:b => 2,  => 2,  => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([], Dict( => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, , , ], Dict( => 2,  => 2,  => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, :Y], Dict( => 2, :Y => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([], Dict( => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, :V], Dict(:V => 2,  => 2))
EinExpr([, , , ], Dict( => 2,  => 2,  => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([:Ŀ, , , ], Dict( => 2,  => 2,  => 2, :Ŀ => 2))
EinExpr([, :b, , ], Dict(:b => 2,  => 2,  => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, , , ], Dict( => 2,  => 2,  => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, , , :H], Dict( => 2,  => 2, :H => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, , , ], Dict( => 2,  => 2,  => 2,  => 2))
EinExpr([, :ÿ], Dict(:ÿ => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([], Dict( => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, , , :l], Dict( => 2, :l => 2,  => 2,  => 2))
EinExpr([, , , ], Dict( => 2,  => 2,  => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, , , ], Dict( => 2,  => 2,  => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, , , ], Dict( => 2,  => 2,  => 2,  => 2))
EinExpr([, , , ], Dict( => 2,  => 2,  => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, , :c, ], Dict( => 2,  => 2, :c => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, :P], Dict(:P => 2,  => 2))
EinExpr([, :Ŀ], Dict( => 2, :Ŀ => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, , , ], Dict( => 2,  => 2,  => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([], Dict( => 2))
EinExpr([, , , ], Dict( => 2,  => 2,  => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, , , ], Dict( => 2,  => 2,  => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([], Dict( => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, :n, , ], Dict( => 2, :n => 2,  => 2,  => 2))
EinExpr([, , :ſ, ], Dict( => 2, :ſ => 2,  => 2,  => 2))
EinExpr([, , , ], Dict( => 2,  => 2,  => 2,  => 2))
EinExpr([, , , ], Dict( => 2,  => 2,  => 2,  => 2))
EinExpr([, :d, , :o], Dict( => 2, :o => 2, :d => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, :T], Dict(:T => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, :y], Dict( => 2, :y => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, :p], Dict(:p => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([], Dict( => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, , , ], Dict( => 2,  => 2,  => 2,  => 2))
EinExpr([, :D], Dict(:D => 2,  => 2))
EinExpr([, , :u, :N], Dict( => 2,  => 2, :N => 2, :u => 2))
EinExpr([, :g], Dict(:g => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, :B], Dict( => 2, :B => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, :s], Dict(:s => 2,  => 2))
EinExpr([, , , ], Dict( => 2,  => 2,  => 2,  => 2))
EinExpr([], Dict( => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, , , ], Dict( => 2,  => 2,  => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, :R], Dict( => 2, :R => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, :z], Dict( => 2, :z => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, :I], Dict(:I => 2,  => 2))
EinExpr([, :L], Dict( => 2, :L => 2))
EinExpr([, , , ], Dict( => 2,  => 2,  => 2,  => 2))
EinExpr([], Dict( => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, :v], Dict(:v => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, :F], Dict( => 2, :F => 2))
EinExpr([, , , ], Dict( => 2,  => 2,  => 2,  => 2))
EinExpr([:ƿ, :Q], Dict(:ƿ => 2, :Q => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, :O], Dict( => 2, :O => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, , , ], Dict( => 2,  => 2,  => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, :a], Dict(:a => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, :q], Dict( => 2, :q => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, , , ], Dict( => 2,  => 2,  => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, , , :t], Dict( => 2,  => 2,  => 2, :t => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, :W], Dict( => 2, :W => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([], Dict( => 2))
EinExpr([, ], Dict( => 2,  => 2))
EinExpr([], Dict( => 2))
EinExpr([, ], Dict( => 2,  => 2))
]

julia> transform!(tn, Tenet.ContractSimplification())

julia> path = einexpr(tn, optimizer=HyPar(parts=2, imbalance=0.1, edge_scaler=(ind_size) -> 10 * Int(round(log2(ind_size))), vertex_scaler=(prod_size) -> 100 * Int(round(exp2(prod_size)))))
@jofrevalles jofrevalles added the bug Something isn't working label Sep 16, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

1 participant