Skip to content

Commit 2cd9b35

Browse files
authored
Merge branch 'main' into patch-4
2 parents 8e6d750 + 833245b commit 2cd9b35

File tree

11 files changed

+104
-267
lines changed

11 files changed

+104
-267
lines changed

.github/workflows/ci.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@ jobs:
2020
fail-fast: false
2121
matrix:
2222
version:
23-
- '1.10'
23+
- 'lts'
24+
- '1'
2425
os:
2526
- ubuntu-latest
2627
- macOS-latest

Project.toml

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name = "ClassicalOrthogonalPolynomials"
22
uuid = "b30e2e7b-c4ee-47da-9d5f-2c5c27239acd"
33
authors = ["Sheehan Olver <[email protected]>"]
4-
version = "0.13.5"
4+
version = "0.13.7"
55

66
[deps]
77
ArrayLayouts = "4c555306-a7a7-4459-81d9-ec55ddd5c99a"
@@ -22,6 +22,8 @@ LazyArrays = "5078a376-72f3-5289-bfd5-ec5146d43c02"
2222
LazyBandedMatrices = "d7e5e226-e90b-4449-9968-0f923699bf6f"
2323
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
2424
QuasiArrays = "c4ea9172-b204-11e9-377d-29865faadc5c"
25+
RecurrenceRelationships = "807425ed-42ea-44d6-a357-6771516d7b2c"
26+
RecurrenceRelationshipArrays = "b889d2dc-af3c-4820-88a8-238fa91d3518"
2527
SpecialFunctions = "276daf66-3868-5448-9aa4-cd146d93841b"
2628

2729
[compat]
@@ -33,7 +35,7 @@ ContinuumArrays = "0.18.3"
3335
DomainSets = "0.6, 0.7"
3436
FFTW = "1.1"
3537
FastGaussQuadrature = "1"
36-
FastTransforms = "0.15.15, 0.16"
38+
FastTransforms = "0.16.6"
3739
FillArrays = "1"
3840
HypergeometricFunctions = "0.3.4"
3941
InfiniteArrays = " 0.14"
@@ -42,6 +44,8 @@ IntervalSets = "0.7"
4244
LazyArrays = "2.2"
4345
LazyBandedMatrices = "0.10"
4446
QuasiArrays = "0.11"
47+
RecurrenceRelationships = "0.1"
48+
RecurrenceRelationshipArrays = "0.1"
4549
SpecialFunctions = "1.0, 2"
4650
julia = "1.10"
4751

docs/src/index.md

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -180,9 +180,6 @@ ClassicalOrthogonalPolynomials.normalizationconstant
180180
ClassicalOrthogonalPolynomials.OrthogonalPolynomialRatio
181181
```
182182
```@docs
183-
ClassicalOrthogonalPolynomials.Clenshaw
184-
```
185-
```@docs
186183
ClassicalOrthogonalPolynomials.singularities
187184
```
188185
```@docs

src/ClassicalOrthogonalPolynomials.jl

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ using IntervalSets: UnitRange
55
using ContinuumArrays, QuasiArrays, LazyArrays, FillArrays, BandedMatrices, BlockArrays,
66
IntervalSets, DomainSets, ArrayLayouts, SpecialFunctions,
77
InfiniteLinearAlgebra, InfiniteArrays, LinearAlgebra, FastGaussQuadrature, FastTransforms, FFTW,
8-
LazyBandedMatrices, HypergeometricFunctions
8+
LazyBandedMatrices, HypergeometricFunctions, RecurrenceRelationships
99

1010
import Base: @_inline_meta, axes, getindex, unsafe_getindex, convert, prod, *, /, \, +, -,
1111
IndexStyle, IndexLinear, ==, OneTo, tail, similar, copyto!, copy, setindex,
@@ -18,7 +18,7 @@ import LazyArrays: MemoryLayout, Applied, ApplyStyle, flatten, _flatten, adjoint
1818
_mul_arguments, CachedVector, CachedMatrix, LazyVector, LazyMatrix, axpy!, AbstractLazyLayout, BroadcastLayout,
1919
AbstractCachedVector, AbstractCachedMatrix, paddeddata, cache_filldata!,
2020
simplifiable, PaddedArray, converteltype, simplify
21-
import ArrayLayouts: MatMulVecAdd, materialize!, _fill_lmul!, sublayout, sub_materialize, lmul!, ldiv!, ldiv, transposelayout, triangulardata,
21+
import ArrayLayouts: MatMulVecAdd, materialize!, sublayout, sub_materialize, lmul!, ldiv!, ldiv, transposelayout, triangulardata,
2222
subdiagonaldata, diagonaldata, supdiagonaldata, mul, rowsupport, colsupport
2323
import LazyBandedMatrices: SymTridiagonal, Bidiagonal, Tridiagonal, unitblocks, BlockRange1, AbstractLazyBandedLayout
2424
import LinearAlgebra: pinv, factorize, qr, adjoint, transpose, dot, mul!, reflectorApply!
@@ -39,9 +39,10 @@ import ContinuumArrays: Basis, Weight, basis_axes, @simplify, Identity, Abstract
3939
AffineQuasiVector, AffineMap, AbstractWeightLayout, AbstractWeightedBasisLayout, WeightedBasisLayout, WeightedBasisLayouts, demap, AbstractBasisLayout, BasisLayout,
4040
checkpoints, weight, unweighted, MappedBasisLayouts, sum_layout, invmap, plan_ldiv, layout_broadcasted, MappedBasisLayout, SubBasisLayout, broadcastbasis_layout,
4141
plan_grid_transform, plan_transform, MAX_PLOT_POINTS, MulPlan, grammatrix, AdjointBasisLayout, grammatrix_layout, plan_transform_layout, _cumsum
42-
import FastTransforms: Λ, forwardrecurrence, forwardrecurrence!, _forwardrecurrence!, clenshaw, clenshaw!,
43-
_forwardrecurrence_next, _clenshaw_next, check_clenshaw_recurrences, ChebyshevGrid, chebyshevpoints, Plan, ScaledPlan, th_cheb2leg
44-
42+
import FastTransforms: Λ, ChebyshevGrid, chebyshevpoints, Plan, ScaledPlan, th_cheb2leg, pochhammer
43+
import RecurrenceRelationships: forwardrecurrence, forwardrecurrence!, clenshaw, clenshaw!,
44+
check_clenshaw_recurrences
45+
import RecurrenceRelationshipArrays: initiateforwardrecurrence, Clenshaw
4546
import FastGaussQuadrature: jacobimoment
4647

4748
import BlockArrays: blockedrange, _BlockedUnitRange, unblock, _BlockArray, block, blockindex, BlockSlice, blockvec
@@ -211,10 +212,13 @@ singularitiesview(w, ::Inclusion) = w # for now just assume it doesn't change
211212
singularitiesview(w, ind) = view(w, ind)
212213
singularities(S::SubQuasiArray) = singularitiesview(singularities(parent(S)), parentindices(S)[1])
213214

214-
basis_axes(::Inclusion{<:Any,<:AbstractInterval}, v) = convert(AbstractQuasiMatrix{eltype(v)}, basis_singularities(singularities(v)))
215-
216215
struct NoSingularities end
217216

217+
basis_singularities(ax, ::NoSingularities) = basis(ax)
218+
basis_singularities(ax, sing) = basis_singularities(sing)
219+
basis_axes(ax::Inclusion{<:Any,<:AbstractInterval}, v) = convert(AbstractQuasiMatrix{eltype(v)}, basis_singularities(ax, singularities(v)))
220+
221+
218222
singularities(::Number) = NoSingularities()
219223
singularities(r::Base.RefValue) = r[] # pass through
220224

src/classical/chebyshev.jl

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -194,17 +194,16 @@ end
194194
##########
195195

196196
# Ultraspherical(1)\(D*Chebyshev())
197-
function diff(S::ChebyshevT{T}; dims=1) where T
197+
function diff(::ChebyshevT{T}; dims=1) where T
198198
D = _BandedMatrix((zero(T):∞)', ℵ₀, -1,1)
199199
ApplyQuasiMatrix(*, ChebyshevU{T}(), D)
200200
end
201201

202-
function diff(W::Weighted{T,<:ChebyshevU}; dims=1) where T
202+
function diff(::Weighted{T,<:ChebyshevU}; dims=1) where T
203203
D = _BandedMatrix((-one(T):-one(T):(-∞))', ℵ₀, 1,-1)
204204
ApplyQuasiMatrix(*, Weighted(ChebyshevT{T}()), D)
205205
end
206206

207-
208207
#####
209208
# Conversion
210209
#####

src/classical/jacobi.jl

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,10 +54,15 @@ hasboundedendpoints(w::AbstractJacobiWeight) = w.a ≥ 0 && w.b ≥ 0
5454
singularities(a::AbstractAffineQuasiVector) = singularities(a.x)
5555

5656

57+
## default is to just assume no singularities
58+
singularitiesbroadcast(_...) = NoSingularities()
59+
5760
for op in (:+, :*)
5861
@eval singularitiesbroadcast(::typeof($op), A, B, C, D...) = singularitiesbroadcast(*, singularitiesbroadcast(*, A, B), C, D...)
5962
end
6063

64+
singularitiesbroadcast(::typeof(*), V::Union{NoSingularities,SubQuasiArray}...) = singularitiesbroadcast(*, map(_parent,V)...)[_parentindices(V...)...]
65+
6166

6267
_parent(::NoSingularities) = NoSingularities()
6368
_parent(a) = parent(a)
@@ -66,7 +71,6 @@ _parentindices(a, b...) = parentindices(a)
6671
# for singularitiesbroadcast(literal_pow), ^, ...)
6772
singularitiesbroadcast(F::Function, G::Function, V::SubQuasiArray, K) = singularitiesbroadcast(F, G, parent(V), K)[parentindices(V)...]
6873
singularitiesbroadcast(F, V::Union{NoSingularities,SubQuasiArray}...) = singularitiesbroadcast(F, map(_parent,V)...)[_parentindices(V...)...]
69-
singularitiesbroadcast(::typeof(*), V::Union{NoSingularities,SubQuasiArray}...) = singularitiesbroadcast(*, map(_parent,V)...)[_parentindices(V...)...]
7074

7175

7276
abstract type AbstractJacobi{T} <: OrthogonalPolynomial{T} end
@@ -384,6 +388,11 @@ end
384388
# Jacobi(a+1,b+1)\(D*Jacobi(a,b))
385389
diff(S::Jacobi; dims=1) = ApplyQuasiMatrix(*, Jacobi(S.a+1,S.b+1), _BandedMatrix((((1:∞) .+ (S.a + S.b))/2)', ℵ₀, -1,1))
386390

391+
function diff(S::Jacobi{T}, m::Integer; dims=1) where T
392+
D = _BandedMatrix((pochhammer.((S.a + S.b+1):∞, m)/convert(T, 2)^m)', ℵ₀, -m, m)
393+
ApplyQuasiMatrix(*, Jacobi(S.a+m,S.b+m), D)
394+
end
395+
387396

388397
#L_6^t
389398
function diff(WS::HalfWeighted{:a,<:Any,<:Jacobi}; dims=1)

src/classical/ultraspherical.jl

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,9 +119,12 @@ end
119119
##########
120120

121121
# Ultraspherical(1)\(D*Chebyshev())
122-
diff(S::ChebyshevU; dims=1) = diff(Ultraspherical(S))
122+
diff(S::ChebyshevU, m...; dims=1) = diff(Ultraspherical(S), m...; dims)
123+
diff(S::Legendre, m...; dims=1) = diff(Ultraspherical(S), m...; dims)
124+
123125

124126
# Ultraspherical(1/2)\(D*Legendre())
127+
# Special cased as its a Ones
125128
function diff(S::Legendre{T}; dims=1) where T
126129
A = _BandedMatrix(Ones{T}(1,∞), ℵ₀, -1,1)
127130
ApplyQuasiMatrix(*, Ultraspherical{T}(convert(T,3)/2), A)
@@ -134,6 +137,20 @@ function diff(S::Ultraspherical{T}; dims=1) where T
134137
ApplyQuasiMatrix(*, Ultraspherical{T}(S.λ+1), A)
135138
end
136139

140+
# higher order
141+
142+
function diff(::ChebyshevT{T}, m::Integer; dims=1) where T
143+
μ = pochhammer(one(T),m-1)*convert(T,2)^(m-1)
144+
D = _BandedMatrix((μ * (0:∞))', ℵ₀, -m, m)
145+
ApplyQuasiMatrix(*, Ultraspherical{T}(m), D)
146+
end
147+
148+
function diff(C::Ultraspherical{T}, m::Integer; dims=1) where T
149+
μ = pochhammer(convert(T,C.λ),m)*convert(T,2)^m
150+
D = _BandedMatrix(Fill(μ,1,∞), ℵ₀, -m, m)
151+
ApplyQuasiMatrix(*, Ultraspherical{T}(C.λ+m), D)
152+
end
153+
137154
# Ultraspherical(λ-1)\ (D*wUltraspherical(λ))
138155
function diff(WS::Weighted{T,<:Ultraspherical}; dims=1) where T
139156
S = WS.P

0 commit comments

Comments
 (0)