|
26 | 26 | @testset verbose = true "Derivative NaNs" begin |
27 | 27 | x = zeros(Float32, 2) |
28 | 28 | linear_solvers = ( |
29 | | - IterativeLinearSolver(; verbose=false), DirectLinearSolver(; verbose=false) |
| 29 | + IterativeLinearSolver(; verbose=false), # |
| 30 | + IterativeLinearSolver(; verbose=false, accept_inconsistent=true), # |
| 31 | + DirectLinearSolver(; verbose=false), # |
30 | 32 | ) |
| 33 | + function should_give_nan(linear_solver) |
| 34 | + return linear_solver isa DirectLinearSolver || !linear_solver.accept_inconsistent |
| 35 | + end |
31 | 36 |
|
32 | 37 | @testset "Infinite derivative" begin |
33 | 38 | f = x -> sqrt.(x) # nondifferentiable at 0 |
|
37 | 42 | implicit = ImplicitFunction(f, c; linear_solver) |
38 | 43 | J1 = ForwardDiff.jacobian(implicit, x) |
39 | 44 | J2 = Zygote.jacobian(implicit, x)[1] |
40 | | - @test all(isnan, J1) && eltype(J1) == Float32 |
41 | | - @test all(isnan, J2) && eltype(J2) == Float32 |
| 45 | + @test all(isnan, J1) == should_give_nan(linear_solver) |
| 46 | + @test all(isnan, J2) == should_give_nan(linear_solver) |
| 47 | + @test eltype(J1) == Float32 |
| 48 | + @test eltype(J2) == Float32 |
42 | 49 | end |
43 | 50 | end |
44 | 51 | end |
|
51 | 58 | implicit = ImplicitFunction(f, c; linear_solver) |
52 | 59 | J1 = ForwardDiff.jacobian(implicit, x) |
53 | 60 | J2 = Zygote.jacobian(implicit, x)[1] |
54 | | - @test all(isnan, J1) && eltype(J1) == Float32 |
55 | | - @test all(isnan, J2) && eltype(J2) == Float32 |
| 61 | + @test all(isnan, J1) == should_give_nan(linear_solver) |
| 62 | + @test all(isnan, J2) == should_give_nan(linear_solver) |
| 63 | + @test eltype(J1) == Float32 |
| 64 | + @test eltype(J2) == Float32 |
56 | 65 | end |
57 | 66 | end |
58 | 67 | end |
|
0 commit comments