diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 98dc924..2d7cd7b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -49,6 +49,5 @@ jobs: - uses: julia-actions/julia-processcoverage@v1 - uses: codecov/codecov-action@v5 with: - file: lcov.info token: ${{ secrets.CODECOV_TOKEN }} - fail_ci_if_error: false + file: lcov.info diff --git a/Project.toml b/Project.toml index 24281ea..d24f36b 100644 --- a/Project.toml +++ b/Project.toml @@ -1,6 +1,6 @@ name = "ContinuumArrays" uuid = "7ae1f121-cc2c-504b-ac30-9b923412ae5c" -version = "0.19.4" +version = "0.19.5" [deps] AbstractFFTs = "621f4979-c628-5d54-868e-fcf4e3e8185c" @@ -38,7 +38,7 @@ Infinities = "0.1" IntervalSets = "0.7" LazyArrays = "2" Makie = "0.20, 0.21, 0.22, 0.24" -QuasiArrays = "0.12" +QuasiArrays = "0.12.2" RecipesBase = "1.0" StaticArrays = "1.0" julia = "1.10" diff --git a/docs/src/index.md b/docs/src/index.md index ffa9e94..c03ffd9 100644 --- a/docs/src/index.md +++ b/docs/src/index.md @@ -68,38 +68,40 @@ plotgrid ```@docs ContinuumArrays.TransformFactorization ``` - ```@docs ContinuumArrays.AbstractConcatBasis ``` ```@docs -ContinuumArrays.MulPlan +ContinuumArrays.basis ``` ```@docs -ContinuumArrays.PiecewiseBasis +ContinuumArrays.HvcatBasis ``` ```@docs -ContinuumArrays.Map +ContinuumArrays.InvPlan ``` ```@docs -ContinuumArrays.MappedFactorization +ContinuumArrays.KronExpansionLayout ``` ```@docs -ContinuumArrays.basis +ContinuumArrays.Map ``` ```@docs -ContinuumArrays.InvPlan +ContinuumArrays.MappedFactorization ``` ```@docs -ContinuumArrays.VcatBasis +ContinuumArrays.MulPlan ``` ```@docs -ContinuumArrays.WeightedFactorization +ContinuumArrays.PiecewiseBasis ``` ```@docs -ContinuumArrays.HvcatBasis +ContinuumArrays.ProjectionFactorization ``` ```@docs -ContinuumArrays.ProjectionFactorization +ContinuumArrays.VcatBasis ``` +```@docs +ContinuumArrays.WeightedFactorization ``` + diff --git a/src/ContinuumArrays.jl b/src/ContinuumArrays.jl index 35fd836..2f67c24 100644 --- a/src/ContinuumArrays.jl +++ b/src/ContinuumArrays.jl @@ -19,7 +19,7 @@ import QuasiArrays: cardinality, checkindex, QuasiAdjoint, QuasiTranspose, Inclu ApplyQuasiArray, ApplyQuasiMatrix, LazyQuasiArrayApplyStyle, AbstractQuasiArrayApplyStyle, AbstractQuasiLazyLayout, LazyQuasiArray, LazyQuasiVector, LazyQuasiMatrix, LazyLayout, LazyQuasiArrayStyle, _factorize, _cutdim, AbstractQuasiFill, UnionDomain, sum_size, sum_layout, _cumsum, cumsum_layout, applylayout, equals_layout, layout_broadcasted, PolynomialLayout, dot_size, - diff_layout, diff_size, AbstractQuasiVecOrMat + diff_layout, diff_size, AbstractQuasiVecOrMat, vec_layout import InfiniteArrays: Infinity, InfAxes import AbstractFFTs: Plan diff --git a/src/bases/bases.jl b/src/bases/bases.jl index f188fae..c2770fc 100644 --- a/src/bases/bases.jl +++ b/src/bases/bases.jl @@ -793,6 +793,17 @@ function copy(M::Mul{<:AdjointMappedBasisLayouts, <:MappedBasisLayouts}) end +####### +# reshape/vec +####### + +function vec_layout(::ExpansionLayout, f) + P,c = basis(f), coefficients(f) + @assert isone(size(c,2)) + P * vec(c) +end + + include("basisconcat.jl") include("basiskron.jl") diff --git a/src/bases/basiskron.jl b/src/bases/basiskron.jl index f403400..d37b866 100644 --- a/src/bases/basiskron.jl +++ b/src/bases/basiskron.jl @@ -1,3 +1,13 @@ struct KronBasisLayout <: AbstractBasisLayout end -QuasiArrays.kronlayout(::AbstractBasisLayout...) = KronBasisLayout() \ No newline at end of file +QuasiArrays.kronlayout(::AbstractBasisLayout...) = KronBasisLayout() + +""" + KronExpansionLayout + +is a MemoryLayout corresponding to a quasi-matrix corresponding to the 2D expansion K[x,y] == A[x]*X*B[y]' +""" +struct KronExpansionLayout{LayA, LayB} <: AbstractLazyLayout end +applylayout(::Type{typeof(*)}, ::LayA, ::CoefficientLayouts, ::AdjointBasisLayout{LayB}) where {LayA <: AbstractBasisLayout, LayB <: AbstractBasisLayout} = KronExpansionLayout{LayA,LayB}() +sublayout(::KronExpansionLayout, inds) = sublayout(ApplyLayout{typeof(*)}(), inds) +sum_layout(::KronExpansionLayout, F, dims...) = sum_layout(ApplyLayout{typeof(*)}(), F, dims...) \ No newline at end of file diff --git a/test/runtests.jl b/test/runtests.jl index 6da07b3..b86344b 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -84,6 +84,7 @@ end include("test_splines.jl") include("test_chebyshev.jl") include("test_basisconcat.jl") +include("test_basiskron.jl") @testset "Grids/values" begin L = LinearSpline(1:5) diff --git a/test/test_basiskron.jl b/test/test_basiskron.jl index 5cc3270..9dfa5bc 100644 --- a/test/test_basiskron.jl +++ b/test/test_basiskron.jl @@ -6,6 +6,16 @@ using ContinuumArrays, QuasiArrays, StaticArrays, Test xy = axes(K,1) f = xy -> ((x,y) = xy; exp(x*cos(y))) - K \ f.(xy) + @test_broken K \ f.(xy) +end +@testset "KronExpansion" begin + L = LinearSpline(range(0,1; length=4)) + C = reshape(Vector(1:16), 4, 4) + F = L * C * L' + @test sum(F) ≈ 8.5 + @test sum(F; dims=1)[1,0.1] ≈ 3.7 + @test sum(F; dims=2)[0.1,1] ≈ 7.3 + + @test F[0.1,:][0.2] ≈ F[:,0.2][0.1] ≈ F[0.1,0.2] end \ No newline at end of file diff --git a/test/test_splines.jl b/test/test_splines.jl index 68466c4..caeed33 100644 --- a/test/test_splines.jl +++ b/test/test_splines.jl @@ -654,4 +654,10 @@ import ContinuumArrays: basis, AdjointBasisLayout, ExpansionLayout, BasisLayout, f = x -> abs(x) ≤ 1 ? 1 : "hi" @test expand(L,f)[0.1] ≈ 1 end + + @testset "vec" begin + L = LinearSpline([-1,0,1]) + F = L * randn(3,1) + @test vec(F)[0.1] == F[0.1,1] + end end