Skip to content

Commit b5626c8

Browse files
committed
Merge remote-tracking branch 'upstream/master' into smooth_arclength_interpolation
2 parents 437284f + 80f0434 commit b5626c8

File tree

4 files changed

+34
-19
lines changed

4 files changed

+34
-19
lines changed

src/derivatives.jl

Lines changed: 25 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -20,20 +20,26 @@ function _extrapolate_derivative_left(A, t, order)
2020
elseif extrapolation_left == ExtrapolationType.Constant
2121
zero(first(A.u) / one(A.t[1]))
2222
elseif extrapolation_left == ExtrapolationType.Linear
23-
(order == 1) ? derivative(A, first(A.t)) : zero(first(A.u) / one(A.t[1]))
23+
(order == 1) ? _derivative(A, first(A.t), 1) : zero(first(A.u) / one(A.t[1]))
2424
elseif extrapolation_left == ExtrapolationType.Extension
25-
iguess = A.iguesser
26-
(order == 1) ? _derivative(A, t, iguess) :
25+
(order == 1) ? _derivative(A, t, length(A.t)) :
2726
ForwardDiff.derivative(t -> begin
28-
_derivative(A, t, iguess)
27+
_derivative(A, t, length(A.t))
2928
end, t)
3029
elseif extrapolation_left == ExtrapolationType.Periodic
3130
t_, _ = transformation_periodic(A, t)
32-
derivative(A, t_, order)
31+
(order == 1) ? _derivative(A, t_, A.iguesser) :
32+
ForwardDiff.derivative(t -> begin
33+
_derivative(A, t, A.iguesser)
34+
end, t_)
3335
else
3436
# extrapolation_left == ExtrapolationType.Reflective
3537
t_, n = transformation_reflective(A, t)
36-
isodd(n) ? -derivative(A, t_, order) : derivative(A, t_, order)
38+
sign = isodd(n) ? -1 : 1
39+
(order == 1) ? sign * _derivative(A, t_, A.iguesser) :
40+
ForwardDiff.derivative(t -> begin
41+
sign * _derivative(A, t, A.iguesser)
42+
end, t_)
3743
end
3844
end
3945

@@ -44,20 +50,27 @@ function _extrapolate_derivative_right(A, t, order)
4450
elseif extrapolation_right == ExtrapolationType.Constant
4551
zero(first(A.u) / one(A.t[1]))
4652
elseif extrapolation_right == ExtrapolationType.Linear
47-
(order == 1) ? derivative(A, last(A.t)) : zero(first(A.u) / one(A.t[1]))
53+
(order == 1) ? _derivative(A, last(A.t), length(A.t)) :
54+
zero(first(A.u) / one(A.t[1]))
4855
elseif extrapolation_right == ExtrapolationType.Extension
49-
iguess = A.iguesser
50-
(order == 1) ? _derivative(A, t, iguess) :
56+
(order == 1) ? _derivative(A, t, length(A.t)) :
5157
ForwardDiff.derivative(t -> begin
52-
_derivative(A, t, iguess)
58+
_derivative(A, t, length(A.t))
5359
end, t)
5460
elseif extrapolation_right == ExtrapolationType.Periodic
5561
t_, _ = transformation_periodic(A, t)
56-
derivative(A, t_, order)
62+
(order == 1) ? _derivative(A, t_, A.iguesser) :
63+
ForwardDiff.derivative(t -> begin
64+
_derivative(A, t, A.iguesser)
65+
end, t_)
5766
else
5867
# extrapolation_right == ExtrapolationType.Reflective
5968
t_, n = transformation_reflective(A, t)
60-
iseven(n) ? -derivative(A, t_, order) : derivative(A, t_, order)
69+
sign = iseven(n) ? -1 : 1
70+
(order == 1) ? sign * _derivative(A, t_, A.iguesser) :
71+
ForwardDiff.derivative(t -> begin
72+
sign * _derivative(A, t, A.iguesser)
73+
end, t_)
6174
end
6275
end
6376

src/integral_inverses.jl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,12 @@ Creates the inverted integral interpolation object from the given interpolation.
1313
1414
- `A`: interpolation object satisfying the above requirements
1515
"""
16-
invert_integral(A::AbstractInterpolation) = throw(IntegralInverseNotFoundError())
16+
invert_integral(::AbstractInterpolation) = throw(IntegralInverseNotFoundError())
1717

18-
_integral(A::AbstractIntegralInverseInterpolation, idx, t) = throw(IntegralNotFoundError())
18+
_integral(::AbstractIntegralInverseInterpolation, idx, t) = throw(IntegralNotFoundError())
1919

2020
function _derivative(A::AbstractIntegralInverseInterpolation, t::Number, iguess)
21-
inv(A.itp(A(t)))
21+
inv(A.itp(_interpolate(A, t, iguess)))
2222
end
2323

2424
"""

src/interpolation_methods.jl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@ function _extrapolate_left(A, t)
1313
if extrapolation_left == ExtrapolationType.None
1414
throw(LeftExtrapolationError())
1515
elseif extrapolation_left == ExtrapolationType.Constant
16-
slope = derivative(A, first(A.t))
16+
slope = _derivative(A, first(A.t), 1)
1717
first(A.u) + zero(slope * t)
1818
elseif extrapolation_left == ExtrapolationType.Linear
19-
slope = derivative(A, first(A.t))
19+
slope = _derivative(A, first(A.t), 1)
2020
first(A.u) + slope * (t - first(A.t))
2121
else
2222
_extrapolate_other(A, t, extrapolation_left)
@@ -28,10 +28,10 @@ function _extrapolate_right(A, t)
2828
if extrapolation_right == ExtrapolationType.None
2929
throw(RightExtrapolationError())
3030
elseif extrapolation_right == ExtrapolationType.Constant
31-
slope = derivative(A, last(A.t))
31+
slope = _derivative(A, last(A.t), length(A.t))
3232
last(A.u) + zero(slope * t)
3333
elseif extrapolation_right == ExtrapolationType.Linear
34-
slope = derivative(A, last(A.t))
34+
slope = _derivative(A, last(A.t), length(A.t))
3535
last(A.u) + slope * (t - last(A.t))
3636
else
3737
_extrapolate_other(A, t, extrapolation_right)

test/integral_inverse_tests.jl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ function test_integral_inverses(method; args = [], kwargs = [])
1717
adiff = derivative(A_intinv, I)
1818
@test cdiff adiff
1919
end
20+
21+
@test @inferred(A(ts[37])) == A(ts[37])
2022
end
2123

2224
@testset "Linear Interpolation" begin

0 commit comments

Comments
 (0)