Imported Upstream version 1.11.1
[platform/core/ml/nnfw.git] / compiler / luci / service / src / CircleShapeSignatureInferenceRule.cpp
1 /*
2  * Copyright (c) 2020 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 #include "luci/Service/CircleShapeSignatureInferenceRule.h"
18
19 #include <luci/Log.h>
20
21 namespace
22 {
23
24 std::ostream &operator<<(std::ostream &os, const luci::ShapeSignature &shape_signature)
25 {
26   os << "[";
27   for (uint32_t r = 0; r < shape_signature.rank(); ++r)
28   {
29     if (r)
30       os << ",";
31     os << shape_signature.dim(r);
32   }
33   os << "]";
34   return os;
35 }
36
37 } // namespace
38
39 namespace luci
40 {
41
42 bool CircleShapeSignatureInferenceRule::infer(const luci::CircleNode *circle_node,
43                                               ShapeSignature &shape_signature) const
44 {
45   LOGGER(l);
46
47   // There is nothing to check before ShapeSignatureInference.
48
49   ShapeSignatureInferenceAlgorithm alg;
50
51   shape_signature = circle_node->accept(&alg);
52
53   VERBOSE(l, 1) << "[luci] Shape Signature( " << circle_node->name() << " )";
54   VERBOSE(l, 1) << "    before: " << circle_node->shape_signature();
55   VERBOSE(l, 1) << "     after: " << shape_signature;
56
57   return true;
58 }
59
60 } // namespace luci