diff --git a/src/shogun/lib/tapkee/callbacks/neighbor_callback.hpp b/src/shogun/lib/tapkee/callbacks/neighbor_callback.hpp deleted file mode 100644 index 2de66efe9b4..00000000000 --- a/src/shogun/lib/tapkee/callbacks/neighbor_callback.hpp +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef TAPKEE_NEIGHBOR_CALLBACK_H_ -#define TAPKEE_NEIGHBOR_CALLBACK_H_ - -#include "../defines.hpp" - -template -struct neighbors_finder -{ - virtual Neighbors find_neighbors(RandomAccessIterator begin, RandomAccessIterator end, unsigned int k); -}; - -#endif diff --git a/src/shogun/lib/tapkee/callbacks/precomputed_callbacks.hpp b/src/shogun/lib/tapkee/callbacks/precomputed_callbacks.hpp deleted file mode 100644 index 5d0e9564278..00000000000 --- a/src/shogun/lib/tapkee/callbacks/precomputed_callbacks.hpp +++ /dev/null @@ -1,51 +0,0 @@ -/* - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * Copyright (c) 2012, Sergey Lisitsyn, Fernando J. Iglesias GarcĂ­a - * - */ - -#ifndef TAPKEE_PRECOMPUTED_CALLBACKS_H_ -#define TAPKEE_PRECOMPUTED_CALLBACKS_H_ - -// Here we provide basic but still full set of callbacks -// based on the Eigen3 template matrix library - -// Kernel function callback that computes -// similarity function values on vectors -// given by their indices. This impl. computes -// linear kernel i.e. dot product between two vectors. -struct precomputed_kernel_callback -{ - precomputed_kernel_callback(const tapkee::DenseMatrix& matrix) : kernel_matrix(matrix) {}; - inline tapkee::DefaultScalarType operator()(int a, int b) const - { - return kernel_matrix(a,b); - } - const tapkee::DenseMatrix& kernel_matrix; -}; -// That's mandatory to specify that kernel_callback -// is a kernel (and it is good to know that it is linear). -TAPKEE_CALLBACK_IS_KERNEL(precomputed_kernel_callback); - -// Distance function callback that provides -// dissimilarity function values on vectors -// given by their indices. This impl. computes -// euclidean distance between two vectors. -struct precomputed_distance_callback -{ - precomputed_distance_callback(const tapkee::DenseMatrix& matrix) : distance_matrix(matrix) {}; - inline tapkee::DefaultScalarType operator()(int a, int b) const - { - return distance_matrix(a,b); - } - const tapkee::DenseMatrix& distance_matrix; -}; -// That's mandatory to specify that distance_callback -// is a distance -TAPKEE_CALLBACK_IS_DISTANCE(precomputed_distance_callback); -#endif - diff --git a/src/shogun/lib/tapkee/tapkee_defines.hpp b/src/shogun/lib/tapkee/tapkee_defines.hpp index 870861e23d1..6920034edba 100644 --- a/src/shogun/lib/tapkee/tapkee_defines.hpp +++ b/src/shogun/lib/tapkee/tapkee_defines.hpp @@ -16,10 +16,12 @@ #include #include #include +#include +#include + #include #include #include -#include #ifdef TAPKEE_EIGEN_INCLUDE_FILE #include TAPKEE_EIGEN_INCLUDE_FILE @@ -32,8 +34,12 @@ #include #if EIGEN_VERSION_AT_LEAST(3,1,0) #include + #if defined(TAPKEE_SUPERLU_AVAILABLE) && defined(TAPKEE_USE_SUPERLU) + #include + #endif #else #define EIGEN_YES_I_KNOW_SPARSE_MODULE_IS_NOT_STABLE_YET + #define TAPKEE_OLD_EIGEN #include #endif #endif @@ -67,10 +73,14 @@ namespace tapkee //! default selfadjoint solver typedef Eigen::SelfAdjointEigenSolver DefaultDenseSelfAdjointEigenSolver; //! default sparse solver -#ifdef EIGEN_YES_I_KNOW_SPARSE_MODULE_IS_NOT_STABLE_YET +#ifdef TAPKEE_OLD_EIGEN typedef Eigen::SimplicialCholesky DefaultSparseSolver; #else - typedef Eigen::SimplicialLDLT DefaultSparseSolver; + #if defined(TAPKEE_SUPERLU_AVAILABLE) && defined(TAPKEE_USE_SUPERLU) + typedef Eigen::SuperLU DefaultSparseSolver; + #else + typedef Eigen::SimplicialLDLT DefaultSparseSolver; + #endif #endif #ifdef TAPKEE_CUSTOM_PROPERTIES @@ -124,6 +134,24 @@ enum TAPKEE_METHOD UNKNOWN_METHOD }; +METHOD_THAT_NEEDS_ONLY_KERNEL_IS(KERNEL_LOCALLY_LINEAR_EMBEDDING); +METHOD_THAT_NEEDS_KERNEL_AND_FEATURES_IS(NEIGHBORHOOD_PRESERVING_EMBEDDING); +METHOD_THAT_NEEDS_ONLY_KERNEL_IS(KERNEL_LOCAL_TANGENT_SPACE_ALIGNMENT); +METHOD_THAT_NEEDS_KERNEL_AND_FEATURES_IS(LINEAR_LOCAL_TANGENT_SPACE_ALIGNMENT); +METHOD_THAT_NEEDS_ONLY_KERNEL_IS(HESSIAN_LOCALLY_LINEAR_EMBEDDING); +METHOD_THAT_NEEDS_ONLY_DISTANCE_IS(LAPLACIAN_EIGENMAPS); +METHOD_THAT_NEEDS_DISTANCE_AND_FEATURES_IS(LOCALITY_PRESERVING_PROJECTIONS); +METHOD_THAT_NEEDS_ONLY_DISTANCE_IS(DIFFUSION_MAP); +METHOD_THAT_NEEDS_ONLY_DISTANCE_IS(ISOMAP); +METHOD_THAT_NEEDS_ONLY_DISTANCE_IS(LANDMARK_ISOMAP); +METHOD_THAT_NEEDS_ONLY_DISTANCE_IS(MULTIDIMENSIONAL_SCALING); +METHOD_THAT_NEEDS_ONLY_DISTANCE_IS(LANDMARK_MULTIDIMENSIONAL_SCALING); +METHOD_THAT_NEEDS_DISTANCE_AND_FEATURES_IS(STOCHASTIC_PROXIMITY_EMBEDDING); +METHOD_THAT_NEEDS_ONLY_KERNEL_IS(KERNEL_PCA); +METHOD_THAT_NEEDS_ONLY_FEATURES_IS(PCA); +METHOD_THAT_NEEDS_NOTHING_IS(PASS_THRU); +METHOD_THAT_NEEDS_NOTHING_IS(UNKNOWN_METHOD); + //! Neighbors computation method enum TAPKEE_NEIGHBORS_METHOD { @@ -161,7 +189,7 @@ enum TAPKEE_EIGEN_EMBEDDING_METHOD #define TAPKEE_INTERNAL_PAIR std::pair #endif -#ifdef EIGEN_YES_I_KNOW_SPARSE_MODULE_IS_NOT_STABLE_YET +#ifdef TAPKEE_OLD_EIGEN namespace tapkee { template struct Triplet