@@ -740,6 +740,41 @@ def test_density(self):
740740 self .assertIsNone (graph .density_img )
741741 self .assertIs (graph .plot_widget .removeItem .call_args [0 ][0 ], density )
742742
743+ @patch ("Orange.widgets.utils.classdensity.class_density_image" )
744+ def test_density_with_missing (self , class_density_image ):
745+ graph = self .graph
746+ graph .reset_graph ()
747+ graph .plot_widget .addItem = Mock ()
748+ graph .plot_widget .removeItem = Mock ()
749+
750+ graph .class_density = True
751+ d = np .arange (10 , dtype = float ) % 2
752+ self .master .get_color_data = lambda : d
753+
754+ # All colors known
755+ graph .update_colors ()
756+ x_data0 , y_data0 , colors0 = class_density_image .call_args [0 ][5 :]
757+
758+ # Some missing colors
759+ d [:3 ] = np .nan
760+ graph .update_colors ()
761+ x_data , y_data , colors = class_density_image .call_args [0 ][5 :]
762+ np .testing .assert_equal (x_data , x_data0 [3 :])
763+ np .testing .assert_equal (y_data , y_data0 [3 :])
764+ np .testing .assert_equal (colors , colors0 [3 :])
765+
766+ # Missing colors + only subsample plotted
767+ graph .set_sample_size (8 )
768+ graph .reset_graph ()
769+ d_known = np .isfinite (graph ._filter_visible (d ))
770+ x_data0 = graph ._filter_visible (x_data0 )[d_known ]
771+ y_data0 = graph ._filter_visible (y_data0 )[d_known ]
772+ colors0 = graph ._filter_visible (np .array (colors0 ))[d_known ]
773+ x_data , y_data , colors = class_density_image .call_args [0 ][5 :]
774+ np .testing .assert_equal (x_data , x_data0 )
775+ np .testing .assert_equal (y_data , y_data0 )
776+ np .testing .assert_equal (colors , colors0 )
777+
743778 def test_labels (self ):
744779 graph = self .graph
745780 graph .reset_graph ()
0 commit comments