Skip to content

[BUG] broadcast on BlockVector{LabelledInteger} is broken #14

@ogauthe

Description

@ogauthe
using BlockArrays: Block, mortar
using GradedArrays.GradedUnitRanges: gradedrange
using GradedArrays.SymmetrySectors: U1

indices = mortar([[Block(1)]])
v = gradedrange([U1(1) => 1])[indices]
Int.(v)
ERROR: MethodError: no method matching subblocks(::BlockVector{Int64, Vector{…}, Tuple{…}}, ::Tuple{GradedArrays.GradedUnitRanges.GradedOneTo{…}}, ::Int64)
The function `subblocks` exists, but no method is defined for this combination of argument types.

Closest candidates are:
  subblocks(::AbstractArray, ::NTuple{N, AbstractUnitRange{Int64}}, ::Integer) where N
   @ BlockArrays ~/Documents/itensor/BlockArrays.jl/src/blockbroadcast.jl:119
  subblocks(::Any, ::NTuple{N, AbstractUnitRange{Int64}}, ::Integer) where N
   @ BlockArrays ~/Documents/itensor/BlockArrays.jl/src/blockbroadcast.jl:116

Stacktrace:
 [1] (::BlockArrays.var"#58#63"{BlockVector{}, Base.Broadcast.Broadcasted{}, Tuple{}})(dim::Int64)
   @ BlockArrays ~/Documents/itensor/BlockArrays.jl/src/blockbroadcast.jl:149
 [2] ntuple
   @ ./ntuple.jl:19 [inlined]
 [3] _generic_blockbroadcast_copyto!(dest::BlockVector{…}, bc::Base.Broadcast.Broadcasted{…})
   @ BlockArrays ~/Documents/itensor/BlockArrays.jl/src/blockbroadcast.jl:148
 [4] copyto!(dest::BlockVector{…}, bc::Base.Broadcast.Broadcasted{…})
   @ BlockArrays ~/Documents/itensor/BlockArrays.jl/src/blockbroadcast.jl:189
 [5] copy
   @ ./broadcast.jl:897 [inlined]
 [6] materialize(bc::Base.Broadcast.Broadcasted{BlockArrays.BlockStyle{1}, Nothing, Type{Int64}, Tuple{BlockVector{…}}})
   @ Base.Broadcast ./broadcast.jl:872
 [7] top-level scope
   @ REPL[7]:1
Some type information was truncated. Use `show(err)` to see complete types.

The cause is a restriction to Int eltype in BlockArrays.jl, specifically in

# BlockArrays.jl/src/blockbroadcast.jl:119
function subblocks(arr::AbstractArray, bs::NTuple{N,AbstractUnitRange{Int}}, dim::Integer) where N

and

# BlockArrays.jl/src/blockbroadcast.jl:103
SubBlockIterator(arr::AbstractArray, bs::NTuple{N,AbstractUnitRange{Int}}, dim::Integer) where N

@mtfishman you already worked on such restrictions in JuliaArrays/BlockArrays.jl#405. Do you have an idea if there is a specific reason for these restrictions? I can make a PR to BlockArrays.jl to remove them.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions