From 0259c6f907875b54e5d1df4bc89efa1c293d2812 Mon Sep 17 00:00:00 2001 From: Trygve Laugstøl Date: Mon, 27 May 2019 08:52:38 +0200 Subject: Adding Soufflé based reasoning on parts. Replacing default configuration with applying python function with this new reasoner. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ee/tools/part_apply_souffle_pre.py | 64 ++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 src/ee/tools/part_apply_souffle_pre.py (limited to 'src/ee/tools/part_apply_souffle_pre.py') diff --git a/src/ee/tools/part_apply_souffle_pre.py b/src/ee/tools/part_apply_souffle_pre.py new file mode 100644 index 0000000..d035ef7 --- /dev/null +++ b/src/ee/tools/part_apply_souffle_pre.py @@ -0,0 +1,64 @@ +import argparse +import csv +from pathlib import Path + +from ee import tools +from ee.part import Part, load_db +from ee.tools import mk_dirs + + +def work(in_path: Path, work_dir: Path): + in_parts = load_db(in_path) + + print_header = False + + tools.mk_dirs(work_dir) + with (work_dir / "facts.dl").open("w") as f: + print(".decl part(uri:symbol, ref:symbol)", file=f) + print(".input part", file=f) + print("", file=f) + print(".decl fact(part_uri:symbol, key:symbol, value:symbol)", file=f) + print(".input fact", file=f) + + part_count = 0 + fact_count = 0 + + in_dir = work_dir / "in" + mk_dirs(in_dir) + with (in_dir / "part.facts").open("w") as part_f: + with (in_dir / "fact.facts").open("w") as fact_f: + part_csv = csv.writer(part_f, dialect="excel-tab") + if print_header: + part_csv.writerow(["uri", "ref"]) + + fact_csv = csv.writer(fact_f, dialect="excel-tab") + if print_header: + fact_csv.writerow(["part_uri", "key", "value"]) + + for xml in load_db(in_path).iterparts(): + p = Part(xml) + sch_ref = p.get_only_schematic_reference() + part_csv.writerow([p.uri, sch_ref.referenceProp if sch_ref else None]) + part_count += 1 + + for fact in p.get_facts(): + fact_csv.writerow([p.uri, fact.keyProp, fact.valueProp]) + fact_count += 1 + + print("Loaded clauses: {} parts, {} facts".format(part_count, fact_count)) + + +parser = argparse.ArgumentParser() + +parser.add_argument("--in", + dest="in_path", + required=True, + metavar="PART DB") + +parser.add_argument("--work", + required=True, + metavar="DIR") + +args = parser.parse_args() + +work(Path(args.in_path), Path(args.work)) -- cgit v1.2.3