11struct EnzymeReverseADJacobian <: ADBackend end
22struct EnzymeReverseADHessian <: ADBackend end
33
4- struct EnzymeReverseADGradient <: ADNLPModels.ADBackend end
4+ struct EnzymeReverseADGradient <: InPlaceADbackend end
55
66function EnzymeReverseADGradient(
77 nvar:: Integer ,
1616
1717function ADNLPModels. gradient(:: EnzymeReverseADGradient , f, x)
1818 g = similar(x)
19- Enzyme. autodiff(Enzyme. Reverse, f, Enzyme. Duplicated(x, g)) # gradient!(Reverse, g, f, x)
19+ # Enzyme.autodiff(Enzyme.Reverse, Const(f), Active, Enzyme.Duplicated(x, g)) # gradient!(Reverse, g, f, x)
20+ Enzyme. gradient!(Reverse, g, Const(f), x)
2021 return g
2122end
2223
2324function ADNLPModels. gradient!(:: EnzymeReverseADGradient , g, f, x)
24- Enzyme. autodiff(Enzyme. Reverse, f , Enzyme. Duplicated(x, g)) # gradient!(Reverse, g, f, x)
25+ Enzyme. autodiff(Enzyme. Reverse, Const(f), Active , Enzyme. Duplicated(x, g)) # gradient!(Reverse, g, f, x)
2526 return g
2627end
2728
@@ -57,7 +58,7 @@ function hessian(::EnzymeReverseADHessian, f, x)
5758 tmp = similar(x)
5859 for i in 1 : length(x)
5960 seed[i] = one(eltype(seed))
60- Enzyme. hvp!(tmp, f , x, seed)
61+ Enzyme. hvp!(tmp, Const(f) , x, seed)
6162 hess[:, i] .= tmp
6263 seed[i] = zero(eltype(seed))
6364 end
@@ -80,9 +81,7 @@ function EnzymeReverseADJprod(
8081end
8182
8283function Jprod!(b:: EnzymeReverseADJprod , Jv, c!, x, v, :: Val )
83- @show c!(x)
84- @show Enzyme. autodiff(Enzyme. Forward, Const(c!), Duplicated(x, v))
85- error(" This is BAD" )
84+ Enzyme. autodiff(Enzyme. Forward, Const(c!), Duplicated(b. x,Jv), Duplicated(x, v))
8685 return Jv
8786end
8887
@@ -102,7 +101,7 @@ function EnzymeReverseADJtprod(
102101end
103102
104103function Jtprod!(b:: EnzymeReverseADJtprod , Jtv, c!, x, v, :: Val )
105- Enzyme. autodiff(Enzyme. Reverse, c! , Duplicated(b. x, Jtv), Enzyme. Duplicated(x, v))
104+ Enzyme. autodiff(Enzyme. Reverse, Const(c!) , Duplicated(b. x, Jtv), Enzyme. Duplicated(x, v))
106105 return Jtv
107106end
108107
@@ -126,7 +125,7 @@ function Hvprod!(b::EnzymeReverseADHvprod, Hv, x, v, f, args...)
126125 # What to do with args?
127126 Enzyme. autodiff(
128127 Forward,
129- gradient!,
128+ Const(Enzyme . gradient!) ,
130129 Const(Reverse),
131130 DuplicatedNoNeed(b. grad, Hv),
132131 Const(f),
@@ -147,7 +146,7 @@ function Hvprod!(
147146)
148147 Enzyme. autodiff(
149148 Forward,
150- gradient!,
149+ Const(Enzyme . gradient!) ,
151150 Const(Reverse),
152151 DuplicatedNoNeed(b. grad, Hv),
153152 Const(ℓ),
@@ -169,7 +168,7 @@ function Hvprod!(
169168)
170169 Enzyme. autodiff(
171170 Forward,
172- gradient!,
171+ Const(Enzyme . gradient!) ,
173172 Const(Reverse),
174173 DuplicatedNoNeed(b. grad, Hv),
175174 Const(f),
0 commit comments