python: Wrap Analog::data() as a NumPy array.

This commit is contained in:
Martin Ling 2014-11-12 01:00:17 +00:00 committed by Uwe Hermann
parent b20635771c
commit ed6b4c4747
1 changed files with 23 additions and 0 deletions

View File

@ -46,6 +46,7 @@ which provides access to the error code and description."
%{
#include <pygobject.h>
#include <numpy/arrayobject.h>
PyObject *GLib;
PyTypeObject *IOChannel;
@ -66,6 +67,7 @@ typedef guint pyg_flags_type;
GLib = PyImport_ImportModule("gi.repository.GLib");
IOChannel = (PyTypeObject *) PyObject_GetAttrString(GLib, "IOChannel");
PollFD = (PyTypeObject *) PyObject_GetAttrString(GLib, "PollFD");
import_array();
%}
/* Map file objects to file descriptors. */
@ -446,6 +448,7 @@ std::map<std::string, Glib::VariantBase> dict_to_map_options(PyObject *dict,
%}
/* Ignore these methods, we will override them below. */
%ignore sigrok::Analog::data;
%ignore sigrok::Driver::scan;
%ignore sigrok::InputFormat::create_input;
%ignore sigrok::OutputFormat::create_output;
@ -573,3 +576,23 @@ std::map<std::string, Glib::VariantBase> dict_to_map_options(PyObject *dict,
$self->config_set(key, python_to_variant_by_key(input, key));
}
}
/* Return NumPy array from Analog::data(). */
%extend sigrok::Analog
{
PyObject * _data()
{
int nd = 2;
npy_intp dims[2];
dims[0] = $self->channels().size();
dims[1] = $self->num_samples();
int typenum = NPY_FLOAT;
void *data = $self->data_pointer();
return PyArray_SimpleNewFromData(nd, dims, typenum, data);
}
%pythoncode
{
data = property(_data)
}
}