@@ -92,6 +92,15 @@ cdef class SeriesValues(object):
92
92
else :
93
93
return SeriesValues(self .values + right, self .name_mapping)
94
94
95
+ def __radd__ (self , left ):
96
+ if isinstance (left, SeriesValues):
97
+ if isinstance (self , SeriesValues):
98
+ return SeriesValues(left.values + self .values, self .name_mapping)
99
+ else :
100
+ return SeriesValues(left.values + self , left.name_mapping)
101
+ else :
102
+ return SeriesValues(left + self .values, self .name_mapping)
103
+
95
104
def __sub__ (self , right ):
96
105
if isinstance (right, SeriesValues):
97
106
if isinstance (self , SeriesValues):
@@ -101,6 +110,15 @@ cdef class SeriesValues(object):
101
110
else :
102
111
return SeriesValues(self .values - right, self .name_mapping)
103
112
113
+ def __rsub__ (self , left ):
114
+ if isinstance (left, SeriesValues):
115
+ if isinstance (self , SeriesValues):
116
+ return SeriesValues(left.values - self .values, self .name_mapping)
117
+ else :
118
+ return SeriesValues(left.values - self , left.name_mapping)
119
+ else :
120
+ return SeriesValues(left - self .values, self .name_mapping)
121
+
104
122
def __mul__ (self , right ):
105
123
if isinstance (right, SeriesValues):
106
124
if isinstance (self , SeriesValues):
@@ -110,6 +128,15 @@ cdef class SeriesValues(object):
110
128
else :
111
129
return SeriesValues(self .values * right, self .name_mapping)
112
130
131
+ def __rmul__ (self , left ):
132
+ if isinstance (left, SeriesValues):
133
+ if isinstance (self , SeriesValues):
134
+ return SeriesValues(left.values * self .values, self .name_mapping)
135
+ else :
136
+ return SeriesValues(left.values * self , left.name_mapping)
137
+ else :
138
+ return SeriesValues(left * self .values, self .name_mapping)
139
+
113
140
@ cython.cdivision (True )
114
141
def __truediv__ (self , right ):
115
142
cdef np.ndarray[double , ndim= 1 ] values
@@ -128,6 +155,24 @@ cdef class SeriesValues(object):
128
155
values[~ np.isfinite(values)] = NAN
129
156
return SeriesValues(values, name_mapping)
130
157
158
+ @ cython.cdivision (True )
159
+ def __rtruediv__ (self , left ):
160
+ cdef np.ndarray[double , ndim= 1 ] values
161
+ cdef dict name_mapping
162
+ if isinstance (left, SeriesValues):
163
+ if isinstance (self , SeriesValues):
164
+ values = left.values / self .values
165
+ name_mapping = self .name_mapping
166
+ else :
167
+ values = left.values / self
168
+ name_mapping = left.name_mapping
169
+ else :
170
+ values = left / self .values
171
+ name_mapping = self .name_mapping
172
+
173
+ values[~ np.isfinite(values)] = NAN
174
+ return SeriesValues(values, name_mapping)
175
+
131
176
@ cython.cdivision (True )
132
177
def __div__ (self , right ):
133
178
cdef np.ndarray[double , ndim= 1 ] values
@@ -146,6 +191,24 @@ cdef class SeriesValues(object):
146
191
values[~ np.isfinite(values)] = NAN
147
192
return SeriesValues(values, name_mapping)
148
193
194
+ @ cython.cdivision (True )
195
+ def __rdiv__ (self , left ):
196
+ cdef np.ndarray[double , ndim= 1 ] values
197
+ cdef dict name_mapping
198
+ if isinstance (left, SeriesValues):
199
+ if isinstance (self , SeriesValues):
200
+ values = left.values / self .values
201
+ name_mapping = self .name_mapping
202
+ else :
203
+ values = left.values / self
204
+ name_mapping = left.name_mapping
205
+ else :
206
+ values = left / self .values
207
+ name_mapping = self .name_mapping
208
+
209
+ values[~ np.isfinite(values)] = NAN
210
+ return SeriesValues(values, name_mapping)
211
+
149
212
def __and__ (self , right ):
150
213
if isinstance (right, SeriesValues):
151
214
if isinstance (self , SeriesValues):
@@ -155,6 +218,15 @@ cdef class SeriesValues(object):
155
218
else :
156
219
return SeriesValues(self .values.astype(bool ) & right, self .name_mapping)
157
220
221
+ def __rand__ (self , left ):
222
+ if isinstance (left, SeriesValues):
223
+ if isinstance (self , SeriesValues):
224
+ return SeriesValues(left.values.astype(bool ) & self .values.astype(bool ), self .name_mapping)
225
+ else :
226
+ return SeriesValues(left.values.astype(bool ) & self , left.name_mapping)
227
+ else :
228
+ return SeriesValues(left & self .values.astype(bool ), self .name_mapping)
229
+
158
230
def __or__ (self , right ):
159
231
if isinstance (right, SeriesValues):
160
232
if isinstance (self , SeriesValues):
@@ -164,6 +236,15 @@ cdef class SeriesValues(object):
164
236
else :
165
237
return SeriesValues(self .values.astype(bool ) | right, self .name_mapping)
166
238
239
+ def __ror__ (self , left ):
240
+ if isinstance (left, SeriesValues):
241
+ if isinstance (self , SeriesValues):
242
+ return SeriesValues(left.values.astype(bool ) | self .values.astype(bool ), self .name_mapping)
243
+ else :
244
+ return SeriesValues(left.values.astype(bool ) | self , left.name_mapping)
245
+ else :
246
+ return SeriesValues(left | self .values.astype(bool ), self .name_mapping)
247
+
167
248
def __xor__ (self , right ):
168
249
if isinstance (right, SeriesValues):
169
250
if isinstance (self , SeriesValues):
@@ -231,7 +312,7 @@ cdef class SeriesValues(object):
231
312
start = diff_loc + 1
232
313
data[isnan(self .values)] = NAN
233
314
else :
234
- data = rankdata(self .values).astype(float )
315
+ data = rankdata(self .values, nan_policy = " omit " ).astype(float )
235
316
data[isnan(self .values)] = NAN
236
317
return SeriesValues(data, self .name_mapping)
237
318
0 commit comments