#![cfg_attr(docsrs, feature(doc_cfg))]
#![warn(missing_docs)]
#[macro_export]
macro_rules! assert_send_sync {
($t:ty) => {
const _: fn() = || {
fn assert_send_sync<T: Send + Sync + 'static>() {}
assert_send_sync::<$t>();
};
};
}
pub mod api;
pub mod dual;
pub mod dual_vec;
pub mod float;
pub mod kernels;
pub mod reverse;
pub mod scalar;
pub mod tape;
mod traits;
#[cfg_attr(docsrs, doc(cfg(feature = "bytecode")))]
#[cfg(feature = "bytecode")]
pub mod breverse;
#[cfg_attr(docsrs, doc(cfg(feature = "bytecode")))]
#[cfg(feature = "bytecode")]
pub mod bytecode_tape;
#[cfg_attr(docsrs, doc(cfg(feature = "bytecode")))]
#[cfg(feature = "bytecode")]
pub mod checkpoint;
#[cfg_attr(docsrs, doc(cfg(feature = "bytecode")))]
#[cfg(feature = "bytecode")]
pub mod cross_country;
#[cfg_attr(docsrs, doc(cfg(feature = "bytecode")))]
#[cfg(feature = "bytecode")]
pub mod nonsmooth;
#[cfg_attr(docsrs, doc(cfg(feature = "bytecode")))]
#[cfg(feature = "bytecode")]
pub mod opcode;
#[cfg_attr(docsrs, doc(cfg(feature = "bytecode")))]
#[cfg(feature = "bytecode")]
pub mod sparse;
#[cfg_attr(docsrs, doc(cfg(feature = "taylor")))]
#[cfg(feature = "taylor")]
pub mod taylor;
#[cfg_attr(docsrs, doc(cfg(feature = "taylor")))]
#[cfg(feature = "taylor")]
pub mod taylor_dyn;
#[cfg_attr(docsrs, doc(cfg(feature = "taylor")))]
#[cfg(feature = "taylor")]
pub mod taylor_ops;
#[cfg_attr(docsrs, doc(cfg(feature = "laurent")))]
#[cfg(feature = "laurent")]
pub mod laurent;
#[cfg_attr(docsrs, doc(cfg(feature = "stde")))]
#[cfg(feature = "stde")]
pub mod stde;
#[cfg_attr(docsrs, doc(cfg(feature = "diffop")))]
#[cfg(feature = "diffop")]
pub mod diffop;
#[cfg_attr(docsrs, doc(cfg(any(feature = "gpu-wgpu", feature = "gpu-cuda"))))]
#[cfg(any(feature = "gpu-wgpu", feature = "gpu-cuda"))]
pub mod gpu;
#[cfg_attr(docsrs, doc(cfg(feature = "faer")))]
#[cfg(feature = "faer")]
pub mod faer_support;
#[cfg_attr(docsrs, doc(cfg(feature = "nalgebra")))]
#[cfg(feature = "nalgebra")]
pub mod nalgebra_support;
#[cfg_attr(docsrs, doc(cfg(feature = "ndarray")))]
#[cfg(feature = "ndarray")]
pub mod ndarray_support;
pub use api::{grad, jacobian, jvp, vjp};
pub use dual::Dual;
pub use dual_vec::DualVec;
pub use float::Float;
pub use reverse::Reverse;
pub use scalar::Scalar;
#[cfg_attr(docsrs, doc(cfg(feature = "bytecode")))]
#[cfg(feature = "bytecode")]
pub use api::{
composed_hvp, hessian, hessian_vec, hvp, record, record_multi, sparse_hessian,
sparse_hessian_vec, sparse_jacobian,
};
#[cfg_attr(docsrs, doc(cfg(feature = "bytecode")))]
#[cfg(feature = "bytecode")]
pub use breverse::BReverse;
#[cfg_attr(docsrs, doc(cfg(feature = "bytecode")))]
#[cfg(feature = "bytecode")]
pub use bytecode_tape::{BytecodeTape, CustomOp, CustomOpHandle};
#[cfg_attr(docsrs, doc(cfg(feature = "bytecode")))]
#[cfg(feature = "bytecode")]
pub use checkpoint::{
grad_checkpointed, grad_checkpointed_disk, grad_checkpointed_online,
grad_checkpointed_with_hints,
};
#[cfg_attr(docsrs, doc(cfg(feature = "bytecode")))]
#[cfg(feature = "bytecode")]
pub use nonsmooth::{ClarkeError, KinkEntry, NonsmoothInfo};
#[cfg_attr(docsrs, doc(cfg(feature = "bytecode")))]
#[cfg(feature = "bytecode")]
pub use sparse::{CsrPattern, JacobianSparsityPattern, SparsityPattern};
#[cfg_attr(docsrs, doc(cfg(feature = "laurent")))]
#[cfg(feature = "laurent")]
pub use laurent::Laurent;
#[cfg_attr(docsrs, doc(cfg(feature = "taylor")))]
#[cfg(feature = "taylor")]
pub use taylor::Taylor;
#[cfg_attr(docsrs, doc(cfg(feature = "taylor")))]
#[cfg(feature = "taylor")]
pub use taylor_dyn::{TaylorArena, TaylorDyn, TaylorDynGuard};
pub type Dual64 = Dual<f64>;
pub type Dual32 = Dual<f32>;
pub type DualVec64<const N: usize> = DualVec<f64, N>;
pub type DualVec32<const N: usize> = DualVec<f32, N>;
pub type Reverse64 = Reverse<f64>;
pub type Reverse32 = Reverse<f32>;
#[cfg_attr(docsrs, doc(cfg(feature = "bytecode")))]
#[cfg(feature = "bytecode")]
pub type BReverse64 = BReverse<f64>;
#[cfg_attr(docsrs, doc(cfg(feature = "bytecode")))]
#[cfg(feature = "bytecode")]
pub type BReverse32 = BReverse<f32>;
#[cfg_attr(docsrs, doc(cfg(feature = "taylor")))]
#[cfg(feature = "taylor")]
pub type Taylor64<const K: usize> = Taylor<f64, K>;
#[cfg_attr(docsrs, doc(cfg(feature = "taylor")))]
#[cfg(feature = "taylor")]
pub type Taylor32<const K: usize> = Taylor<f32, K>;
#[cfg_attr(docsrs, doc(cfg(feature = "taylor")))]
#[cfg(feature = "taylor")]
pub type TaylorDyn64 = TaylorDyn<f64>;
#[cfg_attr(docsrs, doc(cfg(feature = "taylor")))]
#[cfg(feature = "taylor")]
pub type TaylorDyn32 = TaylorDyn<f32>;