[mlpack-git] master: Merge branch 'master' into bindings (e9b2c50)
gitdub at mlpack.org
gitdub at mlpack.org
Tue Nov 1 11:54:59 EDT 2016
Repository : https://github.com/mlpack/mlpack
On branch : master
Link : https://github.com/mlpack/mlpack/compare/981ffa2d67d8fe38df6c699589005835fef710ea...04551164d9950dbdb3738f0c9d87e2d498fd8192
>---------------------------------------------------------------
commit e9b2c50d7b6673a914c1e2a62a5dafb6b7a74110
Merge: eb5b750 3d3d733
Author: Ryan Curtin <ryan at ratml.org>
Date: Tue Nov 1 11:54:59 2016 -0400
Merge branch 'master' into bindings
>---------------------------------------------------------------
e9b2c50d7b6673a914c1e2a62a5dafb6b7a74110
CMake/GeneratePkgConfig.cmake | 28 +
CMake/ModifyMatlabPathdef.cmake | 25 -
CMake/mlpack.pc.in | 11 +
CMake/mlpack_coverage.in | 2 +
CMakeLists.txt | 143 ++-
COPYRIGHT.txt | 1 +
HISTORY.md | 13 +-
README.md | 6 +-
doc/guide/build.hpp | 25 +-
doc/guide/sample.hpp | 4 +-
doc/policies/trees.hpp | 2 +-
doc/tutorials/approx_kfn/approx_kfn.txt | 1025 ++++++++++++++++++++
.../linear_regression/linear_regression.txt | 2 +-
doc/tutorials/range_search/range_search.txt | 2 +-
doc/tutorials/tutorials.txt | 1 +
src/mlpack/CMakeLists.txt | 24 +-
src/mlpack/core.hpp | 7 +
src/mlpack/core/data/binarize.hpp | 5 +
src/mlpack/core/data/dataset_mapper.hpp | 5 +
src/mlpack/core/data/dataset_mapper_impl.hpp | 5 +
src/mlpack/core/data/extension.hpp | 5 +
src/mlpack/core/data/format.hpp | 5 +
.../data/imputation_methods/custom_imputation.hpp | 5 +
.../data/imputation_methods/listwise_deletion.hpp | 5 +
.../data/imputation_methods/mean_imputation.hpp | 5 +
.../data/imputation_methods/median_imputation.hpp | 5 +
src/mlpack/core/data/imputer.hpp | 11 +-
src/mlpack/core/data/load.hpp | 5 +
src/mlpack/core/data/load_arff.hpp | 5 +
src/mlpack/core/data/load_arff_impl.hpp | 5 +
src/mlpack/core/data/load_impl.hpp | 5 +
src/mlpack/core/data/map_policies/datatype.hpp | 5 +
.../core/data/map_policies/increment_policy.hpp | 5 +
.../core/data/map_policies/missing_policy.hpp | 12 +-
src/mlpack/core/data/normalize_labels.hpp | 5 +
src/mlpack/core/data/normalize_labels_impl.hpp | 5 +
src/mlpack/core/data/save.hpp | 5 +
src/mlpack/core/data/save_impl.hpp | 5 +
src/mlpack/core/data/serialization_shim.hpp | 5 +
.../core/data/serialization_template_version.hpp | 5 +
src/mlpack/core/data/split_data.hpp | 5 +
src/mlpack/core/dists/discrete_distribution.cpp | 5 +
src/mlpack/core/dists/discrete_distribution.hpp | 5 +
src/mlpack/core/dists/gamma_distribution.cpp | 5 +
src/mlpack/core/dists/gamma_distribution.hpp | 5 +
src/mlpack/core/dists/gaussian_distribution.cpp | 5 +
src/mlpack/core/dists/gaussian_distribution.hpp | 5 +
src/mlpack/core/dists/laplace_distribution.cpp | 5 +
src/mlpack/core/dists/laplace_distribution.hpp | 5 +
src/mlpack/core/dists/regression_distribution.cpp | 5 +
src/mlpack/core/dists/regression_distribution.hpp | 5 +
src/mlpack/core/kernels/cosine_distance.hpp | 5 +
src/mlpack/core/kernels/cosine_distance_impl.hpp | 5 +
src/mlpack/core/kernels/epanechnikov_kernel.cpp | 5 +
src/mlpack/core/kernels/epanechnikov_kernel.hpp | 5 +
.../core/kernels/epanechnikov_kernel_impl.hpp | 5 +
src/mlpack/core/kernels/example_kernel.hpp | 5 +
src/mlpack/core/kernels/gaussian_kernel.hpp | 5 +
.../core/kernels/hyperbolic_tangent_kernel.hpp | 5 +
src/mlpack/core/kernels/kernel_traits.hpp | 5 +
src/mlpack/core/kernels/laplacian_kernel.hpp | 5 +
src/mlpack/core/kernels/linear_kernel.hpp | 5 +
src/mlpack/core/kernels/polynomial_kernel.hpp | 5 +
.../core/kernels/pspectrum_string_kernel.cpp | 5 +
.../core/kernels/pspectrum_string_kernel.hpp | 5 +
.../core/kernels/pspectrum_string_kernel_impl.hpp | 5 +
src/mlpack/core/kernels/spherical_kernel.hpp | 5 +
src/mlpack/core/kernels/triangular_kernel.hpp | 5 +
src/mlpack/core/math/clamp.hpp | 5 +
src/mlpack/core/math/columns_to_blocks.cpp | 5 +
src/mlpack/core/math/columns_to_blocks.hpp | 5 +
src/mlpack/core/math/lin_alg.cpp | 5 +
src/mlpack/core/math/lin_alg.hpp | 5 +
src/mlpack/core/math/lin_alg_impl.hpp | 5 +
src/mlpack/core/math/random.cpp | 5 +
src/mlpack/core/math/random.hpp | 5 +
src/mlpack/core/math/random_basis.cpp | 5 +
src/mlpack/core/math/random_basis.hpp | 5 +
src/mlpack/core/math/range.hpp | 5 +
src/mlpack/core/math/range_impl.hpp | 5 +
src/mlpack/core/math/round.hpp | 5 +
src/mlpack/core/metrics/ip_metric.hpp | 5 +
src/mlpack/core/metrics/ip_metric_impl.hpp | 5 +
src/mlpack/core/metrics/lmetric.hpp | 5 +
src/mlpack/core/metrics/lmetric_impl.hpp | 5 +
src/mlpack/core/metrics/mahalanobis_distance.hpp | 5 +
.../core/metrics/mahalanobis_distance_impl.hpp | 5 +
src/mlpack/core/optimizers/CMakeLists.txt | 1 +
src/mlpack/core/optimizers/adadelta/ada_delta.hpp | 5 +
.../core/optimizers/adadelta/ada_delta_impl.hpp | 5 +
src/mlpack/core/optimizers/adam/adam.hpp | 5 +
src/mlpack/core/optimizers/adam/adam_impl.hpp | 5 +
.../optimizers/aug_lagrangian/aug_lagrangian.hpp | 5 +
.../aug_lagrangian/aug_lagrangian_function.hpp | 5 +
.../aug_lagrangian_function_impl.hpp | 5 +
.../aug_lagrangian/aug_lagrangian_impl.hpp | 5 +
.../aug_lagrangian_test_functions.cpp | 5 +
.../aug_lagrangian_test_functions.hpp | 5 +
.../{sgd => gradient_descent}/CMakeLists.txt | 4 +-
.../gradient_descent/gradient_descent.hpp | 123 +++
.../gradient_descent/gradient_descent_impl.hpp | 85 ++
.../optimizers/gradient_descent/test_function.cpp | 28 +
.../optimizers/gradient_descent/test_function.hpp | 45 +
src/mlpack/core/optimizers/lbfgs/lbfgs.hpp | 5 +
src/mlpack/core/optimizers/lbfgs/lbfgs_impl.hpp | 5 +
.../core/optimizers/lbfgs/test_functions.cpp | 5 +
.../core/optimizers/lbfgs/test_functions.hpp | 5 +
.../optimizers/minibatch_sgd/minibatch_sgd.hpp | 5 +
.../minibatch_sgd/minibatch_sgd_impl.hpp | 5 +
src/mlpack/core/optimizers/rmsprop/rmsprop.hpp | 5 +
.../core/optimizers/rmsprop/rmsprop_impl.hpp | 5 +
.../core/optimizers/sa/exponential_schedule.hpp | 5 +
src/mlpack/core/optimizers/sa/sa.hpp | 5 +
src/mlpack/core/optimizers/sa/sa_impl.hpp | 5 +
src/mlpack/core/optimizers/sdp/lrsdp.hpp | 5 +
src/mlpack/core/optimizers/sdp/lrsdp_function.hpp | 5 +
.../core/optimizers/sdp/lrsdp_function_impl.hpp | 5 +
src/mlpack/core/optimizers/sdp/lrsdp_impl.hpp | 5 +
src/mlpack/core/optimizers/sdp/primal_dual.hpp | 5 +
.../core/optimizers/sdp/primal_dual_impl.hpp | 5 +
src/mlpack/core/optimizers/sdp/sdp.hpp | 5 +
src/mlpack/core/optimizers/sdp/sdp_impl.hpp | 5 +
src/mlpack/core/optimizers/sgd/sgd.hpp | 5 +
src/mlpack/core/optimizers/sgd/sgd_impl.hpp | 5 +
src/mlpack/core/optimizers/sgd/test_function.cpp | 5 +
src/mlpack/core/optimizers/sgd/test_function.hpp | 5 +
src/mlpack/core/tree/CMakeLists.txt | 10 +-
src/mlpack/core/tree/address.hpp | 5 +
src/mlpack/core/tree/ballbound.hpp | 5 +
src/mlpack/core/tree/ballbound_impl.hpp | 5 +
src/mlpack/core/tree/binary_space_tree.hpp | 5 +
.../tree/binary_space_tree/binary_space_tree.hpp | 25 +-
.../binary_space_tree/binary_space_tree_impl.hpp | 15 +-
.../breadth_first_dual_tree_traverser.hpp | 5 +
.../breadth_first_dual_tree_traverser_impl.hpp | 5 +
.../tree/binary_space_tree/dual_tree_traverser.hpp | 5 +
.../binary_space_tree/dual_tree_traverser_impl.hpp | 5 +
.../core/tree/binary_space_tree/mean_split.hpp | 7 +-
.../tree/binary_space_tree/mean_split_impl.hpp | 5 +
.../core/tree/binary_space_tree/midpoint_split.hpp | 7 +-
.../tree/binary_space_tree/midpoint_split_impl.hpp | 5 +
.../tree/binary_space_tree/rp_tree_max_split.hpp | 7 +-
.../binary_space_tree/rp_tree_max_split_impl.hpp | 5 +
.../tree/binary_space_tree/rp_tree_mean_split.hpp | 7 +-
.../binary_space_tree/rp_tree_mean_split_impl.hpp | 5 +
.../binary_space_tree/single_tree_traverser.hpp | 5 +
.../single_tree_traverser_impl.hpp | 5 +
src/mlpack/core/tree/binary_space_tree/traits.hpp | 7 +-
src/mlpack/core/tree/binary_space_tree/typedef.hpp | 5 +
.../core/tree/binary_space_tree/ub_tree_split.hpp | 5 +
.../tree/binary_space_tree/ub_tree_split_impl.hpp | 5 +
.../tree/binary_space_tree/vantage_point_split.hpp | 7 +-
.../binary_space_tree/vantage_point_split_impl.hpp | 5 +
src/mlpack/core/tree/bound_traits.hpp | 5 +
src/mlpack/core/tree/bounds.hpp | 5 +
src/mlpack/core/tree/cellbound.hpp | 5 +
src/mlpack/core/tree/cellbound_impl.hpp | 5 +
src/mlpack/core/tree/cosine_tree/cosine_tree.cpp | 5 +
src/mlpack/core/tree/cosine_tree/cosine_tree.hpp | 7 +-
src/mlpack/core/tree/cover_tree.hpp | 5 +
src/mlpack/core/tree/cover_tree/cover_tree.hpp | 25 +-
.../core/tree/cover_tree/cover_tree_impl.hpp | 43 +-
.../core/tree/cover_tree/dual_tree_traverser.hpp | 5 +
.../tree/cover_tree/dual_tree_traverser_impl.hpp | 5 +
.../core/tree/cover_tree/first_point_is_root.hpp | 5 +
.../core/tree/cover_tree/single_tree_traverser.hpp | 5 +
.../tree/cover_tree/single_tree_traverser_impl.hpp | 5 +
src/mlpack/core/tree/cover_tree/traits.hpp | 5 +
src/mlpack/core/tree/cover_tree/typedef.hpp | 5 +
src/mlpack/core/tree/example_tree.hpp | 5 +
.../core/tree/greedy_single_tree_traverser.hpp | 5 +
.../tree/greedy_single_tree_traverser_impl.hpp | 5 +
src/mlpack/core/tree/hollow_ball_bound.hpp | 5 +
src/mlpack/core/tree/hollow_ball_bound_impl.hpp | 5 +
src/mlpack/core/tree/hrectbound.hpp | 5 +
src/mlpack/core/tree/hrectbound_impl.hpp | 5 +
src/mlpack/core/tree/octree.hpp | 22 +
.../core/tree/octree/dual_tree_traverser.hpp | 83 ++
.../core/tree/octree/dual_tree_traverser_impl.hpp | 153 +++
src/mlpack/core/tree/octree/octree.hpp | 455 +++++++++
src/mlpack/core/tree/octree/octree_impl.hpp | 912 +++++++++++++++++
.../core/tree/octree/single_tree_traverser.hpp | 58 ++
.../tree/octree/single_tree_traverser_impl.hpp | 72 ++
src/mlpack/core/tree/octree/traits.hpp | 71 ++
.../tree/{binary_space_tree => }/perform_split.hpp | 27 +-
src/mlpack/core/tree/rectangle_tree.hpp | 5 +
.../tree/rectangle_tree/discrete_hilbert_value.hpp | 7 +-
.../rectangle_tree/discrete_hilbert_value_impl.hpp | 7 +-
.../tree/rectangle_tree/dual_tree_traverser.hpp | 19 +-
.../rectangle_tree/dual_tree_traverser_impl.hpp | 19 +-
.../hilbert_r_tree_auxiliary_information.hpp | 7 +-
.../hilbert_r_tree_auxiliary_information_impl.hpp | 5 +
.../hilbert_r_tree_descent_heuristic.hpp | 5 +
.../hilbert_r_tree_descent_heuristic_impl.hpp | 5 +
.../tree/rectangle_tree/hilbert_r_tree_split.hpp | 7 +-
.../rectangle_tree/hilbert_r_tree_split_impl.hpp | 5 +
.../tree/rectangle_tree/minimal_coverage_sweep.hpp | 5 +
.../rectangle_tree/minimal_coverage_sweep_impl.hpp | 5 +
.../rectangle_tree/minimal_splits_number_sweep.hpp | 5 +
.../minimal_splits_number_sweep_impl.hpp | 5 +
.../rectangle_tree/no_auxiliary_information.hpp | 7 +-
.../r_plus_plus_tree_auxiliary_information.hpp | 7 +-
...r_plus_plus_tree_auxiliary_information_impl.hpp | 5 +
.../r_plus_plus_tree_descent_heuristic.hpp | 5 +
.../r_plus_plus_tree_descent_heuristic_impl.hpp | 5 +
.../r_plus_plus_tree_split_policy.hpp | 7 +-
.../r_plus_tree_descent_heuristic.hpp | 5 +
.../r_plus_tree_descent_heuristic_impl.hpp | 5 +
.../core/tree/rectangle_tree/r_plus_tree_split.hpp | 5 +
.../tree/rectangle_tree/r_plus_tree_split_impl.hpp | 5 +
.../rectangle_tree/r_plus_tree_split_policy.hpp | 7 +-
.../r_star_tree_descent_heuristic.hpp | 5 +
.../r_star_tree_descent_heuristic_impl.hpp | 5 +
.../core/tree/rectangle_tree/r_star_tree_split.hpp | 7 +-
.../tree/rectangle_tree/r_star_tree_split_impl.hpp | 5 +
.../rectangle_tree/r_tree_descent_heuristic.hpp | 5 +
.../r_tree_descent_heuristic_impl.hpp | 5 +
.../core/tree/rectangle_tree/r_tree_split.hpp | 7 +-
.../core/tree/rectangle_tree/r_tree_split_impl.hpp | 5 +
.../core/tree/rectangle_tree/rectangle_tree.hpp | 17 +-
.../tree/rectangle_tree/rectangle_tree_impl.hpp | 9 +-
.../tree/rectangle_tree/single_tree_traverser.hpp | 19 +-
.../rectangle_tree/single_tree_traverser_impl.hpp | 19 +-
src/mlpack/core/tree/rectangle_tree/traits.hpp | 5 +
src/mlpack/core/tree/rectangle_tree/typedef.hpp | 5 +
.../x_tree_auxiliary_information.hpp | 13 +-
.../core/tree/rectangle_tree/x_tree_split.hpp | 7 +-
.../core/tree/rectangle_tree/x_tree_split_impl.hpp | 5 +
src/mlpack/core/tree/space_split/hyperplane.hpp | 7 +-
.../core/tree/space_split/mean_space_split.hpp | 5 +
.../tree/space_split/mean_space_split_impl.hpp | 5 +
.../core/tree/space_split/midpoint_space_split.hpp | 5 +
.../tree/space_split/midpoint_space_split_impl.hpp | 5 +
.../core/tree/space_split/projection_vector.hpp | 5 +
src/mlpack/core/tree/space_split/space_split.hpp | 5 +
.../core/tree/space_split/space_split_impl.hpp | 5 +
src/mlpack/core/tree/spill_tree.hpp | 5 +
src/mlpack/core/tree/spill_tree/is_spill_tree.hpp | 5 +
.../tree/spill_tree/spill_dual_tree_traverser.hpp | 5 +
.../spill_tree/spill_dual_tree_traverser_impl.hpp | 5 +
.../spill_tree/spill_single_tree_traverser.hpp | 5 +
.../spill_single_tree_traverser_impl.hpp | 5 +
src/mlpack/core/tree/spill_tree/spill_tree.hpp | 17 +-
.../core/tree/spill_tree/spill_tree_impl.hpp | 5 +
src/mlpack/core/tree/spill_tree/traits.hpp | 5 +
src/mlpack/core/tree/spill_tree/typedef.hpp | 5 +
src/mlpack/core/tree/statistic.hpp | 5 +
src/mlpack/core/tree/traversal_info.hpp | 5 +
src/mlpack/core/tree/tree_traits.hpp | 5 +
src/mlpack/core/util/CMakeLists.txt | 2 +
src/mlpack/core/util/arma_config_check.hpp | 5 +
src/mlpack/core/util/arma_traits.hpp | 5 +
src/mlpack/core/util/backtrace.cpp | 7 +-
src/mlpack/core/util/backtrace.hpp | 7 +-
src/mlpack/core/util/cli.cpp | 7 +-
src/mlpack/core/util/cli.hpp | 41 +
src/mlpack/core/util/cli_deleter.cpp | 5 +
src/mlpack/core/util/cli_deleter.hpp | 10 +-
src/mlpack/core/util/cli_impl.hpp | 23 +
src/mlpack/core/util/deprecated.hpp | 5 +
src/mlpack/core/util/log.cpp | 37 +-
src/mlpack/core/util/log.hpp | 5 +
src/mlpack/core/util/nulloutstream.hpp | 5 +
src/mlpack/core/util/option.cpp | 5 +
src/mlpack/core/util/option.hpp | 5 +
src/mlpack/core/util/option_impl.hpp | 59 ++
src/mlpack/core/util/param.hpp | 5 +
src/mlpack/core/util/prefixedoutstream.cpp | 5 +
src/mlpack/core/util/prefixedoutstream.hpp | 5 +
src/mlpack/core/util/prefixedoutstream_impl.hpp | 5 +
src/mlpack/core/util/sfinae_utility.hpp | 5 +
src/mlpack/core/util/{log.cpp => singletons.cpp} | 48 +-
src/mlpack/core/util/singletons.hpp | 26 +
src/mlpack/core/util/timers.cpp | 5 +
src/mlpack/core/util/timers.hpp | 5 +
src/mlpack/core/util/version.cpp | 5 +
src/mlpack/core/util/version.hpp | 5 +
src/mlpack/methods/CMakeLists.txt | 1 +
src/mlpack/methods/adaboost/adaboost.hpp | 5 +
src/mlpack/methods/adaboost/adaboost_impl.hpp | 5 +
src/mlpack/methods/adaboost/adaboost_main.cpp | 5 +
src/mlpack/methods/amf/amf.hpp | 5 +
src/mlpack/methods/amf/amf_impl.hpp | 5 +
src/mlpack/methods/amf/init_rules/average_init.hpp | 5 +
src/mlpack/methods/amf/init_rules/given_init.hpp | 5 +
.../methods/amf/init_rules/random_acol_init.hpp | 5 +
src/mlpack/methods/amf/init_rules/random_init.hpp | 5 +
.../complete_incremental_termination.hpp | 5 +
.../incomplete_incremental_termination.hpp | 5 +
.../max_iteration_termination.hpp | 5 +
.../simple_residue_termination.hpp | 5 +
.../simple_tolerance_termination.hpp | 5 +
.../validation_RMSE_termination.hpp | 5 +
src/mlpack/methods/amf/update_rules/nmf_als.hpp | 5 +
.../methods/amf/update_rules/nmf_mult_dist.hpp | 5 +
.../methods/amf/update_rules/nmf_mult_div.hpp | 5 +
.../amf/update_rules/svd_batch_learning.hpp | 5 +
.../svd_complete_incremental_learning.hpp | 5 +
.../svd_incomplete_incremental_learning.hpp | 5 +
.../ann/activation_functions/identity_function.hpp | 5 +
.../ann/activation_functions/logistic_function.hpp | 5 +
.../activation_functions/rectifier_function.hpp | 5 +
.../ann/activation_functions/softsign_function.hpp | 5 +
.../ann/activation_functions/tanh_function.hpp | 5 +
src/mlpack/methods/ann/cnn.hpp | 5 +
src/mlpack/methods/ann/cnn_impl.hpp | 5 +
.../methods/ann/convolution_rules/border_modes.hpp | 5 +
.../ann/convolution_rules/fft_convolution.hpp | 5 +
.../ann/convolution_rules/naive_convolution.hpp | 5 +
.../ann/convolution_rules/svd_convolution.hpp | 5 +
src/mlpack/methods/ann/ffn.hpp | 5 +
src/mlpack/methods/ann/ffn_impl.hpp | 5 +
.../kathirvalavakumar_subavathi_init.hpp | 5 +
.../methods/ann/init_rules/nguyen_widrow_init.hpp | 5 +
src/mlpack/methods/ann/init_rules/oivs_init.hpp | 5 +
.../methods/ann/init_rules/orthogonal_init.hpp | 5 +
src/mlpack/methods/ann/init_rules/random_init.hpp | 7 +-
src/mlpack/methods/ann/init_rules/zero_init.hpp | 5 +
src/mlpack/methods/ann/layer/base_layer.hpp | 5 +
src/mlpack/methods/ann/layer/bias_layer.hpp | 5 +
.../ann/layer/binary_classification_layer.hpp | 5 +
src/mlpack/methods/ann/layer/constant_layer.hpp | 5 +
src/mlpack/methods/ann/layer/conv_layer.hpp | 5 +
src/mlpack/methods/ann/layer/dropconnect_layer.hpp | 7 +-
src/mlpack/methods/ann/layer/dropout_layer.hpp | 5 +
src/mlpack/methods/ann/layer/empty_layer.hpp | 5 +
src/mlpack/methods/ann/layer/glimpse_layer.hpp | 5 +
src/mlpack/methods/ann/layer/hard_tanh_layer.hpp | 5 +
src/mlpack/methods/ann/layer/layer_traits.hpp | 5 +
src/mlpack/methods/ann/layer/leaky_relu_layer.hpp | 5 +
src/mlpack/methods/ann/layer/linear_layer.hpp | 5 +
src/mlpack/methods/ann/layer/log_softmax_layer.hpp | 5 +
src/mlpack/methods/ann/layer/lstm_layer.hpp | 5 +
.../ann/layer/multiclass_classification_layer.hpp | 5 +
.../methods/ann/layer/multiply_constant_layer.hpp | 5 +
.../ann/layer/negative_log_likelihood_layer.hpp | 11 +-
src/mlpack/methods/ann/layer/one_hot_layer.hpp | 5 +
src/mlpack/methods/ann/layer/pooling_layer.hpp | 5 +
src/mlpack/methods/ann/layer/recurrent_layer.hpp | 5 +
.../methods/ann/layer/reinforce_normal_layer.hpp | 5 +
src/mlpack/methods/ann/layer/softmax_layer.hpp | 5 +
src/mlpack/methods/ann/layer/sparse_bias_layer.hpp | 5 +
.../methods/ann/layer/sparse_input_layer.hpp | 5 +
.../methods/ann/layer/sparse_output_layer.hpp | 5 +
.../methods/ann/layer/vr_class_reward_layer.hpp | 5 +
src/mlpack/methods/ann/network_traits.hpp | 5 +
src/mlpack/methods/ann/network_util.hpp | 5 +
src/mlpack/methods/ann/network_util_impl.hpp | 5 +
.../ann/performance_functions/cee_function.hpp | 5 +
.../ann/performance_functions/mse_function.hpp | 5 +
.../ann/performance_functions/sparse_function.hpp | 5 +
.../ann/performance_functions/sse_function.hpp | 5 +
.../methods/ann/pooling_rules/max_pooling.hpp | 5 +
.../methods/ann/pooling_rules/mean_pooling.hpp | 5 +
src/mlpack/methods/ann/rnn.hpp | 5 +
src/mlpack/methods/ann/rnn_impl.hpp | 5 +
.../methods/{lsh => approx_kfn}/CMakeLists.txt | 14 +-
src/mlpack/methods/approx_kfn/approx_kfn_main.cpp | 271 ++++++
src/mlpack/methods/approx_kfn/drusilla_select.hpp | 130 +++
.../methods/approx_kfn/drusilla_select_impl.hpp | 218 +++++
src/mlpack/methods/approx_kfn/qdafn.hpp | 118 +++
src/mlpack/methods/approx_kfn/qdafn_impl.hpp | 192 ++++
src/mlpack/methods/approx_kfn/qdafn_main.cpp | 103 ++
src/mlpack/methods/cf/cf.cpp | 5 +
src/mlpack/methods/cf/cf.hpp | 5 +
src/mlpack/methods/cf/cf_impl.hpp | 5 +
src/mlpack/methods/cf/cf_main.cpp | 5 +
src/mlpack/methods/cf/svd_wrapper.hpp | 5 +
src/mlpack/methods/cf/svd_wrapper_impl.hpp | 5 +
.../methods/decision_stump/decision_stump.hpp | 5 +
.../methods/decision_stump/decision_stump_impl.hpp | 5 +
.../methods/decision_stump/decision_stump_main.cpp | 5 +
src/mlpack/methods/det/det_main.cpp | 5 +
src/mlpack/methods/det/dt_utils.cpp | 5 +
src/mlpack/methods/det/dt_utils.hpp | 5 +
src/mlpack/methods/det/dtree.cpp | 5 +
src/mlpack/methods/det/dtree.hpp | 5 +
src/mlpack/methods/emst/dtb.hpp | 5 +
src/mlpack/methods/emst/dtb_impl.hpp | 5 +
src/mlpack/methods/emst/dtb_rules.hpp | 5 +
src/mlpack/methods/emst/dtb_rules_impl.hpp | 7 +-
src/mlpack/methods/emst/dtb_stat.hpp | 5 +
src/mlpack/methods/emst/edge_pair.hpp | 5 +
src/mlpack/methods/emst/emst_main.cpp | 5 +
src/mlpack/methods/emst/union_find.hpp | 5 +
src/mlpack/methods/fastmks/fastmks.hpp | 5 +
src/mlpack/methods/fastmks/fastmks_impl.hpp | 5 +
src/mlpack/methods/fastmks/fastmks_main.cpp | 5 +
src/mlpack/methods/fastmks/fastmks_model.cpp | 5 +
src/mlpack/methods/fastmks/fastmks_model.hpp | 5 +
src/mlpack/methods/fastmks/fastmks_model_impl.hpp | 5 +
src/mlpack/methods/fastmks/fastmks_rules.hpp | 5 +
src/mlpack/methods/fastmks/fastmks_rules_impl.hpp | 5 +
src/mlpack/methods/fastmks/fastmks_stat.hpp | 5 +
src/mlpack/methods/gmm/diagonal_constraint.hpp | 5 +
.../methods/gmm/eigenvalue_ratio_constraint.hpp | 5 +
src/mlpack/methods/gmm/em_fit.hpp | 5 +
src/mlpack/methods/gmm/em_fit_impl.hpp | 5 +
src/mlpack/methods/gmm/gmm.cpp | 5 +
src/mlpack/methods/gmm/gmm.hpp | 5 +
src/mlpack/methods/gmm/gmm_generate_main.cpp | 5 +
src/mlpack/methods/gmm/gmm_impl.hpp | 5 +
src/mlpack/methods/gmm/gmm_probability_main.cpp | 5 +
src/mlpack/methods/gmm/gmm_train_main.cpp | 5 +
src/mlpack/methods/gmm/no_constraint.hpp | 5 +
.../methods/gmm/positive_definite_constraint.hpp | 5 +
src/mlpack/methods/hmm/hmm.hpp | 5 +
src/mlpack/methods/hmm/hmm_generate_main.cpp | 5 +
src/mlpack/methods/hmm/hmm_impl.hpp | 5 +
src/mlpack/methods/hmm/hmm_loglik_main.cpp | 5 +
src/mlpack/methods/hmm/hmm_regression.hpp | 5 +
src/mlpack/methods/hmm/hmm_regression_impl.hpp | 5 +
src/mlpack/methods/hmm/hmm_train_main.cpp | 5 +
src/mlpack/methods/hmm/hmm_util.hpp | 5 +
src/mlpack/methods/hmm/hmm_util_impl.hpp | 5 +
src/mlpack/methods/hmm/hmm_viterbi_main.cpp | 5 +
.../hoeffding_trees/binary_numeric_split.hpp | 5 +
.../hoeffding_trees/binary_numeric_split_impl.hpp | 5 +
.../hoeffding_trees/binary_numeric_split_info.hpp | 5 +
.../hoeffding_trees/categorical_split_info.hpp | 5 +
.../methods/hoeffding_trees/gini_impurity.hpp | 5 +
.../hoeffding_categorical_split.hpp | 5 +
.../hoeffding_categorical_split_impl.hpp | 5 +
.../hoeffding_trees/hoeffding_numeric_split.hpp | 5 +
.../hoeffding_numeric_split_impl.hpp | 5 +
.../methods/hoeffding_trees/hoeffding_tree.hpp | 5 +
.../hoeffding_trees/hoeffding_tree_impl.hpp | 5 +
.../hoeffding_trees/hoeffding_tree_main.cpp | 5 +
.../methods/hoeffding_trees/information_gain.hpp | 5 +
.../methods/hoeffding_trees/numeric_split_info.hpp | 5 +
src/mlpack/methods/hoeffding_trees/typedef.hpp | 5 +
src/mlpack/methods/kernel_pca/kernel_pca.hpp | 5 +
src/mlpack/methods/kernel_pca/kernel_pca_impl.hpp | 5 +
src/mlpack/methods/kernel_pca/kernel_pca_main.cpp | 5 +
.../kernel_pca/kernel_rules/naive_method.hpp | 5 +
.../kernel_pca/kernel_rules/nystroem_method.hpp | 5 +
src/mlpack/methods/kmeans/allow_empty_clusters.hpp | 5 +
src/mlpack/methods/kmeans/dual_tree_kmeans.hpp | 5 +
.../methods/kmeans/dual_tree_kmeans_impl.hpp | 5 +
.../methods/kmeans/dual_tree_kmeans_rules.hpp | 5 +
.../methods/kmeans/dual_tree_kmeans_rules_impl.hpp | 9 +-
.../methods/kmeans/dual_tree_kmeans_statistic.hpp | 5 +
src/mlpack/methods/kmeans/elkan_kmeans.hpp | 5 +
src/mlpack/methods/kmeans/elkan_kmeans_impl.hpp | 5 +
src/mlpack/methods/kmeans/hamerly_kmeans.hpp | 5 +
src/mlpack/methods/kmeans/hamerly_kmeans_impl.hpp | 5 +
src/mlpack/methods/kmeans/kill_empty_clusters.hpp | 5 +
src/mlpack/methods/kmeans/kmeans.hpp | 5 +
src/mlpack/methods/kmeans/kmeans_impl.hpp | 5 +
src/mlpack/methods/kmeans/kmeans_main.cpp | 5 +
.../methods/kmeans/max_variance_new_cluster.hpp | 5 +
.../kmeans/max_variance_new_cluster_impl.hpp | 5 +
src/mlpack/methods/kmeans/naive_kmeans.hpp | 5 +
src/mlpack/methods/kmeans/naive_kmeans_impl.hpp | 5 +
src/mlpack/methods/kmeans/pelleg_moore_kmeans.hpp | 5 +
.../methods/kmeans/pelleg_moore_kmeans_impl.hpp | 5 +
.../methods/kmeans/pelleg_moore_kmeans_rules.hpp | 5 +
.../kmeans/pelleg_moore_kmeans_rules_impl.hpp | 5 +
.../kmeans/pelleg_moore_kmeans_statistic.hpp | 5 +
src/mlpack/methods/kmeans/random_partition.hpp | 5 +
src/mlpack/methods/kmeans/refined_start.hpp | 5 +
src/mlpack/methods/kmeans/refined_start_impl.hpp | 5 +
.../methods/kmeans/sample_initialization.hpp | 5 +
src/mlpack/methods/lars/lars.cpp | 5 +
src/mlpack/methods/lars/lars.hpp | 5 +
src/mlpack/methods/lars/lars_impl.hpp | 5 +
src/mlpack/methods/lars/lars_main.cpp | 5 +
.../linear_regression/linear_regression.cpp | 5 +
.../linear_regression/linear_regression.hpp | 5 +
.../linear_regression/linear_regression_main.cpp | 5 +
src/mlpack/methods/local_coordinate_coding/lcc.cpp | 5 +
src/mlpack/methods/local_coordinate_coding/lcc.hpp | 5 +
.../methods/local_coordinate_coding/lcc_impl.hpp | 5 +
.../local_coordinate_coding_main.cpp | 5 +
.../logistic_regression/logistic_regression.hpp | 5 +
.../logistic_regression_function.hpp | 5 +
.../logistic_regression_function_impl.hpp | 5 +
.../logistic_regression_impl.hpp | 7 +-
.../logistic_regression_main.cpp | 5 +
src/mlpack/methods/lsh/lsh_main.cpp | 5 +
src/mlpack/methods/lsh/lsh_search.hpp | 5 +
src/mlpack/methods/lsh/lsh_search_impl.hpp | 5 +
.../matrix_completion/matrix_completion.cpp | 5 +
.../matrix_completion/matrix_completion.hpp | 5 +
src/mlpack/methods/mean_shift/mean_shift.hpp | 5 +
src/mlpack/methods/mean_shift/mean_shift_impl.hpp | 5 +
src/mlpack/methods/mean_shift/mean_shift_main.cpp | 5 +
src/mlpack/methods/mvu/mvu.cpp | 5 +
src/mlpack/methods/mvu/mvu.hpp | 5 +
src/mlpack/methods/mvu/mvu_main.cpp | 5 +
.../methods/naive_bayes/naive_bayes_classifier.hpp | 7 +-
.../naive_bayes/naive_bayes_classifier_impl.hpp | 5 +
src/mlpack/methods/naive_bayes/nbc_main.cpp | 5 +
src/mlpack/methods/nca/nca.hpp | 5 +
src/mlpack/methods/nca/nca_impl.hpp | 5 +
src/mlpack/methods/nca/nca_main.cpp | 5 +
.../methods/nca/nca_softmax_error_function.hpp | 5 +
.../nca/nca_softmax_error_function_impl.hpp | 5 +
src/mlpack/methods/neighbor_search/kfn_main.cpp | 14 +-
src/mlpack/methods/neighbor_search/knn_main.cpp | 16 +-
.../methods/neighbor_search/neighbor_search.hpp | 5 +
.../neighbor_search/neighbor_search_impl.hpp | 5 +
.../neighbor_search/neighbor_search_rules.hpp | 5 +
.../neighbor_search/neighbor_search_rules_impl.hpp | 5 +
.../neighbor_search/neighbor_search_stat.hpp | 5 +
src/mlpack/methods/neighbor_search/ns_model.hpp | 22 +-
.../methods/neighbor_search/ns_model_impl.hpp | 34 +-
.../sort_policies/furthest_neighbor_sort.hpp | 5 +
.../sort_policies/furthest_neighbor_sort_impl.hpp | 11 +-
.../sort_policies/nearest_neighbor_sort.hpp | 5 +
.../sort_policies/nearest_neighbor_sort_impl.hpp | 11 +-
src/mlpack/methods/neighbor_search/typedef.hpp | 5 +
src/mlpack/methods/neighbor_search/unmap.cpp | 5 +
src/mlpack/methods/neighbor_search/unmap.hpp | 5 +
src/mlpack/methods/nmf/nmf_main.cpp | 5 +
.../methods/nystroem_method/kmeans_selection.hpp | 5 +
.../methods/nystroem_method/nystroem_method.hpp | 5 +
.../nystroem_method/nystroem_method_impl.hpp | 5 +
.../methods/nystroem_method/ordered_selection.hpp | 5 +
.../methods/nystroem_method/random_selection.hpp | 5 +
.../decomposition_policies/exact_svd_method.hpp | 5 +
.../pca/decomposition_policies/quic_svd_method.hpp | 5 +
.../randomized_svd_method.hpp | 5 +
src/mlpack/methods/pca/pca.hpp | 5 +
src/mlpack/methods/pca/pca_impl.hpp | 5 +
src/mlpack/methods/pca/pca_main.cpp | 5 +
.../initialization_methods/random_init.hpp | 5 +
.../initialization_methods/zero_init.hpp | 5 +
.../learning_policies/simple_weight_update.hpp | 5 +
src/mlpack/methods/perceptron/perceptron.hpp | 5 +
src/mlpack/methods/perceptron/perceptron_impl.hpp | 5 +
src/mlpack/methods/perceptron/perceptron_main.cpp | 5 +
.../preprocess/preprocess_binarize_main.cpp | 5 +
.../preprocess/preprocess_describe_main.cpp | 5 +
.../methods/preprocess/preprocess_imputer_main.cpp | 118 ++-
.../methods/preprocess/preprocess_split_main.cpp | 5 +
src/mlpack/methods/quic_svd/quic_svd.cpp | 5 +
src/mlpack/methods/quic_svd/quic_svd.hpp | 5 +
src/mlpack/methods/radical/radical.cpp | 5 +
src/mlpack/methods/radical/radical.hpp | 5 +
src/mlpack/methods/radical/radical_main.cpp | 5 +
.../methods/randomized_svd/randomized_svd.cpp | 24 +-
.../methods/randomized_svd/randomized_svd.hpp | 37 +-
src/mlpack/methods/range_search/range_search.hpp | 5 +
.../methods/range_search/range_search_impl.hpp | 5 +
.../methods/range_search/range_search_main.cpp | 13 +-
.../methods/range_search/range_search_rules.hpp | 5 +
.../range_search/range_search_rules_impl.hpp | 7 +-
.../methods/range_search/range_search_stat.hpp | 5 +
src/mlpack/methods/range_search/rs_model.cpp | 112 ++-
src/mlpack/methods/range_search/rs_model.hpp | 11 +-
src/mlpack/methods/range_search/rs_model_impl.hpp | 19 +
src/mlpack/methods/rann/krann_main.cpp | 16 +-
src/mlpack/methods/rann/ra_model.hpp | 11 +-
src/mlpack/methods/rann/ra_model_impl.hpp | 183 ++--
src/mlpack/methods/rann/ra_query_stat.hpp | 5 +
src/mlpack/methods/rann/ra_search.hpp | 5 +
src/mlpack/methods/rann/ra_search_impl.hpp | 5 +
src/mlpack/methods/rann/ra_search_rules.hpp | 5 +
src/mlpack/methods/rann/ra_search_rules_impl.hpp | 5 +
src/mlpack/methods/rann/ra_typedef.hpp | 5 +
src/mlpack/methods/rann/ra_util.cpp | 5 +
src/mlpack/methods/rann/ra_util.hpp | 5 +
.../methods/regularized_svd/regularized_svd.hpp | 5 +
.../regularized_svd/regularized_svd_function.cpp | 5 +
.../regularized_svd/regularized_svd_function.hpp | 5 +
.../regularized_svd/regularized_svd_impl.hpp | 5 +
src/mlpack/methods/rmva/rmva.hpp | 5 +
src/mlpack/methods/rmva/rmva_impl.hpp | 5 +
src/mlpack/methods/rmva/rmva_main.cpp | 5 +
.../softmax_regression/softmax_regression.hpp | 5 +
.../softmax_regression_function.cpp | 5 +
.../softmax_regression_function.hpp | 5 +
.../softmax_regression/softmax_regression_impl.hpp | 5 +
.../softmax_regression/softmax_regression_main.cpp | 10 +
.../methods/sparse_autoencoder/maximal_inputs.cpp | 5 +
.../methods/sparse_autoencoder/maximal_inputs.hpp | 5 +
.../sparse_autoencoder/sparse_autoencoder.hpp | 5 +
.../sparse_autoencoder_function.cpp | 5 +
.../sparse_autoencoder_function.hpp | 5 +
.../sparse_autoencoder/sparse_autoencoder_impl.hpp | 5 +
.../data_dependent_random_initializer.hpp | 5 +
.../methods/sparse_coding/nothing_initializer.hpp | 5 +
.../methods/sparse_coding/random_initializer.hpp | 5 +
src/mlpack/methods/sparse_coding/sparse_coding.cpp | 5 +
src/mlpack/methods/sparse_coding/sparse_coding.hpp | 5 +
.../methods/sparse_coding/sparse_coding_impl.hpp | 5 +
.../methods/sparse_coding/sparse_coding_main.cpp | 5 +
src/mlpack/prereqs.hpp | 5 +
src/mlpack/tests/CMakeLists.txt | 4 +
src/mlpack/tests/activation_functions_test.cpp | 5 +
src/mlpack/tests/ada_delta_test.cpp | 5 +
src/mlpack/tests/adaboost_test.cpp | 5 +
src/mlpack/tests/adam_test.cpp | 5 +
src/mlpack/tests/akfn_test.cpp | 5 +
src/mlpack/tests/aknn_test.cpp | 5 +
src/mlpack/tests/arma_extend_test.cpp | 5 +
src/mlpack/tests/armadillo_svd_test.cpp | 5 +
src/mlpack/tests/aug_lagrangian_test.cpp | 5 +
src/mlpack/tests/binarize_test.cpp | 5 +
src/mlpack/tests/cf_test.cpp | 5 +
src/mlpack/tests/cli_test.cpp | 66 ++
src/mlpack/tests/convolution_test.cpp | 5 +
src/mlpack/tests/convolutional_network_test.cpp | 5 +
src/mlpack/tests/cosine_tree_test.cpp | 5 +
src/mlpack/tests/decision_stump_test.cpp | 5 +
src/mlpack/tests/det_test.cpp | 5 +
src/mlpack/tests/distribution_test.cpp | 5 +
src/mlpack/tests/drusilla_select_test.cpp | 170 ++++
src/mlpack/tests/emst_test.cpp | 5 +
src/mlpack/tests/fastmks_test.cpp | 5 +
src/mlpack/tests/feedforward_network_test.cpp | 5 +
src/mlpack/tests/gmm_test.cpp | 5 +
src/mlpack/tests/gradient_descent_test.cpp | 57 ++
src/mlpack/tests/hmm_test.cpp | 5 +
src/mlpack/tests/hoeffding_tree_test.cpp | 5 +
src/mlpack/tests/hyperplane_test.cpp | 5 +
src/mlpack/tests/imputation_test.cpp | 18 +-
src/mlpack/tests/ind2sub_test.cpp | 5 +
src/mlpack/tests/init_rules_test.cpp | 5 +
src/mlpack/tests/kernel_pca_test.cpp | 5 +
src/mlpack/tests/kernel_test.cpp | 5 +
src/mlpack/tests/kernel_traits_test.cpp | 5 +
src/mlpack/tests/kfn_test.cpp | 5 +
src/mlpack/tests/kmeans_test.cpp | 5 +
src/mlpack/tests/knn_test.cpp | 17 +-
src/mlpack/tests/krann_search_test.cpp | 11 +-
src/mlpack/tests/lars_test.cpp | 5 +
src/mlpack/tests/layer_traits_test.cpp | 5 +
src/mlpack/tests/lbfgs_test.cpp | 5 +
src/mlpack/tests/lin_alg_test.cpp | 5 +
src/mlpack/tests/linear_regression_test.cpp | 5 +
src/mlpack/tests/load_save_test.cpp | 17 +-
src/mlpack/tests/local_coordinate_coding_test.cpp | 5 +
src/mlpack/tests/log_test.cpp | 5 +
src/mlpack/tests/logistic_regression_test.cpp | 5 +
src/mlpack/tests/lrsdp_test.cpp | 5 +
src/mlpack/tests/lsh_test.cpp | 15 +-
src/mlpack/tests/lstm_peephole_test.cpp | 5 +
src/mlpack/tests/math_test.cpp | 5 +
src/mlpack/tests/matrix_completion_test.cpp | 5 +
src/mlpack/tests/maximal_inputs_test.cpp | 5 +
src/mlpack/tests/mean_shift_test.cpp | 5 +
src/mlpack/tests/metric_test.cpp | 5 +
src/mlpack/tests/minibatch_sgd_test.cpp | 5 +
src/mlpack/tests/mlpack_test.cpp | 5 +
src/mlpack/tests/nbc_test.cpp | 5 +
src/mlpack/tests/nca_test.cpp | 5 +
src/mlpack/tests/network_util_test.cpp | 5 +
src/mlpack/tests/nmf_test.cpp | 5 +
src/mlpack/tests/nystroem_method_test.cpp | 5 +
src/mlpack/tests/octree_test.cpp | 347 +++++++
src/mlpack/tests/pca_test.cpp | 5 +
src/mlpack/tests/perceptron_test.cpp | 5 +
src/mlpack/tests/performance_functions_test.cpp | 5 +
src/mlpack/tests/pooling_rules_test.cpp | 5 +
src/mlpack/tests/qdafn_test.cpp | 211 ++++
src/mlpack/tests/quic_svd_test.cpp | 5 +
src/mlpack/tests/radical_test.cpp | 5 +
src/mlpack/tests/randomized_svd_test.cpp | 5 +
src/mlpack/tests/range_search_test.cpp | 17 +-
src/mlpack/tests/rectangle_tree_test.cpp | 5 +
src/mlpack/tests/recurrent_network_test.cpp | 5 +
src/mlpack/tests/regularized_svd_test.cpp | 5 +
src/mlpack/tests/rmsprop_test.cpp | 5 +
src/mlpack/tests/sa_test.cpp | 14 +-
src/mlpack/tests/sdp_primal_dual_test.cpp | 5 +
src/mlpack/tests/serialization.cpp | 5 +
src/mlpack/tests/serialization.hpp | 5 +
src/mlpack/tests/serialization_test.cpp | 5 +
src/mlpack/tests/sgd_test.cpp | 5 +
src/mlpack/tests/softmax_regression_test.cpp | 5 +
src/mlpack/tests/sort_policy_test.cpp | 5 +
src/mlpack/tests/sparse_autoencoder_test.cpp | 5 +
src/mlpack/tests/sparse_coding_test.cpp | 5 +
src/mlpack/tests/spill_tree_test.cpp | 5 +
src/mlpack/tests/split_data_test.cpp | 5 +
src/mlpack/tests/svd_batch_test.cpp | 5 +
src/mlpack/tests/svd_incremental_test.cpp | 5 +
src/mlpack/tests/termination_policy_test.cpp | 5 +
src/mlpack/tests/test_tools.hpp | 5 +
src/mlpack/tests/tree_test.cpp | 77 +-
src/mlpack/tests/tree_traits_test.cpp | 5 +
src/mlpack/tests/ub_tree_test.cpp | 15 +-
src/mlpack/tests/union_find_test.cpp | 5 +
src/mlpack/tests/vantage_point_tree_test.cpp | 5 +
686 files changed, 9203 insertions(+), 562 deletions(-)
diff --cc src/mlpack/core/util/cli.hpp
index 7c871b5,e55a9ed..c38a01b
--- a/src/mlpack/core/util/cli.hpp
+++ b/src/mlpack/core/util/cli.hpp
@@@ -433,8 -421,51 +438,44 @@@ class CL
*/
CLI();
- /**
- * Initialize desc with a particular name.
- *
- * @param optionsName Name of the module, as far as boost is concerned.
- */
- CLI(const std::string& optionsName);
-
//! Private copy constructor; we don't want copies floating around.
CLI(const CLI& other);
+
+ //! Metaprogramming structure for vector detection.
+ template<typename T>
+ struct IsStdVector { const static bool value = false; };
+
+ //! Metaprogramming structure for vector detection.
+ template<typename eT>
+ struct IsStdVector<std::vector<eT>> { const static bool value = true; };
+
+ /**
+ * Add an option if it is not a vector type. This is a utility function used
+ * by CLI::Add.
+ *
+ * @tparam Type of parameter.
+ * @param optId Name of parameter.
+ * @param descr Description.
+ */
+ template<typename T>
+ void AddOption(
+ const char* optId,
+ const char* descr,
+ const typename boost::disable_if<IsStdVector<T>>::type* /* junk */ = 0);
+
+ /**
+ * Add an option if it is a vector type. This is a utility function used by
+ * CLI::Add.
+ *
+ * @tparam Type of parameter.
+ * @param optId Name of parameter.
+ * @param descr Description.
+ */
+ template<typename T>
+ void AddOption(
+ const char* optId,
+ const char* descr,
+ const typename boost::enable_if<IsStdVector<T>>::type* /* junk */ = 0);
};
} // namespace mlpack
diff --cc src/mlpack/core/util/cli_impl.hpp
index 37c8dae,d235d1c..6ae9c1c
--- a/src/mlpack/core/util/cli_impl.hpp
+++ b/src/mlpack/core/util/cli_impl.hpp
@@@ -160,116 -121,52 +165,134 @@@ void CLI::Add(const T& defaultValue
template<typename T>
T& CLI::GetParam(const std::string& identifier)
{
- // Used to ensure we have a valid value.
- T tmp = T();
+ // Only use the alias if the parameter does not exist as given.
+ std::string key =
+ (GetSingleton().parameters.count(identifier) == 0 &&
+ identifier.length() == 1 && GetSingleton().aliases.count(identifier[0]))
+ ? GetSingleton().aliases[identifier[0]] : identifier;
+
+ if (GetSingleton().parameters.count(key) == 0)
+ Log::Fatal << "Parameter --" << key << " does not exist in this program!"
+ << std::endl;
- // Used to index into the globalValues map.
- std::string key = std::string(identifier);
- gmap_t& gmap = GetSingleton().globalValues;
+ util::ParamData& d = GetSingleton().parameters[key];
- // Now check if we have an alias.
- amap_t& amap = GetSingleton().aliasValues;
- if (amap.count(key))
- key = amap[key];
+ // Make sure the types are correct.
+ if (TYPENAME(T) != d.tname)
+ Log::Fatal << "Attempted to access parameter --" << key << " as type "
+ << TYPENAME(T) << ", but its true type is " << d.tname << "!"
+ << std::endl;
- // What if we don't actually have any value?
- if (!gmap.count(key))
+ // We already know that required options have been passed, so we have a valid
+ // value to return. Because the parameters held are sometimes different types
+ // than what the user wants, we must pass through a utility function.
+ typename util::ParameterType<T>::type& v =
+ *boost::any_cast<typename util::ParameterType<T>::type>(&d.value);
+ return util::HandleParameter<T>(v, d);
+}
+
+/**
+ * Get the unmapped (i.e. what the user specifies on the command-line) value
+ * of type ParameterType<T>::value found while parsing. You cans et the value
+ * using this reference safely. You should not need to use this function
+ * unless you are doing something tricky (like getting the filename a user
+ * specified for a matrix parameter or something).
+ *
+ * @param identifier The name of the parameter in question.
+ */
+template<typename T>
+typename util::ParameterType<T>::type& CLI::GetUnmappedParam(
+ const std::string& identifier)
+{
+ std::string key =
+ (identifier.length() == 1 && GetSingleton().aliases.count(identifier[0]))
+ ? GetSingleton().aliases[identifier[0]] : identifier;
+
+ if (GetSingleton().parameters.count(key) == 0)
+ Log::Fatal << "Parameter --" << key << " does not exist in this program!"
+ << std::endl;
+
+ util::ParamData& d = GetSingleton().parameters[key];
+
+ // Make sure the types are correct.
+ if (TYPENAME(T) != d.tname)
+ Log::Fatal << "Attempted to access parameter --" << key << " as type "
+ << TYPENAME(T) << ", but its true type is " << d.tname << "!"
+ << std::endl;
+
+ return *boost::any_cast<typename util::ParameterType<T>::type>(&d.value);
+}
+
+
+//! This overload is called when nothing special needs to happen to the name of
+//! the parameter.
+template<typename T>
+std::string util::MapParameterName(
+ const std::string& identifier,
+ const typename boost::disable_if<arma::is_arma_type<T>>::type* /* junk */)
+{
+ return identifier;
+}
+
+//! This overload is called when T == ParameterType<T>::value. An overload for
+//! matrices is in cli.cpp.
+template<typename T>
+T& util::HandleParameter(
+ typename util::ParameterType<T>::type& value,
+ util::ParamData& /* d */,
+ const typename boost::disable_if<arma::is_arma_type<T>>::type* /* junk */)
+{
+ return value;
+}
+
+//! This is called for matrices, which have a different boost name.
+template<typename T>
+std::string util::MapParameterName(
+ const std::string& identifier,
+ const typename boost::enable_if<arma::is_arma_type<T>>::type* /* junk */)
+{
+ return identifier + "_file";
+}
+
+//! This overload is called for matrices, which return a different type.
+template<typename T>
+T& util::HandleParameter(
+ typename util::ParameterType<T>::type& value,
+ util::ParamData& d,
+ const typename boost::enable_if<arma::is_arma_type<T>>::type* /* junk */)
+{
+ // 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
+ // times, but I am not bothered by that---it shouldn't be something that
+ // happens.
+ T& matrix = *boost::any_cast<T>(&d.mappedValue);
+ if (d.input && !d.loaded)
{
- gmap[key] = ParamData();
- gmap[key].value = boost::any(tmp);
- *boost::any_cast<T>(&gmap[key].value) = tmp;
+ data::Load(value, matrix, true, !d.noTranspose);
+ d.loaded = true;
}
- // What if we have meta-data, but no data?
- boost::any val = gmap[key].value;
- if (val.empty())
- gmap[key].value = boost::any(tmp);
-
- return *boost::any_cast<T>(&gmap[key].value);
+ return matrix;
}
+ template<typename T>
+ void CLI::AddOption(
+ const char* optId,
+ const char* descr,
+ const typename boost::disable_if<IsStdVector<T>>::type* /* junk */)
+ {
+ desc.add_options()(optId, po::value<T>(), descr);
+ }
+
+ template<typename T>
+ void CLI::AddOption(
+ const char* optId,
+ const char* descr,
+ const typename boost::enable_if<IsStdVector<T>>::type* /* junk */)
+ {
+ desc.add_options()(optId, po::value<T>()->multitoken(), descr);
+ }
+
} // namespace mlpack
#endif
diff --cc src/mlpack/methods/mean_shift/mean_shift_main.cpp
index 6e20559,270b68d..e88ea9c
--- a/src/mlpack/methods/mean_shift/mean_shift_main.cpp
+++ b/src/mlpack/methods/mean_shift/mean_shift_main.cpp
@@@ -2,8 -2,14 +2,13 @@@
* @file mean_shift_main.cpp
* @author Shangtong Zhang
*
- * Executable for running Mean Shift
+ * Executable for running Mean Shift.
+ *
+ * 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.
*/
-
#include <mlpack/core.hpp>
#include <mlpack/core/kernels/gaussian_kernel.hpp>
#include "mean_shift.hpp"
More information about the mlpack-git
mailing list