diff --git a/Project.toml b/Project.toml index 10125cd..7402cad 100644 --- a/Project.toml +++ b/Project.toml @@ -1,6 +1,6 @@ name = "ContinuumArrays" uuid = "7ae1f121-cc2c-504b-ac30-9b923412ae5c" -version = "0.19" +version = "0.19.1" [deps] AbstractFFTs = "621f4979-c628-5d54-868e-fcf4e3e8185c" @@ -29,7 +29,7 @@ ContinuumArraysRecipesBaseExt = "RecipesBase" AbstractFFTs = "1.0" ArrayLayouts = "1.0" BandedMatrices = "1" -BlockArrays = "1" +BlockArrays = "1.4" DomainSets = "0.6, 0.7" FastTransforms = "0.15, 0.16, 0.17" FillArrays = "1.0" diff --git a/src/ContinuumArrays.jl b/src/ContinuumArrays.jl index d440d13..30c1a26 100644 --- a/src/ContinuumArrays.jl +++ b/src/ContinuumArrays.jl @@ -11,7 +11,7 @@ import LazyArrays: MemoryLayout, Applied, ApplyStyle, flatten, _flatten, colsupp simplifiable, _simplify, AbstractLazyLayout, AbstractPaddedLayout, simplify, Dot import LinearAlgebra: pinv, inv, dot, norm2, ldiv!, mul! import BandedMatrices: AbstractBandedLayout, _BandedMatrix -import BlockArrays: block, blockindex, unblock, blockedrange, _BlockedUnitRange, _BlockArray +import BlockArrays: block, blockindex, unblock, blockedrange, _BlockedUnitRange, _BlockArray, BlockIndexRange, _maybetail import FillArrays: AbstractFill, getindex_value, SquareEye import ArrayLayouts: mul, ldiv, ZerosLayout, ScalarLayout, AbstractStridedLayout, check_mul_axes, check_ldiv_axes import QuasiArrays: cardinality, checkindex, QuasiAdjoint, QuasiTranspose, Inclusion, SubQuasiArray, @@ -85,9 +85,15 @@ end @inline to_indices(A::AbstractQuasiArray, inds, I::Tuple{BlockIndex{1}, Vararg{Any}}) = (inds[1][I[1]], to_indices(A, _cutdim(inds, I[1]), tail(I))...) @inline to_indices(A::AbstractQuasiArray, I::Tuple{BlockRange, Vararg{Any}}) = to_indices(A, axes(A), I) +@inline to_indices(A::AbstractQuasiArray, inds, I::Tuple{AbstractVector{Block{1,R}}, Vararg{Any}}) where R = + (unblock(A, inds, I), to_indices(A, _maybetail(inds), tail(I))...) +@inline to_indices(A::AbstractQuasiArray, inds, I::Tuple{BlockIndexRange{1,R}, Vararg{Any}}) where R = + (unblock(A, inds, I), to_indices(A, _maybetail(inds), tail(I))...) +@inline to_indices(A::AbstractQuasiArray, inds, I::Tuple{AbstractVector{<:BlockIndex{1}}, Vararg{Any}}) = + (inds[1][I[1]], to_indices(A, _cutdim(inds, I[1]), tail(I))...) +@inline to_indices(A::AbstractQuasiArray, inds, I::Tuple{AbstractVector{<:BlockIndexRange{1}}, Vararg{Any}}) = + (unblock(A, inds, I), to_indices(A, _maybetail(inds), tail(I))...) -@inline to_indices(A::AbstractQuasiArray, inds, I::Tuple{AbstractArray{<:BlockIndex{1}}, Vararg{Any}}) = - (inds[1][I[1]], to_indices(A, _cutdim(inds, I[1]), tail(I))...) checkpoints(x::Number) = x checkpoints(d::AbstractInterval{T}) where T = width(d) .* SVector{3,float(T)}(0.823972,0.01,0.3273484) .+ leftendpoint(d) diff --git a/test/test_basisconcat.jl b/test/test_basisconcat.jl index 77c9b0b..42b03ab 100644 --- a/test/test_basisconcat.jl +++ b/test/test_basisconcat.jl @@ -83,8 +83,9 @@ import ContinuumArrays: PiecewiseBasis, VcatBasis, HvcatBasis, arguments, ApplyL @test S == S @test S[0.1, 1] == [S1[0.1,1] 0; 0 0] - @test S[0.1,Block(1)] == [[S1[0.1,1] 0; 0 0], [S1[0.1,2] 0; 0 0]] @test S[0.1,Block(1)[1]] == [S1[0.1,1] 0; 0 0] + @test S[0.1,[Block(1)[1]]] == S[0.1,Block(1)[1:1]] == S[0.1,[Block(1)[1:1]]] == [[S1[0.1,1] 0; 0 0]] + @test S[0.1,Block.(1:1)] == S[0.1,Block(1)] == S[0.1,[Block(1)]] == [[S1[0.1,1] 0; 0 0], [S1[0.1,2] 0; 0 0]] @test S[0.1,getindex.(Block(1),1:2)] == [[S1[0.1,1] 0; 0 0], [S1[0.1,2] 0; 0 0]] D = Derivative(axes(S,1)) @test_broken (D*S)[0.1,1] # throws error