Changeset 1623
- Timestamp:
- 07/12/07 00:06:57 (1 year ago)
- Files:
-
- gaphas/branches/hw/gaphas/constraint.py (modified) (7 diffs)
- gaphas/branches/hw/gaphas/decorators.py (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
gaphas/branches/hw/gaphas/constraint.py
r1618 r1623 23 23 is kept to a minimum 24 24 """ 25 26 __version__ = "$Revision$" 27 # $HeadURL$ 28 29 25 30 from __future__ import division 26 31 import operator 27 28 __version__ = "$Revision$" 29 # $HeadURL$ 32 from decorators import recursive 33 30 34 31 35 class Constraint(object): … … 117 121 self.b = b 118 122 123 @recursive(limit=5) 119 124 def solve_for(self, var): 120 125 assert var in (self.a, self.b) … … 155 160 self.center = center 156 161 162 @recursive(limit=5) 157 163 def solve_for(self, var): 158 164 assert var in (self.a, self.b, self.center) … … 192 198 self.delta = delta 193 199 200 @recursive(limit=5) 194 201 def solve_for(self, var): 195 202 if self.smaller.value > self.bigger.value - self.delta: … … 277 284 278 285 286 @recursive(limit=5) 279 287 def solve_for(self, var): 280 288 """ … … 378 386 print 'b', self.balance 379 387 388 @recursive(limit=5) 380 389 def solve_for(self, var): 381 390 b1, b2 = self.band … … 424 433 425 434 435 @recursive(limit=5) 426 436 def solve_for(self, var): 427 437 b1, b2 = self.band 428 438 w = b2 - b1 429 var.value = b1 + w * self.balance 439 value = b1 + w * self.balance 440 if var.value != value: 441 var.value = value 430 442 431 443 gaphas/branches/hw/gaphas/decorators.py
r1304 r1623 138 138 return wrapper 139 139 140 class recursive(object): 141 """ 142 This decorator limits the recursion for a specific function 143 144 >>> class A(object): 145 ... def __init__(self): self.r = 0 146 ... @recursive(10) 147 ... def a(self, x=0): 148 ... self.r += 1 149 ... self.a() 150 >>> a = A() 151 >>> a.a() 152 >>> a.r 153 10 154 """ 155 156 def __init__(self, limit=10000): 157 self.limit = limit 158 159 def __call__(self, func): 160 def wrapper(*args, **kwargs): 161 try: 162 func._recursion_level += 1 163 except AttributeError: 164 # _recursion_level not present 165 func._recursion_level = 0 166 if func._recursion_level < self.limit: 167 try: 168 return func(*args, **kwargs) 169 finally: 170 func._recursion_level -= 1 171 return wrapper 172 140 173 141 174 if __name__ == '__main__':
