[LPT] integration branch: Reshape fix, Concat generalization, runtime info usage...
[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> getOriginal(
27         const ngraph::element::Type precision,
28         const ngraph::Shape& inputShape,
29         const FakeQuantizeOnDataWithConstant& fakeQuantize1,
30         const FakeQuantizeOnDataWithConstant& fakeQuantize2);
31
32     static std::shared_ptr<ngraph::Function> getOriginalWithNeighbors(
33         const ngraph::element::Type precision,
34         const ngraph::Shape& inputShape,
35         const FakeQuantizeOnData& fqOnData1,
36         const FakeQuantizeOnData& fqOnData2,
37         const FakeQuantizeOnData& fqOnData3);
38
39     static std::shared_ptr<ngraph::Function> getOriginalWithIntermediate(
40         const ngraph::element::Type precision,
41         const ngraph::Shape& inputShape,
42         const bool transparentIntermediate,
43         const FakeQuantizeOnData& fqOnData1,
44         const FakeQuantizeOnData& fqOnData2);
45
46     static std::shared_ptr<ngraph::Function> getOriginalWithSplitedIntermediate(
47         const ngraph::element::Type precision,
48         const ngraph::Shape& inputShape,
49         const FakeQuantizeOnData& fqOnData1,
50         const FakeQuantizeOnData& fqOnData2);
51
52     static std::shared_ptr<ngraph::Function> getOriginalSelectionWithIntermediate(
53         const ngraph::element::Type precision,
54         const ngraph::Shape& inputShape,
55         const bool transparentIntermediate,
56         const FakeQuantizeOnData& fqOnData1,
57         const FakeQuantizeOnData& fqOnData2);
58
59     static std::shared_ptr<ngraph::Function> getOriginalWithDifferentPrecisionOnChilds(
60         const ngraph::element::Type precision,
61         const ngraph::Shape& inputShape,
62         const FakeQuantizeOnData& fqOnData1,
63         const FakeQuantizeOnData& fqOnData2);
64
65     static std::shared_ptr<ngraph::Function> getOriginalWithIntermediateWithConstant(
66         const ngraph::element::Type precision,
67         const ngraph::Shape& inputShape,
68         const bool transparentIntermediate,
69         const FakeQuantizeOnData& fqOnData1,
70         const FakeQuantizeOnData& fqOnData2);
71
72     static std::shared_ptr<ngraph::Function> getReference(
73         const ngraph::element::Type precision,
74         const ngraph::Shape& inputShape,
75         const FakeQuantizeOnData& fakeQuantize1,
76         const FakeQuantizeOnData& fakeQuantize2,
77         const DequantizationOperations& dequantizationOperations);
78
79     static std::shared_ptr<ngraph::Function> getReference(
80         const ngraph::element::Type precision,
81         const ngraph::Shape& inputShape,
82         const FakeQuantizeOnDataWithConstant& fakeQuantize1,
83         const FakeQuantizeOnDataWithConstant& fakeQuantize2,
84         const DequantizationOperations& dequantizationOperations);
85
86     static std::shared_ptr<ngraph::Function> getReferenceWithNeighbors(
87         const ngraph::element::Type precision,
88         const ngraph::Shape& inputShape,
89         const FakeQuantizeOnData& fqOnData1,
90         const FakeQuantizeOnData& fqOnData2,
91         const FakeQuantizeOnData& fqOnData3,
92         const DequantizationOperations& dequantizationOperations1,
93         const DequantizationOperations& dequantizationOperations2);
94
95     static std::shared_ptr<ngraph::Function> getReferenceWithIntermediate(
96         const ngraph::element::Type precision,
97         const ngraph::Shape& inputShape,
98         const bool transparentIntermediate,
99         const FakeQuantizeOnData& fqOnData1,
100         const FakeQuantizeOnData& fqOnData2,
101         const DequantizationOperations& dequantizationOperations1,
102         const DequantizationOperations& dequantizationOperations2);
103
104     static std::shared_ptr<ngraph::Function> getReferenceWithSplitedIntermediate(
105         const ngraph::element::Type precision,
106         const ngraph::Shape& inputShape,
107         const FakeQuantizeOnData& fqOnData1,
108         const FakeQuantizeOnData& fqOnData2,
109         const DequantizationOperations& dequantizationOperations1,
110         const DequantizationOperations& dequantizationOperations2);
111
112     static std::shared_ptr<ngraph::Function> getReferenceSelectionWithIntermediate(
113         const ngraph::element::Type precision,
114         const ngraph::Shape& inputShape,
115         const bool transparentIntermediate,
116         const FakeQuantizeOnData& fqOnData1,
117         const FakeQuantizeOnData& fqOnData2,
118         const DequantizationOperations& dequantizationOperations1,
119         const DequantizationOperations& dequantizationOperations2);
120
121     static std::shared_ptr<ngraph::Function> getReferenceWithDifferentPrecisionOnChilds(
122         const ngraph::element::Type precision,
123         const ngraph::Shape& inputShape,
124         const bool multiChannel,
125         const FakeQuantizeOnData& fqOnData1,
126         const FakeQuantizeOnData& fqOnData2,
127         const DequantizationOperations& dequantizationOperations1,
128         const DequantizationOperations& dequantizationOperations2);
129
130     static std::shared_ptr<ngraph::Function> getReferenceWithIntermediateWithConstant(
131         const ngraph::element::Type precision,
132         const ngraph::Shape& inputShape,
133         const bool transparentIntermediate,
134         const FakeQuantizeOnData& fqOnData1,
135         const FakeQuantizeOnData& fqOnData2,
136         const ngraph::element::Type precisionBeforeOp,
137         const DequantizationOperations& dequantizationBefore,
138         const ngraph::element::Type precisionAfterOperation,
139         const DequantizationOperations& dequantizationAfter,
140         const ngraph::element::Type precisionAfterDequantization);
141 };
142
143 }  // namespace subgraph
144 }  // namespace builder
145 }  // namespace ngraph