julia> a = ones(Int, 2, 3);
julia> view(matrix(a), :, Int8(1))
ERROR: MethodError: no method matching _view(::AbstractAlgebra.Generic.MatSpaceElem{Int64}, ::UnitRange{Int64}, ::Int8)
The function `_view` exists, but no method is defined for this combination of argument types.
julia> view(matrix(a), :, 1)
2-element AbstractAlgebra.Generic.MatSpaceVecView{Int64, Tuple{Base.Slice{Base.OneTo{Int64}}, Int64}, true}:
1
1
julia> view(a, :, Int8(1))
2-element view(::Matrix{Int64}, :, 1) with eltype Int64:
1
1
julia> view(matrix(a), :, Int8[1, 3])
ERROR: MethodError: no method matching _view(::AbstractAlgebra.Generic.MatSpaceElem{Int64}, ::UnitRange{Int64}, ::Vector{Int8})
The function `_view` exists, but no method is defined for this combination of argument types.
julia> view(matrix(a), :, [1, 3])
[1 1]
[1 1]
julia> view(a, :, Int8[1, 3])
2×2 view(::Matrix{Int64}, :, Int8[1, 3]) with eltype Int64:
1 1
1 1
julia> matrix(a)[:, Int8(1)]
ERROR: MethodError: no method matching getindex(::AbstractAlgebra.Generic.MatSpaceElem{Int64}, ::UnitRange{Int64}, ::Int8)
The function `getindex` exists, but no method is defined for this combination of argument types.
julia> matrix(a)[:, Int8[1,3]]
ERROR: MethodError: no method matching sub(::AbstractAlgebra.Generic.MatSpaceElem{Int64}, ::UnitRange{Int64}, ::Vector{Int8})
The function `sub` exists, but no method is defined for this combination of argument types.
viewfor Julia arrays accepts arbitrary integers and integer vectors. In AbstractAlgebra, onlyIntis allowed:The problem is the restriction to
AbstractVector{Int}instead ofAbstractVector{<:Integer}in the relevant methods:AbstractAlgebra.jl/src/generic/Matrix.jl
Lines 62 to 76 in eb3aa9b
EDIT: Ditto for vector indexing proper: