1 /* Tencent is pleased to support the open source community by making ncnn available.
2  *
3  * Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved.
4  *
5  * Licensed under the BSD 3-Clause License (the "License"); you may not use this file except
6  * in compliance with the License. You may obtain a copy of the License at
7  *
8  * https://opensource.org/licenses/BSD-3-Clause
9  *
10  * Unless required by applicable law or agreed to in writing, software distributed
11  * under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
12  * CONDITIONS OF ANY KIND, either express or implied. See the License for the
13  * specific language governing permissions and limitations under the License.
14  */
15 
16 #ifndef PYBIND11_NCNN_LAYER_H
17 #define PYBIND11_NCNN_LAYER_H
18 
19 #include <layer.h>
20 #include "pybind11_bind.h"
21 
22 class PyLayer : public ncnn::Layer
23 {
24 public:
load_param(const ncnn::ParamDict & pd)25     virtual int load_param(const ncnn::ParamDict& pd)
26     {
27         PYBIND11_OVERRIDE(
28             int,
29             ncnn::Layer,
30             load_param,
31             pd);
32     }
33 
load_model(const ncnn::ModelBin & mb)34     virtual int load_model(const ncnn::ModelBin& mb)
35     {
36         PYBIND11_OVERRIDE(
37             int,
38             ncnn::Layer,
39             load_model,
40             mb);
41     }
42 
create_pipeline(const ncnn::Option & opt)43     virtual int create_pipeline(const ncnn::Option& opt)
44     {
45         PYBIND11_OVERRIDE(
46             int,
47             ncnn::Layer,
48             create_pipeline,
49             opt);
50     }
51 
destroy_pipeline(const ncnn::Option & opt)52     virtual int destroy_pipeline(const ncnn::Option& opt)
53     {
54         PYBIND11_OVERRIDE(
55             int,
56             ncnn::Layer,
57             destroy_pipeline,
58             opt);
59     }
60 
61 public:
forward(const std::vector<ncnn::Mat> & bottom_blobs,std::vector<ncnn::Mat> & top_blobs,const ncnn::Option & opt)62     virtual int forward(const std::vector<ncnn::Mat>& bottom_blobs, std::vector<ncnn::Mat>& top_blobs, const ncnn::Option& opt) const
63     {
64         PYBIND11_OVERRIDE_REFERENCE(
65             int,
66             ncnn::Layer,
67             forward,
68             bottom_blobs,
69             top_blobs,
70             opt);
71     }
forward(const ncnn::Mat & bottom_blob,ncnn::Mat & top_blob,const ncnn::Option & opt)72     virtual int forward(const ncnn::Mat& bottom_blob, ncnn::Mat& top_blob, const ncnn::Option& opt) const
73     {
74         PYBIND11_OVERRIDE_REFERENCE(
75             int,
76             ncnn::Layer,
77             forward,
78             bottom_blob,
79             top_blob,
80             opt);
81     }
82 
forward_inplace(std::vector<ncnn::Mat> & bottom_top_blobs,const ncnn::Option & opt)83     virtual int forward_inplace(std::vector<ncnn::Mat>& bottom_top_blobs, const ncnn::Option& opt) const
84     {
85         PYBIND11_OVERRIDE_REFERENCE(
86             int,
87             ncnn::Layer,
88             forward_inplace,
89             bottom_top_blobs,
90             opt);
91     }
forward_inplace(ncnn::Mat & bottom_top_blob,const ncnn::Option & opt)92     virtual int forward_inplace(ncnn::Mat& bottom_top_blob, const ncnn::Option& opt) const
93     {
94         PYBIND11_OVERRIDE_REFERENCE(
95             int,
96             ncnn::Layer,
97             forward_inplace,
98             bottom_top_blob,
99             opt);
100     }
101 
102 #if NCNN_VULKAN
103 public:
upload_model(ncnn::VkTransfer & cmd,const ncnn::Option & opt)104     virtual int upload_model(ncnn::VkTransfer& cmd, const ncnn::Option& opt)
105     {
106         PYBIND11_OVERRIDE_REFERENCE(
107             int,
108             ncnn::Layer,
109             upload_model,
110             cmd,
111             opt);
112     }
113 
114 public:
forward(const std::vector<ncnn::VkMat> & bottom_blobs,std::vector<ncnn::VkMat> & top_blobs,ncnn::VkCompute & cmd,const ncnn::Option & opt)115     virtual int forward(const std::vector<ncnn::VkMat>& bottom_blobs, std::vector<ncnn::VkMat>& top_blobs, ncnn::VkCompute& cmd, const ncnn::Option& opt) const
116     {
117         PYBIND11_OVERRIDE_REFERENCE(
118             int,
119             ncnn::Layer,
120             forward,
121             bottom_blobs,
122             top_blobs,
123             cmd,
124             opt);
125     }
forward(const ncnn::VkMat & bottom_blob,ncnn::VkMat & top_blob,ncnn::VkCompute & cmd,const ncnn::Option & opt)126     virtual int forward(const ncnn::VkMat& bottom_blob, ncnn::VkMat& top_blob, ncnn::VkCompute& cmd, const ncnn::Option& opt) const
127     {
128         PYBIND11_OVERRIDE_REFERENCE(
129             int,
130             ncnn::Layer,
131             forward,
132             bottom_blob,
133             top_blob,
134             cmd,
135             opt);
136     }
137 
forward_inplace(std::vector<ncnn::VkMat> & bottom_top_blobs,ncnn::VkCompute & cmd,const ncnn::Option & opt)138     virtual int forward_inplace(std::vector<ncnn::VkMat>& bottom_top_blobs, ncnn::VkCompute& cmd, const ncnn::Option& opt) const
139     {
140         PYBIND11_OVERRIDE_REFERENCE(
141             int,
142             ncnn::Layer,
143             forward_inplace,
144             bottom_top_blobs,
145             cmd,
146             opt);
147     }
forward_inplace(ncnn::VkMat & bottom_top_blob,ncnn::VkCompute & cmd,const ncnn::Option & opt)148     virtual int forward_inplace(ncnn::VkMat& bottom_top_blob, ncnn::VkCompute& cmd, const ncnn::Option& opt) const
149     {
150         PYBIND11_OVERRIDE_REFERENCE(
151             int,
152             ncnn::Layer,
153             forward_inplace,
154             bottom_top_blob,
155             cmd,
156             opt);
157     }
158 #endif // NCNN_VULKAN
159 };
160 
161 #endif