1use serde::{Serialize, Deserialize};
6
7#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
9pub enum ElementwiseBinaryKind {
10 Add,
11 Mul,
12 Sub,
13 Div,
14 Pow,
15}
16
17#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
19pub enum ElementwiseUnaryKind {
20 Sqrt,
21 Abs,
22 Neg,
23 Exp,
24 Log,
25 Sin,
26 Cos,
27 Tan,
28 Asin,
29 Acos,
30 Atan,
31 Relu,
32 LeakyRelu,
33}
34
35#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
38pub enum ElementwiseKind {
39 Add,
40 Mul,
41 Sub,
42 Div,
43 Pow,
44 Sqrt,
46 Sin,
48 Cos,
49 Tan,
50 Asin,
52 Acos,
53 Atan,
54 Abs,
56 Neg,
58 Exp,
60 Log,
62 Relu,
64 LeakyRelu,
65 Sigmoid,
66 Tanh,
67 Softplus,
68}
69
70#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
72pub enum ElementwiseStrategy {
73 Default,
75 Scalar,
76 Vectorized,
77 GpuKernel,
78}
79
80impl From<ElementwiseBinaryKind> for ElementwiseKind {
82 fn from(b: ElementwiseBinaryKind) -> Self {
83 match b {
84 ElementwiseBinaryKind::Add => ElementwiseKind::Add,
85 ElementwiseBinaryKind::Mul => ElementwiseKind::Mul,
86 ElementwiseBinaryKind::Sub => ElementwiseKind::Sub,
87 ElementwiseBinaryKind::Div => ElementwiseKind::Div,
88 ElementwiseBinaryKind::Pow => ElementwiseKind::Pow,
89 }
90 }
91}
92
93impl From<ElementwiseUnaryKind> for ElementwiseKind {
94 fn from(u: ElementwiseUnaryKind) -> Self {
95 match u {
96 ElementwiseUnaryKind::Sqrt => ElementwiseKind::Sqrt,
97 ElementwiseUnaryKind::Sin => ElementwiseKind::Sin,
98 ElementwiseUnaryKind::Cos => ElementwiseKind::Cos,
99 ElementwiseUnaryKind::Abs => ElementwiseKind::Abs,
100 ElementwiseUnaryKind::Neg => ElementwiseKind::Neg,
101 ElementwiseUnaryKind::Exp => ElementwiseKind::Exp,
102 ElementwiseUnaryKind::Log => ElementwiseKind::Log,
103 ElementwiseUnaryKind::Tan => ElementwiseKind::Tan,
104 ElementwiseUnaryKind::Asin => ElementwiseKind::Asin,
105 ElementwiseUnaryKind::Acos => ElementwiseKind::Acos,
106 ElementwiseUnaryKind::Atan => ElementwiseKind::Atan,
107 ElementwiseUnaryKind::Relu => ElementwiseKind::Relu,
108 ElementwiseUnaryKind::LeakyRelu => ElementwiseKind::LeakyRelu,
109 }
110 }
111}