--- /dev/null
+#ifndef NNCC_TFLITE_OP_CREATOR_H
+#define NNCC_TFLITE_OP_CREATOR_H
+
+#include <map>
+#include <vector>
+#include <memory>
+#include <cstdint>
+#include <stdexcept>
+
+#include "PluginException.h"
+#include "nnc/core/IR/model/graph/graph.h"
+#include "nnc/core/IR/model/graph/ir_node.h"
+#include "nnc/core/linalg/TensorVariant.h"
+#include "nncc/core/ADT/tensor/Shape.h"
+
+#include "schema_v3.h"
+#include "shape_helper.h"
+
+namespace nncc
+{
+namespace contrib
+{
+namespace frontend
+{
+namespace tflite
+{
+
+using namespace v3_tflite;
+
+namespace ops = nncc::contrib::core::IR::model::ops;
+using nncc::contrib::core::IR::model::Graph;
+using nncc::contrib::core::IR::model::ADT::INode;
+using IrTensor = nncc::contrib::core::ADT::TensorVariant;
+using nncc::core::ADT::tensor::Shape;
+
+class OpCreator
+{
+public:
+ using InputOps = std::vector<INode::Ref> &;
+ using InputParams = std::vector<std::shared_ptr<IrTensor>> &;
+
+ explicit OpCreator(Graph *g) : graph(g) {};
+
+ std::vector<INode::Ref> createConv2D(InputOps inputs, InputParams params,
+ const Conv2DOptions *opts);
+ std::vector<INode::Ref> createDepthConv2D(InputOps inputs, InputParams params,
+ const DepthwiseConv2DOptions *opts);
+ std::vector<INode::Ref> createConcat(InputOps inputs, InputParams params,
+ const ConcatenationOptions *opts);
+ std::vector<INode::Ref> createMaxPool(InputOps inputs, InputParams params,
+ const Pool2DOptions *opts);
+ std::vector<INode::Ref> createAvgPool(InputOps inputs, InputParams params,
+ const Pool2DOptions *opts);
+ std::vector<INode::Ref> createSoftmax(InputOps inputs, InputParams params,
+ const SoftmaxOptions *opts);
+ std::vector<INode::Ref> createReshape(InputOps inputs, InputParams params,
+ const ReshapeOptions *opts);
+
+private:
+ Graph *graph = nullptr;
+
+ template <typename OpType, typename... Types>
+ std::vector<INode::Ref> createOp(std::vector<INode::Ref> &inputs,
+ ActivationFunctionType activation, Types &&... args);
+};
+
+template <typename OpType, typename... Types>
+std::vector<INode::Ref> OpCreator::createOp(std::vector<INode::Ref> &inputs,
+ ActivationFunctionType activation, Types &&... args)
+{
+ throw std::runtime_error{"Not yet implemented"};
+}
+
+} // namespace tflite
+} // namespace frontend
+} // namespace contrib
+} // namespace nncc
+
+#endif // NNCC_TFLITE_OP_CREATOR_H
--- /dev/null
+#include "tflite_op_creator.h"
+
+namespace nncc
+{
+namespace contrib
+{
+namespace frontend
+{
+namespace tflite
+{
+
+std::vector<INode::Ref> OpCreator::createConv2D(InputOps inputs, InputParams params,
+ const Conv2DOptions *opts)
+{
+ throw std::runtime_error{"Not yet implemented"};
+}
+
+std::vector<INode::Ref> OpCreator::createDepthConv2D(InputOps inputs, InputParams params,
+ const DepthwiseConv2DOptions *opts)
+{
+ throw std::runtime_error{"Not yet implemented"};
+}
+
+std::vector<INode::Ref> OpCreator::createConcat(InputOps inputs, InputParams params,
+ const ConcatenationOptions *opts)
+{
+ throw std::runtime_error{"Not yet implemented"};
+}
+
+std::vector<INode::Ref> OpCreator::createMaxPool(InputOps inputs, InputParams params,
+ const Pool2DOptions *opts)
+{
+ throw std::runtime_error{"Not yet implemented"};
+}
+
+std::vector<INode::Ref> OpCreator::createAvgPool(InputOps inputs, InputParams params,
+ const Pool2DOptions *opts)
+{
+ throw std::runtime_error{"Not yet implemented"};
+}
+
+std::vector<INode::Ref> OpCreator::createSoftmax(InputOps inputs, InputParams params,
+ const SoftmaxOptions *opts)
+{
+ throw std::runtime_error{"Not yet implemented"};
+}
+
+std::vector<INode::Ref> OpCreator::createReshape(InputOps inputs, InputParams params,
+ const ReshapeOptions *opts)
+{
+ throw std::runtime_error{"Not yet implemented"};
+}
+
+} // namespace tflite
+} // namespace frontend
+} // namespace contrib
+} // namespace nncc