Skip to content

Commit 68b8171

Browse files
authored
Move ContinuousSpace to ApproxFunBase (#210)
* Move ContinuousSpace to AFB * add Space back * Bump version to v0.6.16
1 parent 58a4bd8 commit 68b8171

File tree

3 files changed

+3
-155
lines changed

3 files changed

+3
-155
lines changed

Project.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name = "ApproxFunOrthogonalPolynomials"
22
uuid = "b70543e2-c0d9-56b8-a290-0d4d6d4de211"
3-
version = "0.6.15"
3+
version = "0.6.16"
44

55
[deps]
66
ApproxFunBase = "fbd15aa5-315a-5a7d-a8a4-24992e37be05"
@@ -20,7 +20,7 @@ StaticArrays = "90137ffa-7385-5640-81b9-e52037218182"
2020
Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2"
2121

2222
[compat]
23-
ApproxFunBase = "0.8"
23+
ApproxFunBase = "0.8.1"
2424
ApproxFunBaseTest = "0.1"
2525
Aqua = "0.5"
2626
BandedMatrices = "0.16, 0.17"

src/ApproxFunOrthogonalPolynomials.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ import ApproxFunBase: Fun, SubSpace, WeightSpace, NoSpace, HeavisideSpace,
4242
block, blockstart, blockstop, blocklengths, isblockbanded,
4343
pointscompatible, affine_setdiff, complexroots,
4444
ℓ⁰, recα, recβ, recγ, ℵ₀, ∞, RectDomain,
45-
assert_integer, supportsinplacetransform
45+
assert_integer, supportsinplacetransform, ContinuousSpace
4646

4747
import DomainSets: Domain, indomain, UnionDomain, FullSpace, Point,
4848
Interval, ChebyshevInterval, boundary, rightendpoint, leftendpoint,

src/Spaces/Ultraspherical/ContinuousSpace.jl

Lines changed: 0 additions & 152 deletions
Original file line numberDiff line numberDiff line change
@@ -1,137 +1,14 @@
11
export ContinuousSpace
22

3-
struct ContinuousSpace{T,R,P<:PiecewiseSegment{T}} <: Space{P,R}
4-
domain::P
5-
end
6-
7-
ContinuousSpace(d::PiecewiseSegment{T}) where {T} =
8-
ContinuousSpace{T,real(eltype(T)),typeof(d)}(d)
9-
10-
113
Space(d::PiecewiseSegment) = ContinuousSpace(d)
124

13-
isperiodic(C::ContinuousSpace) = isperiodic(domain(C))
14-
155
const PiecewiseSpaceReal{CD} = PiecewiseSpace{CD,<:Any,<:Real}
166
const PiecewiseSpaceRealChebyDirichlet11 =
177
PiecewiseSpaceReal{<:TupleOrVector{ChebyshevDirichlet{1,1}}}
188

19-
spacescompatible(a::ContinuousSpace,b::ContinuousSpace) = domainscompatible(a,b)
209
conversion_rule(a::ContinuousSpace, b::PiecewiseSpaceRealChebyDirichlet11) = a
2110

22-
plan_transform(sp::ContinuousSpace,vals::AbstractVector) =
23-
TransformPlan{eltype(vals),typeof(sp),false,Nothing}(sp,nothing)
24-
25-
function *(P::TransformPlan{T,<:ContinuousSpace,false},vals::AbstractVector{T}) where {T}
26-
S = P.space
27-
n=length(vals)
28-
d=domain(S)
29-
K=ncomponents(d)
30-
k=div(n,K)
31-
32-
PT=promote_type(prectype(d),eltype(vals))
33-
if k==0
34-
vals
35-
elseif isperiodic(d)
36-
ret=Array{PT}(undef, max(K,n-K))
37-
r=n-K*k
38-
39-
for j=1:r
40-
cfs=transform(ChebyshevDirichlet{1,1}(component(d,j)),
41-
vals[(j-1)*(k+1)+1:j*(k+1)])
42-
if j==1
43-
ret[1]=cfs[1]-cfs[2]
44-
ret[2]=cfs[1]+cfs[2]
45-
elseif j < K
46-
ret[j+1]=cfs[1]+cfs[2]
47-
end
48-
ret[K+j:K:end]=cfs[3:end]
49-
end
50-
51-
for j=r+1:K
52-
cfs=transform(ChebyshevDirichlet{1,1}(component(d,j)),
53-
vals[r*(k+1)+(j-r-1)*k+1:r*(k+1)+(j-r)*k])
54-
if length(cfs)==1 && j <K
55-
ret[j+1]=cfs[1]
56-
elseif j==1
57-
ret[1]=cfs[1]-cfs[2]
58-
ret[2]=cfs[1]+cfs[2]
59-
elseif j < K
60-
ret[j+1]=cfs[1]+cfs[2]
61-
end
62-
ret[K+j:K:end]=cfs[3:end]
63-
end
64-
65-
ret
66-
else
67-
ret=Array{PT}(undef, n-K+1)
68-
r=n-K*k
69-
70-
for j=1:r
71-
cfs=transform(ChebyshevDirichlet{1,1}(component(d,j)),
72-
vals[(j-1)*(k+1)+1:j*(k+1)])
73-
if j==1
74-
ret[1]=cfs[1]-cfs[2]
75-
end
76-
77-
ret[j+1]=cfs[1]+cfs[2]
78-
ret[K+j+1:K:end]=cfs[3:end]
79-
end
80-
81-
for j=r+1:K
82-
cfs=transform(ChebyshevDirichlet{1,1}(component(d,j)),
83-
vals[r*(k+1)+(j-r-1)*k+1:r*(k+1)+(j-r)*k])
84-
85-
if length(cfs) 1
86-
ret .= cfs
87-
else
88-
if j==1
89-
ret[1]=cfs[1]-cfs[2]
90-
end
91-
ret[j+1]=cfs[1]+cfs[2]
92-
ret[K+j+1:K:end]=cfs[3:end]
93-
end
94-
end
95-
96-
ret
97-
end
98-
end
99-
10011
components(S::ContinuousSpace) = [ChebyshevDirichlet{1,1}(s) for s in components(domain(S))]
101-
canonicalspace(S::ContinuousSpace) = PiecewiseSpace(components(S))
102-
convert(::Type{PiecewiseSpace}, S::ContinuousSpace) = canonicalspace(S)
103-
104-
blocklengths(C::ContinuousSpace) = Fill(ncomponents(C.domain),∞)
105-
106-
block(C::ContinuousSpace,k) = Block((k-1)÷ncomponents(C.domain)+1)
107-
108-
109-
## components
110-
111-
components(f::Fun{<:ContinuousSpace},j::Integer) = components(Fun(f,canonicalspace(f)),j)
112-
components(f::Fun{<:ContinuousSpace}) = components(Fun(f,canonicalspace(space(f))))
113-
114-
115-
function points(f::Fun{<:ContinuousSpace})
116-
n=ncoefficients(f)
117-
d=domain(f)
118-
K=ncomponents(d)
119-
120-
m=isperiodic(d) ? max(K,n+2K-1) : n+K
121-
points(f.space,m)
122-
end
123-
124-
## Conversion
125-
126-
coefficients(cfsin::AbstractVector,A::ContinuousSpace,B::PiecewiseSpace) =
127-
defaultcoefficients(cfsin,A,B)
128-
129-
coefficients(cfsin::AbstractVector,A::PiecewiseSpace,B::ContinuousSpace) =
130-
default_Fun(Fun(A,cfsin),B).coefficients
131-
132-
coefficients(cfsin::AbstractVector,A::ContinuousSpace,B::ContinuousSpace) =
133-
default_Fun(Fun(A,cfsin),B).coefficients
134-
13512

13613
# We implemnt conversion between continuous space and PiecewiseSpace with Chebyshev dirichlet
13714

@@ -407,34 +284,5 @@ function BlockBandedMatrix(S::SubOperator{T,<:ConcreteDirichlet{<:TensorChebyshe
407284
end
408285

409286

410-
union_rule(A::PiecewiseSpace, B::ContinuousSpace) = union(A, strictconvert(PiecewiseSpace, B))
411-
union_rule(A::ConstantSpace, B::ContinuousSpace) = B
412287
union_rule(A::ContinuousSpace, B::PolynomialSpace{<:IntervalOrSegment}) =
413288
Space(domain(A) domain(B))
414-
415-
function approx_union(a::AbstractVector{T}, b::AbstractVector{V}) where {T,V}
416-
ret = sort!(union(a,b))
417-
for k in length(ret)-1:-1:1
418-
isapprox(ret[k] , ret[k+1]; atol=10eps()) && deleteat!(ret, k+1)
419-
end
420-
ret
421-
end
422-
423-
424-
function union_rule(A::ContinuousSpace{<:Real}, B::ContinuousSpace{<:Real})
425-
p_A,p_B = domain(A).points, domain(B).points
426-
a,b = minimum(p_A), maximum(p_A)
427-
c,d = minimum(p_B), maximum(p_B)
428-
@assert !isempty((a..b) (c..d))
429-
ContinuousSpace(PiecewiseSegment(approx_union(p_A, p_B)))
430-
end
431-
432-
function integrate(f::Fun{<:ContinuousSpace})
433-
cs = [cumsum(x) for x in components(f)]
434-
for k=1:length(cs)-1
435-
cs[k+1] += last(cs[k])
436-
end
437-
Fun(Fun(cs, PiecewiseSpace), space(f))
438-
end
439-
440-
cumsum(f::Fun{<:ContinuousSpace}) = integrate(f)

0 commit comments

Comments
 (0)