ADTypes.jl
Documentation for ADTypes.jl.
ADTypes.ADTypes
— ModuleADTypes.jl
ADTypes.jl is a multi-valued logic system to choose an automatic differentiation (AD) package and specify its parameters.
ADTypes.AbstractADType
— TypeAbstractADType
Abstract supertype for all AD choices.
Dense AD
Forward mode
Algorithmic differentiation:
ADTypes.AutoForwardDiff
— TypeAutoForwardDiff{chunksize,T}
Chooses ForwardDiff.jl.
Type parameters
chunksize
: the preferred chunk size to evaluate several derivatives at once
Fields
tag::T
: a custom tag to handle nested differentiation calls (usually not necessary)
Constructors
AutoForwardDiff(; chunksize=nothing, tag=nothing)
ADTypes.AutoPolyesterForwardDiff
— TypeAutoPolyesterForwardDiff{chunksize,T}
Chooses PolyesterForwardDiff.jl.
Type parameters
chunksize
: the preferred chunk size to evaluate several derivatives at once
Fields
tag::T
: a custom tag to handle nested differentiation calls (usually not necessary)
Constructors
AutoPolyesterForwardDiff(; chunksize=nothing, tag=nothing)
Finite differences:
ADTypes.AutoFiniteDiff
— TypeAutoFiniteDiff{T1,T2,T3}
Chooses FiniteDiff.jl.
Fields
fdtype::T1
: finite difference typefdjtype::T2
: finite difference type for the Jacobianfdhtype::T3
: finite difference type for the Hessian
Constructor
AutoFiniteDiff(; fdtype=Val(:forward), fdjtype=fdtype, fdhtype=Val(:hcentral))
ADTypes.AutoFiniteDifferences
— TypeAutoFiniteDifferences{T}
Chooses FiniteDifferences.jl.
Fields
fdm::T
: aFiniteDifferenceMethod
Constructor
AutoFiniteDifferences(; fdm)
Reverse mode
ADTypes.AutoReverseDiff
— TypeAutoReverseDiff
Chooses ReverseDiff.jl.
Fields
compile::Bool
: whether to compile the tape prior to differentiation
Constructor
AutoReverseDiff(; compile=false)
ADTypes.AutoTapir
— TypeADTypes.AutoTracker
— TypeADTypes.AutoZygote
— TypeForward or reverse mode
ADTypes.AutoEnzyme
— TypeAutoEnzyme{M}
Chooses Enzyme.jl.
Fields
mode::M
: can be either- an object subtyping
EnzymeCore.Mode
(likeEnzymeCore.Forward
orEnzymeCore.Reverse
) if a specific mode is required nothing
to choose the best mode automatically
- an object subtyping
Constructors
AutoEnzyme(; mode=nothing)
ADTypes.AutoChainRules
— TypeAutoChainRules{RC}
Chooses any AD library based on ChainRulesCore.jl (see the list here).
Fields
ruleconfig::RC
: aChainRulesCore.RuleConfig
object.
Constructor
AutoChainRules(; ruleconfig)
ADTypes.AutoDiffractor
— TypeSymbolic mode
ADTypes.AutoFastDifferentiation
— TypeADTypes.AutoSymbolics
— TypeSparse AD
ADTypes.AutoSparse
— TypeAutoSparse{D,S,C}
Wraps an ADTypes.jl object to deal with sparse Jacobians and Hessians.
Fields
dense_ad::D
: the underlying AD package, subtypingAbstractADType
sparsity_detector::S
: the sparsity pattern detector, subtypingAbstractSparsityDetector
coloring_algorithm::C
: the coloring algorithm, subtypingAbstractColoringAlgorithm
Constructors
AutoSparse(
dense_ad;
sparsity_detector=ADTypes.NoSparsityDetector(),
coloring_algorithm=ADTypes.NoColoringAlgorithm()
)
ADTypes.dense_ad
— Functiondense_ad(ad::AutoSparse)::AbstractADType
Return the underlying AD package for a sparse AD choice.
See also
Sparsity detector
ADTypes.sparsity_detector
— Functionsparsity_detector(ad::AutoSparse)::AbstractSparsityDetector
Return the sparsity pattern detector for a sparse AD choice.
See also
ADTypes.AbstractSparsityDetector
— TypeAbstractSparsityDetector
Abstract supertype for sparsity pattern detectors.
Required methods
ADTypes.jacobian_sparsity
— Functionjacobian_sparsity(f, x, sd::AbstractSparsityDetector)::AbstractMatrix{Bool}
jacobian_sparsity(f!, y, x, sd::AbstractSparsityDetector)::AbstractMatrix{Bool}
Use detector sd
to construct a (typically sparse) matrix S
describing the pattern of nonzeroes in the Jacobian of f
(resp. f!
) applied at x
(resp. (y, x)
).
ADTypes.hessian_sparsity
— Functionhessian_sparsity(f, x, sd::AbstractSparsityDetector)::AbstractMatrix{Bool}
Use detector sd
to construct a (typically sparse) matrix S
describing the pattern of nonzeroes in the Hessian of f
applied at x
.
ADTypes.NoSparsityDetector
— TypeNoSparsityDetector <: AbstractSparsityDetector
Trivial sparsity detector, which always returns a full sparsity pattern (only ones, no zeroes).
See also
Coloring algorithm
ADTypes.coloring_algorithm
— Functioncoloring_algorithm(ad::AutoSparse)::AbstractColoringAlgorithm
Return the coloring algorithm for a sparse AD choice.
See also
ADTypes.AbstractColoringAlgorithm
— TypeAbstractColoringAlgorithm
Abstract supertype for Jacobian/Hessian coloring algorithms, defined for example in SparseDiffTools.jl.
Required methods
Note
The terminology and definitions are taken from the following paper:
"What Color Is Your Jacobian? Graph Coloring for Computing Derivatives"
Assefaw Hadish Gebremedhin, Fredrik Manne, and Alex Pothen (2005)
https://epubs.siam.org/doi/10.1137/S0036144504444711
ADTypes.column_coloring
— Functioncolumn_coloring(M::AbstractMatrix, ca::ColoringAlgorithm)::AbstractVector{<:Integer}
Use algorithm ca
to construct a structurally orthogonal partition of the columns of M
.
The result is a coloring vector c
of length size(M, 2)
such that for every non-zero coefficient M[i, j]
, column j
is the only column of its color c[j]
with a non-zero coefficient in row i
.
ADTypes.row_coloring
— Functionrow_coloring(M::AbstractMatrix, ca::ColoringAlgorithm)::AbstractVector{<:Integer}
Use algorithm ca
to construct a structurally orthogonal partition of the rows of M
.
The result is a coloring vector c
of length size(M, 1)
such that for every non-zero coefficient M[i, j]
, row i
is the only row of its color c[i]
with a non-zero coefficient in column j
.
ADTypes.symmetric_coloring
— Functionsymmetric_coloring(M::AbstractMatrix, ca::ColoringAlgorithm)::AbstractVector{<:Integer}
Use algorithm ca
to construct a symetrically structurally orthogonal partition of the columns (or rows) of the symmetric matrix M
.
The result is a coloring vector c
of length size(M, 1) == size(M, 2)
such that for every non-zero coefficient M[i, j]
, at least one of the following conditions holds:
- column
j
is the only column of its colorc[j]
with a non-zero coefficient in rowi
; - column
i
is the only column of its colorc[i]
with a non-zero coefficient in rowj
.
ADTypes.NoColoringAlgorithm
— TypeNoColoringAlgorithm <: AbstractColoringAlgorithm
Trivial coloring algorithm, which always returns a different color for each matrix column/row.
See also
Modes
ADTypes.mode
— Functionmode(ad::AbstractADType)
Return the differentiation mode of ad
, as a subtype of AbstractMode
.
ADTypes.AbstractMode
— TypeAbstractMode
Abstract supertype for the traits identifying differentiation modes.
Subtypes
ADTypes.ForwardMode
— TypeForwardMode
Trait for AD choices that rely on forward mode algorithmic differentiation or finite differences.
These two paradigms are classified together because they can both efficiently compute Jacobian-vector products.
ADTypes.ForwardOrReverseMode
— TypeForwardOrReverseMode
Trait for AD choices that can work either in ForwardMode
or ReverseMode
, depending on their configuration.
This trait should rarely be used, because more precise dispatches to ForwardMode
or ReverseMode
should be defined.
ADTypes.ReverseMode
— TypeReverseMode
Trait for AD choices that rely on reverse mode algorithmic differentiation.
ADTypes.SymbolicMode
— TypeSymbolicMode
Trait for AD choices that rely on symbolic differentiation.