72d6f6e9b46dace7d16899209140b747158d7445
[platform/upstream/dldt.git] / inference-engine / tests / ngraph_functions / include / ngraph_functions / low_precision_transformations / concat_function.hpp
1 // Copyright (C) 2020 Intel Corporation
2 // SPDX-License-Identifier: Apache-2.0
3 //
4
5 #pragma once
6
7 #include <algorithm>
8 #include <memory>
9 #include <ngraph/ngraph.hpp>
10 #include "low_precision/layer_transformation.hpp"
11 #include "common/fake_quantize_on_data.hpp"
12 #include "common/dequantization_operations.hpp"
13
14 namespace ngraph {
15 namespace builder {
16 namespace subgraph {
17
18 class ConcatFunction {
19 public:
20     static std::shared_ptr<ngraph::Function> getOriginal(
21         const ngraph::element::Type precision,
22         const ngraph::Shape& inputShape,
23         const FakeQuantizeOnData& fakeQuantize1,
24         const FakeQuantizeOnData& fakeQuantize2);
25
26     static std::shared_ptr<ngraph::Function> getOriginalWithNeighbors(
27         const ngraph::element::Type precision,
28         const ngraph::Shape& inputShape,
29         const FakeQuantizeOnData& fqOnData1,
30         const FakeQuantizeOnData& fqOnData2,
31         const FakeQuantizeOnData& fqOnData3);
32
33     static std::shared_ptr<ngraph::Function> getOriginalWithIntermediate(
34         const ngraph::element::Type precision,
35         const ngraph::Shape& inputShape,
36         const bool transparentIntermediate,
37         const FakeQuantizeOnData& fqOnData1,
38         const FakeQuantizeOnData& fqOnData2);
39
40     static std::shared_ptr<ngraph::Function> getOriginalWithSplitedIntermediate(
41         const ngraph::element::Type precision,
42         const ngraph::Shape& inputShape,
43         const FakeQuantizeOnData& fqOnData1,
44         const FakeQuantizeOnData& fqOnData2);
45
46     static std::shared_ptr<ngraph::Function> getOriginalSelectionWithIntermediate(
47         const ngraph::element::Type precision,
48         const ngraph::Shape& inputShape,
49         const bool transparentIntermediate,
50         const FakeQuantizeOnData& fqOnData1,
51         const FakeQuantizeOnData& fqOnData2);
52
53     static std::shared_ptr<ngraph::Function> getOriginalWithDifferentPrecisionOnChilds(
54         const ngraph::element::Type precision,
55         const ngraph::Shape& inputShape,
56         const FakeQuantizeOnData& fqOnData1,
57         const FakeQuantizeOnData& fqOnData2);
58
59     static std::shared_ptr<ngraph::Function> getOriginalWithIntermediateWithConstant(
60         const ngraph::element::Type precision,
61         const ngraph::Shape& inputShape,
62         const bool transparentIntermediate,
63         const FakeQuantizeOnData& fqOnData1,
64         const FakeQuantizeOnData& fqOnData2);
65
66     static std::shared_ptr<ngraph::Function> getReference(
67         const ngraph::element::Type precision,
68         const ngraph::Shape& inputShape,
69         const FakeQuantizeOnData& fakeQuantize1,
70         const FakeQuantizeOnData& fakeQuantize2,
71         const DequantizationOperations& dequantizationOperations);
72
73     static std::shared_ptr<ngraph::Function> getReferenceWithNeighbors(
74         const ngraph::element::Type precision,
75         const ngraph::Shape& inputShape,
76         const FakeQuantizeOnData& fqOnData1,
77         const FakeQuantizeOnData& fqOnData2,
78         const FakeQuantizeOnData& fqOnData3,
79         const DequantizationOperations& dequantizationOperations1,
80         const DequantizationOperations& dequantizationOperations2);
81
82     static std::shared_ptr<ngraph::Function> getReferenceWithIntermediate(
83         const ngraph::element::Type precision,
84         const ngraph::Shape& inputShape,
85         const bool transparentIntermediate,
86         const FakeQuantizeOnData& fqOnData1,
87         const FakeQuantizeOnData& fqOnData2,
88         const DequantizationOperations& dequantizationOperations1,
89         const DequantizationOperations& dequantizationOperations2);
90
91     static std::shared_ptr<ngraph::Function> getReferenceWithSplitedIntermediate(
92         const ngraph::element::Type precision,
93         const ngraph::Shape& inputShape,
94         const FakeQuantizeOnData& fqOnData1,
95         const FakeQuantizeOnData& fqOnData2,
96         const DequantizationOperations& dequantizationOperations1,
97         const DequantizationOperations& dequantizationOperations2);
98
99     static std::shared_ptr<ngraph::Function> getReferenceSelectionWithIntermediate(
100         const ngraph::element::Type precision,
101         const ngraph::Shape& inputShape,
102         const bool transparentIntermediate,
103         const FakeQuantizeOnData& fqOnData1,
104         const FakeQuantizeOnData& fqOnData2,
105         const DequantizationOperations& dequantizationOperations1,
106         const DequantizationOperations& dequantizationOperations2);
107
108     static std::shared_ptr<ngraph::Function> getReferenceWithDifferentPrecisionOnChilds(
109         const ngraph::element::Type precision,
110         const ngraph::Shape& inputShape,
111         const bool multiChannel,
112         const FakeQuantizeOnData& fqOnData1,
113         const FakeQuantizeOnData& fqOnData2,
114         const DequantizationOperations& dequantizationOperations1,
115         const DequantizationOperations& dequantizationOperations2);
116
117     static std::shared_ptr<ngraph::Function> getReferenceWithIntermediateWithConstant(
118         const ngraph::element::Type precision,
119         const ngraph::Shape& inputShape,
120         const bool transparentIntermediate,
121         const FakeQuantizeOnData& fqOnData1,
122         const FakeQuantizeOnData& fqOnData2,
123         const ngraph::element::Type precisionBeforeOp,
124         const DequantizationOperations& dequantizationBefore,
125         const ngraph::element::Type precisionAfterOperation,
126         const DequantizationOperations& dequantizationAfter,
127         const ngraph::element::Type precisionAfterDequantization);
128 };
129
130 }  // namespace subgraph
131 }  // namespace builder
132 }  // namespace ngraph