Repository: SoftwareUnderstanding/inspect4py (language: python)

Issue:
assert functions not being recognized in calls
In pyLODE I have found tests such as:
`assert "balance between £1,000 and £1,000,000 GBP" in open(output_html_file).read()`
`open()` and `readme()` are recognized, but `assert` is not in calls. I need to have `assert` recognized in order to properly detect whether the method is a test or not.


Discussion / hints:

Fix patch:
diff --git a/code_inspector/cli.py b/code_inspector/cli.py
index 4eb1baf..9d7cab5 100644
--- a/code_inspector/cli.py
+++ b/code_inspector/cli.py
@@ -352,6 +352,55 @@ def inspect_dependencies(self):
 
         return dep_info
 
+    def _ast_if_test(self):
+        """
+        Function that returns True if the file is a test
+        """
+        test_def = []
+        for node in ast.iter_child_nodes(self.tree):
+            if isinstance(node, ast.Assert):
+                return True
+            else:
+                # look if the body of the node has asserts
+                try:
+                    for i in node.body:
+                        if isinstance(i, ast.Assert):
+                            return True
+                except:
+                    pass
+
+        # Check if there are any functions with asserts.
+        for f in self.funcsInfo.values():
+            if any("assert" in call for call in f["calls"]):
+                return True
+
+        # Check if any methods of classes are asserts
+        for cl in self.classesInfo.values():
+            for method in cl["methods"].values():
+                if any("assert" in call for call in method["calls"]):
+                    return True
+
+        # OPTION 2: searching the list of potential test in the imports
+        test_dependencies = ('unittest', 'pytest', 'nose', 'nose2', 'doctest', 'testify', 'behave', 'lettuce')
+        for dep in self.depInfo:
+            imports = dep["import"]
+            if isinstance(imports, list):
+                for import_dep in imports:
+                    if import_dep.lower() in test_dependencies:
+                        return True
+            else:
+                if imports.lower() in test_dependencies:
+                    return True
+
+        # OPTION 3 (TO DO)
+        # if the functions or classes imported belong to a test.
+        # For example, there are cases where the final validation (assert) is done through an imported class
+
+        # TO DO: assert should be the last statement of a test. If it then continues with other stuff, then it's
+        # probably not a test. 
+
+        return False
+
     def _ast_if_main(self):
         """
         Method for getting if the file has a if __name__ == "__main__"
@@ -365,7 +414,6 @@ def _ast_if_main(self):
         if_main_flag = 0
         if_main_func = ""
         main_info = {}
-        test_dependencies = ('unittest', 'pytest', 'nose', 'nose2', 'doctest', 'testify', 'behave', 'lettuce')
 
         for node in if_main_definitions:
             try:
@@ -385,29 +433,6 @@ def _ast_if_main(self):
         main_info["main_flag"] = if_main_flag
         main_info["main_function"] = if_main_func
         if if_main_flag:
-            # classifying the type of a main: "test" or "script"
-            # or "test" in self.fileInfo["fileNameBase"]:
-            # Note - I'm just commenting the previous or ("test" in self.fileInfo ...)
-            # and adding doctest - but more advanced cases could be considered here.
-
-            # OPTION 1: searching test dependency string inside the if_main_func
-            # if test dependency in if_main_func:
-            #    main_info["type"] = "test"
-            # else:
-            #    main_info["type"] = "script"
-
-            # OPTION 2: searching the list of potential test in the imports
-            for dep in self.depInfo:
-                imports = dep["import"]
-                if isinstance(imports, list):
-                    for import_dep in imports:
-                        if import_dep.lower() in test_dependencies:
-                            main_info["type"] = "test"
-                            return main_info
-                else:
-                    if imports.lower() in test_dependencies:
-                        main_info["type"] = "test"
-                        return main_info
             main_info["type"] = "script"
         return main_info
 
@@ -428,7 +453,8 @@ def file_json(self):
             "functions": self.funcsInfo,
             "body": self.bodyInfo["body"],
             "controlflow": self.controlFlowInfo,
-            "main_info": self._ast_if_main()
+            "main_info": self._ast_if_main(),
+            "is_test": self._ast_if_test()
         }
 
         json_file = self.out_json_path + "/" + self.fileInfo["fileNameBase"] + ".json"
@@ -754,8 +780,6 @@ def _dynamic_calls(self, f_args, f_name_id, funcs_info, classes_info, store_vars
                                         classes_info[f_name]["methods"][f_name_rest]["calls"].append(
                                             self.fileInfo[
                                                 "fileNameBase"] + "." + module_call_name + "." + rest_call_name)
-                                        # @Rosa: removed this because it is never declared
-                                        # remove_methods_calls.append([f_name, f_name_rest])
                                         found = 1
                                         argument_name = classes_info[f_name]["methods"][f_name_rest]["args"][
                                             f_arg_cont + 1]
@@ -1202,7 +1226,11 @@ def main(input_path, fig, output_dir, ignore_dir_pattern, ignore_file_pattern, r
             with open(os.path.join(input_path, "README.md")) as readme_file:
                 readme = readme_file.read()
         except:
-            print("Readme not found at root level")
+            try:
+                with open(os.path.join(input_path, "README.rst")) as readme_file:
+                    readme = readme_file.read()
+            except:
+                print("Readme not found at root level")
         for subdir, dirs, files in os.walk(input_path):
 
             for ignore_d in ignore_dir_pattern:
diff --git a/code_inspector/evaluation/run_software_type_evaluation.py b/code_inspector/evaluation/run_software_type_evaluation.py
index 08a9df2..a34f077 100644
--- a/code_inspector/evaluation/run_software_type_evaluation.py
+++ b/code_inspector/evaluation/run_software_type_evaluation.py
@@ -197,6 +197,8 @@ def main():
                     precision_entry = tp_entry / len(software_invocation_entries)
                     # the priority lists contain all annotated scripts
                     recall_entry = tp_entry / (len(priority_1) + len(priority_2) + len(priority_3))
+                    if recall_entry > 1:  # To cope for the fact that 2 scripts may have the same name
+                        recall_entry = 1
                     if precision_entry < 1 or recall_entry < 1:
                         repos_with_error_script.append(dir_name + "P:" + str(precision_entry) + ". R:" +
                                                        str(recall_entry))
diff --git a/code_inspector/utils.py b/code_inspector/utils.py
index c5ccf36..eb95039 100644
--- a/code_inspector/utils.py
+++ b/code_inspector/utils.py
@@ -150,60 +150,39 @@ def extract_software_invocation(dir_info, dir_tree_info, input_path, call_list,
     main_files = []
 
     # new list to store the "mains that have been previously classified as "test".
-    test_files = []
-
+    test_files_main = []
+    test_files_no_main = []
     # new list to store files without mains
     body_only_files = []
     flag_service_main = 0
     for key in dir_info:  # filter (lambda key: key not in "directory_tree", dir_info):
         for elem in dir_info[key]:
-            # TO DO: Determine here if the file is a test.
-            # 1) Imports and uses functions that have asserts/testing frameworks. Example: pycg
-            # 2) Uses functions that have asserts. Example: pyLODE.
-            # Looking at framework/main is not enough. Test files can be "non-executable" (if they don't have a main)?
-
-            # Check if the file is a test. Test files may not be executable (pytest may be run externally)
-            is_test = False
-            for cl in elem["classes"].values():
-                for method in cl["methods"].values():
-                    if any("assert" in call for call in method["calls"]):
-                        is_test = True
-                        break
-            if not is_test:
-                for f in elem["functions"].values():
-                    if "assert" in f["calls"]:
-                        is_test = True
-            # if not is_test:
-                #Check body (TO DO)
-            if is_test:
-                test_files.append(elem["file"]["path"])
-
             if elem["main_info"]["main_flag"]:
-                flag_main_service = 0
+                flag_service_main = 0
+                flag_service = 0
                 main_stored = 0
-                try:
-                    # 2. Exploration for services in files with "mains"
-                    flag_service, software_invocation_info = service_check(elem, software_invocation_info,
-                                                                           server_dependencies, "main", readme)
-                except:
-                    if elem["main_info"]["type"] != "test" and elem["main_info"]["type"] not in test_files:
+                if elem["is_test"]:
+                    test_files_main.append(elem["file"]["path"])
+                    main_stored = 1
+                else:
+                    try:
+                        # 2. Exploration for services in files with "mains"
+                        flag_service, software_invocation_info = service_check(elem, software_invocation_info,
+                                                                               server_dependencies, "main", readme)
+                    except:
                         main_files.append(elem["file"]["path"])
-                    else:
-                        test_files.append(elem["file"]["path"])
-                        main_stored = 1
 
                 if flag_service:
                     flag_service_main = 1
 
                 if not flag_service and not main_stored:
-                    if elem["main_info"]["type"] != "test":
-                        main_files.append(elem["file"]["path"])
-                    # else:
-                    #     test_files.append(elem["file"]["path"])
-            else:
-                # NEW: Filtering only files with body
-                if elem['body']['calls']: # and not in test files.
-                    body_only_files.append(elem)
+                    main_files.append(elem["file"]["path"])
+
+            elif elem["is_test"]:
+                test_files_no_main.append(elem["file"]["path"])
+                # Filtering scripts with just body in software invocation
+            elif elem['body']['calls']:
+                body_only_files.append(elem)
 
     m_secondary = [0] * len(main_files)
     flag_script_main = 0
@@ -237,11 +216,17 @@ def extract_software_invocation(dir_info, dir_tree_info, input_path, call_list,
         software_invocation_info.append(soft_info)
         flag_script_main = 1
 
-    # tests with main. # TO DO: NOW TESTS WITH NO MAIN ARE RECOGNIZED.
-    for t in range(0, len(test_files)):
+    # tests with main.
+    for t in range(0, len(test_files_main)):
+        # Test files do not have help, they are usually run by themselves
+        soft_info = {"type": "test", "run": "python " + test_files_main[t], "has_structure": "main",
+                     "mentioned_in_readme": os.path.basename(os.path.normpath(test_files_main[t])) in readme}
+        software_invocation_info.append(soft_info)
+    # tests with no main.
+    for t in range(0, len(test_files_no_main)):
         # Test files do not have help, they are usually run by themselves
-        soft_info = {"type": "test", "run": "python " + test_files[t], "has_structure": "main",
-                     "mentioned_in_readme": os.path.basename(os.path.normpath(test_files[t])) in readme}
+        soft_info = {"type": "test", "run": "python " + test_files_no_main[t], "has_structure": "body",
+                     "mentioned_in_readme": os.path.basename(os.path.normpath(test_files_no_main[t])) in readme}
         software_invocation_info.append(soft_info)
 
     flag_service_body = 0
@@ -260,7 +245,7 @@ def extract_software_invocation(dir_info, dir_tree_info, input_path, call_list,
                          "mentioned_in_readme": elem["file"]["fileNameBase"] + "." + elem["file"][
                              "extension"] in readme}
             software_invocation_info.append(soft_info)
-            flage_script_body = 1
+            flag_script_body = 1
 
     # Only adding this information if we haven't not found libraries, packages, services or scripts with mains
     # or bodies.
diff --git a/evaluation/software_type/evaluation_summary.csv b/evaluation/software_type/evaluation_summary.csv
index 19d700b..f2ba48e 100644
--- a/evaluation/software_type/evaluation_summary.csv
+++ b/evaluation/software_type/evaluation_summary.csv
@@ -30,3 +30,6 @@ date,#repositories,precision_package,recall_package,precision_library,recall_lib
 07/09/2021 02:10,95,1,0.916666667,0.931034483,1,1,1,0.967741935,0.967741935,0.974694105,0.971102151,"['HXL-Data-Science-file-formats', 'autojump', 'rtdl']"
 08/09/2021 23:57,95,1,0.916666667,0.931034483,1,1,1,0.967741935,0.967741935,0.974694105,0.971102151,"['HXL-Data-Science-file-formats', 'autojump', 'rtdl']"16/09/2021 23:18:46,95,1.0,0.9166666666666666,0.9310344827586207,1.0,1.0,1.0,0.967741935483871,0.967741935483871,0.9746941045606229,0.9711021505376344,"['autojump', 'rtdl', 'HXL-Data-Science-file-formats']"
 16/09/2021 23:32:14,95,1.0,0.9166666666666666,0.9310344827586207,1.0,1.0,1.0,0.967741935483871,0.967741935483871,0.9746941045606229,0.9711021505376344,"['autojump', 'rtdl', 'HXL-Data-Science-file-formats']"
+19/09/2021 18:38:49,95,1.0,0.9166666666666666,0.9310344827586207,1.0,1.0,1.0,0.9090909090909091,0.967741935483871,0.9600313479623824,0.9326406120760959,"['autojump', 'rtdl', 'kgtk-browser', 'DDOS_Python', 'HXL-Data-Science-file-formats']"
+19/09/2021 19:02:42,95,1.0,0.9166666666666666,0.9310344827586207,1.0,1.0,1.0,0.967741935483871,0.967741935483871,0.9746941045606229,0.9711021505376344,"['autojump', 'rtdl', 'HXL-Data-Science-file-formats']"
+19/09/2021 19:53:02,95,1.0,0.9166666666666666,0.9310344827586207,1.0,1.0,1.0,0.967741935483871,0.967741935483871,0.9746941045606229,0.9711021505376344,"['autojump', 'rtdl', 'HXL-Data-Science-file-formats']"
diff --git a/evaluation/software_type/evaluation_summary_scripts_ndcg.csv b/evaluation/software_type/evaluation_summary_scripts_ndcg.csv
index 17faff4..7051f4a 100644
--- a/evaluation/software_type/evaluation_summary_scripts_ndcg.csv
+++ b/evaluation/software_type/evaluation_summary_scripts_ndcg.csv
@@ -6,3 +6,6 @@ date,#repositories,ndcg_avg,errors
 07/09/2021 02:10,44,0.851143412,"['gtfs-bench. ndcg:0. relevance: [0]', 'graph-neural-pde. ndcg:0.9133821380630599. relevance: [2, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0]', 'DDOS_Python. ndcg:0.606790318176793. relevance: [0, 1, 0, 0, 0, 0, 1, 0, 1, 1]', 'giraffe. ndcg:0. relevance: [0]', 'CU-Net. ndcg:0. relevance: [0, 0]', 'wikidata-property-finder. ndcg:0.9433883681321761. relevance: [3, 1, 0, 2]', 'tada-gam. ndcg:0.8868854556705132. relevance: [2, 0, 0, 0, 0, 0, 1, 0]', 'BoostingMonocularDepth. PENALIZATION: 3', 'lynx-py. ndcg:0. relevance: [0, 0, 0, 0, 0, 0, 0]', 'rtdl. ndcg:0. relevance: [0, 0]', 'pySRURGS. ndcg:0.9752519207771494. relevance: [3, 2, 2, 2, 0, 2, 1, 2, 2, 2]', 'ConSERT. ndcg:0.8504430385239111. relevance: [1, 1, 1, 1, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]', 'code2vec. PENALIZATION: 1', 'AliceMind. ndcg:0.6432391319223081. relevance: [1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]', 'deeplab2. ndcg:0.6309297535714575. relevance: [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]']"
 08/09/2021 23:57,44,0.851143412,"['gtfs-bench. ndcg:0. relevance: [0]', 'graph-neural-pde. ndcg:0.9133821380630599. relevance: [2, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0]', 'DDOS_Python. ndcg:0.606790318176793. relevance: [0, 1, 0, 0, 0, 0, 1, 0, 1, 1]', 'giraffe. ndcg:0. relevance: [0]', 'CU-Net. ndcg:0. relevance: [0, 0]', 'wikidata-property-finder. ndcg:0.9433883681321761. relevance: [3, 1, 0, 2]', 'tada-gam. ndcg:0.8868854556705132. relevance: [2, 0, 0, 0, 0, 0, 1, 0]', 'BoostingMonocularDepth. PENALIZATION: 3', 'lynx-py. ndcg:0. relevance: [0, 0, 0, 0, 0, 0, 0]', 'rtdl. ndcg:0. relevance: [0, 0]', 'pySRURGS. ndcg:0.9752519207771494. relevance: [3, 2, 2, 2, 0, 2, 1, 2, 2, 2]', 'ConSERT. ndcg:0.8504430385239111. relevance: [1, 1, 1, 1, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]', 'code2vec. PENALIZATION: 1', 'AliceMind. ndcg:0.6432391319223081. relevance: [1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]', 'deeplab2. ndcg:0.6309297535714575. relevance: [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]']"16/09/2021 23:18:46,44,0.8421040909204858,"['BoostingMonocularDepth. PENALIZATION: 3', 'gtfs-bench. ndcg:0. relevance: [0]', 'giraffe. ndcg:0. relevance: [0]', 'lynx-py. ndcg:0. relevance: [0, 0, 0, 0, 0, 0, 0]', 'pySRURGS. ndcg:0.9401043262568904. relevance: [3, 2, 0, 1, 2, 2, 2, 2, 2, 2]', 'CU-Net. ndcg:0. relevance: [0, 0]', 'graph-neural-pde. ndcg:0.9574429771647711. relevance: [2, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1]', 'Calliar. ndcg:0.6309297535714575. relevance: [0, 1]', 'code2vec. PENALIZATION: 1', 'rtdl. ndcg:0. relevance: [0, 0, 0, 0]', 'tada-gam. ndcg:0.8868854556705132. relevance: [2, 0, 0, 0, 0, 0, 1, 0]', 'deeplab2. ndcg:0.5. relevance: [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]', 'DDOS_Python. ndcg:0.8494348345648929. relevance: [1, 0, 1, 0, 1, 0, 0, 0, 0, 1]', 'AliceMind. ndcg:0.3718897946942572. relevance: [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]', 'wikidata-property-finder. ndcg:0.9158928585785953. relevance: [3, 0, 1, 2]']"
 16/09/2021 23:32:14,44,0.8421040909204858,"['BoostingMonocularDepth. PENALIZATION: 3', 'gtfs-bench. ndcg:0. relevance: [0]', 'giraffe. ndcg:0. relevance: [0]', 'lynx-py. ndcg:0. relevance: [0, 0, 0, 0, 0, 0, 0]', 'pySRURGS. ndcg:0.9401043262568904. relevance: [3, 2, 0, 1, 2, 2, 2, 2, 2, 2]', 'CU-Net. ndcg:0. relevance: [0, 0]', 'graph-neural-pde. ndcg:0.9574429771647711. relevance: [2, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1]', 'Calliar. ndcg:0.6309297535714575. relevance: [0, 1]', 'code2vec. PENALIZATION: 1', 'rtdl. ndcg:0. relevance: [0, 0, 0, 0]', 'tada-gam. ndcg:0.8868854556705132. relevance: [2, 0, 0, 0, 0, 0, 1, 0]', 'deeplab2. ndcg:0.5. relevance: [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]', 'DDOS_Python. ndcg:0.8494348345648929. relevance: [1, 0, 1, 0, 1, 0, 0, 0, 0, 1]', 'AliceMind. ndcg:0.3718897946942572. relevance: [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]', 'wikidata-property-finder. ndcg:0.9158928585785953. relevance: [3, 0, 1, 2]']"
+19/09/2021 18:38:49,44,0.8654678313783589,"['BoostingMonocularDepth. PENALIZATION: 3', 'gtfs-bench. ndcg:0. relevance: [0]', 'tada-web. PENALIZATION: 1', 'SOLQ. PENALIZATION: 1', 'lynx-py. ndcg:0. relevance: [0, 0, 0, 0, 0, 0, 0]', 'pySRURGS. ndcg:0.9401043262568904. relevance: [3, 2, 0, 1, 2, 2, 2, 2, 2, 2]', 'CU-Net. ndcg:0. relevance: [0, 0]', 'graph-neural-pde. ndcg:0.9428279810283838. relevance: [2, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1]', 'Calliar. ndcg:0.6309297535714575. relevance: [0, 1]', 'rtdl. ndcg:0. relevance: [0, 0, 0, 0]', 'tada-gam. ndcg:0.8868854556705132. relevance: [2, 0, 0, 0, 0, 0, 1, 0]', 'Morph-OME. PENALIZATION: 1', 'deeplab2. ndcg:0.6309297535714575. relevance: [0, 1, 0, 0, 0, 0, 0, 0, 0, 0]', 'kgtk-browser. ndcg:0.6309297535714575. relevance: [0, 1]', 'AliceMind. ndcg:0.4179775569776327. relevance: [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]']"
+19/09/2021 19:02:42,44,0.8698089580019919,"['BoostingMonocularDepth. PENALIZATION: 3', 'gtfs-bench. ndcg:0. relevance: [0]', 'tada-web. PENALIZATION: 1', 'SOLQ. PENALIZATION: 1', 'lynx-py. ndcg:0. relevance: [0, 0, 0, 0, 0, 0, 0]', 'pySRURGS. ndcg:0.9401043262568904. relevance: [3, 2, 0, 1, 2, 2, 2, 2, 2, 2]', 'CU-Net. ndcg:0. relevance: [0, 0]', 'graph-neural-pde. ndcg:0.9428279810283838. relevance: [2, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1]', 'Calliar. ndcg:0.6309297535714575. relevance: [0, 1]', 'rtdl. ndcg:0. relevance: [0, 0, 0, 0]', 'tada-gam. ndcg:0.8868854556705132. relevance: [2, 0, 0, 0, 0, 0, 1, 0]', 'deeplab2. ndcg:0.6309297535714575. relevance: [0, 1, 0, 0, 0, 0, 0, 0, 0, 0]', 'DDOS_Python. ndcg:0.8494348345648929. relevance: [1, 0, 1, 0, 1, 0, 0, 0, 0, 1]', 'AliceMind. ndcg:0.4179775569776327. relevance: [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]', 'wikidata-property-finder. ndcg:0.9725044904464192. relevance: [3, 1, 2]']"
+19/09/2021 19:53:02,44,0.8698089580019919,"['BoostingMonocularDepth. PENALIZATION: 3', 'gtfs-bench. ndcg:0. relevance: [0]', 'tada-web. PENALIZATION: 1', 'SOLQ. PENALIZATION: 1', 'lynx-py. ndcg:0. relevance: [0, 0, 0, 0, 0, 0, 0]', 'pySRURGS. ndcg:0.9401043262568904. relevance: [3, 2, 0, 1, 2, 2, 2, 2, 2, 2]', 'CU-Net. ndcg:0. relevance: [0, 0]', 'graph-neural-pde. ndcg:0.9428279810283838. relevance: [2, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1]', 'Calliar. ndcg:0.6309297535714575. relevance: [0, 1]', 'rtdl. ndcg:0. relevance: [0, 0, 0, 0]', 'tada-gam. ndcg:0.8868854556705132. relevance: [2, 0, 0, 0, 0, 0, 1, 0]', 'deeplab2. ndcg:0.6309297535714575. relevance: [0, 1, 0, 0, 0, 0, 0, 0, 0, 0]', 'DDOS_Python. ndcg:0.8494348345648929. relevance: [1, 0, 1, 0, 1, 0, 0, 0, 0, 1]', 'AliceMind. ndcg:0.4179775569776327. relevance: [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]', 'wikidata-property-finder. ndcg:0.9725044904464192. relevance: [3, 1, 2]']"
diff --git a/evaluation/software_type/evaluation_summary_scripts_precision_recall.csv b/evaluation/software_type/evaluation_summary_scripts_precision_recall.csv
index 7987a7d..52dfc97 100644
--- a/evaluation/software_type/evaluation_summary_scripts_precision_recall.csv
+++ b/evaluation/software_type/evaluation_summary_scripts_precision_recall.csv
@@ -1,9 +1,10 @@
-date,#repositories,precision_avg,recall_avg,errors
-28/08/2021 19:49,45,0.64224297,0.821693122,"['face_classificationP:0.3333333333333333;R:0.14285714285714285', 'BoostingMonocularDepthP:0.4;R:0.6666666666666666', 'EPSANetP:0.5;R:1.0', 'gtfs-benchP:0.0;R:0.0', 'TfaceP:0.5;R:1.0', 'giraffeP:0.0;R:0.0', 'SOLQP:0.4;R:0.6666666666666666', 'lynx-pyP:0.0;R:0.0', 'ConSERTP:0.16666666666666666;R:1.0', 'decision-transformerP:1.0;R:0.3333333333333333', 'pySRURGSP:0.8571428571428571;R:0.6', 'rcpmP:1.0;R:0.6666666666666666', 'graph-neural-pdeP:0.5454545454545454;R:1.0', 'CalliarP:0.5;R:1.0', 'code2vecP:1.0;R:0.4', 'ssspotterP:0.5;R:1.0', 'rtdlP:0.0;R:0.0', 'tada-gamP:0.25;R:1.0', 'deeplab2P:0.016129032258064516;R:0.5', 'nominatim-feedback-reporterP:0.5;R:1.0', 'Self-Correction-Human-ParsingP:0.125;R:1.0', 'DDOS_PythonP:0.4;R:0.8', 'AliceMindP:0.04054054054054054;R:0.5', 'morph-csvP:0.6666666666666666;R:1.0', 'xcitP:0.2;R:0.5', 'dptkP:1.0;R:0.2', 'wikidata-property-finderP:0.6666666666666666;R:1.0', 'wikidata-property-finderP:0.3333333333333333;R:1.0']"
-28/08/2021 21:30,44,0.667996426,0.82521645,"['face_classificationP:0.3333333333333333. R:0.14285714285714285', 'BoostingMonocularDepthP:0.8. R:1.0', 'EPSANetP:0.5. R:1.0', 'gtfs-benchP:0.0. R:0.0', 'TfaceP:0.5. R:1.0', 'giraffeP:0.0. R:0.0', 'SOLQP:0.4. R:0.6666666666666666', 'lynx-pyP:0.0. R:0.0', 'ConSERTP:0.16666666666666666. R:1.0', 'decision-transformerP:1.0. R:0.3333333333333333', 'pySRURGSP:0.8571428571428571. R:0.6', 'rcpmP:1.0. R:0.6666666666666666', 'graph-neural-pdeP:0.6363636363636364. R:1.0', 'CalliarP:0.5. R:1.0', 'code2vecP:1.0. R:0.4', 'ssspotterP:0.5. R:1.0', 'rtdlP:0.0. R:0.0', 'tada-gamP:0.25. R:1.0', 'deeplab2P:0.016129032258064516. R:0.5', 'nominatim-feedback-reporterP:0.5. R:1.0', 'Self-Correction-Human-ParsingP:0.125. R:1.0', 'DDOS_PythonP:0.4. R:0.8', 'AliceMindP:0.04054054054054054. R:0.5', 'morph-csvP:0.6666666666666666. R:1.0', 'xcitP:0.2. R:0.5', 'dptkP:1.0. R:0.2']"
-28/08/2021 21:42,44,0.667996426,0.82521645,"['face_classificationP:0.3333333333333333. R:0.14285714285714285', 'BoostingMonocularDepthP:0.8. R:1.0', 'EPSANetP:0.5. R:1.0', 'gtfs-benchP:0.0. R:0.0', 'TfaceP:0.5. R:1.0', 'giraffeP:0.0. R:0.0', 'SOLQP:0.4. R:0.6666666666666666', 'lynx-pyP:0.0. R:0.0', 'ConSERTP:0.16666666666666666. R:1.0', 'decision-transformerP:1.0. R:0.3333333333333333', 'pySRURGSP:0.8571428571428571. R:0.6', 'rcpmP:1.0. R:0.6666666666666666', 'graph-neural-pdeP:0.6363636363636364. R:1.0', 'CalliarP:0.5. R:1.0', 'code2vecP:1.0. R:0.4', 'ssspotterP:0.5. R:1.0', 'rtdlP:0.0. R:0.0', 'tada-gamP:0.25. R:1.0', 'deeplab2P:0.016129032258064516. R:0.5', 'nominatim-feedback-reporterP:0.5. R:1.0', 'Self-Correction-Human-ParsingP:0.125. R:1.0', 'DDOS_PythonP:0.4. R:0.8', 'AliceMindP:0.04054054054054054. R:0.5', 'morph-csvP:0.6666666666666666. R:1.0', 'xcitP:0.2. R:0.5', 'dptkP:1.0. R:0.2']"
-28/08/2021 22:29,44,0.667996426,0.82521645,"['face_classificationP:0.3333333333333333. R:0.14285714285714285', 'BoostingMonocularDepthP:0.8. R:1.0', 'EPSANetP:0.5. R:1.0', 'gtfs-benchP:0.0. R:0.0', 'TfaceP:0.5. R:1.0', 'giraffeP:0.0. R:0.0', 'SOLQP:0.4. R:0.6666666666666666', 'lynx-pyP:0.0. R:0.0', 'ConSERTP:0.16666666666666666. R:1.0', 'decision-transformerP:1.0. R:0.3333333333333333', 'pySRURGSP:0.8571428571428571. R:0.6', 'rcpmP:1.0. R:0.6666666666666666', 'graph-neural-pdeP:0.6363636363636364. R:1.0', 'CalliarP:0.5. R:1.0', 'code2vecP:1.0. R:0.4', 'ssspotterP:0.5. R:1.0', 'rtdlP:0.0. R:0.0', 'tada-gamP:0.25. R:1.0', 'deeplab2P:0.016129032258064516. R:0.5', 'nominatim-feedback-reporterP:0.5. R:1.0', 'Self-Correction-Human-ParsingP:0.125. R:1.0', 'DDOS_PythonP:0.4. R:0.8', 'AliceMindP:0.04054054054054054. R:0.5', 'morph-csvP:0.6666666666666666. R:1.0', 'xcitP:0.2. R:0.5', 'dptkP:1.0. R:0.2']"
-06/09/2021 13:23,44,0.640644657,0.835822511,"['gtfs-benchP:0.0. R:0.0', 'SOLQP:0.5. R:1.0', 'Self-Correction-Human-ParsingP:0.09090909090909091. R:1.0', 'dptkP:1.0. R:0.2', 'graph-neural-pdeP:0.4375. R:1.0', 'DDOS_PythonP:0.4. R:0.8', 'giraffeP:0.0. R:0.0', 'CU-NetP:0.0. R:0.0', 'decision-transformerP:1.0. R:0.3333333333333333', 'wikidata-property-finderP:0.75. R:1.0', 'tada-gamP:0.25. R:1.0', 'BoostingMonocularDepthP:0.6666666666666666. R:1.0', 'lynx-pyP:0.0. R:0.0', 'nominatim-feedback-reporterP:0.5. R:1.0', 'TfaceP:0.23076923076923078. R:1.0', 'CalliarP:0.5. R:1.0', 'rtdlP:0.0. R:0.0', 'pySRURGSP:0.9. R:0.9', 'morph-csvP:0.6666666666666666. R:1.0', 'ssspotterP:0.5. R:1.0', 'ConSERTP:0.15789473684210525. R:1.0', 'code2vecP:1.0. R:0.4', 'xcitP:0.3333333333333333. R:1.0', 'AliceMindP:0.039473684210526314. R:0.5', 'deeplab2P:0.015151515151515152. R:0.5', 'face_classificationP:0.25. R:0.14285714285714285']"
-07/09/2021 02:10,44,0.637357428,0.843398268,"['gtfs-benchP:0.0. R:0.0', 'SOLQP:0.42857142857142855. R:1.0', 'Self-Correction-Human-ParsingP:0.09090909090909091. R:1.0', 'dptkP:1.0. R:0.2', 'graph-neural-pdeP:0.4375. R:1.0', 'DDOS_PythonP:0.4. R:0.8', 'giraffeP:0.0. R:0.0', 'CU-NetP:0.0. R:0.0', 'decision-transformerP:1.0. R:0.3333333333333333', 'wikidata-property-finderP:0.75. R:1.0', 'tada-gamP:0.25. R:1.0', 'BoostingMonocularDepthP:0.5714285714285714. R:1.0', 'lynx-pyP:0.0. R:0.0', 'nominatim-feedback-reporterP:0.5. R:1.0', 'TfaceP:0.23076923076923078. R:1.0', 'CalliarP:0.5. R:1.0', 'rtdlP:0.0. R:0.0', 'pySRURGSP:0.9. R:0.9', 'morph-csvP:0.6666666666666666. R:1.0', 'ssspotterP:0.5. R:1.0', 'ConSERTP:0.15789473684210525. R:1.0', 'code2vecP:1.0. R:0.4', 'xcitP:0.3333333333333333. R:1.0', 'AliceMindP:0.06172839506172839. R:0.8333333333333334', 'deeplab2P:0.014925373134328358. R:0.5', 'face_classificationP:0.25. R:0.14285714285714285']"
-08/09/2021 23:57,44,0.637374964,0.843398268,"['gtfs-benchP:0.0. R:0.0', 'SOLQP:0.42857142857142855. R:1.0', 'Self-Correction-Human-ParsingP:0.09090909090909091. R:1.0', 'dptkP:1.0. R:0.2', 'graph-neural-pdeP:0.4375. R:1.0', 'DDOS_PythonP:0.4. R:0.8', 'giraffeP:0.0. R:0.0', 'CU-NetP:0.0. R:0.0', 'decision-transformerP:1.0. R:0.3333333333333333', 'wikidata-property-finderP:0.75. R:1.0', 'tada-gamP:0.25. R:1.0', 'BoostingMonocularDepthP:0.5714285714285714. R:1.0', 'lynx-pyP:0.0. R:0.0', 'nominatim-feedback-reporterP:0.5. R:1.0', 'TfaceP:0.23076923076923078. R:1.0', 'CalliarP:0.5. R:1.0', 'rtdlP:0.0. R:0.0', 'pySRURGSP:0.9. R:0.9', 'morph-csvP:0.6666666666666666. R:1.0', 'ssspotterP:0.5. R:1.0', 'ConSERTP:0.15789473684210525. R:1.0', 'code2vecP:1.0. R:0.4', 'xcitP:0.3333333333333333. R:1.0', 'AliceMindP:0.0625. R:0.8333333333333334', 'deeplab2P:0.014925373134328358. R:0.5', 'face_classificationP:0.25. R:0.14285714285714285']"16/09/2021 23:18:46,44,0.63738540167966,0.8433982683982684,"['face_classificationP:0.25. R:0.14285714285714285', 'BoostingMonocularDepthP:0.5714285714285714. R:1.0', 'gtfs-benchP:0.0. R:0.0', 'TfaceP:0.23076923076923078. R:1.0', 'giraffeP:0.0. R:0.0', 'SOLQP:0.42857142857142855. R:1.0', 'lynx-pyP:0.0. R:0.0', 'ConSERTP:0.15789473684210525. R:1.0', 'decision-transformerP:1.0. R:0.3333333333333333', 'pySRURGSP:0.9. R:0.9', 'CU-NetP:0.0. R:0.0', 'graph-neural-pdeP:0.4375. R:1.0', 'CalliarP:0.5. R:1.0', 'code2vecP:1.0. R:0.4', 'ssspotterP:0.5. R:1.0', 'rtdlP:0.0. R:0.0', 'tada-gamP:0.25. R:1.0', 'deeplab2P:0.015384615384615385. R:0.5', 'nominatim-feedback-reporterP:0.5. R:1.0', 'Self-Correction-Human-ParsingP:0.09090909090909091. R:1.0', 'DDOS_PythonP:0.4. R:0.8', 'AliceMindP:0.0625. R:0.8333333333333334', 'morph-csvP:0.6666666666666666. R:1.0', 'xcitP:0.3333333333333333. R:1.0', 'dptkP:1.0. R:0.2', 'wikidata-property-finderP:0.75. R:1.0']"
-16/09/2021 23:32:14,44,0.63738540167966,0.8433982683982684,"['face_classificationP:0.25. R:0.14285714285714285', 'BoostingMonocularDepthP:0.5714285714285714. R:1.0', 'gtfs-benchP:0.0. R:0.0', 'TfaceP:0.23076923076923078. R:1.0', 'giraffeP:0.0. R:0.0', 'SOLQP:0.42857142857142855. R:1.0', 'lynx-pyP:0.0. R:0.0', 'ConSERTP:0.15789473684210525. R:1.0', 'decision-transformerP:1.0. R:0.3333333333333333', 'pySRURGSP:0.9. R:0.9', 'CU-NetP:0.0. R:0.0', 'graph-neural-pdeP:0.4375. R:1.0', 'CalliarP:0.5. R:1.0', 'code2vecP:1.0. R:0.4', 'ssspotterP:0.5. R:1.0', 'rtdlP:0.0. R:0.0', 'tada-gamP:0.25. R:1.0', 'deeplab2P:0.015384615384615385. R:0.5', 'nominatim-feedback-reporterP:0.5. R:1.0', 'Self-Correction-Human-ParsingP:0.09090909090909091. R:1.0', 'DDOS_PythonP:0.4. R:0.8', 'AliceMindP:0.0625. R:0.8333333333333334', 'morph-csvP:0.6666666666666666. R:1.0', 'xcitP:0.3333333333333333. R:1.0', 'dptkP:1.0. R:0.2', 'wikidata-property-finderP:0.75. R:1.0']"
+date,#repositories,precision_avg,recall_avg,errors
+28/08/2021 19:49,45,0.64224297,0.821693122,"['face_classificationP:0.3333333333333333;R:0.14285714285714285', 'BoostingMonocularDepthP:0.4;R:0.6666666666666666', 'EPSANetP:0.5;R:1.0', 'gtfs-benchP:0.0;R:0.0', 'TfaceP:0.5;R:1.0', 'giraffeP:0.0;R:0.0', 'SOLQP:0.4;R:0.6666666666666666', 'lynx-pyP:0.0;R:0.0', 'ConSERTP:0.16666666666666666;R:1.0', 'decision-transformerP:1.0;R:0.3333333333333333', 'pySRURGSP:0.8571428571428571;R:0.6', 'rcpmP:1.0;R:0.6666666666666666', 'graph-neural-pdeP:0.5454545454545454;R:1.0', 'CalliarP:0.5;R:1.0', 'code2vecP:1.0;R:0.4', 'ssspotterP:0.5;R:1.0', 'rtdlP:0.0;R:0.0', 'tada-gamP:0.25;R:1.0', 'deeplab2P:0.016129032258064516;R:0.5', 'nominatim-feedback-reporterP:0.5;R:1.0', 'Self-Correction-Human-ParsingP:0.125;R:1.0', 'DDOS_PythonP:0.4;R:0.8', 'AliceMindP:0.04054054054054054;R:0.5', 'morph-csvP:0.6666666666666666;R:1.0', 'xcitP:0.2;R:0.5', 'dptkP:1.0;R:0.2', 'wikidata-property-finderP:0.6666666666666666;R:1.0', 'wikidata-property-finderP:0.3333333333333333;R:1.0']"
+28/08/2021 21:30,44,0.667996426,0.82521645,"['face_classificationP:0.3333333333333333. R:0.14285714285714285', 'BoostingMonocularDepthP:0.8. R:1.0', 'EPSANetP:0.5. R:1.0', 'gtfs-benchP:0.0. R:0.0', 'TfaceP:0.5. R:1.0', 'giraffeP:0.0. R:0.0', 'SOLQP:0.4. R:0.6666666666666666', 'lynx-pyP:0.0. R:0.0', 'ConSERTP:0.16666666666666666. R:1.0', 'decision-transformerP:1.0. R:0.3333333333333333', 'pySRURGSP:0.8571428571428571. R:0.6', 'rcpmP:1.0. R:0.6666666666666666', 'graph-neural-pdeP:0.6363636363636364. R:1.0', 'CalliarP:0.5. R:1.0', 'code2vecP:1.0. R:0.4', 'ssspotterP:0.5. R:1.0', 'rtdlP:0.0. R:0.0', 'tada-gamP:0.25. R:1.0', 'deeplab2P:0.016129032258064516. R:0.5', 'nominatim-feedback-reporterP:0.5. R:1.0', 'Self-Correction-Human-ParsingP:0.125. R:1.0', 'DDOS_PythonP:0.4. R:0.8', 'AliceMindP:0.04054054054054054. R:0.5', 'morph-csvP:0.6666666666666666. R:1.0', 'xcitP:0.2. R:0.5', 'dptkP:1.0. R:0.2']"
+28/08/2021 21:42,44,0.667996426,0.82521645,"['face_classificationP:0.3333333333333333. R:0.14285714285714285', 'BoostingMonocularDepthP:0.8. R:1.0', 'EPSANetP:0.5. R:1.0', 'gtfs-benchP:0.0. R:0.0', 'TfaceP:0.5. R:1.0', 'giraffeP:0.0. R:0.0', 'SOLQP:0.4. R:0.6666666666666666', 'lynx-pyP:0.0. R:0.0', 'ConSERTP:0.16666666666666666. R:1.0', 'decision-transformerP:1.0. R:0.3333333333333333', 'pySRURGSP:0.8571428571428571. R:0.6', 'rcpmP:1.0. R:0.6666666666666666', 'graph-neural-pdeP:0.6363636363636364. R:1.0', 'CalliarP:0.5. R:1.0', 'code2vecP:1.0. R:0.4', 'ssspotterP:0.5. R:1.0', 'rtdlP:0.0. R:0.0', 'tada-gamP:0.25. R:1.0', 'deeplab2P:0.016129032258064516. R:0.5', 'nominatim-feedback-reporterP:0.5. R:1.0', 'Self-Correction-Human-ParsingP:0.125. R:1.0', 'DDOS_PythonP:0.4. R:0.8', 'AliceMindP:0.04054054054054054. R:0.5', 'morph-csvP:0.6666666666666666. R:1.0', 'xcitP:0.2. R:0.5', 'dptkP:1.0. R:0.2']"
+28/08/2021 22:29,44,0.667996426,0.82521645,"['face_classificationP:0.3333333333333333. R:0.14285714285714285', 'BoostingMonocularDepthP:0.8. R:1.0', 'EPSANetP:0.5. R:1.0', 'gtfs-benchP:0.0. R:0.0', 'TfaceP:0.5. R:1.0', 'giraffeP:0.0. R:0.0', 'SOLQP:0.4. R:0.6666666666666666', 'lynx-pyP:0.0. R:0.0', 'ConSERTP:0.16666666666666666. R:1.0', 'decision-transformerP:1.0. R:0.3333333333333333', 'pySRURGSP:0.8571428571428571. R:0.6', 'rcpmP:1.0. R:0.6666666666666666', 'graph-neural-pdeP:0.6363636363636364. R:1.0', 'CalliarP:0.5. R:1.0', 'code2vecP:1.0. R:0.4', 'ssspotterP:0.5. R:1.0', 'rtdlP:0.0. R:0.0', 'tada-gamP:0.25. R:1.0', 'deeplab2P:0.016129032258064516. R:0.5', 'nominatim-feedback-reporterP:0.5. R:1.0', 'Self-Correction-Human-ParsingP:0.125. R:1.0', 'DDOS_PythonP:0.4. R:0.8', 'AliceMindP:0.04054054054054054. R:0.5', 'morph-csvP:0.6666666666666666. R:1.0', 'xcitP:0.2. R:0.5', 'dptkP:1.0. R:0.2']"
+06/09/2021 13:23,44,0.640644657,0.835822511,"['gtfs-benchP:0.0. R:0.0', 'SOLQP:0.5. R:1.0', 'Self-Correction-Human-ParsingP:0.09090909090909091. R:1.0', 'dptkP:1.0. R:0.2', 'graph-neural-pdeP:0.4375. R:1.0', 'DDOS_PythonP:0.4. R:0.8', 'giraffeP:0.0. R:0.0', 'CU-NetP:0.0. R:0.0', 'decision-transformerP:1.0. R:0.3333333333333333', 'wikidata-property-finderP:0.75. R:1.0', 'tada-gamP:0.25. R:1.0', 'BoostingMonocularDepthP:0.6666666666666666. R:1.0', 'lynx-pyP:0.0. R:0.0', 'nominatim-feedback-reporterP:0.5. R:1.0', 'TfaceP:0.23076923076923078. R:1.0', 'CalliarP:0.5. R:1.0', 'rtdlP:0.0. R:0.0', 'pySRURGSP:0.9. R:0.9', 'morph-csvP:0.6666666666666666. R:1.0', 'ssspotterP:0.5. R:1.0', 'ConSERTP:0.15789473684210525. R:1.0', 'code2vecP:1.0. R:0.4', 'xcitP:0.3333333333333333. R:1.0', 'AliceMindP:0.039473684210526314. R:0.5', 'deeplab2P:0.015151515151515152. R:0.5', 'face_classificationP:0.25. R:0.14285714285714285']"
+07/09/2021 02:10,44,0.637357428,0.843398268,"['gtfs-benchP:0.0. R:0.0', 'SOLQP:0.42857142857142855. R:1.0', 'Self-Correction-Human-ParsingP:0.09090909090909091. R:1.0', 'dptkP:1.0. R:0.2', 'graph-neural-pdeP:0.4375. R:1.0', 'DDOS_PythonP:0.4. R:0.8', 'giraffeP:0.0. R:0.0', 'CU-NetP:0.0. R:0.0', 'decision-transformerP:1.0. R:0.3333333333333333', 'wikidata-property-finderP:0.75. R:1.0', 'tada-gamP:0.25. R:1.0', 'BoostingMonocularDepthP:0.5714285714285714. R:1.0', 'lynx-pyP:0.0. R:0.0', 'nominatim-feedback-reporterP:0.5. R:1.0', 'TfaceP:0.23076923076923078. R:1.0', 'CalliarP:0.5. R:1.0', 'rtdlP:0.0. R:0.0', 'pySRURGSP:0.9. R:0.9', 'morph-csvP:0.6666666666666666. R:1.0', 'ssspotterP:0.5. R:1.0', 'ConSERTP:0.15789473684210525. R:1.0', 'code2vecP:1.0. R:0.4', 'xcitP:0.3333333333333333. R:1.0', 'AliceMindP:0.06172839506172839. R:0.8333333333333334', 'deeplab2P:0.014925373134328358. R:0.5', 'face_classificationP:0.25. R:0.14285714285714285']"
+08/09/2021 23:57,44,0.637374964,0.843398268,"['gtfs-benchP:0.0. R:0.0', 'SOLQP:0.42857142857142855. R:1.0', 'Self-Correction-Human-ParsingP:0.09090909090909091. R:1.0', 'dptkP:1.0. R:0.2', 'graph-neural-pdeP:0.4375. R:1.0', 'DDOS_PythonP:0.4. R:0.8', 'giraffeP:0.0. R:0.0', 'CU-NetP:0.0. R:0.0', 'decision-transformerP:1.0. R:0.3333333333333333', 'wikidata-property-finderP:0.75. R:1.0', 'tada-gamP:0.25. R:1.0', 'BoostingMonocularDepthP:0.5714285714285714. R:1.0', 'lynx-pyP:0.0. R:0.0', 'nominatim-feedback-reporterP:0.5. R:1.0', 'TfaceP:0.23076923076923078. R:1.0', 'CalliarP:0.5. R:1.0', 'rtdlP:0.0. R:0.0', 'pySRURGSP:0.9. R:0.9', 'morph-csvP:0.6666666666666666. R:1.0', 'ssspotterP:0.5. R:1.0', 'ConSERTP:0.15789473684210525. R:1.0', 'code2vecP:1.0. R:0.4', 'xcitP:0.3333333333333333. R:1.0', 'AliceMindP:0.0625. R:0.8333333333333334', 'deeplab2P:0.014925373134328358. R:0.5', 'face_classificationP:0.25. R:0.14285714285714285']""16/09/2021 23:18:46,44,0.63738540167966,0.8433982683982684,""['face_classificationP:0.25. R:0.14285714285714285', 'BoostingMonocularDepthP:0.5714285714285714. R:1.0', 'gtfs-benchP:0.0. R:0.0', 'TfaceP:0.23076923076923078. R:1.0', 'giraffeP:0.0. R:0.0', 'SOLQP:0.42857142857142855. R:1.0', 'lynx-pyP:0.0. R:0.0', 'ConSERTP:0.15789473684210525. R:1.0', 'decision-transformerP:1.0. R:0.3333333333333333', 'pySRURGSP:0.9. R:0.9', 'CU-NetP:0.0. R:0.0', 'graph-neural-pdeP:0.4375. R:1.0', 'CalliarP:0.5. R:1.0', 'code2vecP:1.0. R:0.4', 'ssspotterP:0.5. R:1.0', 'rtdlP:0.0. R:0.0', 'tada-gamP:0.25. R:1.0', 'deeplab2P:0.015384615384615385. R:0.5', 'nominatim-feedback-reporterP:0.5. R:1.0', 'Self-Correction-Human-ParsingP:0.09090909090909091. R:1.0', 'DDOS_PythonP:0.4. R:0.8', 'AliceMindP:0.0625. R:0.8333333333333334', 'morph-csvP:0.6666666666666666. R:1.0', 'xcitP:0.3333333333333333. R:1.0', 'dptkP:1.0. R:0.2', 'wikidata-property-finderP:0.75. R:1.0']"
+16/09/2021 23:32:14,44,0.63738540167966,0.843398268398268,"['face_classificationP:0.25. R:0.14285714285714285', 'BoostingMonocularDepthP:0.5714285714285714. R:1.0', 'gtfs-benchP:0.0. R:0.0', 'TfaceP:0.23076923076923078. R:1.0', 'giraffeP:0.0. R:0.0', 'SOLQP:0.42857142857142855. R:1.0', 'lynx-pyP:0.0. R:0.0', 'ConSERTP:0.15789473684210525. R:1.0', 'decision-transformerP:1.0. R:0.3333333333333333', 'pySRURGSP:0.9. R:0.9', 'CU-NetP:0.0. R:0.0', 'graph-neural-pdeP:0.4375. R:1.0', 'CalliarP:0.5. R:1.0', 'code2vecP:1.0. R:0.4', 'ssspotterP:0.5. R:1.0', 'rtdlP:0.0. R:0.0', 'tada-gamP:0.25. R:1.0', 'deeplab2P:0.015384615384615385. R:0.5', 'nominatim-feedback-reporterP:0.5. R:1.0', 'Self-Correction-Human-ParsingP:0.09090909090909091. R:1.0', 'DDOS_PythonP:0.4. R:0.8', 'AliceMindP:0.0625. R:0.8333333333333334', 'morph-csvP:0.6666666666666666. R:1.0', 'xcitP:0.3333333333333333. R:1.0', 'dptkP:1.0. R:0.2', 'wikidata-property-finderP:0.75. R:1.0']"
+19/09/2021 19:53:02,44,0.6382635128716634,0.7522727272727273,"['face_classificationP:0.25. R:0.14285714285714285', 'BoostingMonocularDepthP:0.5714285714285714. R:1.0', 'gtfs-benchP:0.0. R:0.0', 'tada-webP:0.6666666666666666. R:1', 'TfaceP:0.18181818181818182. R:0.6666666666666666', 'giraffeP:0.4. R:0.5', 'SOLQP:0.2. R:0.3333333333333333', 'lynx-pyP:0.0. R:0.0', 'ConSERTP:0.10344827586206896. R:0.5', 'decision-transformerP:1.0. R:0.3333333333333333', 'pySRURGSP:0.9. R:0.9', 'CU-NetP:0.0. R:0.0', 'graph-neural-pdeP:0.42857142857142855. R:0.8571428571428571', 'CalliarP:0.5. R:1.0', 'code2vecP:1.0. R:0.2', 'ssspotterP:0.5. R:1.0', 'rtdlP:0.0. R:0.0', 'tada-gamP:0.25. R:1.0', 'Morph-OMEP:0.3333333333333333. R:1.0', 'deeplab2P:0.1. R:0.5', 'Self-Correction-Human-ParsingP:0.045454545454545456. R:0.3333333333333333', 'DDOS_PythonP:0.4. R:0.8', 'AliceMindP:0.08620689655172414. R:0.8333333333333334', 'morph-csvP:0.6666666666666666. R:1.0', 'xcitP:0.5. R:1.0', 'dptkP:1.0. R:0.2']"


Test patch:
diff --git a/evaluation/test/test_benchmark.csv b/evaluation/test/test_benchmark.csv
deleted file mode 100644
index d6126ff..0000000
--- a/evaluation/test/test_benchmark.csv
+++ /dev/null
@@ -1,97 +0,0 @@
-repository,annotator,test_folder,test_file_paths,comments
-rosafilgueira/code_inspector,DG,,,
-KnowledgeCaptureAndDiscovery/somef,DG,,,
-usc-isi-i2/kgtk,DG,,,
-LinkedEarth/Pyleoclim_util,DG,,,
-PyLops/pylops,DG,,,
-Toblerity/Shapely,DG,,,
-zhiqiangdon/CU-Net,DG,,,
-pyvista/pyvista,DG,,,
-usc-isi-i2/kgtk-browser,DG,,,
-usc-isi-i2/wikidata-property-finder,DG,,,
-oeg-upm/Chowlk,DG,,,
-oeg-upm/morph-csv,DG,,,
-modflowpy/flopy,DG,,,
-mintproject/cromo,DG,,,
-pySRURGS/pySRURGS,DG,,,
-gacou54/pyorthanc,DG,,,
-KnowledgeCaptureAndDiscovery/ClimComp,DG,,,
-clementranc/moana,DG,,,
-Maarten-vd-Sande/qnorm,DG,,,
-spotify/luigi,DG,,,
-dask/dask,DG,,,
-Yelp/mrjob,DG,,,
-httplib2/httplib2,DG,,,
-spyoungtech/grequests,DG,,,
-RDFLib/rdflib-jsonld,DG,,,
-RDFLib/sparqlwrapper,DG,,,
-RDFLib/pyLODE,DG,,,
-RDFLib/rdflib,DG,,,
-microsoft/fastseq,DG,,,
-PeikeLi/Self-Correction-Human-Parsing,DG,,,
-compphoto/BoostingMonocularDepth,DG,,,
-megvii-research/SOLQ,DG,,,
-yym6472/ConSERT,DG,,,
-navervision/mlsd,DG,,,
-microsoft/CoCosNet-v2,DG,,,
-murufeng/EPSANet,DG,,,
-kzl/decision-transformer,DG,,,
-OATML/Non-Parametric-Transformers,DG,,,
-dispel4py/dispel4py,DG,,,
-astropy/astropy,DG,,,
-vitsalis/PyCG,DG,,,
-Technologicat/pyan,DG,,,
-Kirili4ik/code2vec,DG,,,
-defoe-code/defoe,DG,,,
-obspy/obspy,DG,,,
-uafgeotools/pysep,DG,,,
-apache/airflow,DG,,,
-allenai/allennlp,DG,,,
-ageitgey/face_recognition,DG,,,
-oeg-upm/gtfs-bench,DG,,,
-oeg-upm/ssspotter,DG,,,
-oeg-upm/tada-gam,DG,,,
-oeg-upm/Morph-OME,DG,,,
-oeg-upm/lynx-py,DG,,,
-oeg-upm/fuzzy-c-means,DG,,,
-oeg-upm/tada-web,DG,,,
-oeg-upm/tada-reduce-combine,DG,,,
-oeg-upm/epw2rdf,DG,,,
-oeg-upm/Ppool,DG,,,
-oeg-upm/agora-py,DG,,,
-usc-isi-i2/table-linker,DG,,,
-usc-isi-i2/t2wml-annotation,DG,,,
-usc-isi-i2/dptk,DG,,,
-usc-isi-i2/sparql-jsonld,DG,,,
-usc-isi-i2/wikidata-reservation,DG,,,
-usc-isi-i2/dig-sandpaper,DG,,,
-usc-isi-i2/mowgli-in-the-jungle,DG,,,
-usc-isi-i2/datamart-upload,DG,,,
-usc-isi-i2/wikidata-property-finder,DG,,,
-usc-isi-i2/pyrallel,DG,,,
-usc-isi-i2/wikidata-satellite,DG,,,
-usc-isi-i2/rltk,DG,,,
-oarriaga/face_classification,DG,,,
-oarriaga/paz,DG,,,
-Kamaropoulos/COVID19Py,DG,,,
-aboul3la/Sublist3r,DG,,,
-asciinema/asciinema,DG,,,
-fabric/fabric,DG,,,
-wting/autojump,DG,,,
-darkshredder/nominatim-feedback-reporter,DG,,,
-BakeNecko/DDOS_Python,DG,,,
-EticaAI/HXL-Data-Science-file-formats,DG,,,
-kwai/DouZero,DG,,,
-PaddlePaddle/PaddleClas,DG,,,
-google-research/deeplab2,DG,,,
-facebookresearch/xcit,DG,,,
-autonomousvision/giraffe,DG,,,
-facebookresearch/rcpm,DG,,,
-twitter-research/graph-neural-pde,DG,,,
-yandex-research/rtdl,DG,,,
-Tencent/Tface,DG,,,
-pykale/pykale,DG,,,
-ARBML/Calliar,DG,,,
-yangxy/GPEN,DG,,,
-Microsoft/Graphormer,DG,,,
-alibaba/AliceMind,DG,,,
\ No newline at end of file
diff --git a/test/test_code_inspector.py b/test/test_code_inspector.py
index 9889fc9..0ee95e5 100644
--- a/test/test_code_inspector.py
+++ b/test/test_code_inspector.py
@@ -289,6 +289,29 @@ def test_script(self):
         shutil.rmtree(output_dir)
         assert current_type[0]["type"] == "script"
 
+# Test for testing ast trees
+#     def test_issue_110():
+#         output_html_file = "test_issue_110_output.html"
+#         self.assertEquals(3, 4)
+#         m = MakeDocco(input_data_file="test_issue_110_input.ttl")
+#         m.document(destination=output_html_file)
+#         assert "balance between £1,000 and £1,000,000 GBP" in open(output_html_file).read()
+
+    def test_ast(self):
+        a = print(ast.dump(ast.parse("""
+def crop_transform68(rimg, landmark, image_size, src):
+    
+    assert landmark.shape[0] == 68 or landmark.shape[0] == 5
+    assert landmark.shape[1] == 2
+    tform = trans.SimilarityTransform()
+
+    tform.estimate(landmark, src)
+    M = tform.params[0:2, :]
+    img = cv2.warpAffine(
+        rimg, M, (image_size[1], image_size[0]), borderValue=0.0)
+    return img
+"""), indent=4))
+
 
 def invoke_inspector(input_path, fig, output_dir, ignore_dir_pattern, ignore_file_pattern, requirements,
                      call_list, control_flow, directory_tree, software_invocation):