forked from mlpack/mlpack
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
4978424
commit 75fa69f
Showing
31 changed files
with
761 additions
and
115 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
/** | ||
* @file bindings/R/get_param.hpp | ||
* @author Yashwant Singh Parihar | ||
* | ||
* Get a parameter for a R binding. | ||
* | ||
* 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_BINDINGS_R_GET_PARAM_HPP | ||
#define MLPACK_BINDINGS_R_GET_PARAM_HPP | ||
|
||
#include <mlpack/prereqs.hpp> | ||
|
||
namespace mlpack { | ||
namespace bindings { | ||
namespace r { | ||
|
||
/** | ||
* All R binding types are exactly what is held in the ParamData, so no | ||
* special handling is necessary. | ||
*/ | ||
template<typename T> | ||
void GetParam(const util::ParamData& d, | ||
const void* /* input */, | ||
void* output) | ||
{ | ||
*((T**) output) = const_cast<T*>(boost::any_cast<T>(&d.value)); | ||
} | ||
|
||
} // namespace r | ||
} // namespace bindings | ||
} // namespace mlpack | ||
|
||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,126 @@ | ||
/** | ||
* @file bindings/R/get_printable_param.hpp | ||
* @author Yashwant Singh Parihar | ||
* | ||
* Get a printable version of parameters. | ||
* | ||
* 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_BINDINGS_R_GET_PRINTABLE_PARAM_HPP | ||
#define MLPACK_BINDINGS_R_GET_PRINTABLE_PARAM_HPP | ||
|
||
#include <mlpack/prereqs.hpp> | ||
#include <mlpack/core/util/is_std_vector.hpp> | ||
|
||
namespace mlpack { | ||
namespace bindings { | ||
namespace r { | ||
|
||
/** | ||
* Print an option of a simple type. | ||
*/ | ||
template<typename T> | ||
std::string GetPrintableParam( | ||
const util::ParamData& data, | ||
const typename boost::disable_if<arma::is_arma_type<T>>::type* = 0, | ||
const typename boost::disable_if<util::IsStdVector<T>>::type* = 0, | ||
const typename boost::disable_if<data::HasSerialize<T>>::type* = 0, | ||
const typename boost::disable_if<std::is_same<T, | ||
std::tuple<data::DatasetInfo, arma::mat>>>::type* = 0) | ||
{ | ||
std::ostringstream oss; | ||
oss << boost::any_cast<T>(data.value); | ||
return oss.str(); | ||
} | ||
|
||
/** | ||
* Print a vector option, with spaces between it. | ||
*/ | ||
template<typename T> | ||
std::string GetPrintableParam( | ||
const util::ParamData& data, | ||
const typename boost::enable_if<util::IsStdVector<T>>::type* = 0) | ||
{ | ||
const T& t = boost::any_cast<T>(data.value); | ||
|
||
std::ostringstream oss; | ||
for (size_t i = 0; i < t.size(); ++i) | ||
oss << t[i] << " "; | ||
return oss.str(); | ||
} | ||
|
||
/** | ||
* Print a matrix option (this prints its size). | ||
*/ | ||
template<typename T> | ||
std::string GetPrintableParam( | ||
const util::ParamData& data, | ||
const typename boost::enable_if<arma::is_arma_type<T>>::type* = 0) | ||
{ | ||
// Get the matrix. | ||
const T& matrix = boost::any_cast<T>(data.value); | ||
|
||
std::ostringstream oss; | ||
oss << matrix.n_rows << "x" << matrix.n_cols << " matrix"; | ||
return oss.str(); | ||
} | ||
|
||
/** | ||
* Print a serializable class option (this prints the class name). | ||
*/ | ||
template<typename T> | ||
std::string GetPrintableParam( | ||
const util::ParamData& data, | ||
const typename boost::disable_if<arma::is_arma_type<T>>::type* = 0, | ||
const typename boost::enable_if<data::HasSerialize<T>>::type* = 0) | ||
{ | ||
std::ostringstream oss; | ||
oss << data.cppType << " model at " << boost::any_cast<T*>(data.value); | ||
return oss.str(); | ||
} | ||
|
||
/** | ||
* Print a combination DatasetInfo/matrix parameter. | ||
*/ | ||
template<typename T> | ||
std::string GetPrintableParam( | ||
const util::ParamData& data, | ||
const typename boost::enable_if<std::is_same<T, | ||
std::tuple<data::DatasetInfo, arma::mat>>>::type* = 0) | ||
{ | ||
// Get the matrix. | ||
const T& tuple = boost::any_cast<T>(data.value); | ||
const arma::mat& matrix = std::get<1>(tuple); | ||
|
||
std::ostringstream oss; | ||
oss << matrix.n_rows << "x" << matrix.n_cols << " matrix with dimension type " | ||
<< "information"; | ||
return oss.str(); | ||
} | ||
|
||
/** | ||
* Print an option into a std::string. This should print a short, one-line | ||
* representation of the object. The string will be stored in the output | ||
* pointer. | ||
* | ||
* @param data Parameter data struct. | ||
* @param * (input) Unused parameter. | ||
* @param output Output storage for the string. | ||
*/ | ||
template<typename T> | ||
void GetPrintableParam(const util::ParamData& data, | ||
const void* /* input */, | ||
void* output) | ||
{ | ||
*((std::string*) output) = | ||
GetPrintableParam<typename std::remove_pointer<T>::type>(data); | ||
} | ||
|
||
} // namespace r | ||
} // namespace bindings | ||
} // namespace mlpack | ||
|
||
#endif |
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,87 @@ | ||
/** | ||
* @file bindings/R/print_doc.hpp | ||
* @author Yashwant Singh Parihar. | ||
* | ||
* Print documentation for a R binding parameter. | ||
* | ||
* 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_BINDINGS_R_PRINT_DOC_HPP | ||
#define MLPACK_BINDINGS_R_PRINT_DOC_HPP | ||
|
||
#include <mlpack/prereqs.hpp> | ||
#include <mlpack/core/util/hyphenate_string.hpp> | ||
|
||
namespace mlpack { | ||
namespace bindings { | ||
namespace r { | ||
|
||
/** | ||
* Print the docstring documentation for a given parameter. You are responsible | ||
* for setting up the line---this does not handle indentation or anything. This | ||
* is meant to produce a line of documentation describing a single parameter. | ||
* | ||
* The indent parameter (void* input, which should be a pointer to a size_t) | ||
* should be passed to know how much to indent for a new line. | ||
* | ||
* @param d Parameter data struct. | ||
* @param input Pointer to size_t containing indent. | ||
* @param output Unused parameter. | ||
*/ | ||
template<typename T> | ||
void PrintDoc(const util::ParamData& d, | ||
const void* /* input */, | ||
void* output) | ||
{ | ||
|
||
bool out = *((bool*) output); | ||
std::ostringstream oss; | ||
oss << d.name; | ||
if (out) | ||
oss << "}{"; | ||
else | ||
oss << " "; | ||
oss << d.desc; | ||
// Print a default, if possible. | ||
if (!d.required) | ||
{ | ||
if (d.cppType == "std::string" || | ||
d.cppType == "double" || | ||
d.cppType == "int" || | ||
d.cppType == "bool") | ||
{ | ||
oss << " Default value \""; | ||
if (d.cppType == "std::string") | ||
{ | ||
oss << boost::any_cast<std::string>(d.value); | ||
} | ||
else if (d.cppType == "double") | ||
{ | ||
oss << boost::any_cast<double>(d.value); | ||
} | ||
else if (d.cppType == "int") | ||
{ | ||
oss << boost::any_cast<int>(d.value); | ||
} | ||
else if (d.cppType == "bool") | ||
{ | ||
oss << (boost::any_cast<bool>(d.value) ? "TRUE" : "FALSE"); | ||
} | ||
oss << "\"."; | ||
} | ||
} | ||
|
||
if (out) | ||
oss << "}"; | ||
|
||
std::cout << util::HyphenateString(oss.str(), "#' "); | ||
} | ||
|
||
} // namespace r | ||
} // namespace bindings | ||
} // namespace mlpack | ||
|
||
#endif |
Oops, something went wrong.