diff --git a/.gitignore b/.gitignore index b555caa..4cde3de 100644 --- a/.gitignore +++ b/.gitignore @@ -14,3 +14,4 @@ /sharp_oracle.inc /python/libsharp/libsharp.c +/python/libsharp/libsharp_mpi.c diff --git a/python/libsharp/libsharp.pyx b/python/libsharp/libsharp.pyx index ddfcd98..1c783fe 100644 --- a/python/libsharp/libsharp.pyx +++ b/python/libsharp/libsharp.pyx @@ -105,7 +105,8 @@ def sht(jobtype, geom_info ginfo, alm_info ainfo, double[:, :, ::1] input, from mpi4py import MPI if not isinstance(comm, MPI.Comm): raise TypeError('comm must be an mpi4py communicator') - comm_ptr = MPI._addressof(comm) + from .libsharp_mpi import _addressof + comm_ptr = _addressof(comm) with nogil: r = sharp_execute_mpi_maybe ( comm_ptr, jobtype_i, diff --git a/python/libsharp/libsharp_mpi.pyx b/python/libsharp/libsharp_mpi.pyx new file mode 100644 index 0000000..402b4f6 --- /dev/null +++ b/python/libsharp/libsharp_mpi.pyx @@ -0,0 +1,10 @@ +from mpi4py.MPI cimport Comm +cdef extern from "Python.h": + object PyLong_FromVoidPtr(void*) + +# For compatibility with mpi4py <= 1.3.1 +# Newer versions could use the MPI._addressof function +def _addressof(comm): + cdef void *ptr = NULL + ptr = &(comm).ob_mpi + return PyLong_FromVoidPtr(ptr)