Changeset 355

Show
Ignore:
Timestamp:
11/19/08 10:35:15 (2 months ago)
Author:
apdavison
Message:

Can now (again) combine ParameterRanges and ParameterDists inside a ParameterSpace, e.g.::

for sub_parameter_space in parameter_space.iter_inner(copy=True):
    for parameter_set in sub_parameter_space.realize_dists(n=2, copy=True):
        print parameter_set.pretty()

Before, this would raise an Exception because iter_inner() would return a ParameterSet even if there were ParameterDists inside it.

Presumably, this used to work before I split the ParameterSet into separate ParameterSet and ParameterSpace classes, so really I'm just fixing a bug I introduced then.

Files:

Legend:

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

    r354 r355  
    346346                if hasattr(v, 'items'): 
    347347                    if expand_urls is False and hasattr(v, '_url') and v._url: 
    348                         s.append('%s"%s": url("%s")' % (indent, k, v._url)) 
     348                        s.append('%s"%s": url("%s"),' % (indent, k, v._url)) 
    349349                    else: 
    350350                        s.append('%s"%s": {' % (indent, k)) 
     
    363363 
    364364        tmp = ParameterSet({}) 
    365          
    366365        for key in self: 
    367366            value = self[key] 
     
    371370            else: 
    372371                tmp[key]=value 
    373  
     372        if tmp._is_space(): 
     373            tmp = ParameterSpace(tmp) 
    374374        return tmp 
    375  
    376375 
    377376    def as_dict(self): 
     
    388387            else: 
    389388                tmp[key]=value 
    390  
    391389        return tmp 
    392390 
     
    418416        return result1, result2 
    419417     
     418    def _is_space(self): 
     419        """ 
     420        Checks for the presence of ParameterRanges or ParameterDists to 
     421        determine if this is a ParameterSet or a ParameterSpace. 
     422        """ 
     423        for k,v in self.flat(): 
     424            if isinstance(v, ParameterRange) or isinstance(v, ParameterDist): 
     425                return True 
     426        return False 
     427     
    420428 
    421429class ParameterSpace(ParameterSet): 
     
    430438 
    431439        tmp = self.tree_copy() 
    432  
    433440        for val in self[range_key]: 
    434             tmp[range_key]=val 
     441            tmp[range_key] = val 
    435442            yield tmp 
    436443 
     
    449456 
    450457        """ 
    451  
    452458        if len(keys)==0: 
    453459            # return an iterator over 1 copy for modifying 
     
    461467                for val in self[keys[0]]: 
    462468                    tmp[keys[0]]=val 
     469                    if not tmp._is_space(): 
     470                        tmp = ParameterSet(tmp) 
    463471                    yield tmp 
    464472        else: 
     
    471479                    tmp_copy = tmp.tree_copy() 
    472480                    tmp_copy[keys[0]]=val 
     481                    if not tmp_copy._is_space(): 
     482                        tmp = ParameterSet(tmp)   
    473483                    yield tmp_copy 
    474484             
  • trunk/test/test_parameters.py

    r280 r355  
    265265        assert isinstance(ps7, ParameterSpace) 
    266266        assert isinstance(out[0], ParameterSet) 
    267         assert not isinstance(out[0], ParameterSpace) 
     267        assert not isinstance(out[0], ParameterSpace), "%s %s %s" % (out[0].pretty(), out[0]._is_space(), type(out[0])) 
    268268     
    269269    def test_copy(self):