summaryrefslogtreecommitdiff
path: root/examples/program_analysis/api_migration.py
diff options
context:
space:
mode:
Diffstat (limited to 'examples/program_analysis/api_migration.py')
-rw-r--r--examples/program_analysis/api_migration.py72
1 files changed, 72 insertions, 0 deletions
diff --git a/examples/program_analysis/api_migration.py b/examples/program_analysis/api_migration.py
new file mode 100644
index 0000000..ddc3245
--- /dev/null
+++ b/examples/program_analysis/api_migration.py
@@ -0,0 +1,72 @@
+"""Learning to generalize an API migration."""
+import random
+import os
+from timeit import default_timer as timer
+from ui import serve
+from lazy_structure import LazyStructure
+from analyzelib import LoadDocument, AnalyzeCodelets, CompleteAnalogyTactic
+
+def Main():
+ """Runs the analogy-maker and displays the output."""
+ start = timer()
+ print("Setting up the structure...")
+ random.seed(24)
+ demo_path = os.environ.get("BUILD_WORKSPACE_DIRECTORY", ".")
+ demo_path += "/examples/program_analysis/paper_demos"
+ chunks = [(0, 7), (9, 5)]
+ sources = []
+ for i in range(1, 4):
+ before = LoadDocument(f"{demo_path}/api{i}.before.txt", chunks)
+ after = LoadDocument(f"{demo_path}/api{i}.after.txt",
+ chunks if i != 3 else [])
+ sources.append((before, after))
+
+ chunks = []
+ docs_before = LoadDocument(f"{demo_path}/docs.before.txt")
+ docs_after = LoadDocument(f"{demo_path}/docs.after.txt")
+
+ structure = LazyStructure(
+ [source for sourcelist in sources for source in sourcelist]
+ + [docs_before, docs_after], AnalyzeCodelets)
+
+ for document in structure.documents[:-2]:
+ for chunk in document.chunks:
+ structure.ChunkToNode(document, chunk)
+
+ def insertChunks(doc, chunk_texts):
+ for chunk in doc.chunks:
+ if doc.ChunkWord(chunk) in chunk_texts:
+ structure.ChunkToNode(doc, chunk)
+
+ doc_words = set({
+ "cam_record_video", "cam_record_audio", "cam_record_frame",
+ "On", "error", "failure", "returns",
+ "-1", "-2", "-3", "-4", "-5", "-6",
+ })
+ insertChunks(docs_before, doc_words)
+ insertChunks(docs_after, doc_words)
+
+ for i in range(0, 8, 2):
+ structure.AnnotateDocuments(dict({
+ i: "/:TransformPair:Before",
+ (i + 1): "/:TransformPair:After",
+ }))
+ if i != 6:
+ structure.AnnotateDocuments(dict({
+ i: "/:Documentation:Code",
+ 6: "/:Documentation:Docs",
+ }))
+ structure.AnnotateDocuments(dict({
+ (i + 1): "/:Documentation:Code",
+ 7: "/:Documentation:Docs",
+ }))
+
+ structure.MarkDocumentGenerated(5)
+ CompleteAnalogyTactic(structure, sources)
+ structure.GetGeneratedDocument(5)
+
+ print(timer() - start)
+ serve.start_server(structure)
+
+if __name__ == "__main__":
+ Main()
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback