From 2f898b2a91272624db93eb0c5a25d3f090be40a1 Mon Sep 17 00:00:00 2001
From: Andre Anjos <andre.anjos@idiap.ch>
Date: Tue, 14 Jan 2014 14:19:52 +0100
Subject: [PATCH] Activation functor tests are now passing

---
 xbob/machine/__init__.py              |  2 ++
 xbob/machine/activation.cpp           |  4 ++--
 xbob/machine/externals.cpp            |  5 ++++-
 xbob/machine/identity_activation.cpp  |  2 +-
 xbob/machine/linear_activation.cpp    |  4 ++--
 xbob/machine/logistic_activation.cpp  |  2 +-
 xbob/machine/main.cpp                 | 16 +++++++++-------
 xbob/machine/mult_tanh_activation.cpp |  4 ++--
 xbob/machine/tanh_activation.cpp      |  2 +-
 9 files changed, 24 insertions(+), 17 deletions(-)

diff --git a/xbob/machine/__init__.py b/xbob/machine/__init__.py
index 2f37f43..ead6eb6 100644
--- a/xbob/machine/__init__.py
+++ b/xbob/machine/__init__.py
@@ -1,4 +1,6 @@
 from ._library import *
+from ._library import __version__, __api_version__
+from . import _externals
 
 #from . import __linear__
 #from . import __mlp__
diff --git a/xbob/machine/activation.cpp b/xbob/machine/activation.cpp
index 40811f2..7a2ebf7 100644
--- a/xbob/machine/activation.cpp
+++ b/xbob/machine/activation.cpp
@@ -143,7 +143,7 @@ static PyObject* PyBobMachineActivation_call1(PyBobMachineActivationObject* o,
     }
 
     Py_INCREF(res);
-    return res;
+    return PyBlitzArray_NUMPY_WRAP(res);
 
   }
 
@@ -220,7 +220,7 @@ static PyObject* PyBobMachineActivation_call2(PyBobMachineActivationObject* o,
   }
 
   Py_INCREF(res);
-  return reinterpret_cast<PyObject*>(res);
+  return PyBlitzArray_NUMPY_WRAP(reinterpret_cast<PyObject*>(res));
 
 }
 
diff --git a/xbob/machine/externals.cpp b/xbob/machine/externals.cpp
index bd18228..bf8380b 100644
--- a/xbob/machine/externals.cpp
+++ b/xbob/machine/externals.cpp
@@ -62,6 +62,9 @@ PyMODINIT_FUNC XBOB_EXT_ENTRY_NAME (void) {
   /* register some constants */
   PyModule_AddIntConstant(m, "__api_version__", XBOB_MACHINE_API_VERSION);
   PyModule_AddStringConstant(m, "__version__", XBOB_EXT_MODULE_VERSION);
-  PyModule_AddObject(m, "versions", build_version_dictionary());
+
+  PyObject* dict = build_version_dictionary();
+  if (!dict) return;
+  PyModule_AddObject(m, "versions", dict);
 
 }
diff --git a/xbob/machine/identity_activation.cpp b/xbob/machine/identity_activation.cpp
index ce5849a..c21f748 100644
--- a/xbob/machine/identity_activation.cpp
+++ b/xbob/machine/identity_activation.cpp
@@ -58,7 +58,7 @@ static void PyBobMachineIdentityActivation_delete
 PyTypeObject PyBobMachineIdentityActivation_Type = {
     PyObject_HEAD_INIT(0)
     0,                                                  /*ob_size*/
-    0,                                                  /*tp_name*/
+    s_identityactivation_str,                           /*tp_name*/
     sizeof(PyBobMachineIdentityActivationObject),       /*tp_basicsize*/
     0,                                                  /*tp_itemsize*/
     (destructor)PyBobMachineIdentityActivation_delete,  /*tp_dealloc*/
diff --git a/xbob/machine/linear_activation.cpp b/xbob/machine/linear_activation.cpp
index c2919a8..10c74cc 100644
--- a/xbob/machine/linear_activation.cpp
+++ b/xbob/machine/linear_activation.cpp
@@ -26,7 +26,7 @@ static int PyBobMachineLinearActivation_init
 (PyBobMachineLinearActivationObject* self, PyObject* args, PyObject* kwds) {
 
   /* Parses input arguments in a single shot */
-  static const char* const_kwlist[] = {0};
+  static const char* const_kwlist[] = {"C", 0};
   static char** kwlist = const_cast<char**>(const_kwlist);
 
   double C = 1.0;
@@ -87,7 +87,7 @@ static PyGetSetDef PyBobMachineLinearActivation_getseters[] = {
 PyTypeObject PyBobMachineLinearActivation_Type = {
     PyObject_HEAD_INIT(0)
     0,                                                  /*ob_size*/
-    0,                                                  /*tp_name*/
+    s_linearactivation_str,                             /*tp_name*/
     sizeof(PyBobMachineLinearActivationObject),         /*tp_basicsize*/
     0,                                                  /*tp_itemsize*/
     (destructor)PyBobMachineLinearActivation_delete,    /*tp_dealloc*/
diff --git a/xbob/machine/logistic_activation.cpp b/xbob/machine/logistic_activation.cpp
index d1ff0df..079af69 100644
--- a/xbob/machine/logistic_activation.cpp
+++ b/xbob/machine/logistic_activation.cpp
@@ -58,7 +58,7 @@ static void PyBobMachineLogisticActivation_delete
 PyTypeObject PyBobMachineLogisticActivation_Type = {
     PyObject_HEAD_INIT(0)
     0,                                                  /*ob_size*/
-    0,                                                  /*tp_name*/
+    s_logisticactivation_str,                           /*tp_name*/
     sizeof(PyBobMachineLogisticActivationObject),       /*tp_basicsize*/
     0,                                                  /*tp_itemsize*/
     (destructor)PyBobMachineLogisticActivation_delete,  /*tp_dealloc*/
diff --git a/xbob/machine/main.cpp b/xbob/machine/main.cpp
index 8730a65..e44da45 100644
--- a/xbob/machine/main.cpp
+++ b/xbob/machine/main.cpp
@@ -27,21 +27,23 @@ PyMODINIT_FUNC XBOB_EXT_ENTRY_NAME (void) {
   PyBobMachineActivation_Type.tp_new = PyType_GenericNew;
   if (PyType_Ready(&PyBobMachineActivation_Type) < 0) return;
 
-  PyBobMachineIdentityActivation_Type.tp_new = PyType_GenericNew;
+  PyBobMachineIdentityActivation_Type.tp_base = &PyBobMachineActivation_Type;
   if (PyType_Ready(&PyBobMachineIdentityActivation_Type) < 0) return;
 
-  PyBobMachineLinearActivation_Type.tp_new = PyType_GenericNew;
+  PyBobMachineLinearActivation_Type.tp_base = &PyBobMachineActivation_Type;
   if (PyType_Ready(&PyBobMachineLinearActivation_Type) < 0) return;
 
-  PyBobMachineLogisticActivation_Type.tp_new = PyType_GenericNew;
+  PyBobMachineLogisticActivation_Type.tp_base = &PyBobMachineActivation_Type;
   if (PyType_Ready(&PyBobMachineLogisticActivation_Type) < 0) return;
 
-  PyBobMachineHyperbolicTangentActivation_Type.tp_new = PyType_GenericNew;
+  PyBobMachineHyperbolicTangentActivation_Type.tp_base =
+    &PyBobMachineActivation_Type;
   if (PyType_Ready(&PyBobMachineHyperbolicTangentActivation_Type) < 0) return;
 
-  PyBobMachineMultipliedHyperbolicTangentActivation_Type.tp_new =
-    PyType_GenericNew;
-  if (PyType_Ready(&PyBobMachineMultipliedHyperbolicTangentActivation_Type) < 0) return;
+  PyBobMachineMultipliedHyperbolicTangentActivation_Type.tp_base =
+    &PyBobMachineActivation_Type;
+  if (PyType_Ready(&PyBobMachineMultipliedHyperbolicTangentActivation_Type) < 0)
+    return;
 
   PyObject* m = Py_InitModule3(XBOB_EXT_MODULE_NAME, library_methods, library_docstr);
 
diff --git a/xbob/machine/mult_tanh_activation.cpp b/xbob/machine/mult_tanh_activation.cpp
index c06ada6..ff917af 100644
--- a/xbob/machine/mult_tanh_activation.cpp
+++ b/xbob/machine/mult_tanh_activation.cpp
@@ -28,7 +28,7 @@ static int PyBobMachineMultipliedHyperbolicTangentActivation_init
 (PyBobMachineMultipliedHyperbolicTangentActivationObject* self, PyObject* args, PyObject* kwds) {
 
   /* Parses input arguments in a single shot */
-  static const char* const_kwlist[] = {0};
+  static const char* const_kwlist[] = {"C", "M", 0};
   static char** kwlist = const_cast<char**>(const_kwlist);
 
   double C = 1.0;
@@ -113,7 +113,7 @@ static PyGetSetDef PyBobMachineMultipliedHyperbolicTangentActivation_getseters[]
 PyTypeObject PyBobMachineMultipliedHyperbolicTangentActivation_Type = {
     PyObject_HEAD_INIT(0)
     0,                                                  /*ob_size*/
-    0,                                                  /*tp_name*/
+    s_multtanhactivation_str,                           /*tp_name*/
     sizeof(PyBobMachineMultipliedHyperbolicTangentActivationObject),       /*tp_basicsize*/
     0,                                                  /*tp_itemsize*/
     (destructor)PyBobMachineMultipliedHyperbolicTangentActivation_delete,  /*tp_dealloc*/
diff --git a/xbob/machine/tanh_activation.cpp b/xbob/machine/tanh_activation.cpp
index 978277e..f121057 100644
--- a/xbob/machine/tanh_activation.cpp
+++ b/xbob/machine/tanh_activation.cpp
@@ -59,7 +59,7 @@ static void PyBobMachineHyperbolicTangentActivation_delete
 PyTypeObject PyBobMachineHyperbolicTangentActivation_Type = {
     PyObject_HEAD_INIT(0)
     0,                                                  /*ob_size*/
-    0,                                                  /*tp_name*/
+    s_hyperbolictangentactivation_str,                  /*tp_name*/
     sizeof(PyBobMachineHyperbolicTangentActivationObject),  /*tp_basicsize*/
     0,                                                  /*tp_itemsize*/
     (destructor)PyBobMachineHyperbolicTangentActivation_delete, /*tp_dealloc*/
-- 
GitLab