JuliaArrays / JuliaArrays/StaticArrayInterface.jl

Stack overflow when broadcasting results in StaticInt eltype

Aperta
#1 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Lingua principale
Julia
Stelle
14
Fork
8
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Descrizione

Found this...

julia> import ArrayInterface: StaticInt

julia> r = StaticInt(1):4
StaticInt{1}():StaticInt{1}():4

julia> broadcast(-, r, StaticInt(1))
ERROR: StackOverflowError:
Stacktrace:
 [1] UnitRange{StaticInt{0}}(::StaticInt{0}, ::StaticInt{3}) at /Users/zchristensen/.julia/packages/ArrayInterface/NbkVT/src/static.jl:108 (repeats 79984 times)

...and traced the issue back to Base._range assuming that UnitRange should be formed with an element type that is a StaticInt.

The easiest way to fix this would be our own Base._range(::StaticInt, ...), but I'm not sure if that's a good entry point since it's not public API.

Edit:
also found this

julia> (StaticInt(1):10)[1:2:6]
ERROR: MethodError: no method matching StepRange{StaticInt{1},Int64}(::StaticInt{1}, ::Int64, ::StaticInt{5})
Closest candidates are:
  StepRange{StaticInt{1},Int64}(::T, ::S, ::T) where {T, S} at range.jl:204
Stacktrace:
 [1] _rangestyle(::Base.Ordered, ::Base.ArithmeticWraps, ::StaticInt{1}, ::Int64, ::Int64) at ./range.jl:118
 [2] _range at ./range.jl:116 [inlined]
 [3] #range#43 at ./range.jl:91 [inlined]
 [4] getindex(::ArrayInterface.OptionallyStaticUnitRange{StaticInt{1},Int64}, ::StepRange{Int64,Int64}) at ./range.jl:713
 [5] top-level scope at REPL[26]:1

Guida per i contributori

Nessuna guida per i contributori indicizzata per questo repository

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Inizia riproducendo entrambi gli esempi in Julia, poi esamina src/static.jl:108 e base/range.jl di Julia intorno a Base._range e alle righe 107-118. Traccia come vengono costruiti gli intervalli StaticInt e come lo slicing raggiunge StepRange; il lavoro è completato quando il broadcasting non va più in overflow e l'espressione di intervallo con passo mostrata non solleva più il MethodError riportato.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
julia
Ambito
performance
Tipo di issue
Bug
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Ferma
Chiarezza
Abbastanza chiara
Idoneità per principianti
45/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.