def test_resize_view_slice(): f0 = dt.Frame(range(100)) f1 = f0[8::2, :] frame_integrity_check(f1) assert f1.shape == (46, 1) assert isview(f1) f1.nrows = 10 frame_integrity_check(f1) assert f1.shape == (10, 1) assert isview(f1) assert f1.to_list()[0] == list(range(8, 28, 2)) f1.nrows = 15 frame_integrity_check(f1) assert f1.shape == (15, 1) assert isview(f1) assert f1.to_list()[0] == list(range(8, 28, 2)) + [None] * 5
def test_j_colselector2(dt0, tbl0): dt2 = dt0[:, [f.A, f.C]] frame_integrity_check(dt2) assert dt2.shape == (6, 2) assert dt2.names == ("A", "C") assert not isview(dt2) assert dt2.to_list() == [tbl0[0], tbl0[2]]
def test_j_integer(dt0, tbl0): for i in range(-4, 4): dt1 = dt0[:, i] assert dt1.shape == (6, 1) assert dt1.names == ("ABCD"[i], ) assert not isview(dt1) assert dt1.to_list()[0] == tbl0[i]
def test_j_colselector1(dt0, tbl0): dt1 = dt0[:, f.B] frame_integrity_check(dt1) assert dt1.shape == (6, 1) assert dt1.names == ("B", ) assert not isview(dt1) assert dt1.to_list() == [tbl0[1]]
def test_j_dict(dt0, tbl0): dt1 = dt0[:, {"x": f[0], "y": f["D"]}] frame_integrity_check(dt1) assert dt1.shape == (6, 2) assert same_iterables(dt1.names, ("x", "y")) assert not isview(dt1) assert same_iterables(dt1.to_list(), [tbl0[0], tbl0[3]])
def test_j_string(dt0, tbl0): for s in "ABCD": dt1 = dt0[:, s] assert dt1.shape == (6, 1) assert dt1.names == (s, ) assert not isview(dt1) assert dt1.to_list()[0] == tbl0["ABCD".index(s)]
def test_jay_view(tempfile_jay, seed): random.seed(seed) src = [random.normalvariate(0, 1) for n in range(1000)] dt0 = dt.Frame({"values": src}) dt1 = dt0.sort(0) assert isview(dt1) dt1.to_jay(tempfile_jay) assert os.path.isfile(tempfile_jay) dt2 = dt.fread(tempfile_jay) assert not isview(dt2) assert dt2.source == tempfile_jay frame_integrity_check(dt1) frame_integrity_check(dt2) assert dt1.names == dt2.names assert dt1.stypes == dt2.stypes assert dt1.to_list() == dt2.to_list()
def test_rows_integer1(dt0, i): dt1 = dt0[i, :] frame_integrity_check(dt1) assert dt1.shape == (1, 3) assert dt1.names == dt0.names assert dt1.ltypes == dt0.ltypes assert isview(dt1) assert dt1.to_list() == [[col[i]] for col in dt0.to_list()]
def test_filter_on_view1(): df0 = dt.Frame({"A": range(50)}) df1 = df0[::2, :] assert df1.shape == (25, 1) df2 = df1[f.A < 10, :] frame_integrity_check(df2) assert isview(df2) assert df2.to_list() == [[0, 2, 4, 6, 8]]
def test_int32_small(): d0 = dt.Frame([17, 2, 96, 245, 847569, 34, -45, None, 1]) assert d0.stypes == (dt.int32, ) d1 = d0.sort(0) assert d1.stypes == d0.stypes assert isview(d1) frame_integrity_check(d1) assert d1.to_list() == [[None, -45, 1, 2, 17, 34, 96, 245, 847569]]
def test_int8_small(): d0 = dt.Frame([17, 2, 96, 45, 84, 75, 69, 34, -45, None, 1]) assert d0.stypes == (stype.int8, ) d1 = d0.sort(0) assert d1.stypes == d0.stypes assert isview(d1) frame_integrity_check(d1) assert d1.to_list() == [[None, -45, 1, 2, 17, 34, 45, 69, 75, 84, 96]]
def test_bool8_small(): d0 = dt.Frame([True, False, False, None, True, True, None]) assert d0.stypes == (stype.bool8, ) d1 = d0[:, :, sort("C0")] assert d1.stypes == d0.stypes assert isview(d1) frame_integrity_check(d1) assert d1.to_list() == [[None, None, False, False, True, True, True]]
def test_resize_view_array(): f0 = dt.Frame(range(100)) f1 = f0[[1, 1, 2, 3, 5, 8, 13, 0], :] frame_integrity_check(f1) assert f1.shape == (8, 1) assert isview(f1) assert f1.to_list() == [[1, 1, 2, 3, 5, 8, 13, 0]] f1.nrows = 4 frame_integrity_check(f1) assert f1.shape == (4, 1) assert isview(f1) assert f1.to_list() == [[1, 1, 2, 3]] f1.nrows = 5 frame_integrity_check(f1) assert f1.shape == (5, 1) assert isview(f1) assert f1.to_list() == [[1, 1, 2, 3, None]]
def test_bool8_small_stable(): DT0 = dt.Frame(A=[True, False, False, None, True, True, None], B=[1, 2, 3, 4, 5, 6, 7]) DT1 = dt.Frame(A=[None, None, False, False, True, True, True], B=[4, 7, 2, 3, 1, 5, 6]) DTS = DT0[:, :, sort(f.A)] assert DT0['A'].stype == dt.bool8 assert isview(DTS) assert_equals(DTS, DT1)
def test_bool8_large_stable(n): d0 = dt.Frame([[True, False, None] * n, range(3 * n)], names=["A", "B"]) assert d0.stypes[0] == stype.bool8 d1 = d0[:, f.B, sort(f.A)] assert isview(d1) frame_integrity_check(d1) assert d1.to_list() == [list(range(2, 3 * n, 3)) + list(range(1, 3 * n, 3)) + list(range(0, 3 * n, 3))]
def test_rows_bool_column(dt0): col = dt.Frame([1, 0, 1, 1, None, 0, None, 1, 1, 0]) dt1 = dt0[col, :] frame_integrity_check(dt1) assert dt1.shape == (5, 3) assert dt1.names == ("colA", "colB", "colC") assert dt1.ltypes == (ltype.bool, ltype.int, ltype.real) assert isview(dt1) assert as_list(dt1)[1] == [7, 9, 10000, -1, 1]
def test_numpy_constructor_view(numpy): d0 = dt.Frame([range(100), range(0, 1000000, 10000)]) d1 = d0[::-2, :] assert isview(d1) n1 = numpy.array(d1) assert n1.dtype == numpy.dtype("int32") assert n1.T.tolist() == [list(range(99, 0, -2)), list(range(990000, 0, -20000))] assert (d1.to_numpy() == n1).all()
def test_rows_range1(dt0, rangeobj): dt1 = dt0[rangeobj, :] frame_integrity_check(dt1) assert dt1.shape == (len(rangeobj), 3) assert dt1.names == dt0.names assert dt1.ltypes == dt0.ltypes assert len(rangeobj) == 0 or isview(dt1) assert dt1.to_list() == [[col[i] for i in rangeobj] for col in dt0.to_list()]
def test_bool8_large(n): nn = 2 * n DT0 = dt.Frame([True, False, True, None, None, False] * n) DT1 = dt.Frame([[None] * nn + [False] * nn + [True] * nn]) assert DT0.stype == dt.bool8 DTS = DT0.sort(0) DTT = DT0[::-1, :].sort(0) assert isview(DTS) assert_equals(DTS, DT1) assert_equals(DTT, DT1)
def test_dt_repeat_multicol(): f0 = dt.Frame(A=[None, 1.4, -2.6, 3.9998], B=["row", "row", "row", "your boat"], C=[25, -9, 18, 2], D=[True, None, True, False]) f1 = dt.repeat(f0, 4) frame_integrity_check(f1) assert isview(f1) assert f1.names == f0.names assert f1.stypes == f0.stypes assert f1.to_list() == [col * 4 for col in f0.to_list()]
def test_bool8_large(n): d0 = dt.Frame([True, False, True, None, None, False] * n) assert d0.stypes == (stype.bool8, ) d1 = d0.sort(0) assert d1.stypes == d0.stypes assert d1.names == d0.names assert isview(d1) frame_integrity_check(d0) frame_integrity_check(d1) nn = 2 * n assert d1.to_list() == [[None] * nn + [False] * nn + [True] * nn]
def test_bool8_small_stable(): d0 = dt.Frame([[True, False, False, None, True, True, None], [1, 2, 3, 4, 5, 6, 7]]) assert d0.stypes == (stype.bool8, stype.int8) d1 = d0[:, :, sort("C0")] assert d1.stypes == d0.stypes assert d1.names == d0.names assert isview(d1) frame_integrity_check(d1) assert d1.to_list() == [[None, None, False, False, True, True, True], [4, 7, 2, 3, 1, 5, 6]]
def test_groupby_on_view(): # See issue #1542 DT = dt.Frame(A=[1, 2, 3, 1, 2, 3], B=[3, 6, 2, 4, 3, 1], C=['b', 'd', 'b', 'b', 'd', 'b']) V = DT[f.A != 1, :] assert isview(V) assert_equals( V, dt.Frame(A=[2, 3, 2, 3], B=[6, 2, 3, 1], C=['d', 'b', 'd', 'b'])) RES = V[:, max(f.B), by(f.C)] assert_equals(RES, dt.Frame(C=['b', 'd'], B=[2, 6]))
def test_int64_large0(n): a = -6654966461866573261 b = -6655043958000990616 c = 5207085498673612884 d = 5206891724645893889 d0 = dt.Frame([c, d, a, b] * n) d1 = d0.sort(0) frame_integrity_check(d0) frame_integrity_check(d1) assert isview(d1) assert b < a < d < c assert d0.to_list() == [[c, d, a, b] * n] assert d1.to_list() == [[b] * n + [a] * n + [d] * n + [c] * n]
def test_nonfirst_column(): """Check that sorting by n-th column works too...""" d0 = dt.Frame([range(100), [random.randint(0, 50) for _ in range(100)]], names=["A", "B"]) d1 = d0.sort("B") frame_integrity_check(d0) frame_integrity_check(d1) assert isview(d1) assert d0.shape == d1.shape == (100, 2) assert d0.names == d1.names == ("A", "B") a0, a1 = d1.to_list() assert sorted(a0) == list(range(100)) assert a0 != list(range(100)) assert a1 == sorted(a1)
def test_groupby_on_view(): # See issue #1542 DT = dt.Frame(A=[1, 2, 3, 1, 2, 3], B=[3, 6, 2, 4, 3, 1], C=['b', 'd', 'b', 'b', 'd', 'b']) V = DT[f.A != 1, :] assert isview(V) assert V.shape == (4, 3) assert V.to_dict() == {'A': [2, 3, 2, 3], 'B': [6, 2, 3, 1], 'C': ['d', 'b', 'd', 'b']} RES = V[:, max(f.B), by(f.C)] assert RES.shape == (2, 2) assert RES.to_dict() == {'C': ['b', 'd'], 'C0': [2, 6]}
def test_j_expression(dt0, tbl0): dt1 = dt0[:, f.A + f.B] frame_integrity_check(dt1) assert dt1.shape == (6, 1) assert dt1.ltypes == (ltype.int, ) assert dt1.to_list() == [[tbl0[0][i] + tbl0[1][i] for i in range(6)]] dt2 = dt0[:, [f.A + f.B, f.C - f.D, f.A / f.C, f.B * f.D]] frame_integrity_check(dt2) assert dt2.shape == (6, 4) assert dt2.ltypes == (ltype.int, ltype.real, ltype.real, ltype.int) assert dt2.to_list() == [[tbl0[0][i] + tbl0[1][i] for i in range(6)], [tbl0[2][i] - tbl0[3][i] for i in range(6)], [tbl0[0][i] / tbl0[2][i] for i in range(6)], [tbl0[1][i] * tbl0[3][i] for i in range(6)]] dt3 = dt0[:, {"foo": f.A + f.B - f.C * 10, "a": f.A, "b": f[1], "c": f[2]}] frame_integrity_check(dt3) assert dt3.shape == (6, 4) assert same_iterables(dt3.names, ("foo", "a", "b", "c")) assert same_iterables(dt3.ltypes, (ltype.real, ltype.int, ltype.int, ltype.real)) assert not isview(dt3) assert dt3[:, "foo"].to_list() == [[tbl0[0][i] + tbl0[1][i] - tbl0[2][i] * 10 for i in range(6)]]
def test_keys_simple(): dt0 = dt.Frame([["Joe", "Mary", "Leslie", "Adam", "Alice"], [1, 5, 15, 12, 8], [3.6, 9.78, 2.01, -4.23, 5.3819]], names=["name", "sex", "avg"]) assert dt0.key == tuple() dt0.key = "name" frame_integrity_check(dt0) assert dt0.key == ("name", ) assert dt0.shape == (5, 3) assert dt0.names == ("name", "sex", "avg") assert dt0.to_list() == [["Adam", "Alice", "Joe", "Leslie", "Mary"], [12, 8, 1, 15, 5], [-4.23, 5.3819, 3.6, 2.01, 9.78]] dt0.key = "sex" frame_integrity_check(dt0) assert not isview(dt0) assert dt0.key == ("sex", ) assert dt0.shape == (5, 3) assert dt0.names == ("sex", "name", "avg") assert dt0.to_list() == [[1, 5, 8, 12, 15], ["Joe", "Mary", "Alice", "Adam", "Leslie"], [3.6, 9.78, 5.3819, -4.23, 2.01]] dt0.key = None assert dt0.key == tuple()
def test_chained_array2(dt0): dt3 = dt0[[2, 5, 1, 1, 1, 0], :][::-1, :] frame_integrity_check(dt3) assert dt3.shape == (6, 3) assert isview(dt3) assert as_list(dt3)[:2] == [[0, 1, 1, 1, 0, 1], [7, -11, -11, -11, 0, 9]]
def test_chained_array1(dt0): dt2 = dt0[[2, 5, 1, 1, 1, 0], :][::2, :] frame_integrity_check(dt2) assert dt2.shape == (3, 3) assert isview(dt2) assert as_list(dt2) == [[1, 1, 1], [9, -11, -11], [1.3, 1, 1]]