From dcdd3e78e5a621026fd8841723db73c7ca3f27e3 Mon Sep 17 00:00:00 2001 From: h7x4 Date: Mon, 17 May 2021 23:40:12 +0200 Subject: [PATCH] Remove hasse (moved to relations) --- exam_template/python/Hasse.py | 74 ----------------------------------- exam_template/python/run.py | 1 - 2 files changed, 75 deletions(-) delete mode 100644 exam_template/python/Hasse.py diff --git a/exam_template/python/Hasse.py b/exam_template/python/Hasse.py deleted file mode 100644 index a8dd5cb..0000000 --- a/exam_template/python/Hasse.py +++ /dev/null @@ -1,74 +0,0 @@ -from sys import argv -from pathlib import Path - -from common import printc, replaceContent - -# Increase if the diagram becomes too clobbered -HEIGHT_SEPARATOR = 1 - -# For manual usage via stdin -def getRels(relations=None): - if relations == None: - relations = input("Write the relations in the following format: ab ac ad bc cd ...\n") - relations = (tuple(list(x)) for x in relations.split(' ')) - return set(relations) - -# Generate divisibility graph by range -def divisibility_graph(n): - E = set() - for dst in range(n): - for src in range( 1, dst ): - if dst % src == 0: - E.add( ( src, dst ) ) - return E - -def hasse_diagram(E): - E2 = set() - for e0 in E: - for e1 in E: - if e0[1] == e1[0]: - E2.add( ( e0[0], e1[1] ) ) - return E - E2 - -def latex_hasse(hasse): - min_el = set(a for a,b in hasse if a not in list(zip(*hasse))[1]) - keys = set(item for tup in hasse for item in tup) - y_pos = dict.fromkeys(keys, 0) - - i = 0 - while len(next_row := [val for key,val in hasse if key in [x for x,y in y_pos.items() if y == i] ]) != 0: - for item in next_row: - y_pos[item] = i + 1 - i += 1 - - inv_ypos = dict() - for key in set(y_pos.values()): - inv_ypos[key] = [x for x,y in y_pos.items() if y == key] - - output = [] - - for y in inv_ypos.keys(): - for i, n in enumerate(inv_ypos[y]): - output.append(f'\\node ({n}) at ({i - len(inv_ypos[y])/2}, {y * HEIGHT_SEPARATOR}) {{${n}$}};') - - output.append('') - - for x,y in hasse: - output.append(f'\\draw ({x}) -- ({y});') - - - printc(f"Minimal elements: $\{{ {', '.join(str(e) for e in min_el)} \}}$ \\\\") - - max_el = set(v for k,v in hasse if v not in (x for x,_ in hasse)) - printc(f"Maximal elements: $\{{ {', '.join(str(e) for e in max_el)} \}}$" ) - - return '\n'.join(output) - -def processFileContent(raw): - rels = getRels(raw) - content = latex_hasse(hasse_diagram(rels)) - return replaceContent(content, 'Hasse') - - -if __name__ == '__main__': - pass diff --git a/exam_template/python/run.py b/exam_template/python/run.py index 8a332c8..d0af2dd 100644 --- a/exam_template/python/run.py +++ b/exam_template/python/run.py @@ -3,7 +3,6 @@ from pathlib import Path import FSA import Graph -import Hasse import Truthtable import Relations import InclusionExclusion