Skip to content

Commit 8ad75b6

Browse files
author
Kevin D Smith
committed
Add reverse operator methods
1 parent 1edf19a commit 8ad75b6

File tree

2 files changed

+47
-0
lines changed

2 files changed

+47
-0
lines changed

swat/cas/table.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9254,48 +9254,72 @@ def radd(self, other, level=None, fill_value=None, axis=0):
92549254
add_length=True)
92559255
return self._compute('radd', '({other}) + ({value})', other=other)
92569256

9257+
def __radd__(self, other):
9258+
return self.radd(other)
9259+
92579260
def rsub(self, other, level=None, fill_value=None, axis=0):
92589261
''' Subtraction of CASColumn and other, element-wise '''
92599262
if self._is_character():
92609263
raise AttributeError('rsub')
92619264
return self._compute('rsub', '({other}) - ({value})', other=other)
92629265

9266+
def __rsub__(self, other):
9267+
return self.rsub(other)
9268+
92639269
def rmul(self, other, level=None, fill_value=None, axis=0):
92649270
''' Multiplication of CASColumn and other, element-wise '''
92659271
if self._is_character():
92669272
return self.str.repeat(other)
92679273
return self._compute('rmul', '({other}) * ({value})', other=other)
92689274

9275+
def __rmul__(self, other):
9276+
return self.rmul(other)
9277+
92699278
def rdiv(self, other, level=None, fill_value=None, axis=0):
92709279
''' Floating division of CASColumn and other, element-wise '''
92719280
if self._is_character():
92729281
raise AttributeError('rdiv')
92739282
return self._compute('rdiv', '({other}) / ({value})', other=other)
92749283

9284+
def __rdiv__(self, other):
9285+
return self.rdiv(other)
9286+
92759287
def rtruediv(self, other, level=None, fill_value=None, axis=0):
92769288
''' Floating division of CASColumn and other, element-wise '''
92779289
if self._is_character():
92789290
raise AttributeError('rtruediv')
92799291
return self._compute('rtruediv', '({other}) / ({value})', other=other)
92809292

9293+
def __rtruediv__(self, other):
9294+
return self.rtruediv(other)
9295+
92819296
def rfloordiv(self, other, level=None, fill_value=None, axis=0):
92829297
''' Integer division of CASColumn and other, element-wise '''
92839298
if self._is_character():
92849299
raise AttributeError('floordiv')
92859300
return self._compute('div', 'floor(({other}) / ({value}))', other=other)
92869301

9302+
def __rfloordiv__(self, other):
9303+
return self.rfloordiv(other)
9304+
92879305
def rmod(self, other, level=None, fill_value=None, axis=0):
92889306
''' Modulo of CASColumn and other, element-wise '''
92899307
if self._is_character():
92909308
raise AttributeError('rmod')
92919309
return self._compute('rmod', 'mod({other}, {value})', other=other)
92929310

9311+
def __rmod__(self, other):
9312+
return self.rmod(other)
9313+
92939314
def rpow(self, other, level=None, fill_value=None, axis=0):
92949315
''' Exponential power of CASColumn and other, element-wise '''
92959316
if self._is_character():
92969317
raise AttributeError('rpow')
92979318
return self._compute('rpow', '({other})**({value})', other=other)
92989319

9320+
def __rpow__(self, other):
9321+
return self.rpow(other)
9322+
92999323
def round(self, decimals=0, out=None):
93009324
''' Round each value of the CASColumn to the given number of decimals '''
93019325
if self._is_character():

swat/tests/cas/test_table.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2714,6 +2714,8 @@ def assertItemsAlmostEqual(list1, list2, decimals=4):
27142714
tblout = (tbl['MSRP'].pow(-tbl['EngineSize']/10))
27152715
assertItemsAlmostEqual(dfout, tblout, 2)
27162716

2717+
self.assertColsEqual(123.45 + df['MSRP'], 123.45 + tbl['MSRP'])
2718+
self.assertColsEqual(-123.45 + df['MSRP'], -123.45 + tbl['MSRP'])
27172719
self.assertColsEqual((df['MSRP'].radd(123.45)),
27182720
(tbl['MSRP'].radd(123.45)))
27192721
self.assertColsEqual((df['MSRP'].radd(-123.45)),
@@ -2724,6 +2726,8 @@ def assertItemsAlmostEqual(list1, list2, decimals=4):
27242726
self.assertColsEqual((df['MSRP'].radd(-df['EngineSize'])),
27252727
(tbl['MSRP'].radd(-tbl['EngineSize'])))
27262728

2729+
self.assertColsEqual(123.45 - df['MSRP'], 123.45 - tbl['MSRP'])
2730+
self.assertColsEqual(-123.45 - df['MSRP'], -123.45 - tbl['MSRP'])
27272731
self.assertColsEqual((df['MSRP'].rsub(123.45)),
27282732
(tbl['MSRP'].rsub(123.45)))
27292733
self.assertColsEqual((df['MSRP'].rsub(-123.45)),
@@ -2734,6 +2738,8 @@ def assertItemsAlmostEqual(list1, list2, decimals=4):
27342738
self.assertColsEqual((df['MSRP'].rsub(-df['EngineSize'])),
27352739
(tbl['MSRP'].rsub(-tbl['EngineSize'])))
27362740

2741+
assertItemsAlmostEqual(123.45 * df['MSRP'], 123.45 * tbl['MSRP'])
2742+
assertItemsAlmostEqual(-123.45 * df['MSRP'], -123.45 * tbl['MSRP'])
27372743
assertItemsAlmostEqual((df['MSRP'].rmul(123.45)),
27382744
(tbl['MSRP'].rmul(123.45)))
27392745
assertItemsAlmostEqual((df['MSRP'].rmul(-123.45)),
@@ -2744,6 +2750,8 @@ def assertItemsAlmostEqual(list1, list2, decimals=4):
27442750
assertItemsAlmostEqual((df['MSRP'].rmul(-df['EngineSize'])),
27452751
(tbl['MSRP'].rmul(-tbl['EngineSize'])))
27462752

2753+
assertItemsAlmostEqual(123.45 / df['MSRP'], 123.45 / tbl['MSRP'])
2754+
assertItemsAlmostEqual(-123.45 / df['MSRP'], -123.45 / tbl['MSRP'])
27472755
assertItemsAlmostEqual((df['MSRP'].rdiv(123.45)),
27482756
(tbl['MSRP'].rdiv(123.45)))
27492757
assertItemsAlmostEqual((df['MSRP'].rdiv(-123.45)),
@@ -2752,6 +2760,9 @@ def assertItemsAlmostEqual(list1, list2, decimals=4):
27522760
(tbl['MSRP'].rtruediv(123.45)))
27532761
assertItemsAlmostEqual((df['MSRP'].rtruediv(-123.45)),
27542762
(tbl['MSRP'].rtruediv(-123.45)))
2763+
2764+
assertItemsAlmostEqual(123.45 // df['MSRP'], 123.45 // tbl['MSRP'])
2765+
assertItemsAlmostEqual(-123.45 // df['MSRP'], -123.45 // tbl['MSRP'])
27552766
assertItemsAlmostEqual((df['MSRP'].rfloordiv(123.45)),
27562767
(tbl['MSRP'].rfloordiv(123.45)))
27572768
assertItemsAlmostEqual((df['MSRP'].rfloordiv(-123.45)),
@@ -2770,6 +2781,10 @@ def assertItemsAlmostEqual(list1, list2, decimals=4):
27702781
assertItemsAlmostEqual((df['MSRP'].rfloordiv(-df['EngineSize'])),
27712782
(tbl['MSRP'].rfloordiv(-tbl['EngineSize'])))
27722783

2784+
dfout = (123.45 % df['MSRP'])
2785+
tblout = (123.45 % tbl['MSRP'])
2786+
assertItemsAlmostEqual(dfout, tblout, 4)
2787+
27732788
dfout = (df['MSRP'].rmod(123.45))
27742789
tblout = (tbl['MSRP'].rmod(123.45))
27752790
assertItemsAlmostEqual(dfout, tblout, 4)
@@ -2788,6 +2803,10 @@ def assertItemsAlmostEqual(list1, list2, decimals=4):
27882803
for dfo, tblo in zip(sorted(dfout), sorted(tblout)):
27892804
self.assertAlmostEqual(dfo, tblo, 4)
27902805

2806+
dfout = (0.12345 ** df['MSRP'])
2807+
tblout = (0.12345 ** tbl['MSRP'])
2808+
assertItemsAlmostEqual(dfout, tblout, 4)
2809+
27912810
dfout = (df['MSRP'].rpow(0.12345))
27922811
tblout = (tbl['MSRP'].rpow(0.12345))
27932812
assertItemsAlmostEqual(dfout, tblout, 4)
@@ -2889,6 +2908,9 @@ def test_character_operators(self):
28892908
with self.assertRaises(AttributeError):
28902909
tbl['Make'].pow(tbl['Model'])
28912910

2911+
self.assertColsEqual('Foo' + df['Make'], 'Foo' + tbl['Make'])
2912+
self.assertColsEqual((df['Make'].radd(df['Model'].str.strip())),
2913+
(tbl['Make'].radd(tbl['Model'].str.strip())))
28922914
self.assertColsEqual((df['Make'].radd('Foo')),
28932915
(tbl['Make'].radd('Foo')))
28942916
self.assertColsEqual((df['Make'].radd(df['Model'].str.strip())),
@@ -2899,6 +2921,7 @@ def test_character_operators(self):
28992921
with self.assertRaises(AttributeError):
29002922
tbl['Make'].rsub(tbl['Model'])
29012923

2924+
self.assertColsEqual(3 * df['Make'], 3 * tbl['Make'])
29022925
self.assertColsEqual((df['Make'].rmul(3)),
29032926
(tbl['Make'].rmul(3)))
29042927
self.assertColsEqual((df['Make'].rmul(df['EngineSize'].astype('int'))),

0 commit comments

Comments
 (0)