diff --git a/Project.toml b/Project.toml index 631ada4..240038e 100644 --- a/Project.toml +++ b/Project.toml @@ -1,7 +1,7 @@ name = "ADTypes" uuid = "47edcb42-4c32-4615-8424-f2b9edc5f35b" authors = ["Vaibhav Dixit , Guillaume Dalle and contributors"] -version = "1.16.0" +version = "1.17.0" [deps] ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" diff --git a/docs/src/index.md b/docs/src/index.md index 254eb68..eda25fa 100644 --- a/docs/src/index.md +++ b/docs/src/index.md @@ -21,6 +21,7 @@ Algorithmic differentiation: ```@docs AutoForwardDiff AutoPolyesterForwardDiff +AutoMooncakeForward ``` Finite differences: diff --git a/src/ADTypes.jl b/src/ADTypes.jl index 72c2027..bbc31c3 100644 --- a/src/ADTypes.jl +++ b/src/ADTypes.jl @@ -38,6 +38,7 @@ export AutoChainRules, AutoGTPSA, AutoModelingToolkit, AutoMooncake, + AutoMooncakeForward, AutoPolyesterForwardDiff, AutoReverseDiff, AutoSymbolics, diff --git a/src/dense.jl b/src/dense.jl index b7e152a..4514c2e 100644 --- a/src/dense.jl +++ b/src/dense.jl @@ -276,10 +276,16 @@ end """ AutoMooncake -Struct used to select the [Mooncake.jl](https://github.com/compintell/Mooncake.jl) backend for automatic differentiation. +Struct used to select the [Mooncake.jl](https://github.com/compintell/Mooncake.jl) backend for automatic differentiation in reverse mode. Defined by [ADTypes.jl](https://github.com/SciML/ADTypes.jl). +!!! info + + When forward mode became available in Mooncake.jl v0.4.147, another struct called [`AutoMooncakeForward`](@ref) was introduced. + It was kept separate to avoid a breaking release of ADTypes.jl. + [`AutoMooncake`](@ref) remains for reverse mode only. + # Constructors AutoMooncake(; config=nothing) @@ -294,6 +300,33 @@ end mode(::AutoMooncake) = ReverseMode() +""" + AutoMooncakeForward + +Struct used to select the [Mooncake.jl](https://github.com/compintell/Mooncake.jl) backend for automatic differentiation in forward mode. + +Defined by [ADTypes.jl](https://github.com/SciML/ADTypes.jl). + +!!! info + + This struct was introduced when forward mode became available in Mooncake.jl v0.4.147. + It was kept separate from [`AutoMooncake`](@ref) to avoid a breaking release of ADTypes.jl. + [`AutoMooncake`](@ref) remains for reverse mode only. + +# Constructors + + AutoMooncakeForward(; config=nothing) + +# Fields + + - `config`: either `nothing` or an instance of `Mooncake.Config` -- see the docstring of `Mooncake.Config` for more information. `AutoForwardMooncake(; config=nothing)` is equivalent to `AutoForwardMooncake(; config=Mooncake.Config())`, i.e. the default configuration. +""" +Base.@kwdef struct AutoMooncakeForward{Tconfig} <: AbstractADType + config::Tconfig = nothing +end + +mode(::AutoMooncakeForward) = ForwardMode() + """ AutoPolyesterForwardDiff{chunksize,T} diff --git a/test/dense.jl b/test/dense.jl index fa43edf..307403d 100644 --- a/test/dense.jl +++ b/test/dense.jl @@ -136,6 +136,16 @@ end @test ad.config === nothing end +@testset "AutoMooncakeForward" begin + ad = AutoMooncakeForward(; config = :config) + @test ad isa AbstractADType + @test ad isa AutoMooncakeForward + @test mode(ad) isa ForwardMode + @test ad.config === :config + ad = AutoMooncakeForward() + @test ad.config === nothing +end + @testset "AutoPolyesterForwardDiff" begin ad = AutoPolyesterForwardDiff() @test ad isa AbstractADType diff --git a/test/runtests.jl b/test/runtests.jl index 7bcd078..b4a5f5b 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -70,6 +70,8 @@ function every_ad_with_options() AutoForwardDiff(chunksize = 3, tag = :tag), AutoGTPSA(), AutoGTPSA(descriptor = Val(:descriptor)), + AutoMooncake(; config = :config), + AutoMooncakeForward(; config = :config), AutoPolyesterForwardDiff(), AutoPolyesterForwardDiff(chunksize = 3, tag = :tag), AutoReverseDiff(),