Imported Upstream version 1.22.1
[platform/core/ml/nnfw.git] / compiler / circle-mpqsolver / src / core / ErrorMetric.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 __MPQSOLVER_CORE_ERROR_METRIC_H__
18 #define __MPQSOLVER_CORE_ERROR_METRIC_H__
19
20 #include <vector>
21
22 namespace mpqsolver
23 {
24 namespace core
25 {
26
27 using Buffer = std::vector<char>;
28 using Output = std::vector<Buffer>;
29 using WholeOutput = std::vector<Output>;
30
31 class ErrorMetric
32 {
33 public:
34   virtual ~ErrorMetric() = default;
35
36   /**
37    * @brief abstract method for comparing first and second operands
38    */
39   virtual float compute(const WholeOutput &first, const WholeOutput &second) const = 0;
40 };
41
42 // Mean Absolute Error
43 class MAEMetric final : public ErrorMetric
44 {
45 public:
46   /**
47    * @brief compare first and second operands in MAE (Mean Average Error metric)
48    */
49   float compute(const WholeOutput &first, const WholeOutput &second) const;
50 };
51
52 } // namespace core
53 } // namespace mpqsolver
54
55 #endif //__MPQSOLVER_CORE_ERROR_METRIC_H__