1
2
3
4
5
6
7
8
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
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
58 for k, v in kwargs.iteritems():
59 self.__setattr__(k, v)
60
61
67
68
69
70
72 """Reset value to the default"""
73
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
104 """Returns True if current value is bound to default one"""
105 return self._value is self.default
106
107 @property
109 """Returns True if current value is equal to default one"""
110 return self._value == self.__default
111
113 wasdefault = self.isDefault
114 self.__default = value
115 if wasdefault:
116 self.resetvalue()
117 self._isset = False
118
119
120
121
122
123
124 default = property(fget=lambda x:x.__default, fset=setDefault)
125 value = property(fget=lambda x:x._value, fset=_set)
126
128 """Just that it is different beast"""
129 pass
130