Skip to content

Commit 25cbb18

Browse files
authored
Merge pull request #2819 from vvbandeira/rules-update-one
utils: add option to only change one rule
2 parents cb76c3b + 36878d2 commit 25cbb18

File tree

1 file changed

+52
-9
lines changed

1 file changed

+52
-9
lines changed

flow/util/genRuleFile.py

Lines changed: 52 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
364390
if __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

Comments
 (0)