aboutsummaryrefslogtreecommitdiff
path: root/src/ee/tools/part_apply_souffle_pre.py
diff options
context:
space:
mode:
authorTrygve Laugstøl <trygvis@inamo.no>2019-05-27 08:52:38 +0200
committerTrygve Laugstøl <trygvis@inamo.no>2019-05-27 08:52:38 +0200
commit0259c6f907875b54e5d1df4bc89efa1c293d2812 (patch)
treed27f62ac6eb6fc09d8e989088978d959176ca6dd /src/ee/tools/part_apply_souffle_pre.py
parent101d17f0993795769fa125d26ceec71ccfecd057 (diff)
downloadee-python-0259c6f907875b54e5d1df4bc89efa1c293d2812.tar.gz
ee-python-0259c6f907875b54e5d1df4bc89efa1c293d2812.tar.bz2
ee-python-0259c6f907875b54e5d1df4bc89efa1c293d2812.tar.xz
ee-python-0259c6f907875b54e5d1df4bc89efa1c293d2812.zip
Adding Soufflé based reasoning on parts. Replacing default configuration
with applying python function with this new reasoner.
Diffstat (limited to 'src/ee/tools/part_apply_souffle_pre.py')
-rw-r--r--src/ee/tools/part_apply_souffle_pre.py64
1 files changed, 64 insertions, 0 deletions
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))