1 | import os |
---|
2 | import sys |
---|
3 | import array as arr |
---|
4 | import collections |
---|
5 | |
---|
6 | from collections import Counter |
---|
7 | |
---|
8 | |
---|
9 | def filename_list_generator(file_to_open): |
---|
10 | word = "" |
---|
11 | with open(file_to_open, "r") as file: |
---|
12 | file.read(0) |
---|
13 | for line in file: |
---|
14 | for word in line.split(" "): |
---|
15 | if word.endswith(".nc") or word.endswith("_nc_files"): |
---|
16 | yield word |
---|
17 | break |
---|
18 | |
---|
19 | def configname_list_generator(file_to_open): |
---|
20 | word = "" |
---|
21 | with open(file_to_open, "r") as file: |
---|
22 | file.read(0) |
---|
23 | for line in file: |
---|
24 | for word in line.split(" "): |
---|
25 | if "config_" in word: |
---|
26 | yield word |
---|
27 | break |
---|
28 | |
---|
29 | def foldername_list_generator(file_to_open): |
---|
30 | word = "" |
---|
31 | |
---|
32 | with open(file_to_open, "r") as file: |
---|
33 | file.read(0) |
---|
34 | for line in file: |
---|
35 | for word in line.split(" "): |
---|
36 | if word.startswith("test_"): |
---|
37 | yield word |
---|
38 | break |
---|
39 | |
---|
40 | def result_list_generator(file_to_open): |
---|
41 | word = "" |
---|
42 | with open(file_to_open, "r") as file: |
---|
43 | file.read(0) |
---|
44 | for line in file: |
---|
45 | for word in line.split(" "): |
---|
46 | if word == '-1' or word == '0' or word == '1': |
---|
47 | yield(word) |
---|
48 | break |
---|
49 | |
---|
50 | |
---|
51 | |
---|
52 | def main(): |
---|
53 | |
---|
54 | if os.path.exists('plein_report.txt') : |
---|
55 | file_to_open="plein_report.txt" |
---|
56 | else : |
---|
57 | file_to_open="plein_report_example.txt" |
---|
58 | |
---|
59 | folderlist=[] |
---|
60 | for x in foldername_list_generator(file_to_open): |
---|
61 | folderlist.append(x) |
---|
62 | |
---|
63 | configlist=[] |
---|
64 | for x in configname_list_generator(file_to_open): |
---|
65 | configlist.append(x) |
---|
66 | |
---|
67 | filelist=[] |
---|
68 | for x in filename_list_generator(file_to_open): |
---|
69 | filelist.append(x) |
---|
70 | |
---|
71 | resultlist=[] |
---|
72 | for x in result_list_generator(file_to_open): |
---|
73 | resultlist.append(x) |
---|
74 | |
---|
75 | total_records = len(resultlist) |
---|
76 | |
---|
77 | c = Counter(folderlist) |
---|
78 | nb_level1 = len(c) |
---|
79 | |
---|
80 | my_struncture = dict() |
---|
81 | |
---|
82 | for i in range(nb_level1): |
---|
83 | my_key1 = list(c.keys())[i] # algo_name |
---|
84 | my_struncture.update({my_key1 : dict()}) |
---|
85 | min_range=-1 |
---|
86 | for index in range(total_records) : |
---|
87 | if my_key1 == folderlist[index] : |
---|
88 | if min_range == -1 : |
---|
89 | min_range = index |
---|
90 | max_range = index |
---|
91 | else : |
---|
92 | max_range = index |
---|
93 | cc = Counter(configlist[min_range: max_range+1]) |
---|
94 | nb_level2 = len(cc) |
---|
95 | |
---|
96 | for j in range(nb_level2) : |
---|
97 | my_key2 = list(cc.keys())[j] #config_name |
---|
98 | my_struncture[my_key1].update({my_key2:dict()}) |
---|
99 | min_range = -1 |
---|
100 | for index in range(total_records) : |
---|
101 | if my_key2 == configlist[index] : |
---|
102 | if min_range == -1 : |
---|
103 | min_range = index |
---|
104 | max_range = index |
---|
105 | else : |
---|
106 | max_range = index |
---|
107 | |
---|
108 | ccc = Counter(filelist[min_range: max_range+1]) |
---|
109 | nb_level3 = len(ccc) |
---|
110 | |
---|
111 | for k in range(nb_level3) : |
---|
112 | my_key3 = list(ccc.keys())[k] #filename |
---|
113 | |
---|
114 | min_range = -1 |
---|
115 | for index in range(total_records) : |
---|
116 | if my_key3 == filelist[index] : |
---|
117 | if min_range == -1 : |
---|
118 | min_range = index |
---|
119 | max_range = index |
---|
120 | else : |
---|
121 | max_range = index |
---|
122 | my_struncture[my_key1][my_key2].update({my_key3:resultlist[min_range]}) |
---|
123 | |
---|
124 | |
---|
125 | |
---|
126 | nb_algo = len(my_struncture) |
---|
127 | |
---|
128 | for x in range(nb_algo) : |
---|
129 | algo_name = list(my_struncture.keys())[x] |
---|
130 | nb_config = len(my_struncture[algo_name]) |
---|
131 | for y in range(nb_config) : |
---|
132 | config_name = list(my_struncture[algo_name].keys())[y] |
---|
133 | nb_file = len(my_struncture[algo_name][config_name]) |
---|
134 | |
---|
135 | |
---|
136 | algo_names=list(my_struncture.keys()) |
---|
137 | |
---|
138 | nb_files = [0]*nb_algo |
---|
139 | nb_configs = [0]*nb_algo |
---|
140 | |
---|
141 | for x in range(nb_algo) : |
---|
142 | nb_files[x] = len(my_struncture[list(my_struncture.keys())[x]][list(my_struncture[list(my_struncture.keys())[x]].keys())[0]]) |
---|
143 | nb_configs[x] = len(my_struncture[list(my_struncture.keys())[x]]) |
---|
144 | |
---|
145 | |
---|
146 | level1_answer=1 |
---|
147 | level2_answer=[1]*nb_algo |
---|
148 | |
---|
149 | level3_answer = [[]]*nb_algo |
---|
150 | for x in range(nb_algo) : |
---|
151 | level3_answer[x] = [1]*nb_configs[x] |
---|
152 | |
---|
153 | level4_answer = [[[]]]*nb_algo |
---|
154 | for x in range(nb_algo) : |
---|
155 | level4_answer[x] = [[]]*nb_configs[x] |
---|
156 | for y in range(nb_configs[x]) : |
---|
157 | level4_answer[x][y] = [1]*nb_files[x] |
---|
158 | for z in range(nb_files[x]) : |
---|
159 | x_dict = my_struncture |
---|
160 | y_dict = x_dict[list(x_dict.keys())[x]] |
---|
161 | z_dict = y_dict[list(y_dict.keys())[y]] |
---|
162 | level4_answer[x][y][z] = int(z_dict[list(z_dict.keys())[z]]) |
---|
163 | |
---|
164 | index=0 |
---|
165 | for x in range(nb_algo): |
---|
166 | for y in range(len(level3_answer[x])): |
---|
167 | for z in range(len(level4_answer[x][y])): |
---|
168 | level3_answer[x][y] = min(level4_answer[x][y][z], level3_answer[x][y]) |
---|
169 | index+=1 |
---|
170 | |
---|
171 | index=0 |
---|
172 | for x in range(len(level2_answer)): |
---|
173 | for y in range(len(level3_answer[x])): |
---|
174 | level2_answer[x] = min(level2_answer[x], level3_answer[x][y]) |
---|
175 | index+=1 |
---|
176 | |
---|
177 | for x in range(len(level2_answer)): |
---|
178 | level1_answer = min(level1_answer, level2_answer[x]) |
---|
179 | |
---|
180 | # ans_dict = {-1: 'Failed', 0: 'Initialized', 1: 'Passed'} |
---|
181 | ans_dict = {-1: '❌', 0: '❎', 1: '✅'} |
---|
182 | |
---|
183 | algo_list = list(my_struncture.keys()) |
---|
184 | |
---|
185 | |
---|
186 | config_list=[] |
---|
187 | for x in range(nb_algo) : |
---|
188 | my_list = list(my_struncture[list(my_struncture.keys())[x]].keys()) |
---|
189 | for y in range(len(my_list)) : |
---|
190 | config_list.append(my_list[y]) |
---|
191 | |
---|
192 | |
---|
193 | file_list=[] |
---|
194 | for x in range(nb_algo) : |
---|
195 | l = list(my_struncture.keys())[x] |
---|
196 | ll = list(my_struncture[l].keys())[0] |
---|
197 | lll = list(my_struncture[l][ll].keys()) |
---|
198 | for y in range(len(lll)) : |
---|
199 | file_list.append(lll[y]) |
---|
200 | |
---|
201 | |
---|
202 | old_config_list=config_list[:] |
---|
203 | for x in range(len(config_list)) : |
---|
204 | word = config_list[x] |
---|
205 | new_word='' |
---|
206 | for i in range(len(word)) : |
---|
207 | if word[i]=="@" : |
---|
208 | new_word = word[i+1:] |
---|
209 | break |
---|
210 | # old_config_list.append(new_word) |
---|
211 | old_config_list[x]=new_word |
---|
212 | word = new_word.replace("config_", "CONFIG: ") |
---|
213 | new_word = word.replace("_", " ") |
---|
214 | config_list[x] = new_word |
---|
215 | |
---|
216 | |
---|
217 | for x in range(len(file_list)) : |
---|
218 | word = file_list[x] |
---|
219 | new_word='' |
---|
220 | for i in range(len(word)) : |
---|
221 | if word[i]=="@" : |
---|
222 | new_word = word[i+1:] |
---|
223 | break |
---|
224 | file_list[x] = new_word |
---|
225 | |
---|
226 | for x in range(len(file_list)) : |
---|
227 | word = file_list[x] |
---|
228 | new_word='' |
---|
229 | for i in range(len(word)) : |
---|
230 | if word[i]=="@" : |
---|
231 | new_word = word[i+1:] |
---|
232 | break |
---|
233 | file_list[x] = new_word |
---|
234 | |
---|
235 | |
---|
236 | f=open("xios_table.js", "w") |
---|
237 | f.write("document.write(`\n") |
---|
238 | f.write("<html>\n") |
---|
239 | f.write("<head>\n") |
---|
240 | f.write("</head>\n") |
---|
241 | f.write("<body>\n") |
---|
242 | f.write(" <table id=\"xiostable\">\n") |
---|
243 | f.write(" <thead></thead>\n") |
---|
244 | f.write(" <tfoot></tfoot>\n") |
---|
245 | f.write(" <tbody>\n") |
---|
246 | f.write(" <tr class=\"level0\" style=\"background-color:#85c1e9;font-size:1em;\" >\n") |
---|
247 | f.write(" <td><p>src : "+file_to_open+"</p>\n") |
---|
248 | f.write(" <p><ul><li>❌ : Failed</li><li>❎ : Initialized</li><li>✅ : Passed</li></ul></p></tb>\n") |
---|
249 | f.write(" <td></td>\n") |
---|
250 | f.write(" <td></td>\n") |
---|
251 | f.write(" <td></td>\n") |
---|
252 | f.write(" <td></td>\n") |
---|
253 | f.write(" <td></td>\n") |
---|
254 | f.write(" <td></td>\n") |
---|
255 | f.write(" <td></td>\n") |
---|
256 | f.write(" </tr>\n") |
---|
257 | f.write(" <tr class=\"level1\" style=\"background-color:#85c1e9;font-size:1.6em;\" >\n") |
---|
258 | f.write(" <td>XIOS Unit tests <span id=\"icon_level1_1\" onclick=\"level1_unfold();\" style=\"display:inline\" title=\"unfold\">🔽</span>\n") |
---|
259 | f.write(" <span id=\"icon_level1_2\" onclick=\"level1_fold();\" style=\"display:none\" title=\"fold\">🔼</span></td>\n") |
---|
260 | f.write(" <td></td>\n") |
---|
261 | f.write(" <td></td>\n") |
---|
262 | f.write(" <td></td>\n") |
---|
263 | f.write(" <td style=\"border-left: 0px\" class=\"testanswer\">"+ ans_dict[level1_answer]+"</td>\n") |
---|
264 | f.write(" <td></td>\n") |
---|
265 | f.write(" <td></td>\n") |
---|
266 | f.write(" <td></td>\n") |
---|
267 | f.write(" </tr>\n") |
---|
268 | |
---|
269 | |
---|
270 | x_offset = 0 |
---|
271 | y_offset = 0 |
---|
272 | for x in range(nb_algo): |
---|
273 | f.write(" <tr class=\"level2\" data-algo-type=\""+algo_list[x]+"\" style=\"display:none;background-color:#aed6f1;font-size:1.4em;\">\n") |
---|
274 | f.write(" <td></td>\n") |
---|
275 | f.write(" <td>"+algo_list[x]+" <span id=\"icon_level2_"+algo_list[x]+"_1\" onClick=\"level2_unfold(\'"+algo_list[x]+"\');\" style=\"display:inline\" title=\"unfold\">🔽</span>\n") |
---|
276 | f.write(" <span id=\"icon_level2_"+algo_list[x]+"_2\" onClick=\"level2_fold(\'"+algo_list[x]+"\');\" style=\"display:none\" title=\"fold\">🔼</span></td>\n") |
---|
277 | f.write(" <td><div class=\"dropdown\"><button class=\"dropbtn\">🔎</button>\n") |
---|
278 | f.write(" <div class=\"dropdown-content\">\n") |
---|
279 | f.write(" <a href=\"#\" onclick=\"show_param_"+algo_list[x]+"()\">show user_params.def</a>\n") |
---|
280 | f.write(" </div></div></td>\n") |
---|
281 | f.write(" <td> </td>\n") |
---|
282 | f.write(" <td> </td>\n") |
---|
283 | f.write(" <td class=\"testanswer\">"+ans_dict[level2_answer[x]]+"</td>\n") |
---|
284 | f.write(" <td> </td>\n") |
---|
285 | f.write(" <td> </td>\n") |
---|
286 | f.write(" </tr>\n") |
---|
287 | |
---|
288 | for y in range(nb_configs[x]): |
---|
289 | f.write(" <tr class=\"level3_"+algo_list[x]+"\" data-algoconfig-type=\""+algo_list[x]+"_"+old_config_list[y_offset]+"\" style=\"display:none;background-color:#d6eaf8;font-size:1.2em;\">\n") |
---|
290 | f.write(" <td></td>\n") |
---|
291 | f.write(" <td></td>\n") |
---|
292 | f.write(" <td>"+config_list[y_offset]+" <span id=\"icon_level3_"+algo_list[x]+"_"+old_config_list[y_offset]+"_1\" onClick=\"level3_unfold(\'"+algo_list[x]+"_"+old_config_list[y_offset]+"\');\" style=\"display:inline\" title=\"unfold\">🔽</span>\n") |
---|
293 | f.write(" <span id=\"icon_level3_"+algo_list[x]+"_"+old_config_list[y_offset]+"_2\" onClick=\"level3_fold(\'"+algo_list[x]+"_"+old_config_list[y_offset]+"\');\" style=\"display:none\" title=\"fold\">🔼</span></td>\n") |
---|
294 | f.write(" <td><div class=\"dropdown\"><button class=\"dropbtn\">🔎</button>\n") |
---|
295 | f.write(" <div class=\"dropdown-content\">\n") |
---|
296 | f.write(" <a href=\"#\" onclick=\"show_param_"+algo_list[x]+"_config("+repr(old_config_list[y_offset])+")\">show all_param.def</a>\n") |
---|
297 | f.write(" <a href=\"#\" onclick=\"show_user_param_"+algo_list[x]+"_config("+repr(old_config_list[y_offset])+")\">show user_param.def</a>\n") |
---|
298 | f.write(" </div></div></td>\n") |
---|
299 | y_position=y_offset |
---|
300 | y_offset+=1 |
---|
301 | f.write(" <td></td>\n") |
---|
302 | f.write(" <td></td>\n") |
---|
303 | f.write(" <td class=\"testanswer\">"+ ans_dict[level3_answer[x][y]]+"</td>\n") |
---|
304 | f.write(" <td></td>\n") |
---|
305 | f.write(" </tr>\n") |
---|
306 | |
---|
307 | for z in range(nb_files[x]): |
---|
308 | f.write(" <tr class=\"level4_"+algo_list[x]+"_"+old_config_list[y_position]+"\" style=\"display:none;background-color:#ebf5fb;\">\n") |
---|
309 | f.write(" <td></td>\n") |
---|
310 | f.write(" <td></td>\n") |
---|
311 | f.write(" <td></td>\n") |
---|
312 | f.write(" <td>"+file_list[x_offset+z]+"</td>\n") |
---|
313 | f.write(" <td></td>\n") |
---|
314 | f.write(" <td></td>\n") |
---|
315 | f.write(" <td></td>\n") |
---|
316 | f.write(" <td class=\"testanswer\">"+ ans_dict[level4_answer[x][y][z]]+"</td>\n") |
---|
317 | f.write(" </tr>\n") |
---|
318 | |
---|
319 | x_offset = x_offset+nb_files[x] |
---|
320 | |
---|
321 | f.write(" </tbody>\n") |
---|
322 | f.write(" </table>\n") |
---|
323 | f.write("<script>\n") |
---|
324 | f.write(" var ans = document.getElementsByClassName('testanswer')\n") |
---|
325 | f.write(" for (var i = 0; i < ans.length; i++) {\n") |
---|
326 | f.write(" var cell = ans[i]\n") |
---|
327 | f.write(" if (cell.textContent == 'Passed') {\n") |
---|
328 | f.write(" cell.classList.add('green') }\n") |
---|
329 | f.write(" else if (cell.textContent == 'Failed') {\n") |
---|
330 | f.write(" cell.classList.add('red') }\n") |
---|
331 | f.write(" else if (cell.textContent == 'Initialized') {\n") |
---|
332 | f.write(" cell.classList.add('goldenrod') }\n") |
---|
333 | f.write(" }\n") |
---|
334 | |
---|
335 | f.write("\n\n") |
---|
336 | |
---|
337 | f.write("</script>\n") |
---|
338 | |
---|
339 | f.write("</body>\n") |
---|
340 | f.write("</html>\n") |
---|
341 | f.write("`);\n") |
---|
342 | |
---|
343 | |
---|
344 | |
---|
345 | f.close() |
---|
346 | |
---|
347 | |
---|
348 | if __name__== "__main__": |
---|
349 | main() |
---|
350 | |
---|
351 | |
---|