@@ -36,22 +36,14 @@ def test_bool_operators_with_nas(self, bool_op):
36
36
expected [mask ] = False
37
37
assert_series_equal (result , expected )
38
38
39
- def test_operators_bitwise (self ):
39
+ def test_logical_operators_bool_dtype_with_empty (self ):
40
40
# GH#9016: support bitwise op for integer types
41
41
index = list ("bca" )
42
42
43
43
s_tft = Series ([True , False , True ], index = index )
44
44
s_fff = Series ([False , False , False ], index = index )
45
- s_tff = Series ([True , False , False ], index = index )
46
45
s_empty = Series ([])
47
46
48
- # TODO: unused
49
- # s_0101 = Series([0, 1, 0, 1])
50
-
51
- s_0123 = Series (range (4 ), dtype = "int64" )
52
- s_3333 = Series ([3 ] * 4 )
53
- s_4444 = Series ([4 ] * 4 )
54
-
55
47
res = s_tft & s_empty
56
48
expected = s_fff
57
49
assert_series_equal (res , expected )
@@ -60,6 +52,16 @@ def test_operators_bitwise(self):
60
52
expected = s_tft
61
53
assert_series_equal (res , expected )
62
54
55
+ def test_logical_operators_int_dtype_with_int_dtype (self ):
56
+ # GH#9016: support bitwise op for integer types
57
+
58
+ # TODO: unused
59
+ # s_0101 = Series([0, 1, 0, 1])
60
+
61
+ s_0123 = Series (range (4 ), dtype = "int64" )
62
+ s_3333 = Series ([3 ] * 4 )
63
+ s_4444 = Series ([4 ] * 4 )
64
+
63
65
res = s_0123 & s_3333
64
66
expected = Series (range (4 ), dtype = "int64" )
65
67
assert_series_equal (res , expected )
@@ -68,76 +70,129 @@ def test_operators_bitwise(self):
68
70
expected = Series (range (4 , 8 ), dtype = "int64" )
69
71
assert_series_equal (res , expected )
70
72
71
- s_a0b1c0 = Series ([1 ], list ("b" ))
72
-
73
- res = s_tft & s_a0b1c0
74
- expected = s_tff .reindex (list ("abc" ))
73
+ s_1111 = Series ([1 ] * 4 , dtype = "int8" )
74
+ res = s_0123 & s_1111
75
+ expected = Series ([0 , 1 , 0 , 1 ], dtype = "int64" )
75
76
assert_series_equal (res , expected )
76
77
77
- res = s_tft | s_a0b1c0
78
- expected = s_tft . reindex ( list ( "abc" ) )
78
+ res = s_0123 . astype ( np . int16 ) | s_1111 . astype ( np . int32 )
79
+ expected = Series ([ 1 , 1 , 3 , 3 ], dtype = "int32" )
79
80
assert_series_equal (res , expected )
80
81
81
- n0 = 0
82
- res = s_tft & n0
83
- expected = s_fff
84
- assert_series_equal (res , expected )
82
+ def test_logical_operators_int_dtype_with_int_scalar (self ):
83
+ # GH#9016: support bitwise op for integer types
84
+ s_0123 = Series (range (4 ), dtype = "int64" )
85
85
86
- res = s_0123 & n0
86
+ res = s_0123 & 0
87
87
expected = Series ([0 ] * 4 )
88
88
assert_series_equal (res , expected )
89
89
90
- n1 = 1
91
- res = s_tft & n1
92
- expected = s_tft
93
- assert_series_equal (res , expected )
94
-
95
- res = s_0123 & n1
90
+ res = s_0123 & 1
96
91
expected = Series ([0 , 1 , 0 , 1 ])
97
92
assert_series_equal (res , expected )
98
93
99
- s_1111 = Series ([1 ] * 4 , dtype = "int8" )
100
- res = s_0123 & s_1111
101
- expected = Series ([0 , 1 , 0 , 1 ], dtype = "int64" )
102
- assert_series_equal (res , expected )
103
-
104
- res = s_0123 .astype (np .int16 ) | s_1111 .astype (np .int32 )
105
- expected = Series ([1 , 1 , 3 , 3 ], dtype = "int32" )
106
- assert_series_equal (res , expected )
94
+ def test_logical_operators_int_dtype_with_float (self ):
95
+ # GH#9016: support bitwise op for integer types
96
+ s_0123 = Series (range (4 ), dtype = "int64" )
107
97
108
- with pytest .raises (TypeError ):
109
- s_1111 & "a"
110
- with pytest .raises (TypeError ):
111
- s_1111 & ["a" , "b" , "c" , "d" ]
112
98
with pytest .raises (TypeError ):
113
99
s_0123 & np .NaN
114
100
with pytest .raises (TypeError ):
115
101
s_0123 & 3.14
116
102
with pytest .raises (TypeError ):
117
103
s_0123 & [0.1 , 4 , 3.14 , 2 ]
104
+ with pytest .raises (TypeError ):
105
+ s_0123 & np .array ([0.1 , 4 , 3.14 , 2 ])
118
106
119
- # s_0123 will be all false now because of reindexing like s_tft
120
- exp = Series ([False ] * 7 , index = [0 , 1 , 2 , 3 , "a" , "b" , "c" ])
121
- assert_series_equal (s_tft & s_0123 , exp )
122
-
123
- # s_tft will be all false now because of reindexing like s_0123
124
- exp = Series ([False ] * 7 , index = [0 , 1 , 2 , 3 , "a" , "b" , "c" ])
125
- assert_series_equal (s_0123 & s_tft , exp )
126
-
127
- assert_series_equal (s_0123 & False , Series ([False ] * 4 ))
128
- assert_series_equal (s_0123 ^ False , Series ([False , True , True , True ]))
129
- assert_series_equal (s_0123 & [False ], Series ([False ] * 4 ))
130
- assert_series_equal (s_0123 & (False ), Series ([False ] * 4 ))
131
- assert_series_equal (
132
- s_0123 & Series ([False , np .NaN , False , False ]), Series ([False ] * 4 )
133
- )
107
+ # FIXME: this should be consistent with the list case above
108
+ expected = Series ([False , True , False , True ])
109
+ result = s_0123 & Series ([0.1 , 4 , - 3.14 , 2 ])
110
+ assert_series_equal (result , expected )
111
+
112
+ def test_logical_operators_int_dtype_with_str (self ):
113
+ s_1111 = Series ([1 ] * 4 , dtype = "int8" )
114
+
115
+ with pytest .raises (TypeError ):
116
+ s_1111 & "a"
117
+ with pytest .raises (TypeError ):
118
+ s_1111 & ["a" , "b" , "c" , "d" ]
119
+
120
+ def test_logical_operators_int_dtype_with_bool (self ):
121
+ # GH#9016: support bitwise op for integer types
122
+ s_0123 = Series (range (4 ), dtype = "int64" )
123
+
124
+ expected = Series ([False ] * 4 )
125
+
126
+ result = s_0123 & False
127
+ assert_series_equal (result , expected )
128
+
129
+ result = s_0123 & [False ]
130
+ assert_series_equal (result , expected )
131
+
132
+ result = s_0123 & (False ,)
133
+ assert_series_equal (result , expected )
134
134
135
- s_ftft = Series ([False , True , False , True ])
136
- assert_series_equal (s_0123 & Series ([0.1 , 4 , - 3.14 , 2 ]), s_ftft )
135
+ result = s_0123 ^ False
136
+ expected = Series ([False , True , True , True ])
137
+ assert_series_equal (result , expected )
138
+
139
+ def test_logical_operators_int_dtype_with_object (self ):
140
+ # GH#9016: support bitwise op for integer types
141
+ s_0123 = Series (range (4 ), dtype = "int64" )
142
+
143
+ result = s_0123 & Series ([False , np .NaN , False , False ])
144
+ expected = Series ([False ] * 4 )
145
+ assert_series_equal (result , expected )
137
146
138
147
s_abNd = Series (["a" , "b" , np .NaN , "d" ])
139
- res = s_0123 & s_abNd
140
- expected = s_ftft
148
+ result = s_0123 & s_abNd
149
+ expected = Series ([False , True , False , True ])
150
+ assert_series_equal (result , expected )
151
+
152
+ def test_logical_operators_bool_dtype_with_int (self ):
153
+ index = list ("bca" )
154
+
155
+ s_tft = Series ([True , False , True ], index = index )
156
+ s_fff = Series ([False , False , False ], index = index )
157
+
158
+ res = s_tft & 0
159
+ expected = s_fff
160
+ assert_series_equal (res , expected )
161
+
162
+ res = s_tft & 1
163
+ expected = s_tft
164
+ assert_series_equal (res , expected )
165
+
166
+ def test_logical_operators_int_dtype_with_bool_dtype_and_reindex (self ):
167
+ # GH#9016: support bitwise op for integer types
168
+
169
+ # with non-matching indexes, logical operators will cast to object
170
+ # before operating
171
+ index = list ("bca" )
172
+
173
+ s_tft = Series ([True , False , True ], index = index )
174
+ s_tft = Series ([True , False , True ], index = index )
175
+ s_tff = Series ([True , False , False ], index = index )
176
+
177
+ s_0123 = Series (range (4 ), dtype = "int64" )
178
+
179
+ # s_0123 will be all false now because of reindexing like s_tft
180
+ expected = Series ([False ] * 7 , index = [0 , 1 , 2 , 3 , "a" , "b" , "c" ])
181
+ result = s_tft & s_0123
182
+ assert_series_equal (result , expected )
183
+
184
+ expected = Series ([False ] * 7 , index = [0 , 1 , 2 , 3 , "a" , "b" , "c" ])
185
+ result = s_0123 & s_tft
186
+ assert_series_equal (result , expected )
187
+
188
+ s_a0b1c0 = Series ([1 ], list ("b" ))
189
+
190
+ res = s_tft & s_a0b1c0
191
+ expected = s_tff .reindex (list ("abc" ))
192
+ assert_series_equal (res , expected )
193
+
194
+ res = s_tft | s_a0b1c0
195
+ expected = s_tft .reindex (list ("abc" ))
141
196
assert_series_equal (res , expected )
142
197
143
198
def test_scalar_na_logical_ops_corners (self ):
@@ -523,6 +578,7 @@ def test_comparison_operators_with_nas(self):
523
578
524
579
assert_series_equal (result , expected )
525
580
581
+ # FIXME: dont leave commented-out
526
582
# fffffffuuuuuuuuuuuu
527
583
# result = f(val, s)
528
584
# expected = f(val, s.dropna()).reindex(s.index)
0 commit comments