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

Assertion error when revising

Open antoine-levitt opened this issue 3 years ago • 4 comments

The error I get is

┌ Error: Failed to revise /home/antoine/.julia/dev/DFTK/src/densities.jl
│   exception =
│    AssertionError: ld[idx] < typemax(eltype(ld))
│    Stacktrace:
│     [1] (::Revise.var"#77#79"{OrderedCollections.OrderedDict{Revise.RelocatableExpr, Union{Nothing, Vector{Any}}}, OrderedCollections.OrderedDict{Revise.RelocatableExpr, Union{Nothing, Vector{Any}}}})()
│       @ Revise ~/.julia/packages/Revise/jHTGK/src/packagedef.jl:262
└ @ Revise ~/.julia/packages/Revise/jHTGK/src/packagedef.jl:710

I'm hoping the assertion will be of some use. It's not trivial to me to reproduce it, but I've gotten it a couple of times now; what I can say is that occurs when I'm trying to compare different versions of a function, so something like

module A
#f() = 1
f() = 2
end

then commenting in and out both versions, running the test script, changing things, etc. It seems to occur when I (by mistake) comment in both versions. But of course trying the MWE above doesn't trigger the bug...

If there's some commands I can run to help debugging I can try to do it next time I trigger the bug.

edit: this is julia 1.7, Revise 3.3.1

antoine-levitt avatar Feb 03 '22 14:02 antoine-levitt

Perhaps try the debug logging described here: https://timholy.github.io/Revise.jl/stable/debugging/

fredrikekre avatar Feb 03 '22 14:02 fredrikekre

Thanks, I didn't see this! OK, I've put rlogger = Revise.debug_logger() in my startup.jl and will post next time I encounter the bug

antoine-levitt avatar Feb 03 '22 15:02 antoine-levitt

Well that didn't take long.

Revise.LogRecord(Debug, DeleteMethod, Action, Revise_4ac0f476, "/home/antoine/.julia/packages/Revise/jHTGK/src/packagedef.jl", 269, (time=1.64390048138298e9, deltainfo=(Tuple{typeof(DFTK.compute_partial_density!), Any, Any, Any, Any, Any}, MethodSummary(:compute_partial_density!, :DFTK, Symbol("/home/antoine/.julia/dev/DFTK/src/densities.jl"), 21, Tuple{typeof(DFTK.compute_partial_density!), Any, Any, Any, Any, Any}))))

Revise.LogRecord(Debug, Eval, Action, Revise_9147188b, "/home/antoine/.julia/packages/Revise/jHTGK/src/packagedef.jl", 318, (time=1.643900481407101e9, deltainfo=(DFTK, :(#= /home/antoine/.julia/dev/DFTK/src/densities.jl:55 =# @views #= /home/antoine/.julia/dev/DFTK/src/densities.jl:55 =# @timing(function compute_density(basis::PlaneWaveBasis, ψ, occupation)
              #= /home/antoine/.julia/dev/DFTK/src/densities.jl:55 =#
              #= /home/antoine/.julia/dev/DFTK/src/densities.jl:56 =#
              n_k = length(basis.kpoints)
              #= /home/antoine/.julia/dev/DFTK/src/densities.jl:57 =#
              n_spin = basis.model.n_spin_components
              #= /home/antoine/.julia/dev/DFTK/src/densities.jl:60 =#
              T = promote_type(eltype(basis), eltype(ψ[1]))
              #= /home/antoine/.julia/dev/DFTK/src/densities.jl:61 =#
              ρaccus = [similar(ψ[1], T, (basis.fft_size..., n_spin)) for ithread = 1:Threads.nthreads()]
              #= /home/antoine/.julia/dev/DFTK/src/densities.jl:68 =#
              kpt_per_thread = [ifelse(i <= n_k, [i], Vector{Int}()) for i = 1:Threads.nthreads()]
              #= /home/antoine/.julia/dev/DFTK/src/densities.jl:69 =#
              if n_k >= Threads.nthreads()
                  #= /home/antoine/.julia/dev/DFTK/src/densities.jl:70 =#
                  kblock = floor(Int, length(basis.kpoints) / Threads.nthreads())
                  #= /home/antoine/.julia/dev/DFTK/src/densities.jl:71 =#
                  kpt_per_thread = [collect(1:length(basis.kpoints) - (Threads.nthreads() - 1) * kblock)]
                  #= /home/antoine/.julia/dev/DFTK/src/densities.jl:72 =#
                  for ithread = 2:Threads.nthreads()
                      #= /home/antoine/.julia/dev/DFTK/src/densities.jl:73 =#
                      push!(kpt_per_thread, (kpt_per_thread[end])[end] .+ collect(1:kblock))
                  end
                  #= /home/antoine/.julia/dev/DFTK/src/densities.jl:75 =#
                  #= /home/antoine/.julia/dev/DFTK/src/densities.jl:75 =# @assert (kpt_per_thread[end])[end] == length(basis.kpoints)
              end
              #= /home/antoine/.julia/dev/DFTK/src/densities.jl:78 =#
              #= /home/antoine/.julia/dev/DFTK/src/densities.jl:78 =# Threads.@threads for (ikpts, ρaccu) = collect(zip(kpt_per_thread, ρaccus))
                      #= /home/antoine/.julia/dev/DFTK/src/densities.jl:79 =#
                      ρaccu .= 0
                      #= /home/antoine/.julia/dev/DFTK/src/densities.jl:80 =#
                      ρ_k = similar(ψ[1], T, basis.fft_size)
                      #= /home/antoine/.julia/dev/DFTK/src/densities.jl:81 =#
                      for ik = ikpts
                          #= /home/antoine/.julia/dev/DFTK/src/densities.jl:82 =#
                          kpt = basis.kpoints[ik]
                          #= /home/antoine/.julia/dev/DFTK/src/densities.jl:83 =#
                          compute_partial_density!(ρ_k, basis, kpt, ψ[ik], occupation[ik])
                          #= /home/antoine/.julia/dev/DFTK/src/densities.jl:85 =#
                          accumulate_over_symmetries!(ρaccu[:, :, :, kpt.spin], ρ_k, basis, basis.ksymops[ik])
                      end
                  end
              #= /home/antoine/.julia/dev/DFTK/src/densities.jl:90 =#
              count = sum((length(basis.ksymops[ik]) for ik = 1:length(basis.kpoints))) ÷ n_spin
              #= /home/antoine/.julia/dev/DFTK/src/densities.jl:91 =#
              count = mpi_sum(count, basis.comm_kpts)
              #= /home/antoine/.julia/dev/DFTK/src/densities.jl:92 =#
              ρ = sum(ρaccus) ./ count
              #= /home/antoine/.julia/dev/DFTK/src/densities.jl:93 =#
              mpi_sum!(ρ, basis.comm_kpts)
              #= /home/antoine/.julia/dev/DFTK/src/densities.jl:94 =#
              lowpass_for_symmetry!(ρ, basis)
              #= /home/antoine/.julia/dev/DFTK/src/densities.jl:95 =#
              ρ = G_to_r(basis, ρ)
              #= /home/antoine/.julia/dev/DFTK/src/densities.jl:96 =#
              ρ = symmetrize_ρ(basis, ρ)
          end)))))

Revise.LogRecord(Debug, Eval, Action, Revise_9147188b, "/home/antoine/.julia/packages/Revise/jHTGK/src/packagedef.jl", 318, (time=1.643900481431607e9, deltainfo=(DFTK, quote
    #= /home/antoine/.julia/dev/DFTK/src/densities.jl:47 =#
    #= /home/antoine/.julia/dev/DFTK/src/densities.jl:47 =# Core.@doc "    compute_density(basis::PlaneWaveBasis, ψ::AbstractVector, occupation::AbstractVector)\n\nCompute the density and spin density for a wave function `ψ` discretized on the plane-wave\ngrid `basis`, where the individual k-points are occupied according to `occupation`.\n`ψ` should be one coefficient matrix per ``k``-point. If the `Model` underlying the basis\nis not collinear the spin density is `nothing`.\n" #= /home/antoine/.julia/dev/DFTK/src/densities.jl:55 =# @views(#= /home/antoine/.julia/dev/DFTK/src/densities.jl:55 =# @timing(function compute_density(basis::PlaneWaveBasis, ψ, occupation)
                    #= /home/antoine/.julia/dev/DFTK/src/densities.jl:55 =#
                    #= /home/antoine/.julia/dev/DFTK/src/densities.jl:56 =#
                    n_k = length(basis.kpoints)
                    #= /home/antoine/.julia/dev/DFTK/src/densities.jl:57 =#
                    n_spin = basis.model.n_spin_components
                    #= /home/antoine/.julia/dev/DFTK/src/densities.jl:60 =#
                    T = promote_type(eltype(basis), eltype(ψ[1]))
                    #= /home/antoine/.julia/dev/DFTK/src/densities.jl:61 =#
                    ρaccus = [similar(ψ[1], T, (basis.fft_size..., n_spin)) for ithread = 1:Threads.nthreads()]
                    #= /home/antoine/.julia/dev/DFTK/src/densities.jl:68 =#
                    kpt_per_thread = [ifelse(i <= n_k, [i], Vector{Int}()) for i = 1:Threads.nthreads()]
                    #= /home/antoine/.julia/dev/DFTK/src/densities.jl:69 =#
                    if n_k >= Threads.nthreads()
                        #= /home/antoine/.julia/dev/DFTK/src/densities.jl:70 =#
                        kblock = floor(Int, length(basis.kpoints) / Threads.nthreads())
                        #= /home/antoine/.julia/dev/DFTK/src/densities.jl:71 =#
                        kpt_per_thread = [collect(1:length(basis.kpoints) - (Threads.nthreads() - 1) * kblock)]
                        #= /home/antoine/.julia/dev/DFTK/src/densities.jl:72 =#
                        for ithread = 2:Threads.nthreads()
                            #= /home/antoine/.julia/dev/DFTK/src/densities.jl:73 =#
                            push!(kpt_per_thread, (kpt_per_thread[end])[end] .+ collect(1:kblock))
                        end
                        #= /home/antoine/.julia/dev/DFTK/src/densities.jl:75 =#
                        #= /home/antoine/.julia/dev/DFTK/src/densities.jl:75 =# @assert (kpt_per_thread[end])[end] == length(basis.kpoints)
                    end
                    #= /home/antoine/.julia/dev/DFTK/src/densities.jl:78 =#
                    #= /home/antoine/.julia/dev/DFTK/src/densities.jl:78 =# Threads.@threads for (ikpts, ρaccu) = collect(zip(kpt_per_thread, ρaccus))
                            #= /home/antoine/.julia/dev/DFTK/src/densities.jl:79 =#
                            ρaccu .= 0
                            #= /home/antoine/.julia/dev/DFTK/src/densities.jl:80 =#
                            ρ_k = similar(ψ[1], T, basis.fft_size)
                            #= /home/antoine/.julia/dev/DFTK/src/densities.jl:81 =#
                            for ik = ikpts
                                #= /home/antoine/.julia/dev/DFTK/src/densities.jl:82 =#
                                kpt = basis.kpoints[ik]
                                #= /home/antoine/.julia/dev/DFTK/src/densities.jl:83 =#
                                compute_partial_density!(ρ_k, basis, kpt, ψ[ik], occupation[ik])
                                #= /home/antoine/.julia/dev/DFTK/src/densities.jl:85 =#
                                accumulate_over_symmetries!(ρaccu[:, :, :, kpt.spin], ρ_k, basis, basis.ksymops[ik])
                            end
                        end
                    #= /home/antoine/.julia/dev/DFTK/src/densities.jl:90 =#
                    count = sum((length(basis.ksymops[ik]) for ik = 1:length(basis.kpoints))) ÷ n_spin
                    #= /home/antoine/.julia/dev/DFTK/src/densities.jl:91 =#
                    count = mpi_sum(count, basis.comm_kpts)
                    #= /home/antoine/.julia/dev/DFTK/src/densities.jl:92 =#
                    ρ = sum(ρaccus) ./ count
                    #= /home/antoine/.julia/dev/DFTK/src/densities.jl:93 =#
                    mpi_sum!(ρ, basis.comm_kpts)
                    #= /home/antoine/.julia/dev/DFTK/src/densities.jl:94 =#
                    lowpass_for_symmetry!(ρ, basis)
                    #= /home/antoine/.julia/dev/DFTK/src/densities.jl:95 =#
                    ρ = G_to_r(basis, ρ)
                    #= /home/antoine/.julia/dev/DFTK/src/densities.jl:96 =#
                    ρ = symmetrize_ρ(basis, ρ)
                end)) false
end)))

Revise.LogRecord(Debug, Eval, Action, Revise_9147188b, "/home/antoine/.julia/packages/Revise/jHTGK/src/packagedef.jl", 318, (time=1.6439005053575e9, deltainfo=(DFTK, :(function compute_partial_density!(ρ, basis, kpt, ψk, occupation)
      #= /home/antoine/.julia/dev/DFTK/src/densities.jl:21 =#
      #= /home/antoine/.julia/dev/DFTK/src/densities.jl:22 =#
      #= /home/antoine/.julia/dev/DFTK/src/densities.jl:22 =# @assert length(occupation) == size(ψk, 2)
      #= /home/antoine/.julia/dev/DFTK/src/densities.jl:25 =#
      ρk_real = [zeros(eltype(basis), basis.fft_size) for it = 1:Threads.nthreads()]
      #= /home/antoine/.julia/dev/DFTK/src/densities.jl:26 =#
      ψnk_real = [zeros(complex(eltype(basis)), basis.fft_size) for it = 1:Threads.nthreads()]
      #= /home/antoine/.julia/dev/DFTK/src/densities.jl:27 =#
      #= /home/antoine/.julia/dev/DFTK/src/densities.jl:27 =# Threads.@threads for n = 1:size(ψk, 2)
              #= /home/antoine/.julia/dev/DFTK/src/densities.jl:28 =#
              ψnk = #= /home/antoine/.julia/dev/DFTK/src/densities.jl:28 =# @views(ψk[:, n])
              #= /home/antoine/.julia/dev/DFTK/src/densities.jl:29 =#
              tid = Threads.threadid()
              #= /home/antoine/.julia/dev/DFTK/src/densities.jl:30 =#
              G_to_r!(ψnk_real[tid], basis, kpt, ψnk)
              #= /home/antoine/.julia/dev/DFTK/src/densities.jl:31 =#
              ρk_real[tid] .+= occupation[n] .* abs2.(ψnk_real[tid])
          end
      #= /home/antoine/.julia/dev/DFTK/src/densities.jl:33 =#
      for it = 2:Threads.nthreads()
          #= /home/antoine/.julia/dev/DFTK/src/densities.jl:34 =#
          ρk_real[1] .+= ρk_real[it]
      end
      #= /home/antoine/.julia/dev/DFTK/src/densities.jl:36 =#
      ρk_real = ρk_real[1]
      #= /home/antoine/.julia/dev/DFTK/src/densities.jl:39 =#
      all(occupation .> 0) && _check_positive(ρk_real)
      #= /home/antoine/.julia/dev/DFTK/src/densities.jl:40 =#
      _check_total_charge(basis.dvol, ρk_real, sum(occupation))
      #= /home/antoine/.julia/dev/DFTK/src/densities.jl:43 =#
      r_to_G!(ρ, basis, ρk_real)
  end))))

Revise.LogRecord(Debug, Eval, Action, Revise_9147188b, "/home/antoine/.julia/packages/Revise/jHTGK/src/packagedef.jl", 318, (time=1.643900505367236e9, deltainfo=(DFTK, quote
    #= /home/antoine/.julia/dev/DFTK/src/densities.jl:18 =#
    #= /home/antoine/.julia/dev/DFTK/src/densities.jl:18 =# Core.@doc "Compute the partial density at the indicated ``k``-Point and return it (in Fourier space).\n" function compute_partial_density!(ρ, basis, kpt, ψk, occupation)
            #= /home/antoine/.julia/dev/DFTK/src/densities.jl:21 =#
            #= /home/antoine/.julia/dev/DFTK/src/densities.jl:22 =#
            #= /home/antoine/.julia/dev/DFTK/src/densities.jl:22 =# @assert length(occupation) == size(ψk, 2)
            #= /home/antoine/.julia/dev/DFTK/src/densities.jl:25 =#
            ρk_real = [zeros(eltype(basis), basis.fft_size) for it = 1:Threads.nthreads()]
            #= /home/antoine/.julia/dev/DFTK/src/densities.jl:26 =#
            ψnk_real = [zeros(complex(eltype(basis)), basis.fft_size) for it = 1:Threads.nthreads()]
            #= /home/antoine/.julia/dev/DFTK/src/densities.jl:27 =#
            #= /home/antoine/.julia/dev/DFTK/src/densities.jl:27 =# Threads.@threads for n = 1:size(ψk, 2)
                    #= /home/antoine/.julia/dev/DFTK/src/densities.jl:28 =#
                    ψnk = #= /home/antoine/.julia/dev/DFTK/src/densities.jl:28 =# @views(ψk[:, n])
                    #= /home/antoine/.julia/dev/DFTK/src/densities.jl:29 =#
                    tid = Threads.threadid()
                    #= /home/antoine/.julia/dev/DFTK/src/densities.jl:30 =#
                    G_to_r!(ψnk_real[tid], basis, kpt, ψnk)
                    #= /home/antoine/.julia/dev/DFTK/src/densities.jl:31 =#
                    ρk_real[tid] .+= occupation[n] .* abs2.(ψnk_real[tid])
                end
            #= /home/antoine/.julia/dev/DFTK/src/densities.jl:33 =#
            for it = 2:Threads.nthreads()
                #= /home/antoine/.julia/dev/DFTK/src/densities.jl:34 =#
                ρk_real[1] .+= ρk_real[it]
            end
            #= /home/antoine/.julia/dev/DFTK/src/densities.jl:36 =#
            ρk_real = ρk_real[1]
            #= /home/antoine/.julia/dev/DFTK/src/densities.jl:39 =#
            all(occupation .> 0) && _check_positive(ρk_real)
            #= /home/antoine/.julia/dev/DFTK/src/densities.jl:40 =#
            _check_total_charge(basis.dvol, ρk_real, sum(occupation))
            #= /home/antoine/.julia/dev/DFTK/src/densities.jl:43 =#
            r_to_G!(ρ, basis, ρk_real)
        end false
end)))

Revise.LogRecord(Debug, DeleteMethod, Action, Revise_4ac0f476, "/home/antoine/.julia/packages/Revise/jHTGK/src/packagedef.jl", 269, (time=1.643900514384534e9, deltainfo=(Tuple{DFTK.var"#894#897", Any}, MethodSummary(Symbol("#894"), :DFTK, :none, 0, Tuple{DFTK.var"#894#897", Any}))))

Revise.LogRecord(Debug, DeleteMethod, Action, Revise_4ac0f476, "/home/antoine/.julia/packages/Revise/jHTGK/src/packagedef.jl", 269, (time=1.643900514384609e9, deltainfo=(Tuple{DFTK.var"#521#threadsfor_fun#898"}, MethodSummary(Symbol("#521#threadsfor_fun"), :DFTK, Symbol("threadingconstructs.jl"), 51, Tuple{DFTK.var"#521#threadsfor_fun#898"}))))

Revise.LogRecord(Debug, DeleteMethod, Action, Revise_4ac0f476, "/home/antoine/.julia/packages/Revise/jHTGK/src/packagedef.jl", 269, (time=1.643900514384628e9, deltainfo=(Tuple{DFTK.var"#521#threadsfor_fun#898", Any}, MethodSummary(Symbol("#521#threadsfor_fun"), :DFTK, Symbol("threadingconstructs.jl"), 51, Tuple{DFTK.var"#521#threadsfor_fun#898", Any}))))

Revise.LogRecord(Debug, DeleteMethod, Action, Revise_4ac0f476, "/home/antoine/.julia/packages/Revise/jHTGK/src/packagedef.jl", 269, (time=1.643900514384639e9, deltainfo=(Tuple{DFTK.var"#895#899", Any}, MethodSummary(Symbol("#895"), :DFTK, :none, 0, Tuple{DFTK.var"#895#899", Any}))))

antoine-levitt avatar Feb 03 '22 15:02 antoine-levitt

If this still happens sometimes, can you try branch teh/debug_668?

timholy avatar Jan 06 '24 12:01 timholy