@@ -36,23 +36,26 @@ The reference keyword `ref` should be a function that takes `x` (and a potential
3636
3737The operator behavior keyword `operator` should be either `:inplace` or `:outofplace` depending on what must be tested.
3838"""
39- abstract type AbstractScenario{A,O ,F,X,Y,R} end
39+ abstract type AbstractScenario{args,op ,F,X,Y,R} end
4040
41- abstract type AbstractFirstOrderScenario{A,O,F,X,Y,R} <: AbstractScenario{A,O,F,X,Y,R} end
42- abstract type AbstractSecondOrderScenario{A,O,F,X,Y,R} <: AbstractScenario{A,O,F,X,Y,R} end
41+ abstract type AbstractFirstOrderScenario{args,op,F,X,Y,R} < :
42+ AbstractScenario{args,op,F,X,Y,R} end
43+ abstract type AbstractSecondOrderScenario{args,op,F,X,Y,R} < :
44+ AbstractScenario{args,op,F,X,Y,R} end
4345
44- nbargs (:: AbstractScenario{A} ) where {A} = A
45- operator (:: AbstractScenario{A,O} ) where {A,O} = O
46+ scen_type (scenario:: AbstractScenario ) = nameof (typeof (scenario))
47+ nb_args (:: AbstractScenario{args} ) where {args} = args
48+ operator_place (:: AbstractScenario{args,op} ) where {args,op} = op
4649
4750function compatible (backend:: AbstractADType , scen:: AbstractScenario )
48- if nbargs (scen) == 2
51+ if nb_args (scen) == 2
4952 return Bool (mutation_support (backend))
5053 end
5154 return true
5255end
5356
54- function Base. string (scen:: S ) where {A,O ,F,X,Y,S<: AbstractScenario{A,O ,F,X,Y} }
55- return " $(S. name. name) {$A , $O } $(string (scen. f)) : $X -> $Y "
57+ function Base. string (scen:: S ) where {args,op ,F,X,Y,S<: AbstractScenario{args,op ,F,X,Y} }
58+ return " $(S. name. name) {$args , $op } $(string (scen. f)) : $X -> $Y "
5659end
5760
5861# # Struct definitions
6265
6366See [`AbstractScenario`](@ref) for details.
6467"""
65- struct PushforwardScenario{A,O,F,X,Y,DX,R} <: AbstractFirstOrderScenario{A,O,F,X,Y,R}
68+ struct PushforwardScenario{args,op,F,X,Y,DX,R} < :
69+ AbstractFirstOrderScenario{args,op,F,X,Y,R}
6670 " function"
6771 f:: F
6872 " input"
8084
8185See [`AbstractScenario`](@ref) for details.
8286"""
83- struct PullbackScenario{A,O ,F,X,Y,DY,R} <: AbstractFirstOrderScenario{A,O ,F,X,Y,R}
87+ struct PullbackScenario{args,op ,F,X,Y,DY,R} <: AbstractFirstOrderScenario{args,op ,F,X,Y,R}
8488 " function"
8589 f:: F
8690 " input"
98102
99103See [`AbstractScenario`](@ref) for details.
100104"""
101- struct DerivativeScenario{A,O,F,X<: Number ,Y,R} <: AbstractFirstOrderScenario{A,O,F,X,Y,R}
105+ struct DerivativeScenario{args,op,F,X<: Number ,Y,R} < :
106+ AbstractFirstOrderScenario{args,op,F,X,Y,R}
102107 " function"
103108 f:: F
104109 " input"
114119
115120See [`AbstractScenario`](@ref) for details.
116121"""
117- struct GradientScenario{A,O,F,X,Y<: Number ,R} <: AbstractFirstOrderScenario{A,O,F,X,Y,R}
122+ struct GradientScenario{args,op,F,X,Y<: Number ,R} < :
123+ AbstractFirstOrderScenario{args,op,F,X,Y,R}
118124 " function"
119125 f:: F
120126 " input"
130136
131137See [`AbstractScenario`](@ref) for details.
132138"""
133- struct JacobianScenario{A,O ,F,X<: AbstractArray ,Y<: AbstractArray ,R} < :
134- AbstractFirstOrderScenario{A,O ,F,X,Y,R}
139+ struct JacobianScenario{args,op ,F,X<: AbstractArray ,Y<: AbstractArray ,R} < :
140+ AbstractFirstOrderScenario{args,op ,F,X,Y,R}
135141 " function"
136142 f:: F
137143 " input"
147153
148154See [`AbstractScenario`](@ref) for details.
149155"""
150- struct SecondDerivativeScenario{A,O ,F,X<: Number ,Y,R} < :
151- AbstractSecondOrderScenario{A,O ,F,X,Y,R}
156+ struct SecondDerivativeScenario{args,op ,F,X<: Number ,Y,R} < :
157+ AbstractSecondOrderScenario{args,op ,F,X,Y,R}
152158 " function"
153159 f:: F
154160 " input"
164170
165171See [`AbstractScenario`](@ref) for details.
166172"""
167- struct HVPScenario{A,O,F,X,Y<: Number ,DX,R} <: AbstractSecondOrderScenario{A,O,F,X,Y,R}
173+ struct HVPScenario{args,op,F,X,Y<: Number ,DX,R} < :
174+ AbstractSecondOrderScenario{args,op,F,X,Y,R}
168175 " function"
169176 f:: F
170177 " input"
182189
183190See [`AbstractScenario`](@ref) for details.
184191"""
185- struct HessianScenario{A,O ,F,X<: AbstractArray ,Y<: Number ,R} < :
186- AbstractSecondOrderScenario{A,O ,F,X,Y,R}
192+ struct HessianScenario{args,op ,F,X<: AbstractArray ,Y<: Number ,R} < :
193+ AbstractSecondOrderScenario{args,op ,F,X,Y,R}
187194 " function"
188195 f:: F
189196 " input"
@@ -205,13 +212,13 @@ for S in (
205212)
206213 @eval begin
207214 function $S (f:: F ; x:: X , y= nothing , ref:: R = nothing , operator= :inplace ) where {F,X,R}
208- A = isnothing (y) ? 1 : 2
209- if A == 2
215+ args = isnothing (y) ? 1 : 2
216+ if args == 2
210217 f (y, x)
211218 else
212219 y = f (x)
213220 end
214- return ($ S){A ,operator,F,X,typeof (y),R}(f, x, y, ref)
221+ return ($ S){args ,operator,F,X,typeof (y),R}(f, x, y, ref)
215222 end
216223 end
217224end
@@ -221,16 +228,16 @@ for S in (:PushforwardScenario, :HVPScenario)
221228 function $S (
222229 f:: F ; x:: X , y= nothing , ref:: R = nothing , dx= nothing , operator= :inplace
223230 ) where {F,X,R}
224- A = isnothing (y) ? 1 : 2
225- if A == 2
231+ args = isnothing (y) ? 1 : 2
232+ if args == 2
226233 f (y, x)
227234 else
228235 y = f (x)
229236 end
230237 if isnothing (dx)
231238 dx = mysimilar_random (x)
232239 end
233- return ($ S){A ,operator,F,X,typeof (y),typeof (dx),R}(f, x, y, dx, ref)
240+ return ($ S){args ,operator,F,X,typeof (y),typeof (dx),R}(f, x, y, dx, ref)
234241 end
235242 end
236243end
@@ -240,16 +247,16 @@ for S in (:PullbackScenario,)
240247 function $S (
241248 f:: F ; x:: X , y= nothing , ref:: R = nothing , dy= nothing , operator= :inplace
242249 ) where {F,X,R}
243- A = isnothing (y) ? 1 : 2
244- if A == 2
250+ args = isnothing (y) ? 1 : 2
251+ if args == 2
245252 f (y, x)
246253 else
247254 y = f (x)
248255 end
249256 if isnothing (dy)
250257 dy = mysimilar_random (y)
251258 end
252- return ($ S){A ,operator,F,X,typeof (y),typeof (dy),R}(f, x, y, dy, ref)
259+ return ($ S){args ,operator,F,X,typeof (y),typeof (dy),R}(f, x, y, dy, ref)
253260 end
254261 end
255262end
0 commit comments