Unverified Commit 1cd905b4 authored by Peter Eastman's avatar Peter Eastman Committed by GitHub
Browse files

Support numpy 2 (#4622)

* Support numpy 2

* Debugging

* Removed debugging code
parent 75d4f299
...@@ -10,7 +10,7 @@ dependencies: ...@@ -10,7 +10,7 @@ dependencies:
- python - python
- cython - cython
- swig - swig
- numpy <2.0 - numpy
- doxygen 1.8.14 - doxygen 1.8.14
# test # test
- pytest - pytest
......
...@@ -10,7 +10,7 @@ dependencies: ...@@ -10,7 +10,7 @@ dependencies:
- python - python
- cython - cython
- swig - swig
- numpy <2.0 - numpy
- doxygen 1.8.14 - doxygen 1.8.14
# test # test
- pytest - pytest
......
...@@ -12,7 +12,7 @@ dependencies: ...@@ -12,7 +12,7 @@ dependencies:
- python - python
- cython - cython
- swig - swig
- numpy <2.0 - numpy
- ocl-icd-system - ocl-icd-system
- doxygen 1.8.14 - doxygen 1.8.14
# test # test
......
...@@ -12,7 +12,7 @@ dependencies: ...@@ -12,7 +12,7 @@ dependencies:
- pypy - pypy
- cython - cython
- swig - swig
- numpy <2.0 - numpy
- ocl-icd-system - ocl-icd-system
- doxygen 1.8.14 - doxygen 1.8.14
# test # test
......
...@@ -12,7 +12,7 @@ dependencies: ...@@ -12,7 +12,7 @@ dependencies:
- python - python
- cython - cython
- swig - swig
- numpy <2.0 - numpy
- doxygen 1.8.14 - doxygen 1.8.14
- khronos-opencl-icd-loader - khronos-opencl-icd-loader
# test # test
......
...@@ -8,7 +8,7 @@ dependencies: ...@@ -8,7 +8,7 @@ dependencies:
# host # host
- python - python
- pip - pip
- numpy <2.0 - numpy
- cython - cython
- swig - swig
- doxygen 1.8.14 - doxygen 1.8.14
......
...@@ -161,39 +161,42 @@ int Py_SequenceToVecDouble(PyObject* obj, std::vector<double>& out) { ...@@ -161,39 +161,42 @@ int Py_SequenceToVecDouble(PyObject* obj, std::vector<double>& out) {
PyObject* item1 = NULL; PyObject* item1 = NULL;
if (isNumpyAvailable()) { if (isNumpyAvailable()) {
if (PyArray_Check(stripped) && PyArray_ISCARRAY_RO(stripped) && PyArray_NDIM(stripped) == 1) { if (PyArray_Check(stripped)) {
int type = PyArray_TYPE(stripped); const PyArrayObject* array = (PyArrayObject*) stripped;
int length = PyArray_SIZE(stripped); if (PyArray_ISCARRAY_RO(array) && PyArray_NDIM(array) == 1) {
void* data = PyArray_DATA((PyArrayObject*) stripped); int type = PyArray_TYPE(array);
if (type == NPY_DOUBLE) { int length = PyArray_SIZE(array);
out.resize(length); void* data = PyArray_DATA(array);
memcpy(&out[0], data, sizeof(double)*length); if (type == NPY_DOUBLE) {
Py_DECREF(stripped); out.resize(length);
return SWIG_OK; memcpy(&out[0], data, sizeof(double)*length);
} Py_DECREF(array);
if (type == NPY_FLOAT) { return SWIG_OK;
out.resize(length); }
float* floatData = (float*) data; if (type == NPY_FLOAT) {
for (int i = 0; i < length; i++) out.resize(length);
out[i] = floatData[i]; float* floatData = (float*) data;
Py_DECREF(stripped); for (int i = 0; i < length; i++)
return SWIG_OK; out[i] = floatData[i];
} Py_DECREF(array);
if (type == NPY_INT32) { return SWIG_OK;
out.resize(length); }
int* intData = (int*) data; if (type == NPY_INT32) {
for (int i = 0; i < length; i++) out.resize(length);
out[i] = intData[i]; int* intData = (int*) data;
Py_DECREF(stripped); for (int i = 0; i < length; i++)
return SWIG_OK; out[i] = intData[i];
} Py_DECREF(array);
if (type == NPY_INT64) { return SWIG_OK;
out.resize(length); }
long long* longData = (long long*) data; if (type == NPY_INT64) {
for (int i = 0; i < length; i++) out.resize(length);
out[i] = longData[i]; long long* longData = (long long*) data;
Py_DECREF(stripped); for (int i = 0; i < length; i++)
return SWIG_OK; out[i] = longData[i];
Py_DECREF(array);
return SWIG_OK;
}
} }
} }
} }
...@@ -233,39 +236,42 @@ int Py_SequenceToVecDouble(PyObject* obj, std::vector<double>& out) { ...@@ -233,39 +236,42 @@ int Py_SequenceToVecDouble(PyObject* obj, std::vector<double>& out) {
int Py_SequenceToVecVec3(PyObject* obj, std::vector<Vec3>& out) { int Py_SequenceToVecVec3(PyObject* obj, std::vector<Vec3>& out) {
PyObject* stripped = Py_StripOpenMMUnits(obj); // new reference PyObject* stripped = Py_StripOpenMMUnits(obj); // new reference
if (isNumpyAvailable()) { if (isNumpyAvailable()) {
if (PyArray_Check(stripped) && PyArray_ISCARRAY_RO(stripped) && PyArray_NDIM(stripped) == 2 && PyArray_DIM(stripped, 1) == 3) { if (PyArray_Check(stripped)) {
int type = PyArray_TYPE(stripped); const PyArrayObject* array = (PyArrayObject*) stripped;
int length = PyArray_DIM(stripped, 0); if (PyArray_ISCARRAY_RO(array) && PyArray_NDIM(array) == 2 && PyArray_DIM(array, 1) == 3) {
void* data = PyArray_DATA((PyArrayObject*) stripped); int type = PyArray_TYPE(array);
if (type == NPY_DOUBLE) { int length = PyArray_DIM(array, 0);
out.resize(length); void* data = PyArray_DATA((PyArrayObject*) array);
memcpy(&out[0][0], data, 3*sizeof(double)*length); if (type == NPY_DOUBLE) {
Py_DECREF(stripped); out.resize(length);
return SWIG_OK; memcpy(&out[0][0], data, 3*sizeof(double)*length);
} Py_DECREF(array);
if (type == NPY_FLOAT) { return SWIG_OK;
out.resize(length); }
float* floatData = (float*) data; if (type == NPY_FLOAT) {
for (int i = 0; i < length; i++) out.resize(length);
out[i] = Vec3(floatData[3*i], floatData[3*i+1], floatData[3*i+2]); float* floatData = (float*) data;
Py_DECREF(stripped); for (int i = 0; i < length; i++)
return SWIG_OK; out[i] = Vec3(floatData[3*i], floatData[3*i+1], floatData[3*i+2]);
} Py_DECREF(array);
if (type == NPY_INT32) { return SWIG_OK;
out.resize(length); }
int* intData = (int*) data; if (type == NPY_INT32) {
for (int i = 0; i < length; i++) out.resize(length);
out[i] = Vec3(intData[3*i], intData[3*i+1], intData[3*i+2]); int* intData = (int*) data;
Py_DECREF(stripped); for (int i = 0; i < length; i++)
return SWIG_OK; out[i] = Vec3(intData[3*i], intData[3*i+1], intData[3*i+2]);
} Py_DECREF(array);
if (type == NPY_INT64) { return SWIG_OK;
out.resize(length); }
long long* longData = (long long*) data; if (type == NPY_INT64) {
for (int i = 0; i < length; i++) out.resize(length);
out[i] = Vec3(longData[3*i], longData[3*i+1], longData[3*i+2]); long long* longData = (long long*) data;
Py_DECREF(stripped); for (int i = 0; i < length; i++)
return SWIG_OK; out[i] = Vec3(longData[3*i], longData[3*i+1], longData[3*i+2]);
Py_DECREF(array);
return SWIG_OK;
}
} }
} }
} }
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment