def test_set_nonsettable_objects(nonsettable_objects_data): """ Test that errors trying to set attributes in ColEdit are handled properly. Unit regression test for issues #6727 and #6728 . """ for test_obj, expected_obj, keys in nonsettable_objects_data: col_model = CollectionsModel(None, test_obj) indicies = [col_model.get_index_from_key(key) for key in keys] for idx in indicies: assert not col_model.set_value(idx, "2") # Due to numpy's deliberate breakage of __eq__ comparison assert all([key == "_typ" or (getattr(col_model.get_data().__obj__, key) == getattr(expected_obj, key)) for key in keys])
def test_notimplementederror_multiindex(): """ Test that the NotImplementedError when scrolling a MultiIndex is handled. Regression test for spyder-ide/spyder#6284. """ time_deltas = [pandas.Timedelta(minutes=minute) for minute in range(5, 35, 5)] time_delta_multiindex = pandas.MultiIndex.from_product([[0, 1, 2, 3, 4], time_deltas]) col_model = CollectionsModel(None, time_delta_multiindex) assert col_model.rowCount() == col_model.rows_loaded == ROWS_TO_LOAD assert col_model.columnCount() == 5 col_model.fetchMore() assert col_model.rowCount() == 2 * ROWS_TO_LOAD for _ in range(3): col_model.fetchMore() assert col_model.rowCount() == 5 * ROWS_TO_LOAD
def test_collectionsmodel_with_two_ints(): coll = {'x': 1, 'y': 2} cm = CollectionsModel(None, coll) assert cm.rowCount() == 2 assert cm.columnCount() == 4 # dict is unordered, so first row might be x or y assert data(cm, 0, 0) in {'x', 'y'} if data(cm, 0, 0) == 'x': row_with_x = 0 row_with_y = 1 else: row_with_x = 1 row_with_y = 0 assert data(cm, row_with_x, 1) == 'int' assert data(cm, row_with_x, 2) == '1' assert data(cm, row_with_x, 3) == '1' assert data(cm, row_with_y, 0) == 'y' assert data(cm, row_with_y, 1) == 'int' assert data(cm, row_with_y, 2) == '1' assert data(cm, row_with_y, 3) == '2'
def test_collectionsmodel_with_index(): # Regression test for issue #3380, modified for #3758 for rng_name, rng in generate_pandas_indexes().items(): coll = {'rng': rng} cm = CollectionsModel(None, coll) assert data(cm, 0, 0) == 'rng' assert data(cm, 0, 1) == rng_name assert data(cm, 0, 2) == '(20,)' or data(cm, 0, 2) == '(20L,)' try: assert data(cm, 0, 3) == rng._summary() except AttributeError: assert data(cm, 0, 3) == rng.summary()
def test_notimplementederror_multiindex(): """ Test that the NotImplementedError when scrolling a MultiIndex is handled. Regression test for issue #6284 . """ time_deltas = [pandas.Timedelta(minutes=minute) for minute in range(5, 35, 5)] time_delta_multiindex = pandas.MultiIndex.from_product([[0, 1, 2, 3, 4], time_deltas]) col_model = CollectionsModel(None, time_delta_multiindex) assert col_model.rowCount() == col_model.rows_loaded == ROWS_TO_LOAD assert col_model.columnCount() == 4 col_model.fetchMore() assert col_model.rowCount() == 2 * ROWS_TO_LOAD for _ in range(3): col_model.fetchMore() assert col_model.rowCount() == 5 * ROWS_TO_LOAD
def test_sort_collectionsmodel_with_many_rows(): coll = list(range(2*LARGE_NROWS)) cm = CollectionsModel(None, coll) assert cm.rowCount() == cm.rows_loaded == ROWS_TO_LOAD assert cm.columnCount() == 5 cm.sort(1) # This was causing an issue (#5232) cm.fetchMore() assert cm.rowCount() == 2 * ROWS_TO_LOAD for _ in range(3): cm.fetchMore() assert cm.rowCount() == len(coll)
def test_sort_collectionsmodel(): var_list1 = [0, 1, 2] var_list2 = [3, 4, 5, 6] var_dataframe1 = pandas.DataFrame([[1, 2, 3], [20, 30, 40], [2, 2, 2]]) var_dataframe2 = pandas.DataFrame([[1, 2, 3], [20, 30, 40]]) var_series1 = pandas.Series(var_list1) var_series2 = pandas.Series(var_list2) coll = [1, 3, 2] cm = CollectionsModel(None, coll) assert cm.rowCount() == 3 assert cm.columnCount() == 5 cm.sort(0) # sort by index assert data_table(cm, 3, 4) == [[0, 1, 2], ['int', 'int', 'int'], [1, 1, 1], ['1', '3', '2']] cm.sort(3) # sort by value assert data_table(cm, 3, 4) == [[0, 2, 1], ['int', 'int', 'int'], [1, 1, 1], ['1', '2', '3']] coll = [1, var_list1, var_list2, var_dataframe1, var_dataframe2, var_series1, var_series2] cm = CollectionsModel(None, coll) assert cm.rowCount() == 7 assert cm.columnCount() == 5 cm.sort(1) # sort by type assert data_table(cm, 7, 4) == [ [3, 4, 5, 6, 0, 1, 2], ['DataFrame', 'DataFrame', 'Series', 'Series', 'int', 'list', 'list'], ['(3, 3)', '(2, 3)', '(3,)', '(4,)', 1, 3, 4], ['Column names: 0, 1, 2', 'Column names: 0, 1, 2', 'Series object of pandas.core.series module', 'Series object of pandas.core.series module', '1', '[0, 1, 2]', '[3, 4, 5, 6]']] cm.sort(2) # sort by size assert data_table(cm, 7, 4) == [ [3, 4, 5, 6, 0, 1, 2], ['DataFrame', 'DataFrame', 'Series', 'Series', 'int', 'list', 'list'], ['(2, 3)', '(3,)', '(3, 3)', '(4,)', 1, 3, 4], ['Column names: 0, 1, 2', 'Column names: 0, 1, 2', 'Series object of pandas.core.series module', 'Series object of pandas.core.series module', '1', '[0, 1, 2]', '[3, 4, 5, 6]']] or data_table(cm, 7, 4) == [ [0, 1, 2, 4, 5, 3, 6], [u'int', u'list', u'list', u'DataFrame', u'Series', u'DataFrame', u'Series'], [1, 3, 4, u'(2, 3)', u'(3,)', u'(3, 3)', u'(4,)'], ['1', '[0, 1, 2]', '[3, 4, 5, 6]', 'Column names: 0, 1, 2', 'Series object of pandas.core.series module', 'Column names: 0, 1, 2', 'Series object of pandas.core.series module', ]]
def test_sort_collectionsmodel(): coll = [1, 3, 2] cm = CollectionsModel(None, coll) assert cm.rowCount() == 3 assert cm.columnCount() == 4 cm.sort(0) # sort by index assert data_table(cm, 3, 4) == [['0', '1', '2'], ['int', 'int', 'int'], ['1', '1', '1'], ['1', '3', '2']] cm.sort(3) # sort by value assert data_table(cm, 3, 4) == [['0', '2', '1'], ['int', 'int', 'int'], ['1', '1', '1'], ['1', '2', '3']] coll = [[1, 2], 3] cm = CollectionsModel(None, coll) assert cm.rowCount() == 2 assert cm.columnCount() == 4 cm.sort(1) # sort by type assert data_table(cm, 2, 4) == [['1', '0'], ['int', 'list'], ['1', '2'], ['3', '[1, 2]']] cm.sort(2) # sort by size assert data_table(cm, 2, 4) == [['1', '0'], ['int', 'list'], ['1', '2'], ['3', '[1, 2]']]
def test_sort_collectionsmodel_with_many_rows(): coll = list(range(2*LARGE_NROWS)) cm = CollectionsModel(None, coll) assert cm.rowCount() == cm.rows_loaded == ROWS_TO_LOAD assert cm.columnCount() == 4 cm.sort(1) # This was causing an issue (#5232) cm.fetchMore() assert cm.rowCount() == 2 * ROWS_TO_LOAD for _ in range(3): cm.fetchMore() assert cm.rowCount() == len(coll)