source: XIOS/dev/dev_trunk_omp/GENERIC_TESTCASE/generate_table.py @ 1774

Last change on this file since 1774 was 1774, checked in by yushan, 4 years ago

dev_trunk_omp : html update

File size: 13.4 KB
Line 
1import os
2import sys
3import array as arr
4import collections
5
6from collections import Counter
7
8
9def 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
19def 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
29def 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
40def 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
52def 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: '&#10062', 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.html", "w")
237    f.write("<html>\n")
238    f.write("<head>\n")
239    f.write("</head>\n")
240    f.write("<body>\n")
241    f.write("   <table id=\"xiostable\">\n")
242    f.write("       <thead></thead>\n")
243    f.write("       <tfoot></tfoot>\n")
244    f.write("       <tbody>\n")
245    f.write("           <tr class=\"level0\" style=\"background-color:#85c1e9;font-size:1em;\" >\n")
246    f.write("               <td><p>src : "+file_to_open+"</p>\n")
247    f.write("               <p><ul><li>&#10060; : Failed</li><li>&#10062; : Initialized</li><li>&#9989; : Passed</li></ul></p></tb>\n")
248    f.write("               <td></td>\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("           </tr>\n")
256    f.write("           <tr class=\"level1\" style=\"background-color:#85c1e9;font-size:1.6em;\" >\n")
257    f.write("               <td>XIOS Unit tests <span id=\"icon_level1_1\" onclick=\"level1_unfold();\" style=\"display:inline\" title=\"unfold\">&#128317;</span>\n")
258    f.write("                                   <span id=\"icon_level1_2\" onclick=\"level1_fold();\" style=\"display:none\" title=\"fold\">&#128316;</span></td>\n")
259    f.write("               <td></td>\n")
260    f.write("               <td></td>\n")
261    f.write("               <td></td>\n")
262    f.write("               <td style=\"border-left: 0px\" class=\"testanswer\">"+ ans_dict[level1_answer]+"</td>\n")
263    f.write("               <td></td>\n")
264    f.write("               <td></td>\n")
265    f.write("               <td></td>\n")
266    f.write("           </tr>\n")
267       
268   
269    x_offset = 0
270    y_offset = 0
271    for x in range(nb_algo):
272        f.write("           <tr class=\"level2\" data-algo-type=\""+algo_list[x]+"\" style=\"display:none;background-color:#aed6f1;font-size:1.4em;\">\n")
273        f.write("               <td></td>\n")
274        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\">&#128317;</span>\n")
275        f.write("                                    <span id=\"icon_level2_"+algo_list[x]+"_2\" onClick=\"level2_fold(\'"+algo_list[x]+"\');\" style=\"display:none\" title=\"fold\">&#128316;</span></td>\n")
276        f.write("               <td><div class=\"dropdown\"><button class=\"dropbtn\">&#128270;</button>\n")
277        f.write("               <div class=\"dropdown-content\">\n")
278        f.write("               <a href=\"#\" onclick=\"show_param_"+algo_list[x]+"()\">show user_params.def</a>\n")
279        f.write("               </div></div></td>\n")
280        f.write("               <td> </td>\n")
281        f.write("               <td> </td>\n")
282        f.write("               <td class=\"testanswer\">"+ans_dict[level2_answer[x]]+"</td>\n")
283        f.write("               <td> </td>\n")
284        f.write("               <td> </td>\n")
285        f.write("           </tr>\n")
286       
287        for y in range(nb_configs[x]):
288            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")
289            f.write("               <td></td>\n")
290            f.write("               <td></td>\n")
291            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\">&#128317;</span>\n")
292            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\">&#128316;</span></td>\n")
293            f.write("               <td><div class=\"dropdown\"><button class=\"dropbtn\">&#128270;</button>\n")
294            f.write("               <div class=\"dropdown-content\">\n")
295            f.write("               <a href=\"#\" onclick=\"show_param_"+algo_list[x]+"_config("+repr(old_config_list[y_offset])+")\">show all_param.def</a>\n")
296            f.write("               <a href=\"#\" onclick=\"show_user_param_"+algo_list[x]+"_config("+repr(old_config_list[y_offset])+")\">show user_param.def</a>\n")
297            f.write("               </div></div></td>\n")
298            y_position=y_offset
299            y_offset+=1
300            f.write("               <td></td>\n")
301            f.write("               <td></td>\n")
302            f.write("               <td class=\"testanswer\">"+ ans_dict[level3_answer[x][y]]+"</td>\n")
303            f.write("               <td></td>\n")
304            f.write("           </tr>\n")
305
306            for z in range(nb_files[x]):
307                f.write("           <tr class=\"level4_"+algo_list[x]+"_"+old_config_list[y_position]+"\" style=\"display:none;background-color:#ebf5fb;\">\n")
308                f.write("               <td></td>\n")
309                f.write("               <td></td>\n")
310                f.write("               <td></td>\n")
311                f.write("               <td>"+file_list[x_offset+z]+"</td>\n")
312                f.write("               <td></td>\n")
313                f.write("               <td></td>\n")
314                f.write("               <td></td>\n")
315                f.write("               <td class=\"testanswer\">"+ ans_dict[level4_answer[x][y][z]]+"</td>\n")
316                f.write("            </tr>\n")
317
318        x_offset = x_offset+nb_files[x]
319   
320    f.write("       </tbody>\n")
321    f.write("   </table>\n")
322    f.write("<script>\n")
323    f.write("   var ans = document.getElementsByClassName('testanswer')\n")
324    f.write("   for (var i = 0; i < ans.length; i++) {\n")
325    f.write("       var cell = ans[i]\n")
326    f.write("       if (cell.textContent == 'Passed') {\n")
327    f.write("           cell.classList.add('green') }\n")
328    f.write("       else if (cell.textContent == 'Failed') {\n")
329    f.write("           cell.classList.add('red') }\n")
330    f.write("       else if (cell.textContent == 'Initialized') {\n")
331    f.write("           cell.classList.add('goldenrod') }\n")
332    f.write("   }\n")
333
334    f.write("\n\n")
335   
336    f.write("</script>\n")
337
338    f.write("</body>\n")
339    f.write("</html>\n")
340
341
342
343    f.close()
344
345   
346if __name__== "__main__":
347  main()
348
349
Note: See TracBrowser for help on using the repository browser.