@@ -305,44 +305,56 @@ function DI.value_and_gradient!(
305305 f:: F ,
306306 grad,
307307 prep:: ForwardDiffGradientPrep ,
308- :: AutoForwardDiff ,
308+ backend :: AutoForwardDiff ,
309309 x,
310310 contexts:: Vararg{Constant,C} ,
311311) where {F,C}
312312 fc = with_contexts (f, contexts... )
313313 result = DiffResult (zero (eltype (x)), (grad,))
314- result = gradient! (result, fc, x, prep. config)
314+ CHK = tag_type (backend) === Nothing
315+ result = gradient! (result, fc, x, prep. config, Val (CHK))
315316 y = DR. value (result)
316317 grad === DR. gradient (result) || copyto! (grad, DR. gradient (result))
317318 return y, grad
318319end
319320
320321function DI. value_and_gradient (
321- f:: F , prep:: ForwardDiffGradientPrep , :: AutoForwardDiff , x, contexts:: Vararg{Constant,C}
322+ f:: F ,
323+ prep:: ForwardDiffGradientPrep ,
324+ backend:: AutoForwardDiff ,
325+ x,
326+ contexts:: Vararg{Constant,C} ,
322327) where {F,C}
323328 fc = with_contexts (f, contexts... )
324329 result = GradientResult (x)
325- result = gradient! (result, fc, x, prep. config)
330+ CHK = tag_type (backend) === Nothing
331+ result = gradient! (result, fc, x, prep. config, Val (CHK))
326332 return DR. value (result), DR. gradient (result)
327333end
328334
329335function DI. gradient! (
330336 f:: F ,
331337 grad,
332338 prep:: ForwardDiffGradientPrep ,
333- :: AutoForwardDiff ,
339+ backend :: AutoForwardDiff ,
334340 x,
335341 contexts:: Vararg{Constant,C} ,
336342) where {F,C}
337343 fc = with_contexts (f, contexts... )
338- return gradient! (grad, fc, x, prep. config)
344+ CHK = tag_type (backend) === Nothing
345+ return gradient! (grad, fc, x, prep. config, Val (CHK))
339346end
340347
341348function DI. gradient (
342- f:: F , prep:: ForwardDiffGradientPrep , :: AutoForwardDiff , x, contexts:: Vararg{Constant,C}
349+ f:: F ,
350+ prep:: ForwardDiffGradientPrep ,
351+ backend:: AutoForwardDiff ,
352+ x,
353+ contexts:: Vararg{Constant,C} ,
343354) where {F,C}
344355 fc = with_contexts (f, contexts... )
345- return gradient (fc, x, prep. config)
356+ CHK = tag_type (backend) === Nothing
357+ return gradient (fc, x, prep. config, Val (CHK))
346358end
347359
348360# # Jacobian
@@ -422,14 +434,15 @@ function DI.value_and_jacobian!(
422434 f:: F ,
423435 jac,
424436 prep:: ForwardDiffOneArgJacobianPrep ,
425- :: AutoForwardDiff ,
437+ backend :: AutoForwardDiff ,
426438 x,
427439 contexts:: Vararg{Constant,C} ,
428440) where {F,C}
429441 fc = with_contexts (f, contexts... )
430442 y = fc (x)
431443 result = DiffResult (y, (jac,))
432- result = jacobian! (result, fc, x, prep. config)
444+ CHK = tag_type (backend) === Nothing
445+ result = jacobian! (result, fc, x, prep. config, Val (CHK))
433446 y = DR. value (result)
434447 jac === DR. jacobian (result) || copyto! (jac, DR. jacobian (result))
435448 return y, jac
@@ -438,35 +451,38 @@ end
438451function DI. value_and_jacobian (
439452 f:: F ,
440453 prep:: ForwardDiffOneArgJacobianPrep ,
441- :: AutoForwardDiff ,
454+ backend :: AutoForwardDiff ,
442455 x,
443456 contexts:: Vararg{Constant,C} ,
444457) where {F,C}
445458 fc = with_contexts (f, contexts... )
446- return fc (x), jacobian (fc, x, prep. config)
459+ CHK = tag_type (backend) === Nothing
460+ return fc (x), jacobian (fc, x, prep. config, Val (CHK))
447461end
448462
449463function DI. jacobian! (
450464 f:: F ,
451465 jac,
452466 prep:: ForwardDiffOneArgJacobianPrep ,
453- :: AutoForwardDiff ,
467+ backend :: AutoForwardDiff ,
454468 x,
455469 contexts:: Vararg{Constant,C} ,
456470) where {F,C}
457471 fc = with_contexts (f, contexts... )
458- return jacobian! (jac, fc, x, prep. config)
472+ CHK = tag_type (backend) === Nothing
473+ return jacobian! (jac, fc, x, prep. config, Val (CHK))
459474end
460475
461476function DI. jacobian (
462477 f:: F ,
463478 prep:: ForwardDiffOneArgJacobianPrep ,
464- :: AutoForwardDiff ,
479+ backend :: AutoForwardDiff ,
465480 x,
466481 contexts:: Vararg{Constant,C} ,
467482) where {F,C}
468483 fc = with_contexts (f, contexts... )
469- return jacobian (fc, x, prep. config)
484+ CHK = tag_type (backend) === Nothing
485+ return jacobian (fc, x, prep. config, Val (CHK))
470486end
471487
472488# # Second derivative
@@ -681,44 +697,56 @@ function DI.hessian!(
681697 f:: F ,
682698 hess,
683699 prep:: ForwardDiffHessianPrep ,
684- :: AutoForwardDiff ,
700+ backend :: AutoForwardDiff ,
685701 x,
686702 contexts:: Vararg{Constant,C} ,
687703) where {F,C}
688704 fc = with_contexts (f, contexts... )
689- return hessian! (hess, fc, x, prep. array_config)
705+ CHK = tag_type (backend) === Nothing
706+ return hessian! (hess, fc, x, prep. array_config, Val (CHK))
690707end
691708
692709function DI. hessian (
693- f:: F , prep:: ForwardDiffHessianPrep , :: AutoForwardDiff , x, contexts:: Vararg{Constant,C}
710+ f:: F ,
711+ prep:: ForwardDiffHessianPrep ,
712+ backend:: AutoForwardDiff ,
713+ x,
714+ contexts:: Vararg{Constant,C} ,
694715) where {F,C}
695716 fc = with_contexts (f, contexts... )
696- return hessian (fc, x, prep. array_config)
717+ CHK = tag_type (backend) === Nothing
718+ return hessian (fc, x, prep. array_config, Val (CHK))
697719end
698720
699721function DI. value_gradient_and_hessian! (
700722 f:: F ,
701723 grad,
702724 hess,
703725 prep:: ForwardDiffHessianPrep ,
704- :: AutoForwardDiff ,
726+ backend :: AutoForwardDiff ,
705727 x,
706728 contexts:: Vararg{Constant,C} ,
707729) where {F,C}
708730 fc = with_contexts (f, contexts... )
709731 result = DiffResult (one (eltype (x)), (grad, hess))
710- result = hessian! (result, fc, x, prep. result_config)
732+ CHK = tag_type (backend) === Nothing
733+ result = hessian! (result, fc, x, prep. result_config, Val (CHK))
711734 y = DR. value (result)
712735 grad === DR. gradient (result) || copyto! (grad, DR. gradient (result))
713736 hess === DR. hessian (result) || copyto! (hess, DR. hessian (result))
714737 return (y, grad, hess)
715738end
716739
717740function DI. value_gradient_and_hessian (
718- f:: F , prep:: ForwardDiffHessianPrep , :: AutoForwardDiff , x, contexts:: Vararg{Constant,C}
741+ f:: F ,
742+ prep:: ForwardDiffHessianPrep ,
743+ backend:: AutoForwardDiff ,
744+ x,
745+ contexts:: Vararg{Constant,C} ,
719746) where {F,C}
720747 fc = with_contexts (f, contexts... )
721748 result = HessianResult (x)
722- result = hessian! (result, fc, x, prep. result_config)
749+ CHK = tag_type (backend) === Nothing
750+ result = hessian! (result, fc, x, prep. result_config, Val (CHK))
723751 return (DR. value (result), DR. gradient (result), DR. hessian (result))
724752end
0 commit comments