-
-
Notifications
You must be signed in to change notification settings - Fork 5.7k
Open
Labels
arrays[a, r, r, a, y, s][a, r, r, a, y, s]designDesign of APIs or of the language itselfDesign of APIs or of the language itself
Description
Ref. discussion between @martinholters and @tkelman starting at #16740 (comment). How should fill! behave for storage types with structural constraints such as Bidiagonal and SparseMatrixCSC? Brief illustration:
julia> fill!(Diagonal(rand(4)), 1) # fills within structural constraints
4×4 Diagonal{Float64}:
1.0 ⋅ ⋅ ⋅
⋅ 1.0 ⋅ ⋅
⋅ ⋅ 1.0 ⋅
⋅ ⋅ ⋅ 1.0
julia> fill!(Bidiagonal(rand(4), rand(3), true), 1) # fails noting structural constraints
ERROR: ArgumentError: Array A of type Bidiagonal{Float64} and size (4,4) can
not be filled with x=1, since some of its entries are constrained.
in fill!(::Bidiagonal{Float64}, ::Int64) at ./linalg/bidiag.jl:553
julia> spfoo = sprand(4, 4, 0.5)
4×4 sparse matrix with 7 Float64 nonzero entries:
[2, 1] = 0.403982
[3, 1] = 0.521604
[4, 1] = 0.857491
[1, 2] = 0.318858
[3, 3] = 0.893084
[2, 4] = 0.646681
[4, 4] = 0.601919
julia> fill!(spfoo, 1) # fills without respecting structural constraints
4×4 sparse matrix with 16 Float64 nonzero entries:
[1, 1] = 1.0
[2, 1] = 1.0
[3, 1] = 1.0
[4, 1] = 1.0
[1, 2] = 1.0
[2, 2] = 1.0
[3, 2] = 1.0
[4, 2] = 1.0
[1, 3] = 1.0
[2, 3] = 1.0
[3, 3] = 1.0
[4, 3] = 1.0
[1, 4] = 1.0
[2, 4] = 1.0
[3, 4] = 1.0
[4, 4] = 1.0In other words, does fill! mean 'fill every addressable entry in the provided AbstractArray', or 'fill every stored entry in the provided AbstractArray'? Should fill! bifurcate into, e.g., fillall! and fillstored!? Best!
Metadata
Metadata
Assignees
Labels
arrays[a, r, r, a, y, s][a, r, r, a, y, s]designDesign of APIs or of the language itselfDesign of APIs or of the language itself