use crate::{Matrix, Result};
use crate::ml::autograd::{
node::{GradNode, operation::GradNodeOperation},
tape::record_node,
};
use crate::ml::autograd::node::operation::{
GradNodeAdaptiveAvgPool2d, GradNodeAvgPool2d, GradNodeMaxPool2d,
};
pub(in crate::ml) fn record_avg_pool_2d(
input: &Matrix,
kernel_size: usize,
stride: usize,
padding: usize,
result: &Matrix,
) -> Result<()> {
record_node(GradNode::Operation(GradNodeOperation::AvgPool2d(
GradNodeAvgPool2d {
input: input.clone(),
kernel_size,
stride,
padding,
output_id: result.value_id(),
},
)))
}
pub(in crate::ml) fn record_max_pool_2d(
input: &Matrix,
indices: Matrix,
kernel_size: usize,
stride: usize,
padding: usize,
result: &Matrix,
) -> Result<()> {
record_node(GradNode::Operation(GradNodeOperation::MaxPool2d(
GradNodeMaxPool2d {
input: input.clone(),
indices,
kernel_size,
stride,
padding,
output_id: result.value_id(),
},
)))
}
pub(in crate::ml) fn record_adaptive_avg_pool_2d(
input: &Matrix,
output_height: usize,
output_width: usize,
result: &Matrix,
) -> Result<()> {
record_node(GradNode::Operation(GradNodeOperation::AdaptiveAvgPool2d(
GradNodeAdaptiveAvgPool2d {
input: input.clone(),
output_height,
output_width,
output_id: result.value_id(),
},
)))
}