topos 0.12.0

An autodiff compiler stack in Rust.
Documentation
use crate::{Numerics, Tape};
use malevich::Theme;

#[test]
fn the_card_names_roots_observes_and_posture() {
    let tape: Tape<f64> = Tape::new();
    let w = tape.parameter(1.0);
    let hidden = w * w;
    let loss = hidden.sum();
    let (hidden, loss) = (hidden.symbol(), loss.symbol());
    let network = tape.into_network();
    let html = network
        .entry([loss])
        .observe([hidden])
        .numerics(Numerics::Exact)
        .to_html(Theme::DARK);
    assert!(html.contains("entry"));
    assert!(html.contains("1 roots"));
    assert!(html.contains("1 observes"));
    assert!(html.contains("Exact"));
    assert!(html.contains("forward-only"));
    assert!(html.contains(&format!("#{}", loss.id.index())));
}

#[test]
fn a_backward_entry_names_the_retain_posture() {
    let tape: Tape<f64> = Tape::new();
    let w = tape.parameter(1.0);
    let loss = (w * w).sum().symbol();
    let network = tape.into_network();
    let html = network.entry([loss]).backward().to_html(Theme::DARK);
    assert!(html.contains("retain for backward"));
}