@@ -596,77 +596,81 @@ def test_divide_decimal(self):
596
596
597
597
assert_series_equal (expected , s )
598
598
599
- def test_div (self ):
599
+ @pytest .mark .parametrize (
600
+ 'dtype2' ,
601
+ [
602
+ np .int64 , np .int32 , np .int16 , np .int8 ,
603
+ np .float64 , np .float32 , np .float16 ,
604
+ np .uint64 , np .uint32 ,
605
+ np .uint16 , np .uint8
606
+ ])
607
+ @pytest .mark .parametrize ('dtype1' , [np .int64 , np .float64 , np .uint64 ])
608
+ def test_ser_div_ser (self , dtype1 , dtype2 ):
609
+ # no longer do integer div for any ops, but deal with the 0's
610
+ first = Series ([3 , 4 , 5 , 8 ], name = 'first' ).astype (dtype1 )
611
+ second = Series ([0 , 0 , 0 , 3 ], name = 'second' ).astype (dtype2 )
612
+
600
613
with np .errstate (all = 'ignore' ):
601
- # no longer do integer div for any ops, but deal with the 0's
602
- p = DataFrame ({'first' : [3 , 4 , 5 , 8 ], 'second' : [0 , 0 , 0 , 3 ]})
603
- result = p ['first' ] / p ['second' ]
604
- expected = Series (
605
- p ['first' ].values .astype (float ) / p ['second' ].values ,
606
- dtype = 'float64' )
607
- expected .iloc [0 :3 ] = np .inf
608
- assert_series_equal (result , expected )
614
+ expected = Series (first .values .astype (np .float64 ) / second .values ,
615
+ dtype = 'float64' , name = None )
616
+ expected .iloc [0 :3 ] = np .inf
609
617
610
- result = p [ ' first' ] / 0
611
- expected = Series ( np . inf , index = p . index , name = 'first' )
612
- assert_series_equal ( result , expected )
618
+ result = first / second
619
+ assert_series_equal ( result , expected )
620
+ assert not result . equals ( second / first )
613
621
614
- p = p .astype ('float64' )
615
- result = p ['first' ] / p ['second' ]
616
- expected = Series (p ['first' ].values / p ['second' ].values )
617
- assert_series_equal (result , expected )
622
+ def test_div_equiv_binop (self ):
623
+ # Test Series.div as well as Series.__div__
624
+ # float/integer issue
625
+ # GH#7785
626
+ first = pd .Series ([1 , 0 ], name = 'first' )
627
+ second = pd .Series ([- 0.01 , - 0.02 ], name = 'second' )
628
+ expected = Series ([- 0.01 , - np .inf ])
618
629
619
- p = DataFrame ({'first' : [3 , 4 , 5 , 8 ], 'second' : [1 , 1 , 1 , 1 ]})
620
- result = p ['first' ] / p ['second' ]
621
- assert_series_equal (result , p ['first' ].astype ('float64' ),
622
- check_names = False )
623
- assert result .name is None
624
- assert not result .equals (p ['second' ] / p ['first' ])
625
-
626
- # inf signing
627
- s = Series ([np .nan , 1. , - 1. ])
628
- result = s / 0
629
- expected = Series ([np .nan , np .inf , - np .inf ])
630
- assert_series_equal (result , expected )
630
+ result = second .div (first )
631
+ assert_series_equal (result , expected , check_names = False )
631
632
632
- # float/integer issue
633
- # GH 7785
634
- p = DataFrame ({'first' : (1 , 0 ), 'second' : (- 0.01 , - 0.02 )})
635
- expected = Series ([- 0.01 , - np .inf ])
633
+ result = second / first
634
+ assert_series_equal (result , expected )
636
635
637
- result = p ['second' ].div (p ['first' ])
638
- assert_series_equal (result , expected , check_names = False )
636
+ def test_rdiv_zero_compat (self ):
637
+ # GH#8674
638
+ zero_array = np .array ([0 ] * 5 )
639
+ data = np .random .randn (5 )
640
+ expected = pd .Series ([0. ] * 5 )
639
641
640
- result = p [ 'second' ] / p [ 'first' ]
641
- assert_series_equal (result , expected )
642
+ result = zero_array / pd . Series ( data )
643
+ assert_series_equal (result , expected )
642
644
643
- # GH 9144
644
- s = Series ([ - 1 , 0 , 1 ] )
645
+ result = pd . Series ( zero_array ) / data
646
+ assert_series_equal ( result , expected )
645
647
646
- result = 0 / s
647
- expected = Series ([0.0 , nan , 0.0 ])
648
- assert_series_equal (result , expected )
648
+ result = pd .Series (zero_array ) / pd .Series (data )
649
+ assert_series_equal (result , expected )
649
650
650
- result = s / 0
651
- expected = Series ([- inf , nan , inf ])
652
- assert_series_equal (result , expected )
651
+ def test_div_zero_inf_signs (self ):
652
+ # GH#9144, inf signing
653
+ ser = Series ([- 1 , 0 , 1 ], name = 'first' )
654
+ expected = Series ([- np .inf , np .nan , np .inf ], name = 'first' )
653
655
654
- result = s // 0
655
- expected = Series ([- inf , nan , inf ])
656
- assert_series_equal (result , expected )
656
+ result = ser / 0
657
+ assert_series_equal (result , expected )
657
658
658
- # GH 8674
659
- zero_array = np .array ([0 ] * 5 )
660
- data = np .random .randn (5 )
661
- expected = pd .Series ([0. ] * 5 )
662
- result = zero_array / pd .Series (data )
663
- assert_series_equal (result , expected )
659
+ def test_rdiv_zero (self ):
660
+ # GH#9144
661
+ ser = Series ([- 1 , 0 , 1 ], name = 'first' )
662
+ expected = Series ([0.0 , np .nan , 0.0 ], name = 'first' )
664
663
665
- result = pd . Series ( zero_array ) / data
666
- assert_series_equal (result , expected )
664
+ result = 0 / ser
665
+ assert_series_equal (result , expected )
667
666
668
- result = pd .Series (zero_array ) / pd .Series (data )
669
- assert_series_equal (result , expected )
667
+ def test_floordiv_div (self ):
668
+ # GH#9144
669
+ ser = Series ([- 1 , 0 , 1 ], name = 'first' )
670
+
671
+ result = ser // 0
672
+ expected = Series ([- inf , nan , inf ], name = 'first' )
673
+ assert_series_equal (result , expected )
670
674
671
675
672
676
class TestTimedeltaSeriesArithmeticWithIntegers (object ):
@@ -1576,33 +1580,42 @@ def test_dt64_series_add_intlike(self, tz):
1576
1580
1577
1581
1578
1582
class TestSeriesOperators (TestData ):
1579
- def test_op_method (self ):
1580
- def check (series , other , check_reverse = False ):
1581
- simple_ops = ['add' , 'sub' , 'mul' , 'floordiv' , 'truediv' , 'pow' ]
1582
- if not compat .PY3 :
1583
- simple_ops .append ('div' )
1584
-
1585
- for opname in simple_ops :
1586
- op = getattr (Series , opname )
1587
-
1588
- if op == 'div' :
1589
- alt = operator .truediv
1590
- else :
1591
- alt = getattr (operator , opname )
1592
-
1593
- result = op (series , other )
1594
- expected = alt (series , other )
1595
- assert_almost_equal (result , expected )
1596
- if check_reverse :
1597
- rop = getattr (Series , "r" + opname )
1598
- result = rop (series , other )
1599
- expected = alt (other , series )
1600
- assert_almost_equal (result , expected )
1583
+ @pytest .mark .parametrize (
1584
+ 'ts' ,
1585
+ [
1586
+ (lambda x : x , lambda x : x * 2 , False ),
1587
+ (lambda x : x , lambda x : x [::2 ], False ),
1588
+ (lambda x : x , lambda x : 5 , True ),
1589
+ (lambda x : tm .makeFloatSeries (),
1590
+ lambda x : tm .makeFloatSeries (),
1591
+ True )
1592
+ ])
1593
+ @pytest .mark .parametrize ('opname' , ['add' , 'sub' , 'mul' , 'floordiv' ,
1594
+ 'truediv' , 'div' , 'pow' ])
1595
+ def test_op_method (self , opname , ts ):
1596
+ # check that Series.{opname} behaves like Series.__{opname}__,
1597
+ series = ts [0 ](self .ts )
1598
+ other = ts [1 ](self .ts )
1599
+ check_reverse = ts [2 ]
1600
+
1601
+ if opname == 'div' and compat .PY3 :
1602
+ pytest .skip ('div test only for Py3' )
1603
+
1604
+ op = getattr (Series , opname )
1605
+
1606
+ if op == 'div' :
1607
+ alt = operator .truediv
1608
+ else :
1609
+ alt = getattr (operator , opname )
1601
1610
1602
- check (self .ts , self .ts * 2 )
1603
- check (self .ts , self .ts [::2 ])
1604
- check (self .ts , 5 , check_reverse = True )
1605
- check (tm .makeFloatSeries (), tm .makeFloatSeries (), check_reverse = True )
1611
+ result = op (series , other )
1612
+ expected = alt (series , other )
1613
+ assert_almost_equal (result , expected )
1614
+ if check_reverse :
1615
+ rop = getattr (Series , "r" + opname )
1616
+ result = rop (series , other )
1617
+ expected = alt (other , series )
1618
+ assert_almost_equal (result , expected )
1606
1619
1607
1620
def test_neg (self ):
1608
1621
assert_series_equal (- self .series , - 1 * self .series )
@@ -1971,20 +1984,15 @@ def test_operators_corner(self):
1971
1984
index = self .ts .index [:- 5 ], name = 'ts' )
1972
1985
tm .assert_series_equal (added [:- 5 ], expected )
1973
1986
1974
- def test_operators_reverse_object (self ):
1987
+ @pytest .mark .parametrize ('op' , [operator .add , operator .sub , operator .mul ,
1988
+ operator .truediv , operator .floordiv ])
1989
+ def test_operators_reverse_object (self , op ):
1975
1990
# GH 56
1976
1991
arr = Series (np .random .randn (10 ), index = np .arange (10 ), dtype = object )
1977
1992
1978
- def _check_op (arr , op ):
1979
- result = op (1. , arr )
1980
- expected = op (1. , arr .astype (float ))
1981
- assert_series_equal (result .astype (float ), expected )
1982
-
1983
- _check_op (arr , operator .add )
1984
- _check_op (arr , operator .sub )
1985
- _check_op (arr , operator .mul )
1986
- _check_op (arr , operator .truediv )
1987
- _check_op (arr , operator .floordiv )
1993
+ result = op (1. , arr )
1994
+ expected = op (1. , arr .astype (float ))
1995
+ assert_series_equal (result .astype (float ), expected )
1988
1996
1989
1997
def test_arith_ops_df_compat (self ):
1990
1998
# GH 1134
0 commit comments