diff options
author | Trygve Laugstøl <trygvis@inamo.no> | 2019-05-27 08:52:38 +0200 |
---|---|---|
committer | Trygve Laugstøl <trygvis@inamo.no> | 2019-05-27 08:52:38 +0200 |
commit | 0259c6f907875b54e5d1df4bc89efa1c293d2812 (patch) | |
tree | d27f62ac6eb6fc09d8e989088978d959176ca6dd /src/ee/tools/part_apply_souffle_post.py | |
parent | 101d17f0993795769fa125d26ceec71ccfecd057 (diff) | |
download | ee-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.py | 56 |
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)) |