Changeset 353

Show
Ignore:
Timestamp:
11/17/08 14:57:23 (2 months ago)
Author:
apdavison
Message:

Minor improvements to parameters and random modules

Files:

Legend:

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

    r311 r353  
    156156     
    157157    non_parameter_attributes = ['_url','label','names','parameters','flat','flatten','non_parameter_attributes'] 
     158    invalid_names = ['parameters', 'names'] # should probably add dir(dict) 
    158159     
    159160    @staticmethod 
     
    191192        return D or {} 
    192193     
     194    @staticmethod 
     195    def check_validity(k): 
     196        if k in ParameterSet.invalid_names: 
     197            raise Exception("'%s' is not allowed as a parameter name." % k) 
     198     
    193199    def __init__(self, initialiser, label=None): 
    194200         
     
    197203            # `ParameterSet` objects. 
    198204            for k,v in d.items(): 
     205                ParameterSet.check_validity(k) 
    199206                if isinstance(v, ParameterSet): 
    200207                    d[k] = v 
     
    208215        if isinstance(initialiser, basestring): # url or str 
    209216            try: 
    210                 try: 
    211                     # can't handle cases where authentication is required 
    212                     # should be rewritten using urllib2  
    213                     #scheme, netloc, path, \ 
    214                     #        parameters, query, fragment = urlparse(initialiser) 
    215                     f = urllib.urlopen(initialiser) 
    216                     pstr = f.read() 
    217                     self._url = initialiser 
    218                 except IOError: 
    219                     pstr = initialiser 
    220                     self._url = None 
    221             finally: 
    222                 try: 
    223                     f.close() 
    224                 except: 
    225                     pass 
     217                # can't handle cases where authentication is required 
     218                # should be rewritten using urllib2  
     219                #scheme, netloc, path, \ 
     220                #        parameters, query, fragment = urlparse(initialiser) 
     221                f = urllib.urlopen(initialiser) 
     222                pstr = f.read() 
     223                self._url = initialiser 
     224            except IOError: 
     225                pstr = initialiser 
     226                self._url = None 
     227            else: 
     228                f.close() 
     229 
    226230 
    227231            initialiser = ParameterSet.read_from_str(pstr) 
     
    232236        if isinstance(initialiser, dict): 
    233237            for k,v in initialiser.items(): 
     238                ParameterSet.check_validity(k) 
    234239                if isinstance(v, ParameterSet): 
    235240                    self[k] = v 
     
    318323        if not url: 
    319324            url = self._url 
     325        assert url != '' 
     326        if not self._url: 
     327            self._url = url 
    320328        scheme, netloc, path, parameters, query, fragment = urlparse(url) 
    321         if scheme != 'file': 
    322             raise Exception("Saving using the %s protocol is not implemented" % scheme) 
    323         else: 
     329        if scheme == 'file' or (scheme=='' and netloc==''): 
    324330            f = open(path, 'w') 
    325331            f.write(self.pretty(expand_urls=expand_urls)) 
    326332            f.close() 
     333        else: 
     334            if scheme: 
     335                raise Exception("Saving using the %s protocol is not implemented" % scheme) 
     336            else: 
     337                raise Exception("No protocol (http, ftp, etc) specified.") 
    327338         
    328339    def pretty(self, indent='  ', expand_urls=False): 
  • trunk/src/random.py

    r311 r353  
    141141    """ 
    142142 
    143     def __init__(self,min=0.0,max=1.0): 
     143    def __init__(self,min=0.0,max=1.0, return_type=float): 
    144144        ParameterDist.__init__(self,min=min,max=max) 
    145145        self.dist_name = 'UniformDist' 
     146        self.return_type = return_type 
    146147         
    147148    def next(self,n=1): 
    148         return numpy.random.uniform(low=self.params['min'],high=self.params['max'],size=n) 
     149        vals = numpy.random.uniform(low=self.params['min'],high=self.params['max'],size=n) 
     150        if self.return_type != float: 
     151            vals = vals.astype(self.return_type) 
     152        return vals 
    149153 
    150      
    151154    def from_stats(self,vals,bias=0.0,expand=1.0): 
    152155        mn = numpy.min(vals)