|
552 | 552 | @test gradient(x -> x[].a, Ref((a=1, b=2))) == ((x = (a = 1, b = nothing),),)
|
553 | 553 | @test gradient(x -> x[1][].a, [Ref((a=1, b=2)), Ref((a=3, b=4))]) == ([(x = (a = 1, b = nothing),), nothing],)
|
554 | 554 | @test gradient(x -> x[1].a, [(a=1, b=2), "three"]) == ([(a = 1, b = nothing), nothing],)
|
| 555 | + |
| 556 | + @testset "indexing kwargs" begin |
| 557 | + inner_lit_index(; kwargs...) = kwargs[:x] |
| 558 | + outer_lit_index(; kwargs...) = inner_lit_index(; x=kwargs[:x]) |
| 559 | + |
| 560 | + inner_dyn_index(k; kwargs...) = kwargs[k] |
| 561 | + outer_dyn_index(k; kwargs...) = inner_dyn_index(k; x=kwargs[k]) |
| 562 | + |
| 563 | + @test gradient(x -> outer_lit_index(; x), 0.0) == (1.0,) |
| 564 | + @test gradient((x, k) -> outer_dyn_index(k; x), 0.0, :x) == (1.0, nothing) |
| 565 | + end |
555 | 566 | end
|
556 | 567 |
|
557 | 568 | function type_test()
|
|
562 | 573 |
|
563 | 574 | @testset "Pairs" begin
|
564 | 575 | @test (x->10*pairs((a=x, b=2))[1])'(100) === 10.0
|
565 |
| - @test (x->10*pairs((a=x, b=2))[2])'(100) === 0 |
| 576 | + @test (x->10*pairs((a=x, b=2))[2])'(100) === nothing |
566 | 577 | foo(;kw...) = 1
|
567 | 578 | @test gradient(() -> foo(a=1,b=2.0)) === ()
|
568 | 579 |
|
|
578 | 589 | @testset "kwarg splatting, pass in object" begin
|
579 | 590 | g(; kwargs...) = kwargs[:x] * kwargs[:z]
|
580 | 591 | h(somedata) = g(; somedata...)
|
581 |
| - @test gradient(h, (; x=3.0, y=4.0, z=2.3)) == ((x = 2.3, y = 0.0, z = 3.0),) |
582 |
| - @test gradient(h, Dict(:x=>3.0, :y=>4.0, :z=>2.3)) == ((y = 0.0, z = 3.0, x = 2.3),) |
| 592 | + @test gradient(h, (; x=3.0, y=4.0, z=2.3)) == ((x = 2.3, y = nothing, z = 3.0),) |
| 593 | + @test gradient(h, Dict(:x=>3.0, :y=>4.0, :z=>2.3)) == ((y = nothing, z = 3.0, x = 2.3),) |
583 | 594 | end
|
584 | 595 |
|
585 | 596 | @testset "Iterators" begin
|
|
0 commit comments