@@ -167,114 +167,136 @@ public func ldexp(_ x: ${T}, _ n : Int) -> ${T} {
167
167
% if T == 'Float80 ':
168
168
#if !(os(Windows) || os(Android)) && (arch(i386) || arch(x86_64))
169
169
% end
170
- @usableFromInline
171
- func _vjpExp( _ x: ${ T} ) - > ( ${ T} , ( ${ T} ) - > ${ T} ) {
170
+ @inlinable
171
+ @derivative ( of: exp)
172
+ func _vjpExp( _ x: ${ T} ) - > ( value: ${ T} , pullback: ( ${ T} ) - > ${ T} ) {
172
173
let value = exp ( x)
173
174
return ( value, { v in value * v } )
174
175
}
175
176
176
- @usableFromInline
177
- func _vjpExp2 ( _ x: ${ T} ) - > ( ${ T} , ( ${ T} ) - > ${ T} ) {
177
+ @inlinable
178
+ @derivative ( of: exp2)
179
+ func _vjpExp2 ( _ x: ${ T} ) - > ( value: ${ T} , pullback: ( ${ T} ) - > ${ T} ) {
178
180
let value = exp2 ( x)
179
181
return ( value, { v in v * ${ T} ( M_LN2) * value } )
180
182
}
181
183
182
- @usableFromInline
183
- func _vjpLog( _ x: ${ T} ) -> ( ${ T} , ( ${ T} ) -> ${ T} ) {
184
+ @inlinable
185
+ @derivative ( of: log)
186
+ func _vjpLog( _ x: ${ T} ) -> ( value: ${ T} , pullback: ( ${ T} ) -> ${ T} ) {
184
187
return ( log( x ) , { v in v / x } )
185
188
}
186
189
187
- @usableFromInline
188
- func _vjpLog10( _ x: ${ T} ) -> ( ${ T} , ( ${ T} ) -> ${ T} ) {
190
+ @inlinable
191
+ @derivative ( of: log10)
192
+ func _vjpLog10( _ x: ${ T} ) -> ( value: ${ T} , pullback: ( ${ T} ) -> ${ T} ) {
189
193
return ( log10( x ) , { v in v * ${ T} ( M_LOG10E ) / x } )
190
194
}
191
195
192
- @usableFromInline
193
- func _vjpLog2( _ x: ${ T} ) -> ( ${ T} , ( ${ T} ) -> ${ T} ) {
196
+ @inlinable
197
+ @derivative ( of: log2)
198
+ func _vjpLog2 ( _ x: ${ T} ) -> ( value: ${ T} , pullback: ( ${ T} ) -> ${ T} ) {
194
199
return ( log2( x ) , { v in v / ( ${ T} ( M_LN2 ) * x) } )
195
200
}
196
201
197
- @usableFromInline
198
- func _vjpSin( _ x: ${ T} ) -> ( ${ T} , ( ${ T} ) -> ${ T} ) {
202
+ @inlinable
203
+ @derivative ( of: sin)
204
+ func _vjpSin( _ x: ${ T} ) -> ( value: ${ T} , pullback: ( ${ T} ) -> ${ T} ) {
199
205
return ( sin( x ) , { v in v * cos( x ) } )
200
206
}
201
207
202
- @usableFromInline
203
- func _vjpCos( _ x: ${ T} ) -> ( ${ T} , ( ${ T} ) -> ${ T} ) {
208
+ @inlinable
209
+ @derivative ( of: cos)
210
+ func _vjpCos( _ x: ${ T} ) -> ( value: ${ T} , pullback: ( ${ T} ) -> ${ T} ) {
204
211
return ( cos( x ) , { v in - v * sin( x ) } )
205
212
}
206
213
207
- @usableFromInline
208
- func _vjpTan( _ x: ${ T} ) -> ( ${ T} , ( ${ T} ) -> ${ T} ) {
214
+ @inlinable
215
+ @derivative ( of: tan)
216
+ func _vjpTan( _ x: ${ T} ) -> ( value: ${ T} , pullback: ( ${ T} ) -> ${ T} ) {
209
217
let value = tan( x )
210
218
return ( value , { v in v * ( 1 + value * value) } )
211
219
}
212
220
213
- @usableFromInline
214
- func _vjpAsin( _ x: ${ T} ) -> ( ${ T} , ( ${ T} ) -> ${ T} ) {
221
+ @inlinable
222
+ @derivative ( of: asin)
223
+ func _vjpAsin( _ x: ${ T} ) -> ( value: ${ T} , pullback: ( ${ T} ) -> ${ T} ) {
215
224
return ( asin( x ) , { v in v / sqrt( 1 - x * x) } )
216
225
}
217
226
218
- @usableFromInline
219
- func _vjpAcos( _ x: ${ T} ) -> ( ${ T} , ( ${ T} ) -> ${ T} ) {
227
+ @inlinable
228
+ @derivative ( of: acos)
229
+ func _vjpAcos( _ x: ${ T} ) -> ( value: ${ T} , pullback: ( ${ T} ) -> ${ T} ) {
220
230
return ( acos( x ) , { v in - v / sqrt( 1 - x * x) } )
221
231
}
222
232
223
- @usableFromInline
224
- func _vjpAtan( _ x: ${ T} ) -> ( ${ T} , ( ${ T} ) -> ${ T} ) {
233
+ @inlinable
234
+ @derivative ( of: atan)
235
+ func _vjpAtan( _ x: ${ T} ) -> ( value: ${ T} , pullback: ( ${ T} ) -> ${ T} ) {
225
236
return ( atan( x ) , { v in v / ( 1 + x * x) } )
226
237
}
227
238
228
- @usableFromInline
229
- func _vjpSinh( _ x: ${ T} ) -> ( ${ T} , ( ${ T} ) -> ${ T} ) {
239
+ @inlinable
240
+ @derivative ( of: sinh)
241
+ func _vjpSinh( _ x: ${ T} ) -> ( value: ${ T} , pullback: ( ${ T} ) -> ${ T} ) {
230
242
return ( sinh( x ) , { v in v * cosh( x ) } )
231
243
}
232
244
233
- @usableFromInline
234
- func _vjpCosh( _ x: ${ T} ) -> ( ${ T} , ( ${ T} ) -> ${ T} ) {
245
+ @inlinable
246
+ @derivative ( of: cosh)
247
+ func _vjpCosh( _ x: ${ T} ) -> ( value: ${ T} , pullback: ( ${ T} ) -> ${ T} ) {
235
248
return ( cosh( x ) , { v in v * sinh( x ) } )
236
249
}
237
250
238
- @usableFromInline
239
- func _vjpTanh( _ x: ${ T} ) -> ( ${ T} , ( ${ T} ) -> ${ T} ) {
251
+ @inlinable
252
+ @derivative ( of: tanh)
253
+ func _vjpTanh( _ x: ${ T} ) -> ( value: ${ T} , pullback: ( ${ T} ) -> ${ T} ) {
240
254
let value = tanh( x )
241
255
return ( value , { v in v * ( 1 - value * value) } )
242
256
}
243
257
244
- @usableFromInline
245
- func _vjpAsinh( _ x: ${ T} ) -> ( ${ T} , ( ${ T} ) -> ${ T} ) {
258
+ @inlinable
259
+ @derivative ( of: asinh)
260
+ func _vjpAsinh( _ x: ${ T} ) -> ( value: ${ T} , pullback: ( ${ T} ) -> ${ T} ) {
246
261
return ( asinh( x ) , { v in v / sqrt( 1 + x * x) } )
247
262
}
248
263
249
- @usableFromInline
250
- func _vjpAcosh( _ x: ${ T} ) -> ( ${ T} , ( ${ T} ) -> ${ T} ) {
264
+ @inlinable
265
+ @derivative ( of: acosh)
266
+ func _vjpAcosh( _ x: ${ T} ) -> ( value: ${ T} , pullback: ( ${ T} ) -> ${ T} ) {
251
267
return ( acosh( x ) , { v in v / sqrt( x * x - 1 ) } )
252
268
}
253
269
254
- @usableFromInline
255
- func _vjpAtanh( _ x: ${ T} ) -> ( ${ T} , ( ${ T} ) -> ${ T} ) {
270
+ @inlinable
271
+ @derivative ( of: atanh)
272
+ func _vjpAtanh( _ x: ${ T} ) -> ( value: ${ T} , pullback: ( ${ T} ) -> ${ T} ) {
256
273
return ( atanh( x ) , { v in v / ( 1 - x * x) } )
257
274
}
258
275
259
- @usableFromInline
260
- func _vjpExpm1( _ x: ${ T} ) -> ( ${ T} , ( ${ T} ) -> ${ T} ) {
276
+ @inlinable
277
+ @derivative ( of: expm1)
278
+ func _vjpExpm1 ( _ x: ${ T} ) -> ( value: ${ T} , pullback: ( ${ T} ) -> ${ T} ) {
261
279
return ( expm1( x ) , { v in exp( x ) * v } )
262
280
}
263
281
264
- @usableFromInline
265
- func _vjpLog1p( _ x: ${ T} ) -> ( ${ T} , ( ${ T} ) -> ${ T} ) {
282
+ @inlinable
283
+ @derivative ( of: log1p)
284
+ func _vjpLog1 p( _ x: ${ T} ) -> ( value: ${ T} , pullback: ( ${ T} ) -> ${ T} ) {
266
285
return ( log1p( x ) , { v in v / ( x + 1 ) } )
267
286
}
268
287
269
- @usableFromInline
270
- func _vjpErf( _ x: ${ T} ) -> ( ${ T} , ( ${ T} ) -> ${ T} ) {
288
+ @inlinable
289
+ @derivative ( of: erf)
290
+ func _vjpErf( _ x: ${ T} ) -> ( value: ${ T} , pullback: ( ${ T} ) -> ${ T} ) {
271
291
return ( erf( x ) , { v in v * ${ T} ( M_2_SQRTPI ) * exp( - x * x) } )
272
292
}
273
293
274
- @usableFromInline
275
- func _vjpErfc( _ x: ${ T} ) -> ( ${ T} , ( ${ T} ) -> ${ T} ) {
294
+ @inlinable
295
+ @derivative ( of: erfc)
296
+ func _vjpErfc( _ x: ${ T} ) -> ( value: ${ T} , pullback: ( ${ T} ) -> ${ T} ) {
276
297
return ( erfc( x ) , { v in v * - ${ T} ( M_2_SQRTPI ) * exp( - x * x) } )
277
298
}
299
+
278
300
// SWIFT_ENABLE_TENSORFLOW END
279
301
% if T == 'Float80 ':
280
302
#endif
@@ -398,7 +420,7 @@ def TypedBinaryFunctions():
398
420
@_transparent
399
421
// SWIFT_ENABLE_TENSORFLOW
400
422
% if ufunc in HasVJP:
401
- @differentiable( vjp : _vjp$ { u func . capitalize ( ) } ( _ : ) )
423
+ @differentiable
402
424
% end
403
425
public func ${ ufunc} ( _ x: ${ T} ) - > ${ T} {
404
426
return ${ T} . ${ ufunc} ( x)
@@ -452,7 +474,7 @@ public func tgamma(_ x: Float80) -> Float80 {
452
474
@_transparent
453
475
// SWIFT_ENABLE_TENSORFLOW
454
476
% if ufunc in HasVJP:
455
- @differentiable( vjp : _vjp $ { ufunc . capitalize ( ) } ( _ : ) )
477
+ @differentiable
456
478
% end
457
479
public func ${ ufunc} ( _ x: ${ T} ) - > ${ T} {
458
480
return ${ T} . ${ ufunc} ( x)
@@ -462,7 +484,7 @@ public func ${ufunc}(_ x: ${T}) -> ${T} {
462
484
@_transparent
463
485
// SWIFT_ENABLE_TENSORFLOW
464
486
% if ufunc in HasVJP:
465
- @differentiable ( vjp : _vjp $ { ufunc . capitalize ( ) } ( _ : ) )
487
+ @differentiable
466
488
% end
467
489
public func ${ ufunc} ( _ x: ${ T} ) - > ${ T} {
468
490
return x. rounded ( . toNearestOrEven)
0 commit comments