@@ -52,7 +52,7 @@ def get_metrics(commitSHA, platform, design, api_base_url):
5252 return None , f"An error occurred: { str (e )} "
5353
5454
55- def update_rules (designDir , variant , golden_metrics , overwrite ):
55+ def update_rules (designDir , variant , golden_metrics , overwrite , metrics_to_consider ):
5656 if overwrite :
5757 gen_rule_file (
5858 designDir , # design directory
@@ -61,6 +61,7 @@ def update_rules(designDir, variant, golden_metrics, overwrite):
6161 False , # failing
6262 variant , # variant
6363 golden_metrics , # metrics needed for update, default is {} in case of file
64+ metrics_to_consider ,
6465 )
6566 else :
6667 gen_rule_file (
@@ -70,10 +71,19 @@ def update_rules(designDir, variant, golden_metrics, overwrite):
7071 False , # failing
7172 variant , # variant
7273 golden_metrics , # metrics needed for update, default is {} in case of file
74+ metrics_to_consider ,
7375 )
7476
7577
76- def gen_rule_file (design_dir , update , tighten , failing , variant , golden_metrics = {}):
78+ def gen_rule_file (
79+ design_dir ,
80+ update ,
81+ tighten ,
82+ failing ,
83+ variant ,
84+ golden_metrics = {},
85+ metrics_to_consider = [],
86+ ):
7787 original_directory = getcwd ()
7888 chdir (design_dir )
7989
@@ -307,7 +317,17 @@ def gen_rule_file(design_dir, update, tighten, failing, variant, golden_metrics=
307317 else :
308318 rule_value = ceil (rule_value * 100 ) / 100.0
309319
310- if OLD_RULES is not None and field in OLD_RULES .keys ():
320+ preserve_old_rule = (
321+ True
322+ if len (metrics_to_consider ) > 0 and field not in metrics_to_consider
323+ else False
324+ )
325+ has_old_rule = OLD_RULES is not None and field in OLD_RULES .keys ()
326+
327+ if has_old_rule and preserve_old_rule :
328+ rule_value = OLD_RULES [field ]["value" ]
329+
330+ if has_old_rule and not preserve_old_rule :
311331 old_rule = OLD_RULES [field ]
312332 if old_rule ["compare" ] != option ["compare" ]:
313333 print ("[WARNING] Compare operator changed since last update." )
@@ -321,30 +341,30 @@ def gen_rule_file(design_dir, update, tighten, failing, variant, golden_metrics=
321341 else :
322342 rule_value = ceil (rule_value * 100 ) / 100.0
323343
324- UPDATE = False
344+ need_to_update = False
325345 if (
326346 tighten
327347 and rule_value != old_rule ["value" ]
328348 and compare (rule_value , old_rule ["value" ])
329349 ):
330- UPDATE = True
350+ need_to_update = True
331351 change_str += format_str .format (
332352 field , old_rule ["value" ], rule_value , "Tighten"
333353 )
334354
335355 if failing and not compare (metrics [field ], old_rule ["value" ]):
336- UPDATE = True
356+ need_to_update = True
337357 change_str += format_str .format (
338358 field , old_rule ["value" ], rule_value , "Failing"
339359 )
340360
341361 if update and old_rule ["value" ] != rule_value :
342- UPDATE = True
362+ need_to_update = True
343363 change_str += format_str .format (
344364 field , old_rule ["value" ], rule_value , "Updating"
345365 )
346366
347- if not UPDATE :
367+ if not need_to_update :
348368 rule_value = old_rule ["value" ]
349369
350370 rules [field ] = dict (value = rule_value , compare = option ["compare" ])
@@ -361,6 +381,12 @@ def gen_rule_file(design_dir, update, tighten, failing, variant, golden_metrics=
361381 chdir (original_directory )
362382
363383
384+ def comma_separated_list (value ):
385+ if value is None or value == "all" :
386+ return []
387+ return [item .strip () for item in value .split ("," )]
388+
389+
364390if __name__ == "__main__" :
365391 parser = argparse .ArgumentParser (
366392 description = "Generates or updates rules file for CI."
@@ -390,6 +416,13 @@ def gen_rule_file(design_dir, update, tighten, failing, variant, golden_metrics=
390416 default = False ,
391417 help = "Update failing rules." ,
392418 )
419+ parser .add_argument (
420+ "-m" ,
421+ "--metrics" ,
422+ type = comma_separated_list ,
423+ default = "all" ,
424+ help = "Only consider the following metrics to change. [default=all]" ,
425+ )
393426 args = parser .parse_args ()
394427
395428 if not args .update and not args .tighten and not args .failing :
@@ -400,4 +433,14 @@ def gen_rule_file(design_dir, update, tighten, failing, variant, golden_metrics=
400433 parser .print_help ()
401434 sys .exit (1 )
402435
403- gen_rule_file (args .dir , args .update , args .tighten , args .failing , args .variant )
436+ golden_metrics = {}
437+
438+ gen_rule_file (
439+ args .dir ,
440+ args .update ,
441+ args .tighten ,
442+ args .failing ,
443+ args .variant ,
444+ golden_metrics ,
445+ args .metrics ,
446+ )
0 commit comments