Skip to content

Commit b10990b

Browse files
committed
constprop in jacobi derivative
1 parent 3ecea6c commit b10990b

File tree

2 files changed

+16
-7
lines changed

2 files changed

+16
-7
lines changed

src/Spaces/Jacobi/JacobiOperators.jl

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,19 @@
11
## Derivative
22

3-
function Derivative(J::Jacobi,k::Number)
3+
@inline function _Derivative(J::Jacobi, k::Number)
44
assert_integer(k)
55
k==1 ? ConcreteDerivative(J,1) :
66
DerivativeWrapper(
77
TimesOperator(
88
Derivative(Jacobi(J.b+1,J.a+1,J.domain),k-1),ConcreteDerivative(J,1)),
99
J, k)
1010
end
11-
11+
@static if VERSION >= v"1.8"
12+
Base.@constprop :aggressive Derivative(J::Jacobi, k::Number) =
13+
_Derivative(J, k)
14+
else
15+
Derivative(J::Jacobi, k::Number) = _Derivative(J, k)
16+
end
1217

1318

1419
rangespace(D::ConcreteDerivative{J}) where {J<:Jacobi}=Jacobi(D.space.b+D.order,D.space.a+D.order,domain(D))

test/JacobiTest.jl

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -110,15 +110,19 @@ using StaticArrays: SVector
110110
end
111111

112112
@testset "Derivative" begin
113-
D=Derivative(Jacobi(0.,1.,Segment(1.,0.)))
113+
D = if VERSION >= v"1.8"
114+
@inferred Derivative(Jacobi(0.,1.,Segment(1.,0.)))
115+
else
116+
Derivative(Jacobi(0.,1.,Segment(1.,0.)))
117+
end
114118
@time testbandedoperator(D)
115119
# only one band should be populated
116120
@test bandwidths(D, 1) == -bandwidths(D, 2)
117121

118122
@testset for d in [-1..1, 0..1]
119123
f = Fun(x->x^2, Chebyshev(d))
120124
C = space(f)
121-
for J = Any[Jacobi(-0.5, -0.5, d), Legendre(d)]
125+
for J = (Jacobi(-0.5, -0.5, d), Legendre(d))
122126
g = (Derivative(J) * Conversion(C, J)) * f
123127
h = Derivative(C) * f
124128
@test g h
@@ -128,9 +132,9 @@ using StaticArrays: SVector
128132
@test g h
129133
end
130134
end
131-
@testset for S1 in Any[Jacobi(0,0),
132-
Jacobi(0,0,1..2), Jacobi(2,2,1..2), Jacobi(0.5,2.5,1..2)],
133-
S in Any[S1, NormalizedPolynomialSpace(S1)]
135+
@testset for S1 in (Jacobi(0,0), Jacobi(0,0,1..2),
136+
Jacobi(2,2,1..2), Jacobi(0.5,2.5,1..2)),
137+
S in (S1, NormalizedPolynomialSpace(S1))
134138
f = Fun(x->x^3 + 4x^2 + 2x + 6, S)
135139
@test Derivative(S) * f Fun(x->3x^2 + 8x + 2, S)
136140
@test Derivative(S)^2 * f Fun(x->6x+8, S)

0 commit comments

Comments
 (0)