Esempio n. 1
0
    def _IsValueNumeric(self, value):
        if InputController.IsInt(value):
            return True
        if InputController.IsLong(value):
            return True
        if InputController.IsFloat(value):
            return True

        return False
Esempio n. 2
0
    def _IsListOfLists(self, matrix):
        if InputController.IsList(matrix):
            for row in matrix:
                if not InputController.IsList(row):
                    return False
        else:
            return False

        return True
Esempio n. 3
0
 def __init__(self):
     self.input_controller = InputController()
     self.original_formulas_file = sys.argv[1]
     self.researched_formulas_file = sys.argv[2]
     self.optimized_original_file = sys.argv[3]
     self.optimized_researched_file = sys.argv[4]
     self.result_of_testing_original_file = sys.argv[5]
     self.result_of_testing_researched_file = sys.argv[6]
     self.analyzer_results = sys.argv[7]
class MainController:
    def __init__(self):
        self.input_controller = InputController()
        self.original_formulas_file = sys.argv[1]
        self.researched_formulas_file = sys.argv[2]
        self.optimized_original_file = sys.argv[3]
        self.optimized_researched_file = sys.argv[4]
        self.result_of_testing_original_file = sys.argv[5]
        self.result_of_testing_researched_file = sys.argv[6]
        self.analyzer_results = sys.argv[7]


    def start(self):

        self.input_controller.fault_tolerance_request()
        self.input_controller.initial_groups_request()
        self.input_controller.blocked_vector_request()

        tested_faults = len(max(self.input_controller.initial_groups, key=len))

        processors = Processors(self.input_controller.initial_groups)
        generator = FormulasGenerator(processors, self.input_controller.fault_tolerance)
        selector = Selector(self.input_controller.blocked_vectors)
        tester = PrTester(processors)
        blocker = Blocker(self.input_controller.blocked_vectors, tester, selector, processors)


        '''
            For original formulas
        '''
        generator.generate(self.input_controller.initial_groups, self.original_formulas_file)
        optimizer_original = Optimizer(self.input_controller.fault_tolerance, processors, self.optimized_original_file)
        optimizer_original.optimize(generator.origin_formulas_arr)
        blocking_original_formulas = blocker.block_original(selector.select_group(optimizer_original.result_formulas))
        tester.test(self.result_of_testing_original_file, blocking_original_formulas, tested_faults, self.input_controller.fault_tolerance)

        '''
            For researched formulas
        '''
        self.input_controller.researched_way_request()
        if self.input_controller.researched_way:

            generator.generate(processors.form_groups_according_to_blocked_vector(self.input_controller.blocked_vectors), self.researched_formulas_file)
            optimizer_researched = Optimizer(self.input_controller.fault_tolerance, processors, self.optimized_researched_file)
            optimizer_researched.optimize(generator.origin_formulas_arr)
            #selector.select_group(optimizer_researched.result_formulas)
            blocking_researched_formulas = blocker.block_researched(selector.select_group(optimizer_researched.result_formulas))
            tester.test(self.result_of_testing_researched_file,blocking_researched_formulas, tested_faults, self.input_controller.fault_tolerance)




        self.input_controller.repeat_request()

        return self.input_controller.repeat
Esempio n. 5
0
    def playGame(self, boardSpacing=-1):
        newGame = True
        if (boardSpacing == -1):
            boardSpacing = InputController.promptBoardSize(
            )  #ask for the board size.
        else:
            newGame = False

        game1 = Game(6, 7, 4, boardSpacing)  #make a game.

        if (newGame is True):
            game1.view.displayColumnAsk()  # display columns
        print("")
        game1.view.display()  #display board

        while (game1.isOver is False):  #while the game isnt over

            for x in game1.playerList:
                if ((game1.turnNumber == (game1.rows * game1.columns)) &
                    (game1.isOver is not True)):
                    play = InputController.getGameFilled(
                    )  #the gameboard MUST be filled.
                    if (play):
                        return self.playGame(
                            boardSpacing
                        )  #if it is, prompt for restart the game.
                    else:
                        game1.isOver = True  #game is over.
                        return
                else:

                    if (game1.isOver is True):  #if the game is over..
                        return
                    else:

                        game1.turnNumber = game1.turnNumber + 1  #increment turn
                        col = InputController.getValidColumn(
                            game1.view.board, x,
                            game1.turnNumber)  #get a valid column
                        if (x.makeMove(game1.view, col) is
                                True):  #if this is true
                            game1.isOver = True  #game is over.
                            if (InputController.getPlayAgain() is
                                    True):  #if we play again..
                                return self.playGame(boardSpacing)
                            else:
                                game1.isOver = True  #if not, gg
                                return
Esempio n. 6
0
 def _IsValidKey(self, key):
     """Valid key -> (row, columns) where row and columns are integers"""
     if InputController.IsTuple(key):
         if not self._IsValidKeyValues(key):
             return False
     else:
         return False
     return True
Esempio n. 7
0
 def __init__(self, pos):
     Entity.__init__(self, pos, 0.5, 2)
     self.stats = Stats()
     self.input = InputController(self)
     self.motion = MotionController(self)
     self.action = ActionController(self)
     self.color = 0xAA0077
     self.net = -1
 def __init__(self):
     self.input_controller = InputController()
     self.original_formulas_file = sys.argv[1]
     self.researched_formulas_file = sys.argv[2]
     self.optimized_original_file = sys.argv[3]
     self.optimized_researched_file = sys.argv[4]
     self.result_of_testing_original_file = sys.argv[5]
     self.result_of_testing_researched_file = sys.argv[6]
     self.analyzer_results = sys.argv[7]
Esempio n. 9
0
    def _IsValidKeyValues(self, key):
        """There can be only two integer values in a tuple"""
        countValues = 0
        for value in key:
            if not InputController.IsInt(value):
                return False
            countValues += 1

        if (countValues != 2):
            return False

        return True
    def __init__(self):

        self.server_running = False
        self.socket = None
        self.packet = 0
        self.myid = None
        self.node_table = None
        self.cost_table = None
        self.servers = None
        self.neighbors = None
        self.neighbor_timers = None
        self.updated = False
        self.interval = None

        InputController(self)
class Volume_Tab_View:
  def __init__(self, glade_xml, model_factory, app):
                                                                                
    self.model_factory = model_factory
    
    self.main_win = app
    self.width = 0
    self.height = 0
    self.glade_xml = glade_xml

    ##Set up list structure
    self.treeview = self.glade_xml.get_widget('treeview1')
    self.treemodel = self.treeview.get_model()
    self.treemodel = gtk.TreeStore (gobject.TYPE_STRING,
                                    gobject.TYPE_INT,
                                    gobject.TYPE_STRING,
                                    gobject.TYPE_STRING,
                                    gobject.TYPE_PYOBJECT)
    self.treeview.set_model(self.treemodel)
    self.treeview.set_headers_visible(False)
    
    self.input_controller = InputController(self.reset_tree_model,
                                            self.treeview, 
                                            self.model_factory, 
                                            self.glade_xml)
    
    #Change Listener
    selection = self.treeview.get_selection()
    selection.connect('changed', self.on_tree_selection_changed)
    
    #self.treeview.connect('expand-collapse-cursor-row',self.on_row_expand_collapse)
    #self.treeview.connect('row-collapsed',self.on_row_expand_collapse)
    
    self.icon_ellipse_hashtable = {}
    
    renderer1 = gtk.CellRendererText()
    column1 = gtk.TreeViewColumn("Volumes",renderer1,markup=0)
    self.treeview.append_column(column1)
    
    
    #Time to set up draw area
    window1 = self.glade_xml.get_widget("drawingarea1")
    window1.set_size_request(700, 500)
    window2 = self.glade_xml.get_widget("drawingarea2")
    window2.set_size_request(700, 500)
    window3 = self.glade_xml.get_widget("drawingarea3")
    window3.set_size_request(700, 500)
    window4 = self.glade_xml.get_widget("drawingarea4")
    window4.set_size_request(700, 500)
    
    pr_upper = Properties_Renderer(window3, window3.window)
    #pr_lower = Properties_Renderer(window4, window4.window)
    self.display_view = DisplayView(self.input_controller.register_highlighted_sections, window1, pr_upper, None, None)
    #self.display_view = DisplayView(self.input_controller.register_highlighted_sections, window1, pr_upper, window2, pr_lower)
    
    self.glade_xml.get_widget('best_fit_button').connect('clicked', self.on_best_fit)
    self.glade_xml.get_widget('zoom_in_button').connect('clicked', self.on_zoom_in)
    self.glade_xml.get_widget('zoom_out_button').connect('clicked', self.on_zoom_out)
    self.glade_xml.get_widget('viewport1').connect('size-allocate', self.on_resize_drawing_area)
    self.on_best_fit(None)
    self.glade_xml.get_widget('zoom_box').set_sensitive(False)
    
    # set up mirror copy progress
    self.mirror_sync_progress = MirrorSyncProgress(self.glade_xml.get_widget('messages_vbox'))
    
    
    #############################
    ##Highly experimental
    self.box = self.glade_xml.get_widget('vbox12')
    self.uninit_panel = self.glade_xml.get_widget('uninit_panel')
    self.uninit_panel.hide()
    self.unalloc_panel = self.glade_xml.get_widget('unalloc_panel')
    self.unalloc_panel.hide()
    self.phys_vol_view_panel = self.glade_xml.get_widget('phys_vol_view_panel')
    self.phys_vol_view_panel.hide()
    self.log_vol_view_panel = self.glade_xml.get_widget('log_vol_view_panel')
    self.log_vol_view_panel.hide()
    self.on_rm_select_lvs_button = self.glade_xml.get_widget('on_rm_select_lvs')
    self.phys_panel = self.glade_xml.get_widget('phys_panel')
    self.phys_panel.hide()
    self.log_panel = self.glade_xml.get_widget('log_panel')
    self.log_panel.hide()
    
    self.prepare_tree()
    model = self.treeview.get_model()
    vgs = self.model_factory.get_VGs()
    if len(vgs) > 0:
        model.foreach(self.check_tree_items, [vgs[0].get_name()])
    else:
        unallocs = self.model_factory.query_unallocated()
        if len(unallocs) > 0:
            model.foreach(self.check_tree_items, ['', '', unallocs[0].get_path()])
        else:
            uninits = self.model_factory.query_uninitialized()
            if len(uninits) > 0:
                model.foreach(self.check_tree_items, ['', '', uninits[0].get_path()])
  
  # format is [vgname, lvpath, pvpath] - put '' if none
  def reset_tree_model(self, *in_args):
      self.prepare_tree()
      
      args = []
      for arg in in_args:
          args.append(arg)
      model = self.treeview.get_model()
      model.foreach(self.check_tree_items, args)
  
  def check_tree_items(self, model, path, iter, *args):
    # return True to stop foreach, False to continue
    
    if len(args) == 0:
        return True # don't go any further
    args_internal = []
    for arg in args[0]:
        args_internal.append(arg)
    while len(args_internal) < 3:
        args_internal.append('')
    vgname = args_internal[0]
    lvpath = args_internal[1]
    pvpath = args_internal[2]
    
    selection = self.treeview.get_selection()
    type = model.get_value(iter, TYPE_COL)
    if type == VG_PHYS_TYPE:
        if vgname != '' and lvpath == '' and pvpath != '':
            vg = model.get_value(iter, OBJ_COL)
            if vgname == vg.get_name():
                self.treeview.expand_to_path(path)
                selection.select_path(path)
                return True
    elif type == VG_LOG_TYPE:
        if vgname != '' and lvpath != '' and pvpath == '':
            vg = model.get_value(iter, OBJ_COL)
            if vgname == vg.get_name():
                self.treeview.expand_to_path(path)
                selection.select_path(path)
                return True
    elif type == VG_TYPE:
        if vgname != '' and lvpath == '' and pvpath == '':
            vg = model.get_value(iter, OBJ_COL)
            if vgname == vg.get_name():
                self.treeview.expand_to_path(path)
                selection.select_path(path)
                return True
    elif type == LOG_TYPE:
        if vgname == '' and lvpath != '' and pvpath == '':
            lv = model.get_value(iter, OBJ_COL)
            if lvpath == lv.get_path():
                self.treeview.expand_to_path(path)
                selection.select_path(path)
                return True
    elif type == PHYS_TYPE or type == UNALLOCATED_TYPE or type == UNINITIALIZED_TYPE:
        if vgname == '' and lvpath == '' and pvpath != '':
            pv = model.get_value(iter, OBJ_COL)
            if pvpath in pv.get_paths():
                self.treeview.expand_to_path(path)
                selection.select_path(path)
                return True
    return False

  def prepare_tree(self):
    treemodel = self.treeview.get_model()
    treemodel.clear()
    
    self.model_factory.reload()
    self.mirror_sync_progress.initiate()
    
    vg_list = self.model_factory.get_VGs()
    if len(vg_list) > 0:
        vg_iter = treemodel.append(None)
        vg_string = "<span size=\"11000\"><b>" + VOLUME_GROUPS + "</b></span>"
        treemodel.set(vg_iter,
                      NAME_COL, vg_string, 
                      TYPE_COL,
                      UNSELECTABLE_TYPE)
        self.__sort_list_by_get_name_fcn(vg_list)
        for vg in vg_list:
            vg_child_iter = treemodel.append(vg_iter)
            vg_name = vg.get_name()
            vg_name_marked = vg_name
            if vg.clustered():
                vg_name_marked += '<span foreground="#FF00FF">   (' + _('Clustered VG') + ')</span>'
            treemodel.set(vg_child_iter,
                          NAME_COL, vg_name_marked, 
                          TYPE_COL, VG_TYPE, 
                          OBJ_COL, vg)
            phys_iter = treemodel.append(vg_child_iter)
            log_iter = treemodel.append(vg_child_iter)
            pview_string = vg_name + "<span foreground=\"#ED1C2A\"><i>  " + PHYSICAL_VIEW + "</i></span>"
            treemodel.set(phys_iter,
                          NAME_COL, pview_string,
                          TYPE_COL, VG_PHYS_TYPE,
                          PATH_COL, vg_name, 
                          OBJ_COL, vg)
            lview_string = vg_name + "<span foreground=\"#43ACF6\"><i>  " + LOGICAL_VIEW + "</i></span>"
            treemodel.set(log_iter,
                          NAME_COL, lview_string,
                          TYPE_COL, VG_LOG_TYPE,
                          PATH_COL, vg_name, 
                          OBJ_COL, vg)
            
            pv_list = vg.get_pvs().values()
            grouped_dir, ungrouped_list = self.__group_by_device(pv_list)
            grouped_dir_sorted = grouped_dir.keys()
            grouped_dir_sorted.sort()
            for main_dev in grouped_dir_sorted:
                dev_iter = treemodel.append(phys_iter)
                pvs = grouped_dir[main_dev]
                devnames = pvs[0].getDevnames()
                devnames_str = devnames[0]
                for devname in devnames[1:]:
                    devnames_str = devnames_str + ', ' + devname
                if len(devnames) > 1:
                    devnames_str = str(pvs[0].getMultipath()) + ' [' + devnames_str + ']'
                treemodel.set(dev_iter, 
                              NAME_COL, devnames_str, 
                              TYPE_COL, UNSELECTABLE_TYPE)
                for pv in pvs:
                    iter = treemodel.append(dev_iter)
                    phys_string = "<span foreground=\"#ED1C2A\">" + pv.get_name() + "</span>"
                    treemodel.set(iter, 
                                  NAME_COL, phys_string, 
                                  TYPE_COL, PHYS_TYPE, 
                                  PATH_COL, pv.get_path(), 
                                  OBJ_COL, pv)
            for pv in ungrouped_list:
                iter = treemodel.append(phys_iter)
                phys_string = "<span foreground=\"#ED1C2A\">" + pv.get_name() + "</span>"
                treemodel.set(iter, 
                              NAME_COL, phys_string, 
                              TYPE_COL, PHYS_TYPE, 
                              PATH_COL, pv.get_path(), 
                              OBJ_COL, pv)
            
            lv_list = vg.get_lvs().values()
            self.__sort_list_by_get_name_fcn(lv_list)
            for lv in lv_list:
                if lv.is_used():
                    iter = treemodel.append(log_iter)
                    log_string = "<span foreground=\"#43ACF6\">" + lv.get_name() + "</span>"
                    treemodel.set(iter, 
                                  NAME_COL, log_string, 
                                  TYPE_COL, LOG_TYPE,
                                  PATH_COL, lv.get_path(),
                                  SIMPLE_LV_NAME_COL, lv.get_name(),
                                  OBJ_COL, lv)
            
            #Expand if there are entries 
            self.treeview.expand_row(treemodel.get_path(vg_iter),False)
            
    unalloc_list = self.model_factory.query_unallocated()
    if len(unalloc_list) > 0:
        unallocated_iter = treemodel.append(None)
        unalloc_string = "<span size=\"11000\"><b>" + UNALLOCATED_VOLUMES + "</b></span>"
        treemodel.set(unallocated_iter,
                      NAME_COL, unalloc_string, 
                      TYPE_COL, UNSELECTABLE_TYPE)
        grouped_dir, ungrouped_list = self.__group_by_device(unalloc_list)
        grouped_dir_sorted = grouped_dir.keys()
        grouped_dir_sorted.sort()
        for main_dev in grouped_dir_sorted:
            dev_iter = treemodel.append(unallocated_iter)
            pvs = grouped_dir[main_dev]
            devnames = pvs[0].getDevnames()
            devnames_str = devnames[0]
            for devname in devnames[1:]:
                devnames_str = devnames_str + ', ' + devname
            if len(devnames) > 1:
                devnames_str = str(pvs[0].getMultipath()) + ' [' + devnames_str + ']'
            treemodel.set(dev_iter, 
                          NAME_COL, devnames_str, 
                          TYPE_COL, UNSELECTABLE_TYPE)
            for pv in pvs:
                iter = treemodel.append(dev_iter)
                phys_string = "<span foreground=\"#ED1C2A\">" + pv.get_name() + "</span>"
                treemodel.set(iter, 
                              NAME_COL, phys_string, 
                              TYPE_COL, UNALLOCATED_TYPE, 
                              PATH_COL, pv.get_path(), 
                              OBJ_COL, pv)
        for pv in ungrouped_list:
            iter = treemodel.append(unallocated_iter)
            phys_string = "<span foreground=\"#ED1C2A\">" + pv.get_path() + "</span>"
            treemodel.set(iter, 
                          NAME_COL, phys_string, 
                          TYPE_COL, UNALLOCATED_TYPE, 
                          PATH_COL, pv.get_path(), 
                          OBJ_COL, pv)
    
    uninit_list = self.model_factory.query_uninitialized()
    if len(uninit_list) > 0:
        uninitialized_iter = treemodel.append(None)
        uninit_string = "<span size=\"11000\"><b>" + UNINITIALIZED_ENTITIES + "</b></span>"
        treemodel.set(uninitialized_iter, 
                      NAME_COL, uninit_string, 
                      TYPE_COL, UNSELECTABLE_TYPE)
        grouped_dir, ungrouped_list = self.__group_by_device(uninit_list)
        grouped_dir_sorted = grouped_dir.keys()
        grouped_dir_sorted.sort()
        for main_dev in grouped_dir_sorted:
            dev_iter = treemodel.append(uninitialized_iter)
            pvs = grouped_dir[main_dev]
            devnames = pvs[0].getDevnames()
            devnames_str = devnames[0]
            for devname in devnames[1:]:
                devnames_str = devnames_str + ', ' + devname
            if len(devnames) > 1:
                devnames_str = str(pvs[0].getMultipath()) + ' [' + devnames_str + ']'
            treemodel.set(dev_iter,
                          NAME_COL, devnames_str, 
                          TYPE_COL, UNSELECTABLE_TYPE)
            for pv in grouped_dir[main_dev]:
                iter = treemodel.append(dev_iter)
                treemodel.set(iter, 
                              NAME_COL, pv.get_name(), 
                              TYPE_COL, UNINITIALIZED_TYPE, 
                              PATH_COL, pv.get_path(), 
                              OBJ_COL, pv)
        for pv in ungrouped_list:
            iter = treemodel.append(uninitialized_iter)
            treemodel.set(iter, 
                          NAME_COL, pv.get_path(), 
                          TYPE_COL, UNINITIALIZED_TYPE, 
                          PATH_COL, pv.get_path(), 
                          OBJ_COL, pv)
    
    #self.treeview.expand_all()
    self.clear_all_buttonpanels()
  
  # returns {main_dev : [pv1, pv2, ...], ...}
  def __group_by_device(self, pvlist):
      grouped = {}
      ungrouped = []
      for pv in pvlist:
          if len(pv.getDevnames()) == 0 or pv.wholeDevice():
              ungrouped.append(pv)
              continue
          if pv.getDevnames()[0] in grouped.keys():
              grouped[pv.getDevnames()[0]].append(pv)
          else:
              grouped[pv.getDevnames()[0]] = [pv]

      # sort lists
      for main_dev in grouped:
          self.__sort_list_by_get_name_fcn(grouped[main_dev])
      self.__sort_list_by_get_name_fcn(ungrouped)
      return grouped, ungrouped
  
  def __sort_list_by_get_name_fcn(self, some_list):
      d = {}
      l = []
      while len(some_list) != 0:
          o = some_list.pop()
          name = o.get_name()
          if name in d:
              d[name].append(o)
          else:
              d[name] = [o]
              l.append(name)
      l.sort()
      for name in l:
          for o in d[name]:
              some_list.append(o)
      return some_list
  
  def on_tree_selection_changed(self, *args):
    selection = self.treeview.get_selection()
    model,iter = selection.get_selected()
    if iter == None:
        self.glade_xml.get_widget('zoom_box').set_sensitive(False)
        self.display_view.render_no_selection()
        self.display_view.draw()
        return
    
    treepath = model.get_path(iter)
    self.treeview.expand_row(treepath, False)
    
    type = model.get_value(iter, TYPE_COL)
    if type == VG_PHYS_TYPE:
        self.input_controller.clear_highlighted_sections()
        self.clear_all_buttonpanels()
        self.phys_vol_view_panel.show()
        
        vg = model.get_value(iter, OBJ_COL)
        pv_list = vg.get_pvs().values()
        self.display_view.render_pvs(pv_list)
        self.on_best_fit(None)
        self.glade_xml.get_widget('zoom_box').set_sensitive(True)
    elif type == VG_LOG_TYPE:
        self.input_controller.clear_highlighted_sections()
        self.clear_all_buttonpanels()
        
        vg = model.get_value(iter, OBJ_COL)
        lv_list = vg.get_lvs().values()
        self.show_log_vol_view_panel(lv_list)
        self.display_view.render_lvs(lv_list)
        self.on_best_fit(None)
        self.glade_xml.get_widget('zoom_box').set_sensitive(True)
    elif type == VG_TYPE:
        self.clear_all_buttonpanels()
        self.input_controller.clear_highlighted_sections()
        
        vg = model.get_value(iter, OBJ_COL)
        self.display_view.render_vg(vg)
        self.on_best_fit(None)
        self.glade_xml.get_widget('zoom_box').set_sensitive(True)
    elif type == LOG_TYPE:
        self.input_controller.clear_highlighted_sections()
        self.clear_all_buttonpanels()
        self.log_panel.show()
        
        lv = model.get_value(iter, OBJ_COL)
        self.display_view.render_lv(lv)
        self.on_best_fit(None)
        self.glade_xml.get_widget('zoom_box').set_sensitive(False)
    elif type == PHYS_TYPE:
        self.input_controller.clear_highlighted_sections()
        self.clear_all_buttonpanels()
        self.phys_panel.show()
        
        pv = model.get_value(iter, OBJ_COL)
        self.display_view.render_pv(pv)
        self.on_best_fit(None)
        self.glade_xml.get_widget('zoom_box').set_sensitive(True)
    elif type == UNALLOCATED_TYPE:
        self.input_controller.clear_highlighted_sections()
        self.clear_all_buttonpanels()
        self.unalloc_panel.show()
        
        pv = model.get_value(iter, OBJ_COL)
        self.display_view.render_unalloc_pv(pv)
        self.on_best_fit(None)
        self.glade_xml.get_widget('zoom_box').set_sensitive(False)
    elif type == UNINITIALIZED_TYPE:
        self.input_controller.clear_highlighted_sections()
        self.clear_all_buttonpanels()
        button = self.input_controller.init_entity_button
        
        uv = model.get_value(iter, OBJ_COL)
        if uv.initializable:
            button.set_sensitive(True)
        else:
            button.set_sensitive(False)
        self.uninit_panel.show()
        self.display_view.render_uninit_pv(uv)
        self.on_best_fit(None)
        self.glade_xml.get_widget('zoom_box').set_sensitive(False)
    else:
        self.input_controller.clear_highlighted_sections()
        self.clear_all_buttonpanels()
        self.display_view.render_no_selection()
        self.display_view.draw()
        self.glade_xml.get_widget('zoom_box').set_sensitive(False)
  
  def on_row_expand_collapse(self, treeview, logical,expand, openall, *params):
    treeview.get_model()
    selection = treeview.get_selection()
    model, iter = selection.get_selected()
#    if model.iter_parent(iter) == None:  #Top level
    return True
#    else:
#    return False

  def show_log_vol_view_panel(self,lv_list):
    #This is a wrapper for self.log_vol_view_panel.show()
    #If the VG has no LVs, then a proxy LV is returned as an 'Unused' LV.
    #We do not want to allow the deletion of this unused LV.
    #So we'll gray out the button.
    self.on_rm_select_lvs_button.set_sensitive(True)
    if len(lv_list) == 1:
        if lv_list[0].is_used() == False:
            self.on_rm_select_lvs_button.set_sensitive(False)
    self.log_vol_view_panel.show()
  
  def clear_all_buttonpanels(self):
      self.unalloc_panel.hide()
      self.uninit_panel.hide()
      self.log_vol_view_panel.hide()
      self.phys_vol_view_panel.hide()
      self.log_panel.hide()
      self.phys_panel.hide()
      
  
  def on_best_fit(self, obj):
      self.on_resize_drawing_area(None, None)
      self.__set_zoom_buttons(self.display_view.set_best_fit())
      self.display_view.draw()
  
  def on_zoom_in(self, obj):
      self.__set_zoom_buttons(self.display_view.zoom_in())
      self.display_view.draw()
  
  def on_zoom_out(self, obj):
      self.__set_zoom_buttons(self.display_view.zoom_out())
      self.display_view.draw()
  
  def __set_zoom_buttons(self, (z_in, z_out)):
      if z_in:
          self.glade_xml.get_widget('zoom_in_button').set_sensitive(True)
      else:
          self.glade_xml.get_widget('zoom_in_button').set_sensitive(False)
      if z_out:
          self.glade_xml.get_widget('zoom_out_button').set_sensitive(True)
      else:
          self.glade_xml.get_widget('zoom_out_button').set_sensitive(False)
Esempio n. 12
0
    def __init__(self, glade_xml, model_factory, app):

        self.model_factory = model_factory

        self.main_win = app
        self.width = 0
        self.height = 0
        self.glade_xml = glade_xml

        self.try_not_best_fit = True

        ##Set up list structure
        self.treeview = self.glade_xml.get_widget('treeview1')
        self.treemodel = self.treeview.get_model()
        self.treemodel = gtk.TreeStore(gobject.TYPE_STRING, gobject.TYPE_INT,
                                       gobject.TYPE_STRING,
                                       gobject.TYPE_STRING,
                                       gobject.TYPE_PYOBJECT)
        self.treeview.set_model(self.treemodel)
        self.treeview.set_headers_visible(False)

        self.input_controller = InputController(self.reset_tree_model,
                                                self.treeview,
                                                self.model_factory,
                                                self.glade_xml)

        #Change Listener
        selection = self.treeview.get_selection()
        selection.connect('changed', self.on_tree_selection_changed)

        #self.treeview.connect('expand-collapse-cursor-row',self.on_row_expand_collapse)
        #self.treeview.connect('row-collapsed',self.on_row_expand_collapse)

        self.icon_ellipse_hashtable = {}

        renderer1 = gtk.CellRendererText()
        column1 = gtk.TreeViewColumn("Volumes", renderer1, markup=0)
        self.treeview.append_column(column1)

        #Time to set up draw area
        window1 = self.glade_xml.get_widget("drawingarea1")
        window1.set_size_request(700, 500)
        window2 = self.glade_xml.get_widget("drawingarea2")
        window2.set_size_request(700, 500)
        window3 = self.glade_xml.get_widget("drawingarea3")
        window3.set_size_request(700, 500)
        window4 = self.glade_xml.get_widget("drawingarea4")
        window4.set_size_request(700, 500)

        pr_upper = Properties_Renderer(window3, window3.window)
        #pr_lower = Properties_Renderer(window4, window4.window)
        self.display_view = DisplayView(
            self.input_controller.register_highlighted_sections, window1,
            pr_upper, None, None)
        #self.display_view = DisplayView(self.input_controller.register_highlighted_sections, window1, pr_upper, window2, pr_lower)

        self.glade_xml.get_widget('best_fit_button').connect(
            'clicked', self.on_best_fit)
        self.glade_xml.get_widget('zoom_in_button').connect(
            'clicked', self.on_zoom_in)
        self.glade_xml.get_widget('zoom_out_button').connect(
            'clicked', self.on_zoom_out)
        self.glade_xml.get_widget('viewport1').connect(
            'size-allocate', self.on_resize_drawing_area)
        self.on_best_fit(None)
        self.glade_xml.get_widget('zoom_box').set_sensitive(False)

        # set up mirror copy progress
        self.mirror_sync_progress = MirrorSyncProgress(
            self.glade_xml.get_widget('messages_vbox'))

        #############################
        ##Highly experimental
        self.box = self.glade_xml.get_widget('vbox12')
        self.uninit_panel = self.glade_xml.get_widget('uninit_panel')
        self.uninit_panel.hide()
        self.unalloc_panel = self.glade_xml.get_widget('unalloc_panel')
        self.unalloc_panel.hide()
        self.phys_vol_view_panel = self.glade_xml.get_widget(
            'phys_vol_view_panel')
        self.phys_vol_view_panel.hide()
        self.log_vol_view_panel = self.glade_xml.get_widget(
            'log_vol_view_panel')
        self.log_vol_view_panel.hide()
        self.on_rm_select_lvs_button = self.glade_xml.get_widget(
            'on_rm_select_lvs')
        self.phys_panel = self.glade_xml.get_widget('phys_panel')
        self.phys_panel.hide()
        self.log_panel = self.glade_xml.get_widget('log_panel')
        self.log_panel.hide()

        self.prepare_tree()
        model = self.treeview.get_model()
        vgs = self.model_factory.get_VGs()
        if len(vgs) > 0:
            model.foreach(self.check_tree_items, [vgs[0].get_name()])

            lvs_count = 0
            for vg in vgs:
                lvs_count += len(vg.lvs)
            if (lvs_count < MAX_LV_FOR_BESTFIT):
                self.try_not_best_fit = False
            else:
                self.glade_xml.get_widget('best_fit_button').set_sensitive(
                    False)
        else:
            unallocs = self.model_factory.query_unallocated()
            if len(unallocs) > 0:
                model.foreach(self.check_tree_items,
                              ['', '', unallocs[0].get_path()])
            else:
                uninits = self.model_factory.query_uninitialized()
                if len(uninits) > 0:
                    model.foreach(self.check_tree_items,
                                  ['', '', uninits[0].get_path()])
Esempio n. 13
0
class Ui_RegressionWindow(object):
    input_C = InputController()
    RgMdl = RegressionController()
    rt = ReportModule()
    saveModel = 0

    def setupUi(self, RegressionWindow):
        RegressionWindow.setObjectName("RegressionWindow")
        RegressionWindow.resize(870, 845)
        self.centralwidget = QtWidgets.QWidget(RegressionWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.ImgPath = QtWidgets.QLineEdit(self.centralwidget)
        self.ImgPath.setGeometry(QtCore.QRect(10, 160, 311, 31))
        self.ImgPath.setObjectName("ImgPath")
        self.tranData_Path = QtWidgets.QLineEdit(self.centralwidget)
        self.tranData_Path.setGeometry(QtCore.QRect(10, 240, 311, 31))
        self.tranData_Path.setObjectName("tranData_Path")
        self.ImgPth_Btn = QtWidgets.QPushButton(self.centralwidget)
        self.ImgPth_Btn.setGeometry(QtCore.QRect(370, 160, 93, 31))
        self.ImgPth_Btn.setObjectName("ImgPth_Btn")
        self.tranPath_Btn = QtWidgets.QPushButton(self.centralwidget)
        self.tranPath_Btn.setGeometry(QtCore.QRect(370, 240, 93, 31))
        self.tranPath_Btn.setObjectName("tranPath_Btn")
        self.attr_btn = QtWidgets.QPushButton(self.centralwidget)
        self.attr_btn.setGeometry(QtCore.QRect(740, 240, 93, 31))
        self.attr_btn.setObjectName("attr_btn")
        self.attributes = QtWidgets.QComboBox(self.centralwidget)
        self.attributes.setGeometry(QtCore.QRect(680, 190, 151, 31))
        self.attributes.setObjectName("attributes")
        self.RunBtn = QtWidgets.QPushButton(self.centralwidget)
        self.RunBtn.setGeometry(QtCore.QRect(710, 320, 121, 41))
        self.RunBtn.setObjectName("RunBtn")
        self.line = QtWidgets.QFrame(self.centralwidget)
        self.line.setGeometry(QtCore.QRect(0, 510, 861, 16))
        self.line.setFrameShape(QtWidgets.QFrame.HLine)
        self.line.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.line.setObjectName("line")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setEnabled(True)
        self.label.setGeometry(QtCore.QRect(210, 30, 521, 61))
        font = QtGui.QFont()
        font.setPointSize(23)
        font.setBold(False)
        font.setWeight(50)
        self.label.setFont(font)
        self.label.setObjectName("label")
        self.savePath = QtWidgets.QLineEdit(self.centralwidget)
        self.savePath.setGeometry(QtCore.QRect(10, 580, 321, 31))
        self.savePath.setObjectName("savePath")
        self.PathLabel = QtWidgets.QLabel(self.centralwidget)
        self.PathLabel.setGeometry(QtCore.QRect(10, 550, 131, 20))
        self.PathLabel.setObjectName("PathLabel")
        self.BrowsePath = QtWidgets.QPushButton(self.centralwidget)
        self.BrowsePath.setGeometry(QtCore.QRect(370, 580, 93, 31))
        self.BrowsePath.setObjectName("BrowsePath")
        self.SaveBtn = QtWidgets.QRadioButton(self.centralwidget)
        self.SaveBtn.setGeometry(QtCore.QRect(710, 560, 111, 21))
        self.SaveBtn.setObjectName("SaveBtn")
        self.ReportNameLabel = QtWidgets.QLabel(self.centralwidget)
        self.ReportNameLabel.setGeometry(QtCore.QRect(10, 640, 131, 20))
        self.ReportNameLabel.setObjectName("ReportNameLabel")
        self.ProjectName = QtWidgets.QLineEdit(self.centralwidget)
        self.ProjectName.setGeometry(QtCore.QRect(10, 670, 221, 31))
        self.ProjectName.setObjectName("ProjectName")
        self.ImgPath_label = QtWidgets.QLabel(self.centralwidget)
        self.ImgPath_label.setGeometry(QtCore.QRect(10, 130, 131, 20))
        self.ImgPath_label.setObjectName("ImgPath_label")
        self.TrainData_label = QtWidgets.QLabel(self.centralwidget)
        self.TrainData_label.setGeometry(QtCore.QRect(10, 210, 131, 20))
        self.TrainData_label.setObjectName("TrainData_label")
        self.testsize = QtWidgets.QLineEdit(self.centralwidget)
        self.testsize.setGeometry(QtCore.QRect(30, 400, 111, 41))
        self.testsize.setObjectName("testsize")
        self.trees_label = QtWidgets.QLabel(self.centralwidget)
        self.trees_label.setGeometry(QtCore.QRect(330, 340, 131, 21))
        font = QtGui.QFont()
        font.setPointSize(9)
        font.setBold(False)
        font.setWeight(50)
        self.trees_label.setFont(font)
        self.trees_label.setObjectName("trees_label")
        self.SplitSize_label = QtWidgets.QLabel(self.centralwidget)
        self.SplitSize_label.setGeometry(QtCore.QRect(20, 340, 381, 31))
        font = QtGui.QFont()
        font.setPointSize(9)
        font.setBold(False)
        font.setWeight(50)
        self.SplitSize_label.setFont(font)
        self.SplitSize_label.setObjectName("SplitSize_label")
        self.trnsplt_label = QtWidgets.QLabel(self.centralwidget)
        self.trnsplt_label.setGeometry(QtCore.QRect(150, 400, 141, 41))
        font = QtGui.QFont()
        font.setPointSize(10)
        font.setBold(True)
        font.setWeight(75)
        self.trnsplt_label.setFont(font)
        self.trnsplt_label.setObjectName("trnsplt_label")
        self.TreesNo = QtWidgets.QLineEdit(self.centralwidget)
        self.TreesNo.setGeometry(QtCore.QRect(330, 380, 113, 41))
        self.TreesNo.setObjectName("TreesNo")
        self.SplitSize_label_2 = QtWidgets.QLabel(self.centralwidget)
        self.SplitSize_label_2.setGeometry(QtCore.QRect(20, 460, 381, 31))
        font = QtGui.QFont()
        font.setPointSize(9)
        font.setBold(False)
        font.setWeight(50)
        self.SplitSize_label_2.setFont(font)
        self.SplitSize_label_2.setObjectName("SplitSize_label_2")
        RegressionWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(RegressionWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 870, 26))
        self.menubar.setObjectName("menubar")
        RegressionWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(RegressionWindow)
        self.statusbar.setObjectName("statusbar")
        RegressionWindow.setStatusBar(self.statusbar)

        self.testsize.setText("25")
        self.TreesNo.setText("100")

        self.ImgPth_Btn.clicked.connect(self.openImagePathDialog)
        self.tranPath_Btn.clicked.connect(self.openTrainingFileDialog)

        self.BrowsePath.clicked.connect(self.BrowsePathDir)

        self.SaveBtn.toggled.connect(self.SaveModel)
        self.attr_btn.clicked.connect(self.Get_TrainAttribute)
        self.RunBtn.clicked.connect(self.validateInput)

        self.retranslateUi(RegressionWindow)
        QtCore.QMetaObject.connectSlotsByName(RegressionWindow)

    def retranslateUi(self, RegressionWindow):
        _translate = QtCore.QCoreApplication.translate
        RegressionWindow.setWindowTitle(
            _translate("RegressionWindow", "Regression"))
        self.ImgPth_Btn.setText(_translate("RegressionWindow", "Browse"))
        self.tranPath_Btn.setText(_translate("RegressionWindow", "Browse"))
        self.attr_btn.setText(_translate("RegressionWindow", "Get attributes"))
        self.RunBtn.setText(_translate("RegressionWindow", "Run"))
        self.label.setText(
            _translate("RegressionWindow", "Random Forrest Regression"))
        self.PathLabel.setText(
            _translate("RegressionWindow", "Results Directory"))
        self.BrowsePath.setText(_translate("RegressionWindow", "Browse"))
        self.SaveBtn.setText(_translate("RegressionWindow", "Save Model"))
        self.ReportNameLabel.setText(
            _translate("RegressionWindow", "Project Name"))
        self.ImgPath_label.setText(_translate("RegressionWindow",
                                              "Image Path"))
        self.TrainData_label.setText(
            _translate("RegressionWindow", "Training Data Path"))
        self.trees_label.setText(
            _translate("RegressionWindow", "Number of Trees"))
        self.SplitSize_label.setText(
            _translate("RegressionWindow",
                       "Split size of Training & Testing sets"))
        self.trnsplt_label.setText(
            _translate("RegressionWindow", "% Test Size"))
        self.SplitSize_label_2.setText(
            _translate("RegressionWindow",
                       "Training Size is 100%  -  Test Size"))

    def openImagePathDialog(self):
        filename = QFileDialog.getOpenFileName()
        self.ImgPath.setText(filename[0])
        self.input_C.set_img_path(filename[0])

    def openTrainingFileDialog(self):
        filename = QFileDialog.getOpenFileName()
        self.tranData_Path.setText(filename[0])
        self.input_C.set_training_path(filename[0])

    def Get_TrainAttribute(self):
        if not self.tranData_Path.text().endswith(".shp"):
            msg = QMessageBox()
            msg.setIcon(QMessageBox.Information)
            msg.setWindowTitle("Wrong Selection")
            msg.setText(
                "Please select correct file with .shp extension to get attributes. "
            )
            msg.exec_()
            return
        else:
            attlist = self.FindAttributes(self.tranData_Path.text())
            if (attlist):
                self.attributes.addItems(attlist)
            if not (attlist):
                msg = QMessageBox()
                msg.setIcon(QMessageBox.Information)
                msg.setWindowTitle("NO ATTRIBUTES FOUND")
                msg.setText("NO ATTRIBUTES FOUND IN .SHP FILE. ")
                msg.exec_()

    def FindAttributes(self, filepath):
        return self.input_C.FindAttributes(filepath)
        # try:
        #     driver = ogr.GetDriverByName('ESRI Shapefile')
        #     shape_dataset = driver.Open(filepath)
        #     shape_layer = shape_dataset.GetLayer()
        #     field_names = [field.name for field in shape_layer.schema]
        #     return field_names
        # except ValueError as e:
        #     print(e)

    def BrowsePathDir(self):
        filename = QFileDialog.getExistingDirectory()
        self.savePath.setText(filename)

    def BrowseImagePath(self):
        filename = QFileDialog.getExistingDirectory()
        self.ImgSavePath.setText(filename)

    def SaveModel(self):
        if self.SaveBtn.isChecked():
            self.saveModel = 1
            # self.ModelNameLabel.show()
            # self.ModelPathLabel.show()
            # self.BrowseMdlPath.show()
            # self.ModelSavePath.show()
            # self.ModelName.show()
        else:
            self.saveModel = 0
            # self.ModelNameLabel.hide()
            # self.ModelPathLabel.hide()
            # self.ModelSavePath.hide()
            # self.BrowseMdlPath.hide()
            # self.ModelName.hide()

    def BrowseModelPath(self):
        filename = QFileDialog.getExistingDirectory()
        self.ModelSavePath.setText(filename)

    def validateInput(self):

        msg = QMessageBox()
        msg.setIcon(QMessageBox.Information)
        msg.setWindowTitle("Validation Prompt")
        msg.setStandardButtons(QMessageBox.Ok | QMessageBox.Cancel)

        if not self.ImgPath.text().endswith(".tif"):
            msg.setText("Invalid Image File. ")
            msg.setInformativeText("Invalid File Format")
            msg.setDetailedText(
                "The details are as follows: Either Image file is not selected or does not contain .tif extension"
            )
            msg.exec_()
            self.window = QtWidgets.QMainWindow()
            self.ui = Ui_RegressionWindow()
            self.ui.setupUi(self.window)
            return

        if not self.tranData_Path.text().endswith(".shp"):
            msg.setText("Invalid Training Data File. ")
            msg.setInformativeText("Invalid File Format")
            msg.setDetailedText(
                "The details are as follows: Either Training file is not selected or does not contain .shp extension"
            )
            msg.exec_()
            self.window = QtWidgets.QMainWindow()
            self.ui = Ui_RegressionWindow()
            self.ui.setupUi(self.window)
            return

        if self.attributes.currentText() == "":
            msg.setText("Please select the attribute. ")
            msg.setInformativeText("Attribute not selected")
            msg.setDetailedText(
                "The details are as follows: Select attribute from Training File"
            )
            msg.exec_()
            self.window = QtWidgets.QMainWindow()
            self.ui = Ui_RegressionWindow()
            self.ui.setupUi(self.window)
            return

        if self.ProjectName.text() == "":
            msg.setText("Please enter a suitable name for your project. ")
            msg.setInformativeText("project name missing")
            msg.exec_()
            self.window = QtWidgets.QMainWindow()
            self.ui = Ui_RegressionWindow()
            self.ui.setupUi(self.window)
            return

        if self.savePath.text() == "":
            msg.setText("Please select path for project. ")
            msg.setInformativeText("project path missing")
            msg.exec_()
            self.window = QtWidgets.QMainWindow()
            self.ui = Ui_RegressionWindow()
            self.ui.setupUi(self.window)
            return

        # if self.TreesNo.text() == "":
        #     msg.setText("Please enter a suitable numbe. ")
        #     msg.setInformativeText("Image name missing")
        #     msg.exec_()
        #     self.window = QtWidgets.QMainWindow()
        #     self.ui = Ui_RegressionWindow()
        #     self.ui.setupUi(self.window)
        #     return
        #
        # if self.ImgSavePath.text() == "":
        #     msg.setText("Please select path for Image result. ")
        #     msg.setInformativeText("Image path missing")
        #     msg.exec_()
        #     self.window = QtWidgets.QMainWindow()
        #     self.ui = Ui_RegressionWindow()
        #     self.ui.setupUi(self.window)
        #     return
        #
        # if self.saveModel == 1 and (self.ModelName.text() == "" or self.ModelSavePath.text() == ""):
        #     msg.setText("Please enter name and Path for saving model. ")
        #     msg.setInformativeText("Either Model Name of Path not entered")
        #     msg.exec_()
        #     self.window = QtWidgets.QMainWindow()
        #     self.ui = Ui_RegressionWindow()
        #     self.ui.setupUi(self.window)
        #     return

        else:
            self.Run()

    def Run(self):

        try:
            print("The process has started.... This will take few minutes")
            if self.TreesNo.text() == "":
                self.TreesNo.setText("100")

            if self.testsize.text() == "":
                self.testsize.setText("1000")

            test_size = float(self.testsize.text()) / 100
            treeNo = int(self.TreesNo.text())

            print(self.savePath.text())
            dir_path = self.savePath.text() + "\\" + self.ProjectName.text()

            if os.path.isdir(dir_path):

                msg = QMessageBox()
                msg.setIcon(QMessageBox.Information)
                msg.setWindowTitle("Validation Prompt")
                msg.setStandardButtons(QMessageBox.Ok | QMessageBox.Cancel)

                msg.setText("A folder nammed " + self.ProjectName.text() +
                            " already exists. ")
                msg.setInformativeText("Please move the folder and try again")
                msg.exec_()
                self.window = QtWidgets.QMainWindow()
                self.ui = Ui_RegressionWindow()
                self.ui.setupUi(self.window)
                return

            else:
                os.mkdir(dir_path)

            reportpath = dir_path
            reportpath += "/" + str(self.ProjectName.text()) + "_REPORT.pdf"

            prediction_map = dir_path
            prediction_map += "/" + str(self.ProjectName.text()) + "_IMG.tif"
            modelsavepath = dir_path + "/" + self.ProjectName.text(
            ) + "_MODEL.sav"

            LoadingImages = self.input_C.load_image_data()
            img_ds = LoadingImages[0]
            img = LoadingImages[1]

            doc = self.rt.build_doc(reportpath,
                                    "Random Forrest Regression Report")
            self.input_C.set_training_attr(self.attributes.currentText())

            TrainingData = self.input_C.load_train_data(img_ds,
                                                        "Regression")  ## roi

            # self.input_C.create_training_subplots(img[:, :, 0],TrainingData)

            Regressor = self.RgMdl.RF_regressor(TrainingData, img,
                                                self.attributes.currentText(),
                                                test_size, treeNo)
            RFR = Regressor[0]
            self.helper = Regressor[1]
            #preparesection1
            prediction = self.RgMdl.RF_prediction(RFR, img)

            self.RgMdl.RF_save_PredictionImage(prediction, prediction_map, img,
                                               img_ds)

            rp_param = RFHelper(prediction, TrainingData, self.helper,
                                self.ImgPath.text(), self.tranData_Path.text(),
                                reportpath, prediction_map, modelsavepath)

            doc = self.rt.make_rf_reg_report(doc, img, rp_param, dir_path)

            if self.saveModel == 1:
                self.RgMdl.save_model(RFR, modelsavepath)

            doc.save()

            msg = QMessageBox()
            msg.setIcon(QMessageBox.Information)
            msg.setWindowTitle("Complete!!!")
            msg.setText("Processing Done. Report ready to preview ")
            msg.exec_()

        except ValueError as e:
            print(e)
Esempio n. 14
0
class Ui_ClassificationWindow(object):
    input_C = InputController()
    rf_C = RandomForrestController()
    rt = ReportModule()
    saveModel = 0
    counter = 0
    validationFlag = 1

    def setupUi(self, ClassificationWindow):
        ClassificationWindow.setObjectName("ClassificationWindow")
        ClassificationWindow.resize(860, 798)
        self.centralwidget = QtWidgets.QWidget(ClassificationWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.imagePath = QtWidgets.QLineEdit(self.centralwidget)
        self.imagePath.setGeometry(QtCore.QRect(20, 140, 311, 31))
        self.imagePath.setObjectName("imagePath")
        self.trainPath = QtWidgets.QLineEdit(self.centralwidget)
        self.trainPath.setGeometry(QtCore.QRect(20, 230, 311, 31))
        self.trainPath.setObjectName("trainPath")
        self.validPath = QtWidgets.QLineEdit(self.centralwidget)
        self.validPath.setGeometry(QtCore.QRect(20, 320, 311, 31))
        self.validPath.setObjectName("validPath")
        self.imgBrowseBtn = QtWidgets.QPushButton(self.centralwidget)
        self.imgBrowseBtn.setGeometry(QtCore.QRect(370, 140, 93, 31))
        self.imgBrowseBtn.setObjectName("imgBrowseBtn")
        self.trainBrowseBtn = QtWidgets.QPushButton(self.centralwidget)
        self.trainBrowseBtn.setGeometry(QtCore.QRect(370, 230, 93, 31))
        self.trainBrowseBtn.setObjectName("trainBrowseBtn")
        self.validBrowseBtn = QtWidgets.QPushButton(self.centralwidget)
        self.validBrowseBtn.setGeometry(QtCore.QRect(370, 320, 93, 31))
        self.validBrowseBtn.setObjectName("validBrowseBtn")
        self.ImagePathLabel = QtWidgets.QLabel(self.centralwidget)
        self.ImagePathLabel.setGeometry(QtCore.QRect(30, 110, 131, 20))
        self.ImagePathLabel.setObjectName("ImagePathLabel")
        self.TrainingPathLabel = QtWidgets.QLabel(self.centralwidget)
        self.TrainingPathLabel.setGeometry(QtCore.QRect(30, 200, 131, 20))
        self.TrainingPathLabel.setObjectName("TrainingPathLabel")
        self.ValdationPathLabel = QtWidgets.QLabel(self.centralwidget)
        self.ValdationPathLabel.setGeometry(QtCore.QRect(30, 290, 131, 20))
        self.ValdationPathLabel.setObjectName("ValdationPathLabel")
        self.TreesLabel = QtWidgets.QLabel(self.centralwidget)
        self.TreesLabel.setGeometry(QtCore.QRect(30, 400, 131, 20))
        self.TreesLabel.setObjectName("TreesLabel")
        self.ClassificationLabel = QtWidgets.QLabel(self.centralwidget)
        self.ClassificationLabel.setGeometry(QtCore.QRect(160, 10, 611, 61))
        font = QtGui.QFont()
        font.setPointSize(25)
        font.setBold(False)
        font.setWeight(50)
        self.ClassificationLabel.setFont(font)
        self.ClassificationLabel.setObjectName("ClassificationLabel")
        self.trainingAttributes = QtWidgets.QComboBox(self.centralwidget)
        self.trainingAttributes.setGeometry(QtCore.QRect(680, 240, 151, 31))
        self.trainingAttributes.setObjectName("trainingAttributes")
        self.validationAttributes = QtWidgets.QComboBox(self.centralwidget)
        self.validationAttributes.setGeometry(QtCore.QRect(680, 320, 151, 31))
        self.validationAttributes.setObjectName("validationAttributes")
        self.trainAttrBtn = QtWidgets.QPushButton(self.centralwidget)
        self.trainAttrBtn.setGeometry(QtCore.QRect(570, 240, 93, 28))
        self.trainAttrBtn.setObjectName("trainAttrBtn")
        self.valAttrBtn = QtWidgets.QPushButton(self.centralwidget)
        self.valAttrBtn.setGeometry(QtCore.QRect(570, 320, 93, 28))
        self.valAttrBtn.setObjectName("valAttrBtn")
        self.savePath = QtWidgets.QLineEdit(self.centralwidget)
        self.savePath.setGeometry(QtCore.QRect(20, 560, 321, 31))
        self.savePath.setObjectName("savePath")
        self.ReportPathLabel = QtWidgets.QLabel(self.centralwidget)
        self.ReportPathLabel.setGeometry(QtCore.QRect(20, 530, 131, 20))
        self.ReportPathLabel.setObjectName("ReportPathLabel")
        self.BrowsePath = QtWidgets.QPushButton(self.centralwidget)
        self.BrowsePath.setGeometry(QtCore.QRect(360, 560, 93, 31))
        self.BrowsePath.setObjectName("BrowsePath")
        self.runBtn = QtWidgets.QPushButton(self.centralwidget)
        self.runBtn.setGeometry(QtCore.QRect(710, 440, 121, 41))
        self.runBtn.setObjectName("runBtn")
        self.treesNo = QtWidgets.QLineEdit(self.centralwidget)
        self.treesNo.setGeometry(QtCore.QRect(20, 440, 131, 41))
        self.treesNo.setObjectName("treesNo")
        self.SaveBtn = QtWidgets.QRadioButton(self.centralwidget)
        self.SaveBtn.setGeometry(QtCore.QRect(600, 530, 93, 20))
        self.SaveBtn.setObjectName("SaveBtn")
        self.line = QtWidgets.QFrame(self.centralwidget)
        self.line.setGeometry(QtCore.QRect(10, 500, 1061, 16))
        self.line.setFrameShape(QtWidgets.QFrame.HLine)
        self.line.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.line.setObjectName("line")
        self.ProjectName = QtWidgets.QLineEdit(self.centralwidget)
        self.ProjectName.setGeometry(QtCore.QRect(20, 630, 221, 31))
        self.ProjectName.setObjectName("ReportName")
        self.ProjectNameLabel = QtWidgets.QLabel(self.centralwidget)
        self.ProjectNameLabel.setGeometry(QtCore.QRect(20, 610, 131, 20))
        self.ProjectNameLabel.setObjectName("ReportNameLabel")
        ClassificationWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(ClassificationWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 860, 26))
        self.menubar.setObjectName("menubar")
        ClassificationWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(ClassificationWindow)
        self.statusbar.setObjectName("statusbar")
        ClassificationWindow.setStatusBar(self.statusbar)

        self.treesNo.setText("500")

        self.validBrowseBtn.clicked.connect(self.openValidationDialog)
        self.trainBrowseBtn.clicked.connect(self.openTrainingDialog)
        self.imgBrowseBtn.clicked.connect(self.openImageDialog)
        self.trainAttrBtn.clicked.connect(self.Get_TrainAttribute)
        self.valAttrBtn.clicked.connect(self.Get_ValidationAttribute)

        self.SaveBtn.toggled.connect(self.SaveModel)
        self.BrowsePath.clicked.connect(self.BrowsePathDir)
        self.runBtn.clicked.connect(self.validateInput)

        self.retranslateUi(ClassificationWindow)
        QtCore.QMetaObject.connectSlotsByName(ClassificationWindow)

    def retranslateUi(self, ClassificationWindow):
        _translate = QtCore.QCoreApplication.translate
        ClassificationWindow.setWindowTitle(_translate("ClassificationWindow", "MainWindow"))
        self.imgBrowseBtn.setText(_translate("ClassificationWindow", "Browse"))
        self.trainBrowseBtn.setText(_translate("ClassificationWindow", "Browse"))
        self.validBrowseBtn.setText(_translate("ClassificationWindow", "Browse"))
        self.ImagePathLabel.setText(_translate("ClassificationWindow", "Image Path"))
        self.TrainingPathLabel.setText(_translate("ClassificationWindow", "Training Path"))
        self.ValdationPathLabel.setText(_translate("ClassificationWindow", "Validation Path"))
        self.TreesLabel.setText(_translate("ClassificationWindow", "Number of Trees"))
        self.ClassificationLabel.setText(_translate("ClassificationWindow", "Random Forrest Classification "))
        self.trainAttrBtn.setText(_translate("ClassificationWindow", "Get Attributes"))
        self.valAttrBtn.setText(_translate("ClassificationWindow", "Get Attributes"))
        self.ReportPathLabel.setText(_translate("ClassificationWindow", "Results Directory"))
        self.BrowsePath.setText(_translate("ClassificationWindow", "Browse"))
        self.runBtn.setText(_translate("ClassificationWindow", "Run"))
        self.SaveBtn.setText(_translate("ClassificationWindow", "Save Model"))
        self.ProjectNameLabel.setText(_translate("ClassificationWindow", "Project Name"))

    def openValidationDialog(self):
        filename = QFileDialog.getOpenFileName()
        self.validPath.setText(filename[0])
        self.input_C.set_validation_path(filename[0])

    def openTrainingDialog(self):
        filename = QFileDialog.getOpenFileName()
        self.trainPath.setText(filename[0])
        self.input_C.set_training_path(filename[0])

    def openImageDialog(self):
        filename = QFileDialog.getOpenFileName()
        self.imagePath.setText(filename[0])
        self.input_C.set_img_path(filename[0])

    def Get_TrainAttribute(self):
        if not self.trainPath.text().endswith(".shp"):
            msg = QMessageBox()
            msg.setIcon(QMessageBox.Information)
            msg.setWindowTitle("Wrong Selection")
            msg.setText("Please select correct file with .shp extension to get attributes. ")
            msg.exec_()
            return

        else:
            attlist = self.FindAttributes(self.trainPath.text())
            if(attlist):
                self.trainingAttributes.addItems(attlist)
            if not(attlist):
                msg = QMessageBox()
                msg.setIcon(QMessageBox.Information)
                msg.setWindowTitle("NO ATTRIBUTES FOUND")
                msg.setText("NO ATTRIBUTES FOUND IN .SHP FILE. ")
                msg.exec_()

    def Get_ValidationAttribute(self):
        if not self.validPath.text().endswith(".shp"):
            msg = QMessageBox()
            msg.setIcon(QMessageBox.Information)
            msg.setWindowTitle("Wrong Selection")
            msg.setText("Please select correct file with .shp extension to get attributes. ")
            msg.exec_()
            return
        else:
            attlist = self.FindAttributes(self.validPath.text())
            if (attlist):
                self.validationAttributes.addItems(attlist)
            if not (attlist):
                msg = QMessageBox()
                msg.setIcon(QMessageBox.Information)
                msg.setWindowTitle("NO ATTRIBUTES FOUND")
                msg.setText("NO ATTRIBUTES FOUND IN .SHP FILE. ")
                msg.exec_()

    def FindAttributes(self, filepath):
        return self.input_C.FindAttributes(filepath)
        # try:
        #     driver = ogr.GetDriverByName('ESRI Shapefile')
        #     shape_dataset = driver.Open(filepath)
        #     shape_layer = shape_dataset.GetLayer()
        #     field_names = [field.name for field in shape_layer.schema]
        #     return field_names
        # except ValueError as e:
        #     print(e)

    def loadImage(self):
        self.input_C.load_image_data()

    def BrowsePathDir(self):
        filename = QFileDialog.getExistingDirectory()
        self.savePath.setText(filename)

    # def BrowseReportPath(self):
    #     filename = QFileDialog.getExistingDirectory()
    #     self.ReportsavePath.setText(filename)

    # def BrowseImagePath(self):
    #     filename = QFileDialog.getExistingDirectory()
    #     self.ImgSavePath.setText(filename)

    def SaveModel(self):
        if self.SaveBtn.isChecked():
            self.saveModel = 1
            # self.ModelNameLabel.show()
            # self.ModelPathLabel.show()
            # self.BrowseMdlPath.show()
            # self.ModelSavePath.show()
            # self.ModelName.show()
        else:
            self.saveModel = 0
            # self.ModelNameLabel.hide()
            # self.ModelPathLabel.hide()
            # self.ModelSavePath.hide()
            # self.BrowseMdlPath.hide()
            # self.ModelName.hide()

    # def LoadValidationDialog(self):
    #     self.window = QtWidgets.QMainWindow()
    #     self.ui = Ui_ValidationDialog()
    #     self.ui.setupUi(self.window)
    #     # MainWindow.hide()
    #     self.window.show()


    def validateInput(self):

        msg = QMessageBox()
        msg.setIcon(QMessageBox.Information)
        msg.setWindowTitle("Validation Prompt")
        msg.setStandardButtons(QMessageBox.Ok | QMessageBox.Cancel)

        if not self.imagePath.text().endswith(".tif"):
            msg.setText("Invalid Image File. ")
            msg.setInformativeText("Invalid File Format")
            msg.setDetailedText("The details are as follows: Either Image file is not selected or does not contain .tif extension")
            msg.exec_()
            self.window = QtWidgets.QMainWindow()
            self.ui = Ui_ClassificationWindow()
            self.ui.setupUi(self.window)
            return

        if not self.trainPath.text().endswith(".shp"):
            msg.setText("Invalid Training Data File. ")
            msg.setInformativeText("Invalid File Format")
            msg.setDetailedText("The details are as follows: Either Training file is not selected or does not contain .shp extension")
            msg.exec_()
            self.window = QtWidgets.QMainWindow()
            self.ui = Ui_ClassificationWindow()
            self.ui.setupUi(self.window)
            return

        if not self.validPath.text().endswith(".shp"):
            msg.setText("Invalid Validation Data File. ")
            msg.setInformativeText("Invalid File Format")
            msg.setDetailedText("The details are as follows: Either Validation file is not selected or does not contain .shp extension")
            msg.exec_()
            self.window = QtWidgets.QMainWindow()
            self.ui = Ui_ClassificationWindow()
            self.ui.setupUi(self.window)
            return

        if self.validationAttributes.currentText() == "" or self.trainingAttributes.currentText() == "":
            msg.setText("Please select the attributes. ")
            msg.setInformativeText("Attribute not selected")
            msg.setDetailedText("The details are as follows: Select same attribute from Training and Validation File")
            msg.exec_()
            self.window = QtWidgets.QMainWindow()
            self.ui = Ui_ClassificationWindow()
            self.ui.setupUi(self.window)
            return

        if not self.validationAttributes.currentText() == "" or self.trainingAttributes.currentText() == "":
            if self.validationAttributes.currentText() != self.trainingAttributes.currentText():
                msg.setText("Invalid Data. ")
                msg.setInformativeText("Please see details for Error Message")
                msg.setDetailedText(
                    "The details are as follows: Select same attribute from Training and Validation File")
                msg.exec_()
                self.window = QtWidgets.QMainWindow()
                self.ui = Ui_ClassificationWindow()
                self.ui.setupUi(self.window)
                return

        if self.ProjectName.text() == "":
            msg.setText("Please enter a suitable name for your project. ")
            msg.setInformativeText("Project name missing")
            msg.exec_()
            self.window = QtWidgets.QMainWindow()
            self.ui = Ui_ClassificationWindow()
            self.ui.setupUi(self.window)
            return

        if self.savePath.text() == "":
            msg = QMessageBox()
            msg.setIcon(QMessageBox.Information)
            msg.setWindowTitle("Validation Prompt")
            msg.setStandardButtons(QMessageBox.Ok | QMessageBox.Cancel)

            msg.setText("Please select path for Results. ")
            msg.setInformativeText("Results path missing")
            msg.exec_()
            self.window = QtWidgets.QMainWindow()
            self.ui = Ui_ClassificationWindow()
            self.ui.setupUi(self.window)
            return

        # if self.ImgName.text() == "":
        #     msg.setText("Please enter a suitable name for Image result. ")
        #     msg.setInformativeText("Image name missing")
        #     msg.exec_()
        #     self.window = QtWidgets.QMainWindow()
        #     self.ui = Ui_ClassificationWindow()
        #     self.ui.setupUi(self.window)
        #     return
        #
        # if self.ImgSavePath.text() == "":
        #     msg.setText("Please select path for Image result. ")
        #     msg.setInformativeText("Image path missing")
        #     msg.exec_()
        #     self.window = QtWidgets.QMainWindow()
        #     self.ui = Ui_ClassificationWindow()
        #     self.ui.setupUi(self.window)
        #     return

        # if self.saveModel == 1 and (self.ModelName.text() == "" or self.ModelSavePath.text() == ""):
        #     msg.setText("Please enter name and Path for saving model. ")
        #     msg.setInformativeText("Either Model Name of Path not entered")
        #     msg.exec_()
        #     self.window = QtWidgets.QMainWindow()
        #     self.ui = Ui_ClassificationWindow()
        #     self.ui.setupUi(self.window)
        #     return

        else:
            self.Run()

    def Run(self):
        try:
            import sys, os
            try:
                ROOT_DIR = os.path.abspath(os.curdir)
                PROJ_DIR = ROOT_DIR + "\PROJ"
                os.environ['PROJ_LIB'] = PROJ_DIR

                if 'PROJ_LIB' in os.environ:
                    print('env variable : PROJ_LIB  set...')
                else:
                    print('Couldnt set env variable : PROJ_LIB.Please set Manually ')
            except Exception as ex:
                print("Could not set env_var")

            print("The process has started.... This will take few minutes")
            if self.treesNo.text() == "":
                trees = 100
            else:
                trees = int(self.treesNo.text())

            self.rf_C.set_RF_trees = trees

            print (self.savePath.text())
            dir_path = self.savePath.text()+"\\"+self.ProjectName.text()

            if os.path.isdir(dir_path):

                msg = QMessageBox()
                msg.setIcon(QMessageBox.Information)
                msg.setWindowTitle("Validation Prompt")
                msg.setStandardButtons(QMessageBox.Ok | QMessageBox.Cancel)
                msg.setText("A folder nammed "+ self.ProjectName.text()+" already exists. ")
                msg.setInformativeText("Please move the folder and try again")
                msg.exec_()
                self.window = QtWidgets.QMainWindow()
                self.ui = Ui_ClassificationWindow()
                self.ui.setupUi(self.window)
                return

            else:
                os.mkdir(dir_path)
        #
            doc_path = dir_path + "/" + str(self.ProjectName.text()) +"_REPORT.pdf"
            print(doc_path)
        #
            doc = self.rt.build_doc(doc_path,"Random Forrest Classification Report")
            LoadingImages = self.input_C.load_image_data()
            img_ds = LoadingImages[0]
            img = LoadingImages[1]
        #
        #
            self.input_C.set_training_attr(self.trainingAttributes.currentText())
            self.input_C.set_validation_attr(self.validationAttributes.currentText())

            TrainingData = self.input_C.load_train_data(img_ds,"Classification")  ## roi
            ValidationData = self.input_C.load_validation_data(img_ds)  ##roi_V

            classifier_output = self.rf_C.rf_classifier(img, img_ds, TrainingData, trees)

            model = classifier_output[0]
            importance = classifier_output[1]
            table_M = classifier_output[2]
            ob_score = classifier_output[3]


            if self.SaveBtn.isChecked() == True:
                model_path = dir_path
                model_path += "/" + str(self.ProjectName.text()) + "_MODEL.sav"
                self.rf_C.save_model(model, model_path)
            else:
                model_path = "Model not saved"

        #
            class_prediction = self.rf_C.rf_prediction(img, model)
            imgSavePath = dir_path
            imgSavePath += "/"+ (self.ProjectName.text())+"_IMG.tif"
            self.rf_C.save_result_image(img_ds, img, class_prediction, imgSavePath)

            doc = self.rt.Clf_prepare_report(doc, img, TrainingData, importance, table_M, trees, ob_score, class_prediction,
                                           ValidationData,self.trainingAttributes.currentText(),dir_path)

            doc = self.rf_C.validation_processing(ValidationData, class_prediction, TrainingData, doc,model_path,imgSavePath,dir_path)
            doc.save()
            msg = QMessageBox()
            msg.setIcon(QMessageBox.Information)
            msg.setWindowTitle("Complete!!!")
            msg.setText("Processing Done. Report ready to preview ")
            msg.exec_()

        except ValueError:
            logging.error("Exception occurred", exc_info=True)
            print("Classification Failed...")
Esempio n. 15
0
class Baller(Entity):
    def __init__(self, pos):
        Entity.__init__(self, pos, 0.5, 2)
        self.stats = Stats()
        self.input = InputController(self)
        self.motion = MotionController(self)
        self.action = ActionController(self)
        self.color = 0xAA0077
        self.net = -1

    def land(self, pos):
        def onGround(baller):
            # TODO: traveling
            baller.input.enable(True)
            baller.capsule.pos.y = 0

        self.motion.moveToPosition(pos, 0.5)
        self.motion.afterMoveDo(onGround)


    def jump(self, velocity):
        self.input.enable(False)

        pos = Vec3d(self.pos + velocity)
        duration = 0.5
        self.motion.moveToPosition(
            self.pos + AXIS_VECTORS[1] * self._getJumpHeight() + velocity * duration,
            duration)
        self.motion.afterMoveDo(lambda baller: self.land(pos))

    def _getJumpHeight(self):
        return 1.5


    def obtainBall(self):
        pass

    @property
    def hasBall(self):
        return self.game.ball.holder == self

    def draw(self, canvas, screenPos, scale):
        width = 50. * scale
        height = 100. * scale

        if not (0 < screenPos[0] < 700 and 0 < screenPos[1] < 400):
            screenPos.clamp((15, 685, 15, 400))
            width = 30
            height = 30
            pygame.draw.ellipse(canvas, self.color, (screenPos[0] - width / 2, screenPos[1] - height, width, height), 5)
            return


        shadowPos = self.game.camera.toScreen(Vec3d(self.pos.x, 0, self.pos.z))
        shadowWidth = 80. * scale
        shadowHeight = 30. * scale

        pygame.draw.ellipse(canvas, 0x000000, (shadowPos[0] - shadowWidth / 2, shadowPos[1] - shadowHeight / 2, shadowWidth, shadowHeight))
        pygame.draw.rect(canvas, self.color, (screenPos[0] - width / 2, screenPos[1] - height, width, height))

    def update(self, delta):
        self.input.update(delta)
        self.motion.update(delta)
Esempio n. 16
0
 def createInputController(self, Controller, InputReader):
     return InputController(
         InputReader,
         ExceptionHandler(InputReader.read, [GameResetException()],
                          Controller.reset))
Esempio n. 17
0
def fourier_series(input_: InputController, num_vectors: int = 500) -> FourierSeries:
    vectors: Dict[int, complex] = {}
    for n in range(-num_vectors, num_vectors + 1):
        vectors[n] = integral(lambda t: input_.input(t) * cmath.exp(-n * 2 * cmath.pi * 1j * t), input_.bounds(), 0.001)
    return FourierSeries(vectors)
  def __init__(self, glade_xml, model_factory, app):
                                                                                
    self.model_factory = model_factory
    
    self.main_win = app
    self.width = 0
    self.height = 0
    self.glade_xml = glade_xml

    ##Set up list structure
    self.treeview = self.glade_xml.get_widget('treeview1')
    self.treemodel = self.treeview.get_model()
    self.treemodel = gtk.TreeStore (gobject.TYPE_STRING,
                                    gobject.TYPE_INT,
                                    gobject.TYPE_STRING,
                                    gobject.TYPE_STRING,
                                    gobject.TYPE_PYOBJECT)
    self.treeview.set_model(self.treemodel)
    self.treeview.set_headers_visible(False)
    
    self.input_controller = InputController(self.reset_tree_model,
                                            self.treeview, 
                                            self.model_factory, 
                                            self.glade_xml)
    
    #Change Listener
    selection = self.treeview.get_selection()
    selection.connect('changed', self.on_tree_selection_changed)
    
    #self.treeview.connect('expand-collapse-cursor-row',self.on_row_expand_collapse)
    #self.treeview.connect('row-collapsed',self.on_row_expand_collapse)
    
    self.icon_ellipse_hashtable = {}
    
    renderer1 = gtk.CellRendererText()
    column1 = gtk.TreeViewColumn("Volumes",renderer1,markup=0)
    self.treeview.append_column(column1)
    
    
    #Time to set up draw area
    window1 = self.glade_xml.get_widget("drawingarea1")
    window1.set_size_request(700, 500)
    window2 = self.glade_xml.get_widget("drawingarea2")
    window2.set_size_request(700, 500)
    window3 = self.glade_xml.get_widget("drawingarea3")
    window3.set_size_request(700, 500)
    window4 = self.glade_xml.get_widget("drawingarea4")
    window4.set_size_request(700, 500)
    
    pr_upper = Properties_Renderer(window3, window3.window)
    #pr_lower = Properties_Renderer(window4, window4.window)
    self.display_view = DisplayView(self.input_controller.register_highlighted_sections, window1, pr_upper, None, None)
    #self.display_view = DisplayView(self.input_controller.register_highlighted_sections, window1, pr_upper, window2, pr_lower)
    
    self.glade_xml.get_widget('best_fit_button').connect('clicked', self.on_best_fit)
    self.glade_xml.get_widget('zoom_in_button').connect('clicked', self.on_zoom_in)
    self.glade_xml.get_widget('zoom_out_button').connect('clicked', self.on_zoom_out)
    self.glade_xml.get_widget('viewport1').connect('size-allocate', self.on_resize_drawing_area)
    self.on_best_fit(None)
    self.glade_xml.get_widget('zoom_box').set_sensitive(False)
    
    # set up mirror copy progress
    self.mirror_sync_progress = MirrorSyncProgress(self.glade_xml.get_widget('messages_vbox'))
    
    
    #############################
    ##Highly experimental
    self.box = self.glade_xml.get_widget('vbox12')
    self.uninit_panel = self.glade_xml.get_widget('uninit_panel')
    self.uninit_panel.hide()
    self.unalloc_panel = self.glade_xml.get_widget('unalloc_panel')
    self.unalloc_panel.hide()
    self.phys_vol_view_panel = self.glade_xml.get_widget('phys_vol_view_panel')
    self.phys_vol_view_panel.hide()
    self.log_vol_view_panel = self.glade_xml.get_widget('log_vol_view_panel')
    self.log_vol_view_panel.hide()
    self.on_rm_select_lvs_button = self.glade_xml.get_widget('on_rm_select_lvs')
    self.phys_panel = self.glade_xml.get_widget('phys_panel')
    self.phys_panel.hide()
    self.log_panel = self.glade_xml.get_widget('log_panel')
    self.log_panel.hide()
    
    self.prepare_tree()
    model = self.treeview.get_model()
    vgs = self.model_factory.get_VGs()
    if len(vgs) > 0:
        model.foreach(self.check_tree_items, [vgs[0].get_name()])
    else:
        unallocs = self.model_factory.query_unallocated()
        if len(unallocs) > 0:
            model.foreach(self.check_tree_items, ['', '', unallocs[0].get_path()])
        else:
            uninits = self.model_factory.query_uninitialized()
            if len(uninits) > 0:
                model.foreach(self.check_tree_items, ['', '', uninits[0].get_path()])
Esempio n. 19
0
class Ui_PLSRWindow(object):
    input_C = InputController()
    PLSR_C = PLSRController()
    rt = ReportModule()

    def setupUi(self, PLSR_Window):
        PLSR_Window.setObjectName("PLSR_Window")
        PLSR_Window.resize(886, 725)
        self.centralwidget = QtWidgets.QWidget(PLSR_Window)
        self.centralwidget.setObjectName("centralwidget")
        self.BrowsePath = QtWidgets.QPushButton(self.centralwidget)
        self.BrowsePath.setGeometry(QtCore.QRect(410, 480, 93, 31))
        self.BrowsePath.setObjectName("BrowsePath")
        self.TrainData_label = QtWidgets.QLabel(self.centralwidget)
        self.TrainData_label.setGeometry(QtCore.QRect(30, 250, 131, 20))
        self.TrainData_label.setObjectName("TrainData_label")
        self.ImgPth_Btn = QtWidgets.QPushButton(self.centralwidget)
        self.ImgPth_Btn.setGeometry(QtCore.QRect(390, 200, 93, 31))
        self.ImgPth_Btn.setObjectName("ImgPth_Btn")
        self.savePath = QtWidgets.QLineEdit(self.centralwidget)
        self.savePath.setGeometry(QtCore.QRect(50, 480, 321, 31))
        self.savePath.setObjectName("savePath")
        self.PathLabel = QtWidgets.QLabel(self.centralwidget)
        self.PathLabel.setGeometry(QtCore.QRect(50, 450, 131, 20))
        self.PathLabel.setObjectName("PathLabel")
        self.attr_btn = QtWidgets.QPushButton(self.centralwidget)
        self.attr_btn.setGeometry(QtCore.QRect(700, 230, 93, 31))
        self.attr_btn.setObjectName("attr_btn")
        self.line = QtWidgets.QFrame(self.centralwidget)
        self.line.setGeometry(QtCore.QRect(10, 390, 861, 16))
        self.line.setFrameShape(QtWidgets.QFrame.HLine)
        self.line.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.line.setObjectName("line")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setEnabled(True)
        self.label.setGeometry(QtCore.QRect(260, 30, 521, 61))
        font = QtGui.QFont()
        font.setPointSize(23)
        font.setBold(False)
        font.setWeight(50)
        self.label.setFont(font)
        self.label.setObjectName("label")
        self.ImgPath_label = QtWidgets.QLabel(self.centralwidget)
        self.ImgPath_label.setGeometry(QtCore.QRect(30, 170, 131, 20))
        self.ImgPath_label.setObjectName("ImgPath_label")
        self.SaveBtn = QtWidgets.QRadioButton(self.centralwidget)
        self.SaveBtn.setGeometry(QtCore.QRect(750, 460, 111, 21))
        self.SaveBtn.setObjectName("SaveBtn")
        self.tranPath_Btn = QtWidgets.QPushButton(self.centralwidget)
        self.tranPath_Btn.setGeometry(QtCore.QRect(390, 280, 93, 31))
        self.tranPath_Btn.setObjectName("tranPath_Btn")
        self.ReportNameLabel = QtWidgets.QLabel(self.centralwidget)
        self.ReportNameLabel.setGeometry(QtCore.QRect(50, 540, 131, 20))
        self.ReportNameLabel.setObjectName("ReportNameLabel")
        self.ImgPath = QtWidgets.QLineEdit(self.centralwidget)
        self.ImgPath.setGeometry(QtCore.QRect(30, 200, 311, 31))
        self.ImgPath.setObjectName("ImgPath")
        self.ProjectName = QtWidgets.QLineEdit(self.centralwidget)
        self.ProjectName.setGeometry(QtCore.QRect(50, 570, 221, 31))
        self.ProjectName.setObjectName("ProjectName")
        self.RunBtn = QtWidgets.QPushButton(self.centralwidget)
        self.RunBtn.setGeometry(QtCore.QRect(670, 310, 121, 41))
        self.RunBtn.setObjectName("RunBtn")
        self.tranData_Path = QtWidgets.QLineEdit(self.centralwidget)
        self.tranData_Path.setGeometry(QtCore.QRect(30, 280, 311, 31))
        self.tranData_Path.setObjectName("tranData_Path")
        self.attributes = QtWidgets.QComboBox(self.centralwidget)
        self.attributes.setGeometry(QtCore.QRect(640, 180, 151, 31))
        self.attributes.setObjectName("attributes")
        PLSR_Window.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(PLSR_Window)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 886, 26))
        self.menubar.setObjectName("menubar")
        PLSR_Window.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(PLSR_Window)
        self.statusbar.setObjectName("statusbar")
        PLSR_Window.setStatusBar(self.statusbar)

        self.ImgPth_Btn.clicked.connect(self.openImagePathDialog)
        self.attr_btn.clicked.connect(self.Get_TrainAttribute)
        self.tranPath_Btn.clicked.connect(self.openTrainingFileDialog)
        self.BrowsePath.clicked.connect(self.BrowsePathDir)
        self.RunBtn.clicked.connect(self.validateInput)

        self.retranslateUi(PLSR_Window)
        QtCore.QMetaObject.connectSlotsByName(PLSR_Window)

    def retranslateUi(self, PLSR_Window):
        _translate = QtCore.QCoreApplication.translate
        PLSR_Window.setWindowTitle(_translate("PLSR_Window", "PLSR_Window"))
        self.BrowsePath.setText(_translate("PLSR_Window", "Browse"))
        self.TrainData_label.setText(
            _translate("PLSR_Window", "Training Data Path"))
        self.ImgPth_Btn.setText(_translate("PLSR_Window", "Browse"))
        self.PathLabel.setText(_translate("PLSR_Window", "Results Directory"))
        self.attr_btn.setText(_translate("PLSR_Window", "Get attributes"))
        self.label.setText(_translate("PLSR_Window",
                                      "PLSR Regression - LOOCV"))
        self.ImgPath_label.setText(_translate("PLSR_Window", "Image Path"))
        self.SaveBtn.setText(_translate("PLSR_Window", "Save Model"))
        self.tranPath_Btn.setText(_translate("PLSR_Window", "Browse"))
        self.ReportNameLabel.setText(_translate("PLSR_Window", "Project Name"))
        self.RunBtn.setText(_translate("PLSR_Window", "Run"))

    def openImagePathDialog(self):
        filename = QFileDialog.getOpenFileName()
        self.ImgPath.setText(filename[0])
        self.input_C.set_img_path(filename[0])

    def openTrainingFileDialog(self):
        filename = QFileDialog.getOpenFileName()
        self.tranData_Path.setText(filename[0])
        self.input_C.set_training_path(filename[0])

    def Get_TrainAttribute(self):
        if not self.tranData_Path.text().endswith(".shp"):
            msg = QMessageBox()
            msg.setIcon(QMessageBox.Information)
            msg.setWindowTitle("Wrong Selection")
            msg.setText(
                "Please select correct file with .shp extension to get attributes. "
            )
            msg.exec_()
            return
        else:
            attlist = self.FindAttributes(self.tranData_Path.text())
            if (attlist):
                self.attributes.addItems(attlist)
            if not (attlist):
                msg = QMessageBox()
                msg.setIcon(QMessageBox.Information)
                msg.setWindowTitle("NO ATTRIBUTES FOUND")
                msg.setText("NO ATTRIBUTES FOUND IN .SHP FILE. ")
                msg.exec_()

    def FindAttributes(self, filepath):
        return self.input_C.FindAttributes(filepath)

    def BrowsePathDir(self):
        filename = QFileDialog.getExistingDirectory()
        self.savePath.setText(filename)

    def validateInput(self):

        msg = QMessageBox()
        msg.setIcon(QMessageBox.Information)
        msg.setWindowTitle("Validation Prompt")
        msg.setStandardButtons(QMessageBox.Ok | QMessageBox.Cancel)

        if not self.ImgPath.text().endswith(".tif"):
            msg.setText("Invalid Image File. ")
            msg.setInformativeText("Invalid File Format")
            msg.setDetailedText(
                "The details are as follows: Either Image file is not selected or does not contain .tif extension"
            )
            msg.exec_()
            self.window = QtWidgets.QMainWindow()
            self.ui = Ui_PLSRWindow()
            self.ui.setupUi(self.window)
            return

        if not self.tranData_Path.text().endswith(".shp"):
            msg.setText("Invalid Training Data File. ")
            msg.setInformativeText("Invalid File Format")
            msg.setDetailedText(
                "The details are as follows: Either Training file is not selected or does not contain .shp extension"
            )
            msg.exec_()
            self.window = QtWidgets.QMainWindow()
            self.ui = Ui_PLSRWindow()
            self.ui.setupUi(self.window)
            return

        if self.attributes.currentText() == "":
            msg.setText("Please select the attribute. ")
            msg.setInformativeText("Attribute not selected")
            msg.setDetailedText(
                "The details are as follows: Select attribute from Training File"
            )
            msg.exec_()
            self.window = QtWidgets.QMainWindow()
            self.ui = Ui_PLSRWindow()
            self.ui.setupUi(self.window)
            return

        if self.ProjectName.text() == "":
            msg.setText("Please enter a suitable name for your project. ")
            msg.setInformativeText("project name missing")
            msg.exec_()
            self.window = QtWidgets.QMainWindow()
            self.ui = Ui_PLSRWindow()
            self.ui.setupUi(self.window)
            return

        if self.savePath.text() == "":
            msg.setText("Please select path for project. ")
            msg.setInformativeText("project path missing")
            msg.exec_()
            self.window = QtWidgets.QMainWindow()
            self.ui = Ui_PLSRWindow()
            self.ui.setupUi(self.window)
            return

        else:
            self.Run()

    def Run(self):
        try:

            import sys, os
            try:
                ROOT_DIR = os.path.abspath(os.curdir)
                PROJ_DIR = ROOT_DIR + "\PROJ"
                os.environ['PROJ_LIB'] = PROJ_DIR

                if 'PROJ_LIB' in os.environ:
                    print('env variable : PROJ_LIB  set...')
                else:
                    print(
                        'Couldnt set env variable : PROJ_LIB.Please set Manually '
                    )
            except Exception as ex:
                print("Could not set env_var")

            log_format = "%(asctime)s::%(levelname)s::%(name)s::" \
                         "%(filename)s::%(lineno)d::%(message)s"

            logging.basicConfig(filename='app.log',
                                filemode='w',
                                level=logging.DEBUG,
                                format=log_format)
            print("The process has started.... This will take few minutes")
            print(self.savePath.text())
            dir_path = self.savePath.text() + "\\" + self.ProjectName.text()

            if os.path.isdir(dir_path):

                msg = QMessageBox()
                msg.setIcon(QMessageBox.Information)
                msg.setWindowTitle("Validation Prompt")
                msg.setStandardButtons(QMessageBox.Ok | QMessageBox.Cancel)

                msg.setText("A folder nammed " + self.ProjectName.text() +
                            " already exists. ")
                msg.setInformativeText("Please move the folder and try again")
                msg.exec_()
                self.window = QtWidgets.QMainWindow()
                self.ui = Ui_PLSRWindow()
                self.ui.setupUi(self.window)
                return

            else:
                os.mkdir(dir_path)

            reportpath = dir_path
            reportpath += "/" + str(self.ProjectName.text()) + "_REPORT.pdf"

            prediction_map = dir_path
            prediction_map += "/" + str(self.ProjectName.text()) + "_IMG.tif"
            if self.SaveBtn.isChecked() == True:
                modelsavepath = dir_path + "/" + self.ProjectName.text(
                ) + "_MODEL.sav"
            else:
                modelsavepath = "Model not saved"

            try:

                doc = self.rt.build_doc(reportpath, "PLSR Sparse Regression")

            except Exception as e:
                print(e)
                logging.debug("exception occurred " + e, exc_info=True)

            logging.debug("exception occurred", exc_info=True)

            loading_images = self.input_C.load_image_data()
            # print(LoadingImages)
            # print("Loading image ok")

            img_ds = loading_images[0]
            img = loading_images[1]

            # print(img_ds)
            # print("img_ds ok")

            # print(img)
            # print("img ok")

            print(self.attributes.currentText())
            self.input_C.set_training_attr(self.attributes.currentText())
            logging.debug("exception occurred", exc_info=True)

            # print(self.attributes.currentText() +" xxx OK")
            train_data = self.input_C.load_train_data(img_ds,
                                                      "Regression")  ## roi

            logging.debug("Exception occurred", exc_info=True)
            X = img[train_data > 0, :]

            # print("printing X")
            # print(X.shape)

            y = train_data[train_data > 0]
            logging.debug("Exception occurred", exc_info=True)
            # print("printing y")

            # print(y)

            # print("printing y---   ok")

            features = pd.DataFrame(X)
            logging.debug("Exception occurred", exc_info=True)

            band_names = []
            for i in range(X.shape[1]):
                # for i in range(0,2500):
                nband = "Band_" + str(i + 1)
                band_names.append(nband)
            features.columns = band_names

            print('The shape of our features is:', features.shape)
            print('The number of Spectra is:', features.shape[0])
            print('The number of bands is:', features.shape[1])

            # print("........................ ok here ...................")
            features['value'] = y

            features.head()

            # print('features.....')
            # print(features)
            logging.debug("Exception occurred", exc_info=True)

            # Labels are the values we want to predict
            labels = np.array(features['value'])

            # Remove the labels from the features
            # axis 1 refers to the columns
            features = features.drop('value', axis=1)

            # Saving feature names for later use
            feature_list = list(features.columns)

            # Convert to numpy array
            features = np.array(features)

            print('Training Features Shape: ', features.shape)
            print('Training Labels Shape: ', labels.shape)

            try:
                pls_opt, mse, msemin, component, y, y_c, y_cv, score_c, score_cv = self.PLSR_C.PLSR_Regressor(
                    features, X, y)
                # print(traceback.print_exc())

            except Exception as e:
                print(traceback.print_exc())
                logging.debug("exception occurred", exc_info=True)
                logging.debug(traceback.print_exc())
                print("regressor error")
                print(e)

            logging.exception("Exception occurred", exc_info=True)
            #print("......ok ....... regressor done")

            importance = self.PLSR_C.PLSR_vip(pls_opt)
            logging.error("Exception occurred", exc_info=True)
            cols, rows, doc, prediction, prediction_ = self.PLSR_C.PLSR_Predict(
                doc, score_cv, importance, img, y_c, y, y_cv, labels, pls_opt)
            logging.error("Exception occurred", exc_info=True)
            importance = self.PLSR_C.PLSR_vip(pls_opt)
            logging.error("Exception occurred", exc_info=True)

            self.PLSR_C.PLSR_SaveImage(prediction_map, img, img_ds, prediction)
            logging.error("Exception occurred", exc_info=True)

            if self.SaveBtn.isChecked() == True:
                self.PLSR_C.PLSR_SaveModel(pls_opt, modelsavepath)
                logging.error("Exception occurred", exc_info=True)

            rp_param = PLSRHelper(train_data, X, mse, msemin,
                                  component, y, y_c, y_cv,
                                  self.attributes.currentText(), importance,
                                  prediction, dir_path, reportpath,
                                  prediction_map, modelsavepath,
                                  self.ImgPath.text(),
                                  self.tranData_Path.text())

            doc = self.rt.make_plsr_report(doc, img, dir_path, rp_param)

            logging.error("Exception occurred", exc_info=True)
            doc.save()
            msg = QMessageBox()
            msg.setIcon(QMessageBox.Information)
            msg.setWindowTitle("Complete!!!")
            msg.setText("Processing Done. Report ready to preview ")
            msg.exec_()

        except TypeError as e:
            logging.exception("Exception occurred", exc_info=True)
            print(e)
            sys.exit(0)
Esempio n. 20
0
class Volume_Tab_View:
    def __init__(self, glade_xml, model_factory, app):

        self.model_factory = model_factory

        self.main_win = app
        self.width = 0
        self.height = 0
        self.glade_xml = glade_xml

        self.try_not_best_fit = True

        ##Set up list structure
        self.treeview = self.glade_xml.get_widget('treeview1')
        self.treemodel = self.treeview.get_model()
        self.treemodel = gtk.TreeStore(gobject.TYPE_STRING, gobject.TYPE_INT,
                                       gobject.TYPE_STRING,
                                       gobject.TYPE_STRING,
                                       gobject.TYPE_PYOBJECT)
        self.treeview.set_model(self.treemodel)
        self.treeview.set_headers_visible(False)

        self.input_controller = InputController(self.reset_tree_model,
                                                self.treeview,
                                                self.model_factory,
                                                self.glade_xml)

        #Change Listener
        selection = self.treeview.get_selection()
        selection.connect('changed', self.on_tree_selection_changed)

        #self.treeview.connect('expand-collapse-cursor-row',self.on_row_expand_collapse)
        #self.treeview.connect('row-collapsed',self.on_row_expand_collapse)

        self.icon_ellipse_hashtable = {}

        renderer1 = gtk.CellRendererText()
        column1 = gtk.TreeViewColumn("Volumes", renderer1, markup=0)
        self.treeview.append_column(column1)

        #Time to set up draw area
        window1 = self.glade_xml.get_widget("drawingarea1")
        window1.set_size_request(700, 500)
        window2 = self.glade_xml.get_widget("drawingarea2")
        window2.set_size_request(700, 500)
        window3 = self.glade_xml.get_widget("drawingarea3")
        window3.set_size_request(700, 500)
        window4 = self.glade_xml.get_widget("drawingarea4")
        window4.set_size_request(700, 500)

        pr_upper = Properties_Renderer(window3, window3.window)
        #pr_lower = Properties_Renderer(window4, window4.window)
        self.display_view = DisplayView(
            self.input_controller.register_highlighted_sections, window1,
            pr_upper, None, None)
        #self.display_view = DisplayView(self.input_controller.register_highlighted_sections, window1, pr_upper, window2, pr_lower)

        self.glade_xml.get_widget('best_fit_button').connect(
            'clicked', self.on_best_fit)
        self.glade_xml.get_widget('zoom_in_button').connect(
            'clicked', self.on_zoom_in)
        self.glade_xml.get_widget('zoom_out_button').connect(
            'clicked', self.on_zoom_out)
        self.glade_xml.get_widget('viewport1').connect(
            'size-allocate', self.on_resize_drawing_area)
        self.on_best_fit(None)
        self.glade_xml.get_widget('zoom_box').set_sensitive(False)

        # set up mirror copy progress
        self.mirror_sync_progress = MirrorSyncProgress(
            self.glade_xml.get_widget('messages_vbox'))

        #############################
        ##Highly experimental
        self.box = self.glade_xml.get_widget('vbox12')
        self.uninit_panel = self.glade_xml.get_widget('uninit_panel')
        self.uninit_panel.hide()
        self.unalloc_panel = self.glade_xml.get_widget('unalloc_panel')
        self.unalloc_panel.hide()
        self.phys_vol_view_panel = self.glade_xml.get_widget(
            'phys_vol_view_panel')
        self.phys_vol_view_panel.hide()
        self.log_vol_view_panel = self.glade_xml.get_widget(
            'log_vol_view_panel')
        self.log_vol_view_panel.hide()
        self.on_rm_select_lvs_button = self.glade_xml.get_widget(
            'on_rm_select_lvs')
        self.phys_panel = self.glade_xml.get_widget('phys_panel')
        self.phys_panel.hide()
        self.log_panel = self.glade_xml.get_widget('log_panel')
        self.log_panel.hide()

        self.prepare_tree()
        model = self.treeview.get_model()
        vgs = self.model_factory.get_VGs()
        if len(vgs) > 0:
            model.foreach(self.check_tree_items, [vgs[0].get_name()])

            lvs_count = 0
            for vg in vgs:
                lvs_count += len(vg.lvs)
            if (lvs_count < MAX_LV_FOR_BESTFIT):
                self.try_not_best_fit = False
            else:
                self.glade_xml.get_widget('best_fit_button').set_sensitive(
                    False)
        else:
            unallocs = self.model_factory.query_unallocated()
            if len(unallocs) > 0:
                model.foreach(self.check_tree_items,
                              ['', '', unallocs[0].get_path()])
            else:
                uninits = self.model_factory.query_uninitialized()
                if len(uninits) > 0:
                    model.foreach(self.check_tree_items,
                                  ['', '', uninits[0].get_path()])

    # format is [vgname, lvpath, pvpath] - put '' if none
    def reset_tree_model(self, *in_args):
        self.prepare_tree()

        args = []
        for arg in in_args:
            args.append(arg)
        model = self.treeview.get_model()
        model.foreach(self.check_tree_items, args)

    def check_tree_items(self, model, path, iter, *args):
        # return True to stop foreach, False to continue

        if len(args) == 0:
            return True  # don't go any further
        args_internal = []
        for arg in args[0]:
            args_internal.append(arg)
        while len(args_internal) < 3:
            args_internal.append('')
        vgname = args_internal[0]
        lvpath = args_internal[1]
        pvpath = args_internal[2]

        selection = self.treeview.get_selection()
        type = model.get_value(iter, TYPE_COL)
        if type == VG_PHYS_TYPE:
            if vgname != '' and lvpath == '' and pvpath != '':
                vg = model.get_value(iter, OBJ_COL)
                if vgname == vg.get_name():
                    self.treeview.expand_to_path(path)
                    selection.select_path(path)
                    return True
        elif type == VG_LOG_TYPE:
            if vgname != '' and lvpath != '' and pvpath == '':
                vg = model.get_value(iter, OBJ_COL)
                if vgname == vg.get_name():
                    self.treeview.expand_to_path(path)
                    selection.select_path(path)
                    return True
        elif type == VG_TYPE:
            if vgname != '' and lvpath == '' and pvpath == '':
                vg = model.get_value(iter, OBJ_COL)
                if vgname == vg.get_name():
                    self.treeview.expand_to_path(path)
                    selection.select_path(path)
                    return True
        elif type == LOG_TYPE:
            if vgname == '' and lvpath != '' and pvpath == '':
                lv = model.get_value(iter, OBJ_COL)
                if lvpath == lv.get_path():
                    self.treeview.expand_to_path(path)
                    selection.select_path(path)
                    return True
        elif type == PHYS_TYPE or type == UNALLOCATED_TYPE or type == UNINITIALIZED_TYPE:
            if vgname == '' and lvpath == '' and pvpath != '':
                pv = model.get_value(iter, OBJ_COL)
                if pvpath in pv.get_paths():
                    self.treeview.expand_to_path(path)
                    selection.select_path(path)
                    return True
        return False

    def prepare_tree(self):
        treemodel = self.treeview.get_model()
        treemodel.clear()

        self.model_factory.reload()
        self.mirror_sync_progress.initiate()

        vg_list = self.model_factory.get_VGs()
        if len(vg_list) > 0:
            vg_iter = treemodel.append(None)
            vg_string = "<span size=\"11000\"><b>" + VOLUME_GROUPS + "</b></span>"
            treemodel.set(vg_iter, NAME_COL, vg_string, TYPE_COL,
                          UNSELECTABLE_TYPE)
            self.__sort_list_by_get_name_fcn(vg_list)
            for vg in vg_list:
                vg_child_iter = treemodel.append(vg_iter)
                vg_name = vg.get_name()
                vg_name_marked = vg_name
                if vg.clustered():
                    vg_name_marked += '<span foreground="#FF00FF">   (' + _(
                        'Clustered VG') + ')</span>'
                treemodel.set(vg_child_iter, NAME_COL, vg_name_marked,
                              TYPE_COL, VG_TYPE, OBJ_COL, vg)
                phys_iter = treemodel.append(vg_child_iter)
                log_iter = treemodel.append(vg_child_iter)
                pview_string = "<span foreground=\"#ED1C2A\"><i>  " + PHYSICAL_VIEW + "</i></span>"
                treemodel.set(phys_iter, NAME_COL, pview_string, TYPE_COL,
                              VG_PHYS_TYPE, PATH_COL, vg_name, OBJ_COL, vg)
                lview_string = "<span foreground=\"#43ACF6\"><i>  " + LOGICAL_VIEW + "</i></span>"
                treemodel.set(log_iter, NAME_COL, lview_string, TYPE_COL,
                              VG_LOG_TYPE, PATH_COL, vg_name, OBJ_COL, vg)

                pv_list = vg.get_pvs().values()
                grouped_dir, ungrouped_list = self.__group_by_device(pv_list)
                grouped_dir_sorted = grouped_dir.keys()
                grouped_dir_sorted.sort()
                for main_dev in grouped_dir_sorted:
                    dev_iter = treemodel.append(phys_iter)
                    pvs = grouped_dir[main_dev]
                    devnames = pvs[0].getDevnames()
                    devnames_str = devnames[0]
                    for devname in devnames[1:]:
                        devnames_str = devnames_str + ', ' + devname
                    if len(devnames) > 1:
                        devnames_str = str(
                            pvs[0].getMultipath()) + ' [' + devnames_str + ']'
                    treemodel.set(dev_iter, NAME_COL, devnames_str, TYPE_COL,
                                  UNSELECTABLE_TYPE)
                    for pv in pvs:
                        iter = treemodel.append(dev_iter)
                        phys_string = "<span foreground=\"#ED1C2A\">" + pv.get_name(
                        ) + "</span>"
                        treemodel.set(iter, NAME_COL, phys_string,
                                      TYPE_COL, PHYS_TYPE, PATH_COL,
                                      pv.get_path(), OBJ_COL, pv)
                for pv in ungrouped_list:
                    iter = treemodel.append(phys_iter)
                    phys_string = "<span foreground=\"#ED1C2A\">" + pv.get_name(
                    ) + "</span>"
                    treemodel.set(iter, NAME_COL,
                                  phys_string, TYPE_COL, PHYS_TYPE, PATH_COL,
                                  pv.get_path(), OBJ_COL, pv)

                lv_list = vg.get_lvs().values()
                self.__sort_list_by_get_name_fcn(lv_list)
                for lv in lv_list:
                    if lv.is_used():
                        iter = treemodel.append(log_iter)
                        log_string = "<span foreground=\"#43ACF6\">" + lv.get_name(
                        ) + "</span>"
                        treemodel.set(iter, NAME_COL, log_string,
                                      TYPE_COL, LOG_TYPE, PATH_COL,
                                      lv.get_path(), SIMPLE_LV_NAME_COL,
                                      lv.get_name(), OBJ_COL, lv)

                #Expand if there are entries
                self.treeview.expand_row(treemodel.get_path(vg_iter), False)

        unalloc_list = self.model_factory.query_unallocated()
        if len(unalloc_list) > 0:
            unallocated_iter = treemodel.append(None)
            unalloc_string = "<span size=\"11000\"><b>" + UNALLOCATED_VOLUMES + "</b></span>"
            treemodel.set(unallocated_iter, NAME_COL, unalloc_string, TYPE_COL,
                          UNSELECTABLE_TYPE)
            grouped_dir, ungrouped_list = self.__group_by_device(unalloc_list)
            grouped_dir_sorted = grouped_dir.keys()
            grouped_dir_sorted.sort()
            for main_dev in grouped_dir_sorted:
                dev_iter = treemodel.append(unallocated_iter)
                pvs = grouped_dir[main_dev]
                devnames = pvs[0].getDevnames()
                devnames_str = devnames[0]
                for devname in devnames[1:]:
                    devnames_str = devnames_str + ', ' + devname
                if len(devnames) > 1:
                    devnames_str = str(
                        pvs[0].getMultipath()) + ' [' + devnames_str + ']'
                treemodel.set(dev_iter, NAME_COL, devnames_str, TYPE_COL,
                              UNSELECTABLE_TYPE)
                for pv in pvs:
                    iter = treemodel.append(dev_iter)
                    phys_string = "<span foreground=\"#ED1C2A\">" + pv.get_name(
                    ) + "</span>"
                    treemodel.set(iter, NAME_COL, phys_string,
                                  TYPE_COL, UNALLOCATED_TYPE, PATH_COL,
                                  pv.get_path(), OBJ_COL, pv)
            for pv in ungrouped_list:
                iter = treemodel.append(unallocated_iter)
                phys_string = "<span foreground=\"#ED1C2A\">" + pv.get_path(
                ) + "</span>"
                treemodel.set(iter, NAME_COL, phys_string,
                              TYPE_COL, UNALLOCATED_TYPE, PATH_COL,
                              pv.get_path(), OBJ_COL, pv)

        uninit_list = self.model_factory.query_uninitialized()
        if len(uninit_list) > 0:
            uninitialized_iter = treemodel.append(None)
            uninit_string = "<span size=\"11000\"><b>" + UNINITIALIZED_ENTITIES + "</b></span>"
            treemodel.set(uninitialized_iter, NAME_COL, uninit_string,
                          TYPE_COL, UNSELECTABLE_TYPE)
            grouped_dir, ungrouped_list = self.__group_by_device(uninit_list)
            grouped_dir_sorted = grouped_dir.keys()
            grouped_dir_sorted.sort()
            for main_dev in grouped_dir_sorted:
                dev_iter = treemodel.append(uninitialized_iter)
                pvs = grouped_dir[main_dev]
                devnames = pvs[0].getDevnames()
                devnames_str = devnames[0]
                for devname in devnames[1:]:
                    devnames_str = devnames_str + ', ' + devname
                if len(devnames) > 1:
                    devnames_str = str(
                        pvs[0].getMultipath()) + ' [' + devnames_str + ']'
                treemodel.set(dev_iter, NAME_COL, devnames_str, TYPE_COL,
                              UNSELECTABLE_TYPE)
                for pv in grouped_dir[main_dev]:
                    iter = treemodel.append(dev_iter)
                    treemodel.set(iter, NAME_COL, pv.get_name(),
                                  TYPE_COL, UNINITIALIZED_TYPE, PATH_COL,
                                  pv.get_path(), OBJ_COL, pv)
            for pv in ungrouped_list:
                iter = treemodel.append(uninitialized_iter)
                treemodel.set(iter, NAME_COL, pv.get_path(),
                              TYPE_COL, UNINITIALIZED_TYPE, PATH_COL,
                              pv.get_path(), OBJ_COL, pv)

        #self.treeview.expand_all()
        self.clear_all_buttonpanels()

    # returns {main_dev : [pv1, pv2, ...], ...}
    def __group_by_device(self, pvlist):
        grouped = {}
        ungrouped = []
        for pv in pvlist:
            if len(pv.getDevnames()) == 0 or pv.wholeDevice():
                ungrouped.append(pv)
                continue
            if pv.getDevnames()[0] in grouped.keys():
                grouped[pv.getDevnames()[0]].append(pv)
            else:
                grouped[pv.getDevnames()[0]] = [pv]

        # sort lists
        for main_dev in grouped:
            self.__sort_list_by_get_name_fcn(grouped[main_dev])
        self.__sort_list_by_get_name_fcn(ungrouped)
        return grouped, ungrouped

    def __sort_list_by_get_name_fcn(self, some_list):
        d = {}
        l = []
        while len(some_list) != 0:
            o = some_list.pop()
            name = o.get_name()
            if name in d:
                d[name].append(o)
            else:
                d[name] = [o]
                l.append(name)
        l.sort()
        for name in l:
            for o in d[name]:
                some_list.append(o)
        return some_list

    def on_tree_selection_changed(self, *args):
        selection = self.treeview.get_selection()
        model, iter = selection.get_selected()
        if iter == None:
            self.glade_xml.get_widget('zoom_box').set_sensitive(False)
            self.display_view.render_no_selection()
            self.display_view.draw()
            return

        treepath = model.get_path(iter)
        self.treeview.expand_row(treepath, False)

        type = model.get_value(iter, TYPE_COL)
        if type == VG_PHYS_TYPE:
            self.input_controller.clear_highlighted_sections()
            self.clear_all_buttonpanels()
            self.phys_vol_view_panel.show()

            vg = model.get_value(iter, OBJ_COL)
            pv_list = vg.get_pvs().values()
            self.display_view.render_pvs(pv_list)
            self.on_best_fit(None)
            self.glade_xml.get_widget('zoom_box').set_sensitive(True)
        elif type == VG_LOG_TYPE:
            self.input_controller.clear_highlighted_sections()
            self.clear_all_buttonpanels()

            vg = model.get_value(iter, OBJ_COL)
            lv_list = vg.get_lvs().values()
            self.show_log_vol_view_panel(lv_list)
            self.display_view.render_lvs(lv_list)
            self.on_best_fit(None)
            self.glade_xml.get_widget('zoom_box').set_sensitive(True)
        elif type == VG_TYPE:
            self.clear_all_buttonpanels()
            self.input_controller.clear_highlighted_sections()

            vg = model.get_value(iter, OBJ_COL)
            try:
                self.display_view.render_vg(vg)
                self.on_best_fit(None)
                self.glade_xml.get_widget('zoom_box').set_sensitive(True)
            except:
                print "Unable to show VG because it contains features that are not supported in current version of system-config-lvm"
        elif type == LOG_TYPE:
            self.input_controller.clear_highlighted_sections()
            self.clear_all_buttonpanels()
            self.log_panel.show()

            lv = model.get_value(iter, OBJ_COL)
            self.display_view.render_lv(lv)
            self.on_best_fit(None)
            self.glade_xml.get_widget('zoom_box').set_sensitive(False)
        elif type == PHYS_TYPE:
            self.input_controller.clear_highlighted_sections()
            self.clear_all_buttonpanels()
            self.phys_panel.show()

            pv = model.get_value(iter, OBJ_COL)
            self.display_view.render_pv(pv)
            self.on_best_fit(None)
            self.glade_xml.get_widget('zoom_box').set_sensitive(True)
        elif type == UNALLOCATED_TYPE:
            self.input_controller.clear_highlighted_sections()
            self.clear_all_buttonpanels()
            self.unalloc_panel.show()

            pv = model.get_value(iter, OBJ_COL)
            self.display_view.render_unalloc_pv(pv)
            self.on_best_fit(None)
            self.glade_xml.get_widget('zoom_box').set_sensitive(False)
        elif type == UNINITIALIZED_TYPE:
            self.input_controller.clear_highlighted_sections()
            self.clear_all_buttonpanels()
            button = self.input_controller.init_entity_button

            uv = model.get_value(iter, OBJ_COL)
            if uv.initializable:
                button.set_sensitive(True)
            else:
                button.set_sensitive(False)
            self.uninit_panel.show()
            self.display_view.render_uninit_pv(uv)
            self.on_best_fit(None)
            self.glade_xml.get_widget('zoom_box').set_sensitive(False)
        else:
            self.input_controller.clear_highlighted_sections()
            self.clear_all_buttonpanels()
            self.display_view.render_no_selection()
            self.display_view.draw()
            self.glade_xml.get_widget('zoom_box').set_sensitive(False)

    def on_row_expand_collapse(self, treeview, logical, expand, openall,
                               *params):
        treeview.get_model()
        selection = treeview.get_selection()
        model, iter = selection.get_selected()
        #    if model.iter_parent(iter) == None:  #Top level
        return True


#    else:
#    return False

    def show_log_vol_view_panel(self, lv_list):
        #This is a wrapper for self.log_vol_view_panel.show()
        #If the VG has no LVs, then a proxy LV is returned as an 'Unused' LV.
        #We do not want to allow the deletion of this unused LV.
        #So we'll gray out the button.
        self.on_rm_select_lvs_button.set_sensitive(True)
        if len(lv_list) == 1:
            if lv_list[0].is_used() == False:
                self.on_rm_select_lvs_button.set_sensitive(False)
        self.log_vol_view_panel.show()

    def clear_all_buttonpanels(self):
        self.unalloc_panel.hide()
        self.uninit_panel.hide()
        self.log_vol_view_panel.hide()
        self.phys_vol_view_panel.hide()
        self.log_panel.hide()
        self.phys_panel.hide()

    def on_best_fit(self, obj):
        if (self.try_not_best_fit == True):
            if self.display_view.display != None:
                self.display_view.display.respect_smallest_selectable_width(
                    False)
            return

        self.on_resize_drawing_area(None, None)
        self.__set_zoom_buttons(
            self.display_view.set_best_fit(self.try_not_best_fit))
        self.display_view.draw()

    def on_zoom_in(self, obj):
        self.__set_zoom_buttons(self.display_view.zoom_in())
        self.display_view.draw()

    def on_zoom_out(self, obj):
        self.__set_zoom_buttons(self.display_view.zoom_out())
        self.display_view.draw()

    def __set_zoom_buttons(self, (z_in, z_out)):
        if z_in:
            self.glade_xml.get_widget('zoom_in_button').set_sensitive(True)
        else:
            self.glade_xml.get_widget('zoom_in_button').set_sensitive(False)
        if z_out:
            self.glade_xml.get_widget('zoom_out_button').set_sensitive(True)
        else:
            self.glade_xml.get_widget('zoom_out_button').set_sensitive(False)
Esempio n. 21
0
class MainController:
    def __init__(self):
        self.input_controller = InputController()
        self.original_formulas_file = sys.argv[1]
        self.researched_formulas_file = sys.argv[2]
        self.optimized_original_file = sys.argv[3]
        self.optimized_researched_file = sys.argv[4]
        self.result_of_testing_original_file = sys.argv[5]
        self.result_of_testing_researched_file = sys.argv[6]
        self.analyzer_results = sys.argv[7]

    def start(self):

        self.input_controller.fault_tolerance_request()
        self.input_controller.initial_groups_request()
        self.input_controller.blocked_vector_request()

        tested_faults = len(max(self.input_controller.initial_groups, key=len))

        processors = Processors(self.input_controller.initial_groups)
        generator = FormulasGenerator(processors,
                                      self.input_controller.fault_tolerance)
        selector = Selector(self.input_controller.blocked_vectors)
        tester = PrTester(processors)
        blocker = Blocker(self.input_controller.blocked_vectors, tester,
                          selector, processors)
        '''
            For original formulas
        '''
        generator.generate(self.input_controller.initial_groups,
                           self.original_formulas_file)
        optimizer_original = Optimizer(self.input_controller.fault_tolerance,
                                       processors,
                                       self.optimized_original_file)
        optimizer_original.optimize(generator.origin_formulas_arr)
        blocking_original_formulas = blocker.block_original(
            selector.select_group(optimizer_original.result_formulas))
        tester.test(self.result_of_testing_original_file,
                    blocking_original_formulas, tested_faults,
                    self.input_controller.fault_tolerance)
        '''
            For researched formulas
        '''
        self.input_controller.researched_way_request()
        if self.input_controller.researched_way:

            generator.generate(
                processors.form_groups_according_to_blocked_vector(
                    self.input_controller.blocked_vectors),
                self.researched_formulas_file)
            optimizer_researched = Optimizer(
                self.input_controller.fault_tolerance, processors,
                self.optimized_researched_file)
            optimizer_researched.optimize(generator.origin_formulas_arr)
            #selector.select_group(optimizer_researched.result_formulas)
            blocking_researched_formulas = blocker.block_researched(
                selector.select_group(optimizer_researched.result_formulas))
            tester.test(self.result_of_testing_researched_file,
                        blocking_researched_formulas, tested_faults,
                        self.input_controller.fault_tolerance)

        self.input_controller.repeat_request()

        return self.input_controller.repeat
Esempio n. 22
0
 def __init__(self, owner):
     InputController.__init__(self, owner)
     self.turn = 0
Esempio n. 23
0
 def __init__(self, controller_spec, keyboard_layout):
     InputController.__init__(self, controller_spec)
     self.setup_key_listeners(keyboard_layout)