concision_core/utils/
pad.rs

1/*
2   Appellation: pad <mod>
3   Contrib: FL03 <jo3mccain@icloud.com>
4*/
5mod impl_pad;
6mod impl_pad_mode;
7mod impl_padding;
8
9/// The [`Pad`] trait defines a padding operation for tensors.
10pub trait Pad<T> {
11    type Output;
12
13    fn pad(&self, mode: PadMode<T>, pad: &[[usize; 2]]) -> Self::Output;
14}
15
16pub struct Padding<T> {
17    pub(crate) action: PadAction,
18    pub(crate) mode: PadMode<T>,
19    pub(crate) pad: Vec<[usize; 2]>,
20    pub(crate) padding: usize,
21}
22
23#[derive(
24    Clone,
25    Copy,
26    Debug,
27    Default,
28    Eq,
29    Hash,
30    Ord,
31    PartialEq,
32    PartialOrd,
33    variants::VariantConstructors,
34    strum::AsRefStr,
35    strum::Display,
36    strum::EnumCount,
37    strum::EnumIs,
38    strum::EnumIter,
39    strum::EnumString,
40    strum::VariantArray,
41    strum::VariantNames,
42)]
43#[cfg_attr(
44    feature = "serde",
45    derive(serde::Deserialize, serde::Serialize),
46    serde(rename_all = "snake_case", untagged)
47)]
48#[strum(serialize_all = "snake_case")]
49pub enum PadAction {
50    Clipping,
51    Lane,
52    Reflecting,
53    #[default]
54    StopAfterCopy,
55    Wrapping,
56}
57
58#[derive(
59    Clone,
60    Copy,
61    Debug,
62    Eq,
63    Hash,
64    Ord,
65    PartialEq,
66    PartialOrd,
67    strum::AsRefStr,
68    strum::Display,
69    strum::EnumCount,
70    strum::EnumIs,
71    strum::VariantNames,
72)]
73#[cfg_attr(
74    feature = "serde",
75    derive(serde::Deserialize, serde::Serialize),
76    serde(rename_all = "snake_case")
77)]
78#[strum(serialize_all = "snake_case")]
79#[repr(C)]
80#[derive(Default)]
81pub enum PadMode<T = f64> {
82    Constant(T),
83    Edge,
84    Maximum,
85    Mean,
86    Median,
87    Minimum,
88    Mode,
89    Reflect,
90    Symmetric,
91    #[default]
92    Wrap,
93}