Skip to content

Commit 86a9261

Browse files
committed
Change slicing to tail
1 parent a2e880b commit 86a9261

File tree

4 files changed

+35
-29
lines changed

4 files changed

+35
-29
lines changed

.devcontainer/devcontainer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
]
1010
}
1111
},
12-
"postCreateCommand": "julia -e 'using Pkg; Pkg.add([\"Revise\", \"TestEnv\"])'",
12+
"postCreateCommand": "julia -e 'using Pkg; Pkg.add([\"Revise\", \"TestEnv\", \"JuliaFormatter\", \"Cthulhu\"])'",
1313
"hostRequirements": {
1414
"cpus": 4
1515
}

benchmark/Manifest.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# This file is machine-generated - editing it directly is not advised
22

3-
julia_version = "1.8.5"
3+
julia_version = "1.8.4"
44
manifest_format = "2.0"
55
project_hash = "141466748547092db2659f061bcf16b16bf160f5"
66

src/primitive.jl

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,21 @@ import Base: asin, acos, atan, acot, asec, acsc, asinh, acosh, atanh, acoth, ase
55
import Base: sinc, cosc
66
import Base: +, -, *, /, \, ^, >, <, >=, <=, ==
77
import Base: hypot, max, min
8+
import Base: zero, one, adjoint, conj, transpose
9+
10+
using Base: tail
811

912
# Unary
1013

14+
@inline zero(::Type{TaylorScalar{T, N}}) where {T, N} = TaylorScalar{T, N}(zero(T))
15+
@inline one(::Type{TaylorScalar{T, N}}) where {T, N} = TaylorScalar{T, N}(one(T))
16+
@inline zero(::TaylorScalar{T, N}) where {T, N} = zero(TaylorScalar{T, N})
17+
@inline one(::TaylorScalar{T, N}) where {T, N} = one(TaylorScalar{T, N})
18+
19+
transpose(t::TaylorScalar) = t
20+
adjoint(t::TaylorScalar) = t
21+
conj(t::TaylorScalar) = t
22+
1123
## Delegated
1224

1325
@inline sqrt(t::TaylorScalar) = t^0.5
@@ -71,6 +83,16 @@ end
7183

7284
# Binary
7385

86+
@inline +(a::Number, b::TaylorScalar) = TaylorScalar((a + value(b)[1]), tail(value(b))...)
87+
@inline -(a::Number, b::TaylorScalar) = TaylorScalar((a - value(b)[1]), .-tail(value(b))...)
88+
@inline *(a::Number, b::TaylorScalar) = TaylorScalar((a .* value(b))...)
89+
@inline /(a::Number, b::TaylorScalar) = /(promote(a, b)...)
90+
91+
@inline +(a::TaylorScalar, b::Number) = TaylorScalar((value(a)[1] + b), tail(value(a))...)
92+
@inline -(a::TaylorScalar, b::Number) = TaylorScalar((value(a)[1] - b), tail(value(a))...)
93+
@inline *(a::TaylorScalar, b::Number) = TaylorScalar((value(a) .* b)...)
94+
@inline /(a::TaylorScalar, b::Number) = TaylorScalar((value(a) ./ b)...)
95+
7496
for op in [:>, :<, :(==), :(>=), :(<=)]
7597
@eval @inline $op(a::Number, b::TaylorScalar) = $op(a, value(b)[1])
7698
@eval @inline $op(a::TaylorScalar, b::Number) = $op(value(a)[1], b)
@@ -106,8 +128,12 @@ end
106128
ex = :($ex; TaylorScalar($([Symbol('v', i) for i in 1:N]...)))
107129
return :(@inbounds $ex)
108130
end
109-
@inline *(a::TaylorScalar{T1, N}, b::TaylorScalar{T2, N}) where {T1,T2,N} = *(promote(a,b)...)
110-
@inline /(a::TaylorScalar{T1, N}, b::TaylorScalar{T2, N}) where {T1,T2,N} = *(promote(a,b)...)
131+
@inline function *(a::TaylorScalar{T1, N}, b::TaylorScalar{T2, N}) where {T1, T2, N}
132+
*(promote(a, b)...)
133+
end
134+
@inline function /(a::TaylorScalar{T1, N}, b::TaylorScalar{T2, N}) where {T1, T2, N}
135+
*(promote(a, b)...)
136+
end
111137

112138
@generated function ^(t::TaylorScalar{T, N}, n::S) where {S <: Number, T, N}
113139
ex = quote

src/scalar.jl

Lines changed: 5 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
import Base: zero, one, adjoint, conj, transpose
2-
import Base: +, -, *, /
31
import Base: convert, promote_rule
42

53
export TaylorScalar
@@ -60,20 +58,13 @@ end
6058
@inline extract_derivative(r, i::Integer) = false
6159
@inline primal(t::TaylorScalar) = extract_derivative(t, 1)
6260

63-
@inline zero(::Type{TaylorScalar{T, N}}) where {T, N} = TaylorScalar{T, N}(zero(T))
64-
@inline one(::Type{TaylorScalar{T, N}}) where {T, N} = TaylorScalar{T, N}(one(T))
65-
@inline zero(::TaylorScalar{T, N}) where {T, N} = zero(TaylorScalar{T, N})
66-
@inline one(::TaylorScalar{T, N}) where {T, N} = one(TaylorScalar{T, N})
67-
68-
adjoint(t::TaylorScalar) = t
69-
conj(t::TaylorScalar) = t
70-
7161
function promote_rule(::Type{TaylorScalar{T, N}},
7262
::Type{S}) where {T, S, N}
7363
TaylorScalar{promote_type(T, S), N}
7464
end
75-
function promote_rule(::Type{TaylorScalar{T1, N}}, ::Type{TaylorScalar{T2,N}}) where {T1, T2, N}
76-
TaylorScalar{promote_type(T1,T2), N}
65+
function promote_rule(::Type{TaylorScalar{T1, N}},
66+
::Type{TaylorScalar{T2, N}}) where {T1, T2, N}
67+
TaylorScalar{promote_type(T1, T2), N}
7768
end
7869

7970
# Number-like convention (I patched them after removing <: Number)
@@ -82,17 +73,6 @@ convert(::Type{TaylorScalar{T, N}}, x::TaylorScalar{T, N}) where {T, N} = x
8273
function convert(::Type{TaylorScalar{T, N}}, x::S) where {T, S, N}
8374
TaylorScalar{T, N}(convert(T, x))
8475
end
85-
function convert(::Type{TaylorScalar{T1,N}},x::TaylorScalar{T2,N}) where {T1,T2,N}
86-
TaylorScalar{T1,N}(convert.(T1,value(x)))
76+
function convert(::Type{TaylorScalar{T1, N}}, x::TaylorScalar{T2, N}) where {T1, T2, N}
77+
TaylorScalar{T1, N}(convert.(T1, value(x)))
8778
end
88-
@inline +(a::Number, b::TaylorScalar) = TaylorScalar((a + value(b)[1]), value(b)[2:end]...)
89-
@inline -(a::Number, b::TaylorScalar) = TaylorScalar((a - value(b)[1]), .-value(b)[2:end]...)
90-
@inline *(a::Number, b::TaylorScalar) = TaylorScalar((a .* value(b))...)
91-
@inline /(a::Number, b::TaylorScalar) = /(promote(a, b)...)
92-
93-
@inline +(a::TaylorScalar, b::Number) = TaylorScalar((value(a)[1] + b), value(a)[2:end]...)
94-
@inline -(a::TaylorScalar, b::Number) = TaylorScalar((value(a)[1] - b), value(a)[2:end]...)
95-
@inline *(a::TaylorScalar, b::Number) = TaylorScalar((value(a) .* b)...)
96-
@inline /(a::TaylorScalar, b::Number) = TaylorScalar((value(a) ./ b)...)
97-
98-
transpose(t::TaylorScalar) = t

0 commit comments

Comments
 (0)