use smallvec::{SmallVec, smallvec};
use crate::backend::Formula;
use super::batch_norm::BatchNormalization;
use super::reduce_window::ReduceWindow;
use super::window::WindowProduct;
#[derive(Debug, Clone)]
pub(crate) enum Pattern {
WindowProduct(WindowProduct),
ReduceWindow(ReduceWindow),
BatchNormTraining(BatchNormalization),
BatchNormInference(BatchNormalization),
}
impl Pattern {
pub(crate) fn formula(&self) -> Formula {
match self {
Pattern::WindowProduct(_) => Formula::WindowProduct,
Pattern::ReduceWindow(_) => Formula::ReduceWindow,
Pattern::BatchNormTraining(_) => Formula::BatchNormTraining,
Pattern::BatchNormInference(_) => Formula::BatchNormInference,
}
}
pub(crate) fn named(&self) -> SmallVec<[usize; 4]> {
match self {
Pattern::BatchNormTraining(group) => smallvec![group.mean, group.variance],
Pattern::WindowProduct(_)
| Pattern::ReduceWindow(_)
| Pattern::BatchNormInference(_) => SmallVec::new(),
}
}
}