1include "Tensor.fbs";
2namespace MNN;
3
4enum BinaryOpOperation : byte {
5    ADD = 0,
6    SUB = 1,
7    MUL = 2,
8    DIV = 3,
9    MAX_TEMP = 4,
10    MIN_TEMP = 5,
11    POW = 6,
12    REALDIV = 7,
13    MINIMUM = 8,
14    MAXIMUM = 9,
15    GREATER = 10,
16    GREATER_EQUAL = 11,
17    LESS = 12,
18    FLOORDIV = 13,
19    SquaredDifference = 14,
20    EQUAL = 15,
21    LESS_EQUAL = 16,
22    FLOORMOD = 17,
23    MOD = 19,
24    ATAN2 = 20,
25    LOGICALOR = 21,
26    NOTEQUAL = 22,
27}
28
29table BinaryOp {
30    opType:int;
31    T:DataType=DT_FLOAT;
32}
33
34table PackParam {
35    dataType:DataType;
36    axis:int;
37}
38
39table StridedSliceParam {
40    Index:DataType;
41    T:DataType;
42    beginMask:int;
43    endMask:int;
44    ellipsisMask:int;
45    newAxisMask:int;
46    shrinkAxisMask:int;
47}
48
49table SqueezeParam {
50    squeezeDims:[int];
51}
52
53table CastParam {
54    srcT:DataType;
55    dstT:DataType;
56}
57
58enum ReductionType : byte{
59    SUM = 0,
60    ASUM = 1,
61    SUMSQ = 2,
62    MEAN = 3,
63    MAXIMUM = 4,
64    MINIMUM = 5,
65    PROD = 6,
66    ANY = 7,
67    ALL = 8,
68}
69
70table ReductionParam {
71    operation:ReductionType;
72    dim:[int];
73    coeff:float;
74    keepDims:bool;
75    dType:DataType=DT_FLOAT;
76}
77
78table Gather {
79    Tindices:DataType;
80    Tparams:DataType;
81    validateIndices:bool;
82    axis:int;
83}
84
85table ExpandDims {
86    T:DataType;
87    Tdim:DataType;
88    axis:int;
89}
90
91table Selu {
92    scale:float;
93    alpha:float;
94}
95
96table AsString {
97    T:DataType;
98    precision:int;
99    scientific:bool;
100    shortest:bool;
101    width:int;
102    fillString:string;
103}
104
105table ReduceJoin {
106    keepDims:bool;
107    separator:string;
108}
109
110enum UnaryOpOperation : int {
111    ABS = 0,
112    NEG = 1,
113    FLOOR = 2,
114    CEIL = 3,
115    SQUARE = 4,
116    SQRT = 5,
117    RSQRT = 6,
118    EXP = 7,
119    LOG = 8,
120    SIN = 9,
121    COS = 10,
122    TAN = 11,
123    ASIN = 12,
124    ACOS = 13,
125    ATAN = 14,
126    RECIPROCAL = 15,
127    LOG1P = 16,
128    BNLL = 17,
129    ACOSH = 18,
130    SINH = 19,
131    ASINH = 20,
132    ATANH = 21,
133    SIGN = 22,
134    ROUND = 23,
135    COSH = 24,
136    ERF = 25,
137    ERFC = 26,
138    ERFINV = 27,
139    EXPM1 = 28,
140    SIGMOID = 29,
141    TANH = 30,
142    HARDSWISH = 31,
143    GELU = 32,
144}
145
146table UnaryOp {
147    opType:UnaryOpOperation;
148    T:DataType;
149}
150
151table TopKV2 {
152    T:DataType=DT_FLOAT;
153    sorted:bool=false;
154}
155enum CropAndResizeMethod : byte{
156    BILINEAR=0,
157    NEAREST=1,
158}
159
160table CropAndResize {
161    extrapolationValue:float;
162    method:CropAndResizeMethod;
163}
164
165table Fill {
166
167}
168
169table GatherV2 {
170    Taxis:DataType;
171    Tindices:DataType;
172    Tparams:DataType;
173}
174
175table NonMaxSuppressionV2 {
176
177}
178
179table Range {
180    Tidx:DataType;
181}
182
183table Rank {
184
185}
186
187table Size {
188    outputDataType:DataType;
189}
190
191table Transpose {
192    Tperm:DataType;
193}
194
195table SliceTf {
196    T:DataType;
197}
198
199table QuantizeMaxMin {
200    T:DataType;
201}
202
203table Crop {
204    axis:int=2;
205    offset:[int];
206}
207
208table SpaceBatch {
209    blockShape:Blob;
210    padding:Blob;
211}
212table MatMul {
213    T:DataType;
214    transposeA:bool;
215    transposeB:bool;
216    weight:[float];
217    bias:[float];
218}
219
220table MomentsParam {
221    dim:[int];
222    keepDims:bool=true;
223    dType:DataType=DT_FLOAT;
224}
225
226table RNNParam {
227    numUnits: int;
228    isBidirectionalRNN: bool;
229    linearBeforeReset: bool;
230
231    keepAllOutputs: bool;
232    fwGateWeight: Blob;
233    fwGateBias: Blob;
234    fwCandidateWeight: Blob;
235    fwCandidateBias: Blob;
236    fwRecurrentBias: Blob;
237
238    bwGateWeight: Blob;
239    bwGateBias: Blob;
240    bwCandidateWeight: Blob;
241    bwCandidateBias: Blob;
242    bwRecurrentBias: Blob;
243}
244
245table BatchMatMulParam {
246    adjX: bool = false;
247    adjY: bool = false;
248}
249
250enum DepthToSpaceMode : byte {
251    DCR = 0,
252    CRD = 1
253}
254
255// DepthToSpace and SpaceToDepth using the same parameter
256table DepthSpaceParam {
257    blockSize: int;
258    mode: DepthToSpaceMode = DCR;
259}
260
261table ReverseSequenceParam {
262    batchDim: int;
263    seqDim : int;
264}
265
266table DetectionPostProcessParam{
267    maxDetections: int;
268    maxClassesPerDetection: int;
269    detectionsPerClass: int;
270    nmsScoreThreshold:float;
271    iouThreshold:float;
272    numClasses:int;
273    useRegularNMS:bool;
274    // y_scale, x_scale, h_scale, w_scale
275    // always size == 4
276    centerSizeEncoding:[float];
277}
278
279table OneHotParam{
280    dType:DataType=DT_FLOAT;
281    axis:int=-1;
282}
283
284enum PadValueMode : byte{
285    CONSTANT = 0,
286    REFLECT = 1,
287    SYMMETRIC = 2
288}
289
290table PadParam{
291    mode: PadValueMode = CONSTANT;
292}
293table LayerNorm {
294    axis: [int];
295    epsilon: float;
296    gamma: [float];
297    beta: [float];
298}
299table RandomUniform {
300    seed:int = 0;
301    seed2:int = 0;
302    type:DataType = DT_FLOAT;
303    low:float = 0.0;
304    high:float = 1.0;
305}
306table TensorArray {
307    // false - fix array size; true - dynamic array size;
308    dynamic_size:bool = false;
309    // false - element dynamic shape; true - element identical shape;
310    identical_element_shapes:bool = false;
311    element_shape:[int];
312    T:DataType = DT_FLOAT;
313}
314
315table LSTMBlockCell {
316    cell_clip:float = 3.0;
317    forget_bias:float = 1.0;
318    use_peephole:bool = false;
319}
320