diff --git a/DifferentiationInterface/src/DifferentiationInterface.jl b/DifferentiationInterface/src/DifferentiationInterface.jl index 6628042d2..90712b1b1 100644 --- a/DifferentiationInterface/src/DifferentiationInterface.jl +++ b/DifferentiationInterface/src/DifferentiationInterface.jl @@ -71,7 +71,7 @@ include("sparse/matrices.jl") include("sparse/jacobian.jl") include("sparse/hessian.jl") -include("translation/differentiate_with.jl") +include("misc/differentiate_with.jl") function __init__() @require_extensions diff --git a/DifferentiationInterface/src/translation/differentiate_with.jl b/DifferentiationInterface/src/misc/differentiate_with.jl similarity index 100% rename from DifferentiationInterface/src/translation/differentiate_with.jl rename to DifferentiationInterface/src/misc/differentiate_with.jl diff --git a/DifferentiationInterface/test/Double/Enzyme-ForwardDiff.jl b/DifferentiationInterface/test/Double/Enzyme-ForwardDiff/test.jl similarity index 100% rename from DifferentiationInterface/test/Double/Enzyme-ForwardDiff.jl rename to DifferentiationInterface/test/Double/Enzyme-ForwardDiff/test.jl diff --git a/DifferentiationInterface/test/Double/ForwardDiff-Zygote/differentiatewith.jl b/DifferentiationInterface/test/Double/ForwardDiff-Zygote/differentiatewith.jl new file mode 100644 index 000000000..43a850ba8 --- /dev/null +++ b/DifferentiationInterface/test/Double/ForwardDiff-Zygote/differentiatewith.jl @@ -0,0 +1,26 @@ +using DifferentiationInterface, DifferentiationInterfaceTest +import DifferentiationInterfaceTest as DIT +using ForwardDiff: ForwardDiff +using Zygote: Zygote +using Test + +function zygote_breaking_scenarios() + onearg_scens = filter(default_scenarios()) do scen + DIT.nb_args(scen) == 1 + end + bad_onearg_scens = map(onearg_scens) do scen + function bad_f(x) + a = Vector{eltype(x)}(undef, 1) + a[1] = sum(x) + return scen.f(x) + end + wrapped_bad_f = DifferentiateWith(bad_f, AutoForwardDiff()) + bad_scen = DIT.change_function(scen, wrapped_bad_f) + return bad_scen + end + return bad_onearg_scens +end + +test_differentiation( + AutoZygote(), zygote_breaking_scenarios(); second_order=false, logging=LOGGING +) diff --git a/DifferentiationInterface/test/Double/ForwardDiff-Zygote.jl b/DifferentiationInterface/test/Double/ForwardDiff-Zygote/test.jl similarity index 54% rename from DifferentiationInterface/test/Double/ForwardDiff-Zygote.jl rename to DifferentiationInterface/test/Double/ForwardDiff-Zygote/test.jl index 86b556623..ec9313ca9 100644 --- a/DifferentiationInterface/test/Double/ForwardDiff-Zygote.jl +++ b/DifferentiationInterface/test/Double/ForwardDiff-Zygote/test.jl @@ -1,6 +1,4 @@ using DifferentiationInterface, DifferentiationInterfaceTest -import DifferentiationInterface as DI -import DifferentiationInterfaceTest as DIT using ForwardDiff: ForwardDiff using SparseConnectivityTracer using SparseMatrixColorings @@ -32,26 +30,3 @@ test_differentiation(dense_backends; first_order=false, logging=LOGGING); test_differentiation( sparse_backends, sparse_scenarios(); first_order=false, sparsity=true, logging=LOGGING ); - -## Translation - -function zygote_breaking_scenarios() - onearg_scens = filter(default_scenarios()) do scen - DIT.nb_args(scen) == 1 - end - bad_onearg_scens = map(onearg_scens) do scen - function bad_f(x) - a = Vector{eltype(x)}(undef, 1) - a[1] = sum(x) - return scen.f(x) - end - wrapped_bad_f = DifferentiateWith(bad_f, AutoForwardDiff()) - bad_scen = DIT.change_function(scen, wrapped_bad_f) - return bad_scen - end - return bad_onearg_scens -end - -test_differentiation( - AutoZygote(), zygote_breaking_scenarios(); second_order=false, logging=LOGGING -) diff --git a/DifferentiationInterface/test/Double/ReverseDiff-Zygote.jl b/DifferentiationInterface/test/Double/ReverseDiff-Zygote/test.jl similarity index 100% rename from DifferentiationInterface/test/Double/ReverseDiff-Zygote.jl rename to DifferentiationInterface/test/Double/ReverseDiff-Zygote/test.jl diff --git a/DifferentiationInterface/test/Single/Diffractor.jl b/DifferentiationInterface/test/Single/Diffractor/test.jl similarity index 100% rename from DifferentiationInterface/test/Single/Diffractor.jl rename to DifferentiationInterface/test/Single/Diffractor/test.jl diff --git a/DifferentiationInterface/test/Single/Enzyme.jl b/DifferentiationInterface/test/Single/Enzyme/test.jl similarity index 100% rename from DifferentiationInterface/test/Single/Enzyme.jl rename to DifferentiationInterface/test/Single/Enzyme/test.jl diff --git a/DifferentiationInterface/test/Single/FastDifferentiation.jl b/DifferentiationInterface/test/Single/FastDifferentiation/test.jl similarity index 100% rename from DifferentiationInterface/test/Single/FastDifferentiation.jl rename to DifferentiationInterface/test/Single/FastDifferentiation/test.jl diff --git a/DifferentiationInterface/test/Single/FiniteDiff.jl b/DifferentiationInterface/test/Single/FiniteDiff/test.jl similarity index 100% rename from DifferentiationInterface/test/Single/FiniteDiff.jl rename to DifferentiationInterface/test/Single/FiniteDiff/test.jl diff --git a/DifferentiationInterface/test/Single/FiniteDifferences.jl b/DifferentiationInterface/test/Single/FiniteDifferences/test.jl similarity index 100% rename from DifferentiationInterface/test/Single/FiniteDifferences.jl rename to DifferentiationInterface/test/Single/FiniteDifferences/test.jl diff --git a/DifferentiationInterface/test/Single/ForwardDiff/efficiency.jl b/DifferentiationInterface/test/Single/ForwardDiff/efficiency.jl index c6a8d4987..0eb16f514 100644 --- a/DifferentiationInterface/test/Single/ForwardDiff/efficiency.jl +++ b/DifferentiationInterface/test/Single/ForwardDiff/efficiency.jl @@ -46,7 +46,7 @@ sumexp(x) = sum(exp, x) for row in eachrow(useful_data) scen = row[:scenario] @testset "$(row[:operator]) - $(string(scen.f)) : $(typeof(scen.x)) -> $(typeof(scen.y))" begin - @test row[:allocs] == 0 + VERSION >= v"1.10" && @test row[:allocs] == 0 end end end @@ -80,7 +80,7 @@ end for row in eachrow(useful_data) scen = row[:scenario] @testset "$(row[:operator]) - $(string(scen.f)) : $(typeof(scen.x)) -> $(typeof(scen.y))" begin - @test row[:allocs] == 0 + VERSION >= v"1.10" && @test row[:allocs] == 0 @test row[:calls] < prod(size(scen.x)) end end diff --git a/DifferentiationInterface/test/Single/ForwardDiff.jl b/DifferentiationInterface/test/Single/ForwardDiff/test.jl similarity index 94% rename from DifferentiationInterface/test/Single/ForwardDiff.jl rename to DifferentiationInterface/test/Single/ForwardDiff/test.jl index fdfc80c7c..42711d334 100644 --- a/DifferentiationInterface/test/Single/ForwardDiff.jl +++ b/DifferentiationInterface/test/Single/ForwardDiff/test.jl @@ -58,9 +58,3 @@ test_differentiation( ); test_differentiation(sparse_backends, sparse_scenarios(); sparsity=true, logging=LOGGING); - -## Bonus - -if VERSION >= v"1.10" - include("ForwardDiff/efficiency.jl") -end diff --git a/DifferentiationInterface/test/Single/PolyesterForwardDiff.jl b/DifferentiationInterface/test/Single/PolyesterForwardDiff/test.jl similarity index 100% rename from DifferentiationInterface/test/Single/PolyesterForwardDiff.jl rename to DifferentiationInterface/test/Single/PolyesterForwardDiff/test.jl diff --git a/DifferentiationInterface/test/Single/ReverseDiff.jl b/DifferentiationInterface/test/Single/ReverseDiff/test.jl similarity index 100% rename from DifferentiationInterface/test/Single/ReverseDiff.jl rename to DifferentiationInterface/test/Single/ReverseDiff/test.jl diff --git a/DifferentiationInterface/test/Single/Symbolics.jl b/DifferentiationInterface/test/Single/Symbolics/test.jl similarity index 85% rename from DifferentiationInterface/test/Single/Symbolics.jl rename to DifferentiationInterface/test/Single/Symbolics/test.jl index e86a0942f..34a2d8acb 100644 --- a/DifferentiationInterface/test/Single/Symbolics.jl +++ b/DifferentiationInterface/test/Single/Symbolics/test.jl @@ -13,9 +13,3 @@ test_differentiation(AutoSymbolics(); logging=LOGGING); test_differentiation( AutoSparse(AutoSymbolics()), sparse_scenarios(); sparsity=true, logging=LOGGING ); - -## Bonus - -if VERSION >= v"1.10" - include("Symbolics/detector.jl") -end diff --git a/DifferentiationInterface/test/Single/Tapir.jl b/DifferentiationInterface/test/Single/Tapir/test.jl similarity index 100% rename from DifferentiationInterface/test/Single/Tapir.jl rename to DifferentiationInterface/test/Single/Tapir/test.jl diff --git a/DifferentiationInterface/test/Single/Tracker.jl b/DifferentiationInterface/test/Single/Tracker/test.jl similarity index 100% rename from DifferentiationInterface/test/Single/Tracker.jl rename to DifferentiationInterface/test/Single/Tracker/test.jl diff --git a/DifferentiationInterface/test/Single/Zygote.jl b/DifferentiationInterface/test/Single/Zygote/test.jl similarity index 100% rename from DifferentiationInterface/test/Single/Zygote.jl rename to DifferentiationInterface/test/Single/Zygote/test.jl diff --git a/DifferentiationInterface/test/runtests.jl b/DifferentiationInterface/test/runtests.jl index 11e0b5390..89211b9d9 100644 --- a/DifferentiationInterface/test/runtests.jl +++ b/DifferentiationInterface/test/runtests.jl @@ -13,6 +13,21 @@ LOGGING = get(ENV, "CI", "false") == "false" GROUP = get(ENV, "JULIA_DI_TEST_GROUP", "All") +ALL_BACKENDS = [ + "Diffractor", + "Enzyme", + "FiniteDiff", + "FiniteDifferences", + "FastDifferentiation", + "ForwardDiff", + "PolyesterForwardDiff", + "ReverseDiff", + "Symbolics", + "Tapir", + "Tracker", + "Zygote", +] + ## Main tests @testset verbose = true "DifferentiationInterface.jl" begin @@ -31,40 +46,33 @@ GROUP = get(ENV, "JULIA_DI_TEST_GROUP", "All") end if GROUP == "All" - Pkg.add([ - "Diffractor", - "Enzyme", - "FiniteDiff", - "FiniteDifferences", - "FastDifferentiation", - "ForwardDiff", - "PolyesterForwardDiff", - "ReverseDiff", - "Symbolics", - "Tapir", - "Tracker", - "Zygote", - ]) + Pkg.add(ALL_BACKENDS) @testset verbose = true "$folder" for folder in ("Single", "Double") - files = filter(f -> endswith(f, ".jl"), readdir(joinpath(@__DIR__, folder))) - @testset "$file" for file in files - @info "Testing $folder/$file" - include(joinpath(@__DIR__, folder, file)) + @testset verbose = true "$subfolder" for subfolder in + readdir(joinpath(@__DIR__, folder)) + @testset "$file" for file in readdir(joinpath(@__DIR__, folder, subfolder)) + @info "Testing $folder/$subfolder/$file" + include(joinpath(@__DIR__, folder, subfolder, file)) + end end end elseif startswith(GROUP, "Single") b1 = split(GROUP, '/')[2] - @testset "Single/$b1" begin - @info "Testing Single/$b1" + @testset verbose = true "Single/$b1" begin Pkg.add(b1) - include(joinpath(@__DIR__, "Single", "$b1.jl")) + @testset "$file" for file in readdir(joinpath(@__DIR__, "Single", "$b1")) + @info "Testing Single/$b1/$file" + include(joinpath(@__DIR__, "Single", "$b1", file)) + end end elseif startswith(GROUP, "Double") b1, b2 = split(split(GROUP, '/')[2], '-') - @testset "Single/$b1-$b2" begin - @info "Testing Double/$b1-$b2" + @testset verbose = true "Double/$b1-$b2" begin Pkg.add([b1, b2]) - include(joinpath(@__DIR__, "Double", "$b1-$b2.jl")) + @testset "$file" for file in readdir(joinpath(@__DIR__, "Double", "$b1-$b2")) + @info "Testing Double/$b1-$b2/$file" + include(joinpath(@__DIR__, "Double", "$b1-$b2", file)) + end end end end;