Skip to content

Commit 9e1b1d4

Browse files
authored
Improve type-inference in normalized space conversion (#295)
* Improve type-inference in normalized space conversion * Bump version to v0.6.44 * Relax normalized-polynomialspace maxspace/conversion_type * Add tests
1 parent ff520e4 commit 9e1b1d4

File tree

5 files changed

+47
-9
lines changed

5 files changed

+47
-9
lines changed

Project.toml

Lines changed: 1 addition & 1 deletion
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.43"
3+
version = "0.6.44"
44

55
[deps]
66
ApproxFunBase = "fbd15aa5-315a-5a7d-a8a4-24992e37be05"

src/Spaces/Jacobi/JacobiOperators.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ function _conversion_shiftordersbyone(L::Jacobi, M::Jacobi)
145145
CLJ = [ConcreteConversion(Jacobi(b-1,L.a,dm), Jacobi(b, L.a, dm)) for b in M.b:-1:L.b+1]
146146
CJM = [ConcreteConversion(Jacobi(M.b,a-1,dm), Jacobi(M.b, a, dm)) for a in M.a:-1:L.a+1]
147147
C = [CJM; CLJ]
148-
return ConversionWrapper(TimesOperator(C))
148+
return ConversionWrapper(TimesOperator(C), L, M)
149149
end
150150

151151
## Conversion

src/Spaces/PolynomialSpace.jl

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -452,21 +452,27 @@ normalizedspace(S::NormalizedPolynomialSpace) = S
452452

453453
supportsinplacetransform(N::NormalizedPolynomialSpace) = supportsinplacetransform(N.space)
454454

455-
function Conversion(L::NormalizedPolynomialSpace{S}, M::S) where S<:PolynomialSpace
455+
function Conversion(L::NormalizedPolynomialSpace, M::PolynomialSpace)
456456
if L.space == M
457457
ConcreteConversion(L, M)
458458
else
459459
sp = L.space
460-
ConversionWrapper(TimesOperator(Conversion(sp, M), ConcreteConversion(L, sp)))
460+
ConversionWrapper(
461+
TimesOperator(Conversion(sp, M), ConcreteConversion(L, sp)),
462+
L, M,
463+
)
461464
end
462465
end
463466

464-
function Conversion(L::S, M::NormalizedPolynomialSpace{S}) where S<:PolynomialSpace
467+
function Conversion(L::PolynomialSpace, M::NormalizedPolynomialSpace)
465468
if M.space == L
466469
ConcreteConversion(L, M)
467470
else
468471
sp = M.space
469-
ConversionWrapper(TimesOperator(ConcreteConversion(sp, M), Conversion(L, sp)))
472+
ConversionWrapper(
473+
TimesOperator(ConcreteConversion(sp, M), Conversion(L, sp)),
474+
L, M,
475+
)
470476
end
471477
end
472478

@@ -490,11 +496,11 @@ function Fun(::typeof(identity), S::NormalizedPolynomialSpace)
490496
Fun(S, coeffs)
491497
end
492498

493-
function conversion_rule(a::NormalizedPolynomialSpace{S}, b::S) where S<:PolynomialSpace
499+
function conversion_rule(a::NormalizedPolynomialSpace, b::PolynomialSpace)
494500
conversion_type(a.space, b)
495501
end
496502

497-
function maxspace_rule(a::NormalizedPolynomialSpace{S}, b::S) where S<:PolynomialSpace
503+
function maxspace_rule(a::NormalizedPolynomialSpace, b::PolynomialSpace)
498504
maxspace(a.space, b)
499505
end
500506

test/JacobiTest.jl

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -274,7 +274,16 @@ include("testutils.jl")
274274
end
275275
@testset "Normalized and Unnormalized" begin
276276
C = Conversion(NormalizedUltraspherical(0.5), Legendre())
277-
@test C * Fun(x->x^4, NormalizedUltraspherical(0.5)) Fun(x->x^4, Legendre())
277+
@test isdiag(C)
278+
g = C * Fun(x->x^4, NormalizedUltraspherical(0.5))
279+
@test space(g) == Legendre()
280+
@test g Fun(x->x^4, Legendre())
281+
282+
C = Conversion(Ultraspherical(0.5), NormalizedLegendre())
283+
@test isdiag(C)
284+
g = C * Fun(x->x^4, Ultraspherical(0.5))
285+
@test space(g) == NormalizedLegendre()
286+
@test g Fun(x->x^4, NormalizedLegendre())
278287

279288
C = Conversion(Legendre(), NormalizedChebyshev())
280289
@test C * Fun(x->x^4, Legendre()) Fun(x->x^4, NormalizedChebyshev())

test/UltrasphericalTest.jl

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,29 @@ include("testutils.jl")
148148
end
149149
end
150150

151+
@testset "Normalized" begin
152+
Tallowed = Union{
153+
typeof(Conversion(Ultraspherical(1), NormalizedUltraspherical(1))),
154+
typeof(Conversion(Ultraspherical(1), NormalizedUltraspherical(2)))
155+
}
156+
C = @inferred Tallowed Conversion(Ultraspherical(1), NormalizedUltraspherical(1))
157+
@test C * Fun(Ultraspherical(1)) Fun(NormalizedUltraspherical(1))
158+
159+
Tallowed = Union{
160+
typeof(Conversion(NormalizedUltraspherical(1), Ultraspherical(1))),
161+
typeof(Conversion(NormalizedUltraspherical(1), Ultraspherical(2)))
162+
}
163+
C = @inferred Tallowed Conversion(NormalizedUltraspherical(1), Ultraspherical(1))
164+
@test C * Fun(NormalizedUltraspherical(1)) Fun(Ultraspherical(1))
165+
166+
Tallowed = Union{
167+
typeof(Conversion(NormalizedUltraspherical(1), NormalizedUltraspherical(1))),
168+
typeof(Conversion(NormalizedUltraspherical(1), NormalizedUltraspherical(2)))
169+
}
170+
C = @inferred Tallowed Conversion(NormalizedUltraspherical(1), NormalizedUltraspherical(1))
171+
@test C * Fun(NormalizedUltraspherical(1)) Fun(NormalizedUltraspherical(1))
172+
end
173+
151174
@testset "complex normalization" begin
152175
C = Conversion(NormalizedUltraspherical(NormalizedLegendre()), Ultraspherical(Legendre()))
153176
CC = convert(Operator{ComplexF64}, C)

0 commit comments

Comments
 (0)