@@ -56,6 +56,10 @@ pub enum DiffActivity {
56
56
/// Forward Mode, Compute derivatives for this input/output and *overwrite* the shadow argument
57
57
/// with it. Drop the code which updates the original input/output for maximum performance.
58
58
DualOnly ,
59
+ /// Forward Mode, Compute derivatives for this input/output and *overwrite* the shadow argument
60
+ /// with it. Drop the code which updates the original input/output for maximum performance.
61
+ /// It expects the shadow argument to be `width` times larger than the original input/output.
62
+ DualvOnly ,
59
63
/// Reverse Mode, Compute derivatives for this &T or *T input and *add* it to the shadow argument.
60
64
Duplicated ,
61
65
/// Reverse Mode, Compute derivatives for this &T or *T input and *add* it to the shadow argument.
@@ -133,6 +137,7 @@ pub fn valid_ret_activity(mode: DiffMode, activity: DiffActivity) -> bool {
133
137
activity == DiffActivity :: Dual
134
138
|| activity == DiffActivity :: Dualv
135
139
|| activity == DiffActivity :: DualOnly
140
+ || activity == DiffActivity :: DualvOnly
136
141
|| activity == DiffActivity :: Const
137
142
}
138
143
DiffMode :: Reverse => {
@@ -155,7 +160,7 @@ pub fn valid_ty_for_activity(ty: &P<Ty>, activity: DiffActivity) -> bool {
155
160
if matches ! ( activity, Const ) {
156
161
return true ;
157
162
}
158
- if matches ! ( activity, Dual | DualOnly | Dualv ) {
163
+ if matches ! ( activity, Dual | DualOnly | Dualv | DualvOnly ) {
159
164
return true ;
160
165
}
161
166
// FIXME(ZuseZ4) We should make this more robust to also
@@ -172,7 +177,7 @@ pub fn valid_input_activity(mode: DiffMode, activity: DiffActivity) -> bool {
172
177
DiffMode :: Error => false ,
173
178
DiffMode :: Source => false ,
174
179
DiffMode :: Forward => {
175
- matches ! ( activity, Dual | DualOnly | Dualv | Const )
180
+ matches ! ( activity, Dual | DualOnly | Dualv | DualvOnly | Const )
176
181
}
177
182
DiffMode :: Reverse => {
178
183
matches ! ( activity, Active | ActiveOnly | Duplicated | DuplicatedOnly | Const )
@@ -190,6 +195,7 @@ impl Display for DiffActivity {
190
195
DiffActivity :: Dual => write ! ( f, "Dual" ) ,
191
196
DiffActivity :: Dualv => write ! ( f, "Dualv" ) ,
192
197
DiffActivity :: DualOnly => write ! ( f, "DualOnly" ) ,
198
+ DiffActivity :: DualvOnly => write ! ( f, "DualvOnly" ) ,
193
199
DiffActivity :: Duplicated => write ! ( f, "Duplicated" ) ,
194
200
DiffActivity :: DuplicatedOnly => write ! ( f, "DuplicatedOnly" ) ,
195
201
DiffActivity :: FakeActivitySize => write ! ( f, "FakeActivitySize" ) ,
@@ -222,6 +228,7 @@ impl FromStr for DiffActivity {
222
228
"Dual" => Ok ( DiffActivity :: Dual ) ,
223
229
"Dualv" => Ok ( DiffActivity :: Dualv ) ,
224
230
"DualOnly" => Ok ( DiffActivity :: DualOnly ) ,
231
+ "DualvOnly" => Ok ( DiffActivity :: DualvOnly ) ,
225
232
"Duplicated" => Ok ( DiffActivity :: Duplicated ) ,
226
233
"DuplicatedOnly" => Ok ( DiffActivity :: DuplicatedOnly ) ,
227
234
_ => Err ( ( ) ) ,
0 commit comments