From b0aa6650c766064448fd75d4fc88406240ec0925 Mon Sep 17 00:00:00 2001 From: Tiago Freitas Pereira <tiagofrepereira@gmail.com> Date: Wed, 4 Mar 2015 18:59:52 +0100 Subject: [PATCH] Fixed bugs in my bug fix --- bob/learn/em/MAP_gmm_trainer.cpp | 10 +++++++- bob/learn/em/ML_gmm_trainer.cpp | 42 +++++++++++++++++--------------- 2 files changed, 32 insertions(+), 20 deletions(-) diff --git a/bob/learn/em/MAP_gmm_trainer.cpp b/bob/learn/em/MAP_gmm_trainer.cpp index caef230..cecfea9 100644 --- a/bob/learn/em/MAP_gmm_trainer.cpp +++ b/bob/learn/em/MAP_gmm_trainer.cpp @@ -29,7 +29,6 @@ static auto MAP_GMMTrainer_doc = bob::extension::ClassDoc( .add_prototype("prior_gmm,relevance_factor, update_means, [update_variances], [update_weights], [mean_var_update_responsibilities_threshold]","") .add_prototype("prior_gmm,alpha, update_means, [update_variances], [update_weights], [mean_var_update_responsibilities_threshold]","") .add_prototype("other","") - .add_prototype("","") .add_parameter("prior_gmm", ":py:class:`bob.learn.em.GMMMachine`", "The prior GMM to be adapted (Universal Backgroud Model UBM).") .add_parameter("reynolds_adaptation", "bool", "Will use the Reynolds adaptation procedure? See Eq (14) from [Reynolds2000]_") @@ -122,6 +121,15 @@ static int PyBobLearnEMMAPGMMTrainer_init_base_trainer(PyBobLearnEMMAPGMMTrainer static int PyBobLearnEMMAPGMMTrainer_init(PyBobLearnEMMAPGMMTrainerObject* self, PyObject* args, PyObject* kwargs) { BOB_TRY + // get the number of command line arguments + int nargs = (args?PyTuple_Size(args):0) + (kwargs?PyDict_Size(kwargs):0); + + if (nargs==0){ + PyErr_Format(PyExc_RuntimeError, "number of arguments mismatch - %s (see help)", Py_TYPE(self)->tp_name); + MAP_GMMTrainer_doc.print_usage(); + return -1; + } + // If the constructor input is GMMBaseTrainer object if(PyBobLearnEMMAPGMMTrainer_Check(args)) return PyBobLearnEMMAPGMMTrainer_init_copy(self, args, kwargs); diff --git a/bob/learn/em/ML_gmm_trainer.cpp b/bob/learn/em/ML_gmm_trainer.cpp index 1ba604e..f71b5d8 100644 --- a/bob/learn/em/ML_gmm_trainer.cpp +++ b/bob/learn/em/ML_gmm_trainer.cpp @@ -27,7 +27,6 @@ static auto ML_GMMTrainer_doc = bob::extension::ClassDoc( ) .add_prototype("update_means, [update_variances], [update_weights], [mean_var_update_responsibilities_threshold]","") .add_prototype("other","") - .add_prototype("","") .add_parameter("update_means", "bool", "Update means on each iteration") .add_parameter("update_variances", "bool", "Update variances on each iteration") @@ -62,7 +61,7 @@ static int PyBobLearnEMMLGMMTrainer_init_base_trainer(PyBobLearnEMMLGMMTrainerOb PyObject* update_weights = Py_False; double mean_var_update_responsibilities_threshold = std::numeric_limits<double>::epsilon(); - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!|O!O!d", kwlist, + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|O!O!O!d", kwlist, &PyBool_Type, &update_means, &PyBool_Type, &update_variances, &PyBool_Type, &update_weights, @@ -81,24 +80,29 @@ static int PyBobLearnEMMLGMMTrainer_init_base_trainer(PyBobLearnEMMLGMMTrainerOb static int PyBobLearnEMMLGMMTrainer_init(PyBobLearnEMMLGMMTrainerObject* self, PyObject* args, PyObject* kwargs) { BOB_TRY - //Reading the input argument - PyObject* arg = 0; - if (PyTuple_Size(args)) - arg = PyTuple_GET_ITEM(args, 0); - else { - PyObject* tmp = PyDict_Values(kwargs); - auto tmp_ = make_safe(tmp); - arg = PyList_GET_ITEM(tmp, 0); + // get the number of command line arguments + int nargs = (args?PyTuple_Size(args):0) + (kwargs?PyDict_Size(kwargs):0); + + if (nargs==0) + return PyBobLearnEMMLGMMTrainer_init_base_trainer(self, args, kwargs); + else{ + + //Reading the input argument + PyObject* arg = 0; + if (PyTuple_Size(args)) + arg = PyTuple_GET_ITEM(args, 0); + else { + PyObject* tmp = PyDict_Values(kwargs); + auto tmp_ = make_safe(tmp); + arg = PyList_GET_ITEM(tmp, 0); + } + + // If the constructor input is GMMBaseTrainer object + if (PyBobLearnEMMLGMMTrainer_Check(arg)) + return PyBobLearnEMMLGMMTrainer_init_copy(self, args, kwargs); + else + return PyBobLearnEMMLGMMTrainer_init_base_trainer(self, args, kwargs); } - - // If the constructor input is GMMBaseTrainer object - if (PyBobLearnEMMLGMMTrainer_Check(arg)) - return PyBobLearnEMMLGMMTrainer_init_copy(self, args, kwargs); - else - return PyBobLearnEMMLGMMTrainer_init_base_trainer(self, args, kwargs); - - - BOB_CATCH_MEMBER("cannot create GMMBaseTrainer_init_bool", 0) return 0; } -- GitLab