| @@ -5,6 +5,16 @@ import pytest | |||||
| import multiprocessing | import multiprocessing | ||||
| import numpy as np | import numpy as np | ||||
| ############################################################################## | |||||
| def test_list_graph_kernels(): | |||||
| """ | |||||
| """ | |||||
| from gklearn.kernels import GRAPH_KERNELS, list_of_graph_kernels | |||||
| assert list_of_graph_kernels() == [i for i in GRAPH_KERNELS] | |||||
| ############################################################################## | |||||
| def chooseDataset(ds_name): | def chooseDataset(ds_name): | ||||
| """Choose dataset according to name. | """Choose dataset according to name. | ||||
| @@ -54,201 +64,252 @@ def chooseDataset(ds_name): | |||||
| return dataset | return dataset | ||||
| def test_list_graph_kernels(): | |||||
| """ | |||||
| def assert_equality(compute_fun, **kwargs): | |||||
| """Check if outputs are the same using different methods to compute. | |||||
| Parameters | |||||
| ---------- | |||||
| compute_fun : function | |||||
| The function to compute the kernel, with the same key word arguments as | |||||
| kwargs. | |||||
| **kwargs : dict | |||||
| The key word arguments over the grid of which the kernel results are | |||||
| compared. | |||||
| Returns | |||||
| ------- | |||||
| None. | |||||
| """ | """ | ||||
| from gklearn.kernels import GRAPH_KERNELS, list_of_graph_kernels | |||||
| assert list_of_graph_kernels() == [i for i in GRAPH_KERNELS] | |||||
| from sklearn.model_selection import ParameterGrid | |||||
| param_grid = ParameterGrid(kwargs) | |||||
| result_lists = [[], [], []] | |||||
| for params in list(param_grid): | |||||
| results = compute_fun(**params) | |||||
| for rs, lst in zip(results, result_lists): | |||||
| lst.append(rs) | |||||
| for lst in result_lists: | |||||
| for i in range(len(lst[:-1])): | |||||
| assert np.array_equal(lst[i], lst[i + 1]) | |||||
| @pytest.mark.parametrize('ds_name', ['Alkane', 'AIDS']) | @pytest.mark.parametrize('ds_name', ['Alkane', 'AIDS']) | ||||
| @pytest.mark.parametrize('weight,compute_method', [(0.01, 'geo'), (1, 'exp')]) | @pytest.mark.parametrize('weight,compute_method', [(0.01, 'geo'), (1, 'exp')]) | ||||
| @pytest.mark.parametrize('parallel', ['imap_unordered', None]) | |||||
| def test_CommonWalk(ds_name, parallel, weight, compute_method): | |||||
| # @pytest.mark.parametrize('parallel', ['imap_unordered', None]) | |||||
| def test_CommonWalk(ds_name, weight, compute_method): | |||||
| """Test common walk kernel. | """Test common walk kernel. | ||||
| """ | """ | ||||
| from gklearn.kernels import CommonWalk | |||||
| import networkx as nx | |||||
| dataset = chooseDataset(ds_name) | |||||
| dataset.load_graphs([g for g in dataset.graphs if nx.number_of_nodes(g) > 1]) | |||||
| try: | |||||
| graph_kernel = CommonWalk(node_labels=dataset.node_labels, | |||||
| edge_labels=dataset.edge_labels, | |||||
| ds_infos=dataset.get_dataset_infos(keys=['directed']), | |||||
| weight=weight, | |||||
| compute_method=compute_method) | |||||
| gram_matrix, run_time = graph_kernel.compute(dataset.graphs, | |||||
| parallel=parallel, n_jobs=multiprocessing.cpu_count(), verbose=True) | |||||
| kernel_list, run_time = graph_kernel.compute(dataset.graphs[0], dataset.graphs[1:], | |||||
| parallel=parallel, n_jobs=multiprocessing.cpu_count(), verbose=True) | |||||
| kernel, run_time = graph_kernel.compute(dataset.graphs[0], dataset.graphs[1], | |||||
| parallel=parallel, n_jobs=multiprocessing.cpu_count(), verbose=True) | |||||
| except Exception as exception: | |||||
| assert False, exception | |||||
| def compute(parallel=None): | |||||
| from gklearn.kernels import CommonWalk | |||||
| import networkx as nx | |||||
| dataset = chooseDataset(ds_name) | |||||
| dataset.load_graphs([g for g in dataset.graphs if nx.number_of_nodes(g) > 1]) | |||||
| try: | |||||
| graph_kernel = CommonWalk(node_labels=dataset.node_labels, | |||||
| edge_labels=dataset.edge_labels, | |||||
| ds_infos=dataset.get_dataset_infos(keys=['directed']), | |||||
| weight=weight, | |||||
| compute_method=compute_method) | |||||
| gram_matrix, run_time = graph_kernel.compute(dataset.graphs, | |||||
| parallel=parallel, n_jobs=multiprocessing.cpu_count(), verbose=True) | |||||
| kernel_list, run_time = graph_kernel.compute(dataset.graphs[0], dataset.graphs[1:], | |||||
| parallel=parallel, n_jobs=multiprocessing.cpu_count(), verbose=True) | |||||
| kernel, run_time = graph_kernel.compute(dataset.graphs[0], dataset.graphs[1], | |||||
| parallel=parallel, n_jobs=multiprocessing.cpu_count(), verbose=True) | |||||
| except Exception as exception: | |||||
| assert False, exception | |||||
| else: | |||||
| return gram_matrix, kernel_list, kernel | |||||
| assert_equality(compute, parallel=['imap_unordered', None]) | |||||
| @pytest.mark.parametrize('ds_name', ['Alkane', 'AIDS']) | @pytest.mark.parametrize('ds_name', ['Alkane', 'AIDS']) | ||||
| @pytest.mark.parametrize('remove_totters', [False]) #[True, False]) | @pytest.mark.parametrize('remove_totters', [False]) #[True, False]) | ||||
| @pytest.mark.parametrize('parallel', ['imap_unordered', None]) | |||||
| def test_Marginalized(ds_name, parallel, remove_totters): | |||||
| # @pytest.mark.parametrize('parallel', ['imap_unordered', None]) | |||||
| def test_Marginalized(ds_name, remove_totters): | |||||
| """Test marginalized kernel. | """Test marginalized kernel. | ||||
| """ | """ | ||||
| from gklearn.kernels import Marginalized | |||||
| def compute(parallel=None): | |||||
| from gklearn.kernels import Marginalized | |||||
| dataset = chooseDataset(ds_name) | |||||
| dataset = chooseDataset(ds_name) | |||||
| try: | |||||
| graph_kernel = Marginalized(node_labels=dataset.node_labels, | |||||
| edge_labels=dataset.edge_labels, | |||||
| ds_infos=dataset.get_dataset_infos(keys=['directed']), | |||||
| p_quit=0.5, | |||||
| n_iteration=2, | |||||
| remove_totters=remove_totters) | |||||
| gram_matrix, run_time = graph_kernel.compute(dataset.graphs, | |||||
| parallel=parallel, n_jobs=multiprocessing.cpu_count(), verbose=True) | |||||
| kernel_list, run_time = graph_kernel.compute(dataset.graphs[0], dataset.graphs[1:], | |||||
| parallel=parallel, n_jobs=multiprocessing.cpu_count(), verbose=True) | |||||
| kernel, run_time = graph_kernel.compute(dataset.graphs[0], dataset.graphs[1], | |||||
| parallel=parallel, n_jobs=multiprocessing.cpu_count(), verbose=True) | |||||
| try: | |||||
| graph_kernel = Marginalized(node_labels=dataset.node_labels, | |||||
| edge_labels=dataset.edge_labels, | |||||
| ds_infos=dataset.get_dataset_infos(keys=['directed']), | |||||
| p_quit=0.5, | |||||
| n_iteration=2, | |||||
| remove_totters=remove_totters) | |||||
| gram_matrix, run_time = graph_kernel.compute(dataset.graphs, | |||||
| parallel=parallel, n_jobs=multiprocessing.cpu_count(), verbose=True) | |||||
| kernel_list, run_time = graph_kernel.compute(dataset.graphs[0], dataset.graphs[1:], | |||||
| parallel=parallel, n_jobs=multiprocessing.cpu_count(), verbose=True) | |||||
| kernel, run_time = graph_kernel.compute(dataset.graphs[0], dataset.graphs[1], | |||||
| parallel=parallel, n_jobs=multiprocessing.cpu_count(), verbose=True) | |||||
| except Exception as exception: | |||||
| assert False, exception | |||||
| except Exception as exception: | |||||
| assert False, exception | |||||
| else: | |||||
| return gram_matrix, kernel_list, kernel | |||||
| assert_equality(compute, parallel=['imap_unordered', None]) | |||||
| @pytest.mark.parametrize('ds_name', ['Acyclic']) | @pytest.mark.parametrize('ds_name', ['Acyclic']) | ||||
| @pytest.mark.parametrize('parallel', ['imap_unordered', None]) | |||||
| def test_SylvesterEquation(ds_name, parallel): | |||||
| # @pytest.mark.parametrize('parallel', ['imap_unordered', None]) | |||||
| def test_SylvesterEquation(ds_name): | |||||
| """Test sylvester equation kernel. | """Test sylvester equation kernel. | ||||
| """ | """ | ||||
| from gklearn.kernels import SylvesterEquation | |||||
| def compute(parallel=None): | |||||
| from gklearn.kernels import SylvesterEquation | |||||
| dataset = chooseDataset(ds_name) | |||||
| dataset = chooseDataset(ds_name) | |||||
| try: | |||||
| graph_kernel = SylvesterEquation( | |||||
| ds_infos=dataset.get_dataset_infos(keys=['directed']), | |||||
| weight=1e-3, | |||||
| p=None, | |||||
| q=None, | |||||
| edge_weight=None) | |||||
| gram_matrix, run_time = graph_kernel.compute(dataset.graphs, | |||||
| parallel=parallel, n_jobs=multiprocessing.cpu_count(), verbose=True) | |||||
| kernel_list, run_time = graph_kernel.compute(dataset.graphs[0], dataset.graphs[1:], | |||||
| parallel=parallel, n_jobs=multiprocessing.cpu_count(), verbose=True) | |||||
| kernel, run_time = graph_kernel.compute(dataset.graphs[0], dataset.graphs[1], | |||||
| parallel=parallel, n_jobs=multiprocessing.cpu_count(), verbose=True) | |||||
| try: | |||||
| graph_kernel = SylvesterEquation( | |||||
| ds_infos=dataset.get_dataset_infos(keys=['directed']), | |||||
| weight=1e-3, | |||||
| p=None, | |||||
| q=None, | |||||
| edge_weight=None) | |||||
| gram_matrix, run_time = graph_kernel.compute(dataset.graphs, | |||||
| parallel=parallel, n_jobs=multiprocessing.cpu_count(), verbose=True) | |||||
| kernel_list, run_time = graph_kernel.compute(dataset.graphs[0], dataset.graphs[1:], | |||||
| parallel=parallel, n_jobs=multiprocessing.cpu_count(), verbose=True) | |||||
| kernel, run_time = graph_kernel.compute(dataset.graphs[0], dataset.graphs[1], | |||||
| parallel=parallel, n_jobs=multiprocessing.cpu_count(), verbose=True) | |||||
| except Exception as exception: | |||||
| assert False, exception | |||||
| else: | |||||
| return gram_matrix, kernel_list, kernel | |||||
| except Exception as exception: | |||||
| assert False, exception | |||||
| assert_equality(compute, parallel=['imap_unordered', None]) | |||||
| @pytest.mark.parametrize('ds_name', ['Acyclic', 'AIDS']) | @pytest.mark.parametrize('ds_name', ['Acyclic', 'AIDS']) | ||||
| @pytest.mark.parametrize('parallel', ['imap_unordered', None]) | |||||
| def test_ConjugateGradient(ds_name, parallel): | |||||
| # @pytest.mark.parametrize('parallel', ['imap_unordered', None]) | |||||
| def test_ConjugateGradient(ds_name): | |||||
| """Test conjugate gradient kernel. | """Test conjugate gradient kernel. | ||||
| """ | """ | ||||
| from gklearn.kernels import ConjugateGradient | |||||
| from gklearn.utils.kernels import deltakernel, gaussiankernel, kernelproduct | |||||
| import functools | |||||
| dataset = chooseDataset(ds_name) | |||||
| mixkernel = functools.partial(kernelproduct, deltakernel, gaussiankernel) | |||||
| sub_kernels = {'symb': deltakernel, 'nsymb': gaussiankernel, 'mix': mixkernel} | |||||
| try: | |||||
| graph_kernel = ConjugateGradient( | |||||
| node_labels=dataset.node_labels, | |||||
| node_attrs=dataset.node_attrs, | |||||
| edge_labels=dataset.edge_labels, | |||||
| edge_attrs=dataset.edge_attrs, | |||||
| ds_infos=dataset.get_dataset_infos(keys=['directed']), | |||||
| weight=1e-3, | |||||
| p=None, | |||||
| q=None, | |||||
| edge_weight=None, | |||||
| node_kernels=sub_kernels, | |||||
| edge_kernels=sub_kernels) | |||||
| gram_matrix, run_time = graph_kernel.compute(dataset.graphs, | |||||
| parallel=parallel, n_jobs=multiprocessing.cpu_count(), verbose=True) | |||||
| kernel_list, run_time = graph_kernel.compute(dataset.graphs[0], dataset.graphs[1:], | |||||
| parallel=parallel, n_jobs=multiprocessing.cpu_count(), verbose=True) | |||||
| kernel, run_time = graph_kernel.compute(dataset.graphs[0], dataset.graphs[1], | |||||
| parallel=parallel, n_jobs=multiprocessing.cpu_count(), verbose=True) | |||||
| except Exception as exception: | |||||
| assert False, exception | |||||
| def compute(parallel=None): | |||||
| from gklearn.kernels import ConjugateGradient | |||||
| from gklearn.utils.kernels import deltakernel, gaussiankernel, kernelproduct | |||||
| import functools | |||||
| dataset = chooseDataset(ds_name) | |||||
| mixkernel = functools.partial(kernelproduct, deltakernel, gaussiankernel) | |||||
| sub_kernels = {'symb': deltakernel, 'nsymb': gaussiankernel, 'mix': mixkernel} | |||||
| try: | |||||
| graph_kernel = ConjugateGradient( | |||||
| node_labels=dataset.node_labels, | |||||
| node_attrs=dataset.node_attrs, | |||||
| edge_labels=dataset.edge_labels, | |||||
| edge_attrs=dataset.edge_attrs, | |||||
| ds_infos=dataset.get_dataset_infos(keys=['directed']), | |||||
| weight=1e-3, | |||||
| p=None, | |||||
| q=None, | |||||
| edge_weight=None, | |||||
| node_kernels=sub_kernels, | |||||
| edge_kernels=sub_kernels) | |||||
| gram_matrix, run_time = graph_kernel.compute(dataset.graphs, | |||||
| parallel=parallel, n_jobs=multiprocessing.cpu_count(), verbose=True) | |||||
| kernel_list, run_time = graph_kernel.compute(dataset.graphs[0], dataset.graphs[1:], | |||||
| parallel=parallel, n_jobs=multiprocessing.cpu_count(), verbose=True) | |||||
| kernel, run_time = graph_kernel.compute(dataset.graphs[0], dataset.graphs[1], | |||||
| parallel=parallel, n_jobs=multiprocessing.cpu_count(), verbose=True) | |||||
| except Exception as exception: | |||||
| assert False, exception | |||||
| else: | |||||
| return gram_matrix, kernel_list, kernel | |||||
| assert_equality(compute, parallel=['imap_unordered', None]) | |||||
| @pytest.mark.parametrize('ds_name', ['Acyclic', 'AIDS']) | @pytest.mark.parametrize('ds_name', ['Acyclic', 'AIDS']) | ||||
| @pytest.mark.parametrize('parallel', ['imap_unordered', None]) | |||||
| def test_FixedPoint(ds_name, parallel): | |||||
| # @pytest.mark.parametrize('parallel', ['imap_unordered', None]) | |||||
| def test_FixedPoint(ds_name): | |||||
| """Test fixed point kernel. | """Test fixed point kernel. | ||||
| """ | """ | ||||
| from gklearn.kernels import FixedPoint | |||||
| from gklearn.utils.kernels import deltakernel, gaussiankernel, kernelproduct | |||||
| import functools | |||||
| dataset = chooseDataset(ds_name) | |||||
| mixkernel = functools.partial(kernelproduct, deltakernel, gaussiankernel) | |||||
| sub_kernels = {'symb': deltakernel, 'nsymb': gaussiankernel, 'mix': mixkernel} | |||||
| try: | |||||
| graph_kernel = FixedPoint( | |||||
| node_labels=dataset.node_labels, | |||||
| node_attrs=dataset.node_attrs, | |||||
| edge_labels=dataset.edge_labels, | |||||
| edge_attrs=dataset.edge_attrs, | |||||
| ds_infos=dataset.get_dataset_infos(keys=['directed']), | |||||
| weight=1e-3, | |||||
| p=None, | |||||
| q=None, | |||||
| edge_weight=None, | |||||
| node_kernels=sub_kernels, | |||||
| edge_kernels=sub_kernels) | |||||
| gram_matrix, run_time = graph_kernel.compute(dataset.graphs, | |||||
| parallel=parallel, n_jobs=multiprocessing.cpu_count(), verbose=True) | |||||
| kernel_list, run_time = graph_kernel.compute(dataset.graphs[0], dataset.graphs[1:], | |||||
| parallel=parallel, n_jobs=multiprocessing.cpu_count(), verbose=True) | |||||
| kernel, run_time = graph_kernel.compute(dataset.graphs[0], dataset.graphs[1], | |||||
| parallel=parallel, n_jobs=multiprocessing.cpu_count(), verbose=True) | |||||
| except Exception as exception: | |||||
| assert False, exception | |||||
| def compute(parallel=None): | |||||
| from gklearn.kernels import FixedPoint | |||||
| from gklearn.utils.kernels import deltakernel, gaussiankernel, kernelproduct | |||||
| import functools | |||||
| dataset = chooseDataset(ds_name) | |||||
| mixkernel = functools.partial(kernelproduct, deltakernel, gaussiankernel) | |||||
| sub_kernels = {'symb': deltakernel, 'nsymb': gaussiankernel, 'mix': mixkernel} | |||||
| try: | |||||
| graph_kernel = FixedPoint( | |||||
| node_labels=dataset.node_labels, | |||||
| node_attrs=dataset.node_attrs, | |||||
| edge_labels=dataset.edge_labels, | |||||
| edge_attrs=dataset.edge_attrs, | |||||
| ds_infos=dataset.get_dataset_infos(keys=['directed']), | |||||
| weight=1e-3, | |||||
| p=None, | |||||
| q=None, | |||||
| edge_weight=None, | |||||
| node_kernels=sub_kernels, | |||||
| edge_kernels=sub_kernels) | |||||
| gram_matrix, run_time = graph_kernel.compute(dataset.graphs, | |||||
| parallel=parallel, n_jobs=multiprocessing.cpu_count(), verbose=True) | |||||
| kernel_list, run_time = graph_kernel.compute(dataset.graphs[0], dataset.graphs[1:], | |||||
| parallel=parallel, n_jobs=multiprocessing.cpu_count(), verbose=True) | |||||
| kernel, run_time = graph_kernel.compute(dataset.graphs[0], dataset.graphs[1], | |||||
| parallel=parallel, n_jobs=multiprocessing.cpu_count(), verbose=True) | |||||
| except Exception as exception: | |||||
| assert False, exception | |||||
| else: | |||||
| return gram_matrix, kernel_list, kernel | |||||
| assert_equality(compute, parallel=['imap_unordered', None]) | |||||
| @pytest.mark.parametrize('ds_name', ['Acyclic']) | @pytest.mark.parametrize('ds_name', ['Acyclic']) | ||||
| @pytest.mark.parametrize('sub_kernel', ['exp', 'geo']) | @pytest.mark.parametrize('sub_kernel', ['exp', 'geo']) | ||||
| @pytest.mark.parametrize('parallel', ['imap_unordered', None]) | |||||
| def test_SpectralDecomposition(ds_name, sub_kernel, parallel): | |||||
| # @pytest.mark.parametrize('parallel', ['imap_unordered', None]) | |||||
| def test_SpectralDecomposition(ds_name, sub_kernel): | |||||
| """Test spectral decomposition kernel. | """Test spectral decomposition kernel. | ||||
| """ | """ | ||||
| from gklearn.kernels import SpectralDecomposition | |||||
| dataset = chooseDataset(ds_name) | |||||
| try: | |||||
| graph_kernel = SpectralDecomposition( | |||||
| ds_infos=dataset.get_dataset_infos(keys=['directed']), | |||||
| weight=1e-3, | |||||
| p=None, | |||||
| q=None, | |||||
| edge_weight=None, | |||||
| sub_kernel=sub_kernel) | |||||
| gram_matrix, run_time = graph_kernel.compute(dataset.graphs, | |||||
| parallel=parallel, n_jobs=multiprocessing.cpu_count(), verbose=True) | |||||
| kernel_list, run_time = graph_kernel.compute(dataset.graphs[0], dataset.graphs[1:], | |||||
| parallel=parallel, n_jobs=multiprocessing.cpu_count(), verbose=True) | |||||
| kernel, run_time = graph_kernel.compute(dataset.graphs[0], dataset.graphs[1], | |||||
| parallel=parallel, n_jobs=multiprocessing.cpu_count(), verbose=True) | |||||
| except Exception as exception: | |||||
| assert False, exception | |||||
| def compute(parallel=None): | |||||
| from gklearn.kernels import SpectralDecomposition | |||||
| dataset = chooseDataset(ds_name) | |||||
| try: | |||||
| graph_kernel = SpectralDecomposition( | |||||
| ds_infos=dataset.get_dataset_infos(keys=['directed']), | |||||
| weight=1e-3, | |||||
| p=None, | |||||
| q=None, | |||||
| edge_weight=None, | |||||
| sub_kernel=sub_kernel) | |||||
| gram_matrix, run_time = graph_kernel.compute(dataset.graphs, | |||||
| parallel=parallel, n_jobs=multiprocessing.cpu_count(), verbose=True) | |||||
| kernel_list, run_time = graph_kernel.compute(dataset.graphs[0], dataset.graphs[1:], | |||||
| parallel=parallel, n_jobs=multiprocessing.cpu_count(), verbose=True) | |||||
| kernel, run_time = graph_kernel.compute(dataset.graphs[0], dataset.graphs[1], | |||||
| parallel=parallel, n_jobs=multiprocessing.cpu_count(), verbose=True) | |||||
| except Exception as exception: | |||||
| assert False, exception | |||||
| else: | |||||
| return gram_matrix, kernel_list, kernel | |||||
| assert_equality(compute, parallel=['imap_unordered', None]) | |||||
| # @pytest.mark.parametrize( | # @pytest.mark.parametrize( | ||||
| @@ -301,184 +362,179 @@ def test_SpectralDecomposition(ds_name, sub_kernel, parallel): | |||||
| @pytest.mark.parametrize('ds_name', ['Alkane', 'Acyclic', 'Letter-med', 'AIDS', 'Fingerprint']) | @pytest.mark.parametrize('ds_name', ['Alkane', 'Acyclic', 'Letter-med', 'AIDS', 'Fingerprint']) | ||||
| @pytest.mark.parametrize('parallel', ['imap_unordered', None]) | |||||
| def test_ShortestPath(ds_name, parallel): | |||||
| # @pytest.mark.parametrize('parallel', ['imap_unordered', None]) | |||||
| def test_ShortestPath(ds_name): | |||||
| """Test shortest path kernel. | """Test shortest path kernel. | ||||
| """ | """ | ||||
| from gklearn.kernels import ShortestPath | |||||
| from gklearn.utils.kernels import deltakernel, gaussiankernel, kernelproduct | |||||
| import functools | |||||
| dataset = chooseDataset(ds_name) | |||||
| mixkernel = functools.partial(kernelproduct, deltakernel, gaussiankernel) | |||||
| sub_kernels = {'symb': deltakernel, 'nsymb': gaussiankernel, 'mix': mixkernel} | |||||
| try: | |||||
| graph_kernel = ShortestPath(node_labels=dataset.node_labels, | |||||
| node_attrs=dataset.node_attrs, | |||||
| ds_infos=dataset.get_dataset_infos(keys=['directed']), | |||||
| fcsp=True, | |||||
| node_kernels=sub_kernels) | |||||
| gram_matrix1, run_time = graph_kernel.compute(dataset.graphs, | |||||
| parallel=parallel, n_jobs=multiprocessing.cpu_count(), verbose=True) | |||||
| kernel_list, run_time = graph_kernel.compute(dataset.graphs[0], dataset.graphs[1:], | |||||
| parallel=parallel, n_jobs=multiprocessing.cpu_count(), verbose=True) | |||||
| kernel, run_time = graph_kernel.compute(dataset.graphs[0], dataset.graphs[1], | |||||
| parallel=parallel, n_jobs=multiprocessing.cpu_count(), verbose=True) | |||||
| graph_kernel = ShortestPath(node_labels=dataset.node_labels, | |||||
| node_attrs=dataset.node_attrs, | |||||
| ds_infos=dataset.get_dataset_infos(keys=['directed']), | |||||
| fcsp=False, | |||||
| node_kernels=sub_kernels) | |||||
| gram_matrix2, run_time = graph_kernel.compute(dataset.graphs, | |||||
| parallel=parallel, n_jobs=multiprocessing.cpu_count(), verbose=True) | |||||
| kernel_list, run_time = graph_kernel.compute(dataset.graphs[0], dataset.graphs[1:], | |||||
| parallel=parallel, n_jobs=multiprocessing.cpu_count(), verbose=True) | |||||
| kernel, run_time = graph_kernel.compute(dataset.graphs[0], dataset.graphs[1], | |||||
| parallel=parallel, n_jobs=multiprocessing.cpu_count(), verbose=True) | |||||
| except Exception as exception: | |||||
| assert False, exception | |||||
| assert np.array_equal(gram_matrix1, gram_matrix2) | |||||
| def compute(parallel=None, fcsp=None): | |||||
| from gklearn.kernels import ShortestPath | |||||
| from gklearn.utils.kernels import deltakernel, gaussiankernel, kernelproduct | |||||
| import functools | |||||
| dataset = chooseDataset(ds_name) | |||||
| mixkernel = functools.partial(kernelproduct, deltakernel, gaussiankernel) | |||||
| sub_kernels = {'symb': deltakernel, 'nsymb': gaussiankernel, 'mix': mixkernel} | |||||
| try: | |||||
| graph_kernel = ShortestPath(node_labels=dataset.node_labels, | |||||
| node_attrs=dataset.node_attrs, | |||||
| ds_infos=dataset.get_dataset_infos(keys=['directed']), | |||||
| fcsp=fcsp, | |||||
| node_kernels=sub_kernels) | |||||
| gram_matrix, run_time = graph_kernel.compute(dataset.graphs, | |||||
| parallel=parallel, n_jobs=multiprocessing.cpu_count(), verbose=True) | |||||
| kernel_list, run_time = graph_kernel.compute(dataset.graphs[0], dataset.graphs[1:], | |||||
| parallel=parallel, n_jobs=multiprocessing.cpu_count(), verbose=True) | |||||
| kernel, run_time = graph_kernel.compute(dataset.graphs[0], dataset.graphs[1], | |||||
| parallel=parallel, n_jobs=multiprocessing.cpu_count(), verbose=True) | |||||
| except Exception as exception: | |||||
| assert False, exception | |||||
| else: | |||||
| return gram_matrix, kernel_list, kernel | |||||
| assert_equality(compute, parallel=['imap_unordered', None], fcsp=[True, False]) | |||||
| #@pytest.mark.parametrize('ds_name', ['Alkane', 'Acyclic', 'Letter-med', 'AIDS', 'Fingerprint']) | #@pytest.mark.parametrize('ds_name', ['Alkane', 'Acyclic', 'Letter-med', 'AIDS', 'Fingerprint']) | ||||
| @pytest.mark.parametrize('ds_name', ['Alkane', 'Acyclic', 'Letter-med', 'AIDS', 'Fingerprint', 'Fingerprint_edge', 'Cuneiform']) | @pytest.mark.parametrize('ds_name', ['Alkane', 'Acyclic', 'Letter-med', 'AIDS', 'Fingerprint', 'Fingerprint_edge', 'Cuneiform']) | ||||
| @pytest.mark.parametrize('parallel', ['imap_unordered', None]) | |||||
| def test_StructuralSP(ds_name, parallel): | |||||
| # @pytest.mark.parametrize('parallel', ['imap_unordered', None]) | |||||
| def test_StructuralSP(ds_name): | |||||
| """Test structural shortest path kernel. | """Test structural shortest path kernel. | ||||
| """ | """ | ||||
| from gklearn.kernels import StructuralSP | |||||
| from gklearn.utils.kernels import deltakernel, gaussiankernel, kernelproduct | |||||
| import functools | |||||
| dataset = chooseDataset(ds_name) | |||||
| mixkernel = functools.partial(kernelproduct, deltakernel, gaussiankernel) | |||||
| sub_kernels = {'symb': deltakernel, 'nsymb': gaussiankernel, 'mix': mixkernel} | |||||
| try: | |||||
| graph_kernel = StructuralSP(node_labels=dataset.node_labels, | |||||
| edge_labels=dataset.edge_labels, | |||||
| node_attrs=dataset.node_attrs, | |||||
| edge_attrs=dataset.edge_attrs, | |||||
| ds_infos=dataset.get_dataset_infos(keys=['directed']), | |||||
| fcsp=True, | |||||
| node_kernels=sub_kernels, | |||||
| edge_kernels=sub_kernels) | |||||
| gram_matrix1, run_time = graph_kernel.compute(dataset.graphs, | |||||
| parallel=parallel, n_jobs=multiprocessing.cpu_count(), verbose=True, normalize=False) | |||||
| kernel_list, run_time = graph_kernel.compute(dataset.graphs[0], dataset.graphs[1:], | |||||
| parallel=parallel, n_jobs=multiprocessing.cpu_count(), verbose=True) | |||||
| kernel, run_time = graph_kernel.compute(dataset.graphs[0], dataset.graphs[1], | |||||
| parallel=parallel, n_jobs=multiprocessing.cpu_count(), verbose=True) | |||||
| graph_kernel = StructuralSP(node_labels=dataset.node_labels, | |||||
| edge_labels=dataset.edge_labels, | |||||
| node_attrs=dataset.node_attrs, | |||||
| edge_attrs=dataset.edge_attrs, | |||||
| ds_infos=dataset.get_dataset_infos(keys=['directed']), | |||||
| fcsp=False, | |||||
| node_kernels=sub_kernels, | |||||
| edge_kernels=sub_kernels) | |||||
| gram_matrix2, run_time = graph_kernel.compute(dataset.graphs, | |||||
| parallel=parallel, n_jobs=multiprocessing.cpu_count(), verbose=True, normalize=False) | |||||
| kernel_list, run_time = graph_kernel.compute(dataset.graphs[0], dataset.graphs[1:], | |||||
| parallel=parallel, n_jobs=multiprocessing.cpu_count(), verbose=True) | |||||
| kernel, run_time = graph_kernel.compute(dataset.graphs[0], dataset.graphs[1], | |||||
| parallel=parallel, n_jobs=multiprocessing.cpu_count(), verbose=True) | |||||
| except Exception as exception: | |||||
| assert False, exception | |||||
| assert np.array_equal(gram_matrix1, gram_matrix2) | |||||
| def compute(parallel=None, fcsp=None): | |||||
| from gklearn.kernels import StructuralSP | |||||
| from gklearn.utils.kernels import deltakernel, gaussiankernel, kernelproduct | |||||
| import functools | |||||
| dataset = chooseDataset(ds_name) | |||||
| mixkernel = functools.partial(kernelproduct, deltakernel, gaussiankernel) | |||||
| sub_kernels = {'symb': deltakernel, 'nsymb': gaussiankernel, 'mix': mixkernel} | |||||
| try: | |||||
| graph_kernel = StructuralSP(node_labels=dataset.node_labels, | |||||
| edge_labels=dataset.edge_labels, | |||||
| node_attrs=dataset.node_attrs, | |||||
| edge_attrs=dataset.edge_attrs, | |||||
| ds_infos=dataset.get_dataset_infos(keys=['directed']), | |||||
| fcsp=fcsp, | |||||
| node_kernels=sub_kernels, | |||||
| edge_kernels=sub_kernels) | |||||
| gram_matrix, run_time = graph_kernel.compute(dataset.graphs, | |||||
| parallel=parallel, n_jobs=multiprocessing.cpu_count(), verbose=True) | |||||
| kernel_list, run_time = graph_kernel.compute(dataset.graphs[0], dataset.graphs[1:], | |||||
| parallel=parallel, n_jobs=multiprocessing.cpu_count(), verbose=True) | |||||
| kernel, run_time = graph_kernel.compute(dataset.graphs[0], dataset.graphs[1], | |||||
| parallel=parallel, n_jobs=multiprocessing.cpu_count(), verbose=True) | |||||
| except Exception as exception: | |||||
| assert False, exception | |||||
| else: | |||||
| return gram_matrix, kernel_list, kernel | |||||
| assert_equality(compute, parallel=['imap_unordered', None], fcsp=[True, False]) | |||||
| @pytest.mark.parametrize('ds_name', ['Alkane', 'AIDS']) | @pytest.mark.parametrize('ds_name', ['Alkane', 'AIDS']) | ||||
| @pytest.mark.parametrize('parallel', ['imap_unordered', None]) | |||||
| # @pytest.mark.parametrize('parallel', ['imap_unordered', None]) | |||||
| #@pytest.mark.parametrize('k_func', ['MinMax', 'tanimoto', None]) | #@pytest.mark.parametrize('k_func', ['MinMax', 'tanimoto', None]) | ||||
| @pytest.mark.parametrize('k_func', ['MinMax', 'tanimoto']) | @pytest.mark.parametrize('k_func', ['MinMax', 'tanimoto']) | ||||
| @pytest.mark.parametrize('compute_method', ['trie', 'naive']) | |||||
| def test_PathUpToH(ds_name, parallel, k_func, compute_method): | |||||
| # @pytest.mark.parametrize('compute_method', ['trie', 'naive']) | |||||
| def test_PathUpToH(ds_name, k_func): | |||||
| """Test path kernel up to length $h$. | """Test path kernel up to length $h$. | ||||
| """ | """ | ||||
| from gklearn.kernels import PathUpToH | |||||
| dataset = chooseDataset(ds_name) | |||||
| try: | |||||
| graph_kernel = PathUpToH(node_labels=dataset.node_labels, | |||||
| edge_labels=dataset.edge_labels, | |||||
| ds_infos=dataset.get_dataset_infos(keys=['directed']), | |||||
| depth=2, k_func=k_func, compute_method=compute_method) | |||||
| gram_matrix, run_time = graph_kernel.compute(dataset.graphs, | |||||
| parallel=parallel, n_jobs=multiprocessing.cpu_count(), verbose=True) | |||||
| kernel_list, run_time = graph_kernel.compute(dataset.graphs[0], dataset.graphs[1:], | |||||
| parallel=parallel, n_jobs=multiprocessing.cpu_count(), verbose=True) | |||||
| kernel, run_time = graph_kernel.compute(dataset.graphs[0], dataset.graphs[1], | |||||
| parallel=parallel, n_jobs=multiprocessing.cpu_count(), verbose=True) | |||||
| except Exception as exception: | |||||
| assert False, exception | |||||
| def compute(parallel=None, compute_method=None): | |||||
| from gklearn.kernels import PathUpToH | |||||
| dataset = chooseDataset(ds_name) | |||||
| try: | |||||
| graph_kernel = PathUpToH(node_labels=dataset.node_labels, | |||||
| edge_labels=dataset.edge_labels, | |||||
| ds_infos=dataset.get_dataset_infos(keys=['directed']), | |||||
| depth=2, k_func=k_func, compute_method=compute_method) | |||||
| gram_matrix, run_time = graph_kernel.compute(dataset.graphs, | |||||
| parallel=parallel, n_jobs=multiprocessing.cpu_count(), verbose=True) | |||||
| kernel_list, run_time = graph_kernel.compute(dataset.graphs[0], dataset.graphs[1:], | |||||
| parallel=parallel, n_jobs=multiprocessing.cpu_count(), verbose=True) | |||||
| kernel, run_time = graph_kernel.compute(dataset.graphs[0], dataset.graphs[1], | |||||
| parallel=parallel, n_jobs=multiprocessing.cpu_count(), verbose=True) | |||||
| except Exception as exception: | |||||
| assert False, exception | |||||
| else: | |||||
| return gram_matrix, kernel_list, kernel | |||||
| assert_equality(compute, parallel=['imap_unordered', None], | |||||
| compute_method=['trie', 'naive']) | |||||
| @pytest.mark.parametrize('ds_name', ['Alkane', 'AIDS']) | @pytest.mark.parametrize('ds_name', ['Alkane', 'AIDS']) | ||||
| @pytest.mark.parametrize('parallel', ['imap_unordered', None]) | |||||
| def test_Treelet(ds_name, parallel): | |||||
| # @pytest.mark.parametrize('parallel', ['imap_unordered', None]) | |||||
| def test_Treelet(ds_name): | |||||
| """Test treelet kernel. | """Test treelet kernel. | ||||
| """ | """ | ||||
| from gklearn.kernels import Treelet | |||||
| from gklearn.utils.kernels import polynomialkernel | |||||
| import functools | |||||
| dataset = chooseDataset(ds_name) | |||||
| pkernel = functools.partial(polynomialkernel, d=2, c=1e5) | |||||
| try: | |||||
| graph_kernel = Treelet(node_labels=dataset.node_labels, | |||||
| edge_labels=dataset.edge_labels, | |||||
| ds_infos=dataset.get_dataset_infos(keys=['directed']), | |||||
| sub_kernel=pkernel) | |||||
| gram_matrix, run_time = graph_kernel.compute(dataset.graphs, | |||||
| parallel=parallel, n_jobs=multiprocessing.cpu_count(), verbose=True) | |||||
| kernel_list, run_time = graph_kernel.compute(dataset.graphs[0], dataset.graphs[1:], | |||||
| parallel=parallel, n_jobs=multiprocessing.cpu_count(), verbose=True) | |||||
| kernel, run_time = graph_kernel.compute(dataset.graphs[0], dataset.graphs[1], | |||||
| parallel=parallel, n_jobs=multiprocessing.cpu_count(), verbose=True) | |||||
| except Exception as exception: | |||||
| assert False, exception | |||||
| def compute(parallel=None): | |||||
| from gklearn.kernels import Treelet | |||||
| from gklearn.utils.kernels import polynomialkernel | |||||
| import functools | |||||
| dataset = chooseDataset(ds_name) | |||||
| pkernel = functools.partial(polynomialkernel, d=2, c=1e5) | |||||
| try: | |||||
| graph_kernel = Treelet(node_labels=dataset.node_labels, | |||||
| edge_labels=dataset.edge_labels, | |||||
| ds_infos=dataset.get_dataset_infos(keys=['directed']), | |||||
| sub_kernel=pkernel) | |||||
| gram_matrix, run_time = graph_kernel.compute(dataset.graphs, | |||||
| parallel=parallel, n_jobs=multiprocessing.cpu_count(), verbose=True) | |||||
| kernel_list, run_time = graph_kernel.compute(dataset.graphs[0], dataset.graphs[1:], | |||||
| parallel=parallel, n_jobs=multiprocessing.cpu_count(), verbose=True) | |||||
| kernel, run_time = graph_kernel.compute(dataset.graphs[0], dataset.graphs[1], | |||||
| parallel=parallel, n_jobs=multiprocessing.cpu_count(), verbose=True) | |||||
| except Exception as exception: | |||||
| assert False, exception | |||||
| else: | |||||
| return gram_matrix, kernel_list, kernel | |||||
| assert_equality(compute, parallel=['imap_unordered', None]) | |||||
| @pytest.mark.parametrize('ds_name', ['Acyclic']) | @pytest.mark.parametrize('ds_name', ['Acyclic']) | ||||
| #@pytest.mark.parametrize('base_kernel', ['subtree', 'sp', 'edge']) | #@pytest.mark.parametrize('base_kernel', ['subtree', 'sp', 'edge']) | ||||
| # @pytest.mark.parametrize('base_kernel', ['subtree']) | # @pytest.mark.parametrize('base_kernel', ['subtree']) | ||||
| @pytest.mark.parametrize('parallel', ['imap_unordered', None]) | |||||
| def test_WLSubtree(ds_name, parallel): | |||||
| # @pytest.mark.parametrize('parallel', ['imap_unordered', None]) | |||||
| def test_WLSubtree(ds_name): | |||||
| """Test Weisfeiler-Lehman subtree kernel. | """Test Weisfeiler-Lehman subtree kernel. | ||||
| """ | """ | ||||
| from gklearn.kernels import WLSubtree | |||||
| dataset = chooseDataset(ds_name) | |||||
| try: | |||||
| graph_kernel = WLSubtree(node_labels=dataset.node_labels, | |||||
| edge_labels=dataset.edge_labels, | |||||
| ds_infos=dataset.get_dataset_infos(keys=['directed']), | |||||
| height=2) | |||||
| gram_matrix, run_time = graph_kernel.compute(dataset.graphs, | |||||
| parallel=parallel, n_jobs=multiprocessing.cpu_count(), verbose=True) | |||||
| kernel_list, run_time = graph_kernel.compute(dataset.graphs[0], dataset.graphs[1:], | |||||
| parallel=parallel, n_jobs=multiprocessing.cpu_count(), verbose=True) | |||||
| kernel, run_time = graph_kernel.compute(dataset.graphs[0], dataset.graphs[1], | |||||
| parallel=parallel, n_jobs=multiprocessing.cpu_count(), verbose=True) | |||||
| except Exception as exception: | |||||
| assert False, exception | |||||
| def compute(parallel=None): | |||||
| from gklearn.kernels import WLSubtree | |||||
| dataset = chooseDataset(ds_name) | |||||
| try: | |||||
| graph_kernel = WLSubtree(node_labels=dataset.node_labels, | |||||
| edge_labels=dataset.edge_labels, | |||||
| ds_infos=dataset.get_dataset_infos(keys=['directed']), | |||||
| height=2) | |||||
| gram_matrix, run_time = graph_kernel.compute(dataset.graphs, | |||||
| parallel=parallel, n_jobs=multiprocessing.cpu_count(), verbose=True) | |||||
| kernel_list, run_time = graph_kernel.compute(dataset.graphs[0], dataset.graphs[1:], | |||||
| parallel=parallel, n_jobs=multiprocessing.cpu_count(), verbose=True) | |||||
| kernel, run_time = graph_kernel.compute(dataset.graphs[0], dataset.graphs[1], | |||||
| parallel=parallel, n_jobs=multiprocessing.cpu_count(), verbose=True) | |||||
| except Exception as exception: | |||||
| assert False, exception | |||||
| else: | |||||
| return gram_matrix, kernel_list, kernel | |||||
| assert_equality(compute, parallel=['imap_unordered', None]) | |||||
| if __name__ == "__main__": | if __name__ == "__main__": | ||||
| test_list_graph_kernels() | |||||
| test_list_graph_kernels() | |||||
| # test_spkernel('Alkane', 'imap_unordered') | # test_spkernel('Alkane', 'imap_unordered') | ||||
| # test_ShortestPath('Alkane', 'imap_unordered') | |||||
| # test_ShortestPath('Alkane') | |||||
| # test_StructuralSP('Fingerprint_edge', 'imap_unordered') | # test_StructuralSP('Fingerprint_edge', 'imap_unordered') | ||||
| # test_StructuralSP('Alkane', None) | # test_StructuralSP('Alkane', None) | ||||
| # test_StructuralSP('Cuneiform', None) | # test_StructuralSP('Cuneiform', None) | ||||
| @@ -487,3 +543,4 @@ if __name__ == "__main__": | |||||
| # test_RandomWalk('Acyclic', 'conjugate', None, 'imap_unordered') | # test_RandomWalk('Acyclic', 'conjugate', None, 'imap_unordered') | ||||
| # test_RandomWalk('Acyclic', 'fp', None, None) | # test_RandomWalk('Acyclic', 'fp', None, None) | ||||
| # test_RandomWalk('Acyclic', 'spectral', 'exp', 'imap_unordered') | # test_RandomWalk('Acyclic', 'spectral', 'exp', 'imap_unordered') | ||||
| # test_CommonWalk('Alkane', 0.01, 'geo') | |||||