diff --git a/.ci/linux-steps.yaml b/.ci/linux-steps.yaml index cab07dc8bb..228c404583 100644 --- a/.ci/linux-steps.yaml +++ b/.ci/linux-steps.yaml @@ -35,8 +35,12 @@ steps: fi # Install armadillo. - curl https://data.kurg.org/armadillo-8.400.0.tar.xz | tar -xvJ && cd armadillo* - cmake . && make && sudo make install && cd .. + curl https://data.kurg.org/armadillo-8.400.0.tar.xz | tar -xvJ && \ + cd armadillo* && \ + cmake . && \ + make && \ + sudo make install && \ + cd .. # Install cereal. wget https://github.com/USCiLab/cereal/archive/v1.3.0.tar.gz diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index a9a2574072..d53a06fa41 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -41,7 +41,7 @@ jobs: Rscript -e "install.packages('remotes')" -e "saveRDS(remotes::dev_package_deps(dependencies = TRUE), 'depends.Rds')" - name: Cache R packages - if: runner.os != 'Windows' + if: runner.os != 'Windows' && runner.os != 'macOS' uses: actions/cache@v1 with: path: ${{ env.R_LIBS_USER }} @@ -120,7 +120,7 @@ jobs: run: Rscript -e "install.packages('remotes')" -e "saveRDS(remotes::dev_package_deps('${{ needs.jobR.outputs.r_bindings }}', dependencies = TRUE), 'depends.Rds')" - name: Cache R packages - if: runner.os != 'Windows' + if: runner.os != 'Windows' && runner.os != 'macOS' uses: actions/cache@v1 with: path: ${{ env.R_LIBS_USER }} @@ -129,6 +129,7 @@ jobs: - name: Install dependencies run: | + install.packages('remotes') remotes::install_deps('${{ needs.jobR.outputs.r_bindings }}', dependencies = TRUE) remotes::install_cran("rcmdcheck") shell: Rscript {0} diff --git a/CMake/Autodownload.cmake b/CMake/Autodownload.cmake index b82ab001b9..4864e5004c 100644 --- a/CMake/Autodownload.cmake +++ b/CMake/Autodownload.cmake @@ -44,10 +44,13 @@ macro(get_deps LINK DEPS_NAME PACKAGE) list(LENGTH DIRECTORIES DIRECTORIES_LEN) if (DIRECTORIES_LEN GREATER 0) list(GET DIRECTORIES 0 DEPENDENCY_DIR) - set(GENERIC_INCLUDE_DIR "${CMAKE_BINARY_DIR}/deps/${DEPENDENCY_DIR}/include") - # Clean this line when boost is removed. + # Clean these lines when boost is removed. if (${DEPS_NAME} MATCHES "boost") set(Boost_INCLUDE_DIR "${CMAKE_BINARY_DIR}/deps/${DEPENDENCY_DIR}/") + install(DIRECTORY "${Boost_INCLUDE_DIR}/boost" DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}") + else() + set(GENERIC_INCLUDE_DIR "${CMAKE_BINARY_DIR}/deps/${DEPENDENCY_DIR}/include") + install(DIRECTORY "${GENERIC_INCLUDE_DIR}/" DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}") endif() else () message(FATAL_ERROR diff --git a/CMake/ConfigureCrossCompile.cmake b/CMake/ConfigureCrossCompile.cmake index 75e28bc453..ba78707ec3 100644 --- a/CMake/ConfigureCrossCompile.cmake +++ b/CMake/ConfigureCrossCompile.cmake @@ -33,7 +33,7 @@ macro(search_openblas version) endif() file(GLOB OPENBLAS_LIBRARIES "${CMAKE_BINARY_DIR}/deps/OpenBLAS-${version}/libopenblas.a") set(BLAS_openblas_LIBRARY ${OPENBLAS_LIBRARIES}) - set(LAPACK_openblas_LIBRARY ${OPENBLAS_LIBRARIES}) + set(LAPACK_openblas_LIBRARY ${OPENBLAS_LIBRARIES}) set(BLA_VENDOR OpenBLAS) set(BLAS_FOUND ON) endif() diff --git a/CMakeLists.txt b/CMakeLists.txt index 71b5c0d8d5..29561d6fca 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.3.2) +cmake_minimum_required(VERSION 3.6) project(mlpack C CXX) include(CMake/cotire.cmake) @@ -283,6 +283,13 @@ if (DISABLE_DOWNLOADS) else() find_package(Armadillo "${ARMADILLO_VERSION}") if (NOT ARMADILLO_FOUND) + if (NOT CMAKE_CROSSCOMPILING) + find_package(BLAS QUIET) + find_package(LAPACK QUIET) + if (NOT BLAS_FOUND AND NOT LAPACK_FOUND) + message(FATAL_ERROR "Can not find BLAS or LAPACK! These are required for Armadillo. Please install one of them---or install Armadillo---before installing mlpack.") + endif() + endif() get_deps(http://files.mlpack.org/armadillo-10.3.0.tar.gz armadillo armadillo-10.3.0.tar.gz) set(ARMADILLO_INCLUDE_DIR ${GENERIC_INCLUDE_DIR}) find_package(Armadillo REQUIRED) diff --git a/HISTORY.md b/HISTORY.md index 140cbbf7b4..985eff4915 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -59,6 +59,10 @@ * Fixes to `HoeffdingTree`: ensure that training still works when empty constructor is used (#2964). + * Fix Julia model serialization bug (#2970). + + * Fix `LoadCSV()` to use pre-populated `DatasetInfo` objects (#2980). + * Fix Julia, Python, R, and Go handling of categorical data for `decision_tree()` and `hoeffding_tree()` (#2971). diff --git a/README.md b/README.md index f7000edef0..4731b85c1e 100644 --- a/README.md +++ b/README.md @@ -101,7 +101,7 @@ mlpack has the following dependencies: Armadillo >= 8.400.0 Boost (math_c99, spirit) >= 1.58.0 - CMake >= 3.2.2 + CMake >= 3.6 ensmallen >= 2.10.0 cereal >= 1.1.2 diff --git a/src/mlpack/bindings/R/default_param.hpp b/src/mlpack/bindings/R/default_param.hpp index 4d50eb16f5..2006e2eb23 100644 --- a/src/mlpack/bindings/R/default_param.hpp +++ b/src/mlpack/bindings/R/default_param.hpp @@ -26,12 +26,13 @@ namespace r { template std::string DefaultParamImpl( util::ParamData& data, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>>::type* = 0); + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if>::value>::type* = 0); /** * Return the default value of a vector option. @@ -39,7 +40,7 @@ std::string DefaultParamImpl( template std::string DefaultParamImpl( util::ParamData& data, - const typename boost::enable_if>::type* = 0); + const typename std::enable_if::value>::type* = 0); /** * Return the default value of a string option. @@ -47,7 +48,7 @@ std::string DefaultParamImpl( template std::string DefaultParamImpl( util::ParamData& data, - const typename boost::enable_if>::type* = 0); + const typename std::enable_if::value>::type* = 0); /** * Return the default value of a matrix option, a tuple option, a @@ -57,7 +58,7 @@ std::string DefaultParamImpl( template std::string DefaultParamImpl( util::ParamData& data, - const typename boost::enable_if_c< + const typename std::enable_if< arma::is_arma_type::value || std::is_same>::value>::type* /* junk */ = 0); @@ -69,8 +70,8 @@ std::string DefaultParamImpl( template std::string DefaultParamImpl( util::ParamData& data, - const typename boost::disable_if>::type* = 0, - const typename boost::enable_if>::type* = 0); + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0); /** * Return the default value of an option. This is the function that will be diff --git a/src/mlpack/bindings/R/default_param_impl.hpp b/src/mlpack/bindings/R/default_param_impl.hpp index de529d011a..5447d8738a 100644 --- a/src/mlpack/bindings/R/default_param_impl.hpp +++ b/src/mlpack/bindings/R/default_param_impl.hpp @@ -24,12 +24,13 @@ namespace r { template std::string DefaultParamImpl( util::ParamData& data, - const typename boost::disable_if>::type* /* junk */, - const typename boost::disable_if>::type* /* junk */, - const typename boost::disable_if>::type* /* junk */, - const typename boost::disable_if>::type*, - const typename boost::disable_if>>::type* /* junk */) + const typename std::enable_if::value>::type* /* junk */, + const typename std::enable_if::value>::type* /* junk */, + const typename std::enable_if::value>::type* /* junk */, + const typename std::enable_if::value>::type*, + const typename std::enable_if>::value>::type* /* junk */) { std::ostringstream oss; if (std::is_same::value) @@ -46,7 +47,7 @@ std::string DefaultParamImpl( template std::string DefaultParamImpl( util::ParamData& data, - const typename boost::enable_if>::type* /* junk */) + const typename std::enable_if::value>::type* /* junk */) { // Print each element in an array delimited by square brackets. std::ostringstream oss; @@ -89,7 +90,7 @@ std::string DefaultParamImpl( template std::string DefaultParamImpl( util::ParamData& data, - const typename boost::enable_if>::type*) + const typename std::enable_if::value>::type*) { const std::string& s = *boost::any_cast(&data.value); return "\"" + s + "\""; @@ -102,7 +103,7 @@ std::string DefaultParamImpl( template std::string DefaultParamImpl( util::ParamData& /* data */, - const typename boost::enable_if_c< + const typename std::enable_if< arma::is_arma_type::value || std::is_same>::value>::type* /* junk */) @@ -132,8 +133,8 @@ std::string DefaultParamImpl( template std::string DefaultParamImpl( util::ParamData& /* data */, - const typename boost::disable_if>::type* /* junk */, - const typename boost::enable_if>::type* /* junk */) + const typename std::enable_if::value>::type* /* junk */, + const typename std::enable_if::value>::type* /* junk */) { return "NA"; } diff --git a/src/mlpack/bindings/R/get_printable_param.hpp b/src/mlpack/bindings/R/get_printable_param.hpp index b76d62efa8..261d363642 100644 --- a/src/mlpack/bindings/R/get_printable_param.hpp +++ b/src/mlpack/bindings/R/get_printable_param.hpp @@ -25,11 +25,11 @@ namespace r { template std::string GetPrintableParam( util::ParamData& data, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>>::type* = 0) + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if>::value>::type* = 0) { std::ostringstream oss; oss << boost::any_cast(data.value); @@ -42,7 +42,7 @@ std::string GetPrintableParam( template std::string GetPrintableParam( util::ParamData& data, - const typename boost::enable_if>::type* = 0) + const typename std::enable_if::value>::type* = 0) { const T& t = boost::any_cast(data.value); @@ -58,7 +58,7 @@ std::string GetPrintableParam( template std::string GetPrintableParam( util::ParamData& data, - const typename boost::enable_if>::type* = 0) + const typename std::enable_if::value>::type* = 0) { // Get the matrix. const T& matrix = boost::any_cast(data.value); @@ -74,8 +74,8 @@ std::string GetPrintableParam( template std::string GetPrintableParam( util::ParamData& data, - const typename boost::disable_if>::type* = 0, - const typename boost::enable_if>::type* = 0) + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0) { std::ostringstream oss; oss << data.cppType << " model at " << boost::any_cast(data.value); @@ -88,8 +88,8 @@ std::string GetPrintableParam( template std::string GetPrintableParam( util::ParamData& data, - const typename boost::enable_if>>::type* = 0) + const typename std::enable_if>::value>::type* = 0) { // Get the matrix. const T& tuple = boost::any_cast(data.value); diff --git a/src/mlpack/bindings/R/get_printable_type.hpp b/src/mlpack/bindings/R/get_printable_type.hpp index 730422cade..6ca4932fe1 100644 --- a/src/mlpack/bindings/R/get_printable_type.hpp +++ b/src/mlpack/bindings/R/get_printable_type.hpp @@ -23,84 +23,88 @@ namespace r { template inline std::string GetPrintableType( util::ParamData& /* d */, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>>::type* = 0); + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if>::value>::type* = 0); template<> inline std::string GetPrintableType( util::ParamData& /* d */, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>>::type*); + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if>::value>::type*); template<> inline std::string GetPrintableType( util::ParamData& /* d */, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>>::type*); + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if>::value>::type*); template<> inline std::string GetPrintableType( util::ParamData& /* d */, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>>::type*); + const typename std::enable_if< + !util::IsStdVector::value>::type*, + const typename std::enable_if< + !data::HasSerialize::value>::type*, + const typename std::enable_if< + !arma::is_arma_type::value>::type*, + const typename std::enable_if< + !std::is_same>::value>::type*); template<> inline std::string GetPrintableType( util::ParamData& /* d */, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>>::type*); + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if>::value>::type*); template<> inline std::string GetPrintableType( util::ParamData& /* d */, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>>::type*); + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if>::value>::type*); template inline std::string GetPrintableType( util::ParamData& d, - const typename boost::enable_if>::type* = 0, - const typename boost::disable_if>>::type* = 0); + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if>::value>::type* = 0); template inline std::string GetPrintableType( util::ParamData& /* d */, - const typename boost::enable_if>::type* = 0, - const typename boost::disable_if>>::type* = 0); + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if>::value>::type* = 0); template inline std::string GetPrintableType( util::ParamData& /* d */, - const typename boost::enable_if>>::type* = 0); + const typename std::enable_if>::value>::type* = 0); template inline std::string GetPrintableType( util::ParamData& d, - const typename boost::disable_if>::type* = 0, - const typename boost::enable_if>::type* = 0, - const typename boost::disable_if>>::type* = 0); + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if>::value>::type* = 0); template void GetPrintableType(util::ParamData& d, diff --git a/src/mlpack/bindings/R/get_printable_type_impl.hpp b/src/mlpack/bindings/R/get_printable_type_impl.hpp index cedecdf2ab..88aa270199 100644 --- a/src/mlpack/bindings/R/get_printable_type_impl.hpp +++ b/src/mlpack/bindings/R/get_printable_type_impl.hpp @@ -22,11 +22,11 @@ namespace r { template inline std::string GetPrintableType( util::ParamData& /* d */, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>>::type*) + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if>::value>::type*) { return "unknown"; } @@ -34,11 +34,11 @@ inline std::string GetPrintableType( template<> inline std::string GetPrintableType( util::ParamData& /* d */, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>>::type*) + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if>::value>::type*) { return "integer"; } @@ -46,11 +46,11 @@ inline std::string GetPrintableType( template<> inline std::string GetPrintableType( util::ParamData& /* d */, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>>::type*) + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if>::value>::type*) { return "numeric"; } @@ -58,11 +58,15 @@ inline std::string GetPrintableType( template<> inline std::string GetPrintableType( util::ParamData& /* d */, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>>::type*) + const typename std::enable_if< + !util::IsStdVector::value>::type*, + const typename std::enable_if< + !data::HasSerialize::value>::type*, + const typename std::enable_if< + !arma::is_arma_type::value>::type*, + const typename std::enable_if< + !std::is_same>::value>::type*) { return "character"; } @@ -70,11 +74,11 @@ inline std::string GetPrintableType( template<> inline std::string GetPrintableType( util::ParamData& /* d */, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>>::type*) + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if>::value>::type*) { return "integer"; } @@ -82,11 +86,11 @@ inline std::string GetPrintableType( template<> inline std::string GetPrintableType( util::ParamData& /* d */, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>>::type*) + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if>::value>::type*) { return "logical"; } @@ -94,9 +98,9 @@ inline std::string GetPrintableType( template inline std::string GetPrintableType( util::ParamData& d, - const typename boost::enable_if>::type*, - const typename boost::disable_if>>::type*) + const typename std::enable_if::value>::type*, + const typename std::enable_if>::value>::type*) { return "vector of " + GetPrintableType(d) + "s"; } @@ -104,9 +108,9 @@ inline std::string GetPrintableType( template inline std::string GetPrintableType( util::ParamData& /* d */, - const typename boost::enable_if>::type*, - const typename boost::disable_if>>::type*) + const typename std::enable_if::value>::type*, + const typename std::enable_if>::value>::type*) { std::string type = "numeric matrix"; if (std::is_same::value) @@ -127,8 +131,8 @@ inline std::string GetPrintableType( template inline std::string GetPrintableType( util::ParamData& /* d */, - const typename boost::enable_if>>::type*) + const typename std::enable_if>::value>::type*) { return "categorical matrix/data.frame"; } @@ -136,10 +140,10 @@ inline std::string GetPrintableType( template inline std::string GetPrintableType( util::ParamData& d, - const typename boost::disable_if>::type*, - const typename boost::enable_if>::type*, - const typename boost::disable_if>>::type*) + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if>::value>::type*) { std::string type = util::StripType(d.cppType); if (type == "mlpackModel") diff --git a/src/mlpack/bindings/R/get_r_type.hpp b/src/mlpack/bindings/R/get_r_type.hpp index a32995dbca..3e92bb717d 100644 --- a/src/mlpack/bindings/R/get_r_type.hpp +++ b/src/mlpack/bindings/R/get_r_type.hpp @@ -23,11 +23,11 @@ namespace r { template inline std::string GetRType( util::ParamData& /* d */, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>>::type* = 0) + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if>::value>::type* = 0) { return "unknown"; } @@ -35,11 +35,11 @@ inline std::string GetRType( template<> inline std::string GetRType( util::ParamData& /* d */, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>>::type*) + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if>::value>::type*) { return "logical"; } @@ -47,11 +47,11 @@ inline std::string GetRType( template<> inline std::string GetRType( util::ParamData& /* d */, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>>::type*) + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if>::value>::type*) { return "integer"; } @@ -59,11 +59,11 @@ inline std::string GetRType( template<> inline std::string GetRType( util::ParamData& /* d */, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>>::type*) + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if>::value>::type*) { return "integer"; } @@ -71,11 +71,11 @@ inline std::string GetRType( template<> inline std::string GetRType( util::ParamData& /* d */, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>>::type*) + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if>::value>::type*) { return "numeric"; } @@ -83,11 +83,15 @@ inline std::string GetRType( template<> inline std::string GetRType( util::ParamData& /* d */, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>>::type*) + const typename std::enable_if< + !util::IsStdVector::value>::type*, + const typename std::enable_if< + !data::HasSerialize::value>::type*, + const typename std::enable_if< + !arma::is_arma_type::value>::type*, + const typename std::enable_if< + !std::is_same>::value>::type*) { return "character"; } @@ -95,7 +99,7 @@ inline std::string GetRType( template inline std::string GetRType( util::ParamData& d, - const typename boost::enable_if>::type* = 0) + const typename std::enable_if::value>::type* = 0) { return GetRType(d) + " vector"; } @@ -103,9 +107,9 @@ inline std::string GetRType( template inline std::string GetRType( util::ParamData& d, - const typename boost::disable_if>>::type* = 0, - const typename boost::enable_if>::type* = 0) + const typename std::enable_if>::value>::type* = 0, + const typename std::enable_if::value>::type* = 0) { std::string elemType = GetRType(d); std::string type = "matrix"; @@ -120,8 +124,8 @@ inline std::string GetRType( template inline std::string GetRType( util::ParamData& /* d */, - const typename boost::enable_if>>::type* = 0) + const typename std::enable_if>::value>::type* = 0) { return "numeric matrix/data.frame with info"; } @@ -129,8 +133,8 @@ inline std::string GetRType( template inline std::string GetRType( util::ParamData& d, - const typename boost::disable_if>::type* = 0, - const typename boost::enable_if>::type* = 0) + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0) { return util::StripType(d.cppType); } diff --git a/src/mlpack/bindings/R/get_type.hpp b/src/mlpack/bindings/R/get_type.hpp index 0437fefab0..55264eedb5 100644 --- a/src/mlpack/bindings/R/get_type.hpp +++ b/src/mlpack/bindings/R/get_type.hpp @@ -24,11 +24,11 @@ namespace r { template inline std::string GetType( util::ParamData& /* d */, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>>::type* = 0) + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if>::value>::type* = 0) { return "unknown"; } @@ -36,11 +36,11 @@ inline std::string GetType( template<> inline std::string GetType( util::ParamData& /* d */, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>>::type*) + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if>::value>::type*) { return "Int"; } @@ -48,11 +48,11 @@ inline std::string GetType( template<> inline std::string GetType( util::ParamData& /* d */, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>>::type*) + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if>::value>::type*) { return "Float"; } @@ -60,11 +60,11 @@ inline std::string GetType( template<> inline std::string GetType( util::ParamData& /* d */, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>>::type*) + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if>::value>::type*) { return "Double"; } @@ -72,11 +72,14 @@ inline std::string GetType( template<> inline std::string GetType( util::ParamData& /* d */, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>>::type*) + const typename std::enable_if< + !util::IsStdVector::value>::type*, + const typename std::enable_if< + !data::HasSerialize::value>::type*, + const typename std::enable_if< + !arma::is_arma_type::value>::type*, + const typename std::enable_if>::value>::type*) { return "String"; } @@ -84,11 +87,11 @@ inline std::string GetType( template<> inline std::string GetType( util::ParamData& /* d */, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>>::type*) + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if>::value>::type*) { return "Bool"; } @@ -96,9 +99,9 @@ inline std::string GetType( template inline std::string GetType( util::ParamData& d, - const typename boost::enable_if>::type* = 0, - const typename boost::disable_if>>::type* = 0) + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if>::value>::type* = 0) { return "Vec" + GetType(d); } @@ -106,9 +109,9 @@ inline std::string GetType( template inline std::string GetType( util::ParamData& /* d */, - const typename boost::enable_if>::type* = 0, - const typename boost::disable_if>>::type* = 0) + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if>::value>::type* = 0) { std::string type = ""; if (std::is_same::value) @@ -136,8 +139,8 @@ inline std::string GetType( template inline std::string GetType( util::ParamData& /* d */, - const typename boost::enable_if>>::type* = 0) + const typename std::enable_if>::value>::type* = 0) { return "MatWithInfo"; } @@ -145,8 +148,8 @@ inline std::string GetType( template inline std::string GetType( util::ParamData& d, - const typename boost::disable_if>::type* = 0, - const typename boost::enable_if>::type* = 0) + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0) { return d.cppType; } diff --git a/src/mlpack/bindings/R/print_input_processing.hpp b/src/mlpack/bindings/R/print_input_processing.hpp index 4565a6d503..34d10d5b1a 100644 --- a/src/mlpack/bindings/R/print_input_processing.hpp +++ b/src/mlpack/bindings/R/print_input_processing.hpp @@ -26,10 +26,10 @@ namespace r { template void PrintInputProcessing( util::ParamData& d, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>>::type* = 0) + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if>::value>::type* = 0) { if (!d.required) { @@ -72,7 +72,7 @@ void PrintInputProcessing( template void PrintInputProcessing( util::ParamData& d, - const typename boost::enable_if>::type* = 0) + const typename std::enable_if::value>::type* = 0) { if (!d.required) { @@ -108,8 +108,8 @@ void PrintInputProcessing( template void PrintInputProcessing( util::ParamData& d, - const typename boost::enable_if>>::type* = 0) + const typename std::enable_if>::value>::type* = 0) { if (!d.required) { @@ -155,8 +155,8 @@ void PrintInputProcessing( template void PrintInputProcessing( util::ParamData& d, - const typename boost::disable_if>::type* = 0, - const typename boost::enable_if>::type* = 0) + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0) { if (!d.required) { diff --git a/src/mlpack/bindings/R/print_output_processing.hpp b/src/mlpack/bindings/R/print_output_processing.hpp index 3345f6e437..77c6e4451c 100644 --- a/src/mlpack/bindings/R/print_output_processing.hpp +++ b/src/mlpack/bindings/R/print_output_processing.hpp @@ -26,10 +26,10 @@ namespace r { template void PrintOutputProcessing( util::ParamData& d, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>>::type* = 0) + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if>::value>::type* = 0) { /** * This gives us code like: @@ -48,7 +48,7 @@ void PrintOutputProcessing( template void PrintOutputProcessing( util::ParamData& d, - const typename boost::enable_if>::type* = 0, + const typename std::enable_if::value>::type* = 0, const typename std::enable_if>::value>::type* = 0) { @@ -69,8 +69,8 @@ void PrintOutputProcessing( template void PrintOutputProcessing( util::ParamData& d, - const typename boost::enable_if>>::type* = 0) + const typename std::enable_if>::value>::type* = 0) { /** * This gives us code like: @@ -89,8 +89,8 @@ void PrintOutputProcessing( template void PrintOutputProcessing( util::ParamData& d, - const typename boost::disable_if>::type* = 0, - const typename boost::enable_if>::type* = 0) + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0) { /** * This gives us code like: diff --git a/src/mlpack/bindings/R/print_type_doc.hpp b/src/mlpack/bindings/R/print_type_doc.hpp index c6b37ce1e4..5f0253578b 100644 --- a/src/mlpack/bindings/R/print_type_doc.hpp +++ b/src/mlpack/bindings/R/print_type_doc.hpp @@ -25,11 +25,11 @@ namespace r { template std::string PrintTypeDoc( util::ParamData& data, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>>::type* = 0); + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if>::value>::type* = 0); /** * Return a string representing the command-line type of a vector. @@ -62,8 +62,8 @@ std::string PrintTypeDoc( template std::string PrintTypeDoc( util::ParamData& data, - const typename boost::disable_if>::type* = 0, - const typename boost::enable_if>::type* = 0); + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0); /** * Print the command-line type of an option into a string. diff --git a/src/mlpack/bindings/R/print_type_doc_impl.hpp b/src/mlpack/bindings/R/print_type_doc_impl.hpp index b2b87bdbdd..bc8ba85f25 100644 --- a/src/mlpack/bindings/R/print_type_doc_impl.hpp +++ b/src/mlpack/bindings/R/print_type_doc_impl.hpp @@ -24,11 +24,11 @@ namespace r { template std::string PrintTypeDoc( util::ParamData& data, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>>::type*) + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if>::value>::type*) { // A flag type. if (std::is_same::value) @@ -146,8 +146,8 @@ std::string PrintTypeDoc( template std::string PrintTypeDoc( util::ParamData& /* data */, - const typename boost::disable_if>::type*, - const typename boost::enable_if>::type*) + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*) { return "An mlpack model pointer. `` refers to the type of model that " "is being stored, so, e.g., for `cf()`, the type will be `CFModel`. " diff --git a/src/mlpack/bindings/cli/add_to_cli11.hpp b/src/mlpack/bindings/cli/add_to_cli11.hpp index ceb03c64e2..cf117067d3 100644 --- a/src/mlpack/bindings/cli/add_to_cli11.hpp +++ b/src/mlpack/bindings/cli/add_to_cli11.hpp @@ -33,15 +33,15 @@ template void AddToCLI11(const std::string& cliName, util::ParamData& param, CLI::App& app, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if< - arma::is_arma_type>::type* = 0, - const typename boost::disable_if< - data::HasSerialize>::type* = 0, - const typename boost::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if>>::type* = 0) + arma::mat>>::value>::type* = 0) { app.add_option_function(cliName.c_str(), [¶m](const std::string& value) @@ -65,15 +65,15 @@ template void AddToCLI11(const std::string& cliName, util::ParamData& param, CLI::App& app, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if< - arma::is_arma_type>::type* = 0, - const typename boost::enable_if< - data::HasSerialize>::type* = 0, - const typename boost::disable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if< + data::HasSerialize::value>::type* = 0, + const typename std::enable_if>>::type* = 0) + arma::mat>>::value>::type* = 0) { app.add_option_function(cliName.c_str(), [¶m](const std::string& value) @@ -97,13 +97,13 @@ template void AddToCLI11(const std::string& cliName, util::ParamData& param, CLI::App& app, - const typename boost::disable_if< - std::is_same>::type* = 0, - const typename boost::enable_if< - arma::is_arma_type>::type* = 0, - const typename boost::disable_if::value>::type* = 0, + const typename std::enable_if< + arma::is_arma_type::value>::type* = 0, + const typename std::enable_if>>::type* = 0) + arma::mat>>::value>::type* = 0) { app.add_option_function(cliName.c_str(), [¶m](const std::string& value) @@ -127,15 +127,15 @@ template void AddToCLI11(const std::string& cliName, util::ParamData& param, CLI::App& app, - const typename boost::disable_if< - std::is_same>::type* = 0, - const typename boost::disable_if< - arma::is_arma_type>::type* = 0, - const typename boost::disable_if< - data::HasSerialize>::type* = 0, - const typename boost::disable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if>>::type* = 0) + arma::mat>>::value>::type* = 0) { app.add_option_function(cliName.c_str(), [¶m](const T& value) @@ -157,15 +157,15 @@ template void AddToCLI11(const std::string& cliName, util::ParamData& param, CLI::App& app, - const typename boost::enable_if< - std::is_same>::type* = 0, - const typename boost::disable_if< - arma::is_arma_type>::type* = 0, - const typename boost::disable_if< - data::HasSerialize>::type* = 0, - const typename boost::disable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if>>::type* = 0) + arma::mat>>::value>::type* = 0) { app.add_flag_function(cliName.c_str(), [¶m](const T& value) diff --git a/src/mlpack/bindings/cli/default_param.hpp b/src/mlpack/bindings/cli/default_param.hpp index 1eecd76eec..9be4b4c73d 100644 --- a/src/mlpack/bindings/cli/default_param.hpp +++ b/src/mlpack/bindings/cli/default_param.hpp @@ -26,12 +26,13 @@ namespace cli { template std::string DefaultParamImpl( util::ParamData& data, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>>::type* = 0); + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if>::value>::type* = 0); /** * Return the default value of a vector option. @@ -39,7 +40,7 @@ std::string DefaultParamImpl( template std::string DefaultParamImpl( util::ParamData& data, - const typename boost::enable_if>::type* = 0); + const typename std::enable_if::value>::type* = 0); /** * Return the default value of a string option. @@ -47,7 +48,7 @@ std::string DefaultParamImpl( template std::string DefaultParamImpl( util::ParamData& data, - const typename boost::enable_if>::type* = 0); + const typename std::enable_if::value>::type* = 0); /** * Return the default value of a matrix option, a tuple option, a @@ -57,7 +58,7 @@ std::string DefaultParamImpl( template std::string DefaultParamImpl( util::ParamData& data, - const typename boost::enable_if_c< + const typename std::enable_if< arma::is_arma_type::value || std::is_same>::value>::type* /* junk */ = 0); @@ -69,8 +70,8 @@ std::string DefaultParamImpl( template std::string DefaultParamImpl( util::ParamData& data, - const typename boost::disable_if>::type* = 0, - const typename boost::enable_if>::type* = 0); + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0); /** * Return the default value of an option. This is the function that will be diff --git a/src/mlpack/bindings/cli/default_param_impl.hpp b/src/mlpack/bindings/cli/default_param_impl.hpp index 26e9d7e6cd..b9defc6374 100644 --- a/src/mlpack/bindings/cli/default_param_impl.hpp +++ b/src/mlpack/bindings/cli/default_param_impl.hpp @@ -24,12 +24,13 @@ namespace cli { template std::string DefaultParamImpl( util::ParamData& data, - const typename boost::disable_if>::type* /* junk */, - const typename boost::disable_if>::type* /* junk */, - const typename boost::disable_if>::type* /* junk */, - const typename boost::disable_if>::type*, - const typename boost::disable_if>>::type* /* junk */) + const typename std::enable_if::value>::type* /* junk */, + const typename std::enable_if::value>::type* /* junk */, + const typename std::enable_if::value>::type* /* junk */, + const typename std::enable_if::value>::type*, + const typename std::enable_if>::value>::type* /* junk */) { std::ostringstream oss; if (!std::is_same::value) @@ -44,7 +45,7 @@ std::string DefaultParamImpl( template std::string DefaultParamImpl( util::ParamData& data, - const typename boost::enable_if>::type* /* junk */) + const typename std::enable_if::value>::type* /* junk */) { // Print each element in an array delimited by square brackets. std::ostringstream oss; @@ -88,7 +89,7 @@ std::string DefaultParamImpl( template std::string DefaultParamImpl( util::ParamData& data, - const typename boost::enable_if>::type*) + const typename std::enable_if::value>::type*) { const std::string& s = *boost::any_cast(&data.value); return "'" + s + "'"; @@ -100,7 +101,7 @@ std::string DefaultParamImpl( template std::string DefaultParamImpl( util::ParamData& /* data */, - const typename boost::enable_if_c< + const typename std::enable_if< arma::is_arma_type::value || std::is_same>::value>::type* /* junk */) @@ -115,8 +116,8 @@ std::string DefaultParamImpl( template std::string DefaultParamImpl( util::ParamData& /* data */, - const typename boost::disable_if>::type* /* junk */, - const typename boost::enable_if>::type* /* junk */) + const typename std::enable_if::value>::type* /* junk */, + const typename std::enable_if::value>::type* /* junk */) { return "''"; } diff --git a/src/mlpack/bindings/cli/delete_allocated_memory.hpp b/src/mlpack/bindings/cli/delete_allocated_memory.hpp index 35d305bb99..f3123c52e8 100644 --- a/src/mlpack/bindings/cli/delete_allocated_memory.hpp +++ b/src/mlpack/bindings/cli/delete_allocated_memory.hpp @@ -21,8 +21,8 @@ namespace cli { template void DeleteAllocatedMemoryImpl( util::ParamData& /* d */, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0) + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0) { // Do nothing. } @@ -30,7 +30,7 @@ void DeleteAllocatedMemoryImpl( template void DeleteAllocatedMemoryImpl( util::ParamData& /* d */, - const typename boost::enable_if>::type* = 0) + const typename std::enable_if::value>::type* = 0) { // Do nothing. } @@ -38,8 +38,8 @@ void DeleteAllocatedMemoryImpl( template void DeleteAllocatedMemoryImpl( util::ParamData& d, - const typename boost::disable_if>::type* = 0, - const typename boost::enable_if>::type* = 0) + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0) { // Delete the allocated memory (hopefully we actually own it). typedef std::tuple TupleType; diff --git a/src/mlpack/bindings/cli/get_allocated_memory.hpp b/src/mlpack/bindings/cli/get_allocated_memory.hpp index 0f70fe0adf..08e97e1e39 100644 --- a/src/mlpack/bindings/cli/get_allocated_memory.hpp +++ b/src/mlpack/bindings/cli/get_allocated_memory.hpp @@ -22,8 +22,8 @@ namespace cli { template void* GetAllocatedMemory( util::ParamData& /* d */, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0) + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0) { return NULL; } @@ -31,7 +31,7 @@ void* GetAllocatedMemory( template void* GetAllocatedMemory( util::ParamData& /* d */, - const typename boost::enable_if>::type* = 0) + const typename std::enable_if::value>::type* = 0) { return NULL; } @@ -39,8 +39,8 @@ void* GetAllocatedMemory( template void* GetAllocatedMemory( util::ParamData& d, - const typename boost::disable_if>::type* = 0, - const typename boost::enable_if>::type* = 0) + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0) { // Here we have a model, which is a tuple, and we need the address of the // memory. diff --git a/src/mlpack/bindings/cli/get_param.hpp b/src/mlpack/bindings/cli/get_param.hpp index d401e0e554..34463e939c 100644 --- a/src/mlpack/bindings/cli/get_param.hpp +++ b/src/mlpack/bindings/cli/get_param.hpp @@ -28,10 +28,10 @@ namespace cli { template T& GetParam( util::ParamData& d, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>>::type* = 0) + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if>::value>::type* = 0) { // No mapping is needed, so just cast it directly. return *boost::any_cast(&d.value); @@ -45,7 +45,7 @@ T& GetParam( template T& GetParam( util::ParamData& d, - const typename boost::enable_if>::type* = 0) + const typename std::enable_if::value>::type* = 0) { // If the matrix is an input matrix, we have to load the matrix. 'value' // contains the filename. It's possible we could load empty matrices many @@ -80,8 +80,8 @@ T& GetParam( template T& GetParam( util::ParamData& d, - const typename boost::enable_if>>::type* = 0) + const typename std::enable_if>::value>::type* = 0) { // If this is an input parameter, we need to load both the matrix and the // dataset info. @@ -110,8 +110,8 @@ T& GetParam( template T*& GetParam( util::ParamData& d, - const typename boost::disable_if>::type* = 0, - const typename boost::enable_if>::type* = 0) + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0) { // If the model is an input model, we have to load it from file. 'value' // contains the filename. diff --git a/src/mlpack/bindings/cli/get_printable_param.hpp b/src/mlpack/bindings/cli/get_printable_param.hpp index ca13c679e9..2cd2221101 100644 --- a/src/mlpack/bindings/cli/get_printable_param.hpp +++ b/src/mlpack/bindings/cli/get_printable_param.hpp @@ -27,11 +27,11 @@ namespace cli { template std::string GetPrintableParam( util::ParamData& data, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>>::type* = 0); + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if>::value>::type* = 0); /** * Print a vector option, with spaces between it. @@ -57,8 +57,8 @@ std::string GetPrintableParam( template std::string GetPrintableParam( util::ParamData& data, - const typename boost::disable_if>::type* = 0, - const typename boost::enable_if>::type* = 0); + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0); /** * Print an option into a std::string. This should print a short, one-line diff --git a/src/mlpack/bindings/cli/get_printable_param_impl.hpp b/src/mlpack/bindings/cli/get_printable_param_impl.hpp index 9898c49ee6..89f3c066f0 100644 --- a/src/mlpack/bindings/cli/get_printable_param_impl.hpp +++ b/src/mlpack/bindings/cli/get_printable_param_impl.hpp @@ -23,11 +23,11 @@ namespace cli { template std::string GetPrintableParam( util::ParamData& data, - const typename boost::disable_if>::type* /* junk */, - const typename boost::disable_if>::type* /* junk */, - const typename boost::disable_if>::type* /* junk */, - const typename boost::disable_if>>::type* /* junk */) + const typename std::enable_if::value>::type* /* junk */, + const typename std::enable_if::value>::type* /* junk */, + const typename std::enable_if::value>::type* /* junk */, + const typename std::enable_if>::value>::type* /* junk */) { std::ostringstream oss; oss << boost::any_cast(data.value); @@ -103,8 +103,8 @@ std::string GetPrintableParam( template std::string GetPrintableParam( util::ParamData& data, - const typename boost::disable_if>::type* /* junk */, - const typename boost::enable_if>::type* /* junk */) + const typename std::enable_if::value>::type* /* junk */, + const typename std::enable_if::value>::type* /* junk */) { // Extract the string from the tuple that's being held. typedef std::tuple::type> TupleType; diff --git a/src/mlpack/bindings/cli/get_printable_param_name.hpp b/src/mlpack/bindings/cli/get_printable_param_name.hpp index 38d3c64164..b875d2f72d 100644 --- a/src/mlpack/bindings/cli/get_printable_param_name.hpp +++ b/src/mlpack/bindings/cli/get_printable_param_name.hpp @@ -26,10 +26,10 @@ namespace cli { template std::string GetPrintableParamName( util::ParamData& data, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>>::type* = 0); + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if>::value>::type* = 0); /** * Get the parameter name for a matrix type (where the user has to pass the file @@ -38,7 +38,7 @@ std::string GetPrintableParamName( template std::string GetPrintableParamName( util::ParamData& data, - const typename boost::enable_if>::type* = 0); + const typename std::enable_if::value>::type* = 0); /** * Get the parameter name for a serializable model type (where the user has to @@ -47,8 +47,8 @@ std::string GetPrintableParamName( template std::string GetPrintableParamName( util::ParamData& data, - const typename boost::disable_if>::type* = 0, - const typename boost::enable_if>::type* = 0); + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0); /** * Get the parameter name for a mapped matrix type (where the user has to pass @@ -57,8 +57,8 @@ std::string GetPrintableParamName( template std::string GetPrintableParamName( util::ParamData& data, - const typename boost::enable_if>>::type* = 0); + const typename std::enable_if>::value>::type* = 0); /** * Get the parameter's name as seen by the user. diff --git a/src/mlpack/bindings/cli/get_printable_param_name_impl.hpp b/src/mlpack/bindings/cli/get_printable_param_name_impl.hpp index 4bb0da75e0..7c355c3dbc 100644 --- a/src/mlpack/bindings/cli/get_printable_param_name_impl.hpp +++ b/src/mlpack/bindings/cli/get_printable_param_name_impl.hpp @@ -26,10 +26,10 @@ namespace cli { template std::string GetPrintableParamName( util::ParamData& data, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>>::type*) + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if>::value>::type*) { return "--" + data.name; } @@ -41,7 +41,7 @@ std::string GetPrintableParamName( template std::string GetPrintableParamName( util::ParamData& data, - const typename boost::enable_if>::type*) + const typename std::enable_if::value>::type*) { return "--" + data.name + "_file"; } @@ -53,8 +53,8 @@ std::string GetPrintableParamName( template std::string GetPrintableParamName( util::ParamData& data, - const typename boost::disable_if>::type*, - const typename boost::enable_if>::type*) + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*) { return "--" + data.name + "_file"; } @@ -66,8 +66,8 @@ std::string GetPrintableParamName( template std::string GetPrintableParamName( util::ParamData& data, - const typename boost::enable_if>>::type*) + const typename std::enable_if>::value>::type*) { return "--" + data.name + "_file"; } diff --git a/src/mlpack/bindings/cli/get_printable_param_value.hpp b/src/mlpack/bindings/cli/get_printable_param_value.hpp index 208afdb87b..621640b3c1 100644 --- a/src/mlpack/bindings/cli/get_printable_param_value.hpp +++ b/src/mlpack/bindings/cli/get_printable_param_value.hpp @@ -27,10 +27,10 @@ template std::string GetPrintableParamValue( util::ParamData& data, const std::string& value, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>>::type* = 0); + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if>::value>::type* = 0); /** * Get the parameter name for a matrix type (where the user has to pass the file @@ -40,7 +40,7 @@ template std::string GetPrintableParamValue( util::ParamData& data, const std::string& value, - const typename boost::enable_if>::type* = 0); + const typename std::enable_if::value>::type* = 0); /** * Get the parameter name for a serializable model type (where the user has to @@ -50,8 +50,8 @@ template std::string GetPrintableParamValue( util::ParamData& data, const std::string& value, - const typename boost::disable_if>::type* = 0, - const typename boost::enable_if>::type* = 0); + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0); /** * Get the parameter name for a mapped matrix type (where the user has to pass @@ -61,8 +61,8 @@ template std::string GetPrintableParamValue( util::ParamData& data, const std::string& value, - const typename boost::enable_if>>::type* = 0); + const typename std::enable_if>::value>::type* = 0); /** * Get the parameter's name as seen by the user. diff --git a/src/mlpack/bindings/cli/get_printable_param_value_impl.hpp b/src/mlpack/bindings/cli/get_printable_param_value_impl.hpp index 09389614a1..3bb42b01b1 100644 --- a/src/mlpack/bindings/cli/get_printable_param_value_impl.hpp +++ b/src/mlpack/bindings/cli/get_printable_param_value_impl.hpp @@ -28,10 +28,10 @@ template std::string GetPrintableParamValue( util::ParamData& /* data */, const std::string& input, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>>::type*) + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if>::value>::type*) { return input; } @@ -44,7 +44,7 @@ template std::string GetPrintableParamValue( util::ParamData& /* data */, const std::string& input, - const typename boost::enable_if>::type*) + const typename std::enable_if::value>::type*) { return input + ".csv"; } @@ -57,8 +57,8 @@ template std::string GetPrintableParamValue( util::ParamData& /* data */, const std::string& input, - const typename boost::disable_if>::type*, - const typename boost::enable_if>::type*) + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*) { return input + ".bin"; } @@ -71,8 +71,8 @@ template std::string GetPrintableParamValue( util::ParamData& /* data */, const std::string& input, - const typename boost::enable_if>>::type*) + const typename std::enable_if>::value>::type*) { return input + ".arff"; } diff --git a/src/mlpack/bindings/cli/get_printable_type.hpp b/src/mlpack/bindings/cli/get_printable_type.hpp index 9c29711240..07fd10609a 100644 --- a/src/mlpack/bindings/cli/get_printable_type.hpp +++ b/src/mlpack/bindings/cli/get_printable_type.hpp @@ -23,11 +23,11 @@ namespace cli { template std::string GetPrintableType( util::ParamData& data, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>>::type* = 0); + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if>::value>::type* = 0); /** * Return a string representing the command-line type of a vector. @@ -60,8 +60,8 @@ std::string GetPrintableType( template std::string GetPrintableType( util::ParamData& data, - const typename boost::disable_if>::type* = 0, - const typename boost::enable_if>::type* = 0); + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0); /** * Print the command-line type of an option into a string. diff --git a/src/mlpack/bindings/cli/get_printable_type_impl.hpp b/src/mlpack/bindings/cli/get_printable_type_impl.hpp index 7e7da8b038..14a259b8b6 100644 --- a/src/mlpack/bindings/cli/get_printable_type_impl.hpp +++ b/src/mlpack/bindings/cli/get_printable_type_impl.hpp @@ -25,11 +25,11 @@ namespace cli { template std::string GetPrintableType( util::ParamData& data, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>>::type*) + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if>::value>::type*) { if (std::is_same::value) return "flag"; @@ -101,8 +101,8 @@ std::string GetPrintableType( template std::string GetPrintableType( util::ParamData& data, - const typename boost::disable_if>::type*, - const typename boost::enable_if>::type*) + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*) { return data.cppType + " file"; } diff --git a/src/mlpack/bindings/cli/get_raw_param.hpp b/src/mlpack/bindings/cli/get_raw_param.hpp index 46c3956a1f..38b340387e 100644 --- a/src/mlpack/bindings/cli/get_raw_param.hpp +++ b/src/mlpack/bindings/cli/get_raw_param.hpp @@ -27,10 +27,10 @@ namespace cli { template T& GetRawParam( util::ParamData& d, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>>::type* = 0) + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if>::value>::type* = 0) { // No mapping is needed, so just cast it directly. return *boost::any_cast(&d.value); @@ -42,7 +42,7 @@ T& GetRawParam( template T& GetRawParam( util::ParamData& d, - const typename boost::enable_if_c< + const typename std::enable_if< arma::is_arma_type::value || std::is_same>::value>::type* = 0) @@ -59,8 +59,8 @@ T& GetRawParam( template T*& GetRawParam( util::ParamData& d, - const typename boost::disable_if>::type* = 0, - const typename boost::enable_if>::type* = 0) + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0) { // Don't load the model. typedef std::tuple TupleType; diff --git a/src/mlpack/bindings/cli/in_place_copy.hpp b/src/mlpack/bindings/cli/in_place_copy.hpp index d3ed1c9521..f266267bb6 100644 --- a/src/mlpack/bindings/cli/in_place_copy.hpp +++ b/src/mlpack/bindings/cli/in_place_copy.hpp @@ -31,10 +31,10 @@ template void InPlaceCopyInternal( util::ParamData& /* d */, util::ParamData& /* input */, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>>::type* = 0) + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if>::value>::type* = 0) { // Nothing to do. } diff --git a/src/mlpack/bindings/cli/map_parameter_name.hpp b/src/mlpack/bindings/cli/map_parameter_name.hpp index 1835bd5602..74f20a6431 100644 --- a/src/mlpack/bindings/cli/map_parameter_name.hpp +++ b/src/mlpack/bindings/cli/map_parameter_name.hpp @@ -27,10 +27,10 @@ namespace cli { template std::string MapParameterName( const std::string& identifier, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>>::type* = 0) + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if>::value>::type* = 0) { return identifier; } @@ -43,7 +43,7 @@ std::string MapParameterName( template std::string MapParameterName( const std::string& identifier, - const typename boost::enable_if_c< + const typename std::enable_if< arma::is_arma_type::value || std::is_same>::value || diff --git a/src/mlpack/bindings/cli/output_param.hpp b/src/mlpack/bindings/cli/output_param.hpp index 898f2d1a39..bef23ed43e 100644 --- a/src/mlpack/bindings/cli/output_param.hpp +++ b/src/mlpack/bindings/cli/output_param.hpp @@ -26,11 +26,11 @@ namespace cli { template void OutputParamImpl( util::ParamData& data, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>>::type* = 0); + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if>::value>::type* = 0); /** * Output a vector option (print to stdout). @@ -38,7 +38,7 @@ void OutputParamImpl( template void OutputParamImpl( util::ParamData& data, - const typename boost::enable_if>::type* = 0); + const typename std::enable_if::value>::type* = 0); /** * Output a matrix option (this saves it to the given file). @@ -46,7 +46,7 @@ void OutputParamImpl( template void OutputParamImpl( util::ParamData& data, - const typename boost::enable_if>::type* = 0); + const typename std::enable_if::value>::type* = 0); /** * Output a serializable class option (this saves it to the given file). @@ -54,8 +54,8 @@ void OutputParamImpl( template void OutputParamImpl( util::ParamData& data, - const typename boost::disable_if>::type* = 0, - const typename boost::enable_if>::type* = 0); + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0); /** * Output a mapped dataset. @@ -63,8 +63,8 @@ void OutputParamImpl( template void OutputParamImpl( util::ParamData& data, - const typename boost::enable_if>>::type* = 0); + const typename std::enable_if>::value>::type* = 0); /** * Output an option. This is the function that will be called by the IO diff --git a/src/mlpack/bindings/cli/output_param_impl.hpp b/src/mlpack/bindings/cli/output_param_impl.hpp index ab2f1e8822..d34b55fd74 100644 --- a/src/mlpack/bindings/cli/output_param_impl.hpp +++ b/src/mlpack/bindings/cli/output_param_impl.hpp @@ -24,11 +24,11 @@ namespace cli { template void OutputParamImpl( util::ParamData& data, - const typename boost::disable_if>::type* /* junk */, - const typename boost::disable_if>::type* /* junk */, - const typename boost::disable_if>::type* /* junk */, - const typename boost::disable_if>>::type* /* junk */) + const typename std::enable_if::value>::type* /* junk */, + const typename std::enable_if::value>::type* /* junk */, + const typename std::enable_if::value>::type* /* junk */, + const typename std::enable_if>::value>::type* /* junk */) { std::cout << data.name << ": " << *boost::any_cast(&data.value) << std::endl; @@ -38,7 +38,7 @@ void OutputParamImpl( template void OutputParamImpl( util::ParamData& data, - const typename boost::enable_if>::type* /* junk */) + const typename std::enable_if::value>::type* /* junk */) { std::cout << data.name << ": "; const T& t = *boost::any_cast(&data.value); @@ -51,7 +51,7 @@ void OutputParamImpl( template void OutputParamImpl( util::ParamData& data, - const typename boost::enable_if>::type* /* junk */) + const typename std::enable_if::value>::type* /* junk */) { typedef std::tuple> TupleType; const T& output = std::get<0>(*boost::any_cast(&data.value)); @@ -71,8 +71,8 @@ void OutputParamImpl( template void OutputParamImpl( util::ParamData& data, - const typename boost::disable_if>::type* /* junk */, - const typename boost::enable_if>::type* /* junk */) + const typename std::enable_if::value>::type* /* junk */, + const typename std::enable_if::value>::type* /* junk */) { // The const cast is necessary here because Serialize() can't ever be marked // const. In this case we can assume it though, since we will be saving and @@ -91,8 +91,8 @@ void OutputParamImpl( template void OutputParamImpl( util::ParamData& data, - const typename boost::enable_if>>::type* /* junk */) + const typename std::enable_if>::value>::type* /* junk */) { // Output the matrix with the mappings. typedef std::tuple> TupleType; diff --git a/src/mlpack/bindings/cli/print_type_doc.hpp b/src/mlpack/bindings/cli/print_type_doc.hpp index 873d5465f2..10acab4f5b 100644 --- a/src/mlpack/bindings/cli/print_type_doc.hpp +++ b/src/mlpack/bindings/cli/print_type_doc.hpp @@ -25,11 +25,11 @@ namespace cli { template std::string PrintTypeDoc( util::ParamData& data, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>>::type* = 0); + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if>::value>::type* = 0); /** * Return a string representing the command-line type of a vector. @@ -62,8 +62,8 @@ std::string PrintTypeDoc( template std::string PrintTypeDoc( util::ParamData& data, - const typename boost::disable_if>::type* = 0, - const typename boost::enable_if>::type* = 0); + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0); /** * Print the command-line type of an option into a string. diff --git a/src/mlpack/bindings/cli/print_type_doc_impl.hpp b/src/mlpack/bindings/cli/print_type_doc_impl.hpp index 51e3106de5..1836732bf8 100644 --- a/src/mlpack/bindings/cli/print_type_doc_impl.hpp +++ b/src/mlpack/bindings/cli/print_type_doc_impl.hpp @@ -24,11 +24,11 @@ namespace cli { template std::string PrintTypeDoc( util::ParamData& data, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>>::type*) + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if>::value>::type*) { // A flag type. if (std::is_same::value) @@ -165,8 +165,8 @@ std::string PrintTypeDoc( template std::string PrintTypeDoc( util::ParamData& /* data */, - const typename boost::disable_if>::type*, - const typename boost::enable_if>::type*) + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*) { return "A filename containing an mlpack model. These can have one of three " "formats: binary (.bin), text (.txt), and XML (.xml). The XML format " diff --git a/src/mlpack/bindings/cli/set_param.hpp b/src/mlpack/bindings/cli/set_param.hpp index f800fe0553..8fab3e0fb0 100644 --- a/src/mlpack/bindings/cli/set_param.hpp +++ b/src/mlpack/bindings/cli/set_param.hpp @@ -27,11 +27,11 @@ template void SetParam( util::ParamData& d, const boost::any& value, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>>::type* = 0, - const typename boost::disable_if>::type* = 0) + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if>::value>::type* = 0, + const typename std::enable_if::value>::type* = 0) { // No mapping is needed. d.value = value; @@ -44,7 +44,7 @@ template void SetParam( util::ParamData& d, const boost::any& /* value */, - const typename boost::enable_if>::type* = 0) + const typename std::enable_if::value>::type* = 0) { // Force set to the value of whether or not this was passed. d.value = d.wasPassed; @@ -76,8 +76,8 @@ template void SetParam( util::ParamData& d, const boost::any& value, - const typename boost::disable_if>::type* = 0, - const typename boost::enable_if>::type* = 0) + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0) { // We're setting the string filename. typedef std::tuple::type> TupleType; diff --git a/src/mlpack/bindings/cli/string_type_param.hpp b/src/mlpack/bindings/cli/string_type_param.hpp index eb4550e3ca..decf9e794d 100644 --- a/src/mlpack/bindings/cli/string_type_param.hpp +++ b/src/mlpack/bindings/cli/string_type_param.hpp @@ -26,22 +26,22 @@ namespace cli { */ template std::string StringTypeParamImpl( - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0); + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0); /** * Return a string containing the type of the parameter, for vector options. */ template std::string StringTypeParamImpl( - const typename boost::enable_if>::type* = 0); + const typename std::enable_if::value>::type* = 0); /** * Return a string containing the type of the parameter, */ template std::string StringTypeParamImpl( - const typename boost::enable_if>::type* = 0); + const typename std::enable_if::value>::type* = 0); /** * Return a string containing the type of a parameter. This overload is used if diff --git a/src/mlpack/bindings/cli/string_type_param_impl.hpp b/src/mlpack/bindings/cli/string_type_param_impl.hpp index 7bf1df6516..195d1b5a3b 100644 --- a/src/mlpack/bindings/cli/string_type_param_impl.hpp +++ b/src/mlpack/bindings/cli/string_type_param_impl.hpp @@ -23,8 +23,8 @@ namespace cli { */ template std::string StringTypeParamImpl( - const typename boost::disable_if>::type* /* junk */, - const typename boost::disable_if>::type* /* junk */) + const typename std::enable_if::value>::type* /* junk */, + const typename std::enable_if::value>::type* /* junk */) { // Don't know what type this is. return "unknown"; @@ -35,7 +35,7 @@ std::string StringTypeParamImpl( */ template std::string StringTypeParamImpl( - const typename boost::enable_if>::type* /* junk */) + const typename std::enable_if::value>::type* /* junk */) { return "vector"; } @@ -45,7 +45,7 @@ std::string StringTypeParamImpl( */ template std::string StringTypeParamImpl( - const typename boost::enable_if>::type* /* junk */) + const typename std::enable_if::value>::type* /* junk */) { return "string"; } diff --git a/src/mlpack/bindings/go/default_param.hpp b/src/mlpack/bindings/go/default_param.hpp index 7469b30ac3..3ebdaae7b3 100644 --- a/src/mlpack/bindings/go/default_param.hpp +++ b/src/mlpack/bindings/go/default_param.hpp @@ -26,12 +26,13 @@ namespace go { template std::string DefaultParamImpl( util::ParamData& data, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>>::type* = 0); + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if>::value>::type* = 0); /** * Return the default value of a vector option. @@ -39,7 +40,7 @@ std::string DefaultParamImpl( template std::string DefaultParamImpl( util::ParamData& data, - const typename boost::enable_if>::type* = 0); + const typename std::enable_if::value>::type* = 0); /** * Return the default value of a string option. @@ -47,7 +48,7 @@ std::string DefaultParamImpl( template std::string DefaultParamImpl( util::ParamData& data, - const typename boost::enable_if>::type* = 0); + const typename std::enable_if::value>::type* = 0); /** * Return the default value of a matrix option, a tuple option, a @@ -57,10 +58,10 @@ std::string DefaultParamImpl( template std::string DefaultParamImpl( util::ParamData& data, - const typename boost::enable_if_c< + const typename std::enable_if< arma::is_arma_type::value || std::is_same>::value>::type* /* junk */ = 0); + arma::mat>>::value>::type* = 0); /** * Return the default value of a model option (this returns the default @@ -69,8 +70,8 @@ std::string DefaultParamImpl( template std::string DefaultParamImpl( util::ParamData& data, - const typename boost::disable_if>::type* = 0, - const typename boost::enable_if>::type* = 0); + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0); /** * Return the default value of an option. This is the function that will be diff --git a/src/mlpack/bindings/go/default_param_impl.hpp b/src/mlpack/bindings/go/default_param_impl.hpp index e3a9a07103..2458012966 100644 --- a/src/mlpack/bindings/go/default_param_impl.hpp +++ b/src/mlpack/bindings/go/default_param_impl.hpp @@ -24,12 +24,13 @@ namespace go { template std::string DefaultParamImpl( util::ParamData& data, - const typename boost::disable_if>::type* /* junk */, - const typename boost::disable_if>::type* /* junk */, - const typename boost::disable_if>::type* /* junk */, - const typename boost::disable_if>::type*, - const typename boost::disable_if>>::type* /* junk */) + const typename std::enable_if::value>::type* /* junk */, + const typename std::enable_if::value>::type* /* junk */, + const typename std::enable_if::value>::type* /* junk */, + const typename std::enable_if::value>::type*, + const typename std::enable_if>::value>::type* /* junk */) { std::ostringstream oss; if (std::is_same::value) @@ -46,7 +47,7 @@ std::string DefaultParamImpl( template std::string DefaultParamImpl( util::ParamData& data, - const typename boost::enable_if>::type* /* junk */) + const typename std::enable_if::value>::type* /* junk */) { // Print each element in an array delimited by square brackets. std::ostringstream oss; @@ -90,7 +91,7 @@ std::string DefaultParamImpl( template std::string DefaultParamImpl( util::ParamData& data, - const typename boost::enable_if>::type*) + const typename std::enable_if::value>::type*) { const std::string& s = *boost::any_cast(&data.value); return "\"" + s + "\""; @@ -102,7 +103,7 @@ std::string DefaultParamImpl( template std::string DefaultParamImpl( util::ParamData& /* data */, - const typename boost::enable_if_c< + const typename std::enable_if< arma::is_arma_type::value || std::is_same>::value>::type* /* junk */) @@ -134,8 +135,8 @@ std::string DefaultParamImpl( template std::string DefaultParamImpl( util::ParamData& /* data */, - const typename boost::disable_if>::type* /* junk */, - const typename boost::enable_if>::type* /* junk */) + const typename std::enable_if::value>::type* /* junk */, + const typename std::enable_if::value>::type* /* junk */) { return "nil"; } diff --git a/src/mlpack/bindings/go/get_go_type.hpp b/src/mlpack/bindings/go/get_go_type.hpp index 77c851cb99..4fc800ecbf 100644 --- a/src/mlpack/bindings/go/get_go_type.hpp +++ b/src/mlpack/bindings/go/get_go_type.hpp @@ -25,11 +25,11 @@ namespace go { template inline std::string GetGoType( util::ParamData& /* d */, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>>::type* = 0) + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if>::value>::type* = 0) { return "unknown"; } @@ -37,11 +37,11 @@ inline std::string GetGoType( template<> inline std::string GetGoType( util::ParamData& /* d */, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>>::type*) + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if>::value>::type*) { return "int"; } @@ -49,11 +49,11 @@ inline std::string GetGoType( template<> inline std::string GetGoType( util::ParamData& /* d */, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>>::type*) + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if>::value>::type*) { return "float32"; } @@ -61,11 +61,11 @@ inline std::string GetGoType( template<> inline std::string GetGoType( util::ParamData& /* d */, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>>::type*) + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if>::value>::type*) { return "float64"; } @@ -73,11 +73,14 @@ inline std::string GetGoType( template<> inline std::string GetGoType( util::ParamData& /* d */, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>>::type*) + const typename std::enable_if< + !util::IsStdVector::value>::type*, + const typename std::enable_if< + !data::HasSerialize::value>::type*, + const typename std::enable_if< + !arma::is_arma_type::value>::type*, + const typename std::enable_if>::value>::type*) { return "string"; } @@ -85,11 +88,11 @@ inline std::string GetGoType( template<> inline std::string GetGoType( util::ParamData& /* d */, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>>::type*) + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if>::value>::type*) { return "bool"; } @@ -97,7 +100,7 @@ inline std::string GetGoType( template inline std::string GetGoType( util::ParamData& d, - const typename boost::enable_if>::type* = 0) + const typename std::enable_if::value>::type* = 0) { return "[]" + GetGoType(d); } @@ -105,9 +108,9 @@ inline std::string GetGoType( template inline std::string GetGoType( util::ParamData& /* d */, - const typename boost::disable_if>>::type* = 0, - const typename boost::enable_if>::type* = 0) + const typename std::enable_if>::value>::type* = 0, + const typename std::enable_if::value>::type* = 0) { return "mat.Dense"; } @@ -115,8 +118,8 @@ inline std::string GetGoType( template inline std::string GetGoType( util::ParamData& /* d */, - const typename boost::enable_if>>::type* = 0) + const typename std::enable_if>::value>::type* = 0) { return "matrixWithInfo"; } @@ -124,8 +127,8 @@ inline std::string GetGoType( template inline std::string GetGoType( util::ParamData& d, - const typename boost::disable_if>::type* = 0, - const typename boost::enable_if>::type* = 0) + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0) { std::string goStrippedType, strippedType, printedType, defaultsType; StripType(d.cppType, goStrippedType, strippedType, printedType, defaultsType); diff --git a/src/mlpack/bindings/go/get_printable_param.hpp b/src/mlpack/bindings/go/get_printable_param.hpp index 90e5f74590..091bfcba80 100644 --- a/src/mlpack/bindings/go/get_printable_param.hpp +++ b/src/mlpack/bindings/go/get_printable_param.hpp @@ -25,11 +25,11 @@ namespace go { template std::string GetPrintableParam( util::ParamData& data, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>>::type* = 0) + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if>::value>::type* = 0) { std::ostringstream oss; oss << boost::any_cast(data.value); @@ -42,7 +42,7 @@ std::string GetPrintableParam( template std::string GetPrintableParam( util::ParamData& data, - const typename boost::enable_if>::type* = 0) + const typename std::enable_if::value>::type* = 0) { const T& t = boost::any_cast(data.value); @@ -58,7 +58,7 @@ std::string GetPrintableParam( template std::string GetPrintableParam( util::ParamData& data, - const typename boost::enable_if>::type* = 0) + const typename std::enable_if::value>::type* = 0) { // Get the matrix. const T& matrix = boost::any_cast(data.value); @@ -74,8 +74,8 @@ std::string GetPrintableParam( template std::string GetPrintableParam( util::ParamData& data, - const typename boost::disable_if>::type* = 0, - const typename boost::enable_if>::type* = 0) + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0) { std::ostringstream oss; oss << data.cppType << " model at " << boost::any_cast(data.value); @@ -88,8 +88,8 @@ std::string GetPrintableParam( template std::string GetPrintableParam( util::ParamData& data, - const typename boost::enable_if>>::type* = 0) + const typename std::enable_if>::value>::type* = 0) { // Get the matrix. const T& tuple = boost::any_cast(data.value); diff --git a/src/mlpack/bindings/go/get_printable_type.hpp b/src/mlpack/bindings/go/get_printable_type.hpp index 014fcad297..5b2cadece3 100644 --- a/src/mlpack/bindings/go/get_printable_type.hpp +++ b/src/mlpack/bindings/go/get_printable_type.hpp @@ -23,75 +23,78 @@ namespace go { template inline std::string GetPrintableType( util::ParamData& /* d */, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>>::type* = 0); + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if>::value>::type* = 0); template<> inline std::string GetPrintableType( util::ParamData& /* d */, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>>::type*); + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if>::value>::type*); template<> inline std::string GetPrintableType( util::ParamData& /* d */, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>>::type*); + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if>::value>::type*); template<> inline std::string GetPrintableType( util::ParamData& /* d */, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>>::type*); + const typename std::enable_if< + !util::IsStdVector::value>::type*, + const typename std::enable_if< + !data::HasSerialize::value>::type*, + const typename std::enable_if< + !arma::is_arma_type::value>::type*, + const typename std::enable_if>::value>::type*); template<> inline std::string GetPrintableType( util::ParamData& /* d */, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>>::type*); + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if>::value>::type*); template inline std::string GetPrintableType( util::ParamData& d, - const typename boost::enable_if>::type* = 0, - const typename boost::disable_if>>::type* = 0); + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if>::value>::type* = 0); template inline std::string GetPrintableType( util::ParamData& /* d */, - const typename boost::enable_if>::type* = 0, - const typename boost::disable_if>>::type* = 0); + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if>::value>::type* = 0); template inline std::string GetPrintableType( util::ParamData& /* d */, - const typename boost::enable_if>>::type* = 0); + const typename std::enable_if>::value>::type* = 0); template inline std::string GetPrintableType( util::ParamData& d, - const typename boost::disable_if>::type* = 0, - const typename boost::enable_if>::type* = 0, - const typename boost::disable_if>>::type* = 0); + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if>::value>::type* = 0); template void GetPrintableType(util::ParamData& d, diff --git a/src/mlpack/bindings/go/get_printable_type_impl.hpp b/src/mlpack/bindings/go/get_printable_type_impl.hpp index da4df3bec9..cdbfe9feb5 100644 --- a/src/mlpack/bindings/go/get_printable_type_impl.hpp +++ b/src/mlpack/bindings/go/get_printable_type_impl.hpp @@ -23,11 +23,11 @@ namespace go { template inline std::string GetPrintableType( util::ParamData& /* d */, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>>::type*) + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if>::value>::type*) { return "unknown"; } @@ -35,11 +35,11 @@ inline std::string GetPrintableType( template<> inline std::string GetPrintableType( util::ParamData& /* d */, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>>::type*) + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if>::value>::type*) { return "int"; } @@ -47,11 +47,11 @@ inline std::string GetPrintableType( template<> inline std::string GetPrintableType( util::ParamData& /* d */, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>>::type*) + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if>::value>::type*) { return "float64"; } @@ -59,11 +59,14 @@ inline std::string GetPrintableType( template<> inline std::string GetPrintableType( util::ParamData& /* d */, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>>::type*) + const typename std::enable_if< + !util::IsStdVector::value>::type*, + const typename std::enable_if< + !data::HasSerialize::value>::type*, + const typename std::enable_if< + !arma::is_arma_type::value>::type*, + const typename std::enable_if>::value>::type*) { return "string"; } @@ -71,11 +74,11 @@ inline std::string GetPrintableType( template<> inline std::string GetPrintableType( util::ParamData& /* d */, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>>::type*) + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if>::value>::type*) { return "bool"; } @@ -83,9 +86,9 @@ inline std::string GetPrintableType( template inline std::string GetPrintableType( util::ParamData& d, - const typename boost::enable_if>::type*, - const typename boost::disable_if>>::type*) + const typename std::enable_if::value>::type*, + const typename std::enable_if>::value>::type*) { return "array of " + GetPrintableType(d) + "s"; } @@ -93,9 +96,9 @@ inline std::string GetPrintableType( template inline std::string GetPrintableType( util::ParamData& /* d */, - const typename boost::enable_if>::type*, - const typename boost::disable_if>>::type*) + const typename std::enable_if::value>::type*, + const typename std::enable_if>::value>::type*) { std::string type = "*mat.Dense"; if (T::is_row || T::is_col) @@ -107,8 +110,8 @@ inline std::string GetPrintableType( template inline std::string GetPrintableType( util::ParamData& /* d */, - const typename boost::enable_if>>::type*) + const typename std::enable_if>::value>::type*) { return "matrixWithInfo"; } @@ -116,10 +119,10 @@ inline std::string GetPrintableType( template inline std::string GetPrintableType( util::ParamData& d, - const typename boost::disable_if>::type*, - const typename boost::enable_if>::type*, - const typename boost::disable_if>>::type*) + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if>::value>::type*) { std::string goStrippedType, strippedType, printedType, defaultsType; StripType(d.cppType, goStrippedType, strippedType, printedType, defaultsType); diff --git a/src/mlpack/bindings/go/get_type.hpp b/src/mlpack/bindings/go/get_type.hpp index c46c87651d..828085d375 100644 --- a/src/mlpack/bindings/go/get_type.hpp +++ b/src/mlpack/bindings/go/get_type.hpp @@ -24,9 +24,9 @@ namespace go { template inline std::string GetType( util::ParamData& /* d */, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0) + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0) { return "unknown"; } @@ -34,9 +34,9 @@ inline std::string GetType( template<> inline std::string GetType( util::ParamData& /* d */, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*) + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*) { return "Int"; } @@ -44,9 +44,9 @@ inline std::string GetType( template<> inline std::string GetType( util::ParamData& /* d */, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*) + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*) { return "Float"; } @@ -54,9 +54,9 @@ inline std::string GetType( template<> inline std::string GetType( util::ParamData& /* d */, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*) + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*) { return "Double"; } @@ -64,9 +64,12 @@ inline std::string GetType( template<> inline std::string GetType( util::ParamData& /* d */, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*) + const typename std::enable_if< + !util::IsStdVector::value>::type*, + const typename std::enable_if< + !data::HasSerialize::value>::type*, + const typename std::enable_if< + !arma::is_arma_type::value>::type*) { return "String"; } @@ -74,9 +77,9 @@ inline std::string GetType( template<> inline std::string GetType( util::ParamData& /* d */, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*) + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*) { return "Bool"; } @@ -84,7 +87,7 @@ inline std::string GetType( template inline std::string GetType( util::ParamData& d, - const typename boost::enable_if>::type* = 0) + const typename std::enable_if::value>::type* = 0) { return "Vec" + GetType(d); } @@ -92,7 +95,7 @@ inline std::string GetType( template inline std::string GetType( util::ParamData& /* d */, - const typename boost::enable_if>::type* = 0) + const typename std::enable_if::value>::type* = 0) { std::string type = ""; if (std::is_same::value) @@ -120,8 +123,8 @@ inline std::string GetType( template inline std::string GetType( util::ParamData& d, - const typename boost::disable_if>::type* = 0, - const typename boost::enable_if>::type* = 0) + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0) { return d.cppType + "*"; } diff --git a/src/mlpack/bindings/go/print_defn_input.hpp b/src/mlpack/bindings/go/print_defn_input.hpp index 5ae6662a97..c51dfa110b 100644 --- a/src/mlpack/bindings/go/print_defn_input.hpp +++ b/src/mlpack/bindings/go/print_defn_input.hpp @@ -28,10 +28,10 @@ namespace go { template void PrintDefnInput( util::ParamData& d, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>>::type* = 0) + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if>::value>::type* = 0) { if (d.required) { @@ -46,7 +46,7 @@ void PrintDefnInput( template void PrintDefnInput( util::ParamData& d, - const typename boost::enable_if>::type* = 0) + const typename std::enable_if::value>::type* = 0) { // param_name *mat.Dense if (d.required) @@ -62,8 +62,8 @@ void PrintDefnInput( template void PrintDefnInput( util::ParamData& d, - const typename boost::enable_if>>::type* = 0) + const typename std::enable_if>::value>::type* = 0) { // param_name *DataWithInfo if (d.required) @@ -79,8 +79,8 @@ void PrintDefnInput( template void PrintDefnInput( util::ParamData& d, - const typename boost::disable_if>::type* = 0, - const typename boost::enable_if>::type* = 0) + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0) { // Get the type names we need to use. std::string goStrippedType, strippedType, printedType, defaultsType; diff --git a/src/mlpack/bindings/go/print_defn_output.hpp b/src/mlpack/bindings/go/print_defn_output.hpp index fa70517f10..b18233d1d0 100644 --- a/src/mlpack/bindings/go/print_defn_output.hpp +++ b/src/mlpack/bindings/go/print_defn_output.hpp @@ -27,10 +27,10 @@ namespace go { template void PrintDefnOutput( util::ParamData& d, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>>::type* = 0) + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if>::value>::type* = 0) { std::cout << GetGoType(d); } @@ -41,7 +41,7 @@ void PrintDefnOutput( template void PrintDefnOutput( util::ParamData& d, - const typename boost::enable_if>::type* = 0) + const typename std::enable_if::value>::type* = 0) { // *mat.Dense std::cout << "*" << GetGoType(d); @@ -53,8 +53,8 @@ void PrintDefnOutput( template void PrintDefnOutput( util::ParamData& d, - const typename boost::enable_if>>::type* = 0) + const typename std::enable_if>::value>::type* = 0) { // *mat.Dense std::cout << "*" << GetGoType(d); @@ -66,8 +66,8 @@ void PrintDefnOutput( template void PrintDefnOutput( util::ParamData& d, - const typename boost::disable_if>::type* = 0, - const typename boost::enable_if>::type* = 0) + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0) { // Get the type names we need to use. std::string goStrippedType, strippedType, printedType, defaultsType; diff --git a/src/mlpack/bindings/go/print_input_processing.hpp b/src/mlpack/bindings/go/print_input_processing.hpp index 99b0f9a9ed..8b6fa77eea 100644 --- a/src/mlpack/bindings/go/print_input_processing.hpp +++ b/src/mlpack/bindings/go/print_input_processing.hpp @@ -29,10 +29,10 @@ template void PrintInputProcessing( util::ParamData& d, const size_t indent, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>>::type* = 0) + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if>::value>::type* = 0) { const std::string prefix(indent, ' '); @@ -129,7 +129,7 @@ template void PrintInputProcessing( util::ParamData& d, const size_t indent, - const typename boost::enable_if>::type* = 0) + const typename std::enable_if::value>::type* = 0) { const std::string prefix(indent, ' '); @@ -189,8 +189,8 @@ template void PrintInputProcessing( util::ParamData& d, const size_t indent, - const typename boost::enable_if>>::type* = 0) + const typename std::enable_if>::value>::type* = 0) { const std::string prefix(indent, ' '); @@ -250,8 +250,8 @@ template void PrintInputProcessing( util::ParamData& d, const size_t indent, - const typename boost::disable_if>::type* = 0, - const typename boost::enable_if>::type* = 0) + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0) { // First, get the correct classparamName if needed. std::string goStrippedType, strippedType, printedType, defaultsType; diff --git a/src/mlpack/bindings/go/print_method_config.hpp b/src/mlpack/bindings/go/print_method_config.hpp index b4be743d1a..6a51d7205d 100644 --- a/src/mlpack/bindings/go/print_method_config.hpp +++ b/src/mlpack/bindings/go/print_method_config.hpp @@ -29,10 +29,10 @@ template void PrintMethodConfig( util::ParamData& d, const size_t indent, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>>::type* = 0) + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if>::value>::type* = 0) { const std::string prefix(indent, ' '); @@ -64,7 +64,7 @@ template void PrintMethodConfig( util::ParamData& d, const size_t indent, - const typename boost::enable_if>::type* = 0) + const typename std::enable_if::value>::type* = 0) { const std::string prefix(indent, ' '); @@ -96,8 +96,8 @@ template void PrintMethodConfig( util::ParamData& d, const size_t indent, - const typename boost::enable_if>>::type* = 0) + const typename std::enable_if>::value>::type* = 0) { const std::string prefix(indent, ' '); @@ -129,8 +129,8 @@ template void PrintMethodConfig( util::ParamData& d, const size_t indent, - const typename boost::disable_if>::type* = 0, - const typename boost::enable_if>::type* = 0) + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0) { const std::string prefix(indent, ' '); diff --git a/src/mlpack/bindings/go/print_method_init.hpp b/src/mlpack/bindings/go/print_method_init.hpp index f1877f48ff..1a9a363c48 100644 --- a/src/mlpack/bindings/go/print_method_init.hpp +++ b/src/mlpack/bindings/go/print_method_init.hpp @@ -29,10 +29,10 @@ template void PrintMethodInit( util::ParamData& d, const size_t indent, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>>::type* = 0) + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if>::value>::type* = 0) { const std::string prefix(indent, ' '); @@ -86,7 +86,7 @@ template void PrintMethodInit( util::ParamData& d, const size_t indent, - const typename boost::enable_if>::type* = 0) + const typename std::enable_if::value>::type* = 0) { const std::string prefix(indent, ' '); @@ -118,8 +118,8 @@ template void PrintMethodInit( util::ParamData& d, const size_t indent, - const typename boost::enable_if>>::type* = 0) + const typename std::enable_if>::value>::type* = 0) { const std::string prefix(indent, ' '); @@ -151,8 +151,8 @@ template void PrintMethodInit( util::ParamData& d, const size_t indent, - const typename boost::disable_if>::type* = 0, - const typename boost::enable_if>::type* = 0) + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0) { const std::string prefix(indent, ' '); diff --git a/src/mlpack/bindings/go/print_output_processing.hpp b/src/mlpack/bindings/go/print_output_processing.hpp index 5a5c77fa74..46cec80184 100644 --- a/src/mlpack/bindings/go/print_output_processing.hpp +++ b/src/mlpack/bindings/go/print_output_processing.hpp @@ -29,10 +29,10 @@ template void PrintOutputProcessing( util::ParamData& d, const size_t indent, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>>::type* = 0) + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if>::value>::type* = 0) { const std::string prefix(indent, ' '); @@ -56,7 +56,7 @@ template void PrintOutputProcessing( util::ParamData& d, const size_t indent, - const typename boost::enable_if>::type* = 0, + const typename std::enable_if::value>::type* = 0, const typename std::enable_if>::value>::type* = 0) { @@ -83,8 +83,8 @@ template void PrintOutputProcessing( util::ParamData& d, const size_t indent, - const typename boost::enable_if>>::type* = 0) + const typename std::enable_if>::value>::type* = 0) { const std::string prefix(indent, ' '); @@ -109,8 +109,8 @@ template void PrintOutputProcessing( util::ParamData& d, const size_t indent, - const typename boost::disable_if>::type* = 0, - const typename boost::enable_if>::type* = 0) + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0) { // Get the type names we need to use. std::string goStrippedType, strippedType, printedType, defaultsType; diff --git a/src/mlpack/bindings/go/print_type_doc.hpp b/src/mlpack/bindings/go/print_type_doc.hpp index 2da51fbb67..b5dde90fa0 100644 --- a/src/mlpack/bindings/go/print_type_doc.hpp +++ b/src/mlpack/bindings/go/print_type_doc.hpp @@ -25,11 +25,11 @@ namespace go { template std::string PrintTypeDoc( util::ParamData& data, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>>::type* = 0); + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if>::value>::type* = 0); /** * Return a string representing the command-line type of a vector. @@ -62,8 +62,8 @@ std::string PrintTypeDoc( template std::string PrintTypeDoc( util::ParamData& data, - const typename boost::disable_if>::type* = 0, - const typename boost::enable_if>::type* = 0); + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0); /** * Print the command-line type of an option into a string. diff --git a/src/mlpack/bindings/go/print_type_doc_impl.hpp b/src/mlpack/bindings/go/print_type_doc_impl.hpp index d0a5fef659..568ef9b059 100644 --- a/src/mlpack/bindings/go/print_type_doc_impl.hpp +++ b/src/mlpack/bindings/go/print_type_doc_impl.hpp @@ -24,11 +24,11 @@ namespace go { template std::string PrintTypeDoc( util::ParamData& data, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>>::type*) + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if>::value>::type*) { // A flag type. if (std::is_same::value) @@ -122,8 +122,8 @@ std::string PrintTypeDoc( template std::string PrintTypeDoc( util::ParamData& /* data */, - const typename boost::disable_if>::type*, - const typename boost::enable_if>::type*) + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*) { return "An mlpack model pointer. This type holds a pointer to C++ memory " "containing the mlpack model. Note that this means the mlpack model " diff --git a/src/mlpack/bindings/julia/default_param.hpp b/src/mlpack/bindings/julia/default_param.hpp index 4c61cec7e6..0d2b368381 100644 --- a/src/mlpack/bindings/julia/default_param.hpp +++ b/src/mlpack/bindings/julia/default_param.hpp @@ -26,12 +26,13 @@ namespace julia { template std::string DefaultParamImpl( util::ParamData& data, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>>::type* = 0); + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if>::value>::type* = 0); /** * Return the default value of a vector option. @@ -39,7 +40,7 @@ std::string DefaultParamImpl( template std::string DefaultParamImpl( util::ParamData& data, - const typename boost::enable_if>::type* = 0); + const typename std::enable_if::value>::type* = 0); /** * Return the default value of a string option. @@ -47,7 +48,7 @@ std::string DefaultParamImpl( template std::string DefaultParamImpl( util::ParamData& data, - const typename boost::enable_if>::type* = 0); + const typename std::enable_if::value>::type* = 0); /** * Return the default value of a matrix option, a tuple option, a @@ -57,10 +58,10 @@ std::string DefaultParamImpl( template std::string DefaultParamImpl( util::ParamData& data, - const typename boost::enable_if_c< + const typename std::enable_if< arma::is_arma_type::value || std::is_same>::value>::type* /* junk */ = 0); + arma::mat>>::value>::type* = 0); /** * Return the default value of a model option (this returns the default @@ -69,8 +70,8 @@ std::string DefaultParamImpl( template std::string DefaultParamImpl( util::ParamData& data, - const typename boost::disable_if>::type* = 0, - const typename boost::enable_if>::type* = 0); + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0); /** * Return the default value of an option. This is the function that will be diff --git a/src/mlpack/bindings/julia/default_param_impl.hpp b/src/mlpack/bindings/julia/default_param_impl.hpp index 9b975989e1..667ecae5f4 100644 --- a/src/mlpack/bindings/julia/default_param_impl.hpp +++ b/src/mlpack/bindings/julia/default_param_impl.hpp @@ -24,12 +24,13 @@ namespace julia { template std::string DefaultParamImpl( util::ParamData& data, - const typename boost::disable_if>::type* /* junk */, - const typename boost::disable_if>::type* /* junk */, - const typename boost::disable_if>::type* /* junk */, - const typename boost::disable_if>::type*, - const typename boost::disable_if>>::type* /* junk */) + const typename std::enable_if::value>::type* /* junk */, + const typename std::enable_if::value>::type* /* junk */, + const typename std::enable_if::value>::type* /* junk */, + const typename std::enable_if::value>::type*, + const typename std::enable_if>::value>::type* /* junk */) { std::ostringstream oss; if (std::is_same::value) @@ -46,7 +47,7 @@ std::string DefaultParamImpl( template std::string DefaultParamImpl( util::ParamData& data, - const typename boost::enable_if>::type* /* junk */) + const typename std::enable_if::value>::type* /* junk */) { // Print each element in an array delimited by square brackets. std::ostringstream oss; @@ -89,7 +90,7 @@ std::string DefaultParamImpl( template std::string DefaultParamImpl( util::ParamData& data, - const typename boost::enable_if>::type*) + const typename std::enable_if::value>::type*) { const std::string& s = *boost::any_cast(&data.value); return "\"" + s + "\""; @@ -102,7 +103,7 @@ std::string DefaultParamImpl( template std::string DefaultParamImpl( util::ParamData& /* data */, - const typename boost::enable_if_c< + const typename std::enable_if< arma::is_arma_type::value || std::is_same>::value>::type* /* junk */) @@ -134,8 +135,8 @@ std::string DefaultParamImpl( template std::string DefaultParamImpl( util::ParamData& /* data */, - const typename boost::disable_if>::type* /* junk */, - const typename boost::enable_if>::type* /* junk */) + const typename std::enable_if::value>::type* /* junk */, + const typename std::enable_if::value>::type* /* junk */) { return "nothing"; } diff --git a/src/mlpack/bindings/julia/get_printable_param.hpp b/src/mlpack/bindings/julia/get_printable_param.hpp index a7c241857e..f6e7e442bc 100644 --- a/src/mlpack/bindings/julia/get_printable_param.hpp +++ b/src/mlpack/bindings/julia/get_printable_param.hpp @@ -25,11 +25,11 @@ namespace julia { template std::string GetPrintableParam( util::ParamData& data, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>>::type* = 0) + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if>::value>::type* = 0) { std::ostringstream oss; oss << boost::any_cast(data.value); @@ -42,7 +42,7 @@ std::string GetPrintableParam( template std::string GetPrintableParam( util::ParamData& data, - const typename boost::enable_if>::type* = 0) + const typename std::enable_if::value>::type* = 0) { const T& t = boost::any_cast(data.value); @@ -58,7 +58,7 @@ std::string GetPrintableParam( template std::string GetPrintableParam( util::ParamData& data, - const typename boost::enable_if>::type* = 0) + const typename std::enable_if::value>::type* = 0) { // Get the matrix. const T& matrix = boost::any_cast(data.value); @@ -74,8 +74,8 @@ std::string GetPrintableParam( template std::string GetPrintableParam( util::ParamData& data, - const typename boost::disable_if>::type* = 0, - const typename boost::enable_if>::type* = 0) + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0) { std::ostringstream oss; oss << data.cppType << " model at " << boost::any_cast(data.value); @@ -88,8 +88,8 @@ std::string GetPrintableParam( template std::string GetPrintableParam( util::ParamData& data, - const typename boost::enable_if>>::type* = 0) + const typename std::enable_if>::value>::type* = 0) { // Get the matrix. const T& tuple = boost::any_cast(data.value); diff --git a/src/mlpack/bindings/julia/get_printable_type.hpp b/src/mlpack/bindings/julia/get_printable_type.hpp index 5d4a24c3ee..9fa2a03fec 100644 --- a/src/mlpack/bindings/julia/get_printable_type.hpp +++ b/src/mlpack/bindings/julia/get_printable_type.hpp @@ -23,11 +23,11 @@ namespace julia { template std::string GetPrintableType( util::ParamData& data, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>>::type* = 0); + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if>::value>::type* = 0); /** * Return a string representing the command-line type of a vector. @@ -60,8 +60,8 @@ std::string GetPrintableType( template std::string GetPrintableType( util::ParamData& data, - const typename boost::disable_if>::type* = 0, - const typename boost::enable_if>::type* = 0); + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0); /** * Print the command-line type of an option into a string. diff --git a/src/mlpack/bindings/julia/get_printable_type_impl.hpp b/src/mlpack/bindings/julia/get_printable_type_impl.hpp index f11c92dd8c..bbf32869b2 100644 --- a/src/mlpack/bindings/julia/get_printable_type_impl.hpp +++ b/src/mlpack/bindings/julia/get_printable_type_impl.hpp @@ -26,11 +26,11 @@ namespace julia { template std::string GetPrintableType( util::ParamData& data, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>>::type*) + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if>::value>::type*) { if (std::is_same::value) return "Bool"; @@ -102,8 +102,8 @@ std::string GetPrintableType( template std::string GetPrintableType( util::ParamData& data, - const typename boost::disable_if>::type*, - const typename boost::enable_if>::type*) + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*) { std::string type = util::StripType(data.cppType); if (type == "mlpackModel") diff --git a/src/mlpack/bindings/julia/print_param_defn.hpp b/src/mlpack/bindings/julia/print_param_defn.hpp index 1ee6d7d164..6e5d152770 100644 --- a/src/mlpack/bindings/julia/print_param_defn.hpp +++ b/src/mlpack/bindings/julia/print_param_defn.hpp @@ -79,12 +79,14 @@ void PrintParamDefn( // buffer = ccall((:SerializePtr, Library), // Vector{UInt8}, (Ptr{Nothing}, Ptr{UInt8}), model.ptr, // Base.pointer(buf_len)) - // buf = Base.unsafe_wrap(buf_ptr, buf_len[0]; own=true) + // buf = Base.unsafe_wrap(buf_ptr, buf_len[1]; own=true) + // write(stream, buf_len[1]) // write(stream, buf) // end // // function deserialize(stream::IO):: - // buffer = read(stream) + // buf_len = read(stream, UInt) + // buffer = read(stream, buf_len) // (ccall((:DeserializePtr, Library), // Ptr{Nothing}, (Vector{UInt8}, UInt), buffer, length(buffer))) // end @@ -138,6 +140,7 @@ void PrintParamDefn( << "Base.pointer(buf_len))" << std::endl; std::cout << " buf = Base.unsafe_wrap(Vector{UInt8}, buf_ptr, buf_len[1]; " << "own=true)" << std::endl; + std::cout << " write(stream, buf_len[1])" << std::endl; std::cout << " write(stream, buf)" << std::endl; std::cout << "end" << std::endl; @@ -145,7 +148,8 @@ void PrintParamDefn( std::cout << "# Deserialize a model from the given stream." << std::endl; std::cout << "function deserialize" << type << "(stream::IO)::" << type << std::endl; - std::cout << " buffer = read(stream)" << std::endl; + std::cout << " buf_len = read(stream, UInt)" << std::endl; + std::cout << " buffer = read(stream, buf_len)" << std::endl; std::cout << " " << type << "(ccall((:Deserialize" << type << "Ptr, " << programName << "Library), Ptr{Nothing}, (Ptr{UInt8}, UInt), " << "Base.pointer(buffer), length(buffer)))" << std::endl; diff --git a/src/mlpack/bindings/julia/print_type_doc.hpp b/src/mlpack/bindings/julia/print_type_doc.hpp index 407fa3ee1d..eabda5a067 100644 --- a/src/mlpack/bindings/julia/print_type_doc.hpp +++ b/src/mlpack/bindings/julia/print_type_doc.hpp @@ -25,11 +25,11 @@ namespace julia { template std::string PrintTypeDoc( util::ParamData& data, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>>::type* = 0); + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if>::value>::type* = 0); /** * Return a string representing the command-line type of a vector. @@ -62,8 +62,8 @@ std::string PrintTypeDoc( template std::string PrintTypeDoc( util::ParamData& data, - const typename boost::disable_if>::type* = 0, - const typename boost::enable_if>::type* = 0); + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0); /** * Print the command-line type of an option into a string. diff --git a/src/mlpack/bindings/julia/print_type_doc_impl.hpp b/src/mlpack/bindings/julia/print_type_doc_impl.hpp index e6133580ae..2117c5328d 100644 --- a/src/mlpack/bindings/julia/print_type_doc_impl.hpp +++ b/src/mlpack/bindings/julia/print_type_doc_impl.hpp @@ -24,11 +24,11 @@ namespace julia { template std::string PrintTypeDoc( util::ParamData& data, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>>::type*) + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if>::value>::type*) { // A flag type. if (std::is_same::value) @@ -154,8 +154,8 @@ std::string PrintTypeDoc( template std::string PrintTypeDoc( util::ParamData& /* data */, - const typename boost::disable_if>::type*, - const typename boost::enable_if>::type*) + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*) { return "An mlpack model pointer. `` refers to the type of model that " "is being stored, so, e.g., for `CF()`, the type will be `CFModel`. " diff --git a/src/mlpack/bindings/julia/tests/runtests.jl b/src/mlpack/bindings/julia/tests/runtests.jl index 434d44601f..0d3e702fa1 100644 --- a/src/mlpack/bindings/julia/tests/runtests.jl +++ b/src/mlpack/bindings/julia/tests/runtests.jl @@ -400,6 +400,27 @@ end model_in=newModel) end +# Test that we can serialize a model as part of a larger tuple. +@testset "TestStreamTupleSerialization" begin + _, _, _, _, _, _, modelOut, _, _, _, _, _, _, _ = + test_julia_binding(4.0, 12, "hello", + build_model=true) + + stream = IOBuffer() + serialize(stream, (modelOut, 3, 4, 5)) + + newStream = IOBuffer(copy(stream.data)) + (newModel, a, b, c) = deserialize(newStream) + + _, _, _, _, _, bwOut, _, _, _, _, _, _, _, _ = + test_julia_binding(4.0, 12, "hello", + model_in=newModel) + + @test a == 3 + @test b == 4 + @test c == 5 +end + @testset "TestFileSerialization" begin _, _, _, _, _, _, modelOut, _, _, _, _, _, _, _ = test_julia_binding(4.0, 12, "hello", diff --git a/src/mlpack/bindings/markdown/get_printable_param.hpp b/src/mlpack/bindings/markdown/get_printable_param.hpp index 91df84d61f..e94e9a7ca9 100644 --- a/src/mlpack/bindings/markdown/get_printable_param.hpp +++ b/src/mlpack/bindings/markdown/get_printable_param.hpp @@ -25,11 +25,11 @@ namespace markdown { template std::string GetPrintableParam( util::ParamData& data, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>>::type* = 0) + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if>::value>::type* = 0) { std::ostringstream oss; oss << boost::any_cast(data.value); @@ -42,7 +42,7 @@ std::string GetPrintableParam( template std::string GetPrintableParam( util::ParamData& data, - const typename boost::enable_if>::type* = 0) + const typename std::enable_if::value>::type* = 0) { const T& t = boost::any_cast(data.value); @@ -58,7 +58,7 @@ std::string GetPrintableParam( template std::string GetPrintableParam( util::ParamData& data, - const typename boost::enable_if>::type* = 0) + const typename std::enable_if::value>::type* = 0) { // Get the matrix. const T& matrix = boost::any_cast(data.value); @@ -74,8 +74,8 @@ std::string GetPrintableParam( template std::string GetPrintableParam( util::ParamData& data, - const typename boost::disable_if>::type* = 0, - const typename boost::enable_if>::type* = 0) + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0) { std::ostringstream oss; oss << data.cppType << " model at " << boost::any_cast(data.value); @@ -88,8 +88,8 @@ std::string GetPrintableParam( template std::string GetPrintableParam( util::ParamData& data, - const typename boost::enable_if>>::type* = 0) + const typename std::enable_if>::value>::type* = 0) { // Get the matrix. const T& tuple = boost::any_cast(data.value); diff --git a/src/mlpack/bindings/markdown/get_printable_param_name.hpp b/src/mlpack/bindings/markdown/get_printable_param_name.hpp index 9d19c05f6d..c222ea10fd 100644 --- a/src/mlpack/bindings/markdown/get_printable_param_name.hpp +++ b/src/mlpack/bindings/markdown/get_printable_param_name.hpp @@ -26,10 +26,10 @@ namespace markdown { template std::string GetPrintableParamName( util::ParamData& data, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>>::type* = 0); + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if>::value>::type* = 0); /** * Get the parameter name for a matrix type (where the user has to pass the file @@ -38,7 +38,7 @@ std::string GetPrintableParamName( template std::string GetPrintableParamName( util::ParamData& data, - const typename boost::enable_if>::type* = 0); + const typename std::enable_if::value>::type* = 0); /** * Get the parameter name for a serializable model type (where the user has to @@ -47,8 +47,8 @@ std::string GetPrintableParamName( template std::string GetPrintableParamName( util::ParamData& data, - const typename boost::disable_if>::type* = 0, - const typename boost::enable_if>::type* = 0); + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0); /** * Get the parameter name for a mapped matrix type (where the user has to pass @@ -57,8 +57,8 @@ std::string GetPrintableParamName( template std::string GetPrintableParamName( util::ParamData& data, - const typename boost::enable_if>>::type* = 0); + const typename std::enable_if>::value>::type* = 0); /** * Get the parameter's name as seen by the user. diff --git a/src/mlpack/bindings/markdown/get_printable_param_name_impl.hpp b/src/mlpack/bindings/markdown/get_printable_param_name_impl.hpp index 5a7a63a001..b7e9f91fac 100644 --- a/src/mlpack/bindings/markdown/get_printable_param_name_impl.hpp +++ b/src/mlpack/bindings/markdown/get_printable_param_name_impl.hpp @@ -26,10 +26,10 @@ namespace markdown { template std::string GetPrintableParamName( util::ParamData& data, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>>::type*) + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if>::value>::type*) { return "--" + data.name; } @@ -41,7 +41,7 @@ std::string GetPrintableParamName( template std::string GetPrintableParamName( util::ParamData& data, - const typename boost::enable_if>::type*) + const typename std::enable_if::value>::type*) { return "--" + data.name + "_file"; } @@ -53,8 +53,8 @@ std::string GetPrintableParamName( template std::string GetPrintableParamName( util::ParamData& data, - const typename boost::disable_if>::type*, - const typename boost::enable_if>::type*) + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*) { return "--" + data.name + "_file"; } @@ -66,8 +66,8 @@ std::string GetPrintableParamName( template std::string GetPrintableParamName( util::ParamData& data, - const typename boost::enable_if>>::type*) + const typename std::enable_if>::value>::type*) { return "--" + data.name + "_file"; } diff --git a/src/mlpack/bindings/markdown/get_printable_param_value.hpp b/src/mlpack/bindings/markdown/get_printable_param_value.hpp index c7e44ebd07..a0708fc2af 100644 --- a/src/mlpack/bindings/markdown/get_printable_param_value.hpp +++ b/src/mlpack/bindings/markdown/get_printable_param_value.hpp @@ -27,10 +27,10 @@ template std::string GetPrintableParamValue( util::ParamData& data, const std::string& value, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>>::type* = 0); + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if>::value>::type* = 0); /** * Get the parameter name for a matrix type (where the user has to pass the file @@ -40,7 +40,7 @@ template std::string GetPrintableParamValue( util::ParamData& data, const std::string& value, - const typename boost::enable_if>::type* = 0); + const typename std::enable_if::value>::type* = 0); /** * Get the parameter name for a serializable model type (where the user has to @@ -50,8 +50,8 @@ template std::string GetPrintableParamValue( util::ParamData& data, const std::string& value, - const typename boost::disable_if>::type* = 0, - const typename boost::enable_if>::type* = 0); + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0); /** * Get the parameter name for a mapped matrix type (where the user has to pass @@ -61,8 +61,8 @@ template std::string GetPrintableParamValue( util::ParamData& data, const std::string& value, - const typename boost::enable_if>>::type* = 0); + const typename std::enable_if>::value>::type* = 0); /** * Get the parameter's name as seen by the user. diff --git a/src/mlpack/bindings/markdown/get_printable_param_value_impl.hpp b/src/mlpack/bindings/markdown/get_printable_param_value_impl.hpp index 22da560948..0753a7b03e 100644 --- a/src/mlpack/bindings/markdown/get_printable_param_value_impl.hpp +++ b/src/mlpack/bindings/markdown/get_printable_param_value_impl.hpp @@ -28,10 +28,10 @@ template std::string GetPrintableParamValue( util::ParamData& /* data */, const std::string& input, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>>::type*) + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if>::value>::type*) { return input; } @@ -44,7 +44,7 @@ template std::string GetPrintableParamValue( util::ParamData& /* data */, const std::string& input, - const typename boost::enable_if>::type*) + const typename std::enable_if::value>::type*) { return input + ".csv"; } @@ -57,8 +57,8 @@ template std::string GetPrintableParamValue( util::ParamData& /* data */, const std::string& input, - const typename boost::disable_if>::type*, - const typename boost::enable_if>::type*) + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*) { return input + ".bin"; } @@ -71,8 +71,8 @@ template std::string GetPrintableParamValue( util::ParamData& /* data */, const std::string& input, - const typename boost::enable_if>>::type*) + const typename std::enable_if>::value>::type*) { return input + ".arff"; } diff --git a/src/mlpack/bindings/markdown/is_serializable.hpp b/src/mlpack/bindings/markdown/is_serializable.hpp index daeda8e9cb..fa66d53f08 100644 --- a/src/mlpack/bindings/markdown/is_serializable.hpp +++ b/src/mlpack/bindings/markdown/is_serializable.hpp @@ -25,7 +25,7 @@ namespace markdown { */ template bool IsSerializable( - const typename boost::disable_if>::type* = 0) + const typename std::enable_if::value>::type* = 0) { return false; } @@ -35,8 +35,8 @@ bool IsSerializable( */ template bool IsSerializable( - const typename boost::enable_if>::type* = 0, - const typename boost::disable_if>::type* = 0) + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0) { return true; } diff --git a/src/mlpack/bindings/markdown/print_docs.cpp b/src/mlpack/bindings/markdown/print_docs.cpp index 44adf69e93..e103437f80 100644 --- a/src/mlpack/bindings/markdown/print_docs.cpp +++ b/src/mlpack/bindings/markdown/print_docs.cpp @@ -9,11 +9,13 @@ * 3-clause BSD license along with mlpack. If not, see * http://www.opensource.org/licenses/BSD-3-Clause for more information. */ -#include "print_docs.hpp" - #include #include + +#include + #include "binding_info.hpp" +#include "print_docs.hpp" #include "print_doc_functions.hpp" // Make sure that this is defined. diff --git a/src/mlpack/bindings/python/default_param.hpp b/src/mlpack/bindings/python/default_param.hpp index 15504a74b4..5f8bc32ea4 100644 --- a/src/mlpack/bindings/python/default_param.hpp +++ b/src/mlpack/bindings/python/default_param.hpp @@ -26,12 +26,13 @@ namespace python { template std::string DefaultParamImpl( util::ParamData& data, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>>::type* = 0); + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if>::value>::type* = 0); /** * Return the default value of a vector option. @@ -39,7 +40,7 @@ std::string DefaultParamImpl( template std::string DefaultParamImpl( util::ParamData& data, - const typename boost::enable_if>::type* = 0); + const typename std::enable_if::value>::type* = 0); /** * Return the default value of a string option. @@ -47,7 +48,7 @@ std::string DefaultParamImpl( template std::string DefaultParamImpl( util::ParamData& data, - const typename boost::enable_if>::type* = 0); + const typename std::enable_if::value>::type* = 0); /** * Return the default value of a matrix option, a tuple option, a @@ -57,10 +58,10 @@ std::string DefaultParamImpl( template std::string DefaultParamImpl( util::ParamData& data, - const typename boost::enable_if_c< + const typename std::enable_if< arma::is_arma_type::value || std::is_same>::value>::type* /* junk */ = 0); + arma::mat>>::value>::type* = 0); /** * Return the default value of a model option (this returns the default @@ -69,8 +70,8 @@ std::string DefaultParamImpl( template std::string DefaultParamImpl( util::ParamData& data, - const typename boost::disable_if>::type* = 0, - const typename boost::enable_if>::type* = 0); + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0); /** * Return the default value of an option. This is the function that will be diff --git a/src/mlpack/bindings/python/default_param_impl.hpp b/src/mlpack/bindings/python/default_param_impl.hpp index 15c7f344ae..543253c18b 100644 --- a/src/mlpack/bindings/python/default_param_impl.hpp +++ b/src/mlpack/bindings/python/default_param_impl.hpp @@ -24,12 +24,13 @@ namespace python { template std::string DefaultParamImpl( util::ParamData& data, - const typename boost::disable_if>::type* /* junk */, - const typename boost::disable_if>::type* /* junk */, - const typename boost::disable_if>::type* /* junk */, - const typename boost::disable_if>::type*, - const typename boost::disable_if>>::type* /* junk */) + const typename std::enable_if::value>::type* /* junk */, + const typename std::enable_if::value>::type* /* junk */, + const typename std::enable_if::value>::type* /* junk */, + const typename std::enable_if::value>::type*, + const typename std::enable_if>::value>::type* /* junk */) { std::ostringstream oss; if (std::is_same::value) @@ -46,7 +47,7 @@ std::string DefaultParamImpl( template std::string DefaultParamImpl( util::ParamData& data, - const typename boost::enable_if>::type* /* junk */) + const typename std::enable_if::value>::type* /* junk */) { // Print each element in an array delimited by square brackets. std::ostringstream oss; @@ -89,7 +90,7 @@ std::string DefaultParamImpl( template std::string DefaultParamImpl( util::ParamData& data, - const typename boost::enable_if>::type*) + const typename std::enable_if::value>::type*) { const std::string& s = *boost::any_cast(&data.value); return "'" + s + "'"; @@ -102,7 +103,7 @@ std::string DefaultParamImpl( template std::string DefaultParamImpl( util::ParamData& /* data */, - const typename boost::enable_if_c< + const typename std::enable_if< arma::is_arma_type::value || std::is_same>::value>::type* /* junk */) @@ -134,8 +135,8 @@ std::string DefaultParamImpl( template std::string DefaultParamImpl( util::ParamData& /* data */, - const typename boost::disable_if>::type* /* junk */, - const typename boost::enable_if>::type* /* junk */) + const typename std::enable_if::value>::type* /* junk */, + const typename std::enable_if::value>::type* /* junk */) { return "None"; } diff --git a/src/mlpack/bindings/python/get_cython_type.hpp b/src/mlpack/bindings/python/get_cython_type.hpp index bb01da538e..9809e1224e 100644 --- a/src/mlpack/bindings/python/get_cython_type.hpp +++ b/src/mlpack/bindings/python/get_cython_type.hpp @@ -23,9 +23,9 @@ namespace python { template inline std::string GetCythonType( util::ParamData& /* d */, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0) + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0) { return "unknown"; } @@ -33,9 +33,9 @@ inline std::string GetCythonType( template<> inline std::string GetCythonType( util::ParamData& /* d */, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*) + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*) { return "int"; } @@ -43,9 +43,9 @@ inline std::string GetCythonType( template<> inline std::string GetCythonType( util::ParamData& /* d */, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*) + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*) { return "double"; } @@ -53,9 +53,12 @@ inline std::string GetCythonType( template<> inline std::string GetCythonType( util::ParamData& /* d */, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*) + const typename std::enable_if< + !util::IsStdVector::value>::type*, + const typename std::enable_if< + !data::HasSerialize::value>::type*, + const typename std::enable_if< + !arma::is_arma_type::value>::type*) { return "string"; } @@ -63,9 +66,9 @@ inline std::string GetCythonType( template<> inline std::string GetCythonType( util::ParamData& /* d */, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*) + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*) { return "size_t"; } @@ -73,9 +76,9 @@ inline std::string GetCythonType( template<> inline std::string GetCythonType( util::ParamData& /* d */, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*) + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*) { return "cbool"; } @@ -83,7 +86,7 @@ inline std::string GetCythonType( template inline std::string GetCythonType( util::ParamData& d, - const typename boost::enable_if>::type* = 0) + const typename std::enable_if::value>::type* = 0) { return "vector[" + GetCythonType(d) + "]"; } @@ -91,7 +94,7 @@ inline std::string GetCythonType( template inline std::string GetCythonType( util::ParamData& d, - const typename boost::enable_if>::type* = 0) + const typename std::enable_if::value>::type* = 0) { std::string type = "Mat"; if (T::is_row) @@ -105,8 +108,8 @@ inline std::string GetCythonType( template inline std::string GetCythonType( util::ParamData& d, - const typename boost::disable_if>::type* = 0, - const typename boost::enable_if>::type* = 0) + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0) { return d.cppType + "*"; } diff --git a/src/mlpack/bindings/python/get_printable_param.hpp b/src/mlpack/bindings/python/get_printable_param.hpp index effdf4f07b..44ab825687 100644 --- a/src/mlpack/bindings/python/get_printable_param.hpp +++ b/src/mlpack/bindings/python/get_printable_param.hpp @@ -25,11 +25,11 @@ namespace python { template std::string GetPrintableParam( util::ParamData& data, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>>::type* = 0) + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if>::value>::type* = 0) { std::ostringstream oss; oss << boost::any_cast(data.value); @@ -42,7 +42,7 @@ std::string GetPrintableParam( template std::string GetPrintableParam( util::ParamData& data, - const typename boost::enable_if>::type* = 0) + const typename std::enable_if::value>::type* = 0) { const T& t = boost::any_cast(data.value); @@ -58,7 +58,7 @@ std::string GetPrintableParam( template std::string GetPrintableParam( util::ParamData& data, - const typename boost::enable_if>::type* = 0) + const typename std::enable_if::value>::type* = 0) { // Get the matrix. const T& matrix = boost::any_cast(data.value); @@ -74,8 +74,8 @@ std::string GetPrintableParam( template std::string GetPrintableParam( util::ParamData& data, - const typename boost::disable_if>::type* = 0, - const typename boost::enable_if>::type* = 0) + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0) { std::ostringstream oss; oss << data.cppType << " model at " << boost::any_cast(data.value); @@ -88,8 +88,8 @@ std::string GetPrintableParam( template std::string GetPrintableParam( util::ParamData& data, - const typename boost::enable_if>>::type* = 0) + const typename std::enable_if>::value>::type* = 0) { // Get the matrix. const T& tuple = boost::any_cast(data.value); diff --git a/src/mlpack/bindings/python/get_printable_type.hpp b/src/mlpack/bindings/python/get_printable_type.hpp index 2b7cfb40ed..1d454b172a 100644 --- a/src/mlpack/bindings/python/get_printable_type.hpp +++ b/src/mlpack/bindings/python/get_printable_type.hpp @@ -23,84 +23,87 @@ namespace python { template inline std::string GetPrintableType( util::ParamData& /* d */, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>>::type* = 0); + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if>::value>::type* = 0); template<> inline std::string GetPrintableType( util::ParamData& /* d */, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>>::type*); + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if>::value>::type*); template<> inline std::string GetPrintableType( util::ParamData& /* d */, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>>::type*); + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if>::value>::type*); template<> inline std::string GetPrintableType( util::ParamData& /* d */, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>>::type*); + const typename std::enable_if< + !util::IsStdVector::value>::type*, + const typename std::enable_if< + !data::HasSerialize::value>::type*, + const typename std::enable_if< + !arma::is_arma_type::value>::type*, + const typename std::enable_if>::value>::type*); template<> inline std::string GetPrintableType( util::ParamData& /* d */, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>>::type*); + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if>::value>::type*); template<> inline std::string GetPrintableType( util::ParamData& /* d */, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>>::type*); + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if>::value>::type*); template inline std::string GetPrintableType( util::ParamData& d, - const typename boost::enable_if>::type* = 0, - const typename boost::disable_if>>::type* = 0); + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if>::value>::type* = 0); template inline std::string GetPrintableType( util::ParamData& /* d */, - const typename boost::enable_if>::type* = 0, - const typename boost::disable_if>>::type* = 0); + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if>::value>::type* = 0); template inline std::string GetPrintableType( util::ParamData& /* d */, - const typename boost::enable_if>>::type* = 0); + const typename std::enable_if>::value>::type* = 0); template inline std::string GetPrintableType( util::ParamData& d, - const typename boost::disable_if>::type* = 0, - const typename boost::enable_if>::type* = 0, - const typename boost::disable_if>>::type* = 0); + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if>::value>::type* = 0); template void GetPrintableType(util::ParamData& d, diff --git a/src/mlpack/bindings/python/get_printable_type_impl.hpp b/src/mlpack/bindings/python/get_printable_type_impl.hpp index 0181079aa1..5a903af575 100644 --- a/src/mlpack/bindings/python/get_printable_type_impl.hpp +++ b/src/mlpack/bindings/python/get_printable_type_impl.hpp @@ -22,11 +22,11 @@ namespace python { template inline std::string GetPrintableType( util::ParamData& /* d */, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>>::type*) + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if>::value>::type*) { return "unknown"; } @@ -34,11 +34,11 @@ inline std::string GetPrintableType( template<> inline std::string GetPrintableType( util::ParamData& /* d */, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>>::type*) + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if>::value>::type*) { return "int"; } @@ -46,11 +46,11 @@ inline std::string GetPrintableType( template<> inline std::string GetPrintableType( util::ParamData& /* d */, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>>::type*) + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if>::value>::type*) { return "float"; } @@ -58,11 +58,14 @@ inline std::string GetPrintableType( template<> inline std::string GetPrintableType( util::ParamData& /* d */, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>>::type*) + const typename std::enable_if< + !util::IsStdVector::value>::type*, + const typename std::enable_if< + !data::HasSerialize::value>::type*, + const typename std::enable_if< + !arma::is_arma_type::value>::type*, + const typename std::enable_if>::value>::type*) { return "str"; } @@ -70,11 +73,11 @@ inline std::string GetPrintableType( template<> inline std::string GetPrintableType( util::ParamData& /* d */, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>>::type*) + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if>::value>::type*) { return "int"; } @@ -82,11 +85,11 @@ inline std::string GetPrintableType( template<> inline std::string GetPrintableType( util::ParamData& /* d */, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>>::type*) + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if>::value>::type*) { return "bool"; } @@ -94,9 +97,9 @@ inline std::string GetPrintableType( template inline std::string GetPrintableType( util::ParamData& d, - const typename boost::enable_if>::type*, - const typename boost::disable_if>>::type*) + const typename std::enable_if::value>::type*, + const typename std::enable_if>::value>::type*) { return "list of " + GetPrintableType(d) + "s"; } @@ -104,9 +107,9 @@ inline std::string GetPrintableType( template inline std::string GetPrintableType( util::ParamData& /* d */, - const typename boost::enable_if>::type*, - const typename boost::disable_if>>::type*) + const typename std::enable_if::value>::type*, + const typename std::enable_if>::value>::type*) { std::string type = "matrix"; if (std::is_same::value) @@ -127,8 +130,8 @@ inline std::string GetPrintableType( template inline std::string GetPrintableType( util::ParamData& /* d */, - const typename boost::enable_if>>::type*) + const typename std::enable_if>::value>::type*) { return "categorical matrix"; } @@ -136,10 +139,10 @@ inline std::string GetPrintableType( template inline std::string GetPrintableType( util::ParamData& d, - const typename boost::disable_if>::type*, - const typename boost::enable_if>::type*, - const typename boost::disable_if>>::type*) + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if>::value>::type*) { return d.cppType + "Type"; } diff --git a/src/mlpack/bindings/python/import_decl.hpp b/src/mlpack/bindings/python/import_decl.hpp index b060a66dfe..e6518ce461 100644 --- a/src/mlpack/bindings/python/import_decl.hpp +++ b/src/mlpack/bindings/python/import_decl.hpp @@ -26,8 +26,8 @@ template void ImportDecl( util::ParamData& d, const size_t indent, - const typename boost::disable_if>::type* = 0, - const typename boost::enable_if>::type* = 0) + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0) { // First, we have to parse the type. If we have something like, e.g., // 'LogisticRegression<>', we must convert this to 'LogisticRegression[T=*].' @@ -53,8 +53,8 @@ template void ImportDecl( util::ParamData& /* d */, const size_t /* indent */, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0) + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0) { // Print nothing. } @@ -66,7 +66,7 @@ template void ImportDecl( util::ParamData& /* d */, const size_t /* indent */, - const typename boost::enable_if>::type* = 0) + const typename std::enable_if::value>::type* = 0) { // Print nothing. } diff --git a/src/mlpack/bindings/python/print_class_defn.hpp b/src/mlpack/bindings/python/print_class_defn.hpp index ff1de4b26e..b3938c4ff1 100644 --- a/src/mlpack/bindings/python/print_class_defn.hpp +++ b/src/mlpack/bindings/python/print_class_defn.hpp @@ -25,8 +25,8 @@ namespace python { template void PrintClassDefn( util::ParamData& /* d */, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0) + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0) { // Do nothing. } @@ -37,7 +37,7 @@ void PrintClassDefn( template void PrintClassDefn( util::ParamData& /* d */, - const typename boost::enable_if>::type* = 0) + const typename std::enable_if::value>::type* = 0) { // Do nothing. } @@ -48,8 +48,8 @@ void PrintClassDefn( template void PrintClassDefn( util::ParamData& d, - const typename boost::disable_if>::type* = 0, - const typename boost::enable_if>::type* = 0) + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0) { // First, we have to parse the type. If we have something like, e.g., // 'LogisticRegression<>', we must convert this to 'LogisticRegression[].' @@ -63,11 +63,11 @@ void PrintClassDefn( * cdef class Type: * cdef * modelptr * cdef public dict scrubbed_params - * + * * def __cinit__(self): * self.modelptr = new () * self.scrubbed_params = dict() - * + * * def __dealloc__(self): * del self.modelptr * @@ -82,18 +82,18 @@ void PrintClassDefn( * * def _get_cpp_params(self): * return SerializeOutJSON(self.modelptr, "") - * + * * def _set_cpp_params(self, state): * SerializeInJSON(self.modelptr, state, "") - * + * * def get_cpp_params(self, return_str=False): * params = self._get_cpp_params() * return process_params_out(self, params, return_str=return_str) - * + * * def set_cpp_params(self, params_dic): * params_str = process_params_in(self, params_dic) * self._set_cpp_params(params_str) - * + * * @endcode */ std::cout << "cdef class " << strippedType << "Type:" << std::endl; @@ -129,11 +129,14 @@ void PrintClassDefn( std::cout << std::endl; std::cout << " def get_cpp_params(self, return_str=False):" << std::endl; std::cout << " params = self._get_cpp_params()" << std::endl; - std::cout << " return process_params_out(self, params, return_str=return_str)" << std::endl; + std::cout << " return process_params_out(self, params, " + << "return_str=return_str)" << std::endl; std::cout << std::endl; std::cout << " def set_cpp_params(self, params_dic):" << std::endl; - std::cout << " params_str = process_params_in(self, params_dic)" << std::endl; - std::cout << " self._set_cpp_params(params_str.encode(\"utf-8\"))" << std::endl; + std::cout << " params_str = process_params_in(self, params_dic)" + << std::endl; + std::cout << " self._set_cpp_params(params_str.encode(\"utf-8\"))" + << std::endl; std::cout << std::endl; } diff --git a/src/mlpack/bindings/python/print_input_processing.hpp b/src/mlpack/bindings/python/print_input_processing.hpp index c4a8ed5006..5137db40e9 100644 --- a/src/mlpack/bindings/python/print_input_processing.hpp +++ b/src/mlpack/bindings/python/print_input_processing.hpp @@ -31,11 +31,11 @@ template void PrintInputProcessing( util::ParamData& d, const size_t indent, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>>::type* = 0) + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if>::value>::type* = 0) { // The copy_all_inputs parameter must be handled first, and therefore is // outside the scope of this code. @@ -164,11 +164,11 @@ template void PrintInputProcessing( util::ParamData& d, const size_t indent, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>>::type* = 0, - const typename boost::enable_if>::type* = 0) + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if>::value>::type* = 0, + const typename std::enable_if::value>::type* = 0) { const std::string prefix(indent, ' '); @@ -251,8 +251,8 @@ template void PrintInputProcessing( util::ParamData& d, const size_t indent, - const typename boost::disable_if>::type* = 0, - const typename boost::enable_if>::type* = 0) + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0) { const std::string prefix(indent, ' '); @@ -372,9 +372,9 @@ template void PrintInputProcessing( util::ParamData& d, const size_t indent, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::enable_if>::type* = 0) + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0) { // First, get the correct class name if needed. std::string strippedType, printedType, defaultsType; @@ -445,9 +445,9 @@ template void PrintInputProcessing( util::ParamData& d, const size_t indent, - const typename boost::disable_if>::type* = 0, - const typename boost::enable_if>>::type* = 0) + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if>::value>::type* = 0) { // The user should pass in a matrix type of some sort. const std::string prefix(indent, ' '); diff --git a/src/mlpack/bindings/python/print_output_processing.hpp b/src/mlpack/bindings/python/print_output_processing.hpp index af1ef95a93..e9c89200b3 100644 --- a/src/mlpack/bindings/python/print_output_processing.hpp +++ b/src/mlpack/bindings/python/print_output_processing.hpp @@ -30,10 +30,10 @@ void PrintOutputProcessing( util::ParamData& d, const size_t indent, const bool onlyOutput, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>>::type* = 0) + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if>::value>::type* = 0) { const std::string prefix(indent, ' '); @@ -86,7 +86,7 @@ void PrintOutputProcessing( util::ParamData& d, const size_t indent, const bool onlyOutput, - const typename boost::enable_if>::type* = 0) + const typename std::enable_if::value>::type* = 0) { const std::string prefix(indent, ' '); @@ -128,8 +128,8 @@ void PrintOutputProcessing( util::ParamData& d, const size_t indent, const bool onlyOutput, - const typename boost::enable_if>>::type* = 0) + const typename std::enable_if>::value>::type* = 0) { const std::string prefix(indent, ' '); @@ -170,8 +170,8 @@ void PrintOutputProcessing( util::ParamData& d, const size_t indent, const bool onlyOutput, - const typename boost::disable_if>::type* = 0, - const typename boost::enable_if>::type* = 0) + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0) { // Get the type names we need to use. std::string strippedType, printedType, defaultsType; diff --git a/src/mlpack/bindings/python/print_pyx.cpp b/src/mlpack/bindings/python/print_pyx.cpp index e85e0fa082..4fcda954e9 100644 --- a/src/mlpack/bindings/python/print_pyx.cpp +++ b/src/mlpack/bindings/python/print_pyx.cpp @@ -80,8 +80,10 @@ void PrintPYX(const util::BindingDetails& doc, cout << "from io cimport EnableVerbose, DisableVerbose, DisableBacktrace, " << "ResetTimers, EnableTimers" << endl; cout << "from matrix_utils import to_matrix, to_matrix_with_info" << endl; - cout << "from preprocess_json_params import process_params_out, process_params_in" << endl; - cout << "from serialization cimport SerializeIn, SerializeOut, SerializeOutJSON, SerializeInJSON" << endl; + cout << "from preprocess_json_params import process_params_out, " + << "process_params_in" << endl; + cout << "from serialization cimport SerializeIn, SerializeOut, " + << "SerializeOutJSON, SerializeInJSON" << endl; cout << endl; cout << "import numpy as np" << endl; cout << "cimport numpy as np" << endl; diff --git a/src/mlpack/bindings/python/print_type_doc.hpp b/src/mlpack/bindings/python/print_type_doc.hpp index 88186faafb..aad90ee4b7 100644 --- a/src/mlpack/bindings/python/print_type_doc.hpp +++ b/src/mlpack/bindings/python/print_type_doc.hpp @@ -25,11 +25,11 @@ namespace python { template std::string PrintTypeDoc( util::ParamData& data, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>>::type* = 0); + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if>::value>::type* = 0); /** * Return a string representing the command-line type of a vector. @@ -62,8 +62,8 @@ std::string PrintTypeDoc( template std::string PrintTypeDoc( util::ParamData& data, - const typename boost::disable_if>::type* = 0, - const typename boost::enable_if>::type* = 0); + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0); /** * Print the command-line type of an option into a string. diff --git a/src/mlpack/bindings/python/print_type_doc_impl.hpp b/src/mlpack/bindings/python/print_type_doc_impl.hpp index 8ab5986721..64b6ca3e22 100644 --- a/src/mlpack/bindings/python/print_type_doc_impl.hpp +++ b/src/mlpack/bindings/python/print_type_doc_impl.hpp @@ -24,11 +24,11 @@ namespace python { template std::string PrintTypeDoc( util::ParamData& data, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>::type*, - const typename boost::disable_if>>::type*) + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*, + const typename std::enable_if>::value>::type*) { // A flag type. if (std::is_same::value) @@ -150,8 +150,8 @@ std::string PrintTypeDoc( template std::string PrintTypeDoc( util::ParamData& /* data */, - const typename boost::disable_if>::type*, - const typename boost::enable_if>::type*) + const typename std::enable_if::value>::type*, + const typename std::enable_if::value>::type*) { return "An mlpack model pointer. This type can be pickled to or from disk, " "and internally holds a pointer to C++ memory containing the mlpack " diff --git a/src/mlpack/bindings/tests/delete_allocated_memory.hpp b/src/mlpack/bindings/tests/delete_allocated_memory.hpp index 08f59d74e8..5dd60fa294 100644 --- a/src/mlpack/bindings/tests/delete_allocated_memory.hpp +++ b/src/mlpack/bindings/tests/delete_allocated_memory.hpp @@ -21,8 +21,8 @@ namespace tests { template void DeleteAllocatedMemoryImpl( util::ParamData& /* d */, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0) + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0) { // Do nothing. } @@ -30,7 +30,7 @@ void DeleteAllocatedMemoryImpl( template void DeleteAllocatedMemoryImpl( util::ParamData& /* d */, - const typename boost::enable_if>::type* = 0) + const typename std::enable_if::value>::type* = 0) { // Do nothing. } @@ -38,8 +38,8 @@ void DeleteAllocatedMemoryImpl( template void DeleteAllocatedMemoryImpl( util::ParamData& d, - const typename boost::disable_if>::type* = 0, - const typename boost::enable_if>::type* = 0) + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0) { // Delete the allocated memory (hopefully we actually own it). delete *boost::any_cast(&d.value); diff --git a/src/mlpack/bindings/tests/get_allocated_memory.hpp b/src/mlpack/bindings/tests/get_allocated_memory.hpp index 579dbfdc8e..fb4a903b80 100644 --- a/src/mlpack/bindings/tests/get_allocated_memory.hpp +++ b/src/mlpack/bindings/tests/get_allocated_memory.hpp @@ -22,8 +22,8 @@ namespace tests { template void* GetAllocatedMemory( util::ParamData& /* d */, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0) + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0) { return NULL; } @@ -31,7 +31,7 @@ void* GetAllocatedMemory( template void* GetAllocatedMemory( util::ParamData& /* d */, - const typename boost::enable_if>::type* = 0) + const typename std::enable_if::value>::type* = 0) { return NULL; } @@ -39,8 +39,8 @@ void* GetAllocatedMemory( template void* GetAllocatedMemory( util::ParamData& d, - const typename boost::disable_if>::type* = 0, - const typename boost::enable_if>::type* = 0) + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0) { // Here we have a model; return its memory location. return *boost::any_cast(&d.value); diff --git a/src/mlpack/bindings/tests/get_printable_param.hpp b/src/mlpack/bindings/tests/get_printable_param.hpp index 556c28bd2f..0bf5e2ff24 100644 --- a/src/mlpack/bindings/tests/get_printable_param.hpp +++ b/src/mlpack/bindings/tests/get_printable_param.hpp @@ -27,11 +27,11 @@ namespace tests { template std::string GetPrintableParam( util::ParamData& data, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>::type* = 0, - const typename boost::disable_if>>::type* = 0); + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if>::value>::type* = 0); /** * Print a vector option, with spaces between it. @@ -39,7 +39,7 @@ std::string GetPrintableParam( template std::string GetPrintableParam( util::ParamData& data, - const typename boost::enable_if>::type* = 0); + const typename std::enable_if::value>::type* = 0); /** * Print a matrix option (this just prints the filename). @@ -47,7 +47,7 @@ std::string GetPrintableParam( template std::string GetPrintableParam( util::ParamData& data, - const typename boost::enable_if>::type* = 0); + const typename std::enable_if::value>::type* = 0); /** * Print a serializable class option (this just prints the filename). @@ -55,8 +55,8 @@ std::string GetPrintableParam( template std::string GetPrintableParam( util::ParamData& data, - const typename boost::disable_if>::type* = 0, - const typename boost::enable_if>::type* = 0); + const typename std::enable_if::value>::type* = 0, + const typename std::enable_if::value>::type* = 0); /** * Print a mapped matrix option (this just prints the filename). @@ -64,8 +64,8 @@ std::string GetPrintableParam( template std::string GetPrintableParam( util::ParamData& data, - const typename boost::enable_if>>::type* = 0); + const typename std::enable_if>::value>::type* = 0); /** * Print an option into a std::string. This should print a short, one-line diff --git a/src/mlpack/bindings/tests/get_printable_param_impl.hpp b/src/mlpack/bindings/tests/get_printable_param_impl.hpp index c14d8a4bed..3a6c604b69 100644 --- a/src/mlpack/bindings/tests/get_printable_param_impl.hpp +++ b/src/mlpack/bindings/tests/get_printable_param_impl.hpp @@ -22,11 +22,11 @@ namespace tests { template std::string GetPrintableParam( util::ParamData& data, - const typename boost::disable_if>::type* /* junk */, - const typename boost::disable_if>::type* /* junk */, - const typename boost::disable_if>::type* /* junk */, - const typename boost::disable_if>>::type* /* junk */) + const typename std::enable_if::value>::type* /* junk */, + const typename std::enable_if::value>::type* /* junk */, + const typename std::enable_if::value>::type* /* junk */, + const typename std::enable_if>::value>::type* /* junk */) { std::ostringstream oss; oss << boost::any_cast(data.value); @@ -37,7 +37,7 @@ std::string GetPrintableParam( template std::string GetPrintableParam( util::ParamData& data, - const typename boost::enable_if>::type* /* junk */) + const typename std::enable_if::value>::type* /* junk */) { const T& t = boost::any_cast(data.value); @@ -51,7 +51,7 @@ std::string GetPrintableParam( template std::string GetPrintableParam( util::ParamData& /* data */, - const typename boost::enable_if>::type* /* junk */) + const typename std::enable_if::value>::type* /* junk */) { return "matrix type"; } @@ -60,8 +60,8 @@ std::string GetPrintableParam( template std::string GetPrintableParam( util::ParamData& data, - const typename boost::disable_if>::type* /* junk */, - const typename boost::enable_if>::type* /* junk */) + const typename std::enable_if::value>::type* /* junk */, + const typename std::enable_if::value>::type* /* junk */) { // Extract the string from the tuple that's being held. std::ostringstream oss; @@ -73,8 +73,8 @@ std::string GetPrintableParam( template std::string GetPrintableParam( util::ParamData& /* data */, - const typename boost::enable_if>>::type* /* junk */) + const typename std::enable_if>::value>::type* /* junk */) { return "matrix/DatatsetInfo tuple"; } diff --git a/src/mlpack/core/data/load.hpp b/src/mlpack/core/data/load.hpp index 9b54f43ce1..7f3b706929 100644 --- a/src/mlpack/core/data/load.hpp +++ b/src/mlpack/core/data/load.hpp @@ -34,7 +34,7 @@ namespace data /** Functions to load and save matrices and models. */ { * * - CSV (arma::csv_ascii), denoted by .csv, or optionally .txt * - TSV (arma::raw_ascii), denoted by .tsv, .csv, or .txt - * - ASCII (arma::raw_ascii), denoted by .json + * - ASCII (arma::raw_ascii), denoted by .txt * - Armadillo ASCII (arma::arma_ascii), also denoted by .txt * - PGM (arma::pgm_binary), denoted by .pgm * - PPM (arma::ppm_binary), denoted by .ppm @@ -273,8 +273,12 @@ bool Load(const std::string& filename, * mlpack requires column-major matrices, this should be left at its default * value of 'true'. * - * The DatasetMapper object passed to this function will be re-created, so any - * mappings from previous loads will be lost. + * If the given `info` has already been used with a different `data::Load()` + * call where the dataset has the same dimensionality, then the mappings and + * dimension types inside of `info` will be *re-used*. If the given `info` is a + * new `DatasetMapper` object (e.g. its dimensionality is 0), then new mappings + * will be created. If the given `info` has a different dimensionality of data + * than what is present in `filename`, an exception will be thrown. * * @param filename Name of file to load. * @param matrix Matrix to load contents of file into. diff --git a/src/mlpack/core/data/load_csv.hpp b/src/mlpack/core/data/load_csv.hpp index e6e6569ea4..ce7d0bb9b1 100644 --- a/src/mlpack/core/data/load_csv.hpp +++ b/src/mlpack/core/data/load_csv.hpp @@ -96,7 +96,20 @@ class LoadCSV { ++rows; } - info = DatasetMapper(rows); + + // Reset the DatasetInfo object, if needed. + if (info.Dimensionality() == 0) + { + info.SetDimensionality(rows); + } + else if (info.Dimensionality() != rows) + { + std::ostringstream oss; + oss << "data::LoadCSV(): given DatasetInfo has dimensionality " + << info.Dimensionality() << ", but data has dimensionality " + << rows; + throw std::invalid_argument(oss.str()); + } // Now, jump back to the beginning of the file. inFile.clear(); @@ -179,8 +192,19 @@ class LoadCSV qi::parse(line.begin(), line.end(), stringRule[findRowSize] % delimiterRule); - // Now that we know the dimensionality, initialize the DatasetMapper. - info.SetDimensionality(rows); + // Reset the DatasetInfo object, if needed. + if (info.Dimensionality() == 0) + { + info.SetDimensionality(rows); + } + else if (info.Dimensionality() != rows) + { + std::ostringstream oss; + oss << "data::LoadCSV(): given DatasetInfo has dimensionality " + << info.Dimensionality() << ", but data has dimensionality " + << rows; + throw std::invalid_argument(oss.str()); + } } // If we need to do a first pass for the DatasetMapper, do it. diff --git a/src/mlpack/core/data/load_model_impl.hpp b/src/mlpack/core/data/load_model_impl.hpp index ae5396b4fb..c62bad2673 100644 --- a/src/mlpack/core/data/load_model_impl.hpp +++ b/src/mlpack/core/data/load_model_impl.hpp @@ -15,15 +15,8 @@ // In case it hasn't already been included. #include "load.hpp" -#include -#include - #include "extension.hpp" -#include -#include -#include - #include #include #include diff --git a/src/mlpack/core/data/save.hpp b/src/mlpack/core/data/save.hpp index 6f8889cf8e..685e7ebeb3 100644 --- a/src/mlpack/core/data/save.hpp +++ b/src/mlpack/core/data/save.hpp @@ -32,7 +32,7 @@ namespace data /** Functions to load and save matrices. */ { * The supported types of files are the same as found in Armadillo: * * - CSV (arma::csv_ascii), denoted by .csv, or optionally .txt - * - ASCII (arma::raw_ascii), denoted by .json + * - ASCII (arma::raw_ascii), denoted by .txt * - Armadillo ASCII (arma::arma_ascii), also denoted by .txt * - PGM (arma::pgm_binary), denoted by .pgm * - PPM (arma::ppm_binary), denoted by .ppm diff --git a/src/mlpack/core/tree/rectangle_tree/rectangle_tree.hpp b/src/mlpack/core/tree/rectangle_tree/rectangle_tree.hpp index 4f1282b276..fb906c59b0 100644 --- a/src/mlpack/core/tree/rectangle_tree/rectangle_tree.hpp +++ b/src/mlpack/core/tree/rectangle_tree/rectangle_tree.hpp @@ -54,7 +54,7 @@ template::value, + static_assert(std::is_same::value, "RectangleTree: MetricType must be metric::EuclideanDistance."); public: diff --git a/src/mlpack/methods/ann/gan/metrics/CMakeLists.txt b/src/mlpack/methods/ann/gan/metrics/CMakeLists.txt index c93ed9d492..0600b603fa 100644 --- a/src/mlpack/methods/ann/gan/metrics/CMakeLists.txt +++ b/src/mlpack/methods/ann/gan/metrics/CMakeLists.txt @@ -1,8 +1,8 @@ # Define the files we need to compile. # Anything not in this list will not be compiled into mlpack. set(SOURCES - inception_score - inception_score_impl + inception_score.hpp + inception_score_impl.hpp ) # Add directory name to sources. diff --git a/src/mlpack/methods/ann/layer/CMakeLists.txt b/src/mlpack/methods/ann/layer/CMakeLists.txt index 52dbebec75..d1eb91ff55 100644 --- a/src/mlpack/methods/ann/layer/CMakeLists.txt +++ b/src/mlpack/methods/ann/layer/CMakeLists.txt @@ -18,6 +18,8 @@ set(SOURCES batch_norm_impl.hpp bilinear_interpolation.hpp bilinear_interpolation_impl.hpp + channel_shuffle.hpp + channel_shuffle_impl.hpp concat.hpp concat_impl.hpp concat_performance.hpp diff --git a/src/mlpack/methods/ann/layer/batch_norm_impl.hpp b/src/mlpack/methods/ann/layer/batch_norm_impl.hpp index 8534f9d5ef..1b6637928c 100644 --- a/src/mlpack/methods/ann/layer/batch_norm_impl.hpp +++ b/src/mlpack/methods/ann/layer/batch_norm_impl.hpp @@ -234,7 +234,7 @@ void BatchNorm::serialize( if (cereal::is_loading()) { weights.set_size(size + size, 1); - loading = false; + loading = true; } ar(CEREAL_NVP(eps)); diff --git a/src/mlpack/methods/ann/layer/channel_shuffle.hpp b/src/mlpack/methods/ann/layer/channel_shuffle.hpp new file mode 100644 index 0000000000..5e3eb273cb --- /dev/null +++ b/src/mlpack/methods/ann/layer/channel_shuffle.hpp @@ -0,0 +1,155 @@ +/** + * @file methods/ann/layer/channel_shuffle.hpp + * @author Abhinav Anand + * + * mlpack is free software; you may redistribute it and/or modify it under the + * terms of the 3-clause BSD license. You should have received a copy of the + * 3-clause BSD license along with mlpack. If not, see + * http://www.opensource.org/licenses/BSD-3-Clause for more information. + */ +#ifndef MLPACK_METHODS_ANN_LAYER_CHANNEL_SHUFFLE_HPP +#define MLPACK_METHODS_ANN_LAYER_CHANNEL_SHUFFLE_HPP + +#include + +namespace mlpack { +namespace ann /** Artificial Neural Network. */ { + +/** + * Definition and implementation of the Channel Shuffle Layer. + * + * Channel Shuffle divides the channels/units in a tensor into groups + * and rearrange while keeping the original tensor shape. + * + * For more information, refer to the following paper, + * + * @code + * @article{zhang2018shufflenet, + * author = {Xiangyu Zhang, Xinyu Zhou, Mengxiao Lin, Jian Sun and + * Megvii Inc}, + * title = {Shufflenet: An extremely efficient convolutional neural + * network for mobile devices}, + * year = {2018}, + * url = {https://arxiv.org/pdf/1707.01083}, + * } + * @endcode + * + * @tparam InputDataType Type of the input data (arma::colvec, arma::mat, + * arma::sp_mat or arma::cube). + * @tparam OutputDataType Type of the output data (arma::colvec, arma::mat, + * arma::sp_mat or arma::cube). + */ +template < + typename InputDataType = arma::mat, + typename OutputDataType = arma::mat +> +class ChannelShuffle +{ + public: + //! Create the Channel Shuffle object. + ChannelShuffle(); + + /** + * The constructor for the Channel Shuffle. + * + * @param inRowSize Number of input rows. + * @param inColSize Number of input columns. + * @param depth Number of input slices. + * @param group Number of groups for shuffling channels. + */ + ChannelShuffle(const size_t inRowSize, + const size_t inColSize, + const size_t depth, + const size_t groupCount); + + /** + * Forward pass through the layer. + * + * @param input The input matrix. + * @param output The resulting interpolated output matrix. + */ + template + void Forward(const arma::Mat& input, arma::Mat& output); + + /** + * Ordinary feed backward pass of a neural network, calculating the function + * f(x) by propagating x backwards through f. Using the results from the feed + * forward pass. Since the layer does not have any learn-able parameters, + * we just have to down-sample the gradient to make its size compatible with + * the input size. + * + * @param * (input) The input matrix. + * @param gradient The computed backward gradient. + * @param output The resulting down-sampled output. + */ + template + void Backward(const arma::Mat& /*input*/, + const arma::Mat& gradient, + arma::Mat& output); + + //! Get the output parameter. + OutputDataType const& OutputParameter() const { return outputParameter; } + //! Modify the output parameter. + OutputDataType& OutputParameter() { return outputParameter; } + + //! Get the delta. + OutputDataType const& Delta() const { return delta; } + //! Modify the delta. + OutputDataType& Delta() { return delta; } + + //! Get the row size of the input. + size_t const& InRowSize() const { return inRowSize; } + //! Modify the row size of the input. + size_t& InRowSize() { return inRowSize; } + + //! Get the column size of the input. + size_t const& InColSize() const { return inColSize; } + //! Modify the column size of the input. + size_t& InColSize() { return inColSize; } + + //! Get the depth of the input. + size_t const& InDepth() const { return depth; } + //! Modify the depth of the input. + size_t& InDepth() { return depth; } + + //! Get the number of groups the channels is divided into. + size_t const& InGroupCount() const { return groupCount; } + //! Modify the number of groups the channels is divided into. + size_t& InGroupCount() { return groupCount; } + + //! Get the shape of the input. + size_t InputShape() const + { + return inRowSize; + } + + /** + * Serialize the layer. + */ + template + void serialize(Archive& ar, const uint32_t /* version */); + + private: + //! Locally stored row size of the input. + size_t inRowSize; + //! Locally stored column size of the input. + size_t inColSize; + //! Locally stored depth of the input. + size_t depth; + //! Locally stored the number of groups the channels is divided into. + size_t groupCount; + //! Locally stored number of input points. + size_t batchSize; + //! Locally-stored delta object. + OutputDataType delta; + //! Locally-stored output parameter object. + OutputDataType outputParameter; +}; // class ChannelShuffle + +} // namespace ann +} // namespace mlpack + +// Include implementation. +#include "channel_shuffle_impl.hpp" + +#endif diff --git a/src/mlpack/methods/ann/layer/channel_shuffle_impl.hpp b/src/mlpack/methods/ann/layer/channel_shuffle_impl.hpp new file mode 100644 index 0000000000..19062df91a --- /dev/null +++ b/src/mlpack/methods/ann/layer/channel_shuffle_impl.hpp @@ -0,0 +1,137 @@ +/** + * @file methods/ann/layer/channe_shuffle_impl.hpp + * @author Abhinav Anand + * + * Implementation of the channel shuffle function as an individual layer. + * + * mlpack is free software; you may redistribute it and/or modify it under the + * terms of the 3-clause BSD license. You should have received a copy of the + * 3-clause BSD license along with mlpack. If not, see + * http://www.opensource.org/licenses/BSD-3-Clause for more information. + */ +#ifndef MLPACK_METHODS_ANN_LAYER_CHANNEL_SHUFFLE_IMPL_HPP +#define MLPACK_METHODS_ANN_LAYER_CHANNEL_SHUFFLE_IMPL_HPP + +// In case it hasn't yet been included. +#include "channel_shuffle.hpp" + +namespace mlpack { +namespace ann /** Artificial Neural Network. */ { + + +template +ChannelShuffle:: +ChannelShuffle(): + inRowSize(0), + inColSize(0), + depth(0), + groupCount(0), + batchSize(0) +{ + // Nothing to do here. +} + +template +ChannelShuffle:: +ChannelShuffle( + const size_t inRowSize, + const size_t inColSize, + const size_t depth, + const size_t groupCount): + inRowSize(inRowSize), + inColSize(inColSize), + depth(depth), + groupCount(groupCount), + batchSize(0) +{ + if (depth % groupCount != 0) + { + Log::Fatal << "Number of channels must be divisible by groupCount!" << std::endl; + } +} + +template +template +void ChannelShuffle::Forward( + const arma::Mat& input, arma::Mat& output) +{ + batchSize = input.n_cols; + + if (output.is_empty()) + output.set_size(inRowSize * inColSize * depth, batchSize); + else + { + assert(output.n_rows == inRowSize * inColSize * depth); + assert(output.n_cols == batchSize); + } + + arma::cube inputAsCube(const_cast&>(input).memptr(), + inRowSize, inColSize, depth * batchSize, false, false); + arma::cube outputAsCube(output.memptr(), inRowSize, inColSize, + depth * batchSize, false, true); + + const size_t groupSize= depth / groupCount; + size_t outChannelIdx = 0; + for (size_t k = 0; k < batchSize; ++k) + { + for (size_t i = 0; i < groupSize; ++i) + { + for (size_t g = 0; g < groupCount; ++g, ++outChannelIdx) + { + size_t inChannelIdx = k * batchSize + g * groupSize + i; + outputAsCube.slice(outChannelIdx) = inputAsCube.slice(inChannelIdx); + } + } + } +} + +template +template +void ChannelShuffle::Backward( + const arma::Mat& /*input*/, + const arma::Mat& gradient, + arma::Mat& output) +{ + if (output.is_empty()) + output.set_size(inRowSize * inColSize * depth, batchSize); + else + { + assert(output.n_rows == inRowSize * inColSize * depth); + assert(output.n_cols == batchSize); + } + + arma::cube gradientAsCube(((arma::Mat&) gradient).memptr(), inColSize, + inColSize, depth * batchSize, false, false); + arma::cube outputAsCube(output.memptr(), inRowSize, inColSize, + depth * batchSize, false, true); + + const size_t groupSize= depth / groupCount; + size_t gradientChannelIdx = 0; + for (size_t k = 0; k < batchSize; ++k) + { + for (size_t i = 0; i < groupSize; ++i) + { + for (size_t g = 0; g < groupCount; ++g, ++gradientChannelIdx) + { + size_t outChannelIdx = k * batchSize + g * groupSize + i; + outputAsCube.slice(outChannelIdx) = gradientAsCube.slice(gradientChannelIdx); + } + } + } + +} + +template +template +void ChannelShuffle::serialize( + Archive& ar, const uint32_t /* version */) +{ + ar(CEREAL_NVP(inRowSize)); + ar(CEREAL_NVP(inColSize)); + ar(CEREAL_NVP(depth)); +} + +} // namespace ann +} // namespace mlpack + +#endif diff --git a/src/mlpack/methods/ann/layer/layer_types.hpp b/src/mlpack/methods/ann/layer/layer_types.hpp index 2532efecfe..e3c97f0d08 100644 --- a/src/mlpack/methods/ann/layer/layer_types.hpp +++ b/src/mlpack/methods/ann/layer/layer_types.hpp @@ -20,6 +20,7 @@ #include #include #include +#include #include #include #include @@ -221,9 +222,11 @@ template *, Linear3D*, LpPooling*, PixelShuffle*, + ChannelShuffle*, Glimpse*, Highway*, MultiheadAttention*, @@ -232,8 +235,7 @@ using MoreTypes = boost::variant< ReinforceNormal*, Reparametrization*, Select*, - Sequential*, - Sequential*, + SpatialDropout*, Subview*, VRClassReward*, VirtualBatchNorm*, @@ -275,7 +277,6 @@ using LayerTypes = boost::variant< Dropout*, ELU*, FastLSTM*, - FlexibleReLU*, GRU*, HardTanH*, Join*, @@ -295,8 +296,9 @@ using LayerTypes = boost::variant< NoisyLinear*, Padding*, PReLU*, + Sequential*, + Sequential*, Softmax*, - SpatialDropout*, TransposedConvolution, NaiveConvolution, NaiveConvolution, arma::mat, arma::mat>*, diff --git a/src/mlpack/methods/ann/layer/lp_pooling.hpp b/src/mlpack/methods/ann/layer/lp_pooling.hpp index 1c2b841e24..ef8a12f2f8 100644 --- a/src/mlpack/methods/ann/layer/lp_pooling.hpp +++ b/src/mlpack/methods/ann/layer/lp_pooling.hpp @@ -161,12 +161,22 @@ class LpPooling template void Pooling(const arma::Mat& input, arma::Mat& output) { + arma::Mat inputPre = input; + inputPre = arma::pow(inputPre, normType); + + for (size_t i = 1; i < input.n_cols; ++i) + inputPre.col(i) += inputPre.col(i - 1); + + for (size_t i = 1; i < input.n_rows; ++i) + inputPre.row(i) += inputPre.row(i - 1); + for (size_t j = 0, colidx = 0; j < output.n_cols; ++j, colidx += strideHeight) { for (size_t i = 0, rowidx = 0; i < output.n_rows; ++i, rowidx += strideWidth) { + double val = 0.0; size_t rowEnd = rowidx + kernelWidth - 1; size_t colEnd = colidx + kernelHeight - 1; @@ -175,14 +185,22 @@ class LpPooling if (colEnd > input.n_cols - 1) colEnd = input.n_cols - 1; - arma::mat subInput = input( - arma::span(rowidx, rowEnd), - arma::span(colidx, colEnd)); + val += inputPre(rowEnd, colEnd); + if (rowidx >= 1) + { + if (colidx >= 1) + val += inputPre(rowidx - 1, colidx - 1); + val -= inputPre(rowidx - 1, colEnd); + } - output(i, j) = pow(arma::accu(arma::pow(subInput, - normType)), 1.0 / normType); + if (colidx >= 1) + val -= inputPre(rowEnd, colidx - 1); + + output(i, j) = val; } } + + output = arma::pow(output, 1.0 / normType); } /** diff --git a/src/mlpack/methods/ann/layer/mean_pooling.hpp b/src/mlpack/methods/ann/layer/mean_pooling.hpp index afba6470c7..4156667beb 100644 --- a/src/mlpack/methods/ann/layer/mean_pooling.hpp +++ b/src/mlpack/methods/ann/layer/mean_pooling.hpp @@ -210,38 +210,139 @@ class MeanPooling const arma::Mat& error, arma::Mat& output) { - arma::Mat unpooledError; - for (size_t j = 0, colidx = 0; j < input.n_cols; j += strideHeight, - colidx++) + // This condition comes by comparing the number of operations involved in the brute + // force method and the prefix method. Let the area of error be errorArea and area + // of kernal be kernalArea. Total number of operations in brute force method will be + // `errorArea * kernalArea` and for each element in error we are doing `kernalArea` + // number of operations. Whereas in the prefix method the total number of operations + // will be `4 * errorArea + 2 * inputArea`. The term `2 * inputArea` comes from + // prefix sums performed (col-wise and row-wise). + // We can use this to determine which method to use. + const bool condition = (error.n_elem * kernelHeight * kernelWidth) > + (4 * error.n_elem + 2 * input.n_elem); + + if (condition) { - for (size_t i = 0, rowidx = 0; i < input.n_rows; i += strideWidth, - rowidx++) + // If this condition is true then theoritically the prefix sum method of + // unpooling is faster. The aim of unpooling is to add + // `error(i, j) / kernalArea` to `inputArea(kernal)`. This requires + // `inputArea.n_elem` additions. So, total operations required will be + // `error.n_elem * inputArea.n_elem` operations. + // To improve this method we will use an idea of prefix sums. Let's see + // this method in 1-D matrix then we will extend it to 2-D matrix. + // Let the input be a 1-D matrix input = `[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]` of size 10 + // and we want to add `10` to idx = 1 to idx = 5. In brute force method we can run + // a loop from idx = 1 to idx = 5 and add `10` to each element. In prefix method + // We will add `+10` to idx = 1 and `-10` to idx = (5 + 1). Now the input will look + // like `[0, +10, 0, 0, 0, 0, -10, 0, 0, 0]`. After that we can just do prefix + // sum `input[i] += input[i - 1]`. Then the input becomes + // `[0, +10, +10, +10, +10, +10, 0, 0, 0, 0]`. So the total computation require + // by this method is (2 additions + Prefix operations). + // Note that if there are `k` such operation of adding a number of some + // continuous subarray. Then the brute force method will require + // `k * size(subarray)` operations. But the prefix method will require + // `2 * k + Prefix` operations, because the Prefix can be performed once at + // the end. + // Now for 2-D matrix. Lets say we want to add `e` to all elements from + // input(x1 : x2, y1 : y2). So the inputArea = (x2 - x1 + 1) * (y2 - y1 + 1). + // In prefix method the following operations will be performed: + // 1. Add `+e` to input(x1, y1). + // 2. Add `-e` to input(x1 + 1, y1). + // 3. Add `-e` to input(x1, y1 + 1). + // 4. Add `+e` to input(x1 + 1, y1 + 1). + // 5. Perform Prefix sum over columns i.e input(i, j) += input(i, j - 1) + // 6. Perform Prefix sum over rows i.e input(i, j) += input(i - 1, j) + // So lets say if we had `k` number of such operations. The brute force + // method will require `kernalArea * k` operations. + // The prefix method will require `4 * k + Prefix operation`. + + for (size_t j = 0, colidx = 0; j < input.n_cols; j += strideHeight, ++colidx) { - size_t rowEnd = i + kernelWidth - 1; - size_t colEnd = j + kernelHeight - 1; - - if (rowEnd > input.n_rows - 1) + for (size_t i = 0, rowidx = 0; i < input.n_rows; i += strideWidth, ++rowidx) { - if (floor) - continue; - rowEnd = input.n_rows - 1; - } + // We have to add error(i, j) to output(span(rowidx, rowEnd), span(colidx, colEnd)). + // The steps of prefix sum method: + // + // 1. For each (i, j) perform: + // 1.1 Add +error(i, j) to output(rowidx, colidx) + // 1.2 Add -error(i, j) to output(rowidx, colidx + 1) + // 1.3 Add -error(i, j) to output(rowidx + 1, colidx) + // 1.4 Add +error(i, j) to output(rowidx + 1, colidx + 1) + // + // 2. Do prefix sum column wise i.e output(i, j) += output(i, j - 1) + // 2. Do prefix sum row wise i.e output(i, j) += output(i - 1, j) - if (colEnd > input.n_cols - 1) + size_t rowEnd = i + kernelWidth - 1; + size_t colEnd = j + kernelHeight - 1; + + if (rowEnd > input.n_rows - 1) + { + if (floor) + continue; + rowEnd = input.n_rows - 1; + } + + if (colEnd > input.n_cols - 1) + { + if (floor) + continue; + colEnd = input.n_cols - 1; + } + + size_t kernalArea = (rowEnd - i + 1) * (colEnd - j + 1); + output(i, j) += error(rowidx, colidx) / kernalArea; + + if (rowEnd + 1 < input.n_rows) + { + output(rowEnd + 1, j) -= error(rowidx, colidx) / kernalArea; + + if (colEnd + 1 < input.n_cols) + output(rowEnd + 1, colEnd + 1) += error(rowidx, colidx) / kernalArea; + } + + if (colEnd + 1 < input.n_cols) + output(i, colEnd + 1) -= error(rowidx, colidx) / kernalArea; + } + } + + for (size_t i = 1; i < input.n_rows; ++i) + output.row(i) += output.row(i - 1); + + for (size_t j = 1; j < input.n_cols; ++j) + output.col(j) += output.col(j - 1); + } + else + { + arma::Mat unpooledError; + for (size_t j = 0, colidx = 0; j < input.n_cols; j += strideHeight, ++colidx) + { + for (size_t i = 0, rowidx = 0; i < input.n_rows; i += strideWidth, ++rowidx) { - if (floor) - continue; - colEnd = input.n_cols - 1; + size_t rowEnd = i + kernelWidth - 1; + size_t colEnd = j + kernelHeight - 1; + + if (rowEnd > input.n_rows - 1) + { + if (floor) + continue; + rowEnd = input.n_rows - 1; + } + + if (colEnd > input.n_cols - 1) + { + if (floor) + continue; + colEnd = input.n_cols - 1; + } + + arma::mat InputArea = input(arma::span(i, rowEnd), arma::span(j, colEnd)); + + unpooledError = arma::Mat(InputArea.n_rows, InputArea.n_cols); + unpooledError.fill(error(rowidx, colidx) / InputArea.n_elem); + + output(arma::span(i, i + InputArea.n_rows - 1), + arma::span(j, j + InputArea.n_cols - 1)) += unpooledError; } - - arma::mat InputArea = input(arma::span(i, rowEnd), - arma::span(j, colEnd)); - - unpooledError = arma::Mat(InputArea.n_rows, InputArea.n_cols); - unpooledError.fill(error(rowidx, colidx) / InputArea.n_elem); - - output(arma::span(i, i + InputArea.n_rows - 1), - arma::span(j, j + InputArea.n_cols - 1)) += unpooledError; } } } diff --git a/src/mlpack/methods/ann/layer/padding.hpp b/src/mlpack/methods/ann/layer/padding.hpp index 7d8bf72d0d..b7bfcab976 100644 --- a/src/mlpack/methods/ann/layer/padding.hpp +++ b/src/mlpack/methods/ann/layer/padding.hpp @@ -41,11 +41,15 @@ class Padding * @param padWRight Right padding width of the input. * @param padHTop Top padding height of the input. * @param padHBottom Bottom padding height of the input. + * @param inputWidth Width of the input. + * @param inputHeight Height of the input. */ Padding(const size_t padWLeft = 0, const size_t padWRight = 0, const size_t padHTop = 0, - const size_t padHBottom = 0); + const size_t padHBottom = 0, + const size_t inputWidth = 0, + const size_t inputHeight = 0); /** * Ordinary feed forward pass of a neural network, evaluating the function @@ -101,6 +105,26 @@ class Padding //! Modify the bottom padding width. size_t& PadHBottom() { return padHBottom; } + //! Get the input width. + size_t InputWidth() const { return inputWidth; } + //! Modify the input width. + size_t& InputWidth() { return inputWidth; } + + //! Get the input height. + size_t InputHeight() const { return inputHeight; } + //! Modify the input height. + size_t& InputHeight() { return inputHeight; } + + //! Get the output width. + size_t OutputWidth() const { return outputWidth; } + //! Modify the output width. + size_t& OutputWidth() { return outputWidth; } + + //! Get the output height. + size_t OutputHeight() const { return outputHeight; } + //! Modify the output height. + size_t& OutputHeight() { return outputHeight; } + /** * Serialize the layer. */ @@ -123,6 +147,27 @@ class Padding //! Locally-stored number of rows and columns of input. size_t nRows, nCols; + //! Locally-stored input height. + size_t inputHeight; + + //! Locally-stored input width. + size_t inputWidth; + + //! Locally-stored output height. + size_t outputHeight; + + //! Locally-stored output width. + size_t outputWidth; + + //! Locally-stored number of input channels. + size_t inSize; + + //! Locally-stored cube input parameter. + arma::cube inputTemp; + + //! Locally-stored output parameter. + arma::cube outputTemp; + //! Locally-stored delta object. OutputDataType delta; diff --git a/src/mlpack/methods/ann/layer/padding_impl.hpp b/src/mlpack/methods/ann/layer/padding_impl.hpp index 93936b5e69..73507a5f90 100644 --- a/src/mlpack/methods/ann/layer/padding_impl.hpp +++ b/src/mlpack/methods/ann/layer/padding_impl.hpp @@ -24,13 +24,17 @@ Padding::Padding( const size_t padWLeft, const size_t padWRight, const size_t padHTop, - const size_t padHBottom) : + const size_t padHBottom, + const size_t inputWidth, + const size_t inputHeight) : padWLeft(padWLeft), padWRight(padWRight), padHTop(padHTop), padHBottom(padHBottom), nRows(0), - nCols(0) + nCols(0), + inputHeight(inputWidth), + inputWidth(inputHeight) { // Nothing to do here. } @@ -42,10 +46,33 @@ void Padding::Forward( { nRows = input.n_rows; nCols = input.n_cols; - output = arma::zeros(nRows + padWLeft + padWRight, - nCols + padHTop + padHBottom); - output.submat(padWLeft, padHTop, padWLeft + nRows - 1, - padHTop + nCols - 1) = input; + + if (inputWidth == 0 || inputHeight == 0) + { + output = arma::zeros(nRows + padWLeft + padWRight, + nCols + padHTop + padHBottom); + output.submat(padWLeft, padHTop, padWLeft + nRows - 1, + padHTop + nCols - 1) = input; + } + else + { + inSize = input.n_elem / (inputWidth * inputHeight * nCols); + inputTemp = arma::Cube(const_cast&>(input).memptr(), + inputWidth, inputHeight, inSize * nCols, false, false); + outputTemp = arma::zeros>(inputWidth + padWLeft + padWRight, + inputHeight + padHTop + padHBottom, inSize * nCols); + for (size_t i = 0; i < inputTemp.n_slices; ++i) + { + outputTemp.slice(i).submat(padWLeft, padHTop, padWLeft + inputWidth - 1, + padHTop + inputHeight - 1) = inputTemp.slice(i); + } + + output = arma::Mat(outputTemp.memptr(), outputTemp.n_elem / nCols, + nCols); + } + + outputWidth = inputWidth + padWLeft + padWRight; + outputHeight = inputHeight + padHTop + padHBottom; } template @@ -68,6 +95,8 @@ void Padding::serialize( ar(CEREAL_NVP(padWRight)); ar(CEREAL_NVP(padHTop)); ar(CEREAL_NVP(padHBottom)); + ar(CEREAL_NVP(inputWidth)); + ar(CEREAL_NVP(inputHeight)); } } // namespace ann diff --git a/src/mlpack/methods/ann/layer/virtual_batch_norm_impl.hpp b/src/mlpack/methods/ann/layer/virtual_batch_norm_impl.hpp index 7bd20415a2..112c625b9b 100644 --- a/src/mlpack/methods/ann/layer/virtual_batch_norm_impl.hpp +++ b/src/mlpack/methods/ann/layer/virtual_batch_norm_impl.hpp @@ -142,7 +142,7 @@ void VirtualBatchNorm::serialize( if (cereal::is_loading()) { weights.set_size(size + size, 1); - loading = false; + loading = true; } ar(CEREAL_NVP(eps)); diff --git a/src/mlpack/methods/reinforcement_learning/q_learning.hpp b/src/mlpack/methods/reinforcement_learning/q_learning.hpp index afbdcff33e..3e03bb8c40 100644 --- a/src/mlpack/methods/reinforcement_learning/q_learning.hpp +++ b/src/mlpack/methods/reinforcement_learning/q_learning.hpp @@ -14,6 +14,7 @@ #define MLPACK_METHODS_RL_Q_LEARNING_HPP #include +#include #include "replay/random_replay.hpp" #include "replay/prioritized_replay.hpp" diff --git a/src/mlpack/methods/reinforcement_learning/sac.hpp b/src/mlpack/methods/reinforcement_learning/sac.hpp index f0431185f8..27ddb5cba0 100644 --- a/src/mlpack/methods/reinforcement_learning/sac.hpp +++ b/src/mlpack/methods/reinforcement_learning/sac.hpp @@ -14,6 +14,7 @@ #define MLPACK_METHODS_RL_SAC_HPP #include +#include #include "replay/random_replay.hpp" #include diff --git a/src/mlpack/methods/reinforcement_learning/worker/n_step_q_learning_worker.hpp b/src/mlpack/methods/reinforcement_learning/worker/n_step_q_learning_worker.hpp index b332752d64..4b052ec892 100644 --- a/src/mlpack/methods/reinforcement_learning/worker/n_step_q_learning_worker.hpp +++ b/src/mlpack/methods/reinforcement_learning/worker/n_step_q_learning_worker.hpp @@ -13,6 +13,7 @@ #ifndef MLPACK_METHODS_RL_WORKER_N_STEP_Q_LEARNING_WORKER_HPP #define MLPACK_METHODS_RL_WORKER_N_STEP_Q_LEARNING_WORKER_HPP +#include #include namespace mlpack { diff --git a/src/mlpack/methods/reinforcement_learning/worker/one_step_q_learning_worker.hpp b/src/mlpack/methods/reinforcement_learning/worker/one_step_q_learning_worker.hpp index a85d7cb13a..6916e22185 100644 --- a/src/mlpack/methods/reinforcement_learning/worker/one_step_q_learning_worker.hpp +++ b/src/mlpack/methods/reinforcement_learning/worker/one_step_q_learning_worker.hpp @@ -13,6 +13,7 @@ #ifndef MLPACK_METHODS_RL_WORKER_ONE_STEP_Q_LEARNING_WORKER_HPP #define MLPACK_METHODS_RL_WORKER_ONE_STEP_Q_LEARNING_WORKER_HPP +#include #include namespace mlpack { diff --git a/src/mlpack/methods/reinforcement_learning/worker/one_step_sarsa_worker.hpp b/src/mlpack/methods/reinforcement_learning/worker/one_step_sarsa_worker.hpp index 95451d30d4..1b114a1bde 100644 --- a/src/mlpack/methods/reinforcement_learning/worker/one_step_sarsa_worker.hpp +++ b/src/mlpack/methods/reinforcement_learning/worker/one_step_sarsa_worker.hpp @@ -13,6 +13,7 @@ #ifndef MLPACK_METHODS_RL_WORKER_ONE_STEP_SARSA_WORKER_HPP #define MLPACK_METHODS_RL_WORKER_ONE_STEP_SARSA_WORKER_HPP +#include #include namespace mlpack { diff --git a/src/mlpack/tests/ann_layer_test.cpp b/src/mlpack/tests/ann_layer_test.cpp index 1d94b16560..cbc01b35a8 100644 --- a/src/mlpack/tests/ann_layer_test.cpp +++ b/src/mlpack/tests/ann_layer_test.cpp @@ -697,7 +697,7 @@ TEST_CASE("SimpleLinearNoBiasLayerTest", "[ANNLayerTest]") */ TEST_CASE("SimplePaddingLayerTest", "[ANNLayerTest]") { - arma::mat output, input, delta; + arma::mat output, input, delta, input1, output1; Padding<> module(1, 2, 3, 4); // Test the Forward function. @@ -710,6 +710,26 @@ TEST_CASE("SimplePaddingLayerTest", "[ANNLayerTest]") // Test the Backward function. module.Backward(input, output, delta); CheckMatrices(delta, input); + + // Test forward function for multiple filters. + // Here it's 3 filters with height = 224, width = 224 + // the output should be [226 * 226 * 3, 1] with 1 padding. + Padding<> module1(1, 1, 1, 1, 224, 224); + input1 = arma::randu(224 * 224 * 3, 1); + module1.Forward(input1, output1); + REQUIRE(arma::accu(input1) == arma::accu(output1)); + REQUIRE(output1.n_rows == (226 * 226 * 3)); + REQUIRE(output1.n_cols == 1); + + // Test forward function for multiple batches with multiple filters. + // Here it's 3 filters with height = 244, width = 244 + // the output should be [246 * 246 * 3, 3] with 1 padding. + Padding<> module2(1, 1, 1, 1, 244, 244); + input1 = arma::randu(244 * 244 * 3, 3); + module2.Forward(input1, output1); + REQUIRE(arma::accu(input1) == arma::accu(output1)); + REQUIRE(output1.n_rows == (246 * 246 * 3)); + REQUIRE(output1.n_cols == 3); } /** @@ -4656,6 +4676,51 @@ TEST_CASE("TransposedConvolutionWeightInitializationTest", "[ANNLayerTest]") == (outSize * inSize * kernelWidth * kernelHeight) + outSize); } +/** + * Simple Test for ChannelShuffle layer. + */ +TEST_CASE("ChannelShuffleLayerTest", "[ANNLayerTest]") +{ + arma::mat input1, output1, outputExpected1, outputBackward1; + ChannelShuffle<> module1(2, 2, 6, 2); + + input1 << 1 << 13 << arma::endr + << 2 << 14 << arma::endr + << 3 << 15 << arma::endr + << 4 << 16 << arma::endr + << 5 << 17 << arma::endr + << 6 << 18 << arma::endr + << 7 << 19 << arma::endr + << 8 << 20 << arma::endr + << 9 << 21 << arma::endr + << 10 << 22 << arma::endr + << 11 << 23 << arma::endr + << 12 << 24 << arma::endr; + input1.reshape(24, 1); + // Value calculated using torch.nn.ChannelShuffle(). + outputExpected1 << 1 << 17 << arma::endr + << 2 << 18 << arma::endr + << 3 << 19 << arma::endr + << 4 << 20 << arma::endr + << 13 << 9 << arma::endr + << 14 << 10 << arma::endr + << 15 << 11 << arma::endr + << 16 << 12 << arma::endr + << 5 << 21 << arma::endr + << 6 << 22 << arma::endr + << 7 << 23 << arma::endr + << 8 << 24 << arma::endr; + outputExpected1.reshape(24, 1); + // Check the Forward pass of the layer. + module1.Forward(input1, output1); + CheckMatrices(output1, outputExpected1); + + // Check the Backward pass of the layer. + module1.Backward(output1, output1, outputBackward1); + CheckMatrices(input1, outputBackward1); + +} + /** * Simple Test for PixelShuffle layer. */