|
72 | 72 |
|
73 | 73 | ## One argument
|
74 | 74 |
|
| 75 | +function value_and_derivative(f::F, backend::AbstractADType, x) where {F} |
| 76 | + return value_and_derivative(f, backend, x, prepare_derivative(f, backend, x)) |
| 77 | +end |
| 78 | + |
| 79 | +function value_and_derivative!(f::F, der, backend::AbstractADType, x) where {F} |
| 80 | + return value_and_derivative!(f, der, backend, x, prepare_derivative(f, backend, x)) |
| 81 | +end |
| 82 | + |
| 83 | +function derivative(f::F, backend::AbstractADType, x) where {F} |
| 84 | + return derivative(f, backend, x, prepare_derivative(f, backend, x)) |
| 85 | +end |
| 86 | + |
| 87 | +function derivative!(f::F, der, backend::AbstractADType, x) where {F} |
| 88 | + return derivative!(f, der, backend, x, prepare_derivative(f, backend, x)) |
| 89 | +end |
| 90 | + |
75 | 91 | function value_and_derivative(
|
76 |
| - f::F, |
77 |
| - backend::AbstractADType, |
78 |
| - x, |
79 |
| - extras::DerivativeExtras=prepare_derivative(f, backend, x), |
| 92 | + f::F, backend::AbstractADType, x, extras::PushforwardDerivativeExtras |
80 | 93 | ) where {F}
|
81 | 94 | return value_and_pushforward(f, backend, x, one(x), extras.pushforward_extras)
|
82 | 95 | end
|
83 | 96 |
|
84 | 97 | function value_and_derivative!(
|
85 |
| - f::F, |
86 |
| - der, |
87 |
| - backend::AbstractADType, |
88 |
| - x, |
89 |
| - extras::DerivativeExtras=prepare_derivative(f, backend, x), |
| 98 | + f::F, der, backend::AbstractADType, x, extras::PushforwardDerivativeExtras |
90 | 99 | ) where {F}
|
91 | 100 | return value_and_pushforward!(f, der, backend, x, one(x), extras.pushforward_extras)
|
92 | 101 | end
|
93 | 102 |
|
94 | 103 | function derivative(
|
95 |
| - f::F, |
96 |
| - backend::AbstractADType, |
97 |
| - x, |
98 |
| - extras::DerivativeExtras=prepare_derivative(f, backend, x), |
| 104 | + f::F, backend::AbstractADType, x, extras::PushforwardDerivativeExtras |
99 | 105 | ) where {F}
|
100 | 106 | return pushforward(f, backend, x, one(x), extras.pushforward_extras)
|
101 | 107 | end
|
102 | 108 |
|
103 | 109 | function derivative!(
|
104 |
| - f::F, |
105 |
| - der, |
106 |
| - backend::AbstractADType, |
107 |
| - x, |
108 |
| - extras::DerivativeExtras=prepare_derivative(f, backend, x), |
| 110 | + f::F, der, backend::AbstractADType, x, extras::PushforwardDerivativeExtras |
109 | 111 | ) where {F}
|
110 | 112 | return pushforward!(f, der, backend, x, one(x), extras.pushforward_extras)
|
111 | 113 | end
|
112 | 114 |
|
113 | 115 | ## Two arguments
|
114 | 116 |
|
| 117 | +function value_and_derivative(f!::F, y, backend::AbstractADType, x) where {F} |
| 118 | + return value_and_derivative(f!, y, backend, x, prepare_derivative(f!, y, backend, x)) |
| 119 | +end |
| 120 | + |
| 121 | +function value_and_derivative!(f!::F, y, der, backend::AbstractADType, x) where {F} |
| 122 | + return value_and_derivative!( |
| 123 | + f!, y, der, backend, x, prepare_derivative(f!, y, backend, x) |
| 124 | + ) |
| 125 | +end |
| 126 | + |
| 127 | +function derivative(f!::F, y, backend::AbstractADType, x) where {F} |
| 128 | + return derivative(f!, y, backend, x, prepare_derivative(f!, y, backend, x)) |
| 129 | +end |
| 130 | + |
| 131 | +function derivative!(f!::F, y, der, backend::AbstractADType, x) where {F} |
| 132 | + return derivative!(f!, y, der, backend, x, prepare_derivative(f!, y, backend, x)) |
| 133 | +end |
| 134 | + |
115 | 135 | function value_and_derivative(
|
116 |
| - f!::F, |
117 |
| - y, |
118 |
| - backend::AbstractADType, |
119 |
| - x, |
120 |
| - extras::DerivativeExtras=prepare_derivative(f!, y, backend, x), |
| 136 | + f!::F, y, backend::AbstractADType, x, extras::PushforwardDerivativeExtras |
121 | 137 | ) where {F}
|
122 | 138 | return value_and_pushforward(f!, y, backend, x, one(x), extras.pushforward_extras)
|
123 | 139 | end
|
124 | 140 |
|
125 | 141 | function value_and_derivative!(
|
126 |
| - f!::F, |
127 |
| - y, |
128 |
| - der, |
129 |
| - backend::AbstractADType, |
130 |
| - x, |
131 |
| - extras::DerivativeExtras=prepare_derivative(f!, y, backend, x), |
| 142 | + f!::F, y, der, backend::AbstractADType, x, extras::PushforwardDerivativeExtras |
132 | 143 | ) where {F}
|
133 | 144 | return value_and_pushforward!(f!, y, der, backend, x, one(x), extras.pushforward_extras)
|
134 | 145 | end
|
135 | 146 |
|
136 | 147 | function derivative(
|
137 |
| - f!::F, |
138 |
| - y, |
139 |
| - backend::AbstractADType, |
140 |
| - x, |
141 |
| - extras::DerivativeExtras=prepare_derivative(f!, y, backend, x), |
| 148 | + f!::F, y, backend::AbstractADType, x, extras::PushforwardDerivativeExtras |
142 | 149 | ) where {F}
|
143 | 150 | return pushforward(f!, y, backend, x, one(x), extras.pushforward_extras)
|
144 | 151 | end
|
145 | 152 |
|
146 | 153 | function derivative!(
|
147 |
| - f!::F, |
148 |
| - y, |
149 |
| - der, |
150 |
| - backend::AbstractADType, |
151 |
| - x, |
152 |
| - extras::DerivativeExtras=prepare_derivative(f!, y, backend, x), |
| 154 | + f!::F, y, der, backend::AbstractADType, x, extras::PushforwardDerivativeExtras |
153 | 155 | ) where {F}
|
154 | 156 | return pushforward!(f!, y, der, backend, x, one(x), extras.pushforward_extras)
|
155 | 157 | end
|
0 commit comments