Package mvpa :: Package misc :: Module param
[hide private]
[frames] | no frames]

Source Code for Module mvpa.misc.param

  1  #emacs: -*- mode: python-mode; py-indent-offset: 4; indent-tabs-mode: nil -*- 
  2  #ex: set sts=4 ts=4 sw=4 et: 
  3  ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## 
  4  # 
  5  #   See COPYING file distributed along with the PyMVPA package for the 
  6  #   copyright and license terms. 
  7  # 
  8  ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ##g 
  9  """Parameter representation""" 
 10   
 11  __docformat__ = 'restructuredtext' 
 12   
 13  from mvpa.misc.state import CollectableAttribute 
 14   
 15  if __debug__: 
 16      from mvpa.base import debug 
17 18 -class Parameter(CollectableAttribute):
19 """This class shall serve as a representation of a parameter. 20 21 It might be useful if a little more information than the pure parameter 22 value is required (or even only useful). 23 24 Each parameter must have a value. However additional property can be 25 passed to the constructor and will be stored in the object. 26 27 BIG ASSUMPTION: stored values are not mutable, ie nobody should do 28 29 cls.parameter1[:] = ... 30 31 or we wouldn't know that it was changed 32 33 Here is a list of possible property names: 34 35 min - minimum value 36 max - maximum value 37 step - increment/decrement stepsize 38 """ 39
40 - def __init__(self, default, name=None, doc=None, **kwargs):
41 """Specify a parameter by its default value and optionally an arbitrary 42 number of additional parameters. 43 44 TODO: :Parameters: for Parameter 45 """ 46 self.__default = default 47 48 CollectableAttribute.__init__(self, name, doc) 49 50 self.resetvalue() 51 self._isset = False 52 53 if __debug__: 54 if kwargs.has_key('val'): 55 raise ValueError, "'val' property name is illegal." 56 57 # XXX probably is too generic... 58 for k, v in kwargs.iteritems(): 59 self.__setattr__(k, v)
60 61
62 - def __str__(self):
63 res = CollectableAttribute.__str__(self) 64 # it is enabled but no value is assigned yet 65 res += '=%s' % (self.value,) 66 return res
67 68 69 # XXX should be named reset2default? correspondingly in 70 # ParameterCollection as well
71 - def resetvalue(self):
72 """Reset value to the default""" 73 #CollectableAttribute.reset(self) 74 if not self.isDefault: 75 self._isset = True 76 self.value = self.__default
77
78 - def _set(self, val):
79 if self._value != val: 80 if __debug__: 81 debug("COL", 82 "Parameter: setting %s to %s " % (str(self), val)) 83 if hasattr(self, 'min') and val < self.min: 84 raise ValueError, \ 85 "Minimal value for parameter %s is %s. Got %s" % \ 86 (self.name, self.min, val) 87 if hasattr(self, 'max') and val > self.max: 88 raise ValueError, \ 89 "Maximal value for parameter %s is %s. Got %s" % \ 90 (self.name, self.max, val) 91 if hasattr(self, 'choices') and (not val in self.choices): 92 raise ValueError, \ 93 "Valid choices for parameter %s are %s. Got %s" % \ 94 (self.name, self.choices, val) 95 self._value = val 96 self._isset = True 97 elif __debug__: 98 debug("COL", 99 "Parameter: not setting %s since value is the same" \ 100 % (str(self)))
101 102 @property
103 - def isDefault(self):
104 """Returns True if current value is bound to default one""" 105 return self._value is self.default
106 107 @property
108 - def equalDefault(self):
109 """Returns True if current value is equal to default one""" 110 return self._value == self.__default
111
112 - def setDefault(self, value):
113 wasdefault = self.isDefault 114 self.__default = value 115 if wasdefault: 116 self.resetvalue() 117 self._isset = False
118 119 # incorrect behavior 120 #def reset(self): 121 # """Override reset so we don't clean the flag""" 122 # pass 123 124 default = property(fget=lambda x:x.__default, fset=setDefault) 125 value = property(fget=lambda x:x._value, fset=_set)
126
127 -class KernelParameter(Parameter):
128 """Just that it is different beast""" 129 pass
130