Changeset 3607:3a6c8a5e68d0 in orange


Ignore:
Timestamp:
04/28/07 18:48:44 (7 years ago)
Author:
miha <miha.stajdohar@…>
Branch:
default
Convert:
548d7788750c05eb9909660db4a4e2cdb47760e5
Message:

reading graph from file

File:
1 edited

Legend:

Unmodified
Added
Removed
  • orange/OrangeWidgets/Prototypes/OWNetworkFile.py

    r3563 r3607  
    1212# A widget for opening orange data files 
    1313# 
     14import OWGUI, string, os.path, user, sys 
    1415 
    1516from OWWidget import * 
    16 import OWGUI, string, os.path, user, sys 
     17from orangeom import * 
     18 
    1719from orange import Graph 
    18 #from OWGraphDrawer import * 
     20from orange import GraphAsList 
     21from orange import ExampleTable 
    1922 
    2023class OWNetworkFile(OWWidget): 
     
    195198 
    196199    def readNetFile(self, fn): 
    197         try: 
    198             graphFile = file(fn, 'r') 
    199         except IOError: 
    200             return None 
    201  
    202         lineNum = 0      
    203         nVertices = 0    
    204         graphName = "" 
    205         ####################################################################### 
    206         #branje glave datoteke 
    207         while True: 
    208             line = graphFile.readline() 
    209             lineNum = lineNum + 1 
    210  
    211             words = self.getwords(line) 
    212  
    213             if words == '': 
    214                 #raise InputSyntaxErrors 
    215                 raise 
    216             elif words == []: 
    217                 continue 
    218             elif lower(words[0]) == '*network': 
    219                 graphName = '"' + str(words[1]) + '"' 
    220             elif lower(words[0]) == '*vertices': 
    221                 try: 
    222                     nVertices = int(words[1]) 
    223                 except ValueError: 
    224                     #raise InputSyntaxError 
    225                     raise 
    226                 if nVertices <= 0: 
    227                     #raise InputSyntaxError 
    228                     raise 
    229                 break 
    230              
    231         #print "nVertices: " + str(nVertices) 
    232         graph = orange.GraphAsList(nVertices, 0) 
    233         graph.name = graphName 
    234          
    235         dataTable = {} 
    236         dataAttributes = [] 
    237         row = 0 
    238         ####################################################################### 
    239         #sedaj beremo opise vozlisc 
    240         while True:           #opisi vozlisc so brez praznih vrstic! 
    241             line = graphFile.readline() 
    242             lineNum = lineNum + 1 
    243             words = self.getwords(line) 
    244             col = 0 
    245              
    246             if words=='' or words==[]:   #prazna vrstica ali EOF, prenehamo brati 
    247                 break 
    248             if lower(words[0]) == '*arcs'  or lower(words[0]) == '*edges': 
    249                 break 
    250  
    251             try: 
    252                 index = int(words[0])             #to je indeks vozlisca 
    253             except ValueError: 
    254                 #raise InputSyntaxError 
    255                 raise 
    256              
    257             if index <= 0 or index > nVertices: 
    258                 #raise InputSyntaxError 
    259                 raise 
    260              
    261             dataTable[row] = {} 
    262             dataTable[row][col] = index; 
    263             col += 1 
    264             # samo v 1. vrstici nastavimo Domeno za ExampleTable 
    265             if row == 0: 
    266                 dataAttributes[len(dataAttributes):] = [orange.FloatVariable("index")] 
    267              
    268             k = len(words) 
    269             if k > 1: 
    270                 i = 1 
    271                 dataTable[row][col] = words[i]; 
    272                 col += 1 
    273                 # samo v 1. vrstici nastavimo Domeno za ExampleTable 
    274                 if row == 0: 
    275                     dataAttributes[len(dataAttributes):] = [orange.StringVariable("label")] 
    276                 i += 1 
    277                 # poskusimo prebrati coor 
    278                 j=0 
    279                 while j <= 2 and i < len(words): 
    280                     try: 
    281                         coor = float(words[i]) 
    282                     except ValueError: 
    283                         i-=1 
    284                         break 
    285                     if coor < 0 or coor > 1: 
    286                         #raise InputSyntaxError 
    287                         raise 
    288                      
    289                     dataTable[row][col] = coor*1000.0; 
    290                     col += 1 
    291                      
    292                     # samo v 1. vrstici nastavimo Domeno za ExampleTable 
    293                     if row == 0: 
    294                         dataAttributes[len(dataAttributes):] = [orange.FloatVariable("coor" + j)] 
    295                     i += 1 
    296                     j += 1 
    297                 # beremo atribute 
    298                 while i < len(words): 
    299                     if words[i]=='ic': 
    300                         i += 1 
    301                         dataTable[row][col] = words[i];     
    302                          
    303                         # samo v 1. vrstici nastavimo Domeno za ExampleTable 
    304                         if row == 0: 
    305                             dataAttributes[len(dataAttributes):] = [orange.EnumVariable("color")] 
    306                          
    307                         if words[i] not in dataAttributes[col].values: 
    308                             dataAttributes[col].values.append(words[i]) 
    309                              
    310                         col += 1 
    311                              
    312                     elif words[i]=='bc': 
    313                         i += 1 
    314                         dataTable[row][col] = words[i]; 
    315                         col += 1 
    316                          
    317                         # samo v 1. vrstici nastavimo Domeno za ExampleTable 
    318                         if row == 0: 
    319                             dataAttributes[len(dataAttributes):] = [orange.StringVariable("borderColor")] 
    320                     elif words[i]=='bw': 
    321                         i += 1 
    322                         try: 
    323                             width = int(words[i]) 
    324                         except ValueError: 
    325                             #raise InputSyntaxError 
    326                             raise 
    327                         if width < 0: 
    328                             #raise InputSyntaxError 
    329                             raise 
    330                          
    331                         dataTable[row][col] = words[i]; 
    332                         col += 1 
    333                          
    334                         # samo v 1. vrstici nastavimo Domeno za ExampleTable 
    335                         if row == 0: 
    336                             dataAttributes[len(dataAttributes):] = [orange.FloatVariable("borderWidth")] 
    337                     i += 1 
    338             row += 1 
    339         data = orange.ExampleTable(orange.Domain(dataAttributes)) 
    340          
    341         # create example table with node attributes 
    342         for index in range(len(dataTable)): 
    343             items = [] 
    344             for key in dataTable[index].keys(): 
    345                 items[len(items):] = [dataTable[index][key]] 
    346                  
    347             data.append(items) 
    348              
    349         graph.setattr("items", data) 
    350         ####################################################################### 
    351         #konstrukcija matrike sosednosti 
    352         #sedaj beremo opise povezav 
    353         #postopamo tako, kot deluje Pajek: ce je vrstica prazna, nehamo brati opise povezav 
    354  
    355  
    356         #TU JE NAPAKA: ce imamo v datoteki prazen blok, oznacen z *arcs ali *edges 
    357         mywords = words 
    358         while True: 
    359             if mywords == [] or mywords== '':  #prazna vrstica ali EOF 
    360                 break 
    361  
    362             if lower(mywords[0]) == '*edges': 
    363 #                if self.Gtype == None or self.Gtype == UNDIRECTED: 
    364 #                    self.Gtype = UNDIRECTED 
    365 #                else: 
    366 #                    self.Gtype = MIXED 
    367                 while True: 
    368                     line = graphFile.readline() 
    369                     lineNum = lineNum + 1 
    370                     words = self.getwords(line) 
    371          
    372                     if words == [] or words=='' or lower(words[0]) == '*arcs' or lower(words[0]) == '*edges': 
    373                         mywords = words 
    374                         break 
    375                     try: 
    376                         i1 = int(words[0]) 
    377                         i2 = int(words[1]) 
    378                     except ValueError: 
    379                         #raise InputSyntaxError 
    380                         raise 
    381                     if (i1 not in range(1, nVertices+1)) or (i2 not in range(1, nVertices+1)): 
    382                         #raise InputSyntaxError 
    383                         raise 
    384          
    385                     #zanke in veckratne povezave preskocimo 
    386                     if (i1==i2): 
    387                         continue 
    388 #                    if i1-1 in self.edgDesc.keys(): 
    389 #                        if i2-1 in self.edgDesc[i1-1].keys(): 
    390 #                            continue 
    391 #                    if i2-1 in self.edgDesc.keys(): 
    392 #                        if i1-1 in self.edgDesc[i2-1].keys(): 
    393 #                            continue 
    394          
    395                     graph[i1-1, i2-1] = 1 
    396                     graph[i2-1, i1-1] = 1 
    397          
    398 #                    eparms=EdgeParams() 
    399 #                    eparms.type=UNDIRECTED 
    400 #         
    401 #                    k=len(words) 
    402 #                    if k>2: 
    403 #                        i=2 
    404 #                        try: 
    405 #                            w=float(words[i]) 
    406 #                        except ValueError: 
    407 #                            raise InputSyntaxError 
    408 #                        eparms.weight=w     #dana teza prekrije privzeto 
    409 #                        i+=1 
    410 #                        while i<len(words): 
    411 #                            if words[i]=='c': 
    412 #                                i+=1 
    413 #                                if words[i] not in PajekColors.keys(): 
    414 #                                    raise InputSyntaxError 
    415 #                                else: 
    416 #                                    colorTuple=PajekColors[words[i]] 
    417 #                                    eparms.color=QColor(colorTuple[0], colorTuple[1], colorTuple[2]) 
    418 #                                    eparms.colorFromFile=True 
    419 #                                    eparms.colorName=words[i] 
    420 #                            elif words[i]=='l': 
    421 #                                i=i+1 
    422 #                                eparms.label=words[i] 
    423 #        ##                    elif words[i]=='w' 
    424 #        ##                        i+=1 
    425 #        ##                        try: 
    426 #        ##                            width=int(words[i]) 
    427 #        ##                        except ValueError: 
    428 #        ##                            raise InputSyntaxError 
    429 #        ##                        if width<0: 
    430 #        ##                            raise InputSyntaxError 
    431 #        ##                        eparms.width=width 
    432 #        ##                        eparms.widthFromFile=True 
    433 #                            i=i+1 
    434 #         
    435 #                    if i1-1 not in self.edgDesc.keys(): 
    436 #                        self.edgDesc[i1-1]={} 
    437 #                    self.edgDesc[i1-1][i2-1]=eparms 
    438                     #posledica: sedaj lahko dobimo parametre za vsako povezavo, ki gre iz vertex1-->vertex2 
    439                     #na naslednji nacin:     self.edgDesc[vertex1][vertex2].color   ipd. 
    440                     #iskanje je hitro, ker delamo s slovarji 
    441             elif lower(mywords[0]) == '*arcs': 
    442 #                if self.Gtype == None or self.Gtype == DIRECTED: 
    443 #                    self.Gtype = DIRECTED 
    444 #                else: 
    445 #                    self.Gtype = MIXED 
    446                 while True: 
    447                     line = graphFile.readline() 
    448                     lineNum = lineNum + 1 
    449                     words = self.getwords(line) 
    450          
    451                     if words==[] or words=='' or lower(words[0]) == '*edges' or lower(words[0]) == '*arcs': 
    452                         mywords = words 
    453                         break 
    454                     try: 
    455                         i1 = int(words[0]) 
    456                         i2 = int(words[1]) 
    457                     except ValueError: 
    458                         #raise InputSyntaxError 
    459                         raise 
    460                     if (i1 not in range(1, nVertices + 1)) or (i2 not in range(1, nVertices + 1)): 
    461                         #raise InputSyntaxError 
    462                         raise 
    463          
    464                     #zanke in veckratne povezave preskocimo 
    465                     if (i1==i2): 
    466                         continue 
    467 #                    if i1-1 in self.edgDesc.keys(): 
    468 #                        if i2-1 in self.edgDesc[i1-1].keys(): 
    469 #                            continue 
    470 #                    if i2-1 in self.edgDesc.keys(): 
    471 #                        if i1-1 in self.edgDesc[i2-1].keys(): 
    472 #                            continue 
    473          
    474          
    475                     graph[i1-1, i2-1] = 1 
    476          
    477 #                    eparms=EdgeParams() 
    478 #                    eparms.type=DIRECTED 
    479 #         
    480 #                    k=len(words) 
    481 #                    if k>2: 
    482 #                        i=2 
    483 #                        try: 
    484 #                            w=float(words[i]) 
    485 #                        except ValueError: 
    486 #                            raise InputSyntaxError 
    487 #                        eparms.weight=w     #dana teza prekrije privzeto 
    488 #                        i+=1 
    489 #                        while i<len(words): 
    490 #                            if words[i]=='c': 
    491 #                                i+=1 
    492 #                                if words[i] not in PajekColors.keys(): 
    493 #                                    raise InputSyntaxError 
    494 #                                else: 
    495 #                                    colorTuple=PajekColors[words[i]] 
    496 #                                    eparms.color=QColor(colorTuple[0], colorTuple[1], colorTuple[2]) 
    497 #                                    eparms.colorFromFile=True 
    498 #                                    eparms.colorName=words[i] 
    499 #                            elif words[i]=='l': 
    500 #                                i=i+1 
    501 #                                eparms.label=words[i] 
    502 #        ##                    elif words[i]=='w' 
    503 #        ##                        i+=1 
    504 #        ##                        try: 
    505 #        ##                            width=int(words[i]) 
    506 #        ##                        except ValueError: 
    507 #        ##                            raise InputSyntaxError 
    508 #        ##                        if width<0: 
    509 #        ##                            raise InputSyntaxError 
    510 #        ##                        eparms.width=width 
    511 #        ##                        eparms.widthFromFile=True 
    512 #                            i=i+1 
    513 #         
    514 #                    if i1-1 not in self.edgDesc.keys(): 
    515 #                        self.edgDesc[i1-1]={} 
    516 #                    self.edgDesc[i1-1][i2-1]=eparms 
    517                     #posledica: sedaj lahko dobimo parametre za vsako povezavo, ki gre iz vertex1-->vertex2 
    518                     #na naslednji nacin:     self.edgDesc[vertex1][vertex2].color   ipd. 
    519                     #iskanje je hitro, ker delamo s slovarji 
    520  
     200#        try: 
     201#            graphFile = file(fn, 'r') 
     202#        except IOError: 
     203#            return None 
     204 
     205        graph, table = readNetwork(fn) 
     206        graph.setattr("items", table) 
     207        #print "prebral" 
    521208        return graph 
    522209 
Note: See TracChangeset for help on using the changeset viewer.