Skip to content

Commit 0fe7b39

Browse files
committed
write smoke tests for all updated functions and methods
1 parent 6a11530 commit 0fe7b39

File tree

5 files changed

+152
-44
lines changed

5 files changed

+152
-44
lines changed

pandas/computation/eval.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ def _check_for_locals(expr, stack_level, parser):
149149

150150
def eval(expr, parser='pandas', engine=None, truediv=True,
151151
local_dict=None, global_dict=None, resolvers=(), level=0,
152-
target=None, inplace=False):
152+
target=None, inplace=None):
153153
"""Evaluate a Python expression as a string using various backends.
154154
155155
The following arithmetic operations are supported: ``+``, ``-``, ``*``,
@@ -208,10 +208,14 @@ def eval(expr, parser='pandas', engine=None, truediv=True,
208208
scope. Most users will **not** need to change this parameter.
209209
target : a target object for assignment, optional, default is None
210210
essentially this is a passed in resolver
211-
inplace : bool, default False
211+
inplace : bool, default True
212212
If expression mutates, whether to modify object inplace or return
213213
copy with mutation.
214214
215+
WARNING: inplace=None currently falls back to to True, but
216+
in a future version, will default to False. Use inplace=True
217+
explicitly rather than relying on the default.
218+
215219
Returns
216220
-------
217221
ndarray, numeric scalar, DataFrame, Series

pandas/core/frame.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,7 @@
2323
import numpy as np
2424
import numpy.ma as ma
2525

26-
from pandas.types.cast import (_maybe_upcast,
27-
_infer_dtype_from_scalar,
26+
from pandas.types.cast import (_maybe_upcast, _infer_dtype_from_scalar,
2827
_possibly_cast_to_datetime,
2928
_possibly_infer_to_datetimelike,
3029
_possibly_convert_platform,
@@ -3291,7 +3290,7 @@ def sort(self, columns=None, axis=0, ascending=True, inplace=False,
32913290
def sort_index(self, axis=0, level=None, ascending=True, inplace=False,
32923291
kind='quicksort', na_position='last', sort_remaining=True,
32933292
by=None):
3294-
inplace = _enforce_bool_type(inplace)
3293+
inplace = _validate_bool_type(inplace)
32953294
# 10726
32963295
if by is not None:
32973296
warnings.warn("by argument to sort_index is deprecated, pls use "

pandas/core/internals.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1965,7 +1965,6 @@ def replace(self, to_replace, value, inplace=False, filter=None,
19651965

19661966
def _replace_single(self, to_replace, value, inplace=False, filter=None,
19671967
regex=False, convert=True, mgr=None):
1968-
19691968
inplace = _validate_bool_type(inplace)
19701969

19711970
# to_replace is regex compilable

pandas/tests/test_common.py

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -197,20 +197,6 @@ def test_dict_compat():
197197
assert (com._dict_compat(expected) == expected)
198198
assert (com._dict_compat(data_unchanged) == data_unchanged)
199199

200-
201-
def test_enforce_bool_type():
202-
tm.assert_equal(com._enforce_bool_type(True), True)
203-
tm.assert_equal(com._enforce_bool_type(False), False)
204-
205-
error_str = "Expected type bool, received type int."
206-
with tm.assertRaisesRegexp(ValueError, error_str):
207-
com._enforce_bool_type(1)
208-
209-
error_str = "Expected type bool, received type str."
210-
with tm.assertRaisesRegexp(ValueError, error_str):
211-
com._enforce_bool_type("True")
212-
213-
214200
if __name__ == '__main__':
215201
nose.runmodule(argv=[__file__, '-vvs', '-x', '--pdb', '--pdb-failure'],
216202
exit=False)

pandas/tests/types/test_validate.py

Lines changed: 144 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,49 +1,169 @@
11
from pandas.types.validate import _validate_bool_type
22
from unittest import TestCase
3+
from pandas.core.categorical import Categorical
4+
from pandas.core.base import IndexOpsMixin
5+
from pandas.core.generic import NDFrame
6+
from pandas.core.series import Series
7+
from pandas.core.frame import DataFrame
8+
from pandas.core.internals import Block, BoolBlock, BlockManager
9+
from pandas.computation.eval import eval
10+
from numpy import ndarray
311

4-
class TestValidate(TestCase):
5-
# DataFrame.eval
12+
class TestValidateBoolType(TestCase):
613

7-
# drop_duplicates
14+
invalid_values = [1, "True", [1,2,3], 5.0]
815

9-
# set_ordered, categorical.py line 615
16+
def test_categorical(self):
17+
cat = Categorical(['A','B','B','C','A'])
1018

11-
# as_ordered, categorical.py line 631
19+
for value in self.invalid_values:
20+
with self.assertRaises(ValueError):
21+
cat.set_ordered(value=True, inplace=value)
1222

13-
# as_unordered, categorical.py line 643
23+
with self.assertRaises(ValueError):
24+
cat.as_ordered(inplace=value)
1425

15-
# set_categories, categorical.py line 702
26+
with self.assertRaises(ValueError):
27+
cat.as_unordered(inplace=value)
1628

17-
# rename_categories, categorical.py line 754
29+
with self.assertRaises(ValueError):
30+
cat.set_categories(['X','Y','Z'], rename=True, inplace=value)
1831

19-
# reorder_categories, categorical.py line 794
32+
with self.assertRaises(ValueError):
33+
cat.rename_categories(['X','Y','Z'], inplace=value)
2034

21-
# add_categories, categorical.py line 832
35+
with self.assertRaises(ValueError):
36+
cat.reorder_categories(['X','Y','Z'], ordered=True, inplace=value)
2237

23-
# remove_categories, categorical.py line 885
38+
with self.assertRaises(ValueError):
39+
cat.add_categories(new_categories=['D','E','F'], inplace=value)
2440

25-
# remove_unused_categories, categorical.py line 926
41+
with self.assertRaises(ValueError):
42+
cat.remove_categories(removals=['D','E','F'], inplace=value)
2643

27-
# sort_values, categorical.py line 1326
44+
with self.assertRaises(ValueError):
45+
cat.remove_unused_categories(inplace=value)
2846

29-
# drop_duplicates, base.py line 1180
47+
with self.assertRaises(ValueError):
48+
cat.sort_values(inplace=value)
3049

31-
# eval, eval.py line 231
50+
def test_base(self):
51+
s = Series([1,2,3])
3252

33-
# query, frame.py line 2203
53+
for value in self.invalid_values:
54+
with self.assertRaises(ValueError):
55+
super(Series,s).drop_duplicates(inplace=value)
3456

35-
# eval, frame.py line 2266
57+
def test_eval(self):
58+
for value in self.invalid_values:
59+
with self.assertRaises(ValueError):
60+
eval("2+2", inplace=value)
3661

37-
# set_index, frame.py line 2859
62+
def test_frame(self):
63+
df = DataFrame({'a':[1,2], 'b':[3,4]})
3864

39-
# reset_index, frame.py line 2952
65+
for value in self.invalid_values:
66+
with self.assertRaises(ValueError):
67+
df.query('a > b', inplace=value)
4068

41-
# dropna, frame.py line 3057
69+
with self.assertRaises(ValueError):
70+
df.eval('a + b', inplace=value)
4271

43-
# reset_duplicates, frame.py line 3121
72+
with self.assertRaises(ValueError):
73+
df.set_index(keys=['a'], inplace=value)
4474

45-
# sort_values, frame.py line 3183
75+
with self.assertRaises(ValueError):
76+
df.reset_index(inplace=value)
4677

47-
# sort_index, frame.py line 3294
78+
with self.assertRaises(ValueError):
79+
df.dropna(inplace=value)
4880

49-
# rename_axis, generic.py line 736
81+
with self.assertRaises(ValueError):
82+
df.drop_duplicates(inplace=value)
83+
84+
with self.assertRaises(ValueError):
85+
df.sort_values(by=['a'], inplace=value)
86+
87+
def test_generic(self):
88+
df = DataFrame({'a':[1,2,3],'b':[4,5,6]})
89+
90+
for value in self.invalid_values:
91+
with self.assertRaises(ValueError):
92+
super(DataFrame, df).rename_axis(mapper={'a':'x','b':'y'}, axis=1, inplace=value)
93+
94+
with self.assertRaises(ValueError):
95+
super(DataFrame, df).drop('a', axis=1, inplace=value)
96+
97+
with self.assertRaises(ValueError):
98+
super(DataFrame, df).sort_index(inplace=value)
99+
100+
with self.assertRaises(ValueError):
101+
super(DataFrame, df).consolidate(inplace=value)
102+
103+
with self.assertRaises(ValueError):
104+
super(DataFrame, df).fillna(value=0, inplace=value)
105+
106+
with self.assertRaises(ValueError):
107+
super(DataFrame, df).replace(to_replace=1, value=7, inplace=value)
108+
109+
with self.assertRaises(ValueError):
110+
super(DataFrame, df).interpolate(inplace=value)
111+
112+
with self.assertRaises(ValueError):
113+
super(DataFrame, df)._where(cond=df.a > 2, inplace=value)
114+
115+
with self.assertRaises(ValueError):
116+
super(DataFrame, df).mask(cond=df.a > 2, inplace=value)
117+
118+
def test_internals(self):
119+
block = Block(values=Series([1,2,3]), placement=[0,1,2])
120+
bb = BoolBlock(values=Series([True,False]), placement=[0,1])
121+
bm = BlockManager([block], axes=[[0,1,2]])
122+
123+
for value in self.invalid_values:
124+
with self.assertRaises(ValueError):
125+
block.fillna(value=0,inplace=value)
126+
127+
with self.assertRaises(ValueError):
128+
block.replace(to_replace=0, value=1, inplace=value)
129+
130+
with self.assertRaises(ValueError):
131+
block.interpolate(inplace=value)
132+
133+
with self.assertRaises(ValueError):
134+
block._interpolate_with_fill(inplace=value)
135+
136+
with self.assertRaises(ValueError):
137+
block._interpolate(inplace=value)
138+
139+
with self.assertRaises(ValueError):
140+
bb.replace(to_replace=True, value=False, inplace=value)
141+
142+
with self.assertRaises(ValueError):
143+
bm.replace_list([1],[2], inplace=value)
144+
145+
def test_series(self):
146+
s = Series([1,2,3,4,5])
147+
148+
for value in self.invalid_values:
149+
150+
with self.assertRaises(ValueError):
151+
s.reset_index(inplace=value)
152+
153+
with self.assertRaises(ValueError):
154+
s._set_name(name='hello', inplace=value)
155+
156+
with self.assertRaises(ValueError):
157+
s.sort_values(inplace=value)
158+
159+
with self.assertRaises(ValueError):
160+
s.sort_index(inplace=value)
161+
162+
with self.assertRaises(ValueError):
163+
s.sort_index(inplace=value)
164+
165+
with self.assertRaises(ValueError):
166+
s.rename(inplace=value)
167+
168+
with self.assertRaises(ValueError):
169+
s.dropna(inplace=value)

0 commit comments

Comments
 (0)