f0cac4e5ed189bd5fb05faa7586bcdbf9400505a
[platform/core/ml/nnfw.git] / compiler / luci / logex / src / CircleNodeSummaryBuilders.h
1 /*
2  * Copyright (c) 2022 Samsung Electronics Co., Ltd. All Rights Reserved
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *    http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 #ifndef __LUCI_LOGEX_CIRCLE_NODE_SUMMARY_BUILDERS__
18 #define __LUCI_LOGEX_CIRCLE_NODE_SUMMARY_BUILDERS__
19
20 #include "CircleNodeSummaryBuilder.h"
21
22 #include <luci/IR/CircleNode.h>
23
24 #include <string>
25 #include <vector>
26
27 namespace luci
28 {
29
30 class CircleNodeWithXSummaryBuilder : public CircleNodeSummaryBuilder
31 {
32 private:
33   std::vector<std::string> get_input_names(const luci::CircleNode *);
34 };
35
36 class CircleNodeWithINPUTSummaryBuilder : public CircleNodeSummaryBuilder
37 {
38 private:
39   std::vector<std::string> get_input_names(const luci::CircleNode *);
40 };
41
42 class CircleNodeWithXYSummaryBuilder : public CircleNodeSummaryBuilder
43 {
44 private:
45   std::vector<std::string> get_input_names(const luci::CircleNode *);
46 };
47
48 class CircleNodeWithFEATURESSummaryBuilder : public CircleNodeSummaryBuilder
49 {
50 private:
51   std::vector<std::string> get_input_names(const luci::CircleNode *);
52 };
53
54 template <class REDUCER_NODE>
55 class CircleNodeWithReducerSummaryBuilder : public CircleNodeSummaryBuilder
56 {
57 private:
58   std::vector<std::string> get_input_names(const luci::CircleNode *)
59   {
60     return {"input", "reduction_indices"};
61   }
62
63   void build_attributes(const luci::CircleNode *node, locop::NodeSummary &s)
64   {
65     auto mean = loco::must_cast<const REDUCER_NODE *>(node);
66     s.args().append("keep_dims", mean->keep_dims() ? "true" : "false");
67   }
68 };
69
70 } // namespace luci
71
72 namespace luci
73 {
74
75 class CircleAbsSummaryBuilder final : public CircleNodeWithXSummaryBuilder
76 {
77 };
78
79 class CircleAddSummaryBuilder final : public CircleNodeWithXYSummaryBuilder
80 {
81 private:
82   bool validate(const luci::CircleNode *node);
83   void build_attributes(const luci::CircleNode *node, locop::NodeSummary &s);
84 };
85
86 class CircleAddNSummaryBuilder final : public CircleNodeSummaryBuilder
87 {
88 private:
89   std::vector<std::string> get_input_names(const luci::CircleNode *node);
90 };
91
92 class CircleArgMaxSummaryBuilder final : public CircleNodeSummaryBuilder
93 {
94 private:
95   std::vector<std::string> get_input_names(const luci::CircleNode *);
96   void build_attributes(const luci::CircleNode *node, locop::NodeSummary &s);
97 };
98
99 class CircleArgMinSummaryBuilder final : public CircleNodeSummaryBuilder
100 {
101 private:
102   std::vector<std::string> get_input_names(const luci::CircleNode *);
103   void build_attributes(const luci::CircleNode *node, locop::NodeSummary &s);
104 };
105
106 class CircleAveragePool2DSummaryBuilder final : public CircleNodeSummaryBuilder
107 {
108 private:
109   bool validate(const luci::CircleNode *node);
110   std::vector<std::string> get_input_names(const luci::CircleNode *);
111   void build_attributes(const luci::CircleNode *node, locop::NodeSummary &s);
112 };
113
114 class CircleBatchMatMulSummaryBuilder final : public CircleNodeWithXYSummaryBuilder
115 {
116 private:
117   void build_attributes(const luci::CircleNode *node, locop::NodeSummary &s);
118 };
119
120 class CircleBatchToSpaceNDSummaryBuilder final : public CircleNodeSummaryBuilder
121 {
122 private:
123   std::vector<std::string> get_input_names(const luci::CircleNode *);
124 };
125
126 class CircleBCQFullyConnectedSummaryBuilder final : public CircleNodeSummaryBuilder
127 {
128 private:
129   bool validate(const luci::CircleNode *node);
130   std::vector<std::string> get_input_names(const luci::CircleNode *);
131   void build_attributes(const luci::CircleNode *node, locop::NodeSummary &s);
132 };
133
134 class CircleBCQGatherSummaryBuilder final : public CircleNodeSummaryBuilder
135 {
136 private:
137   std::vector<std::string> get_input_names(const luci::CircleNode *);
138   void build_attributes(const luci::CircleNode *node, locop::NodeSummary &s);
139 };
140
141 class CircleBidirectionalSequenceLSTMSummaryBuilder final : public CircleNodeSummaryBuilder
142 {
143 private:
144   std::vector<std::string> get_input_names(const luci::CircleNode *);
145   void build_attributes(const luci::CircleNode *node, locop::NodeSummary &s);
146 };
147
148 class CircleCastSummaryBuilder final : public CircleNodeSummaryBuilder
149 {
150 private:
151   std::vector<std::string> get_input_names(const luci::CircleNode *);
152   void build_attributes(const luci::CircleNode *node, locop::NodeSummary &s);
153 };
154
155 class CircleCeilSummaryBuilder final : public CircleNodeWithXSummaryBuilder
156 {
157 };
158
159 class CircleConcatenationSummaryBuilder final : public CircleNodeSummaryBuilder
160 {
161 private:
162   bool validate(const luci::CircleNode *node);
163   std::vector<std::string> get_input_names(const luci::CircleNode *node);
164   void build_attributes(const luci::CircleNode *node, locop::NodeSummary &s);
165 };
166
167 class CircleConstSummaryBuilder final : public CircleNodeSummaryBuilder
168 {
169 private:
170   void build_attributes(const luci::CircleNode *node, locop::NodeSummary &s);
171   void update_status(locop::NodeSummary &s);
172 };
173
174 class CircleConv2DSummaryBuilder final : public CircleNodeSummaryBuilder
175 {
176 private:
177   bool validate(const luci::CircleNode *node);
178   std::vector<std::string> get_input_names(const luci::CircleNode *);
179   void build_attributes(const luci::CircleNode *node, locop::NodeSummary &s);
180 };
181
182 class CircleCosSummaryBuilder final : public CircleNodeWithXSummaryBuilder
183 {
184 };
185
186 class CircleCustomSummaryBuilder final : public CircleNodeSummaryBuilder
187 {
188 private:
189   std::vector<std::string> get_input_names(const luci::CircleNode *node);
190   void build_attributes(const luci::CircleNode *node, locop::NodeSummary &s);
191 };
192
193 class CircleDensifySummaryBuilder final : public CircleNodeWithINPUTSummaryBuilder
194 {
195 };
196
197 class CircleDepthToSpaceSummaryBuilder final : public CircleNodeWithINPUTSummaryBuilder
198 {
199 private:
200   void build_attributes(const luci::CircleNode *node, locop::NodeSummary &s);
201 };
202
203 class CircleDepthwiseConv2DSummaryBuilder final : public CircleNodeSummaryBuilder
204 {
205 private:
206   bool validate(const luci::CircleNode *node);
207   std::vector<std::string> get_input_names(const luci::CircleNode *);
208   void build_attributes(const luci::CircleNode *node, locop::NodeSummary &s);
209 };
210
211 class CircleDequantizeSummaryBuilder final : public CircleNodeWithINPUTSummaryBuilder
212 {
213 };
214
215 class CircleDivSummaryBuilder final : public CircleNodeWithXYSummaryBuilder
216 {
217 };
218
219 class CircleEluSummaryBuilder final : public CircleNodeWithFEATURESSummaryBuilder
220 {
221 };
222
223 class CircleEqualSummaryBuilder final : public CircleNodeWithXYSummaryBuilder
224 {
225 };
226
227 class CircleExpSummaryBuilder final : public CircleNodeWithXSummaryBuilder
228 {
229 };
230
231 class CircleExpandDimsSummaryBuilder final : public CircleNodeSummaryBuilder
232 {
233 private:
234   std::vector<std::string> get_input_names(const luci::CircleNode *);
235 };
236
237 class CircleFakeQuantSummaryBuilder final : public CircleNodeSummaryBuilder
238 {
239 private:
240   std::vector<std::string> get_input_names(const luci::CircleNode *);
241   void build_attributes(const luci::CircleNode *node, locop::NodeSummary &s);
242 };
243
244 class CircleFillSummaryBuilder final : public CircleNodeSummaryBuilder
245 {
246 private:
247   std::vector<std::string> get_input_names(const luci::CircleNode *);
248 };
249
250 class CircleFloorSummaryBuilder final : public CircleNodeWithXSummaryBuilder
251 {
252 };
253
254 class CircleFloorDivSummaryBuilder final : public CircleNodeWithXYSummaryBuilder
255 {
256 };
257
258 class CircleFloorModSummaryBuilder final : public CircleNodeWithXYSummaryBuilder
259 {
260 };
261
262 class CircleFullyConnectedSummaryBuilder final : public CircleNodeSummaryBuilder
263 {
264 private:
265   bool validate(const luci::CircleNode *node);
266   std::vector<std::string> get_input_names(const luci::CircleNode *);
267   void build_attributes(const luci::CircleNode *node, locop::NodeSummary &s);
268 };
269
270 class CircleGatherSummaryBuilder final : public CircleNodeSummaryBuilder
271 {
272 private:
273   std::vector<std::string> get_input_names(const luci::CircleNode *);
274   void build_attributes(const luci::CircleNode *node, locop::NodeSummary &s);
275 };
276
277 class CircleGatherNdSummaryBuilder final : public CircleNodeSummaryBuilder
278 {
279 private:
280   std::vector<std::string> get_input_names(const luci::CircleNode *);
281 };
282
283 class CircleGreaterSummaryBuilder final : public CircleNodeWithXYSummaryBuilder
284 {
285 };
286
287 class CircleGreaterEqualSummaryBuilder final : public CircleNodeWithXYSummaryBuilder
288 {
289 };
290
291 class CircleIfSummaryBuilder final : public CircleNodeSummaryBuilder
292 {
293 private:
294   std::vector<std::string> get_input_names(const luci::CircleNode *node);
295   void build_attributes(const luci::CircleNode *node, locop::NodeSummary &s);
296 };
297
298 class CircleInstanceNormSummaryBuilder final : public CircleNodeSummaryBuilder
299 {
300 private:
301   bool validate(const luci::CircleNode *node);
302   std::vector<std::string> get_input_names(const luci::CircleNode *);
303   void build_attributes(const luci::CircleNode *node, locop::NodeSummary &s);
304 };
305
306 class CircleL2NormalizeSummaryBuilder final : public CircleNodeSummaryBuilder
307 {
308 private:
309   bool validate(const luci::CircleNode *node);
310   std::vector<std::string> get_input_names(const luci::CircleNode *);
311   void build_attributes(const luci::CircleNode *node, locop::NodeSummary &s);
312 };
313
314 class CircleL2Pool2DSummaryBuilder final : public CircleNodeSummaryBuilder
315 {
316 private:
317   bool validate(const luci::CircleNode *node);
318   std::vector<std::string> get_input_names(const luci::CircleNode *);
319   void build_attributes(const luci::CircleNode *node, locop::NodeSummary &s);
320 };
321
322 class CircleLeakyReluSummaryBuilder final : public CircleNodeWithFEATURESSummaryBuilder
323 {
324 private:
325   void build_attributes(const luci::CircleNode *node, locop::NodeSummary &s);
326 };
327
328 class CircleLessSummaryBuilder final : public CircleNodeWithXYSummaryBuilder
329 {
330 };
331
332 class CircleLessEqualSummaryBuilder final : public CircleNodeWithXYSummaryBuilder
333 {
334 };
335
336 class CircleLocalResponseNormalizationSummaryBuilder final
337   : public CircleNodeWithINPUTSummaryBuilder
338 {
339 private:
340   void build_attributes(const luci::CircleNode *node, locop::NodeSummary &s);
341 };
342
343 class CircleLogSummaryBuilder final : public CircleNodeWithXSummaryBuilder
344 {
345 };
346
347 class CircleLogicalAndSummaryBuilder final : public CircleNodeWithXYSummaryBuilder
348 {
349 };
350
351 class CircleLogicalNotSummaryBuilder final : public CircleNodeWithXSummaryBuilder
352 {
353 };
354
355 class CircleLogicalOrSummaryBuilder final : public CircleNodeWithXYSummaryBuilder
356 {
357 };
358
359 class CircleLogisticSummaryBuilder final : public CircleNodeWithXSummaryBuilder
360 {
361 };
362
363 class CircleLogSoftmaxSummaryBuilder final : public CircleNodeSummaryBuilder
364 {
365 private:
366   std::vector<std::string> get_input_names(const luci::CircleNode *);
367 };
368
369 class CircleMatrixDiagSummaryBuilder final : public CircleNodeSummaryBuilder
370 {
371 private:
372   std::vector<std::string> get_input_names(const luci::CircleNode *);
373 };
374
375 class CircleMatrixSetDiagSummaryBuilder final : public CircleNodeSummaryBuilder
376 {
377 private:
378   std::vector<std::string> get_input_names(const luci::CircleNode *);
379 };
380
381 class CircleMaximumSummaryBuilder final : public CircleNodeWithXYSummaryBuilder
382 {
383 };
384
385 class CircleMaxPool2DSummaryBuilder final : public CircleNodeSummaryBuilder
386 {
387 private:
388   bool validate(const luci::CircleNode *node);
389   std::vector<std::string> get_input_names(const luci::CircleNode *);
390   void build_attributes(const luci::CircleNode *node, locop::NodeSummary &s);
391 };
392
393 class CircleMeanSummaryBuilder final : public CircleNodeWithReducerSummaryBuilder<luci::CircleMean>
394 {
395 };
396
397 class CircleMinimumSummaryBuilder final : public CircleNodeWithXYSummaryBuilder
398 {
399 };
400
401 class CircleMirrorPadSummaryBuilder final : public CircleNodeSummaryBuilder
402 {
403 private:
404   bool validate(const luci::CircleNode *node);
405   std::vector<std::string> get_input_names(const luci::CircleNode *);
406   void build_attributes(const luci::CircleNode *node, locop::NodeSummary &s);
407 };
408
409 class CircleMulSummaryBuilder final : public CircleNodeWithXYSummaryBuilder
410 {
411 private:
412   bool validate(const luci::CircleNode *node);
413   void build_attributes(const luci::CircleNode *node, locop::NodeSummary &s);
414 };
415
416 class CircleNegSummaryBuilder final : public CircleNodeWithXSummaryBuilder
417 {
418 };
419
420 class CircleNonMaxSuppressionV4SummaryBuilder final : public CircleNodeSummaryBuilder
421 {
422 private:
423   std::vector<std::string> get_input_names(const luci::CircleNode *);
424 };
425
426 class CircleNonMaxSuppressionV5SummaryBuilder final : public CircleNodeSummaryBuilder
427 {
428 private:
429   std::vector<std::string> get_input_names(const luci::CircleNode *);
430 };
431
432 class CircleNotEqualSummaryBuilder final : public CircleNodeWithXYSummaryBuilder
433 {
434 };
435
436 class CircleOneHotSummaryBuilder final : public CircleNodeSummaryBuilder
437 {
438 private:
439   std::vector<std::string> get_input_names(const luci::CircleNode *);
440   void build_attributes(const luci::CircleNode *node, locop::NodeSummary &s);
441 };
442
443 class CirclePackSummaryBuilder final : public CircleNodeSummaryBuilder
444 {
445 private:
446   std::vector<std::string> get_input_names(const luci::CircleNode *node);
447   void build_attributes(const luci::CircleNode *node, locop::NodeSummary &s);
448 };
449
450 class CirclePadSummaryBuilder final : public CircleNodeSummaryBuilder
451 {
452 private:
453   std::vector<std::string> get_input_names(const luci::CircleNode *);
454 };
455
456 class CirclePadV2SummaryBuilder final : public CircleNodeSummaryBuilder
457 {
458 private:
459   std::vector<std::string> get_input_names(const luci::CircleNode *);
460 };
461
462 class CirclePowSummaryBuilder final : public CircleNodeWithXYSummaryBuilder
463 {
464 };
465
466 class CirclePReluSummaryBuilder final : public CircleNodeSummaryBuilder
467 {
468 private:
469   std::vector<std::string> get_input_names(const luci::CircleNode *);
470 };
471
472 class CircleQuantizeSummaryBuilder final : public CircleNodeWithINPUTSummaryBuilder
473 {
474 };
475
476 class CircleRangeSummaryBuilder final : public CircleNodeSummaryBuilder
477 {
478 private:
479   std::vector<std::string> get_input_names(const luci::CircleNode *);
480 };
481
482 class CircleRankSummaryBuilder final : public CircleNodeWithINPUTSummaryBuilder
483 {
484 };
485
486 class CircleReduceAnySummaryBuilder final
487   : public CircleNodeWithReducerSummaryBuilder<luci::CircleReduceAny>
488 {
489 };
490
491 class CircleReduceMaxSummaryBuilder final
492   : public CircleNodeWithReducerSummaryBuilder<luci::CircleReduceMax>
493 {
494 };
495
496 class CircleReduceMinSummaryBuilder final
497   : public CircleNodeWithReducerSummaryBuilder<luci::CircleReduceMin>
498 {
499 };
500
501 class CircleReduceProdSummaryBuilder final
502   : public CircleNodeWithReducerSummaryBuilder<luci::CircleReduceProd>
503 {
504 };
505
506 class CircleReluSummaryBuilder final : public CircleNodeWithFEATURESSummaryBuilder
507 {
508 };
509
510 class CircleRelu6SummaryBuilder final : public CircleNodeWithFEATURESSummaryBuilder
511 {
512 };
513
514 class CircleReluN1To1SummaryBuilder final : public CircleNodeWithFEATURESSummaryBuilder
515 {
516 };
517
518 class CircleReshapeSummaryBuilder final : public CircleNodeSummaryBuilder
519 {
520 private:
521   std::vector<std::string> get_input_names(const luci::CircleNode *);
522   void update_status(locop::NodeSummary &s);
523 };
524
525 class CircleResizeBilinearSummaryBuilder final : public CircleNodeSummaryBuilder
526 {
527 private:
528   std::vector<std::string> get_input_names(const luci::CircleNode *);
529   void build_attributes(const luci::CircleNode *node, locop::NodeSummary &s);
530 };
531
532 class CircleResizeNearestNeighborSummaryBuilder final : public CircleNodeSummaryBuilder
533 {
534 private:
535   std::vector<std::string> get_input_names(const luci::CircleNode *);
536   void build_attributes(const luci::CircleNode *node, locop::NodeSummary &s);
537 };
538
539 class CircleReverseSequenceSummaryBuilder final : public CircleNodeSummaryBuilder
540 {
541 private:
542   std::vector<std::string> get_input_names(const luci::CircleNode *);
543   void build_attributes(const luci::CircleNode *node, locop::NodeSummary &s);
544 };
545
546 class CircleReverseV2SummaryBuilder final : public CircleNodeSummaryBuilder
547 {
548 private:
549   std::vector<std::string> get_input_names(const luci::CircleNode *);
550 };
551
552 class CircleRoundSummaryBuilder final : public CircleNodeWithXSummaryBuilder
553 {
554 };
555
556 class CircleRsqrtSummaryBuilder final : public CircleNodeWithXSummaryBuilder
557 {
558 };
559
560 class CircleScatterNdSummaryBuilder final : public CircleNodeSummaryBuilder
561 {
562 private:
563   std::vector<std::string> get_input_names(const luci::CircleNode *);
564 };
565
566 class CircleSegmentSumSummaryBuilder final : public CircleNodeSummaryBuilder
567 {
568 private:
569   std::vector<std::string> get_input_names(const luci::CircleNode *);
570 };
571
572 class CircleSelectSummaryBuilder final : public CircleNodeSummaryBuilder
573 {
574 private:
575   std::vector<std::string> get_input_names(const luci::CircleNode *);
576 };
577
578 class CircleSelectV2SummaryBuilder final : public CircleNodeSummaryBuilder
579 {
580 private:
581   std::vector<std::string> get_input_names(const luci::CircleNode *);
582 };
583
584 class CircleShapeSummaryBuilder final : public CircleNodeWithINPUTSummaryBuilder
585 {
586 private:
587   void build_attributes(const luci::CircleNode *node, locop::NodeSummary &s);
588 };
589
590 class CircleSinSummaryBuilder final : public CircleNodeWithXSummaryBuilder
591 {
592 };
593
594 class CircleSliceSummaryBuilder final : public CircleNodeSummaryBuilder
595 {
596 private:
597   std::vector<std::string> get_input_names(const luci::CircleNode *);
598 };
599
600 class CircleSoftmaxSummaryBuilder final : public CircleNodeSummaryBuilder
601 {
602 private:
603   std::vector<std::string> get_input_names(const luci::CircleNode *);
604   void build_attributes(const luci::CircleNode *node, locop::NodeSummary &s);
605 };
606
607 class CircleSpaceToBatchNDSummaryBuilder final : public CircleNodeSummaryBuilder
608 {
609 private:
610   std::vector<std::string> get_input_names(const luci::CircleNode *);
611 };
612
613 class CircleSpaceToDepthSummaryBuilder final : public CircleNodeWithINPUTSummaryBuilder
614 {
615 private:
616   void build_attributes(const luci::CircleNode *node, locop::NodeSummary &s);
617 };
618
619 class CircleSparseToDenseSummaryBuilder final : public CircleNodeSummaryBuilder
620 {
621 private:
622   std::vector<std::string> get_input_names(const luci::CircleNode *);
623   void build_attributes(const luci::CircleNode *node, locop::NodeSummary &s);
624 };
625
626 class CircleSplitSummaryBuilder final : public CircleNodeSummaryBuilder
627 {
628 private:
629   std::vector<std::string> get_input_names(const luci::CircleNode *);
630   void build_attributes(const luci::CircleNode *node, locop::NodeSummary &s);
631 };
632
633 class CircleSplitVSummaryBuilder final : public CircleNodeSummaryBuilder
634 {
635 private:
636   std::vector<std::string> get_input_names(const luci::CircleNode *);
637   void build_attributes(const luci::CircleNode *node, locop::NodeSummary &s);
638 };
639
640 class CircleSqrtSummaryBuilder final : public CircleNodeWithXSummaryBuilder
641 {
642 };
643
644 class CircleSquareSummaryBuilder final : public CircleNodeWithXSummaryBuilder
645 {
646 };
647
648 class CircleSquaredDifferenceSummaryBuilder final : public CircleNodeWithXYSummaryBuilder
649 {
650 };
651
652 class CircleSqueezeSummaryBuilder final : public CircleNodeWithINPUTSummaryBuilder
653 {
654 private:
655   void build_attributes(const luci::CircleNode *node, locop::NodeSummary &s);
656 };
657
658 class CircleStridedSliceSummaryBuilder final : public CircleNodeSummaryBuilder
659 {
660 private:
661   std::vector<std::string> get_input_names(const luci::CircleNode *);
662   void build_attributes(const luci::CircleNode *node, locop::NodeSummary &s);
663 };
664
665 class CircleSubSummaryBuilder final : public CircleNodeWithXYSummaryBuilder
666 {
667 };
668
669 class CircleSumSummaryBuilder final : public CircleNodeWithReducerSummaryBuilder<luci::CircleSum>
670 {
671 };
672
673 class CircleSVDFSummaryBuilder final : public CircleNodeSummaryBuilder
674 {
675 private:
676   bool validate(const luci::CircleNode *node);
677   std::vector<std::string> get_input_names(const luci::CircleNode *);
678
679   void build_attributes(const luci::CircleNode *node, locop::NodeSummary &s);
680 };
681
682 class CircleTanhSummaryBuilder final : public CircleNodeWithXSummaryBuilder
683 {
684 };
685
686 class CircleTileSummaryBuilder final : public CircleNodeSummaryBuilder
687 {
688 private:
689   std::vector<std::string> get_input_names(const luci::CircleNode *);
690 };
691
692 class CircleTopKV2SummaryBuilder final : public CircleNodeSummaryBuilder
693 {
694 private:
695   std::vector<std::string> get_input_names(const luci::CircleNode *);
696 };
697
698 class CircleTransposeSummaryBuilder final : public CircleNodeSummaryBuilder
699 {
700 private:
701   std::vector<std::string> get_input_names(const luci::CircleNode *);
702 };
703
704 class CircleTransposeConvSummaryBuilder final : public CircleNodeSummaryBuilder
705 {
706 private:
707   bool validate(const luci::CircleNode *node);
708   std::vector<std::string> get_input_names(const luci::CircleNode *);
709   void build_attributes(const luci::CircleNode *node, locop::NodeSummary &s);
710 };
711
712 class CircleUnidirectionalSequenceLSTMSummaryBuilder final : public CircleNodeSummaryBuilder
713 {
714 private:
715   std::vector<std::string> get_input_names(const luci::CircleNode *);
716   void build_attributes(const luci::CircleNode *node, locop::NodeSummary &s);
717 };
718
719 class CircleUniqueSummaryBuilder final : public CircleNodeWithINPUTSummaryBuilder
720 {
721 private:
722   void build_attributes(const luci::CircleNode *node, locop::NodeSummary &s);
723 };
724
725 class CircleUnpackSummaryBuilder final : public CircleNodeSummaryBuilder
726 {
727 private:
728   std::vector<std::string> get_input_names(const luci::CircleNode *);
729   void build_attributes(const luci::CircleNode *node, locop::NodeSummary &s);
730 };
731
732 class CircleWhereSummaryBuilder final : public CircleNodeSummaryBuilder
733 {
734 private:
735   std::vector<std::string> get_input_names(const luci::CircleNode *);
736 };
737
738 class CircleWhileSummaryBuilder final : public CircleNodeSummaryBuilder
739 {
740 private:
741   std::vector<std::string> get_input_names(const luci::CircleNode *node);
742   void build_attributes(const luci::CircleNode *node, locop::NodeSummary &s);
743 };
744
745 class CircleZerosLikeSummaryBuilder final : public CircleNodeWithINPUTSummaryBuilder
746 {
747 };
748
749 class CircleBidirectionalSequenceLSTMOutSummaryBuilder final
750   : public CircleNodeWithINPUTSummaryBuilder
751 {
752 };
753
754 class CircleCustomOutSummaryBuilder final : public CircleNodeWithINPUTSummaryBuilder
755 {
756 };
757
758 class CircleIfOutSummaryBuilder final : public CircleNodeWithINPUTSummaryBuilder
759 {
760 };
761
762 class CircleInputSummaryBuilder final : public CircleNodeSummaryBuilder
763 {
764 };
765
766 class CircleNonMaxSuppressionV4OutSummaryBuilder final : public CircleNodeWithINPUTSummaryBuilder
767 {
768 };
769
770 class CircleNonMaxSuppressionV5OutSummaryBuilder final : public CircleNodeWithINPUTSummaryBuilder
771 {
772 };
773
774 class CircleOutputSummaryBuilder final : public CircleNodeSummaryBuilder
775 {
776 private:
777   std::vector<std::string> get_input_names(const luci::CircleNode *);
778 };
779
780 class CircleOutputDummySummaryBuilder final : public CircleNodeSummaryBuilder
781 {
782 };
783
784 class CircleOutputExcludeSummaryBuilder final : public CircleNodeSummaryBuilder
785 {
786 };
787
788 class CircleSplitOutSummaryBuilder final : public CircleNodeWithINPUTSummaryBuilder
789 {
790 };
791
792 class CircleSplitVOutSummaryBuilder final : public CircleNodeWithINPUTSummaryBuilder
793 {
794 };
795
796 class CircleTopKV2OutSummaryBuilder final : public CircleNodeSummaryBuilder
797 {
798 private:
799   std::vector<std::string> get_input_names(const luci::CircleNode *);
800 };
801
802 class CircleUniqueOutSummaryBuilder final : public CircleNodeSummaryBuilder
803 {
804 private:
805   std::vector<std::string> get_input_names(const luci::CircleNode *);
806 };
807
808 class CircleUnpackOutSummaryBuilder final : public CircleNodeSummaryBuilder
809 {
810 private:
811   std::vector<std::string> get_input_names(const luci::CircleNode *);
812 };
813
814 class CircleVariableSummaryBuilder final : public CircleNodeSummaryBuilder
815 {
816 };
817
818 class CircleWhileOutSummaryBuilder final : public CircleNodeSummaryBuilder
819 {
820 private:
821   std::vector<std::string> get_input_names(const luci::CircleNode *);
822 };
823
824 } // namespace luci
825
826 #endif // __LUCI_LOGEX_CIRCLE_NODE_SUMMARY_BUILDERS__