oarust 0.8.6

GPU-first semantic computing engine written in Rust
// @generated by tool/gen/fn/generate.py; DO NOT EDIT.
// schema=matrix_rng.json schema_version=1 generator_version=64
// schema_sha256=44767f064bbe8a861ee136a4b6ac710d80d5acc0febb4921a9b455dfac0147d6
//! Tape traversal adapters; numerical adjoints live in Matrix operation providers.

use super::GradientContext;
use crate::matrix;
use crate::{Matrix, Result};

pub(super) fn dropout(
	input: &Matrix,
	output_id: &u64,
	probability: &f32,
	seed: &u64,
	gradients: &mut impl GradientContext,
) -> Result<bool> {
	let Some(output_gradient) = gradients.take_output(*output_id) else {
		return Ok(false);
	};
	let input_gradient = matrix::dropout_backward(&output_gradient, *probability, *seed)?;
	gradients.accumulate(input.value_id(), input_gradient)?;
	Ok(true)
}