// ============================================================================
// This file was autogenerated
// It is presented side to side with its source: template_function_test.h
// It is not used in the compilation
//    (see integration_tests/bindings/pybind_mylib.cpp which contains the full binding
//     code, including this code)
// ============================================================================

#include <pybind11/pybind11.h>
#include <pybind11/stl.h>
#include <pybind11/functional.h>
#include <pybind11/numpy.h>
#include "mylib/mylib_main/mylib.h"

namespace py = pybind11;

// <litgen_glue_code>  // Autogenerated code below! Do not edit!

// </litgen_glue_code> // Autogenerated code end


void py_init_module_mylib(py::module& m)
{
    // <litgen_pydef> // Autogenerated code below! Do not edit!
    ////////////////////    <generated_from:template_function_test.h>    ////////////////////
    m.def("add_templated",
        py::overload_cast<int, int>(AddTemplated<int>), py::arg("a"), py::arg("b"));
    m.def("add_templated",
        py::overload_cast<double, double>(AddTemplated<double>), py::arg("a"), py::arg("b"));
    m.def("add_templated",
        py::overload_cast<std::string, std::string>(AddTemplated<std::string>), py::arg("a"), py::arg("b"));

    m.def("sum_vector_and_c_array",
        [](std::vector<int> xs, const std::array<int, 2>& other_values) -> int
        {
            auto SumVectorAndCArray_adapt_fixed_size_c_arrays = [](std::vector<int> xs, const std::array<int, 2>& other_values) -> int
            {
                auto lambda_result = SumVectorAndCArray<int>(xs, other_values.data());
                return lambda_result;
            };

            return SumVectorAndCArray_adapt_fixed_size_c_arrays(xs, other_values);
        },     py::arg("xs"), py::arg("other_values"));
    m.def("sum_vector_and_c_array",
        [](std::vector<std::string> xs, const std::array<std::string, 2>& other_values) -> std::string
        {
            auto SumVectorAndCArray_adapt_fixed_size_c_arrays = [](std::vector<std::string> xs, const std::array<std::string, 2>& other_values) -> std::string
            {
                auto lambda_result = SumVectorAndCArray<std::string>(xs, other_values.data());
                return lambda_result;
            };

            return SumVectorAndCArray_adapt_fixed_size_c_arrays(xs, other_values);
        },     py::arg("xs"), py::arg("other_values"));


    auto pyClassFooTemplateFunctionTest =
        py::class_<FooTemplateFunctionTest>
            (m, "FooTemplateFunctionTest", "")
        .def(py::init<>()) // implicit default constructor
        .def("sum_vector_and_c_array",
            [](FooTemplateFunctionTest & self, std::vector<int> xs, const std::array<int, 2>& other_values) -> int
            {
                auto SumVectorAndCArray_adapt_fixed_size_c_arrays = [&self](std::vector<int> xs, const std::array<int, 2>& other_values) -> int
                {
                    auto lambda_result = self.SumVectorAndCArray<int>(xs, other_values.data());
                    return lambda_result;
                };

                return SumVectorAndCArray_adapt_fixed_size_c_arrays(xs, other_values);
            },     py::arg("xs"), py::arg("other_values"))
        .def("sum_vector_and_c_array",
            [](FooTemplateFunctionTest & self, std::vector<std::string> xs, const std::array<std::string, 2>& other_values) -> std::string
            {
                auto SumVectorAndCArray_adapt_fixed_size_c_arrays = [&self](std::vector<std::string> xs, const std::array<std::string, 2>& other_values) -> std::string
                {
                    auto lambda_result = self.SumVectorAndCArray<std::string>(xs, other_values.data());
                    return lambda_result;
                };

                return SumVectorAndCArray_adapt_fixed_size_c_arrays(xs, other_values);
            },     py::arg("xs"), py::arg("other_values"))
        ;
    ////////////////////    </generated_from:template_function_test.h>    ////////////////////

    // </litgen_pydef> // Autogenerated code end
}
