Changeset 10721:99d22150267d in orange


Ignore:
Timestamp:
04/03/12 16:41:05 (2 years ago)
Author:
mstajdohar
Branch:
default
Message:

Fixes segfault on deleting nodes.

Files:
2 edited

Legend:

Unmodified
Added
Removed
  • Orange/OrangeWidgets/Unsupervised/OWPubmedView.py

    r10720 r10721  
    44<icon>icons/Network.png</icon> 
    55<contact></contact>  
    6 <priority>6450</priority> 
     6<priority>6470</priority> 
    77""" 
    88 
     
    1616     
    1717    """ 
    18      
     18 
    1919    def __init__(self, parent): 
    2020        Orange.network.NxView.__init__(self) 
    21          
     21 
    2222        self._nhops = 2 
    2323        self._edge_threshold = 0.5 
     
    2929        self._k_algorithm = 0.3 
    3030        self._delta_score = {} 
    31          
     31 
    3232    def init_network(self, graph): 
    3333        self._network = graph 
    34          
     34 
    3535        if hasattr(self.parent, 'init_network'): 
    3636            self.parent.init_network() 
     
    3838        if graph is None: 
    3939            return None 
    40                        
     40 
    4141        return graph 
    42          
    43      
    44     def update_network(self):     
     42 
     43 
     44    def update_network(self): 
    4545        if self._center_nodes == []: 
    4646            return 
    47          
     47 
    4848        subnet = Orange.network.Graph() 
    4949        central_nodes, to_add = self._center_nodes[:], self._center_nodes[:] 
     
    6161            i = nodes.pop() 
    6262            subnet.node[i] = self._network.node[i] 
    63             neig = [x for x in self._network.neighbors(i) if x in nodes]  
    64             subnet.add_weighted_edges_from([(i,x,w) for x,w in zip(neig, [self._network.edge[i][y]['weight'] for y in neig])]) 
    65          
     63            neig = [x for x in self._network.neighbors(i) if x in nodes] 
     64            subnet.add_weighted_edges_from([(i, x, w) for x, w in zip(neig, [self._network.edge[i][y]['weight'] for y in neig])]) 
     65 
    6666        subnet.remove_nodes_from(self._hidden_nodes) 
    6767        subnet = self._propagate(subnet) 
    68          
     68 
    6969        if self._nx_explorer is not None: 
    70             self._nx_explorer.change_graph(subnet)        
    71          
     70            self._nx_explorer.change_graph(subnet) 
     71 
    7272    def set_nhops(self, nhops): 
    73         self._nhops = nhops   
    74          
     73        self._nhops = nhops 
     74 
    7575    def set_edge_threshold(self, edge_threshold): 
    7676        self._edge_threshold = edge_threshold 
     
    7878    def set_algorithm(self, algorithm): 
    7979        self._algorithm = algorithm 
    80          
     80 
    8181    def set_n_max_neighbors(self, n_max_neighbors): 
    82         self._n_max_neighbors = n_max_neighbors  
    83          
     82        self._n_max_neighbors = n_max_neighbors 
     83 
    8484    def set_center_nodes(self, c_nodes): 
    8585        self._center_nodes = c_nodes 
    86          
     86 
    8787    def set_k(self, k): 
    8888        self._k_algorithm = k 
    89      
     89 
    9090    def node_selection_changed(self): 
    9191        pass 
    92      
     92 
    9393    def set_user_node_score(self, node_index, new_score): 
    9494        self._delta_score[node_index] = new_score - self._network.node[node_index]['score'] 
    9595        self._network.node[node_index]['score'] = new_score 
    9696        self._network.node[node_index]['user_score'] = 1 
    97      
     97 
    9898    def update_center_nodes(self, new_node): 
    99         self._center_nodes.append(new_node)   
    100          
     99        self._center_nodes.append(new_node) 
     100 
    101101    def _get_neighbors(self): 
    102102    #TO DELETE? 
     
    108108            nodes.update(neighbors) 
    109109        return nodes 
    110          
     110 
    111111    def _propagate(self, net): 
    112112        central_nodes = [i for i in net.nodes() if net.node[i]['user_score'] == 1] 
     
    140140            else: 
    141141                return net 
    142                  
     142 
    143143    def compute_k(self, id, centers, net): 
    144144        import networkx as nx #VEDERE SE C'E' IN ORANGENET  
     
    152152                except nx.exception.NetworkXNoPath: 
    153153                    return None #isolated node 
    154                      
    155             return float(min(paths))/10 
    156             
    157                  
    158     def _prop(self, predec, predec_delta_score, node, L, net):  
     154 
     155            return float(min(paths)) / 10 
     156 
     157 
     158    def _prop(self, predec, predec_delta_score, node, L, net): 
    159159        edges_weight = [net[i][node]['weight'] for i in predecessors] 
    160         x = [(delta * w + 0.5)/(1 + level*self._k_algorithm) for delta, w in zip(predec_delta_score, edges_weight)]     
    161         return max(x)     
    162          
    163          
     160        x = [(delta * w + 0.5) / (1 + level * self._k_algorithm) for delta, w in zip(predec_delta_score, edges_weight)] 
     161        return max(x) 
     162 
     163 
    164164class OWPubmedView(OWWidget): 
    165      
     165 
    166166    settingsList = ['_nhops'] 
    167      
     167 
    168168    def __init__(self, parent=None, signalManager=None): 
    169169        OWWidget.__init__(self, parent, signalManager, 'Pubmed Network View', wantMainArea=0) 
    170          
     170 
    171171        self.inputs = [] 
    172172        self.outputs = [("Nx View", Orange.network.NxView)] 
    173          
     173 
    174174        self._nhops = 2 
    175175        self._edge_threshold = 0.5 
     
    182182        self._algorithm = 0 
    183183        self._k_algorithm = 0.3 
    184          
     184 
    185185        self.loadSettings() 
    186          
     186 
    187187        box = OWGUI.widgetBox(self.controlArea, "Paper Selection", orientation="vertical") 
    188188        OWGUI.lineEdit(box, self, "filter", callback=self.filter_list, callbackOnType=True) 
     
    199199        OWGUI.doubleSpin(OWGUI.indentedBox(radio_box), self, "_k_algorithm", 0, 1, step=0.01, label="Parameter k: ", callback=self.update_view) 
    200200        OWGUI.appendRadioButton(radio_box, self, "_algorithm", "With Clustering", callback=self.update_view) 
    201          
     201 
    202202        self.inside_view = PubmedNetworkView(self) 
    203203        self.send("Nx View", self.inside_view) 
    204    
    205          
     204 
     205 
    206206    def init_network(self): 
    207207        if self.inside_view._network is None: 
    208208            return 
    209          
     209 
    210210        self.titles = [self.inside_view._network.node[node]['title'] for node in self.inside_view._network.nodes()] 
    211211        self.ids = self.inside_view._network.nodes() 
    212          
     212 
    213213        QObject.connect(self.inside_view._nx_explorer.networkCanvas, SIGNAL('point_rightclicked(Point*)'), self.node_menu_show) 
    214          
    215          
     214 
     215 
    216216    def update_view(self): 
    217217        self.inside_view.set_nhops(self._nhops) 
     
    223223        self.inside_view.set_center_nodes(self._selected_nodes) 
    224224        self.inside_view.update_network() 
    225          
    226          
     225 
     226 
    227227    def filter_list(self): 
    228228        """Given a query for similar titles sets titles and ids""" 
    229          
    230         str_input = self.filter  
     229 
     230        str_input = self.filter 
    231231        str_input = str_input.strip(' .').lower().split(' ') 
    232232        titles2 = [(n, str.lower(self.inside_view._network.node[n]['title'].encode('utf-8').strip(' .')).split(' ')) for n in self.inside_view._network.nodes()] # [(id,title)] 
    233         titles2 = sorted(titles2, key = lambda x: sum(i in str_input for i in x[1]), reverse=True) 
     233        titles2 = sorted(titles2, key=lambda x: sum(i in str_input for i in x[1]), reverse=True) 
    234234        self.titles = [self.inside_view._network.node[x[0]]['title'] for x in titles2] 
    235235        self.ids = [x[0] for x in titles2] 
    236          
     236 
    237237    def node_menu_show(self, node): 
    238238        menu = QMenu(self) 
     
    248248        self.connect(menu, SIGNAL("triggered(QAction*)"), lambda action, node=node: self.node_menu_triggered(action, node)) 
    249249        menu.popup(QCursor.pos()) 
    250    
    251     def node_menu_triggered(self, action, node):         
     250 
     251    def node_menu_triggered(self, action, node): 
    252252        # delete_node_and_neig --> ????         
    253253        if action.text() == 'Expand Node': 
    254254            self.inside_view.update_center_nodes(node.index()) 
    255              
     255 
    256256        elif action.text() == 'Hide Node': 
    257257            self.inside_view._hidden_nodes.append(node.index()) 
    258          
    259         else:       
     258 
     259        else: 
    260260            self.inside_view.set_user_node_score(node.index(), float(action.text())) 
    261          
     261 
    262262        self.inside_view.update_network()  #chiama propagate 
    263          
    264              
    265  
    266      
    267       
     263 
     264 
     265 
     266 
  • source/orangeqt/networkcurve.cpp

    r9378 r10721  
    11271127    NodeItem* node = m_nodes.take(index); 
    11281128    Q_ASSERT(node->index() == index); 
     1129 
     1130    if (node->label != NULL) 
     1131    { 
     1132        remove_label(index); 
     1133        node->label = NULL; 
     1134    } 
     1135 
    11291136    Plot* p = plot(); 
    11301137    if (p) 
Note: See TracChangeset for help on using the changeset viewer.