@@ -382,38 +382,68 @@ df = zero(x)
382
382
df_ref = diag (J_ref)
383
383
epsilon = zero (x)
384
384
forward_cache = FiniteDiff. JacobianCache (x, Val{:forward }, eltype (x))
385
+ forward_jvp_cache = FiniteDiff. JVPCache (x, Val{:forward })
385
386
@test forward_cache. colorvec == 1 : length (x)
386
387
central_cache = FiniteDiff. JacobianCache (x, Val{:central }, eltype (x))
388
+ central_jvp_cache = FiniteDiff. JVPCache (x, Val{:central })
387
389
complex_cache = FiniteDiff. JacobianCache (x, Val{:complex }, eltype (x))
388
390
f_in = copy (y)
391
+ vdir = rand (2 )
392
+ jvp_ref = J_ref* vdir
389
393
390
394
@time @testset " Out-of-Place Jacobian StridedArray real-valued tests" begin
391
- @test err_func (FiniteDiff. finite_difference_jacobian (oopf, x, forward_cache), J_ref) < 1e-4
392
- @test err_func (FiniteDiff. finite_difference_jacobian (oopff, x, forward_cache, dir= - 1 ), J_ref) < 1e-4
393
- @test_throws Any err_func (FiniteDiff. finite_difference_jacobian (oopff, x, forward_cache), J_ref) < 1e-4
394
- @test err_func (FiniteDiff. finite_difference_jacobian (oopf, x, forward_cache, relstep= sqrt (eps ())), J_ref) < 1e-4
395
- @test err_func (FiniteDiff. finite_difference_jacobian (oopf, x, forward_cache, f_in), J_ref) < 1e-4
395
+ @test err_func (FiniteDiff. finite_difference_jacobian (oopf, x, forward_cache), J_ref) < 1e-6
396
+ @test err_func (FiniteDiff. finite_difference_jacobian (oopff, x, forward_cache, dir= - 1 ), J_ref) < 1e-6
397
+ @test_throws Any err_func (FiniteDiff. finite_difference_jacobian (oopff, x, forward_cache), J_ref) < 1e-6
398
+ @test err_func (FiniteDiff. finite_difference_jacobian (oopf, x, forward_cache, relstep= sqrt (eps ())), J_ref) < 1e-6
399
+ @test err_func (FiniteDiff. finite_difference_jacobian (oopf, x, forward_cache, f_in), J_ref) < 1e-6
396
400
@test err_func (FiniteDiff. finite_difference_jacobian (oopf, x, central_cache), J_ref) < 1e-8
397
401
@test err_func (FiniteDiff. finite_difference_jacobian (oopf, x, Val{:central }), J_ref) < 1e-8
398
402
@test err_func (FiniteDiff. finite_difference_jacobian (oopf, x, complex_cache), J_ref) < 1e-14
399
403
end
400
404
405
+ @time @testset " Out-of-Place JVP StridedArray real-valued tests" begin
406
+ @test err_func (FiniteDiff. finite_difference_jvp (oopf, x, vdir, forward_jvp_cache), jvp_ref) < 1e-6
407
+ @test err_func (FiniteDiff. finite_difference_jvp (oopff, x, vdir, forward_jvp_cache, dir= - 1 ), jvp_ref) < 1e-6
408
+ @test_throws Any err_func (FiniteDiff. finite_difference_jvp (oopff, x, vdir, forward_jvp_cache), jvp_ref) < 1e-6
409
+ @test err_func (FiniteDiff. finite_difference_jvp (oopf, x, vdir, forward_jvp_cache, relstep= sqrt (eps ())), jvp_ref) < 1e-6
410
+ @test err_func (FiniteDiff. finite_difference_jvp (oopf, x, vdir, forward_jvp_cache, f_in), jvp_ref) < 1e-6
411
+ @test err_func (FiniteDiff. finite_difference_jvp (oopf, x, vdir, central_jvp_cache), jvp_ref) < 1e-8
412
+ @test err_func (FiniteDiff. finite_difference_jvp (oopf, x, vdir, Val{:central }), jvp_ref) < 1e-8
413
+ end
414
+
401
415
function test_iipJac (J_ref, args... ; kwargs... )
402
416
_J = zero (J_ref)
403
417
FiniteDiff. finite_difference_jacobian! (_J, args... ; kwargs... )
404
418
_J
405
419
end
406
420
@time @testset " inPlace Jacobian StridedArray real-valued tests" begin
407
- @test err_func (test_iipJac (J_ref, iipf, x, forward_cache), J_ref) < 1e-4
408
- @test err_func (test_iipJac (J_ref, iipff, x, forward_cache, dir= - 1 ), J_ref) < 1e-4
409
- @test_throws Any err_func (test_iipJac (J_ref, iipff, x, forward_cache), J_ref) < 1e-4
410
- @test err_func (test_iipJac (J_ref, iipf, x, forward_cache, relstep= sqrt (eps ())), J_ref) < 1e-4
411
- @test err_func (test_iipJac (J_ref, iipf, x, forward_cache, f_in), J_ref) < 1e-4
421
+ @test err_func (test_iipJac (J_ref, iipf, x, forward_cache), J_ref) < 1e-6
422
+ @test err_func (test_iipJac (J_ref, iipff, x, forward_cache, dir= - 1 ), J_ref) < 1e-6
423
+ @test_throws Any err_func (test_iipJac (J_ref, iipff, x, forward_cache), J_ref) < 1e-6
424
+ @test err_func (test_iipJac (J_ref, iipf, x, forward_cache, relstep= sqrt (eps ())), J_ref) < 1e-6
425
+ @test err_func (test_iipJac (J_ref, iipf, x, forward_cache, f_in), J_ref) < 1e-6
412
426
@test err_func (test_iipJac (J_ref, iipf, x, central_cache), J_ref) < 1e-8
413
427
@test err_func (test_iipJac (J_ref, iipf, x, Val{:central }), J_ref) < 1e-8
414
428
@test err_func (test_iipJac (J_ref, iipf, x, complex_cache), J_ref) < 1e-14
415
429
end
416
430
431
+ function test_iipJVP (jvp_ref, args... ; kwargs... )
432
+ _jvp = zero (jvp_ref)
433
+ FiniteDiff. finite_difference_jvp! (_jvp, args... ; kwargs... )
434
+ _jvp
435
+ end
436
+
437
+ @time @testset " inPlace JVP StridedArray real-valued tests" begin
438
+ @test err_func (test_iipJVP (jvp_ref, iipf, x, vdir, forward_jvp_cache), jvp_ref) < 1e-6
439
+ @test err_func (test_iipJVP (jvp_ref, iipff, x, vdir, forward_jvp_cache, dir= - 1 ), jvp_ref) < 1e-6
440
+ @test_throws Any err_func (test_iipJVP (jvp_ref, iipff, x, vdir, forward_jvp_cache), jvp_ref) < 1e-6
441
+ @test err_func (test_iipJVP (jvp_ref, iipf, x, vdir, forward_jvp_cache, relstep= sqrt (eps ())), jvp_ref) < 1e-6
442
+ @test err_func (test_iipJVP (jvp_ref, iipf, x, vdir, forward_jvp_cache, f_in), jvp_ref) < 1e-6
443
+ @test err_func (test_iipJVP (jvp_ref, iipf, x, vdir, central_jvp_cache), jvp_ref) < 1e-8
444
+ @test err_func (test_iipJVP (jvp_ref, iipf, x, vdir, Val{:central }), jvp_ref) < 1e-8
445
+ end
446
+
417
447
function iipf (fvec, x)
418
448
fvec[1 ] = (im * x[1 ] + 3 ) * (x[2 ]^ 3 - 7 ) + 18
419
449
fvec[2 ] = sin (x[2 ] * exp (x[1 ]) - 1 )
0 commit comments