def test_frame_combos(self): #test that the frame range is always the minimum to the maximum combine_prints(self.ex_df, 4, 5) self.assertTrue(self.ex_df.first_frame[5] == 12) self.assertTrue(self.ex_df.last_frame[5] == 20) #check with odd ordering of first and last combine_prints(self.ex_df, 2, 3) self.assertTrue(self.ex_df.first_frame[3] == 1) self.assertTrue(self.ex_df.last_frame[3] == 14)
def test_max_idx_kept(self): combine_prints(self.ex_df, 0, 1) self.assertTrue(1 in self.ex_df.index.values) self.assertFalse(0 in self.ex_df.index.values) combine_prints(self.ex_df, 1, 5) self.assertTrue(5 in self.ex_df.index.values) self.assertFalse(1 in self.ex_df.index.values) self.assertTrue(10 in self.ex_df.print_numb.values) self.assertFalse(2 in self.ex_df.print_numb.values)
def test_max_area_stats_kept_keep_idx_and_big_same(self): #when big_idx and keep_idx are the same self.assertTrue(self.ex_df.max_area[3] == 22) self.assertTrue(self.ex_df.X[3] == 9) self.assertTrue(self.ex_df.Y[3] == 70) self.assertTrue(self.ex_df.frame_max_a[3] == 6) combine_prints(self.ex_df, 2, 3) self.assertTrue(self.ex_df.max_area[3] == 22) self.assertTrue(self.ex_df.X[3] == 9) self.assertTrue(self.ex_df.Y[3] == 70) self.assertTrue(self.ex_df.frame_max_a[3] == 6)
def test_max_area_stats_kept_keep_idx_and_big_diff(self): #when big_idx and keep_idx are different self.assertTrue(self.ex_df.max_area[2] == 10) self.assertTrue(self.ex_df.X[2] == 8) self.assertTrue(self.ex_df.Y[2] == 66) self.assertTrue(self.ex_df.frame_max_a[2] == 5) combine_prints(self.ex_df, 1, 2) self.assertTrue(self.ex_df.max_area[2] == 40) self.assertTrue(self.ex_df.X[2] == 6) self.assertTrue(self.ex_df.Y[2] == 10) self.assertTrue(self.ex_df.frame_max_a[2] == 3)
def on_key_press(self, event): """handles each of the different key events. l,r,h, and f change the print classification of selected print d deletes the print, and has a helper method to do it. c and enter """ if self.selected_print is not None: #if its a keypress to set one of the paw id props if event.key in ['l', 'r', 'h', 'f']: self.change_print_classification(event.key) elif event.key == 'd': self.delete_print(self.selected_print) elif event.key == 'c': self.toggle_combo_state() elif event.key == 'enter': if self.in_combo_state and self.second_selected is not None: print(self.second_selected, self.selected_print) #the prints have to have the same front and side class if (self.combo_prints.is_right[self.second_selected] == \ self.combo_prints.is_right[self.selected_print] and self.combo_prints.is_hind[self.second_selected] == \ self.combo_prints.is_hind[self.selected_print]): #TODO: make this combine hulls if in same frame self.combo_prints[ 'print_numb'] = self.combo_prints.index.values keep, del_ = combine_prints(self.combo_prints, self.selected_print, self.second_selected, hulls_df=self.hulls_df) self.handle_combine_graphics(keep, del_) self.in_combo_state = False self.second_selected = None self.selected_print = None else: #TODO: display this onscreen somehow #for some reason the message box is crashing everything print("PAWS MUST MATCH") self.in_combo_state = False self.recolor(self.second_selected) self.second_selected = None self.select_panel.set_selected( self.selected_print, self.combo_prints.is_right[self.selected_print], self.combo_prints.is_hind[self.selected_print]) elif event.key == 'm': self.initiate_split_window()
def test_no_combine_different_classes(self): with self.assertRaises(ValueError): combine_prints(self.ex_df_varied, 4, 5)