diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 9215353..2162d72 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -2,6 +2,8 @@ + + - + + + + @@ -91,7 +117,7 @@ @@ -111,24 +137,13 @@ - - - file://$PROJECT_DIR$/speedy_gonzolas.py - 87 - - - file://$PROJECT_DIR$/speedy_gonzolas.py - 97 - - + @@ -139,6 +154,7 @@ - + + \ No newline at end of file diff --git a/__pycache__/groups.cpython-38.pyc b/__pycache__/groups.cpython-38.pyc new file mode 100644 index 0000000..7b584cd Binary files /dev/null and b/__pycache__/groups.cpython-38.pyc differ diff --git a/groups.py b/groups.py new file mode 100644 index 0000000..563e24e --- /dev/null +++ b/groups.py @@ -0,0 +1,45 @@ +def cons(it, elem): + yield from it + yield elem + + +def ezmults(ngens, rels): + mults = [[2] * ngens for _ in range(ngens)] + + for (f, t), m in rels: + mults[f][t] = m + mults[t][f] = m + + for i in range(ngens - 1): + for j in range(i + 1, ngens): + yield ((i, j), mults[i][j]) + + +def schlafli(*mults): + ngens = len(mults) + 1 + return ngens, ezmults(ngens, (((i, i + 1), mult) for i, mult in enumerate(mults))) + + +def torus(n): + return schlafli(n, 2, n) + + +def cube(dim): + return schlafli(4, *[3] * (dim - 2)) + + +def icos(dim): + assert 2 <= dim <= 4 + + return schlafli(5, *[3] * (dim - 2)) + + +def E(n): + ngens, mults = schlafli(*[3] * (n - 2), 2) + mults = cons(mults, ((2, n - 1), 3)) + return ngens, ezmults(ngens, mults) + + +if __name__ == '__main__': + a, b = E(8) + print(list(b)) diff --git a/speedy_gonzolas.py b/speedy_gonzolas.py index a20d506..42604bc 100644 --- a/speedy_gonzolas.py +++ b/speedy_gonzolas.py @@ -1,5 +1,7 @@ from typing import List +import groups + class Cosets: def __init__(self, ngens, data=()): @@ -132,22 +134,36 @@ def solve(cosets: Cosets, rel_tables: List[RelTable]): if count == 1: rel.gen[target] = -1 + return cosets + + +def init(ngens, mults, sub_gens=()): + initial_row = [-1] * ngens + for s in sub_gens: + initial_row[s] = 0 + + cosets = Cosets(ngens, initial_row) + rel_tables = [RelTable(*a) for a in mults] + return cosets, rel_tables + if __name__ == '__main__': - # cosets = Cosets(3) - # mults = [((0, 1), 50000), ((1, 2), 2), ((0, 2), 2)] + # result = solve(*init_schlafli(5, 3, 3)) + # result = solve(*init_schlafli(300, 2, 300)) - cosets = Cosets(4) - n = 100 - mults = [((0, 1), 5), ((1, 2), 3), ((2, 3), 3), - ((0, 2), 2), ((1, 3), 2), ((0, 3), 2)] + # group = groups.schlafli(4, 3, 3, 3, 3) + group = groups.E(6) - rel_tables = [RelTable(*args) for args in mults] + import time - solve(cosets, rel_tables) + s = time.time() + result = solve(*init(*group)) + e = time.time() - print(len(cosets)) - if len(cosets) < 20: - print(cosets) + print(e - s, 's') + + print(len(result)) + if len(result) < 20: + print(result) else: print('--')