-
Notifications
You must be signed in to change notification settings - Fork 32
Expand file tree
/
Copy pathmixed_mode.jl
More file actions
43 lines (33 loc) · 1.21 KB
/
mixed_mode.jl
File metadata and controls
43 lines (33 loc) · 1.21 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
"""
MixedMode
Combination of a forward and a reverse mode backend for mixed-mode sparse Jacobian computation.
!!! danger
`MixedMode` backends only support [`jacobian`](@ref) and its variants, and it should be used inside an [`AutoSparse`](@extref ADTypes.AutoSparse) wrapper.
# Constructor
MixedMode(forward_backend, reverse_backend)
"""
struct MixedMode{F<:AbstractADType,R<:AbstractADType} <: AbstractADType
forward::F
reverse::R
function MixedMode(forward::AbstractADType, reverse::AbstractADType)
@assert pushforward_performance(forward) isa PushforwardFast
@assert pullback_performance(reverse) isa PullbackFast
return new{typeof(forward),typeof(reverse)}(forward, reverse)
end
end
"""
forward_backend(m::MixedMode)
Return the forward-mode part of a `MixedMode` backend.
"""
forward_backend(m::MixedMode) = m.forward
"""
reverse_backend(m::MixedMode)
Return the reverse-mode part of a `MixedMode` backend.
"""
reverse_backend(m::MixedMode) = m.reverse
"""
ForwardAndReverseMode <: ADTypes.AbstractMode
Appropriate mode type for `MixedMode` backends.
"""
struct ForwardAndReverseMode <: ADTypes.AbstractMode end
ADTypes.mode(::MixedMode) = ForwardAndReverseMode()