diff --git a/bob/learn/em/gmm_machine.cpp b/bob/learn/em/gmm_machine.cpp index 8e2d7caa45348676ee25860b57467e19a819ccec..f9cec3cc09b0eed4329c249695110677b61f6dbe 100644 --- a/bob/learn/em/gmm_machine.cpp +++ b/bob/learn/em/gmm_machine.cpp @@ -673,22 +673,22 @@ static PyObject* PyBobLearnEMGMMMachine_loglikelihood(PyBobLearnEMGMMMachineObje log_likelihood.print_usage(); return 0; } - + int shape_index = input->ndim - 1; //Getting the index of the dimensionality (0 for 1D arrays, 1 for 2D arrays) - + if (input->shape[shape_index] != (Py_ssize_t)self->cxx->getNInputs()){ PyErr_Format(PyExc_TypeError, "`%s' 1D `input` array should have %" PY_FORMAT_SIZE_T "d elements, not %" PY_FORMAT_SIZE_T "d", Py_TYPE(self)->tp_name, self->cxx->getNInputs(), input->shape[0]); log_likelihood.print_usage(); return 0; } - + double value = 0; if (input->ndim == 1) value = self->cxx->logLikelihood(*PyBlitzArrayCxx_AsBlitz<double,1>(input)); else value = self->cxx->logLikelihood(*PyBlitzArrayCxx_AsBlitz<double,2>(input)); - - + + return Py_BuildValue("d", value); BOB_CATCH_MEMBER("cannot compute the likelihood", 0) } @@ -795,8 +795,8 @@ static PyObject* PyBobLearnEMGMMMachine_accStatistics_(PyBobLearnEMGMMMachineObj PyBlitzArrayObject* input = 0; PyBobLearnEMGMMStatsObject* stats = 0; - if(!PyArg_ParseTupleAndKeywords(args, kwargs, "O&O!", kwlist, &PyBlitzArray_Converter,&input, - &PyBobLearnEMGMMStats_Type, &stats)) + if(!PyArg_ParseTupleAndKeywords(args, kwargs, "O&O!", kwlist, &PyBlitzArray_Converter,&input, + &PyBobLearnEMGMMStats_Type, &stats)) return 0; //protects acquired resources through this scope @@ -821,7 +821,7 @@ static auto set_variance_thresholds = bob::extension::FunctionDoc( true ) .add_prototype("input") -.add_parameter("input", "array_like <float, 1D>", "Input vector"); +.add_parameter("input", "float or array_like <float, 1D>", "The new variance threshold, or a vector of thresholds for all Gaussian components"); static PyObject* PyBobLearnEMGMMMachine_setVarianceThresholds_method(PyBobLearnEMGMMMachineObject* self, PyObject* args, PyObject* kwargs) { BOB_TRY @@ -832,7 +832,7 @@ static PyObject* PyBobLearnEMGMMMachine_setVarianceThresholds_method(PyBobLearnE if(PyArg_ParseTupleAndKeywords(args, kwargs, "d", kwlist, &input_number)){ self->cxx->setVarianceThresholds(input_number); } - else if(PyArg_ParseTupleAndKeywords(args, kwargs, "O&", kwlist, &PyBlitzArray_Converter,&input_array)) { + else if(PyArg_ParseTupleAndKeywords(args, kwargs, "O&", kwlist, &PyBlitzArray_Converter, &input_array)) { //protects acquired resources through this scope auto input_ = make_safe(input_array); self->cxx->setVarianceThresholds(*PyBlitzArrayCxx_AsBlitz<double,1>(input_array)); @@ -840,6 +840,8 @@ static PyObject* PyBobLearnEMGMMMachine_setVarianceThresholds_method(PyBobLearnE else return 0; + // clear any error that might have been set in the functions above + PyErr_Clear(); BOB_CATCH_MEMBER("cannot accumulate set the variance threshold", 0) Py_RETURN_NONE;