@@ -596,77 +596,81 @@ def test_divide_decimal(self):
596596
597597 assert_series_equal (expected , s )
598598
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+
600613 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
609617
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 )
613621
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 ])
618629
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 )
631632
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 )
636635
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 )
639641
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 )
642644
643- # GH 9144
644- s = Series ([ - 1 , 0 , 1 ] )
645+ result = pd . Series ( zero_array ) / data
646+ assert_series_equal ( result , expected )
645647
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 )
649650
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' )
653655
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 )
657658
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' )
664663
665- result = pd . Series ( zero_array ) / data
666- assert_series_equal (result , expected )
664+ result = 0 / ser
665+ assert_series_equal (result , expected )
667666
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 )
670674
671675
672676class TestTimedeltaSeriesArithmeticWithIntegers (object ):
@@ -1576,33 +1580,42 @@ def test_dt64_series_add_intlike(self, tz):
15761580
15771581
15781582class 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 )
16011610
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 )
16061619
16071620 def test_neg (self ):
16081621 assert_series_equal (- self .series , - 1 * self .series )
@@ -1971,20 +1984,15 @@ def test_operators_corner(self):
19711984 index = self .ts .index [:- 5 ], name = 'ts' )
19721985 tm .assert_series_equal (added [:- 5 ], expected )
19731986
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 ):
19751990 # GH 56
19761991 arr = Series (np .random .randn (10 ), index = np .arange (10 ), dtype = object )
19771992
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 )
19881996
19891997 def test_arith_ops_df_compat (self ):
19901998 # GH 1134
0 commit comments