@@ -10,7 +10,7 @@ Given function `f`, an array `a` and a constant `b` (optional), return function
1010g(x) = f(x) + \\ langle a, x \\ rangle + b.
1111```
1212"""
13- struct Tilt{T, S <: AbstractArray , R <: Real }
13+ struct Tilt{T, S, R}
1414 f:: T
1515 a:: S
1616 b:: R
@@ -24,18 +24,18 @@ is_smooth(::Type{<:Tilt{T}}) where T = is_smooth(T)
2424is_generalized_quadratic (:: Type{<:Tilt{T}} ) where T = is_generalized_quadratic (T)
2525is_strongly_convex (:: Type{<:Tilt{T}} ) where T = is_strongly_convex (T)
2626
27- Tilt (f:: T , a:: S ) where {R <: Real , T, S <: AbstractArray{R} } = Tilt {T, S, R } (f, a, R (0 ))
27+ Tilt (f:: T , a:: S ) where {T, S} = Tilt {T, S, real(eltype(S)) } (f, a, real ( eltype (S)) (0 ))
2828
29- function (g:: Tilt )(x:: AbstractArray{T} ) where T <: RealOrComplex
30- return g. f (x) + dot (g. a, x) + g. b
29+ function (g:: Tilt )(x)
30+ return g. f (x) + real ( dot (g. a, x) ) + g. b
3131end
3232
33- function prox! (y:: AbstractArray{T} , g:: Tilt , x:: AbstractArray{T} , gamma= R ( 1 )) where {R <: Real , T <: RealOrComplex{R} }
33+ function prox! (y, g:: Tilt , x, gamma)
3434 v = prox! (y, g. f, x .- gamma .* g. a, gamma)
35- return v + dot (g. a, y) + g. b
35+ return v + real ( dot (g. a, y) ) + g. b
3636end
3737
38- function prox_naive (g:: Tilt , x:: AbstractArray{T} , gamma= R ( 1 )) where {R <: Real , T <: RealOrComplex{R} }
38+ function prox_naive (g:: Tilt , x, gamma)
3939 y, v = prox_naive (g. f, x .- gamma .* g. a, gamma)
40- return y, v + dot (g. a, y) + g. b
40+ return y, v + real ( dot (g. a, y) ) + g. b
4141end
0 commit comments