def _analyze_button_fired(self): model = DataFrameAnalyzer(source_df=self.model.group_data) view = DataFrameAnalyzerView(model=model, include_plotter=True, fonts="Courrier 11", view_klass=KromView) view.edit_traits(kind="livemodal")
def test_bring_up_column_controls_as_popup(self): view = DataFrameAnalyzerView(model=self.analyzer, include_plotter=False) with temp_bringup_ui_for(view): self.assertIsNone(view._control_popup) view.open_column_controls = True self.assertIsNotNone(view._control_popup) self.assertIn("displayed_df", view._df_editors) self.assertIn("summary_df", view._df_editors)
def test_apply_filter_button_recomputes_filtered_df_correctly(self): self.analyzer.filter_auto_apply = False view = DataFrameAnalyzerView(model=self.analyzer, include_plotter=True) view.model.filter_exp = "a != 3" expected_df = DataFrame({"a": [1, 2, 4, 5], "b": [10, 15, 15, 10]}, index=[0, 1, 3, 4]) assert_frame_not_equal(view.model.filtered_df, expected_df) view.apply_filter_button = True assert_frame_equal(view.model.filtered_df, expected_df)
def test_bring_up_control_font_name(self): view = DataFrameAnalyzerView(model=self.analyzer, font_name="Arial") with temp_bringup_ui_for(view): # Here, size is set by DFAnalyzer: self.assert_font_equal(view, "Arial 14") view = DataFrameAnalyzerView(model=self.analyzer, fonts="Arial") with temp_bringup_ui_for(view): # Here, size is set by traitsUI's font handling: expected = "Arial " + str(FONT_DEFAULT_SIZE[platform]) self.assert_font_equal(view, expected)
def test_bring_up_with_object_df(self): df = DataFrame({"a": [1, 2, 3, 4, 5], "b": [10, 15, 20, 15, 10]}, dtype=object) analyzer = DataFrameAnalyzer(source_df=df) view = DataFrameAnalyzerView(model=analyzer, include_plotter=True) with temp_bringup_ui_for(view): pass view = DataFrameAnalyzerView(model=analyzer, include_plotter=False) with temp_bringup_ui_for(view): pass
def test_bring_up_with_categorical_data(self): df = DataFrame({"a": [1, 2, 3, 4, 5], "b": [10, 15, 20, 15, 10], "c": list("ababa")}) analyzer = DataFrameAnalyzer(source_df=df) view = DataFrameAnalyzerView(model=analyzer, include_plotter=False) with temp_bringup_ui_for(view): pass view = DataFrameAnalyzerView(model=self.analyzer, include_plotter=True) with temp_bringup_ui_for(view): pass
def test_bring_up_attempt_non_existent_fonts(self): view = DataFrameAnalyzerView(model=self.analyzer, include_plotter=True, fonts="NON-EXISTENT") with temp_bringup_ui_for(view): # Here, size is set by traitsUI's font handling: expected = "NON-EXISTENT " + str(FONT_DEFAULT_SIZE[platform]) self.assert_font_equal(view, expected)
def test_analyzer_with_plotter_in_model(self): # Make sure that if a view is created with a model that has a plotter, # that's what is used to build the view rather than create a new one: plot_manager = DataFramePlotManager(source_analyzer=self.analyzer) self.analyzer.plot_manager_list.append(plot_manager) view = DataFrameAnalyzerView(model=self.analyzer, include_plotter=True) self.assertIs(view.plotter.model, plot_manager)
def test_bring_up_all_layouts(self): for layout in ["Tabbed", "HSplit", "VSplit", "popup"]: view = DataFrameAnalyzerView(model=self.analyzer, include_plotter=True, plotter_layout=layout) with temp_bringup_ui_for(view): pass
def test_bring_up_control_precision_object_df(self): df = DataFrame({"a": list('abcd')}) analyzer = DataFrameAnalyzer(source_df=df) view = DataFrameAnalyzerView(model=analyzer, include_plotter=True, display_precision=3) with temp_bringup_ui_for(view): # Because the DF is set as `dtype=object`: self.assertEqual(view.info.displayed_df.adapter.format, "%s")
def test_bring_up_control_precision_float_df(self): analyzer = self.analyzer view = DataFrameAnalyzerView(model=analyzer, include_plotter=True, display_precision=3) with temp_bringup_ui_for(view): self.assertEqual(view.info.displayed_df.adapter.format, "%.3g") view = DataFrameAnalyzerView(model=analyzer, include_plotter=True, formats="%.5e") with temp_bringup_ui_for(view): self.assertEqual(view.info.displayed_df.adapter.format, "%.5e") view = DataFrameAnalyzerView(model=analyzer, include_plotter=True, formats={"a": "%.5e", "b": "%.8f"}) with temp_bringup_ui_for(view): self.assertEqual(view.info.displayed_df.adapter._formats, {"a": "%.5e", "b": "%.8f"})
def test_selection_connected(self): view = DataFrameAnalyzerView(model=self.analyzer, include_plotter=True) view.model.selected_idx = [0, 2, 1] self.assertEqual(view.plotter.model.index_selected, [0, 2, 1]) view.plotter.model.index_selected.append(3) self.assertEqual(view.model.selected_idx, [0, 2, 1, 3])
def test_change_visible_column_list(self): view = DataFrameAnalyzerView(model=self.analyzer) init_len = len(view.visible_columns) with temp_bringup_ui_for(view): # Change the list of visible columns: view.visible_columns = view.visible_columns[:1] self.assertNotEqual(len(view.visible_columns), init_len) # Both DFEditor's adapters are modified, now containing only 2 # columns: the one requested and the index: editor = view.info.displayed_df self.assertEqual(len(editor.adapter.columns), 2) editor = view.info.summary_df self.assertEqual(len(editor.adapter.columns), 2) # The model data is unchanged: self.assertEqual(len(view.model.displayed_df.columns), init_len) self.assertEqual(len(view.model.summary_df.columns), init_len) self.assertEqual(len(view.model.filtered_df.columns), init_len) self.assertEqual(len(view.model.source_df.columns), init_len)
def test_bring_up_control_precision_object_df_can_convert_to_float(self): df = DataFrame({"a": [1, 2, 3, 4, 5], "b": [10, 15, 20, 15, 10]}, dtype=object) analyzer = DataFrameAnalyzer(source_df=df) view = DataFrameAnalyzerView(model=analyzer, include_plotter=True, display_precision=3) with temp_bringup_ui_for(view): # Because the DF is set as `dtype=object` but columns can be # converted to float: self.assertEqual(view.info.displayed_df.adapter.format, "%s") df = DataFrame({"a": [1, 2, 3, 4, 5], "b": [10, 15, 20, 15, 10]}, dtype=object) analyzer = DataFrameAnalyzer(source_df=df, convert_source_dtypes=True) view = DataFrameAnalyzerView(model=analyzer, include_plotter=True, display_precision=3) with temp_bringup_ui_for(view): # Because the DF is set as `dtype=object` but columns can be # converted to float: self.assertEqual(view.info.displayed_df.adapter.format, "%.3g")
def test_edit_filter_button_recomputes_filtered_df_correctly(self, edit): self.analyzer.filter_auto_apply = False view = DataFrameAnalyzerView(model=self.analyzer, include_plotter=True) view.model.filter_exp = "a != 3" expected_df = DataFrame({"a": [1, 2, 4, 5], "b": [10, 15, 15, 10]}, index=[0, 1, 3, 4]) ui = MagicMock(result=False) edit.return_value = ui view._pop_out_filter_button_fired() assert_frame_not_equal(view.model.filtered_df, expected_df) ui.result = True view._pop_out_filter_button_fired() assert_frame_equal(view.model.filtered_df, expected_df)
def test_truncate(self): self.analyzer.num_displayed_rows = 3 self.analyzer.num_display_increment = 1 view = DataFrameAnalyzerView(model=self.analyzer, include_plotter=False) self.assertEqual(len(self.analyzer.displayed_df), 3) view.show_more_button = True self.assertEqual(len(self.analyzer.displayed_df), 4) view.show_more_button = True self.assertEqual(len(self.analyzer.displayed_df), 5) # No more rows to add: view.show_more_button = True self.assertEqual(len(self.analyzer.displayed_df), 5) view.show_more_button = True self.assertEqual(len(self.analyzer.displayed_df), 5)
def test_change_source_column_list(self): view = DataFrameAnalyzerView(model=self.analyzer) with temp_bringup_ui_for(view): self.assertEqual(view.visible_columns, self.analyzer.column_list) new_col_name = "NEW COL" self.analyzer.source_df[new_col_name] = 2 self.analyzer.col_list_changed = True self.assertNotEqual(view.visible_columns, self.analyzer.column_list) # Make the new column visible: view.visible_columns.append(new_col_name) # Both DFEditor's adapters are modified, now containing only 2 # columns: the one requested and the index: editor = view.info.displayed_df # 4 for the 3 columns and the index: self.assertEqual(len(editor.adapter.columns), 4) self.assertIn((new_col_name, new_col_name), editor.adapter.columns) editor = view.info.summary_df self.assertEqual(len(editor.adapter.columns), 4) self.assertIn((new_col_name, new_col_name), editor.adapter.columns)
def test_show_categorical_summary(self, mock): view = DataFrameAnalyzerView(model=self.analyzer, show_categorical_summary=False) with temp_bringup_ui_for(view): self.assertFalse(mock.called)
def test_bring_up_analyzer_with_plotter(self): view = DataFrameAnalyzerView(model=self.analyzer, include_plotter=True) with temp_bringup_ui_for(view): pass
def test_create_analyzer_from_df(self): view = DataFrameAnalyzerView(model=self.df, include_plotter=False) assert_frame_equal(view.model.source_df, self.df)
def test_plot_manager_list_with_plotter(self): view = DataFrameAnalyzerView(model=self.analyzer, include_plotter=True) self.assertIsInstance(view.plotter, DataFramePlotManagerView) self.assertEqual(view.model.plot_manager_list, [view.plotter.model])
def test_plot_manager_list_without_plotter(self): view = DataFrameAnalyzerView(model=self.analyzer, include_plotter=False) self.assertEqual(view.model.plot_manager_list, [])
def test_bring_up_control_different_fonts(self): fonts = {"a": "Roman 24", "b": "Courier 12"} view = DataFrameAnalyzerView(model=self.analyzer, include_plotter=True, fonts=fonts) with temp_bringup_ui_for(view): self.assertEqual(view.info.displayed_df.adapter._fonts, fonts)
def test_bring_up_column_control(self): view = DataFrameAnalyzerView(model=self.analyzer, include_plotter=True) with temp_bringup_ui_for(view): view.show_column_controls = True
config9.x_col_name = "Col_3" config9.y_col_name = "Col_4" config8 = ScatterPlotConfigurator(data_source=TEST_DF) config8.x_col_name = "Col_1" config8.y_col_name = "Col_2" config8.z_col_name = "Col_4" desc8 = PlotDescriptor(plot_config=config8, plot_title="Plot 8", container_idx=1) analyzer = DataFrameAnalyzer(source_df=TEST_DF) plot_manager = DataFramePlotManager(contained_plots=[ config, config2, config3, config4, config5, cust_plot1, config6, desc7, config9, desc8 ], data_source=TEST_DF, source_analyzer=analyzer) view = DataFrameAnalyzerView(model=analyzer, include_plotter=True, plotter_layout="Tabbed", plotter_kw={ "container_layout_type": "horizontal", "num_container_managers": 5, "multi_container_mode": 0 }) view.configure_traits()
def test_bring_up_hide_summary(self): view = DataFrameAnalyzerView(model=self.analyzer, include_plotter=True) with temp_bringup_ui_for(view): view._show_summary = False
def test_bring_up_control_fonts(self): # FIXME: figure out if we need to remove or improve view = DataFrameAnalyzerView(model=self.analyzer, include_plotter=True, fonts="Roman 24") with temp_bringup_ui_for(view): self.assert_font_equal(view, "Times New Roman 24")
def test_bring_up_control_font_size(self): view = DataFrameAnalyzerView(model=self.analyzer, font_size=20) with temp_bringup_ui_for(view): self.assert_font_equal(view, "Courier 20")
def test_bringup_df_analyzer_view(self): model = DataFrameAnalyzer(source_df=self.model.group_data) view = DataFrameAnalyzerView(model=model, include_plotter=True) with temp_bringup_ui_for(view): pass
def test_bring_up_truncated(self): self.analyzer.num_displayed_rows = 5 view = DataFrameAnalyzerView(model=self.analyzer) with temp_bringup_ui_for(view): pass