3636
3737from numba import types , jit , prange , numpy_support , literally
3838from numba .errors import TypingError
39+ from numba .targets .arraymath import get_isnan
3940
4041import sdc
4142from sdc .utilities .sdc_typing_utils import TypeChecker
@@ -47,6 +48,14 @@ def astype(self, dtype):
4748 pass
4849
4950
51+ def sum (self ):
52+ pass
53+
54+
55+ def nansum (self ):
56+ pass
57+
58+
5059@sdc_overload (astype )
5160def sdc_astype_overload (self , dtype ):
5261 """
@@ -106,3 +115,61 @@ def sdc_astype_number_impl(self, dtype):
106115 return sdc_astype_number_impl
107116
108117 ty_checker .raise_exc (self .dtype , 'str or type' , 'self.dtype' )
118+
119+
120+ @sdc_overload (sum )
121+ def sdc_sum_overload (self ):
122+ """
123+ Intel Scalable Dataframe Compiler Developer Guide
124+ *************************************************
125+ Parallel replacement of numpy.sum.
126+ .. only:: developer
127+ Test: python -m sdc.runtests sdc.tests.test_sdc_numpy -k sum
128+ """
129+
130+ dtype = self .dtype
131+ isnan = get_isnan (dtype )
132+ if not isinstance (self , types .Array ):
133+ return None
134+
135+ if isinstance (dtype , types .Number ):
136+ def sdc_sum_number_impl (self ):
137+ length = len (self )
138+ result = 0
139+ for i in prange (length ):
140+ if not isnan (self [i ]):
141+ result += self [i ]
142+ else :
143+ return numpy .nan
144+
145+ return result
146+
147+ return sdc_sum_number_impl
148+
149+
150+ @sdc_overload (nansum )
151+ def sdc_sum_overload (self ):
152+ """
153+ Intel Scalable Dataframe Compiler Developer Guide
154+ *************************************************
155+ Parallel replacement of numpy.nansum.
156+ .. only:: developer
157+ Test: python -m sdc.runtests sdc.tests.test_sdc_numpy -k nansum
158+ """
159+
160+ dtype = self .dtype
161+ isnan = get_isnan (dtype )
162+ if not isinstance (self , types .Array ):
163+ return None
164+
165+ if isinstance (dtype , types .Number ):
166+ def sdc_nansum_number_impl (self ):
167+ length = len (self )
168+ result = 0
169+ for i in prange (length ):
170+ if not numpy .isnan (self [i ]):
171+ result += self [i ]
172+
173+ return result
174+
175+ return sdc_nansum_number_impl
0 commit comments