/*
 * Copyright 2020 Free Software Foundation, Inc.
 *
 * This file is part of GNU Radio
 *
 * SPDX-License-Identifier: GPL-3.0-or-later
 *
 */

/***********************************************************************************/
/* This file is automatically generated using bindtool and can be manually edited  */
/* The following lines can be configured to regenerate this file during cmake      */
/* If manual edits are made, the following tags should be modified accordingly.    */
/* BINDTOOL_GEN_AUTOMATIC(0)                                                       */
/* BINDTOOL_USE_PYGCCXML(0)                                                        */
/* BINDTOOL_HEADER_FILE(fsm.h)                                        */
/* BINDTOOL_HEADER_FILE_HASH(b9d1dcdec11c0bd17a33e91782c30663)                     */
/***********************************************************************************/

#include <pybind11/complex.h>
#include <pybind11/pybind11.h>
#include <pybind11/stl.h>

namespace py = pybind11;

#include <gnuradio/trellis/fsm.h>
// pydoc.h is automatically generated in the build directory
#include <fsm_pydoc.h>

void bind_fsm(py::module& m)
{

    using fsm = ::gr::trellis::fsm;


    py::class_<fsm, std::shared_ptr<fsm>>(m, "fsm", D(fsm))

        .def(py::init<>(), D(fsm, fsm, 0))
        .def(py::init<gr::trellis::fsm const&>(), py::arg("FSM"), D(fsm, fsm, 1))
        .def(py::init<int,
                      int,
                      int,
                      std::vector<int, std::allocator<int>> const&,
                      std::vector<int, std::allocator<int>> const&>(),
             py::arg("I"),
             py::arg("S"),
             py::arg("O"),
             py::arg("NS"),
             py::arg("OS"),
             D(fsm, fsm, 2))
        .def(py::init<char const*>(), py::arg("name"), D(fsm, fsm, 3))
        .def(py::init<int, int, std::vector<int, std::allocator<int>> const&>(),
             py::arg("k"),
             py::arg("n"),
             py::arg("G"),
             D(fsm, fsm, 4))
        .def(py::init<int, int>(),
             py::arg("mod_size"),
             py::arg("ch_length"),
             D(fsm, fsm, 5))
        .def(py::init<int, int, int>(),
             py::arg("P"),
             py::arg("M"),
             py::arg("L"),
             D(fsm, fsm, 6))
        .def(py::init<gr::trellis::fsm const&, gr::trellis::fsm const&>(),
             py::arg("FSM1"),
             py::arg("FSM2"),
             D(fsm, fsm, 7))
        .def(py::init<gr::trellis::fsm const&, gr::trellis::fsm const&, bool>(),
             py::arg("FSMo"),
             py::arg("FSMi"),
             py::arg("serial"),
             D(fsm, fsm, 8))
        .def(py::init<gr::trellis::fsm const&, int>(),
             py::arg("FSM"),
             py::arg("n"),
             D(fsm, fsm, 9))


        .def("I", &fsm::I, D(fsm, I))


        .def("S", &fsm::S, D(fsm, S))


        .def("O", &fsm::O, D(fsm, O))


        .def("NS", &fsm::NS, D(fsm, NS))


        .def("OS", &fsm::OS, D(fsm, OS))


        .def("PS", &fsm::PS, D(fsm, PS))


        .def("PI", &fsm::PI, D(fsm, PI))


        .def("TMi", &fsm::TMi, D(fsm, TMi))


        .def("TMl", &fsm::TMl, D(fsm, TMl))


        .def("write_trellis_svg",
             &fsm::write_trellis_svg,
             py::arg("filename"),
             py::arg("number_stages"),
             D(fsm, write_trellis_svg))


        .def("write_fsm_txt",
             &fsm::write_fsm_txt,
             py::arg("filename"),
             D(fsm, write_fsm_txt))

        ;
}
