Skip to main content

tidu/
lib.rs

1//! AD graph transforms for the tensor4all v2 stack.
2//!
3//! This crate provides two graph-to-graph transforms:
4//! [`differentiate`] for forward linearization (JVP) and [`transpose`] for
5//! reverse linear flow over a linear fragment.
6//! Fallible variants (`try_differentiate`, `try_transpose`, and
7//! `try_backward_dag`) propagate [`chainrules::ADRuleError`] for missing
8//! primitive or extension AD rules.
9//! It also provides eager reverse-mode AD helpers: [`record_eager_op`] builds
10//! [`GradNode`] metadata around concrete frontend execution, and
11//! [`backward_dag`] replays recorded nodes through caller-provided
12//! [`BackwardCallbacks`].
13//!
14//! # Examples
15//!
16//! ```ignore
17//! use computegraph::resolve::resolve;
18//! use tidu::{try_differentiate, try_transpose};
19//!
20//! let view = resolve(vec![primal_fragment]);
21//! let mut ctx = ();
22//! let aliases = std::collections::HashMap::new();
23//! let linear = try_differentiate(&view, &[output_key], &[input_key], 1, &mut ctx, &aliases)?;
24//! let _transposed = try_transpose(&linear, &mut ctx)?;
25//! # Ok::<(), chainrules::ADRuleError>(())
26//! ```
27
28pub mod backward;
29mod differentiate;
30mod eager_record;
31pub mod eager_transpose;
32pub mod grad_node;
33mod linear_fragment;
34mod transpose;
35
36pub use backward::{backward_dag, topo_sort_grad_dag, try_backward_dag, BackwardCallbacks};
37pub use differentiate::{differentiate, try_differentiate};
38pub use eager_record::{
39    derived_output_key, record_eager_op, saved_forward_values, EagerKeySource, EagerOutput,
40    EagerValue,
41};
42pub use eager_transpose::{eager_transpose_fragment, try_eager_transpose_fragment};
43pub use grad_node::{GradEdge, GradNode};
44pub use linear_fragment::LinearFragment;
45pub use transpose::{transpose, try_transpose};