aboutsummaryrefslogtreecommitdiff
path: root/src/ee/tools/part_apply_souffle_post.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_post.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_post.py')
-rw-r--r--src/ee/tools/part_apply_souffle_post.py56
1 files changed, 56 insertions, 0 deletions
diff --git a/src/ee/tools/part_apply_souffle_post.py b/src/ee/tools/part_apply_souffle_post.py
new file mode 100644
index 0000000..4c23128
--- /dev/null
+++ b/src/ee/tools/part_apply_souffle_post.py
@@ -0,0 +1,56 @@
+import argparse
+import csv
+from pathlib import Path
+
+from ee import EeException
+from ee.db import ObjDb
+from ee.part import Part, load_db, save_db, PartDb
+
+
+def work(in_path: Path, out_path: Path, work_dir: Path):
+ in_parts: ObjDb[Part] = ObjDb[Part]()
+ uri_idx = in_parts.add_unique_index("uri", lambda p: p.uri)
+
+ for entry in load_db(in_path).parts:
+ in_parts.add(Part(entry.part))
+
+ out_parts = PartDb()
+
+ for part in in_parts:
+ out_parts.add_entry(part, False)
+
+ with (work_dir / "out" / "fact.csv").open("r") as f:
+ reader = csv.reader(f, dialect="excel-tab")
+ for uri, key, value in reader:
+ try:
+ part = uri_idx.get_single(uri)
+ except KeyError:
+ raise EeException("Unknown part found in output: uri={}".format(uri))
+
+ old_value = part.facts.get_value(key)
+
+ if old_value is None:
+ print("New fact for {}: {}={}".format(uri, key, value))
+ part.facts.add(key, value)
+
+ save_db(out_path, out_parts)
+
+
+parser = argparse.ArgumentParser()
+
+parser.add_argument("--in",
+ dest="in_path",
+ required=True,
+ metavar="PART DB")
+
+parser.add_argument("--out",
+ required=True,
+ metavar="PART DB")
+
+parser.add_argument("--work",
+ required=True,
+ metavar="DIR")
+
+args = parser.parse_args()
+
+work(Path(args.in_path), Path(args.out), Path(args.work))