From: Paul Brossier Date: Fri, 25 Dec 2009 03:49:25 +0000 (+0100) Subject: py-fvec.c removed X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=7d9ec37be3d6cf0544cfee2f6c87d7afe2d80a92;p=aubio.git py-fvec.c removed --- diff --git a/interfaces/python/py-fvec.c b/interfaces/python/py-fvec.c deleted file mode 100644 index fbc38a24..00000000 --- a/interfaces/python/py-fvec.c +++ /dev/null @@ -1,293 +0,0 @@ -#include "aubio-types.h" - -/* fvec type definition - -class fvec(): - def __init__(self, length = 1024): - self.length = length - self.data = array(length) - -*/ - -static char Py_fvec_doc[] = "fvec object"; - -static PyObject * -Py_fvec_new (PyTypeObject * type, PyObject * args, PyObject * kwds) -{ - int length= 0; - Py_fvec *self; - static char *kwlist[] = { "length", NULL }; - - if (!PyArg_ParseTupleAndKeywords (args, kwds, "|I", kwlist, - &length)) { - return NULL; - } - - self = (Py_fvec *) type->tp_alloc (type, 0); - - self->length = Py_default_vector_length; - - if (self == NULL) { - return NULL; - } - - if (length > 0) { - self->length = length; - } else if (length < 0) { - PyErr_SetString (PyExc_ValueError, - "can not use negative number of elements"); - return NULL; - } - - return (PyObject *) self; -} - -static int -Py_fvec_init (Py_fvec * self, PyObject * args, PyObject * kwds) -{ - self->o = new_fvec (self->length); - if (self->o == NULL) { - return -1; - } - - return 0; -} - -static void -Py_fvec_del (Py_fvec * self) -{ - del_fvec (self->o); - self->ob_type->tp_free ((PyObject *) self); -} - -static PyObject * -Py_fvec_repr (Py_fvec * self, PyObject * unused) -{ -#if 0 - PyObject *format = NULL; - PyObject *args = NULL; - PyObject *result = NULL; - - format = PyString_FromString ("aubio fvec of %d elements"); - if (format == NULL) { - goto fail; - } - - args = Py_BuildValue ("I", self->length); - if (args == NULL) { - goto fail; - } - fvec_print ( self->o ); - - result = PyString_Format (format, args); - -fail: - Py_XDECREF (format); - Py_XDECREF (args); - - return result; -#endif - PyObject *format = NULL; - PyObject *args = NULL; - PyObject *result = NULL; - - format = PyString_FromString ("%s"); - if (format == NULL) { - goto fail; - } - - args = Py_BuildValue ("O", PyAubio_FvecToArray (self)); - if (args == NULL) { - goto fail; - } - - result = PyString_Format (format, args); -fail: - Py_XDECREF (format); - Py_XDECREF (args); - - return result; -} - -Py_fvec * -PyAubio_ArrayToFvec (PyObject *input) { - PyObject *array; - Py_fvec *vec; - if (input == NULL) { - PyErr_SetString (PyExc_ValueError, "input array is not a python object"); - goto fail; - } - // parsing input object into a Py_fvec - if (PyObject_TypeCheck (input, &Py_fvecType)) { - // input is an fvec, nothing else to do - vec = (Py_fvec *) input; - } else if (PyArray_Check(input)) { - - // we got an array, convert it to an fvec - if (PyArray_NDIM (input) == 0) { - PyErr_SetString (PyExc_ValueError, "input array is a scalar"); - goto fail; - } else if (PyArray_NDIM (input) > 1) { - PyErr_SetString (PyExc_ValueError, - "input array has more than one dimensions"); - goto fail; - } - - if (!PyArray_ISFLOAT (input)) { - PyErr_SetString (PyExc_ValueError, "input array should be float"); - goto fail; - } else if (PyArray_TYPE (input) != AUBIO_NPY_SMPL) { - PyErr_SetString (PyExc_ValueError, "input array should be float32"); - goto fail; - } else { - // input data type is float32, nothing else to do - array = input; - } - - // create a new fvec object - vec = (Py_fvec*) PyObject_New (Py_fvec, &Py_fvecType); - vec->length = PyArray_SIZE (array); - - // no need to really allocate fvec, just its struct member - // vec->o = new_fvec (vec->length); - vec->o = (fvec_t *)malloc(sizeof(fvec_t)); - vec->o->length = vec->length; - vec->o->data = (smpl_t *) PyArray_GETPTR1 (array, 0); - - } else if (PyObject_TypeCheck (input, &PyList_Type)) { - PyErr_SetString (PyExc_ValueError, "does not convert from list yet"); - return NULL; - } else { - PyErr_SetString (PyExc_ValueError, "can only accept vector or fvec as input"); - return NULL; - } - - return vec; - -fail: - return NULL; -} - -PyObject * -PyAubio_CFvecToArray (fvec_t * self) -{ - npy_intp dims[] = { self->length, 1 }; - return PyArray_SimpleNewFromData (1, dims, AUBIO_NPY_SMPL, self->data); -} - -PyObject * -PyAubio_FvecToArray (Py_fvec * self) -{ - PyObject *array = NULL; - npy_intp dims[] = { self->length, 1 }; - array = PyArray_SimpleNewFromData (1, dims, AUBIO_NPY_SMPL, self->o->data); - return array; -} - -static PyObject * -Py_fvec_getitem (Py_fvec * self, Py_ssize_t index) -{ - if (index < 0 || index >= self->length) { - PyErr_SetString (PyExc_IndexError, "no such element"); - return NULL; - } - - return PyFloat_FromDouble (self->o->data[index]); -} - -static int -Py_fvec_setitem (Py_fvec * self, Py_ssize_t index, PyObject * o) -{ - - if (index < 0 || index >= self->length) { - PyErr_SetString (PyExc_IndexError, "no such element"); - goto fail; - } - - if (PyFloat_Check (o)) { - PyErr_SetString (PyExc_ValueError, "should be a float"); - goto fail; - } - - self->o->data[index] = (smpl_t) PyFloat_AsDouble(o); - - return 0; - -fail: - return -1; -} - -int -Py_fvec_get_length (Py_fvec * self) -{ - return self->length; -} - -static PyMemberDef Py_fvec_members[] = { - // TODO remove READONLY flag and define getter/setter - {"length", T_INT, offsetof (Py_fvec, length), READONLY, - "length attribute"}, - {NULL} /* Sentinel */ -}; - -static PyMethodDef Py_fvec_methods[] = { - {"__array__", (PyCFunction) PyAubio_FvecToArray, METH_NOARGS, - "Returns the vector as a numpy array."}, - {NULL} -}; - -static PySequenceMethods Py_fvec_tp_as_sequence = { - (lenfunc) Py_fvec_get_length, /* sq_length */ - 0, /* sq_concat */ - 0, /* sq_repeat */ - (ssizeargfunc) Py_fvec_getitem, /* sq_item */ - 0, /* sq_slice */ - (ssizeobjargproc) Py_fvec_setitem, /* sq_ass_item */ - 0, /* sq_ass_slice */ - 0, /* sq_contains */ - 0, /* sq_inplace_concat */ - 0, /* sq_inplace_repeat */ -}; - - -PyTypeObject Py_fvecType = { - PyObject_HEAD_INIT (NULL) - 0, /* ob_size */ - "aubio.fvec", /* tp_name */ - sizeof (Py_fvec), /* tp_basicsize */ - 0, /* tp_itemsize */ - (destructor) Py_fvec_del, /* tp_dealloc */ - 0, /* tp_print */ - 0, /* tp_getattr */ - 0, /* tp_setattr */ - 0, /* tp_compare */ - (reprfunc) Py_fvec_repr, /* tp_repr */ - 0, /* tp_as_number */ - &Py_fvec_tp_as_sequence, /* tp_as_sequence */ - 0, /* tp_as_mapping */ - 0, /* tp_hash */ - 0, /* tp_call */ - 0, /* tp_str */ - 0, /* tp_getattro */ - 0, /* tp_setattro */ - 0, /* tp_as_buffer */ - Py_TPFLAGS_DEFAULT, /* tp_flags */ - Py_fvec_doc, /* tp_doc */ - 0, /* tp_traverse */ - 0, /* tp_clear */ - 0, /* tp_richcompare */ - 0, /* tp_weaklistoffset */ - 0, /* tp_iter */ - 0, /* tp_iternext */ - Py_fvec_methods, /* tp_methods */ - Py_fvec_members, /* tp_members */ - 0, /* tp_getset */ - 0, /* tp_base */ - 0, /* tp_dict */ - 0, /* tp_descr_get */ - 0, /* tp_descr_set */ - 0, /* tp_dictoffset */ - (initproc) Py_fvec_init, /* tp_init */ - 0, /* tp_alloc */ - Py_fvec_new, /* tp_new */ -};