From cd7e18042d42a1a81aad63a04d676ec94db619f3 Mon Sep 17 00:00:00 2001 From: titomeister Date: Tue, 1 Feb 2022 14:44:15 -0700 Subject: [PATCH 1/3] Putting in changes for toggling source reference information. Still needs some work. --- automates/model_assembly/networks.py | 57 +++++++++++++++++++- automates/program_analysis/CAST2GrFN/cast.py | 2 +- scripts/program_analysis/run_gcc_to_grfn.py | 7 ++- 3 files changed, 63 insertions(+), 3 deletions(-) diff --git a/automates/model_assembly/networks.py b/automates/model_assembly/networks.py index 502b337db..28aa5bc4c 100644 --- a/automates/model_assembly/networks.py +++ b/automates/model_assembly/networks.py @@ -1010,6 +1010,8 @@ def __init__( self.lambdas = [n for n in self.nodes if isinstance(n, LambdaNode)] self.types = T + self.source_info = False # Boolean flag that determines whether or not we generate source reference information for the GrFN + # NOTE: removing detached variables from GrFN del_indices = list() for idx, var_node in enumerate(self.variables): @@ -1741,7 +1743,7 @@ def to_dict(self) -> Dict: :rtype: type :raises ExceptionName: Why the exception is raised. """ - return { + data = { "uid": self.uid, "entry_point": "::".join( ["@container", self.namespace, self.scope, self.name] @@ -1760,6 +1762,59 @@ def to_dict(self) -> Dict: ], "metadata": [m.to_dict() for m in self.metadata], } + #if self.source_info: + for v in data["variables"]: + for e in v["metadata"]: + if e["type"] == "code_span_reference": + e["code_span"] = None + + for v in data["functions"]: + for e in v["metadata"]: + if e["type"] == "code_span_reference": + e["code_span"] = None + + for v in data["subgraphs"]: + for e in v["metadata"]: + if e["type"] == "code_span_reference": + e["code_span"] = None + + for v in data["types"]: + for e in v["metadata"]: + if e["type"] == "code_span_reference": + e["code_span"] = None + + for v in data["metadata"]: + for e in v["metadata"]: + if e["type"] == "code_span_reference": + e["code_span"] = None + + for v in data["variables"]: + v["metadata"] = None + # if e["type"] == "code_span_reference": + # e["code_span"] = None + + for v in data["functions"]: + v["metadata"] = None +# if e["type"] == "code_span_reference": + # e["code_span"] = None + + for v in data["subgraphs"]: + v["metadata"] = None +# if e["type"] == "code_span_reference": + # e["code_span"] = None + + for v in data["types"]: + v["metadata"] = None +# if e["type"] == "code_span_reference": + # e["code_span"] = None + + for v in data["metadata"]: + v["metadata"] = None +# if e["type"] == "code_span_reference": + # e["code_span"] = None + + + return data def to_json(self) -> str: """Outputs the contents of this GrFN to a JSON object string. diff --git a/automates/program_analysis/CAST2GrFN/cast.py b/automates/program_analysis/CAST2GrFN/cast.py index a848a2da9..7e6d9dff6 100644 --- a/automates/program_analysis/CAST2GrFN/cast.py +++ b/automates/program_analysis/CAST2GrFN/cast.py @@ -181,7 +181,7 @@ def to_AIR(self): return AutoMATES_IR(GenericIdentifier.from_str(air["entrypoint"]), C, V, T, [], [], []) - def to_GrFN(self): + def to_GrFN(self,source_ref): air = self.to_AIR() grfn = GroundedFunctionNetwork.from_AIR(air) return grfn diff --git a/scripts/program_analysis/run_gcc_to_grfn.py b/scripts/program_analysis/run_gcc_to_grfn.py index b21658aff..7f89e5675 100644 --- a/scripts/program_analysis/run_gcc_to_grfn.py +++ b/scripts/program_analysis/run_gcc_to_grfn.py @@ -46,6 +46,8 @@ def get_args(args=sys.argv[1:]): parser.add_argument("-p", "--plugin", help="Custom path to gcc plugin") parser.add_argument("-Cg", "--CASTgraph", help="Create CAST graphviz pdf", action='store_true') + parser.add_argument("-S", "--source", help="Turns off source reference information in the GrFN", + action='store_true') options = parser.parse_args(args) return options @@ -145,7 +147,10 @@ def run_gcc_pipeline(): # Set random seed to 0 for UUID generation for consistent results in # GrFN generation for tests misc.rd.seed(0) - grfn = cast.to_GrFN() + if args.source: + grfn = cast.to_GrFN(source_ref=False) + else: + grfn = cast.to_GrFN(source_ref=True) grfn.to_json_file(f"{program_name}--GrFN.json") print("Transforming GrFN into AGraph...") From b64be3dd52449f255df961b7f6ae0d5a1e744498 Mon Sep 17 00:00:00 2001 From: titomeister Date: Thu, 3 Feb 2022 15:14:23 -0700 Subject: [PATCH 2/3] More changes for toggling the source ref information, making sure nothing existing breaks. --- automates/model_assembly/networks.py | 91 +++++++++----------- automates/program_analysis/CAST2GrFN/cast.py | 4 +- 2 files changed, 42 insertions(+), 53 deletions(-) diff --git a/automates/model_assembly/networks.py b/automates/model_assembly/networks.py index 28aa5bc4c..ea5413936 100644 --- a/automates/model_assembly/networks.py +++ b/automates/model_assembly/networks.py @@ -1010,7 +1010,7 @@ def __init__( self.lambdas = [n for n in self.nodes if isinstance(n, LambdaNode)] self.types = T - self.source_info = False # Boolean flag that determines whether or not we generate source reference information for the GrFN + self.omit_source_info = False # Boolean flag that determines whether or not we generate source reference information for the GrFN # NOTE: removing detached variables from GrFN del_indices = list() @@ -1762,60 +1762,47 @@ def to_dict(self) -> Dict: ], "metadata": [m.to_dict() for m in self.metadata], } - #if self.source_info: - for v in data["variables"]: - for e in v["metadata"]: - if e["type"] == "code_span_reference": - e["code_span"] = None - - for v in data["functions"]: - for e in v["metadata"]: - if e["type"] == "code_span_reference": - e["code_span"] = None - - for v in data["subgraphs"]: - for e in v["metadata"]: - if e["type"] == "code_span_reference": - e["code_span"] = None - - for v in data["types"]: - for e in v["metadata"]: - if e["type"] == "code_span_reference": - e["code_span"] = None - - for v in data["metadata"]: - for e in v["metadata"]: - if e["type"] == "code_span_reference": - e["code_span"] = None - - for v in data["variables"]: - v["metadata"] = None - # if e["type"] == "code_span_reference": - # e["code_span"] = None - - for v in data["functions"]: - v["metadata"] = None -# if e["type"] == "code_span_reference": - # e["code_span"] = None - - for v in data["subgraphs"]: - v["metadata"] = None -# if e["type"] == "code_span_reference": - # e["code_span"] = None - - for v in data["types"]: - v["metadata"] = None -# if e["type"] == "code_span_reference": - # e["code_span"] = None - - for v in data["metadata"]: - v["metadata"] = None -# if e["type"] == "code_span_reference": - # e["code_span"] = None - + if self.omit_source_info: + for v in data["variables"]: + for e in v["metadata"]: + if e["type"] == "code_span_reference": + e["code_span"] = None + + for v in data["functions"]: + for e in v["metadata"]: + if e["type"] == "code_span_reference": + e["code_span"] = None + + for v in data["subgraphs"]: + for e in v["metadata"]: + if e["type"] == "code_span_reference": + e["code_span"] = None + + for v in data["types"]: + for e in v["metadata"]: + if e["type"] == "code_span_reference": + e["code_span"] = None + + for v in data["metadata"]: + for e in v["metadata"]: + if e["type"] == "code_span_reference": + e["code_span"] = None return data + def set_source_flag(self, flag): + """Toggles a flag in the GrFN object that tells us whether or not we need to omit the source reference + information in the GrFN JSON. At the moment the source reference information is the 'code_span' information. + By default the source_info flag is set to False, + + Args: + flag (Boolean): Flag is set to either True or False depending on whether or not we want + the source information to be removed (True) or kept (False) + """ + + self.omit_source_info = flag + + def to_json(self) -> str: """Outputs the contents of this GrFN to a JSON object string. diff --git a/automates/program_analysis/CAST2GrFN/cast.py b/automates/program_analysis/CAST2GrFN/cast.py index 7e6d9dff6..174b0f285 100644 --- a/automates/program_analysis/CAST2GrFN/cast.py +++ b/automates/program_analysis/CAST2GrFN/cast.py @@ -181,9 +181,11 @@ def to_AIR(self): return AutoMATES_IR(GenericIdentifier.from_str(air["entrypoint"]), C, V, T, [], [], []) - def to_GrFN(self,source_ref): + def to_GrFN(self,omit_source_ref=False): air = self.to_AIR() grfn = GroundedFunctionNetwork.from_AIR(air) + if omit_source_ref: + grfn.set_source_flag(omit_source_ref) return grfn def write_cast_object(self, cast_value): From be758cc2f65c9c51662b387a9b37fee125970a78 Mon Sep 17 00:00:00 2001 From: titomeister Date: Tue, 8 Feb 2022 10:16:21 -0700 Subject: [PATCH 3/3] Changing 'run_gcc_to_grfn.py' to properly have the flag set. --- scripts/program_analysis/run_gcc_to_grfn.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/program_analysis/run_gcc_to_grfn.py b/scripts/program_analysis/run_gcc_to_grfn.py index 7f89e5675..4338b03f9 100644 --- a/scripts/program_analysis/run_gcc_to_grfn.py +++ b/scripts/program_analysis/run_gcc_to_grfn.py @@ -148,9 +148,9 @@ def run_gcc_pipeline(): # GrFN generation for tests misc.rd.seed(0) if args.source: - grfn = cast.to_GrFN(source_ref=False) + grfn = cast.to_GrFN(omit_source_ref=True) else: - grfn = cast.to_GrFN(source_ref=True) + grfn = cast.to_GrFN(omit_source_ref=False) grfn.to_json_file(f"{program_name}--GrFN.json") print("Transforming GrFN into AGraph...")