Skip to content

Commit 341a61a

Browse files
ShaharNavehjbrockmendel
authored andcommitted
TST: Parametrize in pandas/tests/internals/test_internals.py (pandas-dev#32687)
* TST: Parametrize in pandas/tests/internals/test_internals.py * Addressed lint issues * Addressing lint issues Co-authored-by: MomIsBestFriend <>
1 parent bc7c2b1 commit 341a61a

File tree

1 file changed

+170
-135
lines changed

1 file changed

+170
-135
lines changed

pandas/tests/internals/test_internals.py

+170-135
Original file line numberDiff line numberDiff line change
@@ -333,13 +333,9 @@ def test_pickle(self, mgr):
333333
assert not mgr2._is_consolidated
334334
assert not mgr2._known_consolidated
335335

336-
def test_non_unique_pickle(self):
337-
338-
mgr = create_mgr("a,a,a:f8")
339-
mgr2 = tm.round_trip_pickle(mgr)
340-
tm.assert_frame_equal(DataFrame(mgr), DataFrame(mgr2))
341-
342-
mgr = create_mgr("a: f8; a: i8")
336+
@pytest.mark.parametrize("mgr_string", ["a,a,a:f8", "a: f8; a: i8"])
337+
def test_non_unique_pickle(self, mgr_string):
338+
mgr = create_mgr(mgr_string)
343339
mgr2 = tm.round_trip_pickle(mgr)
344340
tm.assert_frame_equal(DataFrame(mgr), DataFrame(mgr2))
345341

@@ -427,22 +423,25 @@ def test_sparse_mixed(self):
427423

428424
# TODO: what to test here?
429425

430-
def test_as_array_float(self):
431-
mgr = create_mgr("c: f4; d: f2; e: f8")
432-
assert mgr.as_array().dtype == np.float64
433-
434-
mgr = create_mgr("c: f4; d: f2")
435-
assert mgr.as_array().dtype == np.float32
436-
437-
def test_as_array_int_bool(self):
438-
mgr = create_mgr("a: bool-1; b: bool-2")
439-
assert mgr.as_array().dtype == np.bool_
440-
441-
mgr = create_mgr("a: i8-1; b: i8-2; c: i4; d: i2; e: u1")
442-
assert mgr.as_array().dtype == np.int64
426+
@pytest.mark.parametrize(
427+
"mgr_string, dtype",
428+
[("c: f4; d: f2", np.float32), ("c: f4; d: f2; e: f8", np.float64)],
429+
)
430+
def test_as_array_float(self, mgr_string, dtype):
431+
mgr = create_mgr(mgr_string)
432+
assert mgr.as_array().dtype == dtype
443433

444-
mgr = create_mgr("c: i4; d: i2; e: u1")
445-
assert mgr.as_array().dtype == np.int32
434+
@pytest.mark.parametrize(
435+
"mgr_string, dtype",
436+
[
437+
("a: bool-1; b: bool-2", np.bool_),
438+
("a: i8-1; b: i8-2; c: i4; d: i2; e: u1", np.int64),
439+
("c: i4; d: i2; e: u1", np.int32),
440+
],
441+
)
442+
def test_as_array_int_bool(self, mgr_string, dtype):
443+
mgr = create_mgr(mgr_string)
444+
assert mgr.as_array().dtype == dtype
446445

447446
def test_as_array_datetime(self):
448447
mgr = create_mgr("h: datetime-1; g: datetime-2")
@@ -548,14 +547,37 @@ def test_invalid_ea_block(self):
548547
create_mgr("a: category2; b: category2")
549548

550549
def test_interleave(self):
551-
552550
# self
553551
for dtype in ["f8", "i8", "object", "bool", "complex", "M8[ns]", "m8[ns]"]:
554552
mgr = create_mgr(f"a: {dtype}")
555553
assert mgr.as_array().dtype == dtype
556554
mgr = create_mgr(f"a: {dtype}; b: {dtype}")
557555
assert mgr.as_array().dtype == dtype
558556

557+
@pytest.mark.parametrize(
558+
"mgr_string, dtype",
559+
[
560+
("a: category", "i8"),
561+
("a: category; b: category", "i8"),
562+
("a: category; b: category2", "object"),
563+
("a: category2", "object"),
564+
("a: category2; b: category2", "object"),
565+
("a: f8", "f8"),
566+
("a: f8; b: i8", "f8"),
567+
("a: f4; b: i8", "f8"),
568+
("a: f4; b: i8; d: object", "object"),
569+
("a: bool; b: i8", "object"),
570+
("a: complex", "complex"),
571+
("a: f8; b: category", "object"),
572+
("a: M8[ns]; b: category", "object"),
573+
("a: M8[ns]; b: bool", "object"),
574+
("a: M8[ns]; b: i8", "object"),
575+
("a: m8[ns]; b: bool", "object"),
576+
("a: m8[ns]; b: i8", "object"),
577+
("a: M8[ns]; b: m8[ns]", "object"),
578+
],
579+
)
580+
def test_interleave_dtype(self, mgr_string, dtype):
559581
# will be converted according the actual dtype of the underlying
560582
mgr = create_mgr("a: category")
561583
assert mgr.as_array().dtype == "i8"
@@ -689,13 +711,12 @@ def test_get_bool_data(self):
689711
def test_unicode_repr_doesnt_raise(self):
690712
repr(create_mgr("b,\u05d0: object"))
691713

692-
def test_equals(self):
714+
@pytest.mark.parametrize(
715+
"mgr_string", ["a,b,c: i8-1; d,e,f: i8-2", "a,a,a: i8-1; b,b,b: i8-2"]
716+
)
717+
def test_equals(self, mgr_string):
693718
# unique items
694-
bm1 = create_mgr("a,b,c: i8-1; d,e,f: i8-2")
695-
bm2 = BlockManager(bm1.blocks[::-1], bm1.axes)
696-
assert bm1.equals(bm2)
697-
698-
bm1 = create_mgr("a,a,a: i8-1; b,b,b: i8-2")
719+
bm1 = create_mgr(mgr_string)
699720
bm2 = BlockManager(bm1.blocks[::-1], bm1.axes)
700721
assert bm1.equals(bm2)
701722

@@ -905,128 +926,142 @@ def assert_reindex_indexer_is_ok(mgr, axis, new_labels, indexer, fill_value):
905926

906927

907928
class TestBlockPlacement:
908-
def test_slice_len(self):
909-
assert len(BlockPlacement(slice(0, 4))) == 4
910-
assert len(BlockPlacement(slice(0, 4, 2))) == 2
911-
assert len(BlockPlacement(slice(0, 3, 2))) == 2
912-
913-
assert len(BlockPlacement(slice(0, 1, 2))) == 1
914-
assert len(BlockPlacement(slice(1, 0, -1))) == 1
929+
@pytest.mark.parametrize(
930+
"slc, expected",
931+
[
932+
(slice(0, 4), 4),
933+
(slice(0, 4, 2), 2),
934+
(slice(0, 3, 2), 2),
935+
(slice(0, 1, 2), 1),
936+
(slice(1, 0, -1), 1),
937+
],
938+
)
939+
def test_slice_len(self, slc, expected):
940+
assert len(BlockPlacement(slc)) == expected
915941

916-
def test_zero_step_raises(self):
942+
@pytest.mark.parametrize("slc", [slice(1, 1, 0), slice(1, 2, 0)])
943+
def test_zero_step_raises(self, slc):
917944
msg = "slice step cannot be zero"
918-
919945
with pytest.raises(ValueError, match=msg):
920-
BlockPlacement(slice(1, 1, 0))
946+
BlockPlacement(slc)
947+
948+
@pytest.mark.parametrize(
949+
"slc",
950+
[
951+
slice(None, None),
952+
slice(10, None),
953+
slice(None, None, -1),
954+
slice(None, 10, -1),
955+
# These are "unbounded" because negative index will
956+
# change depending on container shape.
957+
slice(-1, None),
958+
slice(None, -1),
959+
slice(-1, -1),
960+
slice(-1, None, -1),
961+
slice(None, -1, -1),
962+
slice(-1, -1, -1),
963+
],
964+
)
965+
def test_unbounded_slice_raises(self, slc):
966+
msg = "unbounded slice"
921967
with pytest.raises(ValueError, match=msg):
922-
BlockPlacement(slice(1, 2, 0))
923-
924-
def test_unbounded_slice_raises(self):
925-
def assert_unbounded_slice_error(slc):
926-
with pytest.raises(ValueError, match="unbounded slice"):
927-
BlockPlacement(slc)
928-
929-
assert_unbounded_slice_error(slice(None, None))
930-
assert_unbounded_slice_error(slice(10, None))
931-
assert_unbounded_slice_error(slice(None, None, -1))
932-
assert_unbounded_slice_error(slice(None, 10, -1))
933-
934-
# These are "unbounded" because negative index will change depending on
935-
# container shape.
936-
assert_unbounded_slice_error(slice(-1, None))
937-
assert_unbounded_slice_error(slice(None, -1))
938-
assert_unbounded_slice_error(slice(-1, -1))
939-
assert_unbounded_slice_error(slice(-1, None, -1))
940-
assert_unbounded_slice_error(slice(None, -1, -1))
941-
assert_unbounded_slice_error(slice(-1, -1, -1))
942-
943-
def test_not_slice_like_slices(self):
944-
def assert_not_slice_like(slc):
945-
assert not BlockPlacement(slc).is_slice_like
946-
947-
assert_not_slice_like(slice(0, 0))
948-
assert_not_slice_like(slice(100, 0))
949-
950-
assert_not_slice_like(slice(100, 100, -1))
951-
assert_not_slice_like(slice(0, 100, -1))
952-
953-
assert not BlockPlacement(slice(0, 0)).is_slice_like
954-
assert not BlockPlacement(slice(100, 100)).is_slice_like
955-
956-
def test_array_to_slice_conversion(self):
957-
def assert_as_slice_equals(arr, slc):
958-
assert BlockPlacement(arr).as_slice == slc
959-
960-
assert_as_slice_equals([0], slice(0, 1, 1))
961-
assert_as_slice_equals([100], slice(100, 101, 1))
962-
963-
assert_as_slice_equals([0, 1, 2], slice(0, 3, 1))
964-
assert_as_slice_equals([0, 5, 10], slice(0, 15, 5))
965-
assert_as_slice_equals([0, 100], slice(0, 200, 100))
966-
967-
assert_as_slice_equals([2, 1], slice(2, 0, -1))
968-
969-
def test_not_slice_like_arrays(self):
970-
def assert_not_slice_like(arr):
971-
assert not BlockPlacement(arr).is_slice_like
972-
973-
assert_not_slice_like([])
974-
assert_not_slice_like([-1])
975-
assert_not_slice_like([-1, -2, -3])
976-
assert_not_slice_like([-10])
977-
assert_not_slice_like([-1])
978-
assert_not_slice_like([-1, 0, 1, 2])
979-
assert_not_slice_like([-2, 0, 2, 4])
980-
assert_not_slice_like([1, 0, -1])
981-
assert_not_slice_like([1, 1, 1])
982-
983-
def test_slice_iter(self):
984-
assert list(BlockPlacement(slice(0, 3))) == [0, 1, 2]
985-
assert list(BlockPlacement(slice(0, 0))) == []
986-
assert list(BlockPlacement(slice(3, 0))) == []
987-
988-
def test_slice_to_array_conversion(self):
989-
def assert_as_array_equals(slc, asarray):
990-
tm.assert_numpy_array_equal(
991-
BlockPlacement(slc).as_array, np.asarray(asarray, dtype=np.int64)
992-
)
968+
BlockPlacement(slc)
993969

994-
assert_as_array_equals(slice(0, 3), [0, 1, 2])
995-
assert_as_array_equals(slice(0, 0), [])
996-
assert_as_array_equals(slice(3, 0), [])
970+
@pytest.mark.parametrize(
971+
"slc",
972+
[
973+
slice(0, 0),
974+
slice(100, 0),
975+
slice(100, 100),
976+
slice(100, 100, -1),
977+
slice(0, 100, -1),
978+
],
979+
)
980+
def test_not_slice_like_slices(self, slc):
981+
assert not BlockPlacement(slc).is_slice_like
982+
983+
@pytest.mark.parametrize(
984+
"arr, slc",
985+
[
986+
([0], slice(0, 1, 1)),
987+
([100], slice(100, 101, 1)),
988+
([0, 1, 2], slice(0, 3, 1)),
989+
([0, 5, 10], slice(0, 15, 5)),
990+
([0, 100], slice(0, 200, 100)),
991+
([2, 1], slice(2, 0, -1)),
992+
],
993+
)
994+
def test_array_to_slice_conversion(self, arr, slc):
995+
assert BlockPlacement(arr).as_slice == slc
997996

998-
assert_as_array_equals(slice(3, 0, -1), [3, 2, 1])
997+
@pytest.mark.parametrize(
998+
"arr",
999+
[
1000+
[],
1001+
[-1],
1002+
[-1, -2, -3],
1003+
[-10],
1004+
[-1],
1005+
[-1, 0, 1, 2],
1006+
[-2, 0, 2, 4],
1007+
[1, 0, -1],
1008+
[1, 1, 1],
1009+
],
1010+
)
1011+
def test_not_slice_like_arrays(self, arr):
1012+
assert not BlockPlacement(arr).is_slice_like
1013+
1014+
@pytest.mark.parametrize(
1015+
"slc, expected",
1016+
[(slice(0, 3), [0, 1, 2]), (slice(0, 0), []), (slice(3, 0), [])],
1017+
)
1018+
def test_slice_iter(self, slc, expected):
1019+
assert list(BlockPlacement(slc)) == expected
1020+
1021+
@pytest.mark.parametrize(
1022+
"slc, arr",
1023+
[
1024+
(slice(0, 3), [0, 1, 2]),
1025+
(slice(0, 0), []),
1026+
(slice(3, 0), []),
1027+
(slice(3, 0, -1), [3, 2, 1]),
1028+
],
1029+
)
1030+
def test_slice_to_array_conversion(self, slc, arr):
1031+
tm.assert_numpy_array_equal(
1032+
BlockPlacement(slc).as_array, np.asarray(arr, dtype=np.int64)
1033+
)
9991034

10001035
def test_blockplacement_add(self):
10011036
bpl = BlockPlacement(slice(0, 5))
10021037
assert bpl.add(1).as_slice == slice(1, 6, 1)
10031038
assert bpl.add(np.arange(5)).as_slice == slice(0, 10, 2)
10041039
assert list(bpl.add(np.arange(5, 0, -1))) == [5, 5, 5, 5, 5]
10051040

1006-
def test_blockplacement_add_int(self):
1007-
def assert_add_equals(val, inc, result):
1008-
assert list(BlockPlacement(val).add(inc)) == result
1009-
1010-
assert_add_equals(slice(0, 0), 0, [])
1011-
assert_add_equals(slice(1, 4), 0, [1, 2, 3])
1012-
assert_add_equals(slice(3, 0, -1), 0, [3, 2, 1])
1013-
assert_add_equals([1, 2, 4], 0, [1, 2, 4])
1014-
1015-
assert_add_equals(slice(0, 0), 10, [])
1016-
assert_add_equals(slice(1, 4), 10, [11, 12, 13])
1017-
assert_add_equals(slice(3, 0, -1), 10, [13, 12, 11])
1018-
assert_add_equals([1, 2, 4], 10, [11, 12, 14])
1019-
1020-
assert_add_equals(slice(0, 0), -1, [])
1021-
assert_add_equals(slice(1, 4), -1, [0, 1, 2])
1022-
assert_add_equals([1, 2, 4], -1, [0, 1, 3])
1041+
@pytest.mark.parametrize(
1042+
"val, inc, expected",
1043+
[
1044+
(slice(0, 0), 0, []),
1045+
(slice(1, 4), 0, [1, 2, 3]),
1046+
(slice(3, 0, -1), 0, [3, 2, 1]),
1047+
([1, 2, 4], 0, [1, 2, 4]),
1048+
(slice(0, 0), 10, []),
1049+
(slice(1, 4), 10, [11, 12, 13]),
1050+
(slice(3, 0, -1), 10, [13, 12, 11]),
1051+
([1, 2, 4], 10, [11, 12, 14]),
1052+
(slice(0, 0), -1, []),
1053+
(slice(1, 4), -1, [0, 1, 2]),
1054+
([1, 2, 4], -1, [0, 1, 3]),
1055+
],
1056+
)
1057+
def test_blockplacement_add_int(self, val, inc, expected):
1058+
assert list(BlockPlacement(val).add(inc)) == expected
10231059

1060+
@pytest.mark.parametrize("val", [slice(1, 4), [1, 2, 4]])
1061+
def test_blockplacement_add_int_raises(self, val):
10241062
msg = "iadd causes length change"
1025-
1026-
with pytest.raises(ValueError, match=msg):
1027-
BlockPlacement(slice(1, 4)).add(-10)
10281063
with pytest.raises(ValueError, match=msg):
1029-
BlockPlacement([1, 2, 4]).add(-10)
1064+
BlockPlacement(val).add(-10)
10301065

10311066

10321067
class DummyElement:

0 commit comments

Comments
 (0)