Skip to content

Commit 450b42c

Browse files
committed
fix tests again
1 parent 2f56846 commit 450b42c

File tree

5 files changed

+78
-153
lines changed

5 files changed

+78
-153
lines changed

src/ApproxFunFourier.jl

Lines changed: 27 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -8,35 +8,38 @@ import AbstractFFTs: Plan, fft, ifft
88
import FFTW: plan_r2r!, fftwNumber, REDFT10, REDFT01, REDFT00, RODFT00, R2HC, HC2R,
99
r2r!, r2r, plan_fft, plan_ifft, plan_ifft!, plan_fft!
1010

11-
import ApproxFunBase: normalize!, flipsign, FiniteRange, MatrixFun, UnsetSpace, VFun, RowVector,
12-
UnivariateSpace, AmbiguousSpace, SumSpace, SubSpace, NoSpace, Space,
11+
import ApproxFunBase: normalize!, flipsign, FiniteRange, Fun, MatrixFun, UnsetSpace, VFun, RowVector,
12+
UnivariateSpace, AmbiguousSpace, SumSpace, SubSpace, WeightSpace, NoSpace, Space,
13+
HeavisideSpace, PointSpace,
1314
IntervalOrSegment, RaggedMatrix, AlmostBandedMatrix,
1415
AnyDomain, ZeroSpace, TrivialInterlacer, BlockInterlacer,
1516
AbstractTransformPlan, TransformPlan, ITransformPlan,
1617
ConcreteConversion, ConcreteMultiplication, ConcreteDerivative, ConcreteIntegral,
18+
ConcreteVolterra, Volterra, VolterraWrapper,
1719
MultiplicationWrapper, ConversionWrapper, DerivativeWrapper, Evaluation,
1820
Conversion, Multiplication, Derivative, Integral, bandwidths,
1921
ConcreteEvaluation, ConcreteDefiniteLineIntegral, ConcreteDefiniteIntegral, ConcreteIntegral,
2022
DefiniteLineIntegral, DefiniteIntegral, ConcreteDefiniteIntegral, ConcreteDefiniteLineIntegral,
21-
ReverseOrientation, ReverseOrientationWrapper, ReverseWrapper, Reverse, NegateEven, Dirichlet,
23+
ReverseOrientation, ReverseOrientationWrapper, ReverseWrapper, Reverse, NegateEven, Dirichlet, ConcreteDirichlet,
2224
TridiagonalOperator, SubOperator, Space, @containsconstants, spacescompatible,
23-
hasfasttransform, canonicalspace, setdomain, prectype, domainscompatible,
25+
hasfasttransform, canonicalspace, domain, setdomain, prectype, domainscompatible,
2426
plan_transform, plan_itransform, plan_transform!, plan_itransform!, transform, itransform, hasfasttransform, Integral,
2527
domainspace, rangespace, boundary,
2628
union_rule, conversion_rule, maxspace_rule, conversion_type, maxspace, hasconversion, points,
2729
rdirichlet, ldirichlet, lneumann, rneumann, ivp, bvp,
2830
linesum, differentiate, integrate, linebilinearform, bilinearform,
2931
UnsetNumber, coefficienttimes,
30-
Segment, isambiguous, Vec, eps, isperiodic,
32+
Segment, IntervalOrSegmentDomain, PiecewiseSegment, isambiguous, Vec, eps, isperiodic,
3133
arclength, complexlength,
3234
invfromcanonicalD, fromcanonical, tocanonical, fromcanonicalD, tocanonicalD, canonicaldomain, setcanonicaldomain, mappoint,
3335
reverseorientation, checkpoints, evaluate, mul_coefficients, coefficients, isconvertible,
3436
clenshaw, ClenshawPlan, sineshaw,
3537
toeplitz_getindex, toeplitz_axpy!, ToeplitzOperator, hankel_getindex,
3638
SpaceOperator, ZeroOperator, InterlaceOperator,
3739
interlace!, reverseeven!, negateeven!, cfstype, pad!,
38-
extremal_args, hesseneigvals
40+
extremal_args, hesseneigvals, chebyshev_clenshaw, recA, recB, recC, roots, chebmult_getindex, intpow, alternatingsum
3941

42+
4043
import DomainSets: Domain, indomain, UnionDomain, ProductDomain, FullSpace, Point, elements, DifferenceDomain,
4144
Interval, ChebyshevInterval, boundary, ∂, rightendpoint, leftendpoint,
4245
dimension, Domain1d, Domain2d
@@ -236,58 +239,6 @@ plan_itransform(::CosSpace,x::AbstractVector) = plan_ichebyshevtransform(x;kind=
236239
transform(::CosSpace,vals,plan) = plan*vals
237240
itransform(::CosSpace,cfs,plan) = plan*cfs
238241

239-
function chebyshev_clenshaw(c::AbstractVector, x)
240-
N,T = length(c),promote_type(eltype(c),typeof(x))
241-
if N == 0
242-
return zero(x)
243-
elseif N == 1 # avoid issues with NaN x
244-
return first(c)*one(x)
245-
end
246-
247-
x = 2x
248-
bk1,bk2 = zero(T),zero(T)
249-
@inbounds for k = N:-1:2
250-
bk2, bk1 = bk1, muladd(x,bk1,c[k]-bk2)
251-
end
252-
253-
muladd(x/2,bk1,c[1]-bk2)
254-
end
255-
256-
257-
function chebyshev_clenshaw(c::AbstractVector,x::Vector,plan::ClenshawPlan{<:Any,V}) where V
258-
N,n = length(c),length(x)
259-
if isempty(c)
260-
return zeros(V,n)
261-
end
262-
263-
bk=plan.bk
264-
bk1=plan.bk1
265-
bk2=plan.bk2
266-
267-
@inbounds for i = 1:n
268-
x[i] = 2x[i]
269-
bk1[i] = zero(V)
270-
bk2[i] = zero(V)
271-
end
272-
273-
@inbounds for k = N:-1:2
274-
ck = c[k]
275-
for i = 1:n
276-
bk[i] = muladd(x[i],bk1[i],ck-bk2[i])
277-
end
278-
bk2, bk1, bk = bk1, bk, bk2
279-
end
280-
281-
ck = c[1]
282-
@inbounds for i = 1:n
283-
x[i] = x[i]/2
284-
bk[i] = muladd(x[i],bk1[i],ck-bk2[i])
285-
end
286-
287-
bk
288-
end
289-
290-
291242
clenshaw(::CosSpace, c::AbstractVector, x) = chebyshev_clenshaw(c, x)
292243

293244
clenshaw(sp::CosSpace, c::AbstractVector, x::AbstractArray) =
@@ -623,4 +574,22 @@ DefiniteLineIntegral(d::PeriodicDomain) = DefiniteLineIntegral(Laurent(d))
623574
union_rule(A::Space{<:PeriodicSegment}, B::Space{<:IntervalOrSegment}) =
624575
union(Space(Interval(domain(A))), B)
625576

577+
578+
## Derivative
579+
580+
function invfromcanonicalD(S::Laurent{PeriodicLine{false}})
581+
d=domain(S)
582+
@assert d.center==0 && d.L==1.0
583+
a=Fun(Laurent(),[1.,.5,.5])
584+
end
585+
586+
function invfromcanonicalD(S::LaurentDirichlet{PeriodicLine{false}})
587+
d=domain(S)
588+
@assert d.center==0 && d.L==1.0
589+
a=Fun(Laurent(),[1.,.5,.5])
590+
end
591+
592+
Space(d::PeriodicCurve{S}) where {S<:Fourier} = Fourier(d)
593+
Space(d::PeriodicCurve{S}) where {S<:Laurent} = Laurent(d)
594+
626595
end #module

src/Domains/Curve.jl

Lines changed: 0 additions & 70 deletions
This file was deleted.

src/Domains/Domains.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,5 +53,5 @@ convert(::Type{D},::AnyDomain) where {D<:PeriodicDomain} = AnyPeriodicDomain()
5353
include("PeriodicSegment.jl")
5454
include("Circle.jl")
5555
include("PeriodicLine.jl")
56-
include("Curve.jl")
56+
include("PeriodicCurve.jl")
5757
include("Disk.jl")

src/Domains/PeriodicCurve.jl

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
2+
struct PeriodicCurve{S<:Space,T,VT} <: PeriodicDomain{T}
3+
curve::Fun{S,T,VT}
4+
end
5+
6+
7+
8+
==(a::PeriodicCurve, b::PeriodicCurve) = a.curve == b.curve
9+
isempty(::PeriodicCurve) = false
10+
11+
points(c::PeriodicCurve, n::Integer) = c.curve.(points(domain(c.curve),n))
12+
13+
14+
checkpoints(d::PeriodicCurve) = fromcanonical.(Ref(d),checkpoints(domain(d.curve)))
15+
16+
for op in (:(leftendpoint),:(rightendpoint),:(rand))
17+
@eval $op(c::PeriodicCurve) = c.curve($op(domain(c.curve)))
18+
end
19+
20+
21+
canonicaldomain(c::PeriodicCurve) = domain(c.curve)
22+
23+
fromcanonical(c::PeriodicCurve{S,T},x) where {S<:Space,T<:Number} = c.curve(x)
24+
function tocanonical(c::PeriodicCurve,x)
25+
rts=roots(c.curve-x)
26+
@assert length(rts)==1
27+
first(rts)
28+
end
29+
30+
31+
fromcanonicalD(c::PeriodicCurve,x)=differentiate(c.curve)(x)
32+
33+
function indomain(x,c::PeriodicCurve)
34+
rts=roots(c.curve-x)
35+
if length(rts)  1
36+
false
37+
else
38+
in(first(rts),canonicaldomain(c))
39+
end
40+
end
41+
42+
43+
reverseorientation(d::PeriodicCurve) = PeriodicCurve(reverseorientation(d.curve))
44+
45+
isambiguous(d::PeriodicCurve) = ncoefficients(d.curve)==0 && isambiguous(domain(d.curve))
46+
47+
convert(::Type{PeriodicCurve{S,T}},::AnyDomain) where {S,T}=Fun(S(AnyDomain()),[NaN])
48+
49+
50+
arclength(d::PeriodicCurve) = linesum(ones(d))

src/FourierOperators.jl

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -227,30 +227,6 @@ bandwidths(M::ConcreteMultiplication{CS,CS}) where {CS<:CosSpace} =
227227
(ncoefficients(M.f)-1,ncoefficients(M.f)-1)
228228
rangespace(M::ConcreteMultiplication{CS,CS}) where {CS<:CosSpace} = domainspace(M)
229229

230-
function chebmult_getindex(cfs::AbstractVector,k::Integer,j::Integer)
231-
n=length(cfs)
232-
233-
ret = zero(eltype(cfs))
234-
235-
n == 0 && return ret
236-
237-
# Toeplitz part
238-
if k == j
239-
ret += cfs[1]
240-
elseif k > j && k-j+1 n
241-
ret += cfs[k-j+1]/2
242-
elseif k < j && j-k+1 n
243-
ret += cfs[j-k+1]/2
244-
end
245-
246-
# Hankel part
247-
if k  2 && k+j-1 n
248-
ret += cfs[k+j-1]/2
249-
end
250-
251-
ret
252-
end
253-
254230
getindex(M::ConcreteMultiplication{CS,CS},k::Integer,j::Integer) where {CS<:CosSpace} =
255231
chebmult_getindex(M.f.coefficients,k,j)
256232

0 commit comments

Comments
 (0)