From d905ca7385795fbd29cd28da29787a6b1c0a91e2 Mon Sep 17 00:00:00 2001 From: Seth Axen Date: Mon, 6 Jul 2020 16:59:19 -0700 Subject: [PATCH 1/3] =?UTF-8?q?Handle=20empty=20primal=20in=20j=E2=80=B2vp?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/grad.jl | 1 + 1 file changed, 1 insertion(+) diff --git a/src/grad.jl b/src/grad.jl index 461f0c11..cb1e1894 100644 --- a/src/grad.jl +++ b/src/grad.jl @@ -76,6 +76,7 @@ end j′vp(fdm, f, ȳ, xs...) = j′vp(fdm, xs->f(xs...), ȳ, xs)[1] function _j′vp(fdm, f, ȳ::Vector{<:Real}, x::Vector{<:Real}) + isempty(x) && return eltype(ȳ)[] # if x is empty, then so is the jacobian and x̄ return transpose(first(jacobian(fdm, f, x))) * ȳ end From 99ade74be1a9ea070a8355db5ed1864ba781d19f Mon Sep 17 00:00:00 2001 From: Seth Axen Date: Mon, 6 Jul 2020 16:59:46 -0700 Subject: [PATCH 2/3] =?UTF-8?q?Test=20j=E2=80=B2vp=20on=20empty=20primals?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/grad.jl | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/test/grad.jl b/test/grad.jl index 44097ceb..d7c71e57 100644 --- a/test/grad.jl +++ b/test/grad.jl @@ -118,15 +118,17 @@ using FiniteDifferences: grad, jacobian, _jvp, jvp, j′vp, _j′vp, to_vec end @testset "j′vp(::$T)" for T in (Float64,) - rng, N, M, fdm = MersenneTwister(123456), 2, 3, central_fdm(5, 1) - x, y = randn(rng, T, N), randn(rng, T, M) - z̄ = randn(rng, T, N + M) - xy = vcat(x, y) - x̄ȳ_manual = j′vp(fdm, xy->sin.(xy), z̄, xy)[1] - x̄ȳ_auto = j′vp(fdm, x->sin.(vcat(x[1], x[2])), z̄, (x, y))[1] - x̄ȳ_multi = j′vp(fdm, (x, y)->sin.(vcat(x, y)), z̄, x, y) - @test x̄ȳ_manual ≈ vcat(x̄ȳ_auto...) - @test x̄ȳ_manual ≈ vcat(x̄ȳ_multi...) + rng, fdm = MersenneTwister(123456), central_fdm(5, 1) + @testset "x with length $N, y with length $M" for (N, M) in ((2, 3), (0, 0), (0, 3)) + x, y = randn(rng, T, N), randn(rng, T, M) + z̄ = randn(rng, T, N + M) + xy = vcat(x, y) + x̄ȳ_manual = j′vp(fdm, xy->sin.(xy), z̄, xy)[1] + x̄ȳ_auto = j′vp(fdm, x->sin.(vcat(x[1], x[2])), z̄, (x, y))[1] + x̄ȳ_multi = j′vp(fdm, (x, y)->sin.(vcat(x, y)), z̄, x, y) + @test x̄ȳ_manual ≈ vcat(x̄ȳ_auto...) + @test x̄ȳ_manual ≈ vcat(x̄ȳ_multi...) + end end # Tests for complex numbers, to prevent regressions against From 617aa73ab5864f2ccb6158aa64f67185bb346d1d Mon Sep 17 00:00:00 2001 From: Seth Axen Date: Mon, 6 Jul 2020 17:00:01 -0700 Subject: [PATCH 3/3] Increment version number --- Project.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Project.toml b/Project.toml index e9373264..06f6ced5 100644 --- a/Project.toml +++ b/Project.toml @@ -1,6 +1,6 @@ name = "FiniteDifferences" uuid = "26cc04aa-876d-5657-8c51-4c34ba976000" -version = "0.10.2" +version = "0.10.4" [deps] LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"