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/souffle-export.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/souffle-export.py')
-rw-r--r-- | src/ee/tools/souffle-export.py | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/src/ee/tools/souffle-export.py b/src/ee/tools/souffle-export.py new file mode 100644 index 0000000..098eb11 --- /dev/null +++ b/src/ee/tools/souffle-export.py @@ -0,0 +1,51 @@ +import argparse +import csv +import os.path +from pathlib import Path + +import ee.tools +from ee.part import load_db, Part + + +def run(args): + print_header = False + + part_db = Path(args.part_db) + out_dir = part_db.parent / "{}.{}".format(os.path.splitext(part_db.name)[0], "souffle") + + if not out_dir.is_dir(): + ee.tools.mk_dirs(out_dir) + + with open(out_dir / "facts.dl", "w") as f: + print(".decl part(uri:symbol, ref:symbol, supplier: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) + + with open(out_dir / "part.facts", "w") as part_f: + with open(out_dir / "fact.facts", "w") as fact_f: + part_csv = csv.writer(part_f, dialect="excel-tab") + if print_header: + part_csv.writerow(["uri", "ref", "supplier"]) + + fact_csv = csv.writer(fact_f, dialect="excel-tab") + if print_header: + fact_csv.writerow(["part_uri", "key", "value"]) + + for xml in load_db(part_db).iterparts(): + p = Part(xml) + sch_ref = p.get_only_schematic_reference() + part_csv.writerow([p.uri, sch_ref.referenceProp if sch_ref else None, p.supplier]) + + for fact in p.get_facts(): + fact_csv.writerow([p.uri, fact.keyProp, fact.valueProp]) + + +parser = argparse.ArgumentParser() + +parser.add_argument("--part-db", + required=True, + metavar="PART DB") + +run(parser.parse_args()) |