@@ -203,11 +203,12 @@ derivative(PyObject* self, PyObject* arg) {
203203static double
204204internal_instant_power (PyObject* obj) {
205205 double p = 0 ;
206- for (int i=0 ; i<PyArray_SIZE (obj); i++) {
207- double x = ((float *)PyArray_DATA (obj))[i];
206+ PyArrayObject* array = (PyArrayObject*)obj;
207+ for (int i=0 ; i<PyArray_SIZE (array); i++) {
208+ double x = ((float *)PyArray_DATA (array))[i];
208209 p += x * x;
209210 }
210- p /= PyArray_SIZE (obj );
211+ p /= PyArray_SIZE (array );
211212 return p;
212213}
213214
@@ -1034,29 +1035,32 @@ static PyObject* almostEqualArray(PyObject* notUsed, PyObject* args) {
10341035
10351036 if (argv.size () != 3 ||
10361037 !PyArray_Check (argv[0 ]) || !PyArray_Check (argv[1 ]) ||
1037- PyArray_TYPE (argv[0 ]) != PyArray_TYPE (argv[1 ]) ||
1038- PyArray_TYPE (argv[0 ]) != NPY_FLOAT ||
1038+ PyArray_TYPE (( const PyArrayObject *) argv[0 ]) != PyArray_TYPE (( const PyArrayObject *) argv[1 ]) ||
1039+ PyArray_TYPE (( const PyArrayObject *) argv[0 ]) != NPY_FLOAT ||
10391040 !PyFloat_Check (argv[2 ])) {
10401041 PyErr_SetString (PyExc_TypeError, " expecting arguments (numpy.array(floats) m1, numpy.array(floats) m2, float precision)" );
10411042 return NULL ;
10421043 }
10431044
1044- if (PyArray_NDIM (argv[0 ]) != PyArray_NDIM (argv[1 ])) Py_RETURN_FALSE;
1045+ PyArrayObject* array0 = (PyArrayObject*) argv[0 ];
1046+ PyArrayObject* array1 = (PyArrayObject*) argv[1 ];
10451047
1046- if (PyArray_NDIM (argv[0 ]) > 2 ) {
1048+ if (PyArray_NDIM (array0) != PyArray_NDIM (array1)) Py_RETURN_FALSE;
1049+
1050+ if (PyArray_NDIM (array0) > 2 ) {
10471051 PyErr_SetString (PyExc_TypeError, " comparing numpy arrays of more than 2 dimensions not implemented" );
10481052 return NULL ;
10491053 }
10501054
10511055 float precision = PyFloat_AS_DOUBLE (argv[2 ]);
10521056
10531057 // 1-dimensional arrays
1054- if (PyArray_NDIM (argv[ 0 ] ) == 1 ) {
1055- if (PyArray_DIM (argv[ 0 ] , 0 ) != PyArray_DIM (argv[ 1 ] , 0 )) Py_RETURN_FALSE;
1058+ if (PyArray_NDIM (array0 ) == 1 ) {
1059+ if (PyArray_DIM (array0 , 0 ) != PyArray_DIM (array1 , 0 )) Py_RETURN_FALSE;
10561060
1057- for (int i=0 ; i<int (PyArray_DIM (argv[ 0 ] , 0 )); ++i) {
1058- Real* x = (Real*)(PyArray_BYTES (argv[ 0 ] ) + i*PyArray_STRIDE (argv[ 0 ] , 0 ));
1059- Real* y = (Real*)(PyArray_BYTES (argv[ 1 ] ) + i*PyArray_STRIDE (argv[ 1 ] , 0 ));
1061+ for (int i=0 ; i<int (PyArray_DIM (array0 , 0 )); ++i) {
1062+ Real* x = (Real*)(PyArray_BYTES (array0 ) + i*PyArray_STRIDE (array0 , 0 ));
1063+ Real* y = (Real*)(PyArray_BYTES (array1 ) + i*PyArray_STRIDE (array1 , 0 ));
10601064 Real diff = 0 ;
10611065 if (*y == 0 ) diff = abs (*x);
10621066 else if (*x == 0 ) diff = abs (*y);
@@ -1071,16 +1075,16 @@ static PyObject* almostEqualArray(PyObject* notUsed, PyObject* args) {
10711075 }
10721076
10731077 // 2-dimensional arrays
1074- else if (PyArray_NDIM (argv[ 0 ] ) == 2 ) {
1075- if (PyArray_DIM (argv[ 0 ] , 0 ) != PyArray_DIM (argv[ 1 ] , 0 ) ||
1076- PyArray_DIM (argv[ 0 ] , 1 ) != PyArray_DIM (argv[ 1 ] , 1 )) {
1078+ else if (PyArray_NDIM (array0 ) == 2 ) {
1079+ if (PyArray_DIM (array0 , 0 ) != PyArray_DIM (array1 , 0 ) ||
1080+ PyArray_DIM (array0 , 1 ) != PyArray_DIM (array1 , 1 )) {
10771081 Py_RETURN_FALSE;
10781082 }
10791083
1080- for (int i=0 ; i<int (PyArray_DIM (argv[ 0 ] , 0 )); ++i) {
1081- for (int j=0 ; j<int (PyArray_DIM (argv[ 0 ] , 1 )); ++j) {
1082- Real* x = (Real*)(PyArray_BYTES (argv[ 0 ] ) + i*PyArray_STRIDE (argv[ 0 ] , 0 ) + j*PyArray_STRIDE (argv[ 0 ] , 1 ));
1083- Real* y = (Real*)(PyArray_BYTES (argv[ 1 ] ) + i*PyArray_STRIDE (argv[ 1 ] , 0 ) + j*PyArray_STRIDE (argv[ 1 ] , 1 ));
1084+ for (int i=0 ; i<int (PyArray_DIM (array0 , 0 )); ++i) {
1085+ for (int j=0 ; j<int (PyArray_DIM (array0 , 1 )); ++j) {
1086+ Real* x = (Real*)(PyArray_BYTES (array0 ) + i*PyArray_STRIDE (array0 , 0 ) + j*PyArray_STRIDE (array0 , 1 ));
1087+ Real* y = (Real*)(PyArray_BYTES (array1 ) + i*PyArray_STRIDE (array1 , 0 ) + j*PyArray_STRIDE (array1 , 1 ));
10841088 Real diff = 0 ;
10851089 if (*y == 0 ) diff = abs (*x);
10861090 else if (*x == 0 ) diff = abs (*y);
0 commit comments