Package nltk_lite :: Package contrib :: Package classifier :: Module numrange
[hide private]
[frames] | no frames]

Source Code for Module nltk_lite.contrib.classifier.numrange

 1  # Natural Language Toolkit - Range 
 2  #  Represents a range of numbers, not an immutable object and can be modified by include 
 3  #  Capable of performing operations on ranges 
 4  # 
 5  # Author: Sumukh Ghodke <sumukh dot ghodke at gmail dot com> 
 6  # 
 7  # URL: <http://nltk.sf.net> 
 8  # This software is distributed under GPL, for license information see LICENSE.TXT 
 9  from nltk_lite.contrib.classifier.exceptions import systemerror as se 
10  DELTA = 0.000001 
11   
12 -class Range:
13 - def __init__(self, lower = 0, upper = 0, upper_includes_max=False):
14 """ 15 any number within this range should be greater than or equal to self.lower and 16 less than (or less than equal to depending on whether it includes the max) self.upper 17 """ 18 self.__delta_added = False 19 if upper < lower: 20 raise se.SystemError('Lower limit ' + str(lower) + ' cannot be greater than the Upper limit ' + str(upper) + ' in a range') 21 self.__uninitialized = False 22 if upper == lower == 0: 23 self.__uninitialized = True 24 self.lower, self.upper, self.__delta_added = lower, upper, False 25 if upper_includes_max: 26 self.upper += DELTA 27 self.__delta_added = True
28
29 - def include(self, number):
30 if self.__uninitialized: 31 self.lower, self.upper = number, number 32 self.__uninitialized = False 33 if number >= self.upper: 34 self.__delta_added = True 35 self.upper = number + DELTA 36 elif number < self.lower: 37 self.lower = number
38
39 - def includes(self, number):
40 return self.lower <= number and self.upper > number
41
42 - def split(self, parts):
43 if self.lower == self.upper: return None 44 size = self.upper - self.lower 45 max_limit = self.upper 46 if self.__delta_added: 47 size -= DELTA 48 max_limit -= DELTA 49 each = size / parts 50 if each < DELTA: 51 return None 52 lower, ranges = self.lower, [] 53 for i in range(parts - 1): 54 ranges.append(Range(lower, lower + each)) 55 lower += each 56 ranges.append(Range(lower, self.upper)) 57 return ranges
58
59 - def __eq__(self, other):
60 if other is None: return False 61 if self.__class__ != other.__class__ : return False 62 if self.lower == other.lower and self.upper == other.upper: return True 63 return False
64
65 - def __hash__(self):
66 return hash(self.lower) + hash(self.upper)
67
68 - def __str__(self):
69 return '[' + str(self.lower) + ',' + str(self.upper) + ']'
70