Skip to content

Commit e48c03b

Browse files
feat(folder_structure): add proper utilities to setup and teardown
1 parent 15608c2 commit e48c03b

File tree

7 files changed

+152
-54
lines changed

7 files changed

+152
-54
lines changed

discopop_explorer/discopop_explorer.py

Lines changed: 3 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222
from discopop_explorer.functions.PEGraph.output.json import dump_to_pickled_json
2323
from discopop_explorer.utilities.statistics.collect_statistics import collect_statistics
2424
from discopop_library.ArgumentClasses.GeneralArguments import GeneralArguments # type: ignore
25+
from discopop_library.FolderStructure.setup import setup_explorer
26+
from discopop_library.FolderStructure.teardown import teardown_explorer
2527
from discopop_library.HostpotLoader.HotspotLoaderArguments import HotspotLoaderArguments
2628
from discopop_library.HostpotLoader.HotspotNodeType import HotspotNodeType
2729
from discopop_library.HostpotLoader.HotspotType import HotspotType # type:ignore
@@ -180,23 +182,7 @@ def run(arguments: ExplorerArguments) -> None:
180182
"""Run the discopop_explorer with the given arguments"""
181183
logger = logging.getLogger("Explorer")
182184

183-
# reset environment, if previous results existed
184-
if os.path.exists(os.path.join(arguments.project_path, "explorer")):
185-
shutil.rmtree(os.path.join(arguments.project_path, "explorer"))
186-
# reset file lock in case of prior crashes
187-
if os.path.exists("next_free_pattern_id.txt.lock"):
188-
os.remove("next_free_pattern_id.txt.lock")
189-
if os.path.exists("next_free_pattern_id.txt"):
190-
os.remove("next_free_pattern_id.txt")
191-
delete_line_mapping(arguments.project_path)
192-
193-
# create explorer directory if not already present
194-
if not os.path.exists(os.path.join(arguments.project_path, "explorer")):
195-
os.mkdir(os.path.join(arguments.project_path, "explorer"))
196-
# create file to store next free pattern ids if not already present
197-
if not os.path.exists("next_free_pattern_id.txt"):
198-
with open("next_free_pattern_id.txt", "w") as f:
199-
f.write(str(0))
185+
setup_explorer(arguments.project_path)
200186

201187
if arguments.enable_profiling_dump_file is not None:
202188
profile = cProfile.Profile()
@@ -282,9 +268,6 @@ def run(arguments: ExplorerArguments) -> None:
282268
with open(arguments.enable_json_file, "w+") as f:
283269
json.dump(res, f, indent=2, cls=PatternBaseSerializer)
284270

285-
# initialize the line_mapping.json
286-
initialize_line_mapping(load_file_mapping(arguments.file_mapping_file), arguments.project_path)
287-
288271
print("Time taken for pattern detection: {0}".format(end - start))
289272

290273
# demonstration of Microbenchmark possibilities

discopop_library/FolderStructure/__init__.py

Whitespace-only changes.
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
# This file is part of the DiscoPoP software (http://www.discopop.tu-darmstadt.de)
2+
#
3+
# Copyright (c) 2020, Technische Universitaet Darmstadt, Germany
4+
#
5+
# This software may be modified and distributed under the terms of
6+
# the 3-Clause BSD License. See the LICENSE file in the package base
7+
# directory for details.
8+
9+
import json
10+
import logging
11+
import os
12+
13+
from discopop_library.FolderStructure.teardown import teardown_explorer
14+
from discopop_library.LineMapping.initialize import initialize_line_mapping
15+
from discopop_library.PathManagement.PathManagement import load_file_mapping
16+
17+
logger = logging.getLogger("FolderStructure").getChild("Setup")
18+
19+
20+
def setup_explorer(path: str = "") -> None:
21+
tmp_logger = logger.getChild("explorer")
22+
tmp_logger.info("Start")
23+
24+
teardown_explorer(path)
25+
26+
# create explorer directory if not already present
27+
if not os.path.exists(os.path.join(path, "explorer")):
28+
os.mkdir(os.path.join(path, "explorer"))
29+
# create file to store next free pattern ids if not already present
30+
if not os.path.exists("next_free_pattern_id.txt"):
31+
with open("next_free_pattern_id.txt", "w") as f:
32+
f.write(str(0))
33+
34+
# initialize the line_mapping.json
35+
initialize_line_mapping(load_file_mapping(os.path.join(path, "FileMapping.txt")), path)
36+
37+
tmp_logger.info("Done")
38+
39+
40+
def setup_patch_generator(path: str = "") -> None:
41+
tmp_logger = logger.getChild("patch_generator")
42+
tmp_logger.info("Start")
43+
patch_generator_dir = os.path.join(path, "patch_generator")
44+
if not os.path.exists(patch_generator_dir):
45+
os.mkdir(patch_generator_dir)
46+
47+
setup_patch_applicator()
48+
49+
tmp_logger.info("Done")
50+
51+
52+
def setup_patch_applicator(path: str = "") -> None:
53+
tmp_logger = logger.getChild("patch_applicator")
54+
tmp_logger.info("Start")
55+
# create a directory for the patch applicator
56+
patch_applicator_dir = os.path.join(path, "patch_applicator")
57+
if not os.path.exists(patch_applicator_dir):
58+
os.mkdir(patch_applicator_dir)
59+
60+
# create a file to store applied suggestions
61+
applied_suggestions_file = os.path.join(patch_applicator_dir, "applied_suggestions.json")
62+
if not os.path.exists(applied_suggestions_file):
63+
with open(applied_suggestions_file, "w+") as f:
64+
f.write(json.dumps({"applied": []}))
65+
66+
tmp_logger.info("Done")
67+
68+
69+
def setup_optimizer(path: str = "") -> None:
70+
tmp_logger = logger.getChild("optimizer")
71+
tmp_logger.info("Start")
72+
optimizer_dir = os.path.join(path, "optimizer")
73+
if not os.path.exists(optimizer_dir):
74+
os.mkdir(optimizer_dir)
75+
76+
tmp_logger.info("Done")
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
# This file is part of the DiscoPoP software (http://www.discopop.tu-darmstadt.de)
2+
#
3+
# Copyright (c) 2020, Technische Universitaet Darmstadt, Germany
4+
#
5+
# This software may be modified and distributed under the terms of
6+
# the 3-Clause BSD License. See the LICENSE file in the package base
7+
# directory for details.
8+
9+
import os
10+
import shutil
11+
from discopop_library.LineMapping.delete import delete_line_mapping
12+
13+
import logging
14+
15+
logger = logging.getLogger("FolderStructure").getChild("Teardown")
16+
17+
18+
def teardown_explorer(path: str = "") -> None:
19+
tmp_logger = logger.getChild("explorer")
20+
tmp_logger.info("Start")
21+
# reset environment, if previous results existed
22+
if os.path.exists(os.path.join(path, "explorer")):
23+
shutil.rmtree(os.path.join(path, "explorer"))
24+
# reset file lock in case of prior crashes
25+
if os.path.exists("next_free_pattern_id.txt.lock"):
26+
os.remove("next_free_pattern_id.txt.lock")
27+
if os.path.exists("next_free_pattern_id.txt"):
28+
os.remove("next_free_pattern_id.txt")
29+
delete_line_mapping(path)
30+
31+
teardown_patch_generator(path)
32+
teardown_patch_applicator(path)
33+
teardown_optimizer(path)
34+
35+
tmp_logger.info("Done")
36+
37+
38+
def teardown_patch_generator(path: str = "") -> None:
39+
tmp_logger = logger.getChild("patch_generator")
40+
tmp_logger.info("Start")
41+
patch_generator_dir = os.path.join(path, "patch_generator")
42+
if os.path.exists(patch_generator_dir):
43+
shutil.rmtree(patch_generator_dir)
44+
teardown_patch_applicator(path)
45+
tmp_logger.info("Done")
46+
47+
48+
def teardown_patch_applicator(path: str = "") -> None:
49+
tmp_logger = logger.getChild("patch_applicator")
50+
tmp_logger.info("Start")
51+
patch_applicator_dir = os.path.join(path, "patch_applicator")
52+
if os.path.exists(patch_applicator_dir):
53+
shutil.rmtree(patch_applicator_dir)
54+
tmp_logger.info("Done")
55+
56+
57+
def teardown_optimizer(path: str = "") -> None:
58+
tmp_logger = logger.getChild("optimizer")
59+
tmp_logger.info("Start")
60+
optimizer_dir = os.path.join(path, "optimizer")
61+
if os.path.exists(optimizer_dir):
62+
shutil.rmtree(optimizer_dir)
63+
64+
tmp_logger.info("Done")

discopop_library/PatchApplicator/patch_applicator.py

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import json
99
import os
1010

11+
from discopop_library.FolderStructure.setup import setup_patch_applicator
1112
from discopop_library.PatchApplicator.PatchApplicatorArguments import PatchApplicatorArguments
1213
from discopop_library.PatchApplicator.apply import apply_patches
1314
from discopop_library.PatchApplicator.clear import clear_patches
@@ -30,20 +31,9 @@ def run(arguments: PatchApplicatorArguments) -> int:
3031
print("Working directory: ", os.getcwd())
3132
print(arguments)
3233

33-
# create a directory for the patch applicator
34+
setup_patch_applicator(os.getcwd())
3435
patch_applicator_dir = os.path.join(os.getcwd(), "patch_applicator")
35-
if not os.path.exists(patch_applicator_dir):
36-
if arguments.verbose:
37-
print("Creating patch_applicator directory...")
38-
os.mkdir(patch_applicator_dir)
39-
40-
# create a file to store applied suggestions
4136
applied_suggestions_file = os.path.join(patch_applicator_dir, "applied_suggestions.json")
42-
if not os.path.exists(applied_suggestions_file):
43-
if arguments.verbose:
44-
print("Creating applied_suggestions.json file...")
45-
with open(applied_suggestions_file, "w+") as f:
46-
f.write(json.dumps({"applied": []}))
4737

4838
# load file mapping
4939
file_mapping_path = os.path.join(os.getcwd(), "FileMapping.txt")

discopop_library/PatchGenerator/patch_generator.py

Lines changed: 3 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
from typing import Dict
1313

1414
from discopop_library.CodeGenerator.CodeGenerator import from_json_strings
15+
from discopop_library.FolderStructure.setup import setup_patch_generator
1516
from discopop_library.JSONHandler.JSONHandler import read_patterns_from_json_to_json
1617
from discopop_library.PatchGenerator.PatchGeneratorArguments import PatchGeneratorArguments
1718
from discopop_library.PatchGenerator.from_optimizer_output import from_optimizer_output
@@ -25,26 +26,9 @@ def run(arguments: PatchGeneratorArguments) -> None:
2526

2627
if arguments.verbose:
2728
print("Started DiscoPoP Patch Generator...")
28-
if arguments.verbose:
29-
print("Creating patch_generator directory...")
30-
patch_generator_dir = os.path.join(os.getcwd(), "patch_generator")
31-
if not os.path.exists(patch_generator_dir):
32-
os.mkdir(patch_generator_dir)
3329

34-
# for compatibility reasons, initialize the file to store applied patches if it doesn't exist already
35-
# create a directory for the patch applicator
36-
patch_applicator_dir = os.path.join(os.getcwd(), "patch_applicator")
37-
if not os.path.exists(patch_applicator_dir):
38-
if arguments.verbose:
39-
print("Creating patch_applicator directory...")
40-
os.mkdir(patch_applicator_dir)
41-
# create a file to store applied suggestions
42-
applied_suggestions_file = os.path.join(patch_applicator_dir, "applied_suggestions.json")
43-
if not os.path.exists(applied_suggestions_file):
44-
if arguments.verbose:
45-
print("Creating applied_suggestions.json file...")
46-
with open(applied_suggestions_file, "w+") as f:
47-
f.write(json.dumps({"applied": []}))
30+
setup_patch_generator(os.getcwd())
31+
patch_generator_dir = os.path.join(os.getcwd(), "patch_generator")
4832

4933
# get pattern file to load
5034
if arguments.add_from_json != "None":

discopop_library/discopop_optimizer/optimizer.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
from sympy import Float, Symbol # type: ignore
1919

2020
from discopop_library.CodeGenerator.CodeGenerator import from_json_strings
21+
from discopop_library.FolderStructure.setup import setup_optimizer
2122
from discopop_library.HostpotLoader.HotspotLoaderArguments import HotspotLoaderArguments
2223
from discopop_library.JSONHandler.JSONHandler import read_patterns_from_json_to_json
2324
from discopop_library.PatchGenerator.PatchGeneratorArguments import PatchGeneratorArguments
@@ -90,10 +91,10 @@ def run_passive_optimizer(arguments: OptimizerArguments) -> None:
9091
if arguments.verbose:
9192
print("Started DiscoPoP Optimizer...")
9293
print("Creating optimizer directory...")
93-
optimizer_dir = os.path.join(os.getcwd(), "optimizer")
94-
if not os.path.exists(optimizer_dir):
95-
os.mkdir(optimizer_dir)
9694

95+
setup_optimizer(os.getcwd())
96+
97+
optimizer_dir = os.path.join(os.getcwd(), "optimizer")
9798
explorer_dir = os.path.join(os.getcwd(), "explorer")
9899
profiler_dir = os.path.join(os.getcwd(), "profiler")
99100
pattern_file_path = os.path.join(explorer_dir, "patterns.json")

0 commit comments

Comments
 (0)