oarust 0.8.6

GPU-first semantic computing engine written in Rust
// @generated by tool/gen/fn/generate.py; DO NOT EDIT.
// schema=ml_training.json schema_version=1 generator_version=64
// schema_sha256=6678961ee57f24310158676c7b4fe0821e21ca48db7edcb20d2a749a164976ae
// Mechanical tape attachments; concrete saved-state node behavior remains private.

use crate::{Matrix, Result};

use crate::ml::autograd::{
	node::{GradNode, operation::GradNodeOperation},
	tape::record_node,
};

use crate::ml::autograd::node::operation::{
	GradNodeBce, GradNodeCrossEntropy, GradNodeL1, GradNodeMaskedCrossEntropy, GradNodeMse,
	GradNodePpoClippedPolicy, GradNodeSmoothL1,
};

pub(in crate::ml) fn record_ppo_clipped_policy(
	new_log_probability: &Matrix,
	old_log_probability: &Matrix,
	advantage: &Matrix,
	clip_epsilon: f32,
	output: &Matrix,
) -> Result<()> {
	record_node(GradNode::Operation(GradNodeOperation::PpoClippedPolicy(
		GradNodePpoClippedPolicy {
			new_log_probability: new_log_probability.clone(),
			old_log_probability: old_log_probability.clone(),
			advantage: advantage.clone(),
			clip_epsilon,
			output_id: output.value_id(),
		},
	)))
}

pub(in crate::ml) fn record_cross_entropy(
	logits: &Matrix,
	targets: &Matrix,
	result: &Matrix,
) -> Result<()> {
	record_node(GradNode::Operation(GradNodeOperation::CrossEntropy(
		GradNodeCrossEntropy {
			logits: logits.clone(),
			targets: targets.clone(),
			output_id: result.value_id(),
		},
	)))
}

pub(in crate::ml) fn record_masked_cross_entropy(
	logits: &Matrix,
	targets: &Matrix,
	mask: &Matrix,
	valid_count: usize,
	result: &Matrix,
) -> Result<()> {
	record_node(GradNode::Operation(GradNodeOperation::MaskedCrossEntropy(
		GradNodeMaskedCrossEntropy {
			logits: logits.clone(),
			targets: targets.clone(),
			mask: mask.clone(),
			valid_count,
			output_id: result.value_id(),
		},
	)))
}

pub(in crate::ml) fn record_smooth_l1(
	prediction: &Matrix,
	target: &Matrix,
	result: &Matrix,
) -> Result<()> {
	record_node(GradNode::Operation(GradNodeOperation::SmoothL1(
		GradNodeSmoothL1 {
			prediction: prediction.clone(),
			target: target.clone(),
			output_id: result.value_id(),
		},
	)))
}

pub(in crate::ml) fn record_mse(
	prediction: &Matrix,
	target: &Matrix,
	result: &Matrix,
) -> Result<()> {
	record_node(GradNode::Operation(GradNodeOperation::Mse(GradNodeMse {
		prediction: prediction.clone(),
		target: target.clone(),
		output_id: result.value_id(),
	})))
}

pub(in crate::ml) fn record_l1(
	prediction: &Matrix,
	target: &Matrix,
	result: &Matrix,
) -> Result<()> {
	record_node(GradNode::Operation(GradNodeOperation::L1(GradNodeL1 {
		prediction: prediction.clone(),
		target: target.clone(),
		output_id: result.value_id(),
	})))
}

pub(in crate::ml) fn record_bce(
	prediction: &Matrix,
	target: &Matrix,
	result: &Matrix,
) -> Result<()> {
	record_node(GradNode::Operation(GradNodeOperation::Bce(GradNodeBce {
		prediction: prediction.clone(),
		target: target.clone(),
		output_id: result.value_id(),
	})))
}