aboutsummaryrefslogtreecommitdiff
path: root/src/ee/tools/souffle-export.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/souffle-export.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/souffle-export.py')
-rw-r--r--src/ee/tools/souffle-export.py51
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())