1 #include "aubio-types.h"
4 PyAubio_ArrayToCFvec (PyObject *input) {
8 PyErr_SetString (PyExc_ValueError, "input array is not a python object");
11 // parsing input object into a Py_fvec
12 if (PyArray_Check(input)) {
14 // we got an array, convert it to an fvec
15 if (PyArray_NDIM ((PyArrayObject *)input) == 0) {
16 PyErr_SetString (PyExc_ValueError, "input array is a scalar");
18 } else if (PyArray_NDIM ((PyArrayObject *)input) > 1) {
19 PyErr_SetString (PyExc_ValueError,
20 "input array has more than one dimensions");
24 if (!PyArray_ISFLOAT ((PyArrayObject *)input)) {
25 PyErr_SetString (PyExc_ValueError, "input array should be float");
27 } else if (PyArray_TYPE ((PyArrayObject *)input) != AUBIO_NPY_SMPL) {
28 PyErr_SetString (PyExc_ValueError, "input array should be float32");
31 // input data type is float32, nothing else to do
35 // vec = new_fvec (vec->length);
36 // no need to really allocate fvec, just its struct member
37 vec = (fvec_t *)malloc(sizeof(fvec_t));
38 long length = PyArray_SIZE ((PyArrayObject *)array);
40 vec->length = (uint_t)length;
42 PyErr_SetString (PyExc_ValueError, "input array size should be greater than 0");
45 vec->data = (smpl_t *) PyArray_GETPTR1 ((PyArrayObject *)array, 0);
47 } else if (PyObject_TypeCheck (input, &PyList_Type)) {
48 PyErr_SetString (PyExc_ValueError, "does not convert from list yet");
51 PyErr_SetString (PyExc_ValueError, "can only accept vector of float as input");
62 PyAubio_CFvecToArray (fvec_t * self)
64 npy_intp dims[] = { self->length, 1 };
65 return PyArray_SimpleNewFromData (1, dims, AUBIO_NPY_SMPL, self->data);
69 PyAubio_CCvecToPyCvec (cvec_t * input) {
70 Py_cvec *vec = (Py_cvec*) PyObject_New (Py_cvec, &Py_cvecType);
71 vec->length = input->length;
78 PyAubio_ArrayToCCvec (PyObject *input) {
79 if (PyObject_TypeCheck (input, &Py_cvecType)) {
80 return ((Py_cvec*)input)->o;
82 PyErr_SetString (PyExc_ValueError, "input array should be float32");
88 PyAubio_CFmatToArray (fmat_t * input)
90 PyObject *array = NULL;
92 npy_intp dims[] = { input->length, 1 };
93 PyObject *concat = PyList_New (0), *tmp = NULL;
94 for (i = 0; i < input->height; i++) {
95 tmp = PyArray_SimpleNewFromData (1, dims, AUBIO_NPY_SMPL, input->data[i]);
96 PyList_Append (concat, tmp);
99 array = PyArray_FromObject (concat, AUBIO_NPY_SMPL, 2, 2);
105 PyAubio_ArrayToCFmat (PyObject *input) {
110 PyErr_SetString (PyExc_ValueError, "input array is not a python object");
113 // parsing input object into a Py_fvec
114 if (PyArray_Check(input)) {
116 // we got an array, convert it to an fvec
117 if (PyArray_NDIM ((PyArrayObject *)input) == 0) {
118 PyErr_SetString (PyExc_ValueError, "input array is a scalar");
120 } else if (PyArray_NDIM ((PyArrayObject *)input) > 2) {
121 PyErr_SetString (PyExc_ValueError,
122 "input array has more than two dimensions");
126 if (!PyArray_ISFLOAT ((PyArrayObject *)input)) {
127 PyErr_SetString (PyExc_ValueError, "input array should be float");
129 } else if (PyArray_TYPE ((PyArrayObject *)input) != AUBIO_NPY_SMPL) {
130 PyErr_SetString (PyExc_ValueError, "input array should be float32");
133 // input data type is float32, nothing else to do
137 // no need to really allocate fvec, just its struct member
138 mat = (fmat_t *)malloc(sizeof(fmat_t));
139 long length = PyArray_DIM ((PyArrayObject *)array, 1);
141 mat->length = (uint_t)length;
143 PyErr_SetString (PyExc_ValueError, "input array dimension 1 should be greater than 0");
146 long height = PyArray_DIM ((PyArrayObject *)array, 0);
148 mat->height = (uint_t)height;
150 PyErr_SetString (PyExc_ValueError, "input array dimension 0 should be greater than 0");
153 mat->data = (smpl_t **)malloc(sizeof(smpl_t*) * mat->height);
154 for (i=0; i< mat->height; i++) {
155 mat->data[i] = (smpl_t*)PyArray_GETPTR1 ((PyArrayObject *)array, i);
158 } else if (PyObject_TypeCheck (input, &PyList_Type)) {
159 PyErr_SetString (PyExc_ValueError, "can not convert list to fmat");
162 PyErr_SetString (PyExc_ValueError, "can only accept matrix of float as input");