Skip to content

Commit fb023e6

Browse files
committed
Further improve coverage
1 parent 17cfdb8 commit fb023e6

4 files changed

Lines changed: 29 additions & 21 deletions

File tree

src/codegen.jl

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,21 @@ using ChainRulesCore
22
using SymbolicUtils, SymbolicUtils.Code
33
using SymbolicUtils: Pow
44

5+
@scalar_rule +(x::Any) true
6+
@scalar_rule -(x::Any) -1
7+
@scalar_rule deg2rad(x::Any) deg2rad(one(x))
8+
@scalar_rule rad2deg(x::Any) rad2deg(one(x))
59
@scalar_rule asin(x::Any) inv(sqrt(1 - x^2))
610
@scalar_rule acos(x::Any) inv(-sqrt(1 - x^2))
711
@scalar_rule atan(x::Any) inv(1 + x^2)
812
@scalar_rule log(x::Any) inv(x)
9-
@scalar_rule log10(x::Any) inv(log(10.) * x)
13+
@scalar_rule log10(x::Any) inv(log(10.0) * x)
1014
@scalar_rule log1p(x::Any) inv(x + 1)
11-
@scalar_rule log2(x::Any) inv(log(2.) * x)
15+
@scalar_rule log2(x::Any) inv(log(2.0) * x)
1216

1317
dummy = (NoTangent(), 1)
1418
@syms t₁
15-
for func in (asin, acos, atan, log, log10, log1p, log2)
19+
for func in (+, -, deg2rad, rad2deg, asin, acos, atan, log, log10, log1p, log2)
1620
F = typeof(func)
1721
# base case
1822
@eval function (op::$F)(t::TaylorScalar{T, 2}) where {T}

src/primitive.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,6 @@ import Base: hypot, max, min
1111

1212
## Delegated
1313

14-
@inline +(t::TaylorScalar) = t
15-
@inline -(t::TaylorScalar) = -1 * t
1614
@inline sqrt(t::TaylorScalar) = t^0.5
1715
@inline cbrt(t::TaylorScalar) = ^(t, 1 / 3)
1816
@inline inv(t::TaylorScalar) = 1 / t
@@ -160,6 +158,8 @@ end
160158
end
161159
end
162160

161+
raise(::T, df::S, t::TaylorScalar{T}) where {S <: Number, T <: Number} = df * t
162+
163163
@generated function raiseinv(f::T, df::TaylorScalar{T, M},
164164
t::TaylorScalar{T, N}) where {T, M, N} # M + 1 == N
165165
ex = quote

src/scalar.jl

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -55,19 +55,8 @@ end
5555
@inline value(t::TaylorScalar) = t.value
5656
@inline extract_derivative(t::TaylorScalar, i::Integer) = t.value[i]
5757

58-
@generated function zero(::Type{TaylorScalar{T, N}}) where {T, N}
59-
quote
60-
$(Expr(:meta, :inline))
61-
TaylorScalar($(zeros(T, N)...))
62-
end
63-
end
64-
@generated function one(::Type{TaylorScalar{T, N}}) where {T, N}
65-
quote
66-
$(Expr(:meta, :inline))
67-
TaylorScalar(one(T), $(zeros(T, N - 1)...))
68-
end
69-
end
70-
58+
@inline zero(::Type{TaylorScalar{T, N}}) where {T, N} = TaylorScalar{T, N}(zero(T))
59+
@inline one(::Type{TaylorScalar{T, N}}) where {T, N} = TaylorScalar{T, N}(one(T))
7160
@inline zero(::TaylorScalar{T, N}) where {T, N} = zero(TaylorScalar{T, N})
7261
@inline one(::TaylorScalar{T, N}) where {T, N} = one(TaylorScalar{T, N})
7362

test/primitive.jl

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,25 @@
11
using FiniteDifferences
22

3+
@testset "No derivative or linear" begin
4+
some_number = 3.7
5+
for f in (+, -, zero, one, adjoint, conj, deg2rad, rad2deg), order in (2, 4)
6+
@test derivative(f, some_number, order) 0.0
7+
end
8+
end
9+
310
@testset "Unary functions" begin
411
some_number = 3.7
512
for f in (exp, expm1, exp2, exp10, sin, cos, sqrt, cbrt, inv), order in (2, 4)
613
fdm = central_fdm(12, order)
7-
@test derivative(f, some_number, order) fdm(f, some_number) rtol=1e-6
14+
@test derivative(f, some_number, order)fdm(f, some_number) rtol=1e-6
15+
end
16+
end
17+
18+
@testset "Codegen" begin
19+
some_number = 0.6
20+
for f in (log, ), order in (2, 4)
21+
fdm = central_fdm(12, order, max_range=0.5)
22+
@test derivative(f, some_number, order)fdm(f, some_number) rtol=1e-6
823
end
924
end
1025

@@ -13,10 +28,10 @@ end
1328
for f in (*, /), order in (2, 4)
1429
fdm = central_fdm(12, order)
1530
closure = x -> exp(f(x, another_number))
16-
@test derivative(closure, some_number, order) fdm(closure, some_number) rtol=1e-6
31+
@test derivative(closure, some_number, order)fdm(closure, some_number) rtol=1e-6
1732
end
1833
for f in (x -> x^7, x -> x^another_number), order in (2, 4)
1934
fdm = central_fdm(12, order)
20-
@test derivative(f, some_number, order) fdm(f, some_number) rtol=1e-6
35+
@test derivative(f, some_number, order)fdm(f, some_number) rtol=1e-6
2136
end
2237
end

0 commit comments

Comments
 (0)