Changeset 7894:3eb03b7080de in orange


Ignore:
Timestamp:
05/06/11 13:42:41 (3 years ago)
Author:
ales_erjavec <ales.erjavec@…>
Branch:
default
Convert:
ddf18058c7e77cc957e28abd352edd98216be779
Message:

Better loading of pickled matrices.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • orange/OrangeWidgets/Unsupervised/OWDistanceFile.py

    r7166 r7894  
    2424        #print self.matrix 
    2525        if hasattr(matrix, 'items'): 
    26             data = matrix.items 
     26            items = matrix.items 
     27            if isinstance(items, orange.ExampleTable): 
     28                data = items 
     29            elif isinstance(items, list) or hasattr(item, "__iter__"): 
     30                labels = items 
    2731        pkl_file.close() 
    2832         
     
    4044        try: 
    4145            dim = int(spl[0]) 
    42         except: 
    43             msg = "Matrix dimension expected in the first line" 
    44             raise exceptions.Exception 
     46        except IndexError: 
     47            raise ValueError("Matrix dimension expected in the first line.") 
     48         
    4549        #print dim 
    4650        labeled = len(spl) > 1 and spl[1] in ["labelled", "labeled"] 
     
    5761                if not li.strip(): 
    5862                    continue 
    59                 msg = "File too long" 
    60                 raise exceptions.IndexError 
     63                raise ValueError("File to long") 
     64             
    6165            spl = lne.split("\t") 
    6266            if labeled: 
     
    6468                spl = spl[1:] 
    6569            if len(spl) > dim: 
    66                 msg = "Line %i too long" % li+2 
    67                 raise exceptions.IndexError 
     70                raise ValueError("Line %i too long" % li+2) 
     71             
    6872            for lj, s in enumerate(spl): 
    6973                if s: 
    7074                    try: 
    7175                        matrix[li, lj] = float(s) 
    72                     except: 
    73                         msg = "Invalid number in line %i, column %i" % (li+2, lj) 
     76                    except ValueError: 
     77                        raise ValueError("Invalid number in line %i, column %i" % (li+2, lj)) 
     78                     
    7479            if li in milestones: 
    7580                if progress: 
     
    7782        if progress: 
    7883            progress.finish() 
    79          
    80     if msg: 
    81         raise exceptions.Exception(msg) 
    8284 
    8385    return matrix, labels, data 
     
    178180        #self.filecombo.updateGeometry() 
    179181 
     182        self.matrix = None 
     183        self.labels = None 
     184        self.data = None 
     185        pb = OWGUI.ProgressBar(self, 100) 
     186         
    180187        self.error() 
    181          
    182188        try: 
    183             self.matrix = None 
    184             self.labels = None 
    185             self.data = None 
    186             pb = OWGUI.ProgressBar(self, 100) 
    187189            self.matrix, self.labels, self.data = readMatrix(fn, pb) 
    188             self.relabel() 
    189         except: 
    190             self.error("Error while reading the file") 
     190        except Exception, ex: 
     191            self.error("Error while reading the file: '%s'" % str(ex)) 
     192            return 
     193        self.relabel() 
    191194             
    192195    def relabel(self): 
     
    209212                else: 
    210213                    self.error("The number of examples doesn't match the matrix dimension") 
    211         else: 
     214        elif matrix and self.labels: 
    212215            lbl = orange.StringVariable('label') 
    213216            self.data = orange.ExampleTable(orange.Domain([lbl]),  
     
    218221         
    219222        if self.data == None and self.labels == None: 
    220             matrix.setattr("items", range(matrix.dim)) 
     223            matrix.setattr("items", [str(i) for i in range(matrix.dim)]) 
    221224         
    222225        self.matrix.matrixType = orange.SymMatrix.Symmetric 
Note: See TracChangeset for help on using the changeset viewer.