oarust 0.8.6

GPU-first semantic computing engine written in Rust
use crate::ml::matrix::{Mamba3PreprocessConfig, Mamba3PreprocessResult, SsmConfig};
use crate::{Matrix, Result};

use super::super::{node::GradNode, tape::record_node};

pub(in crate::ml) fn record_mamba3_preprocess(
	projected: &Matrix,
	dt_bias: &Matrix,
	outputs: &Mamba3PreprocessResult,
	config: Mamba3PreprocessConfig,
) -> Result<()> {
	let [x, z, bh, ch, dt, adt, trap, angle] = outputs.matrices();
	record_node(GradNode::Mamba3Preprocess(Box::new(
		super::super::node::GradNodeMamba3Preprocess {
			projected: projected.clone(),
			dt_bias: dt_bias.clone(),
			outputs: [
				x.clone(),
				z.clone(),
				bh.clone(),
				ch.clone(),
				dt.clone(),
				adt.clone(),
				trap.clone(),
				angle.clone(),
			],
			config,
		},
	)))
}

pub(in crate::ml) fn record_mamba3_siso(
	inputs: [&Matrix; 11],
	output: &Matrix,
	config: SsmConfig,
) -> Result<()> {
	let [c, b, x, z, adt, dt, trap, angle, c_bias, b_bias, d] = inputs;
	record_node(GradNode::Mamba3Siso(Box::new(
		super::super::node::GradNodeMamba3Siso {
			c: c.clone(),
			b: b.clone(),
			x: x.clone(),
			z: z.clone(),
			adt: adt.clone(),
			dt: dt.clone(),
			trap: trap.clone(),
			angle: angle.clone(),
			c_bias: c_bias.clone(),
			b_bias: b_bias.clone(),
			d: d.clone(),
			config,
			output_id: output.value_id(),
		},
	)))
}

pub(in crate::ml) fn record_mamba3_mimo(
	inputs: [&Matrix; 15],
	output: &Matrix,
	config: SsmConfig,
) -> Result<()> {
	record_node(GradNode::Mamba3Mimo(Box::new(
		super::super::node::GradNodeMamba3Mimo {
			inputs: inputs.map(Clone::clone),
			config,
			output_id: output.value_id(),
		},
	)))
}