@@ -362,6 +362,13 @@ def main():
362
362
group = groupname ,
363
363
)
364
364
365
+ cmdline .add_flag (
366
+ "combinations" ,
367
+ "combinations" ,
368
+ "Only generate combinations of the given instructions" ,
369
+ group = groupname ,
370
+ )
371
+
365
372
cmdline .add_flag (
366
373
"shortnames" ,
367
374
"sn" ,
@@ -392,7 +399,7 @@ def main():
392
399
@typeguard_testsuite
393
400
def _generate_sequences (slots : int , instruction_groups , instruction_map ,
394
401
group_max : List [int ], group_min : List [int ],
395
- base_seq : List [InstructionType ]):
402
+ base_seq : List [InstructionType ], combinations : bool ):
396
403
397
404
instr_names = []
398
405
instr_objs = []
@@ -435,6 +442,8 @@ def _generate_sequences(slots: int, instruction_groups, instruction_map,
435
442
f"\t Max intr: { group_max [idx ]} " )
436
443
print_info ("" )
437
444
445
+ seen = set ()
446
+
438
447
for seq in itertools .product (* [descr [1 ] for descr in slot_dsrc ]):
439
448
valid = True
440
449
for idx , igroup in enumerate (instruction_groups ):
@@ -460,6 +469,13 @@ def _generate_sequences(slots: int, instruction_groups, instruction_map,
460
469
instr_obj for instr_obj in instr_objs
461
470
if instr_obj .name == instrname
462
471
]
472
+ if combinations :
473
+ # Only generate combinations, not permutations
474
+ if tuple (sorted (sequence )) in seen :
475
+ continue
476
+ else :
477
+ seen .add (tuple (sorted (sequence )))
478
+
463
479
yield base_seq + sequence
464
480
465
481
@@ -591,11 +607,13 @@ def _main(arguments):
591
607
if 'base_seq' in arguments :
592
608
base_seq = parse_instruction_list (target , arguments ['base_seq' ])
593
609
610
+ combinations = "combinations" in arguments
611
+
594
612
sequences = [base_seq ]
595
613
if len (instruction_groups ) > 0 :
596
614
sequences = _generate_sequences (slots , instruction_groups ,
597
615
instruction_map , group_max , group_min ,
598
- base_seq )
616
+ base_seq , combinations )
599
617
600
618
sequences = [seq for seq in sequences if seq ]
601
619
if not sequences :
@@ -634,7 +652,7 @@ def _main(arguments):
634
652
arguments ['compress' ] = False
635
653
636
654
# process batches
637
- print_info ("Num sequences difined : %d" % len (sequences ))
655
+ print_info ("Num sequences defined : %d" % len (sequences ))
638
656
print_info ("Number of batches: %d " % arguments ["num_batches" ])
639
657
print_info ("Batch number: %d " % arguments ["batch_number" ])
640
658
0 commit comments