Publishing R5 content (#72)
[platform/upstream/dldt.git] / inference-engine / src / inference_engine / builders / ie_eltwise_layer.cpp
1 // Copyright (C) 2018 Intel Corporation
2 // SPDX-License-Identifier: Apache-2.0
3 //
4
5 #include <builders/ie_eltwise_layer.hpp>
6 #include <details/caseless.hpp>
7
8 #include <vector>
9 #include <string>
10
11 using namespace InferenceEngine;
12
13 Builder::EltwiseLayer::EltwiseLayer(const std::string& name): LayerFragment("Eltwise", name) {
14     getLayer().getOutputPorts().resize(1);
15     setEltwiseType(EltwiseType::SUM);
16 }
17
18 Builder::EltwiseLayer::EltwiseLayer(Layer& genLayer): LayerFragment(genLayer) {
19     if (!details::CaselessEq<std::string>()(getLayer().getType(), "Eltwise"))
20         THROW_IE_EXCEPTION << "Cannot create EltwiseLayer decorator for layer " << getLayer().getType();
21
22     std::string operatorStr = getLayer().getParameters()["operation"];
23     if (operatorStr == "max") {
24         type = MAX;
25     } else if (operatorStr == "sum") {
26         type = SUM;
27     } else if (operatorStr == "mul") {
28         type = MUL;
29     }
30 }
31
32 Builder::EltwiseLayer& Builder::EltwiseLayer::setName(const std::string& name) {
33     getLayer().getName() = name;
34     return *this;
35 }
36
37 const std::vector<Port>& Builder::EltwiseLayer::getInputPorts() const {
38     return getLayer().getInputPorts();
39 }
40
41 Builder::EltwiseLayer& Builder::EltwiseLayer::setInputPorts(const std::vector<Port>& ports) {
42     getLayer().getInputPorts() = ports;
43     return *this;
44 }
45
46 const Port& Builder::EltwiseLayer::getOutputPort() const {
47     return getLayer().getOutputPorts()[0];
48 }
49
50 Builder::EltwiseLayer& Builder::EltwiseLayer::setOutputPort(const Port &port) {
51     getLayer().getOutputPorts()[0] = port;
52     return *this;
53 }
54
55 const std::vector<float> Builder::EltwiseLayer::getScales() const {
56     return getLayer().getParameters()["scales"].asFloats({});
57 }
58
59 // TODO: IR doesn't contain Scales!!!
60 Builder::EltwiseLayer& Builder::EltwiseLayer::setScales(const std::vector<float>& scales) {
61     getLayer().getParameters()["scales"] = scales;
62     return *this;
63 }
64
65 Builder::EltwiseLayer::EltwiseType Builder::EltwiseLayer::getEltwiseType() const {
66     return type;
67 }
68
69 Builder::EltwiseLayer& Builder::EltwiseLayer::setEltwiseType(Builder::EltwiseLayer::EltwiseType type) {
70     this->type = type;
71     std::string operatorStr;
72     switch (type) {
73     case MAX:
74         operatorStr = "max";
75         break;
76     case SUM:
77         operatorStr = "sum";
78         break;
79     case MUL:
80         operatorStr = "mul";
81     }
82     getLayer().getParameters()["operation"] = operatorStr;
83     return *this;
84 }
85
86