def test_compute_laplacian_matrix_args(almost_equal_decimals=5): input_types = ['data', 'adjacency', 'affinity'] params = [{}, {'radius': 4}, {'radius': 5}] lapl_params = [{}, {'scaling_epps': 4}, {'scaling_epps': 10}] adjacency_method = 'auto' affinity_method = 'auto' for laplacian_method in laplacian_methods(): X = np.random.uniform(size=(10, 2)) D = compute_adjacency_matrix(X, adjacency_method, **params[1]) A = compute_affinity_matrix(D, affinity_method, **params[1]) for init_params in lapl_params: for kwarg_params in lapl_params: true_params = init_params.copy() true_params.update(kwarg_params) laplacian_true = compute_laplacian_matrix( A, laplacian_method, **true_params) for input in input_types: G = Geometry(adjacency_method=adjacency_method, adjacency_kwds=params[1], affinity_method=affinity_method, affinity_kwds=params[1], laplacian_method=laplacian_method, laplacian_kwds=lapl_params[0]) if input in ['data']: G.set_data_matrix(X) if input in ['adjacency']: G.set_adjacency_matrix(D) else: G.set_affinity_matrix(A) laplacian_queried = G.compute_laplacian_matrix(**kwarg_params) assert_array_almost_equal(laplacian_true.todense(), laplacian_queried.todense(), almost_equal_decimals)
def test_compute_adjacency_matrix_args(almost_equal_decimals=5): """ test the compute_adjacency_matrix parameter arguments """ input_types = ['data', 'adjacency', 'affinity'] params = [{'radius':1}, {'radius':2}] for adjacency_method in adjacency_methods(): if adjacency_method == 'pyflann': try: import pyflann as pyf except ImportError: raise SkipTest("pyflann not installed.") X = np.random.uniform(size=(10, 2)) D = compute_adjacency_matrix(X, adjacency_method, **params[1]) A = compute_affinity_matrix(D, radius=1) for init_params in params: for kwarg_params in params: true_params = init_params.copy() true_params.update(kwarg_params) adjacency_true = compute_adjacency_matrix(X, adjacency_method, **true_params) G = Geometry(adjacency_method=adjacency_method, adjacency_kwds=init_params) for input in input_types: G = Geometry(adjacency_kwds = init_params) if input in ['data']: G.set_data_matrix(X) adjacency_queried = G.compute_adjacency_matrix(**kwarg_params) assert_allclose(adjacency_true.toarray(), adjacency_queried.toarray(), rtol=1E-5) else: if input in ['adjacency']: G.set_adjacency_matrix(D) else: G.set_affinity_matrix(A) msg = distance_error_msg assert_raise_message(ValueError, msg, G.compute_adjacency_matrix)
def test_compute_affinity_matrix_args(almost_equal_decimals=5): """ test the compute_affinity_matrix parameter arguments """ input_types = ['data', 'adjacency', 'affinity'] params = [{'radius': 4}, {'radius': 5}] adjacency_method = 'auto' for affinity_method in affinity_methods(): X = np.random.uniform(size=(10, 2)) D = compute_adjacency_matrix(X, adjacency_method, **params[1]) A = compute_affinity_matrix(D, affinity_method, **params[1]) for init_params in params: for kwarg_params in params: true_params = init_params.copy() true_params.update(kwarg_params) affinity_true = compute_affinity_matrix( D, adjacency_method, **true_params) for input in input_types: G = Geometry(adjacency_method=adjacency_method, adjacency_kwds=params[1], affinity_method=affinity_method, affinity_kwds=init_params) if input in ['data', 'adjacency']: if input in ['data']: G.set_data_matrix(X) else: G.set_adjacency_matrix(D) affinity_queried = G.compute_affinity_matrix( **kwarg_params) assert_array_almost_equal(affinity_true.todense(), affinity_queried.todense(), almost_equal_decimals) else: G.set_affinity_matrix(A) msg = distance_error_msg assert_raise_message(ValueError, msg, G.compute_affinity_matrix)
def test_compute_laplacian_matrix_args(almost_equal_decimals=5): input_types = ['data', 'adjacency', 'affinity'] params = [{}, {'radius':4}, {'radius':5}] lapl_params = [{}, {'scaling_epps':4}, {'scaling_epps':10}] adjacency_method = 'auto' affinity_method = 'auto' for laplacian_method in laplacian_methods(): X = np.random.uniform(size=(10, 2)) D = compute_adjacency_matrix(X, adjacency_method, **params[1]) A = compute_affinity_matrix(D, affinity_method, **params[1]) for init_params in lapl_params: for kwarg_params in lapl_params: true_params = init_params.copy() true_params.update(kwarg_params) laplacian_true = compute_laplacian_matrix(A, laplacian_method, **true_params) for input in input_types: G = Geometry(adjacency_method = adjacency_method, adjacency_kwds = params[1], affinity_method = affinity_method, affinity_kwds = params[1], laplacian_method = laplacian_method, laplacian_kwds = lapl_params[0]) if input in ['data']: G.set_data_matrix(X) if input in ['adjacency']: G.set_adjacency_matrix(D) else: G.set_affinity_matrix(A) laplacian_queried = G.compute_laplacian_matrix(**kwarg_params) assert_array_almost_equal(laplacian_true.todense(), laplacian_queried.todense(), almost_equal_decimals)
def test_compute_affinity_matrix_args(almost_equal_decimals=5): """ test the compute_affinity_matrix parameter arguments """ input_types = ['data', 'adjacency', 'affinity'] params = [{'radius':4}, {'radius':5}] adjacency_method = 'auto' for affinity_method in affinity_methods(): X = np.random.uniform(size=(10, 2)) D = compute_adjacency_matrix(X, adjacency_method, **params[1]) A = compute_affinity_matrix(D, affinity_method, **params[1]) for init_params in params: for kwarg_params in params: true_params = init_params.copy() true_params.update(kwarg_params) affinity_true = compute_affinity_matrix(D, adjacency_method, **true_params) for input in input_types: G = Geometry(adjacency_method = adjacency_method, adjacency_kwds = params[1], affinity_method = affinity_method, affinity_kwds = init_params) if input in ['data', 'adjacency']: if input in ['data']: G.set_data_matrix(X) else: G.set_adjacency_matrix(D) affinity_queried = G.compute_affinity_matrix(**kwarg_params) assert_array_almost_equal(affinity_true.todense(), affinity_queried.todense(), almost_equal_decimals) else: G.set_affinity_matrix(A) msg = distance_error_msg assert_raise_message(ValueError, msg, G.compute_affinity_matrix)
def test_geometry_update(): """ Test passing geometry object then independently update a parameter and confirm that the embedding geometry is also updated """ g1 = Geometry(adjacency_method = 'auto', adjacency_kwds = {'radius':4}, affinity_method = 'auto', affinity_kwds = {'radius':4}, laplacian_method = 'geometric', laplacian_kwds = {'scaling_eps':4}) base_embedding = BaseEmbedding(geom=g1) X = np.random.rand(10, 2) # Now update g1 -- object that was passed g1.set_data_matrix(X) # confirm internal object is updated assert_allclose(g1.X, base_embedding.geom.X)
def test_geometry_update(): """ Test passing geometry object then independently update a parameter and confirm that the embedding geometry is also updated """ g1 = Geometry(adjacency_method='auto', adjacency_kwds={'radius': 4}, affinity_method='auto', affinity_kwds={'radius': 4}, laplacian_method='geometric', laplacian_kwds={'scaling_eps': 4}) base_embedding = BaseEmbedding(geom=g1) X = np.random.rand(10, 2) # Now update g1 -- object that was passed g1.set_data_matrix(X) # confirm internal object is updated assert_allclose(g1.X, base_embedding.geom.X)
def test_geometry_object(): """ Test passing a geometry object and confirm the output """ g1 = Geometry(adjacency_method='auto', adjacency_kwds={'radius': 4}, affinity_method='auto', affinity_kwds={'radius': 4}, laplacian_method='geometric', laplacian_kwds={'scaling_eps': 4}) base_embedding = BaseEmbedding(geom=g1).fit_geometry() assert (g1.__dict__ == base_embedding.geom_.__dict__)
def test_embeddings_fit_vs_transform(): rand = np.random.RandomState(42) X = rand.rand(100, 5) geom = Geometry(adjacency_kwds = {'radius':1.0}, affinity_kwds = {'radius':1.0}) def check_embedding(Embedding, n_components): model = Embedding(n_components=n_components, geom=geom, random_state=rand) embedding = model.fit_transform(X) assert model.embedding_.shape == (X.shape[0], n_components) assert_allclose(embedding, model.embedding_) for Embedding in EMBEDDINGS: for n_components in [1, 2, 3]: yield check_embedding, Embedding, n_components
def test_compute_adjacency_matrix_args(almost_equal_decimals=5): """ test the compute_adjacency_matrix parameter arguments """ input_types = ['data', 'adjacency', 'affinity'] params = [{'radius': 1}, {'radius': 2}] for adjacency_method in adjacency_methods(): if adjacency_method == 'pyflann': try: import pyflann as pyf except ImportError: raise SkipTest("pyflann not installed.") X = np.random.uniform(size=(10, 2)) D = compute_adjacency_matrix(X, adjacency_method, **params[1]) A = compute_affinity_matrix(D, radius=1) for init_params in params: for kwarg_params in params: true_params = init_params.copy() true_params.update(kwarg_params) adjacency_true = compute_adjacency_matrix( X, adjacency_method, **true_params) G = Geometry(adjacency_method=adjacency_method, adjacency_kwds=init_params) for input in input_types: G = Geometry(adjacency_kwds=init_params) if input in ['data']: G.set_data_matrix(X) adjacency_queried = G.compute_adjacency_matrix( **kwarg_params) assert_allclose(adjacency_true.toarray(), adjacency_queried.toarray(), rtol=1E-5) else: if input in ['adjacency']: G.set_adjacency_matrix(D) else: G.set_affinity_matrix(A) msg = distance_error_msg assert_raise_message(ValueError, msg, G.compute_adjacency_matrix)