From 028e6f6b220d3fce5d6ab123223d631709ca4d86 Mon Sep 17 00:00:00 2001 From: Filippo Martini Date: Sun, 7 Mar 2021 19:07:08 +0100 Subject: [PATCH] Refactor StructureEstimator save_results and adjacency_matrix methods --- .idea/.gitignore | 3 - .idea/PyCTBN.iml | 8 -- .../inspectionProfiles/profiles_settings.xml | 6 - .idea/misc.xml | 4 - .idea/modules.xml | 8 -- .idea/vcs.xml | 6 - .idea/workspace.xml | 124 ++++++++++++++++++ CTBN_project_dominio.pdf | Bin 76127 -> 0 bytes .../PyCTBN/estimators/structure_estimator.py | 18 +-- PyCTBN/PyCTBN/structure_graph/sample_path.py | 1 + PyCTBN/PyCTBN/utility/json_importer.py | 1 - .../estimators/test_structure_estimator.py | 19 ++- basic_main.py | 41 ------ 13 files changed, 140 insertions(+), 99 deletions(-) delete mode 100644 .idea/.gitignore delete mode 100644 .idea/PyCTBN.iml delete mode 100644 .idea/inspectionProfiles/profiles_settings.xml delete mode 100644 .idea/misc.xml delete mode 100644 .idea/modules.xml delete mode 100644 .idea/vcs.xml create mode 100644 .idea/workspace.xml delete mode 100644 CTBN_project_dominio.pdf delete mode 100644 basic_main.py diff --git a/.idea/.gitignore b/.idea/.gitignore deleted file mode 100644 index 26d3352..0000000 --- a/.idea/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml diff --git a/.idea/PyCTBN.iml b/.idea/PyCTBN.iml deleted file mode 100644 index 9b31378..0000000 --- a/.idea/PyCTBN.iml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml deleted file mode 100644 index 105ce2d..0000000 --- a/.idea/inspectionProfiles/profiles_settings.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml deleted file mode 100644 index d1e22ec..0000000 --- a/.idea/misc.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml deleted file mode 100644 index 924bb5b..0000000 --- a/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index 94a25f7..0000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml new file mode 100644 index 0000000..3745e38 --- /dev/null +++ b/.idea/workspace.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1615134950460 + + + + + + + \ No newline at end of file diff --git a/CTBN_project_dominio.pdf b/CTBN_project_dominio.pdf deleted file mode 100644 index 6bceea1af34b9c29c702cbfd787532721a726c4a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 76127 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

`B$ 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 sJi|g1#>6n5hS3;C#Hq9XKPby)R|wBn`u^ diff --git a/PyCTBN/PyCTBN/estimators/structure_estimator.py b/PyCTBN/PyCTBN/estimators/structure_estimator.py index 19e64b0..aa03044 100644 --- a/PyCTBN/PyCTBN/estimators/structure_estimator.py +++ b/PyCTBN/PyCTBN/estimators/structure_estimator.py @@ -90,17 +90,14 @@ class StructureEstimator(object): list_without_test_parent.remove(parent_label) return map(list, itertools.combinations(list_without_test_parent, size)) - def save_results(self) -> None: - """Save the estimated Structure to a .json file in the path where the data are loaded from. - The file is named as the input dataset but the `results_` word is appended to the results file. + def save_results(self, file_path: str) -> None: + """Save the estimated Structure to a .json file in file_path. + + :param file_path: the path including the file name with .json extension + :type file_path: string """ res = json_graph.node_link_data(self._complete_graph) - name = self._sample_path._importer.file_path.rsplit('/', 1)[-1] - name = name.split('.', 1)[0] - name += '_' + str(self._sample_path._importer.dataset_id()) - name += '.json' - file_name = 'results_' + name - with open(file_name, 'w') as f: + with open(file_path, 'w') as f: json.dump(res, f) @@ -120,14 +117,13 @@ class StructureEstimator(object): """ pass - def adjacency_matrix(self) -> np.ndarray: """Converts the estimated structure ``_complete_graph`` to a boolean adjacency matrix representation. :return: The adjacency matrix of the graph ``_complete_graph`` :rtype: numpy.ndArray """ - return nx.adj_matrix(self._complete_graph).toarray().astype(bool) + return nx.adj_matrix(self._complete_graph, self._nodes).toarray().astype(bool) def spurious_edges(self) -> typing.List: """Return the spurious edges present in the estimated structure, if a prior net structure is present in diff --git a/PyCTBN/PyCTBN/structure_graph/sample_path.py b/PyCTBN/PyCTBN/structure_graph/sample_path.py index 8effce5..88e9649 100644 --- a/PyCTBN/PyCTBN/structure_graph/sample_path.py +++ b/PyCTBN/PyCTBN/structure_graph/sample_path.py @@ -10,6 +10,7 @@ from ..utility.abstract_importer import AbstractImporter MESSAGE_HAS_TO_CONTAIN_EXCEPTION = 'The importer object has to contain the all processed data!' + class SamplePath(object): """Aggregates all the informations about the trajectories, the real structure of the sampled net and variables cardinalites. Has the task of creating the objects ``Trajectory`` and ``Structure`` that will diff --git a/PyCTBN/PyCTBN/utility/json_importer.py b/PyCTBN/PyCTBN/utility/json_importer.py index 7ac7b7e..edff212 100644 --- a/PyCTBN/PyCTBN/utility/json_importer.py +++ b/PyCTBN/PyCTBN/utility/json_importer.py @@ -131,7 +131,6 @@ class JsonImporter(AbstractImporter): :rtype: List """ dataframe = pd.DataFrame - #print(raw_data) smps = raw_data[indx][trajectories_key] df_samples_list = [dataframe(sample) for sample in smps] return df_samples_list diff --git a/PyCTBN/tests/estimators/test_structure_estimator.py b/PyCTBN/tests/estimators/test_structure_estimator.py index 30b9e18..e368b93 100644 --- a/PyCTBN/tests/estimators/test_structure_estimator.py +++ b/PyCTBN/tests/estimators/test_structure_estimator.py @@ -24,6 +24,7 @@ class TestStructureEstimator(unittest.TestCase): cls.s1 = SamplePath(cls.importer) cls.s1.build_trajectories() cls.s1.build_structure() + cls.real_net_structure = nx.DiGraph(cls.s1.structure.edges) def test_init(self): exp_alfa = 0.1 @@ -50,7 +51,6 @@ class TestStructureEstimator(unittest.TestCase): no_self_loops.remove(node) for n2 in no_self_loops: self.assertIn((node, n2), cg.edges) - #se1.save_plot_estimated_structure_graph() def test_build_removable_edges_matrix(self): exp_alfa = 0.1 @@ -84,18 +84,12 @@ class TestStructureEstimator(unittest.TestCase): print("Execution Time: ", exec_time) for ed in self.s1.structure.edges: self.assertIn(tuple(ed), se1._complete_graph.edges) - #print("Spurious Edges:", se1.spurious_edges()) - #se1.save_plot_estimated_structure_graph() def test_save_results(self): se1 = StructureConstraintBasedEstimator(self.s1, 0.1, 0.1) se1.ctpc_algorithm() - se1.save_results() - name = self.s1._importer.file_path.rsplit('/', 1)[-1] - name = name.split('.', 1)[0] - name += '_' + str(self.s1._importer.dataset_id()) - name += '.json' - file_name = 'results_' + name + file_name = './PyCTBN/tests/estimators/test_save.json' + se1.save_results(file_name) with open(file_name) as f: js_graph = json.load(f) result_graph = nx.json_graph.node_link_graph(js_graph) @@ -105,13 +99,16 @@ class TestStructureEstimator(unittest.TestCase): def test_adjacency_matrix(self): se1 = StructureConstraintBasedEstimator(self.s1, 0.1, 0.1) se1.ctpc_algorithm() - adj_matrix = nx.adj_matrix(se1._complete_graph).toarray().astype(bool) + adj_matrix = nx.adj_matrix(self.real_net_structure, self.s1.structure.nodes_labels).toarray().astype(bool) self.assertTrue(np.array_equal(adj_matrix, se1.adjacency_matrix())) def test_save_plot_estimated_graph(self): se1 = StructureConstraintBasedEstimator(self.s1, 0.1, 0.1) edges = se1.estimate_structure(disable_multiprocessing=True) - se1.save_plot_estimated_structure_graph('./networks_and_trajectories_ternary_data_3.png') + file_name = './PyCTBN/tests/estimators/test_plot.png' + se1.save_plot_estimated_structure_graph(file_name) + os.remove(file_name) + if __name__ == '__main__': diff --git a/basic_main.py b/basic_main.py deleted file mode 100644 index 6559d38..0000000 --- a/basic_main.py +++ /dev/null @@ -1,41 +0,0 @@ -import glob -import os - -import sys -sys.path.append("./PyCTBN/") - -import structure_graph.network_graph as ng -import structure_graph.sample_path as sp -import structure_graph.set_of_cims as sofc -import estimators.parameters_estimator as pe -import utility.json_importer as ji - - -def main(): - read_files = glob.glob(os.path.join('./data', "*.json")) #Take all json files in this dir - #import data - importer = ji.JsonImporter(read_files[0], 'samples', 'dyn.str', 'variables', 'Time', 'Name') - #Create a SamplePath Obj - s1 = sp.SamplePath(importer) - #Build The trajectries and the structural infos - s1.build_trajectories() - s1.build_structure() - #From The Structure Object build the Graph - g = ng.NetworkGraph(s1.structure) - #Select a node you want to estimate the parameters - node = g.nodes[1] - #Init the graph specifically for THIS node - g.fast_init(node) - #Use SamplePath and Grpah to create a ParametersEstimator Object - p1 = pe.ParametersEstimator(s1, g) - #Init the peEst specifically for THIS node - p1.fast_init(node) - #Compute the parameters - sofc1 = p1.compute_parameters_for_node(node) - #The est CIMS are inside the resultant SetOfCIms Obj - print(sofc1.actual_cims) - -if __name__ == "__main__": - main() - -