Skip to content

views with Vector{Bool} indices are broken #334

@SebastianM-C

Description

@SebastianM-C

Hi! I've noticed that v3 breaks views when using Boolean masks for the indices.

MWE

using RecursiveArrayTools
a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
vA = VectorOfArray(a)

@view vA[:, Bool[1,0,1]]

Error & Stacktrace ⚠️

3×2 view(::VectorOfArray{Int64, 2, Vector{Vector{Int64}}}, :, [1, 3]) with eltype Int64:
Error showing value of type SubArray{Int64, 2, VectorOfArray{Int64, 2, Vector{Vector{Int64}}}, Tuple{Base.Slice{Base.OneTo{Int64}}, Base.LogicalIndex{Int64, Vector{Bool}}}, false}:
ERROR: CanonicalIndexError: getindex not defined for Base.LogicalIndex{Int64, Vector{Bool}}
Stacktrace:
  [1] error_if_canonical_getindex(::IndexCartesian, A::Base.LogicalIndex{Int64, Vector{Bool}}, ::Int64)
    @ Base .\abstractarray.jl:1307
  [2] getindex
    @ Base .\abstractarray.jl:1287 [inlined]
  [3] reindex
    @ Base .\subarray.jl:266 [inlined]
  [4] reindex
    @ Base .\subarray.jl:262 [inlined]
  [5] isassigned(::SubArray{Int64, 2, VectorOfArray{Int64, 2, Vector{Vector{Int64}}}, Tuple{Base.Slice{Base.OneTo{Int64}}, Base.LogicalIndex{Int64, Vector{Bool}}}, false}, ::Int64, ::Int64)
    @ Base .\subarray.jl:360
  [6] alignment(io::IOContext{Base.TTY}, X::AbstractVecOrMat, rows::Vector{Int64}, cols::Vector{Int64}, cols_if_complete::Int64, cols_otherwise::Int64, sep::Int64, ncols::Int64)
    @ Base .\arrayshow.jl:68
  [7] _print_matrix(io::IOContext{Base.TTY}, X::AbstractVecOrMat, pre::String, sep::String, post::String, hdots::String, vdots::String, ddots::String, hmod::Int64, vmod::Int64, rowsA::UnitRange{Int64}, colsA::UnitRange{Int64})
    @ Base .\arrayshow.jl:207
  [8] print_matrix(io::IOContext{Base.TTY}, X::SubArray{Int64, 2, VectorOfArray{…}, Tuple{…}, false}, pre::String, sep::String, post::String, hdots::String, vdots::String, ddots::String, hmod::Int64, vmod::Int64)
    @ Base .\arrayshow.jl:171
  [9] print_matrix(io::IO, X::AbstractVecOrMat, pre::AbstractString, sep::AbstractString, post::AbstractString, hdots::AbstractString, vdots::AbstractString, ddots::AbstractString, hmod::Integer, vmod::Integer)
    @ Base .\arrayshow.jl:171 [inlined]
 [10] print_array
    @ .\arrayshow.jl:358 [inlined]
 [11] show(io::IOContext{Base.TTY}, ::MIME{Symbol("text/plain")}, X::SubArray{Int64, 2, VectorOfArray{Int64, 2, Vector{Vector{Int64}}}, Tuple{Base.Slice{Base.OneTo{Int64}}, Base.LogicalIndex{Int64, Vector{Bool}}}, false})
    @ Base .\arrayshow.jl:399
 [12] (::REPL.var"#55#56"{REPL.REPLDisplay{REPL.LineEditREPL}, MIME{Symbol("text/plain")}, Base.RefValue{Any}})(io::Any)
    @ REPL C:\Users\sebastian\.julia\juliaup\julia-1.10.0+0.x64.w64.mingw32\share\julia\stdlib\v1.10\REPL\src\REPL.jl:273
 [13] with_repl_linfo(f::Any, repl::REPL.LineEditREPL)
    @ REPL C:\Users\sebastian\.julia\juliaup\julia-1.10.0+0.x64.w64.mingw32\share\julia\stdlib\v1.10\REPL\src\REPL.jl:569
 [14] display(d::REPL.REPLDisplay, mime::MIME{Symbol("text/plain")}, x::Any)
    @ REPL C:\Users\sebastian\.julia\juliaup\julia-1.10.0+0.x64.w64.mingw32\share\julia\stdlib\v1.10\REPL\src\REPL.jl:259
 [15] display(d::REPL.REPLDisplay, x::Any)
    @ REPL C:\Users\sebastian\.julia\juliaup\julia-1.10.0+0.x64.w64.mingw32\share\julia\stdlib\v1.10\REPL\src\REPL.jl:278
 [16] display(x::Any)
    @ Base.Multimedia .\multimedia.jl:340
 [17] #invokelatest#2
    @ .\essentials.jl:887 [inlined]
 [18] invokelatest
    @ .\essentials.jl:884 [inlined]
 [19] print_response(errio::IO, response::Any, show_value::Bool, have_color::Bool, specialdisplay::Union{Nothing, AbstractDisplay})
    @ REPL C:\Users\sebastian\.julia\juliaup\julia-1.10.0+0.x64.w64.mingw32\share\julia\stdlib\v1.10\REPL\src\REPL.jl:315
 [20] (::REPL.var"#57#58"{REPL.LineEditREPL, Pair{Any, Bool}, Bool, Bool})(io::Any)
    @ REPL C:\Users\sebastian\.julia\juliaup\julia-1.10.0+0.x64.w64.mingw32\share\julia\stdlib\v1.10\REPL\src\REPL.jl:284
 [21] with_repl_linfo(f::Any, repl::REPL.LineEditREPL)
    @ REPL C:\Users\sebastian\.julia\juliaup\julia-1.10.0+0.x64.w64.mingw32\share\julia\stdlib\v1.10\REPL\src\REPL.jl:569
 [22] print_response(repl::REPL.AbstractREPL, response::Any, show_value::Bool, have_color::Bool)
    @ REPL C:\Users\sebastian\.julia\juliaup\julia-1.10.0+0.x64.w64.mingw32\share\julia\stdlib\v1.10\REPL\src\REPL.jl:282
 [23] (::REPL.var"#do_respond#80"{Bool, Bool, REPL.var"#93#103"{REPL.LineEditREPL, REPL.REPLHistoryProvider}, REPL.LineEditREPL, REPL.LineEdit.Prompt})(s::REPL.LineEdit.MIState, buf::Any, ok::Bool)
    @ REPL C:\Users\sebastian\.julia\juliaup\julia-1.10.0+0.x64.w64.mingw32\share\julia\stdlib\v1.10\REPL\src\REPL.jl:911
 [24] (::VSCodeServer.var"#101#104"{REPL.var"#do_respond#80"{Bool, Bool, REPL.var"#93#103"{REPL.LineEditREPL, REPL.REPLHistoryProvider}, REPL.LineEditREPL, REPL.LineEdit.Prompt}})(mi::REPL.LineEdit.MIState, buf::IOBuffer, ok::Bool)
    @ VSCodeServer c:\Users\sebastian\.vscode\extensions\julialang.language-julia-1.66.2\scripts\packages\VSCodeServer\src\repl.jl:122
 [25] #invokelatest#2
    @ Base .\essentials.jl:887 [inlined]
 [26] invokelatest
    @ Base .\essentials.jl:884 [inlined]
 [27] run_interface(terminal::REPL.Terminals.TextTerminal, m::REPL.LineEdit.ModalInterface, s::REPL.LineEdit.MIState)
    @ REPL.LineEdit C:\Users\sebastian\.julia\juliaup\julia-1.10.0+0.x64.w64.mingw32\share\julia\stdlib\v1.10\REPL\src\LineEdit.jl:2656
 [28] run_frontend(repl::REPL.LineEditREPL, backend::REPL.REPLBackendRef)
    @ REPL C:\Users\sebastian\.julia\juliaup\julia-1.10.0+0.x64.w64.mingw32\share\julia\stdlib\v1.10\REPL\src\REPL.jl:1312
 [29] (::REPL.var"#62#68"{REPL.LineEditREPL, REPL.REPLBackendRef})()
    @ REPL C:\Users\sebastian\.julia\juliaup\julia-1.10.0+0.x64.w64.mingw32\share\julia\stdlib\v1.10\REPL\src\REPL.jl:386
Some type information was truncated. Use `show(err)` to see complete types.

Environment (please complete the following information):

  • Output of using Pkg; Pkg.status()
  [731186ca] RecursiveArrayTools v3.5.3
  • Output of versioninfo()
julia> versioninfo()
Julia Version 1.10.0
Commit 3120989f39 (2023-12-25 18:01 UTC)
Build Info:
  Official https://julialang.org/ release
Platform Info:
  OS: Windows (x86_64-w64-mingw32)
  CPU: 16 × AMD Ryzen 7 5800H with Radeon Graphics
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-15.0.7 (ORCJIT, znver3)
  Threads: 23 on 16 virtual cores
Environment:
  JULIA_EDITOR = code

Metadata

Metadata

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions