forked from congy/chestnut
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathutil.py
149 lines (125 loc) · 3.2 KB
/
util.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
146
147
148
149
import random
import string
def clean_lst(lst):
return filter(lambda x: x is not None, lst)
def get_capitalized_name(name):
return ''.join([s.capitalize() for s in name.split('_')])
def set_minus(a, b, eq_func=(lambda x,y: x==y)):
r = []
for ele in a:
exist = any([eq_func(ele, ele1) for ele1 in b])
if not exist:
r.append(ele)
return r
def set_intersect(a, b, eq_func=(lambda x,y: x==y)):
r = []
for ele in a:
exist = False
for ele1 in b:
if eq_func(ele, ele1):
exist = True
if exist:
r.append(ele)
return r
def map_contain(a, key, eq_func=(lambda x,y: x==y)):
for k,v in a.items():
if k == key:
return v
return None
def set_equal(a, b, eq_func=(lambda x,y: x==y)):
if len(a) != len(b):
return False
for ele in a:
exist = False
for ele1 in b:
if eq_func(ele, ele1):
exist = True
if not exist:
return False
return True
def list_equal(a, b, eq_func=(lambda x,y: x==y)):
return len(a) == len(b) and all([eq_func(a[i],b[i]) for i in range(0, len(a))])
def map_equal(a, b, value_func=(lambda x,y: x==y)):
return len(a) == len(b) and all([k in b and value_func(v, b[k]) for k,v in a.items()])
def set_no_duplicate(a, eq_func=(lambda x,y: x==y)):
for i,ele in enumerate(a):
for j,ele in enumerate(a):
if i != j and eq_func(i, j):
return False
return True
def set_union(a, b, eq_func=(lambda x,y: x==y)):
for ele in b:
if not any([eq_func(x,ele) for x in a]):
a.append(ele)
return a
def map_union(a, b, merge_func=(lambda x,y: x)):
r = {}
for k,v in a.items():
r[k] = v
for k,v in b.items():
if k not in a:
r[k] = v
else:
r[k] = merge_func(a[k], v)
return r
def map_intersect(a, b, intersect_func=(lambda x,y: x)):
r = {}
for k,v in b.items():
if k in a:
r[k] = intersect_func(a[k], v)
return r
def set_include(a, b, eq_func=(lambda x,y: x==y)): #a include b
for ele in b:
exist = False
for ele1 in a:
if eq_func(ele, ele1):
exist = True
if not exist:
return False
return True
def set_conjunct(a, b, eq_func):
r = []
for ele in a:
for ele1 in b:
if eq_func(ele, ele1):
r.append(ele)
break
return r
def list_map_union(list_map):
r = {}
for m in list_map:
r = map_union(r, m)
return r
def list_union(lsts):
r = []
for l in lsts:
r = r + l
return r
def add_to_list_map(k, v, mp):
for k1,v1 in mp.items():
if k1==k:
v1.append(v)
return
mp[k] = [v]
def list_combine(lsts):
r = [s for s in lsts[0]]
for l in lsts[1:]:
r = r + l
return r
def insert_no_duplicate(lst, ele, eq_func=(lambda x,y:x==y)):
if not any([eq_func(x,ele) for x in lst]):
lst.append(ele)
def remove_duplicate(lst):
r = []
for l in lst:
if l not in r:
r.append(l)
return r
def insert_indent(s, indent_level=1):
indent = ''.join([' ' for i in range(0, indent_level)])
return ('\n'.join([indent+l if len(l) > 0 else l for l in s.split('\n')])+'\n')
def get_random_string(length):
chars = "".join( [random.choice(string.letters) for i in xrange(length)] )
return chars
def get_random_length(minl,maxl):
return random.randint(minl, maxl)