42
42
ABCSparseSeries , ABCSparseArray )
43
43
44
44
45
+ # -----------------------------------------------------------------------------
46
+ # Reversed Operations not available in the stdlib operator module.
47
+ # Defining these instead of using lambdas allows us to reference them by name.
48
+
49
+ def radd (left , right ):
50
+ return right + left
51
+
52
+
53
+ def rsub (left , right ):
54
+ return right - left
55
+
56
+
57
+ def rmul (left , right ):
58
+ return right * left
59
+
60
+
61
+ def rdiv (left , right ):
62
+ return right / left
63
+
64
+
65
+ def rtruediv (left , right ):
66
+ return right / left
67
+
68
+
69
+ def rfloordiv (left , right ):
70
+ return right // left
71
+
72
+
73
+ def rmod (left , right ):
74
+ return right % left
75
+
76
+
77
+ def rdivmod (left , right ):
78
+ return divmod (right , left )
79
+
80
+
81
+ def rpow (left , right ):
82
+ return right ** left
83
+
84
+
85
+ def rand_ (left , right ):
86
+ return operator .and_ (right , left )
87
+
88
+
89
+ def ror_ (left , right ):
90
+ return operator .or_ (right , left )
91
+
92
+
93
+ def rxor (left , right ):
94
+ return operator .xor (right , left )
95
+
96
+
97
+ # -----------------------------------------------------------------------------
98
+
45
99
def _gen_eval_kwargs (name ):
46
100
"""
47
101
Find the keyword arguments to pass to numexpr for the given operation.
@@ -140,64 +194,51 @@ def _get_frame_op_default_axis(name):
140
194
_op_descriptions = {
141
195
'add' : {'op' : '+' ,
142
196
'desc' : 'Addition' ,
143
- 'reversed' : False ,
144
197
'reverse' : 'radd' },
145
198
'sub' : {'op' : '-' ,
146
199
'desc' : 'Subtraction' ,
147
- 'reversed' : False ,
148
200
'reverse' : 'rsub' },
149
201
'mul' : {'op' : '*' ,
150
202
'desc' : 'Multiplication' ,
151
- 'reversed' : False ,
152
203
'reverse' : 'rmul' },
153
204
'mod' : {'op' : '%' ,
154
205
'desc' : 'Modulo' ,
155
- 'reversed' : False ,
156
206
'reverse' : 'rmod' },
157
207
'pow' : {'op' : '**' ,
158
208
'desc' : 'Exponential power' ,
159
- 'reversed' : False ,
160
209
'reverse' : 'rpow' },
161
210
'truediv' : {'op' : '/' ,
162
211
'desc' : 'Floating division' ,
163
- 'reversed' : False ,
164
212
'reverse' : 'rtruediv' },
165
213
'floordiv' : {'op' : '//' ,
166
214
'desc' : 'Integer division' ,
167
- 'reversed' : False ,
168
215
'reverse' : 'rfloordiv' },
169
216
'divmod' : {'op' : 'divmod' ,
170
217
'desc' : 'Integer division and modulo' ,
171
- 'reversed' : False ,
172
218
'reverse' : None },
173
219
174
220
'eq' : {'op' : '==' ,
175
221
'desc' : 'Equal to' ,
176
- 'reversed' : False ,
177
222
'reverse' : None },
178
223
'ne' : {'op' : '!=' ,
179
224
'desc' : 'Not equal to' ,
180
- 'reversed' : False ,
181
225
'reverse' : None },
182
226
'lt' : {'op' : '<' ,
183
227
'desc' : 'Less than' ,
184
- 'reversed' : False ,
185
228
'reverse' : None },
186
229
'le' : {'op' : '<=' ,
187
230
'desc' : 'Less than or equal to' ,
188
- 'reversed' : False ,
189
231
'reverse' : None },
190
232
'gt' : {'op' : '>' ,
191
233
'desc' : 'Greater than' ,
192
- 'reversed' : False ,
193
234
'reverse' : None },
194
235
'ge' : {'op' : '>=' ,
195
236
'desc' : 'Greater than or equal to' ,
196
- 'reversed' : False ,
197
237
'reverse' : None }}
198
238
199
239
_op_names = list (_op_descriptions .keys ())
200
240
for key in _op_names :
241
+ _op_descriptions [key ]['reversed' ] = False
201
242
reverse_op = _op_descriptions [key ]['reverse' ]
202
243
if reverse_op is not None :
203
244
_op_descriptions [reverse_op ] = _op_descriptions [key ].copy ()
@@ -392,7 +433,7 @@ def names(x):
392
433
# yapf: disable
393
434
new_methods = dict (
394
435
add = arith_method (operator .add , names ('add' ), op ('+' )),
395
- radd = arith_method (lambda x , y : y + x , names ('radd' ), op ('+' )),
436
+ radd = arith_method (radd , names ('radd' ), op ('+' )),
396
437
sub = arith_method (operator .sub , names ('sub' ), op ('-' )),
397
438
mul = arith_method (operator .mul , names ('mul' ), op ('*' )),
398
439
truediv = arith_method (operator .truediv , names ('truediv' ), op ('/' )),
@@ -404,13 +445,11 @@ def names(x):
404
445
# not entirely sure why this is necessary, but previously was included
405
446
# so it's here to maintain compatibility
406
447
rmul = arith_method (operator .mul , names ('rmul' ), op ('*' )),
407
- rsub = arith_method (lambda x , y : y - x , names ('rsub' ), op ('-' )),
408
- rtruediv = arith_method (lambda x , y : operator .truediv (y , x ),
409
- names ('rtruediv' ), op ('/' )),
410
- rfloordiv = arith_method (lambda x , y : operator .floordiv (y , x ),
411
- names ('rfloordiv' ), op ('//' )),
412
- rpow = arith_method (lambda x , y : y ** x , names ('rpow' ), op ('**' )),
413
- rmod = arith_method (lambda x , y : y % x , names ('rmod' ), op ('%' )))
448
+ rsub = arith_method (rsub , names ('rsub' ), op ('-' )),
449
+ rtruediv = arith_method (rtruediv , names ('rtruediv' ), op ('/' )),
450
+ rfloordiv = arith_method (rfloordiv , names ('rfloordiv' ), op ('//' )),
451
+ rpow = arith_method (rpow , names ('rpow' ), op ('**' )),
452
+ rmod = arith_method (rmod , names ('rmod' ), op ('%' )))
414
453
# yapf: enable
415
454
new_methods ['div' ] = new_methods ['truediv' ]
416
455
new_methods ['rdiv' ] = new_methods ['rtruediv' ]
@@ -430,12 +469,9 @@ def names(x):
430
469
or_ = bool_method (operator .or_ , names ('or_' ), op ('|' )),
431
470
# For some reason ``^`` wasn't used in original.
432
471
xor = bool_method (operator .xor , names ('xor' ), op ('^' )),
433
- rand_ = bool_method (lambda x , y : operator .and_ (y , x ),
434
- names ('rand_' ), op ('&' )),
435
- ror_ = bool_method (lambda x , y : operator .or_ (y , x ),
436
- names ('ror_' ), op ('|' )),
437
- rxor = bool_method (lambda x , y : operator .xor (y , x ),
438
- names ('rxor' ), op ('^' ))))
472
+ rand_ = bool_method (rand_ , names ('rand_' ), op ('&' )),
473
+ ror_ = bool_method (ror_ , names ('ror_' ), op ('|' )),
474
+ rxor = bool_method (rxor , names ('rxor' ), op ('^' ))))
439
475
if have_divmod :
440
476
# divmod doesn't have an op that is supported by numexpr
441
477
new_methods ['divmod' ] = arith_method (divmod , names ('divmod' ), None )
0 commit comments