some work towards objectifying the UFuncs
This commit is contained in:
parent
0de1c3e14e
commit
aacd1473aa
|
@ -30,24 +30,14 @@ interaction_ufunc_force
|
|||
, void * data)
|
||||
{
|
||||
char * in = args[0]
|
||||
, * raw_coefficients = args[1]
|
||||
, * out = args[2];
|
||||
, * out = args[1];
|
||||
npy_intp n = dimensions[0];
|
||||
npy_intp in_step = steps[0]
|
||||
, raw_coefficients_steps = steps[1]
|
||||
, out_step = steps[2];
|
||||
, out_step = steps[1];
|
||||
|
||||
npy_intp i;
|
||||
|
||||
// Copy the coefficients to a safe array.
|
||||
// This is because NumPy arrays are not
|
||||
// necessarily cast-safe.
|
||||
float coefficients[19];
|
||||
for(i = 0; i < 19; i++)
|
||||
{
|
||||
coefficients[i] = *(float *)raw_coefficients;
|
||||
raw_coefficients += raw_coefficients_steps;
|
||||
}
|
||||
float * coefficients = (float *) data;
|
||||
|
||||
for(i = 0; i < n; i++)
|
||||
{
|
||||
|
@ -73,27 +63,17 @@ interaction_ufunc_float2D
|
|||
, * y_old = args[1]
|
||||
, * p_x_old = args[2]
|
||||
, * p_y_old = args[3]
|
||||
, * raw_coefficients = args[4]
|
||||
, * p_x_new = args[5]
|
||||
, * p_y_new = args[6];
|
||||
, * p_x_new = args[4]
|
||||
, * p_y_new = args[5];
|
||||
|
||||
npy_intp x_old_steps = steps[0]
|
||||
, y_old_steps = steps[1]
|
||||
, p_x_old_steps = steps[2]
|
||||
, p_y_old_steps = steps[3]
|
||||
, raw_coefficients_steps = steps[4]
|
||||
, p_x_new_steps = steps[5]
|
||||
, p_y_new_steps = steps[6];
|
||||
, p_x_new_steps = steps[4]
|
||||
, p_y_new_steps = steps[5];
|
||||
|
||||
// Copy the coefficients to a safe array.
|
||||
// This is because NumPy arrays are not
|
||||
// necessarily cast-safe.
|
||||
float coefficients[19];
|
||||
for(i = 0; i < 19; i++)
|
||||
{
|
||||
coefficients[i] = *(float *)raw_coefficients;
|
||||
raw_coefficients += raw_coefficients_steps;
|
||||
}
|
||||
float *coefficients = (float *) data;
|
||||
|
||||
// Compute the new momenta:
|
||||
|
||||
|
@ -143,6 +123,46 @@ interaction_ufunc_float2D
|
|||
}
|
||||
}
|
||||
|
||||
typedef struct
|
||||
{
|
||||
PyObject_HEAD
|
||||
float coefficients[16];
|
||||
PyObject * ufunc;
|
||||
} interaction_UFuncWrapper;
|
||||
|
||||
static PyTypeObject interaction_UFuncWrapperType
|
||||
{
|
||||
PyTypeObject_HEAD_INIT(NULL, 0)
|
||||
.tp_name = "brown.interaction.UFuncWrapper",
|
||||
.tp_doc = "A wrapper that wraps the ufuncs for interaction and force, storing the coeficients",
|
||||
.tp_basicsize = sizeof(interaction_UFuncWrapper),
|
||||
.tp_itemsize = 0,
|
||||
.tp_flags = Py_TPFLAGS_DEFAULT,
|
||||
.tp_new = PyType_GenericNew,
|
||||
|
||||
};
|
||||
|
||||
static int
|
||||
interaction_UFuncWrapper_init
|
||||
( interaction_UFuncWrapper * self
|
||||
, PyObject * args
|
||||
, PyObject * kwds)
|
||||
{
|
||||
char type;
|
||||
PyObject * coefficients;
|
||||
|
||||
if(!PyArgs_ParseTupleAndKeywords(args, kwds, "" // FIXME
|
||||
}
|
||||
|
||||
|
||||
static PyObject *
|
||||
interaction_UFuncWrapper_call
|
||||
(interaction_UFuncWrapper * self,
|
||||
PyObject * data)
|
||||
{
|
||||
return
|
||||
}
|
||||
|
||||
static PyMethodDef InteractionMethods[] = {
|
||||
{NULL, NULL, 0, NULL}
|
||||
};
|
||||
|
|
|
@ -28,5 +28,11 @@ interaction_ufunc_float2D
|
|||
, npy_intp * steps
|
||||
, void * data);
|
||||
|
||||
static void
|
||||
interaction_ufunc_force
|
||||
( char ** args
|
||||
, npy_intp * dimensions
|
||||
, npy_intp * steps
|
||||
, void * data)
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue
Block a user