@@ -257,13 +257,21 @@ z45, delta45 = frule_via_ad(DiffractorRuleConfig(), (0,1), x -> log(exp(x)), 2)
257
257
@test tup_adj[2 ] ≈ [0.6666666666666666 0.5 0.4 ]
258
258
@test tup_adj[2 ] isa Transpose
259
259
@test gradient (x -> sum (atan .(x, (1 ,2 ,3 ))), Diagonal ([4 ,5 ,6 ]))[1 ] isa Diagonal
260
+
261
+ @test gradient (x -> sum ((y -> (x* y)). ([1 ,2 ,3 ])), 4.0 ) == (6.0 ,) # closure
260
262
end
261
263
262
264
@testset " broadcast, 2nd order" begin
265
+ @test gradient (x -> sum (gradient (x -> sum (x .^ 2 .+ x' ), x)[1 ]), [1 ,2 ,3.0 ])[1 ] == [6 ,6 ,6 ]
266
+ @test gradient (x -> sum (gradient (x -> sum ((x .+ 1 ) .* x .- x), x)[1 ]), [1 ,2 ,3.0 ])[1 ] == [2 ,2 ,2 ]
267
+ @test_broken gradient (x -> sum (gradient (x -> sum (x .* x ./ 2 ), x)[1 ]), [1 ,2 ,3.0 ])[1 ] == [1 ,1 ,1 ]
268
+
263
269
@test_broken gradient (x -> sum (gradient (x -> sum (exp .(x)), x)[1 ]), [1 ,2 ,3 ])[1 ] ≈ exp .(1 : 3 ) # MethodError: no method matching copy(::Nothing)
264
- @test_broken gradient (x -> sum (gradient (x -> sum (exp .(x)), x)[1 ]), [1 ,2 ,3.0 ])[1 ] ≈ exp .( 1 : 3 )
270
+ @test_broken gradient (x -> sum (gradient (x -> sum (atan .(x, x ' )), x)[1 ]), [1 ,2 ,3.0 ])[1 ] ≈ [ 0 , 0 , 0 ]
265
271
@test_broken gradient (x -> sum (gradient (x -> sum (transpose (x) .* x), x)[1 ]), [1 ,2 ,3 ]) == ([6 ,6 ,6 ],) # ERROR: (1, current_logger_for_env(std_level::Base.CoreLogging.LogLevel, group, _module) @ Base.CoreLogging logging.jl:500, :($(Expr(:meta, :noinline))))
266
272
@test_broken gradient (x -> sum (gradient (x -> sum (transpose (x) ./ x.^ 2 ), x)[1 ]), [1 ,2 ,3 ])[1 ] ≈ [27.675925925925927 , - 0.824074074074074 , - 2.1018518518518516 ]
273
+
274
+ @test_broken gradient (z -> gradient (x -> sum ((y -> (x^ 2 * y)). ([1 ,2 ,3 ])), z)[1 ], 5.0 ) == (12.0 ,)
267
275
end
268
276
269
277
# Higher order control flow not yet supported (https://github.com/JuliaDiff/Diffractor.jl/issues/24)
0 commit comments