|
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