Skip to content

Commit 3f60520

Browse files
committed
reshape and vec
1 parent 399ae4f commit 3f60520

File tree

4 files changed

+38
-10
lines changed

4 files changed

+38
-10
lines changed

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ BandedMatrices = "1"
3030
BlockArrays = "1.0"
3131
BlockBandedMatrices = "0.13"
3232
ClassicalOrthogonalPolynomials = "0.15"
33-
ContinuumArrays = "0.19"
33+
ContinuumArrays = "0.19.5"
3434
DomainSets = "0.7"
3535
FastTransforms = "0.17"
3636
FillArrays = "1.0"

src/MultivariateOrthogonalPolynomials.jl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ import Base: axes, in, ==, +, -, /, *, ^, \, copy, copyto!, OneTo, getindex, siz
1010
import Base.Broadcast: Broadcasted, broadcasted, DefaultArrayStyle
1111
import DomainSets: boundary, EuclideanDomain
1212

13-
import QuasiArrays: LazyQuasiMatrix, LazyQuasiArrayStyle, domain, vec_layout
14-
import ContinuumArrays: @simplify, Weight, weight, grid, plotgrid, TransformFactorization, ExpansionLayout, plotvalues, unweighted, plan_transform, checkpoints, transform_ldiv, AbstractBasisLayout, basis_axes, Inclusion, grammatrix, weaklaplacian, layout_broadcasted, laplacian, abslaplacian, laplacian_axis, abslaplacian_axis, diff_layout, operatororder, broadcastbasis
13+
import QuasiArrays: LazyQuasiMatrix, LazyQuasiArrayStyle, domain, vec_layout, reshape_layout
14+
import ContinuumArrays: @simplify, Weight, weight, grid, plotgrid, TransformFactorization, ExpansionLayout, plotvalues, unweighted, plan_transform, checkpoints, transform_ldiv, AbstractBasisLayout, basis_axes, Inclusion, grammatrix, weaklaplacian, layout_broadcasted, laplacian, abslaplacian, laplacian_axis, abslaplacian_axis, diff_layout, operatororder, broadcastbasis, KronExpansionLayout
1515

1616
import ArrayLayouts: MemoryLayout, sublayout, sub_materialize
1717
import BlockArrays: block, blockindex, BlockSlice, viewblock, blockcolsupport, AbstractBlockStyle, BlockStyle
@@ -21,7 +21,7 @@ import LazyArrays: arguments, paddeddata, LazyArrayStyle, LazyLayout, PaddedLayo
2121
import LazyBandedMatrices: LazyBandedBlockBandedLayout, AbstractBandedBlockBandedLayout, AbstractLazyBandedBlockBandedLayout, _krontrav_axes, DiagTravLayout, invdiagtrav, ApplyBandedBlockBandedLayout, krontrav
2222
import InfiniteArrays: InfiniteCardinal, OneToInf
2323

24-
import ClassicalOrthogonalPolynomials: jacobimatrix, Weighted, orthogonalityweight, HalfWeighted, WeightedBasis, pad, recurrencecoefficients, clenshaw, weightedgrammatrix, Clenshaw
24+
import ClassicalOrthogonalPolynomials: jacobimatrix, Weighted, orthogonalityweight, HalfWeighted, WeightedBasis, pad, recurrencecoefficients, clenshaw, weightedgrammatrix, Clenshaw, OPLayout
2525
import HarmonicOrthogonalPolynomials: BivariateOrthogonalPolynomial, MultivariateOrthogonalPolynomial, Plan,
2626
AngularMomentum, angularmomentum, BlockOneTo, BlockRange1, interlace,
2727
MultivariateOPLayout, AbstractMultivariateOPLayout, MAX_PLOT_BLOCKS

src/rect.jl

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -190,10 +190,16 @@ broadcastbasis(::typeof(+), A::KronPolynomial, B::KronPolynomial) = KronPolynom
190190

191191

192192
####
193-
# vec
193+
# reshape/vec
194194
####
195195

196-
function vec_layout(::ExpansionLayout{KronOPLayout{2}}, f)
196+
function reshape_layout(::ExpansionLayout{KronOPLayout{2}}, f)
197197
A,B = basis(f).args
198198
A*invdiagtrav(coefficients(f))*B'
199+
end
200+
201+
# TODO: generalise
202+
function vec_layout(::KronExpansionLayout{OPLayout, OPLayout}, f)
203+
A,C,Bc = arguments(f)
204+
RectPolynomial(A, Bc') * DiagTrav(C)
199205
end

test/test_rect.jl

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
using MultivariateOrthogonalPolynomials, ClassicalOrthogonalPolynomials, StaticArrays, LinearAlgebra, BlockArrays, FillArrays, Base64, LazyBandedMatrices, Test
22
using ClassicalOrthogonalPolynomials: expand, coefficients, recurrencecoefficients
33
using MultivariateOrthogonalPolynomials: weaklaplacian, ClenshawKron
4-
using ContinuumArrays: plotgridvalues
4+
using ContinuumArrays: plotgridvalues, ExpansionLayout
55
using Base: oneto
66

77
@testset "RectPolynomial" begin
@@ -206,9 +206,31 @@ using Base: oneto
206206
𝐜 = expand(RectPolynomial(Legendre(),Jacobi(1,0)),splat((x,y) -> cos(x*sin(y))))
207207
end
208208

209-
@testset "vec" begin
210-
P = RectPolynomial(Legendre(),Chebyshev())
209+
@testset "reshape/vec" begin
210+
P = RectPolynomial(Legendre(),Chebyshev())
211211
f = expand(P, splat((x,y) -> cos((x-0.1)*exp(y))))
212-
@test vec(f)[0.1,0.2] f[SVector(0.1,0.2)]
212+
F = reshape(f)
213+
@test F[0.1,0.2] f[SVector(0.1,0.2)]
214+
@test vec(F)[SVector(0.1,0.2)] f[SVector(0.1,0.2)]
215+
216+
g = F[:,0.2]
217+
h = F[0.1,:]
218+
@test MemoryLayout(g) isa ExpansionLayout
219+
@test MemoryLayout(h) isa ExpansionLayout
220+
@test g[0.1] f[SVector(0.1,0.2)]
221+
@test h[0.2] f[SVector(0.1,0.2)]
222+
223+
@test sum(F; dims=1)[1,0.2] exp(-0.2)*(sin(0.9exp(0.2)) + sin(1.1exp(0.2)))
224+
# TODO: should be matrix but isn't because of InfiniteArrays/src/reshapedarray.jl:77
225+
@test_broken sum(F; dims=2)[0.1,1] 2
226+
@test sum(F; dims=2)[0.1] 2
227+
end
228+
229+
@testset "sample" begin
230+
P = RectPolynomial(Legendre(),Legendre())
231+
f = expand(P, splat((x,y) -> exp(x*cos(y-0.1))))
232+
F = reshape(f)
233+
@test sum(F; dims=1)[1,0.2] 2.346737615950585
234+
@test sum(F; dims=2)[0.1,1] 2.1748993079723618
213235
end
214236
end

0 commit comments

Comments
 (0)