From 7382d36a3e7b6d7a194a84d8c247db064cbd319e Mon Sep 17 00:00:00 2001 From: Tiago Freitas Pereira <tiagofrepereira@gmail.com> Date: Wed, 14 Jan 2015 15:49:55 +0100 Subject: [PATCH] Started to bind --- bob/learn/misc/kmeans_trainer.cpp | 124 ++++++++++++++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100644 bob/learn/misc/kmeans_trainer.cpp diff --git a/bob/learn/misc/kmeans_trainer.cpp b/bob/learn/misc/kmeans_trainer.cpp new file mode 100644 index 0000000..d143d16 --- /dev/null +++ b/bob/learn/misc/kmeans_trainer.cpp @@ -0,0 +1,124 @@ +/** + * @author Tiago de Freitas Pereira <tiago.pereira@idiap.ch> + * @date Tue 13 Jan 16:50:00 2015 + * + * @brief Python API for bob::learn::em + * + * Copyright (C) 2011-2014 Idiap Research Institute, Martigny, Switzerland + */ + +#include "main.h" + +/******************************************************************/ +/************ Constructor Section *********************************/ +/******************************************************************/ + +static auto KMeansTrainer_doc = bob::extension::ClassDoc( + BOB_EXT_MODULE_PREFIX ".KMeansTrainer", + "Trains a KMeans machine.\n" + "This class implements the expectation-maximization algorithm for a k-means machine.\n" + "See Section 9.1 of Bishop, \"Pattern recognition and machine learning\", 2006\n" + "It uses a random initialization of the means followed by the expectation-maximization algorithm", +).add_constructor( + bob::extension::FunctionDoc( + "__init__", + "Creates a KMeansTrainer", + "", + true + ) + .add_prototype("initialization_method","") + .add_prototype("other","") + .add_prototype("","") + + .add_parameter("initialization_method", ":py:class:`bob.learn.misc.KMeansTrainer.getInitializationMethod`", "The initialization method of the means") + .add_parameter("other", ":py:class:`bob.learn.misc.KMeansTrainer`", "A KMeansTrainer object to be copied.") + +); + + +static int PyBobLearnMiscKMeansTrainer_init_copy(PyBobLearnMiscKMeansMachineObject* self, PyObject* args, PyObject* kwargs) { + + char** kwlist = KMeansMachine_doc.kwlist(1); + PyBobLearnMiscKMeansMachineObject* tt; + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!", kwlist, &PyBobLearnMiscKMeansMachine_Type, &tt)){ + KMeansMachine_doc.print_usage(); + return -1; + } + + self->cxx.reset(new bob::learn::misc::KMeansMachine(*tt->cxx)); + return 0; +} + + + + +static void PyBobLearnMiscKMeansMachine_delete(PyBobLearnMiscKMeansMachineObject* self) { + self->cxx.reset(); + Py_TYPE(self)->tp_free((PyObject*)self); +} + + +int PyBobLearnMiscKMeansMachine_Check(PyObject* o) { + return PyObject_IsInstance(o, reinterpret_cast<PyObject*>(&PyBobLearnMiscKMeansMachine_Type)); +} + + +/******************************************************************/ +/************ Variables Section ***********************************/ +/******************************************************************/ + + +static PyGetSetDef PyBobLearnMiscKMeansTrainer_getseters[] = { + {0} // Sentinel +}; + + +/******************************************************************/ +/************ Functions Section ***********************************/ +/******************************************************************/ + + + + + +static PyMethodDef PyBobLearnMiscKMeansTrainer_methods[] = { + {0} /* Sentinel */ +}; + + +/******************************************************************/ +/************ Module Section **************************************/ +/******************************************************************/ + +// Define the Gaussian type struct; will be initialized later +PyTypeObject PyBobLearnMiscKMeansTrainer_Type = { + PyVarObject_HEAD_INIT(0,0) + 0 +}; + +bool init_BobLearnMiscKMeansTrainer(PyObject* module) +{ + // initialize the type struct + PyBobLearnMiscKMeansTrainer_Type.tp_name = KMeansTrainer_doc.name(); + PyBobLearnMiscKMeansTrainer_Type.tp_basicsize = sizeof(PyBobLearnMiscKMeansTrainerObject); + PyBobLearnMiscKMeansTrainer_Type.tp_flags = Py_TPFLAGS_DEFAULT; + PyBobLearnMiscKMeansTrainer_Type.tp_doc = KMeansTrainer_doc.doc(); + + // set the functions + PyBobLearnMiscKMeansTrainer_Type.tp_new = PyType_GenericNew; + PyBobLearnMiscKMeansTrainer_Type.tp_init = reinterpret_cast<initproc>(PyBobLearnMiscKMeansTrainer_init); + PyBobLearnMiscKMeansTrainer_Type.tp_dealloc = reinterpret_cast<destructor>(PyBobLearnMiscKTrainer_delete); + //PyBobLearnMiscKMeansTrainer_Type.tp_richcompare = reinterpret_cast<richcmpfunc>(PyBobLearnMiscKMeansTrainer_RichCompare); + PyBobLearnMiscKMeansTrainer_Type.tp_methods = PyBobLearnMiscKMeansTrainer_methods; + PyBobLearnMiscKMeansTrainer_Type.tp_getset = PyBobLearnMiscKMeansTrainer_getseters; + //PyBobLearnMiscGMMMachine_Type.tp_call = reinterpret_cast<ternaryfunc>(PyBobLearnMiscGMMMachine_loglikelihood); + + + // check that everything is fine + if (PyType_Ready(&PyBobLearnMiscKMeansTrainer_Type) < 0) return false; + + // add the type to the module + Py_INCREF(&PyBobLearnMiscKMeansTrainer_Type); + return PyModule_AddObject(module, "_KMeansTrainer", (PyObject*)&PyBobLearnMiscKMeansTrainer_Type) >= 0; +} + -- GitLab