|
55 | 55 |
|
56 | 56 | function seed!(duals::AbstractArray{Dual{T,V,N}}, x, |
57 | 57 | seed::Partials{N,V} = zero(Partials{N,V})) where {T,V,N} |
58 | | - for i in eachindex(duals) |
59 | | - duals[i] = Dual{T,V,N}(x[i], seed) |
60 | | - end |
| 58 | + duals .= Dual{T,V,N}.(x, Ref(seed)) |
61 | 59 | return duals |
62 | 60 | end |
63 | 61 |
|
64 | 62 | function seed!(duals::AbstractArray{Dual{T,V,N}}, x, |
65 | 63 | seeds::NTuple{N,Partials{N,V}}) where {T,V,N} |
66 | | - for i in 1:N |
67 | | - duals[i] = Dual{T,V,N}(x[i], seeds[i]) |
68 | | - end |
| 64 | + dual_inds = 1:N |
| 65 | + duals[dual_inds] .= Dual{T,V,N}.(view(x,dual_inds), seeds) |
69 | 66 | return duals |
70 | 67 | end |
71 | 68 |
|
72 | 69 | function seed!(duals::AbstractArray{Dual{T,V,N}}, x, index, |
73 | 70 | seed::Partials{N,V} = zero(Partials{N,V})) where {T,V,N} |
74 | 71 | offset = index - 1 |
75 | | - for i in 1:N |
76 | | - j = i + offset |
77 | | - duals[j] = Dual{T,V,N}(x[j], seed) |
78 | | - end |
| 72 | + dual_inds = (1:N) .+ offset |
| 73 | + duals[dual_inds] .= Dual{T,V,N}.(view(x, dual_inds), Ref(seed)) |
79 | 74 | return duals |
80 | 75 | end |
81 | 76 |
|
82 | 77 | function seed!(duals::AbstractArray{Dual{T,V,N}}, x, index, |
83 | 78 | seeds::NTuple{N,Partials{N,V}}, chunksize = N) where {T,V,N} |
84 | 79 | offset = index - 1 |
85 | | - for i in 1:chunksize |
86 | | - j = i + offset |
87 | | - duals[j] = Dual{T,V,N}(x[j], seeds[i]) |
88 | | - end |
| 80 | + seed_inds = 1:chunksize |
| 81 | + dual_inds = seed_inds .+ offset |
| 82 | + duals[dual_inds] .= Dual{T,V,N}.(view(x, dual_inds), getindex.(Ref(seeds), seed_inds)) |
89 | 83 | return duals |
90 | 84 | end |
0 commit comments