Skip to content

Commit 8d8b881

Browse files
authored
Cython3 migration (#249)
* allow for cython3 install * include path relative to source required for language_level=3 * force integer division for cython + python3 * correct char to string comparison * adding noexcept to match cpp function decls (https://cython.readthedocs.io/en/latest/src/userguide/migrating_to_cy30.html#exception-values-and-noexcept) * Update charm4py.yml to allow cython3 * add general cython to install requirements
1 parent bf6df7f commit 8d8b881

File tree

3 files changed

+21
-20
lines changed

3 files changed

+21
-20
lines changed

.github/workflows/charm4py.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ jobs:
1717
- name: build-charm4py
1818
run: |
1919
git fetch --unshallow # Need full repo for 'git describe' used by setup.py
20-
pip3 install setuptools 'cython<3' cffi greenlet numpy
20+
pip3 install setuptools cython cffi greenlet numpy
2121
git clone https://github.com/UIUC-PPL/charm charm_src/charm
2222
export CHARM_EXTRA_BUILD_OPTS="--enable-error-checking"
2323
export CHARM_BUILD_PROCESSES=2

charm4py/charmlib/charmlib_cython.pyx

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
from ccharm cimport *
1+
# cython: language_level=3
2+
3+
from charm4py.charmlib.ccharm cimport *
24
from libc.stdlib cimport malloc, free
35
from libc.string cimport memcpy
46
from libc.stdint cimport uintptr_t
@@ -222,8 +224,7 @@ cdef class ReceiveMsgBuffer:
222224
self.msg = NULL
223225

224226
cdef inline int isLocal(self):
225-
return self.msg[0] == 'L' and self.msg[1] == ':'
226-
227+
return self.msg[0] == b'L' and self.msg[1] == b':'
227228
cdef inline int getLocalTag(self):
228229
return (<int*>(&self.msg[2]))[0]
229230

@@ -827,27 +828,27 @@ class CharmLib(object):
827828

828829

829830
# first callback from Charm++ shared library
830-
cdef void registerMainModule():
831+
cdef void registerMainModule() noexcept:
831832
try:
832833
charm.registerMainModule()
833834
except:
834835
charm.handleGeneralError()
835836

836-
cdef void recvReadOnly(int msgSize, char *msg):
837+
cdef void recvReadOnly(int msgSize, char *msg) noexcept:
837838
try:
838839
recv_buffer.setMsg(msg, msgSize)
839840
charm.recvReadOnly(recv_buffer)
840841
except:
841842
charm.handleGeneralError()
842843

843-
cdef void buildMainchare(int onPe, void *objPtr, int ep, int argc, char **argv):
844+
cdef void buildMainchare(int onPe, void *objPtr, int ep, int argc, char **argv) noexcept:
844845
try:
845846
args = [argv[i].decode('UTF-8') for i in range(argc)]
846847
charm.buildMainchare(onPe, <uintptr_t> objPtr, ep, args)
847848
except:
848849
charm.handleGeneralError()
849850

850-
cdef void recvChareMsg(int onPe, void *objPtr, int ep, int msgSize, char *msg, int dcopy_start):
851+
cdef void recvChareMsg(int onPe, void *objPtr, int ep, int msgSize, char *msg, int dcopy_start) noexcept:
851852
try:
852853
if PROFILING:
853854
charm._precvtime = time.time()
@@ -857,7 +858,7 @@ cdef void recvChareMsg(int onPe, void *objPtr, int ep, int msgSize, char *msg, i
857858
except:
858859
charm.handleGeneralError()
859860

860-
cdef void recvGroupMsg(int gid, int ep, int msgSize, char *msg, int dcopy_start):
861+
cdef void recvGroupMsg(int gid, int ep, int msgSize, char *msg, int dcopy_start) noexcept:
861862
try:
862863
if PROFILING:
863864
charm._precvtime = time.time()
@@ -867,7 +868,7 @@ cdef void recvGroupMsg(int gid, int ep, int msgSize, char *msg, int dcopy_start)
867868
except:
868869
charm.handleGeneralError()
869870

870-
cdef void recvArrayMsg(int aid, int ndims, int *arrayIndex, int ep, int msgSize, char *msg, int dcopy_start):
871+
cdef void recvArrayMsg(int aid, int ndims, int *arrayIndex, int ep, int msgSize, char *msg, int dcopy_start) noexcept:
871872
try:
872873
if PROFILING:
873874
charm._precvtime = time.time()
@@ -877,7 +878,7 @@ cdef void recvArrayMsg(int aid, int ndims, int *arrayIndex, int ep, int msgSize,
877878
except:
878879
charm.handleGeneralError()
879880

880-
cdef void recvArrayBcast(int aid, int ndims, int nInts, int numElems, int *arrayIndexes, int ep, int msgSize, char *msg, int dcopy_start):
881+
cdef void recvArrayBcast(int aid, int ndims, int nInts, int numElems, int *arrayIndexes, int ep, int msgSize, char *msg, int dcopy_start) noexcept:
881882
cdef int i = 0
882883
try:
883884
if PROFILING:
@@ -892,13 +893,13 @@ cdef void recvArrayBcast(int aid, int ndims, int nInts, int numElems, int *array
892893
except:
893894
charm.handleGeneralError()
894895

895-
cdef int arrayMapProcNum(int gid, int ndims, const int *arrayIndex):
896+
cdef int arrayMapProcNum(int gid, int ndims, const int *arrayIndex) noexcept:
896897
try:
897898
return charm.arrayMapProcNum(gid, array_index_to_tuple(ndims, arrayIndex))
898899
except:
899900
charm.handleGeneralError()
900901

901-
cdef int arrayElemLeave(int aid, int ndims, int *arrayIndex, char **pdata, int sizing):
902+
cdef int arrayElemLeave(int aid, int ndims, int *arrayIndex, char **pdata, int sizing) noexcept:
902903
cdef int i = 0
903904
global tempData
904905
try:
@@ -914,7 +915,7 @@ cdef int arrayElemLeave(int aid, int ndims, int *arrayIndex, char **pdata, int s
914915
except:
915916
charm.handleGeneralError()
916917

917-
cdef void arrayElemJoin(int aid, int ndims, int *arrayIndex, int ep, char *msg, int msgSize):
918+
cdef void arrayElemJoin(int aid, int ndims, int *arrayIndex, int ep, char *msg, int msgSize) noexcept:
918919
cdef int i = 0
919920
try:
920921
if PROFILING:
@@ -925,7 +926,7 @@ cdef void arrayElemJoin(int aid, int ndims, int *arrayIndex, int ep, char *msg,
925926
except:
926927
charm.handleGeneralError()
927928

928-
cdef void resumeFromSync(int aid, int ndims, int *arrayIndex):
929+
cdef void resumeFromSync(int aid, int ndims, int *arrayIndex) noexcept:
929930
cdef int i = 0
930931
try:
931932
index = array_index_to_tuple(ndims, arrayIndex)
@@ -935,7 +936,7 @@ cdef void resumeFromSync(int aid, int ndims, int *arrayIndex):
935936
charm.handleGeneralError()
936937

937938
cdef void createCallbackMsg(void *data, int dataSize, int reducerType, int fid, int *sectionInfo,
938-
char **returnBuffers, int *returnBufferSizes):
939+
char **returnBuffers, int *returnBufferSizes) noexcept:
939940
cdef int numElems
940941
cdef array.array a
941942
cdef int item_size
@@ -969,7 +970,7 @@ cdef void createCallbackMsg(void *data, int dataSize, int reducerType, int fid,
969970
header = {}
970971
ctype = charm_reducer_to_ctype[reducerType]
971972
item_size = c_type_table_sizes[ctype]
972-
numElems = dataSize / item_size
973+
numElems = dataSize // item_size # force integer division for cython + python3
973974
if fid > 0:
974975
pyData.append(fid)
975976
if numElems == 1:
@@ -1021,7 +1022,7 @@ cdef void createCallbackMsg(void *data, int dataSize, int reducerType, int fid,
10211022
charm.handleGeneralError()
10221023

10231024
# callback function invoked by Charm++ for reducing contributions using a Python reducer (built-in or custom)
1024-
cdef int pyReduction(char** msgs, int* msgSizes, int nMsgs, char** returnBuffer):
1025+
cdef int pyReduction(char** msgs, int* msgSizes, int nMsgs, char** returnBuffer) noexcept:
10251026
cdef int i = 0
10261027
cdef int msgSize
10271028
global tempData
@@ -1054,7 +1055,7 @@ cdef int pyReduction(char** msgs, int* msgSizes, int nMsgs, char** returnBuffer)
10541055
except:
10551056
charm.handleGeneralError()
10561057

1057-
cdef void CcdCallFnAfterCallback(void *userParam, double curWallTime):
1058+
cdef void CcdCallFnAfterCallback(void *userParam, double curWallTime) noexcept:
10581059
try:
10591060
charm.triggerCallable(<int>userParam)
10601061
except:

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -325,7 +325,7 @@ def run(self):
325325
'charmrun = charmrun.start:start',
326326
],
327327
},
328-
install_requires=['numpy>=1.10.0', 'greenlet', 'cython<3'],
328+
install_requires=['numpy>=1.10.0', 'greenlet', 'cython'],
329329
#python_requires='>=2.7, ~=3.4',
330330
classifiers=[
331331
'Intended Audience :: Developers',

0 commit comments

Comments
 (0)