aced/aux/permutations.py

70 lines
3.0 KiB
Python

"""Gives the permutations of a row
Given a row in P notation (space separated coefficients), prints out all the P
rows resulting from label permutation.
"""
import argparse
import itertools
def get_idx(a_out, b_out, a_in, b_in, a_out_i, b_out_i, a_in_i, b_in_i):
return b_out_i + b_out * (b_in_i + b_in * (a_out_i + a_out * a_in_i))
if __name__ == "__main__":
doclines = __doc__.splitlines()
description = doclines[0]
epilog = "\n".join(doclines[1:])
parser = argparse.ArgumentParser(description=description, epilog=epilog)
parser.add_argument("<A outputs>", type=int, help="Number of outputs for Alice.")
parser.add_argument("<B outputs>", type=int, help="Number of outputs for Bob.")
parser.add_argument("<A inputs>", type=int, help="Number of inputs for Alice.")
parser.add_argument("<B inputs>", type=int, help="Number of inputs for Bob.")
# parser.add_argument(
# "--overwrite", action="store_true", help="Overwrite an existing file."
# )
args = vars(parser.parse_args())
a_out = args["<A outputs>"]
b_out = args["<B outputs>"]
a_in = args["<A inputs>"]
b_in = args["<B inputs>"]
row = [int(x) for x in input().split(',')]
b_out_permutations = list(itertools.permutations(range(b_out)))
a_out_permutations = list(itertools.permutations(range(a_out)))
for a_in_perm in itertools.permutations(range(a_in)):
for b_in_perm in itertools.permutations(range(b_in)):
for a_out_perms in itertools.product(a_out_permutations, repeat=a_in):
for b_out_perms in itertools.product(b_out_permutations, repeat=b_in):
perm_row = ["-" for _ in range(len(row))]
for a_in_i in range(a_in):
for b_in_i in range(b_in):
for a_out_i in range(a_out):
for b_out_i in range(b_out):
u = get_idx(
a_out,
b_out,
a_in,
b_in,
a_out_i,
b_out_i,
a_in_i,
b_in_i,
)
v = get_idx(
a_out,
b_out,
a_in,
b_in,
a_out_perms[a_in_perm[a_in_i]][a_out_i],
b_out_perms[b_in_perm[b_in_i]][b_out_i],
a_in_perm[a_in_i],
b_in_perm[b_in_i],
)
perm_row[v] = row[u]
print(perm_row)