-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtimeInterval.py
145 lines (124 loc) · 4.01 KB
/
timeInterval.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
from enum import IntEnum
class Bracket(IntEnum):
RO = 1
LC = 2
RC = 3
LO = 4
class BracketNum:
def __init__(self, value, bracket):
self.value = value
self.bracket = bracket
def __eq__(self, bn):
if self.value == '+' and bn.value == '+':
return True
elif self.value == '+' and bn.value != '+':
return False
elif self.value != '+' and bn.value == '+':
return False
elif float(self.value) == float(bn.value) and self.bracket == bn.bracket:
return True
else:
return False
def complement(self):
if self.value == '+':
return BracketNum('+', Bracket.RO) # ceil
if float(self.value) == 0 and self.bracket == Bracket.LC:
return BracketNum('0', Bracket.LC) # floor
tempValue = self.value
tempBracket = None
if self.bracket == Bracket.LC:
tempBracket = Bracket.RO
if self.bracket == Bracket.RC:
tempBracket = Bracket.LO
if self.bracket == Bracket.LO:
tempBracket = Bracket.RC
if self.bracket == Bracket.RO:
tempBracket = Bracket.LC
return BracketNum(tempValue, tempBracket)
def __lt__(self, bn):
if self.value == '+':
return False
elif bn.value == '+':
return True
elif float(self.value) > float(bn.value):
return False
elif float(self.value) < float(bn.value):
return True
else:
if self.bracket < bn.bracket:
return True
else:
return False
def getBN(self):
if self.bracket == Bracket.LC:
return '[' + self.value
if self.bracket == Bracket.LO:
return '(' + self.value
if self.bracket == Bracket.RC:
return self.value + ']'
if self.bracket == Bracket.RO:
return self.value + ')'
class Guard:
def __init__(self, guard):
self.guard = guard
self.__build()
def __build(self):
min_type, max_type = self.guard.split(',')
# 处理左边
if min_type[0] == '[':
self.closed_min = True
min_bn_bracket = Bracket.LC
else:
self.closed_min = False
min_bn_bracket = Bracket.LO
self.min_value = min_type[1:].strip()
self.min_bn = BracketNum(self.min_value, min_bn_bracket)
# 处理右边
if max_type[-1] == ']':
self.closed_max = True
max_bn_bracket = Bracket.RC
else:
self.closed_max = False
max_bn_bracket = Bracket.RO
self.max_value = max_type[:-1].strip()
self.max_bn = BracketNum(self.max_value, max_bn_bracket)
def isEmpty(self):
if self.max_bn < self.min_bn:
return True
else:
return False
def __eq__(self, constraint):
if self.min_value == constraint.min_value and self.closed_min == constraint.closed_min and self.max_value == constraint.max_value and self.closed_max == constraint.closed_max:
return True
else:
return False
def isInInterval(self, num):
if num < self.get_min():
return False
elif num == self.get_min():
if self.closed_min:
return True
else:
return False
elif self.get_min() < num < self.get_max():
return True
elif num == self.get_max():
if self.closed_max:
return True
else:
return False
else:
return False
def get_min(self):
return float(self.min_value)
def get_closed_min(self):
return self.closed_min
def get_max(self):
if self.max_value == '+':
return float("inf")
else:
return float(self.max_value)
def get_closed_max(self):
return self.closed_max
def show(self):
return self.guard