// ============================================================================
// This file was autogenerated
// It is presented side to side with its source: class_copy_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:class_copy_test.h>    ////////////////////
    auto pyClassCopyable_ImplicitCopyCtor =
        py::class_<Copyable_ImplicitCopyCtor>
            (m, "Copyable_ImplicitCopyCtor", "")
        .def(py::init<>([](
        int a = 1)
        {
            auto r = std::make_unique<Copyable_ImplicitCopyCtor>();
            r->a = a;
            return r;
        })
        , py::arg("a") = 1
        )
        .def_readwrite("a", &Copyable_ImplicitCopyCtor::a, "")
        .def("__copy__",  [](const Copyable_ImplicitCopyCtor &self) {
            return Copyable_ImplicitCopyCtor(self);
        })
        .def("__deepcopy__",  [](const Copyable_ImplicitCopyCtor &self, py::dict) {
            return Copyable_ImplicitCopyCtor(self);
        }, py::arg("memo"))    ;


    auto pyClassCopyable_ExplicitCopyCtor =
        py::class_<Copyable_ExplicitCopyCtor>
            (m, "Copyable_ExplicitCopyCtor", "")
        .def(py::init<>())
        .def(py::init<const Copyable_ExplicitCopyCtor &>(),
            py::arg("other"))
        .def_readwrite("a", &Copyable_ExplicitCopyCtor::a, "")
        .def("__copy__",  [](const Copyable_ExplicitCopyCtor &self) {
            return Copyable_ExplicitCopyCtor(self);
        })
        .def("__deepcopy__",  [](const Copyable_ExplicitCopyCtor &self, py::dict) {
            return Copyable_ExplicitCopyCtor(self);
        }, py::arg("memo"))    ;


    auto pyClassCopyable_ExplicitPrivateCopyCtor =
        py::class_<Copyable_ExplicitPrivateCopyCtor>
            (m, "Copyable_ExplicitPrivateCopyCtor", "")
        .def(py::init<>())
        .def_readwrite("a", &Copyable_ExplicitPrivateCopyCtor::a, "")
        ;


    auto pyClassCopyable_DeletedCopyCtor =
        py::class_<Copyable_DeletedCopyCtor>
            (m, "Copyable_DeletedCopyCtor", "")
        .def_readwrite("a", &Copyable_DeletedCopyCtor::a, "")
        .def(py::init<>())
        ;

    { // <namespace AAA>
        py::module_ pyNsAAA = m.def_submodule("aaa", "");
        auto pyNsAAA_ClassCopyable_Template_int =
            py::class_<AAA::Copyable_Template<int>>
                (pyNsAAA, "Copyable_Template_int", "")
            .def(py::init<>([](
            int value = int())
            {
                auto r = std::make_unique<AAA::Copyable_Template<int>>();
                r->value = value;
                return r;
            })
            , py::arg("value") = int()
            )
            .def_readwrite("value", &AAA::Copyable_Template<int>::value, "")
            .def("__copy__",  [](const AAA::Copyable_Template<int> &self) {
                return AAA::Copyable_Template<int>(self);
            })
            .def("__deepcopy__",  [](const AAA::Copyable_Template<int> &self, py::dict) {
                return AAA::Copyable_Template<int>(self);
            }, py::arg("memo"))    ;
    } // </namespace AAA>
    ////////////////////    </generated_from:class_copy_test.h>    ////////////////////

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