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

Diagonal(BlockVector) * BlockDiagonal (and vice versa) fails #428

Open
mtfishman opened this issue Nov 1, 2024 · 0 comments
Open

Diagonal(BlockVector) * BlockDiagonal (and vice versa) fails #428

mtfishman opened this issue Nov 1, 2024 · 0 comments

Comments

@mtfishman
Copy link
Collaborator

For example:

julia> using BlockArrays

julia> using BlockArrays: BlockDiagonal

julia> using LinearAlgebra

julia> pkgversion(BlockArrays)
v"1.1.1"

julia> pkgversion(LinearAlgebra)
v"1.11.0"

julia> A = BlockDiagonal([randn(2, 2), randn(2, 2)])
2×2-blocked 4×4 BlockMatrix{Float64, Diagonal{Matrix{Float64}, Vector{Matrix{Float64}}}, Tuple{BlockedOneTo{Int64, Vector{Int64}}, BlockedOneTo{Int64, Vector{Int64}}}}:
 -1.73455   1.11785                 
 -0.99245  -0.549115                 
 ─────────────────────┼───────────────────────
            -0.285518   -0.592538
            -0.0665603   0.425891

julia> D = Diagonal(BlockedVector([1, 2, 3, 4], [2, 2]))
4×4 Diagonal{Int64, BlockedVector{Int64, Vector{Int64}, Tuple{BlockedOneTo{Int64, Vector{Int64}}}}} with indices BlockedOneTo([2, 4])×BlockedOneTo([2, 4]):
 1    
   2  
 ──────┼──────
   3  
     4

julia> A * D
ERROR: BoundsError: attempt to access 1-element Base.OneTo{Int64} at index [1:2]
Stacktrace:
  [1] throw_boundserror(A::Base.OneTo{Int64}, I::Tuple{UnitRange{Int64}})
    @ Base ./essentials.jl:14
  [2] checkbounds
    @ ./abstractarray.jl:699 [inlined]
  [3] getindex
    @ ./range.jl:973 [inlined]
  [4] getindex
    @ ~/.julia/packages/BlockArrays/VccC2/src/blockaxis.jl:10 [inlined]
  [5] unblock
    @ ~/.julia/packages/BlockArrays/VccC2/src/views.jl:10 [inlined]
  [6] to_indices
    @ ~/.julia/packages/BlockArrays/VccC2/src/views.jl:29 [inlined]
  [7] to_indices
    @ ~/.julia/packages/BlockArrays/VccC2/src/views.jl:44 [inlined]
  [8] view
    @ ./subarray.jl:213 [inlined]
  [9] _bview
    @ ~/.julia/packages/BlockArrays/VccC2/src/blockbroadcast.jl:124 [inlined]
 [10] (::BlockArrays.var"#56#61"{Base.Broadcast.Broadcasted{}, Tuple{}})(i::Int64)
    @ BlockArrays ~/.julia/packages/BlockArrays/VccC2/src/blockbroadcast.jl:156
 [11] ntuple
    @ ./ntuple.jl:19 [inlined]
 [12] _generic_blockbroadcast_copyto!(dest::BlockMatrix{…}, bc::Base.Broadcast.Broadcasted{…})
    @ BlockArrays ~/.julia/packages/BlockArrays/VccC2/src/blockbroadcast.jl:156
 [13] copyto!(dest::BlockMatrix{…}, bc::Base.Broadcast.Broadcasted{…})
    @ BlockArrays ~/.julia/packages/BlockArrays/VccC2/src/blockbroadcast.jl:163
 [14] copy
    @ ./broadcast.jl:892 [inlined]
 [15] materialize
    @ ./broadcast.jl:867 [inlined]
 [16] copy(M::ArrayLayouts.Rmul{BlockArrays.BlockLayout{…}, ArrayLayouts.DiagonalLayout{…}, BlockMatrix{…}, Diagonal{…}})
    @ ArrayLayouts ~/.julia/packages/ArrayLayouts/48qDX/src/diagonal.jl:20
 [17] copy
    @ ~/.julia/packages/ArrayLayouts/48qDX/src/mul.jl:140 [inlined]
 [18] materialize
    @ ~/.julia/packages/ArrayLayouts/48qDX/src/mul.jl:137 [inlined]
 [19] mul
    @ ~/.julia/packages/ArrayLayouts/48qDX/src/mul.jl:138 [inlined]
 [20] *(A::BlockMatrix{Float64, Diagonal{…}, Tuple{…}}, B::Diagonal{Int64, BlockedVector{…}})
    @ ArrayLayouts ~/.julia/packages/ArrayLayouts/48qDX/src/ArrayLayouts.jl:225
 [21] top-level scope
    @ REPL[32]:1
Some type information was truncated. Use `show(err)` to see complete types.

julia> D * A
ERROR: BoundsError: attempt to access 2-blocked 4-element BlockedVector{Int64} at index [BlockSlice(Block(1)[1:2],1:2), BlockSlice(Block(1)[1:2],Base.OneTo(2))]
Stacktrace:
  [1] throw_boundserror(A::BlockedVector{…}, I::Tuple{…})
    @ Base ./essentials.jl:14
  [2] checkbounds
    @ ./abstractarray.jl:699 [inlined]
  [3] view
    @ ./subarray.jl:214 [inlined]
  [4] _bview
    @ ~/.julia/packages/BlockArrays/VccC2/src/blockbroadcast.jl:124 [inlined]
  [5] (::BlockArrays.var"#56#61"{Base.Broadcast.Broadcasted{}, Tuple{}})(i::Int64)
    @ BlockArrays ~/.julia/packages/BlockArrays/VccC2/src/blockbroadcast.jl:156
  [6] ntuple
    @ ./ntuple.jl:19 [inlined]
  [7] _generic_blockbroadcast_copyto!(dest::BlockMatrix{…}, bc::Base.Broadcast.Broadcasted{…})
    @ BlockArrays ~/.julia/packages/BlockArrays/VccC2/src/blockbroadcast.jl:156
  [8] copyto!
    @ ~/.julia/packages/BlockArrays/VccC2/src/blockbroadcast.jl:163 [inlined]
  [9] copy
    @ ./broadcast.jl:892 [inlined]
 [10] materialize
    @ ./broadcast.jl:867 [inlined]
 [11] copy
    @ ~/.julia/packages/ArrayLayouts/48qDX/src/diagonal.jl:19 [inlined]
 [12] copy
    @ ~/.julia/packages/ArrayLayouts/48qDX/src/mul.jl:140 [inlined]
 [13] materialize
    @ ~/.julia/packages/ArrayLayouts/48qDX/src/mul.jl:137 [inlined]
 [14] mul
    @ ~/.julia/packages/ArrayLayouts/48qDX/src/mul.jl:138 [inlined]
 [15] *(A::Diagonal{Int64, BlockedVector{…}}, B::BlockMatrix{Float64, Diagonal{…}, Tuple{…}})
    @ ArrayLayouts ~/.julia/packages/ArrayLayouts/48qDX/src/ArrayLayouts.jl:224
 [16] top-level scope
    @ REPL[33]:1
Some type information was truncated. Use `show(err)` to see complete types.

julia> versioninfo()
Julia Version 1.11.1
Commit 8f5b7ca12ad (2024-10-16 10:53 UTC)
Build Info:
  Official https://julialang.org/ release
Platform Info:
  OS: macOS (arm64-apple-darwin22.4.0)
  CPU: 10 × Apple M1 Max
  WORD_SIZE: 64
  LLVM: libLLVM-16.0.6 (ORCJIT, apple-m1)
Threads: 1 default, 0 interactive, 1 GC (on 8 virtual cores)

Maybe related to #325. Comes up in #426.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant