Changeset 189

Show
Ignore:
Timestamp:
08/13/08 15:49:29 (4 months ago)
Author:
apdavison
Message:

Renamed ParameterSet.url to _url to avoid confusion if people want to create a parameter named 'url'.

Added a method __sub__() to ParameterSet, to make it easy to see the difference between two parameter sets.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/src/parameters.py

    r188 r189  
    138138    """ 
    139139     
    140     non_parameter_attributes = ['url','label','names','parameters','flat','flatten','non_parameter_attributes'] 
     140    non_parameter_attributes = ['_url','label','names','parameters','flat','flatten','non_parameter_attributes'] 
    141141     
    142142    @staticmethod 
     
    161161         
    162162        """ 
    163  
    164163        global_dict = dict(url=ParameterSet,ParameterSet=ParameterSet) 
    165164        global_dict.update(dict(ParameterRange=ParameterRange, 
     165                                ParameterTable=ParameterTable, 
    166166                                GammaDist=GammaDist, 
    167167                                UniformDist=UniformDist, 
    168                                 NormalDist=NormalDist))             
    169  
    170         D = eval(str, global_dict)                                  
     168                                NormalDist=NormalDist, 
     169                                pi=numpy.pi))             
     170        try: 
     171            D = eval(str, global_dict) 
     172        except SyntaxError: 
     173            print str 
     174            raise 
    171175        return D or {} 
    172176     
     
    185189            return ParameterSet(d, label) 
    186190         
    187         self.url = None 
     191        self._url = None 
    188192        if isinstance(initialiser, basestring): # url or str 
    189193            try: 
     
    195199                    f = urllib.urlopen(initialiser) 
    196200                    pstr = f.read() 
    197                     self.url = initialiser 
     201                    self._url = initialiser 
    198202                except IOError: 
    199203                    pstr = initialiser 
    200                     self.url = None 
     204                    self._url = None 
    201205            finally: 
    202206                try: 
     
    283287        valid Python code, preferably importable as a module. 
    284288         
    285         If `url` is `None`, try to save to `self.url` (if it is not `None`), 
     289        If `url` is `None`, try to save to `self._url` (if it is not `None`), 
    286290        otherwise save to `url`. 
    287291        """ 
    288292        # possible solution for HTTP PUT: http://inamidst.com/proj/put/put.py 
    289293        if not url: 
    290             url = self.url 
     294            url = self._url 
    291295        scheme, netloc, path, parameters, query, fragment = urlparse(url) 
    292296        if scheme != 'file': 
     
    506510        return tuple(index) 
    507511         
    508              
    509  
     512    def __sub__(self, other): 
     513        """ 
     514        Return the difference between this ParameterSet and another. 
     515        Not yet properly implemented. 
     516        """ 
     517        self_keys = set(self) 
     518        other_keys = set(other) 
     519        intersection = self_keys.intersection(other_keys) 
     520        difference1 = self_keys.difference(other_keys) 
     521        difference2 = other_keys.difference(self_keys) 
     522        result1 = dict([(key, self[key]) for key in difference1]) 
     523        result2 = dict([(key, other[key]) for key in difference2]) 
     524        # Now need to check values for intersection.... 
     525        for item in intersection: 
     526            if isinstance(self[item], ParameterSet): 
     527                d1,d2 = self[item] - other[item] 
     528                if d1: 
     529                    result1[item] = d1 
     530                if d2: 
     531                    result2[item] = d2 
     532            elif self[item] != other[item]: 
     533                result1[item] = self[item] 
     534                result2[item] = other[item] 
     535        if len(result1) + len(result2) == 0: 
     536            assert self == other, "Error in ParameterSet.diff()" 
     537        return result1, result2 
    510538 
    511539# Classes for specifiying a parameter by a statistical distribution 
     
    723751         
    724752        self.rows = self.items 
    725         self.rows.__doc__ = "Return a list of (row_label, row) pairs, as 2-tuples.""" 
     753        #self.rows.__doc__ = "Return a list of (row_label, row) pairs, as 2-tuples.""" 
    726754        self.row_labels = self.keys 
    727         self.row_labels.__doc__ = "Return a list of row labels." 
     755        #self.row_labels.__doc__ = "Return a list of row labels." 
    728756         
    729757    def _check_is_table(self):