diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index 8a2540d324..8425e01f6c 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -50,7 +50,7 @@ jobs:
# this is the default but 'sccache' can be selected here
variant: ccache
- - name: Prepare R for Ccache
+ - name: Prepare R for Ccache
run: |
mkdir -p ~/.R
cp -vax .github/etc/R_Makevars_${{ runner.os }} ~/.R/Makevars
@@ -58,7 +58,7 @@ jobs:
- name: Configure Ccache for R
run: |
ccache --set-config "sloppiness=include_file_ctime"
- ccache --set-config "hash_dir=false"
+ ccache --set-config "hash_dir=false"
ccache --show-config
ccache --zero-stats
@@ -98,10 +98,18 @@ jobs:
- name: Install R-bindings dependencies
run: |
remotes::install_deps(dependencies = TRUE)
- remotes::install_cran("roxygen2")
- remotes::install_cran("pkgbuild")
+ remotes::install_cran(c("roxygen2","pkgbuild"))
shell: Rscript {0}
+ # This appears to be needed to work around this issue:
+ # https://github.com/gagolews/stringi/issues/486
+ - name: "Work around stringi libicu issue"
+ if: inputs.lang == 'R' && runner.os == 'Linux'
+ shell: bash
+ run: |
+ wget http://mirrors.kernel.org/ubuntu/pool/main/i/icu/libicu70_70.1-2_amd64.deb
+ sudo dpkg -i libicu70_70.1-2_amd64.deb
+
- name: CMake
run: |
mkdir build
diff --git a/doc/developer/gsoc.md b/doc/developer/gsoc.md
index 5b606ecbbb..1426ce06fd 100644
--- a/doc/developer/gsoc.md
+++ b/doc/developer/gsoc.md
@@ -49,7 +49,7 @@ project. A student should ideally be familiar with
mlpack codebase. Some examples of patterns that are often used inside of
mlpack are SFINAE ([example in mlpack, see std::enable_if usages](https://github.com/mlpack/mlpack/blob/565cfd3aad22deec0656b86e801052593a937723/src/mlpack/methods/mean_shift/mean_shift.hpp)),
[policy-based design](https://www.drdobbs.com/policy-based-design-in-the-real-world/184401861),
- and [compile-time class traits](https://accu.org/index.php/journals/442).
+ and [compile-time class traits](https://accu.org/xaraya/journals/442.html).
Here are some [other useful resources](https://en.wikipedia.org/wiki/Template_metaprogramming)
for learning template metaprogramming, and some useful
[reference books](https://www.aristeia.com/books.html).
diff --git a/doc/quickstart/cli.md b/doc/quickstart/cli.md
index a7bad2dece..072f9f525f 100644
--- a/doc/quickstart/cli.md
+++ b/doc/quickstart/cli.md
@@ -174,7 +174,7 @@ these two examples have only shown a little bit of the functionality of mlpack.
Lots of other commands are available with different functionality. A full list
of commands and full documentation for each can be found on the following page:
- - [CLI program documentation](https://www.mlpack.org/doc/stable/cli_documentation.html)
+ - [CLI program documentation](https://www.mlpack.org/doc/user/bindings/cli.html)
Also, mlpack is much more flexible from C++ and allows much greater
functionality. So, more complicated tasks are possible if you are willing to
diff --git a/doc/user/bindings/cli.md b/doc/user/bindings/cli.md
index fd66b94e06..9ac7574b6d 100644
--- a/doc/user/bindings/cli.md
+++ b/doc/user/bindings/cli.md
@@ -1300,7 +1300,7 @@ $ mlpack_kde --reference_file ref_data.csv --query_file qu_data.csv
- [mlpack_knn](#knn)
- [Kernel density estimation on Wikipedia](https://en.wikipedia.org/wiki/Kernel_density_estimation)
- [Tree-Independent Dual-Tree Algorithms](https://arxiv.org/pdf/1304.4327)
- - [Fast High-dimensional Kernel Summations Using the Monte Carlo Multipole Method](http://papers.nips.cc/paper/3539-fast-high-dimensional-kernel-summations-using-the-monte-carlo-multipole-method.pdf)
+ - [Fast High-dimensional Kernel Summations Using the Monte Carlo Multipole Method](https://proceedings.neurips.cc/paper_files/paper/2008/file/39059724f73a9969845dfe4146c5660e-Paper.pdf)
- [KDE C++ class documentation](https://github.com/mlpack/mlpack/blob/master/src/mlpack/methods/kde/kde.hpp)
## mlpack_kernel_pca
@@ -1766,7 +1766,7 @@ $ mlpack_lmnn --input_file letter_recognition.csv --k 5 --update_interval 10
- [mlpack_nca](#nca)
- [Large margin nearest neighbor on Wikipedia](https://en.wikipedia.org/wiki/Large_margin_nearest_neighbor)
- - [Distance metric learning for large margin nearest neighbor classification (pdf)](http://papers.nips.cc/paper/2795-distance-metric-learning-for-large-margin-nearest-neighbor-classification.pdf)
+ - [Distance metric learning for large margin nearest neighbor classification (pdf)](https://proceedings.neurips.cc/paper_files/paper/2005/file/a7f592cef8b130a6967a90617db5681b-Paper.pdf)
- [LMNN C++ class documentation](../../user/methods/lmnn.md)
## mlpack_local_coordinate_coding
@@ -1848,7 +1848,7 @@ $ mlpack_local_coordinate_coding --input_model_file lcc_model.bin --test_file
### See also
- [mlpack_sparse_coding](#sparse_coding)
- - [Nonlinear learning using local coordinate coding (pdf)](https://papers.nips.cc/paper/3875-nonlinear-learning-using-local-coordinate-coding.pdf)
+ - [Nonlinear learning using local coordinate coding (pdf)](https://proceedings.neurips.cc/paper_files/paper/2009/file/2afe4567e1bf64d32a5527244d104cea-Paper.pdf)
- [LocalCoordinateCoding C++ class documentation](../../user/methods/local_coordinate_coding.md)
## mlpack_logistic_regression
@@ -2238,7 +2238,7 @@ By default, the SGD optimizer is used.
- [mlpack_lmnn](#lmnn)
- [Neighbourhood components analysis on Wikipedia](https://en.wikipedia.org/wiki/Neighbourhood_components_analysis)
- - [Neighbourhood components analysis (pdf)](http://papers.nips.cc/paper/2566-neighbourhood-components-analysis.pdf)
+ - [Neighbourhood components analysis (pdf)](https://proceedings.neurips.cc/paper_files/paper/2004/file/42fe880812925e520249e808937738d2-Paper.pdf)
- [NCA C++ class documentation](../../user/methods/nca.md)
## mlpack_knn
@@ -2464,7 +2464,7 @@ $ mlpack_nmf --input_file V.csv --w_file W.csv --h_file H.csv --rank 10
- [mlpack_cf](#cf)
- [Non-negative matrix factorization on Wikipedia](https://en.wikipedia.org/wiki/Non-negative_matrix_factorization)
- - [Algorithms for non-negative matrix factorization (pdf)](http://papers.nips.cc/paper/1861-algorithms-for-non-negative-matrix-factorization.pdf)
+ - [Algorithms for non-negative matrix factorization (pdf)](https://proceedings.neurips.cc/paper_files/paper/2000/file/f9d1152547c0bde01830b7e8bd60024c-Paper.pdf)
- [NMF C++ class documentation](../../user/methods/nmf.md)
- [AMF C++ class documentation](../../user/methods/amf.md)
@@ -3181,7 +3181,7 @@ The output matrices are organized such that row i and column j in the neighbors
- [mlpack_knn](#knn)
- [mlpack_lsh](#lsh)
- - [Rank-approximate nearest neighbor search: Retaining meaning and speed in high dimensions (pdf)](https://papers.nips.cc/paper/3864-rank-approximate-nearest-neighbor-search-retaining-meaning-and-speed-in-high-dimensions.pdf)
+ - [Rank-approximate nearest neighbor search: Retaining meaning and speed in high dimensions (pdf)](https://proceedings.neurips.cc/paper_files/paper/2009/file/ddb30680a691d157187ee1cf9e896d03-Paper.pdf)
- [RASearch C++ class documentation](https://github.com/mlpack/mlpack/blob/master/src/mlpack/methods/rann/ra_search.hpp)
## mlpack_softmax_regression
@@ -3347,7 +3347,7 @@ $ mlpack_sparse_coding --input_model_file model.bin --test_file otherdata.csv
- [mlpack_local_coordinate_coding](#local_coordinate_coding)
- [Sparse dictionary learning on Wikipedia](https://en.wikipedia.org/wiki/Sparse_dictionary_learning)
- - [Efficient sparse coding algorithms (pdf)](http://papers.nips.cc/paper/2979-efficient-sparse-coding-algorithms.pdf)
+ - [Efficient sparse coding algorithms (pdf)](https://proceedings.neurips.cc/paper_files/paper/2006/file/2d71b2ae158c7c5912cc0bbde2bb9d95-Paper.pdf)
- [Regularization and variable selection via the elastic net](https://citeseerx.ist.psu.edu/document?repid=rep1&type=pdf&doi=46217f372a75dddc2254fdbc6b9418ba3554e453)
- [SparseCoding C++ class documentation](../../user/methods/sparse_coding.md)
diff --git a/doc/user/bindings/cli.sidebar.html b/doc/user/bindings/cli.sidebar.html
index 7b210ca84a..b5c4142ace 100644
--- a/doc/user/bindings/cli.sidebar.html
+++ b/doc/user/bindings/cli.sidebar.html
@@ -9,6 +9,7 @@
Classification
diff --git a/doc/user/bindings/go.md b/doc/user/bindings/go.md
index 73b632ad4c..bdc5f66f27 100644
--- a/doc/user/bindings/go.md
+++ b/doc/user/bindings/go.md
@@ -1591,7 +1591,7 @@ _, out_data := mlpack.Kde(param)
- [Knn()](#knn)
- [Kernel density estimation on Wikipedia](https://en.wikipedia.org/wiki/Kernel_density_estimation)
- [Tree-Independent Dual-Tree Algorithms](https://arxiv.org/pdf/1304.4327)
- - [Fast High-dimensional Kernel Summations Using the Monte Carlo Multipole Method](http://papers.nips.cc/paper/3539-fast-high-dimensional-kernel-summations-using-the-monte-carlo-multipole-method.pdf)
+ - [Fast High-dimensional Kernel Summations Using the Monte Carlo Multipole Method](https://proceedings.neurips.cc/paper_files/paper/2008/file/39059724f73a9969845dfe4146c5660e-Paper.pdf)
- [KDE C++ class documentation](https://github.com/mlpack/mlpack/blob/master/src/mlpack/methods/kde/kde.hpp)
## KernelPca()
@@ -2172,7 +2172,7 @@ _, output, _ := mlpack.Lmnn(letter_recognition, param)
- [Nca()](#nca)
- [Large margin nearest neighbor on Wikipedia](https://en.wikipedia.org/wiki/Large_margin_nearest_neighbor)
- - [Distance metric learning for large margin nearest neighbor classification (pdf)](http://papers.nips.cc/paper/2795-distance-metric-learning-for-large-margin-nearest-neighbor-classification.pdf)
+ - [Distance metric learning for large margin nearest neighbor classification (pdf)](https://proceedings.neurips.cc/paper_files/paper/2005/file/a7f592cef8b130a6967a90617db5681b-Paper.pdf)
- [LMNN C++ class documentation](../../user/methods/lmnn.md)
## LocalCoordinateCoding()
@@ -2276,7 +2276,7 @@ new_codes, _, _ := mlpack.LocalCoordinateCoding(param)
### See also
- [SparseCoding()](#sparse_coding)
- - [Nonlinear learning using local coordinate coding (pdf)](https://papers.nips.cc/paper/3875-nonlinear-learning-using-local-coordinate-coding.pdf)
+ - [Nonlinear learning using local coordinate coding (pdf)](https://proceedings.neurips.cc/paper_files/paper/2009/file/2afe4567e1bf64d32a5527244d104cea-Paper.pdf)
- [LocalCoordinateCoding C++ class documentation](../../user/methods/local_coordinate_coding.md)
## LogisticRegression()
@@ -2757,7 +2757,7 @@ By default, the SGD optimizer is used.
- [Lmnn()](#lmnn)
- [Neighbourhood components analysis on Wikipedia](https://en.wikipedia.org/wiki/Neighbourhood_components_analysis)
- - [Neighbourhood components analysis (pdf)](http://papers.nips.cc/paper/2566-neighbourhood-components-analysis.pdf)
+ - [Neighbourhood components analysis (pdf)](https://proceedings.neurips.cc/paper_files/paper/2004/file/42fe880812925e520249e808937738d2-Paper.pdf)
- [NCA C++ class documentation](../../user/methods/nca.md)
## Knn()
@@ -3035,7 +3035,7 @@ H, W := mlpack.Nmf(V, 10, param)
- [Cf()](#cf)
- [Non-negative matrix factorization on Wikipedia](https://en.wikipedia.org/wiki/Non-negative_matrix_factorization)
- - [Algorithms for non-negative matrix factorization (pdf)](http://papers.nips.cc/paper/1861-algorithms-for-non-negative-matrix-factorization.pdf)
+ - [Algorithms for non-negative matrix factorization (pdf)](https://proceedings.neurips.cc/paper_files/paper/2000/file/f9d1152547c0bde01830b7e8bd60024c-Paper.pdf)
- [NMF C++ class documentation](../../user/methods/nmf.md)
- [AMF C++ class documentation](../../user/methods/amf.md)
@@ -3942,7 +3942,7 @@ The output matrices are organized such that row i and column j in the neighbors
- [Knn()](#knn)
- [Lsh()](#lsh)
- - [Rank-approximate nearest neighbor search: Retaining meaning and speed in high dimensions (pdf)](https://papers.nips.cc/paper/3864-rank-approximate-nearest-neighbor-search-retaining-meaning-and-speed-in-high-dimensions.pdf)
+ - [Rank-approximate nearest neighbor search: Retaining meaning and speed in high dimensions (pdf)](https://proceedings.neurips.cc/paper_files/paper/2009/file/ddb30680a691d157187ee1cf9e896d03-Paper.pdf)
- [RASearch C++ class documentation](https://github.com/mlpack/mlpack/blob/master/src/mlpack/methods/rann/ra_search.hpp)
## SoftmaxRegression()
@@ -4151,7 +4151,7 @@ codes, _, _ := mlpack.SparseCoding(param)
- [LocalCoordinateCoding()](#local_coordinate_coding)
- [Sparse dictionary learning on Wikipedia](https://en.wikipedia.org/wiki/Sparse_dictionary_learning)
- - [Efficient sparse coding algorithms (pdf)](http://papers.nips.cc/paper/2979-efficient-sparse-coding-algorithms.pdf)
+ - [Efficient sparse coding algorithms (pdf)](https://proceedings.neurips.cc/paper_files/paper/2006/file/2d71b2ae158c7c5912cc0bbde2bb9d95-Paper.pdf)
- [Regularization and variable selection via the elastic net](https://citeseerx.ist.psu.edu/document?repid=rep1&type=pdf&doi=46217f372a75dddc2254fdbc6b9418ba3554e453)
- [SparseCoding C++ class documentation](../../user/methods/sparse_coding.md)
diff --git a/doc/user/bindings/go.sidebar.html b/doc/user/bindings/go.sidebar.html
index c9b7fa21f8..5d67be6ee6 100644
--- a/doc/user/bindings/go.sidebar.html
+++ b/doc/user/bindings/go.sidebar.html
@@ -9,6 +9,7 @@
Classification
diff --git a/doc/user/bindings/julia.md b/doc/user/bindings/julia.md
index 4b07cfcaa7..df0af9a89b 100644
--- a/doc/user/bindings/julia.md
+++ b/doc/user/bindings/julia.md
@@ -1308,7 +1308,7 @@ julia> _, out_data = kde(bandwidth=0.2, initial_sample_size=200,
- [knn()](#knn)
- [Kernel density estimation on Wikipedia](https://en.wikipedia.org/wiki/Kernel_density_estimation)
- [Tree-Independent Dual-Tree Algorithms](https://arxiv.org/pdf/1304.4327)
- - [Fast High-dimensional Kernel Summations Using the Monte Carlo Multipole Method](http://papers.nips.cc/paper/3539-fast-high-dimensional-kernel-summations-using-the-monte-carlo-multipole-method.pdf)
+ - [Fast High-dimensional Kernel Summations Using the Monte Carlo Multipole Method](https://proceedings.neurips.cc/paper_files/paper/2008/file/39059724f73a9969845dfe4146c5660e-Paper.pdf)
- [KDE C++ class documentation](https://github.com/mlpack/mlpack/blob/master/src/mlpack/methods/kde/kde.hpp)
## kernel_pca()
@@ -1787,7 +1787,7 @@ julia> _, output, _ = lmnn(letter_recognition; k=5,
- [nca()](#nca)
- [Large margin nearest neighbor on Wikipedia](https://en.wikipedia.org/wiki/Large_margin_nearest_neighbor)
- - [Distance metric learning for large margin nearest neighbor classification (pdf)](http://papers.nips.cc/paper/2795-distance-metric-learning-for-large-margin-nearest-neighbor-classification.pdf)
+ - [Distance metric learning for large margin nearest neighbor classification (pdf)](https://proceedings.neurips.cc/paper_files/paper/2005/file/a7f592cef8b130a6967a90617db5681b-Paper.pdf)
- [LMNN C++ class documentation](../../user/methods/lmnn.md)
## local_coordinate_coding()
@@ -1870,7 +1870,7 @@ julia> new_codes, _, _ =
### See also
- [sparse_coding()](#sparse_coding)
- - [Nonlinear learning using local coordinate coding (pdf)](https://papers.nips.cc/paper/3875-nonlinear-learning-using-local-coordinate-coding.pdf)
+ - [Nonlinear learning using local coordinate coding (pdf)](https://proceedings.neurips.cc/paper_files/paper/2009/file/2afe4567e1bf64d32a5527244d104cea-Paper.pdf)
- [LocalCoordinateCoding C++ class documentation](../../user/methods/local_coordinate_coding.md)
## logistic_regression()
@@ -2259,7 +2259,7 @@ By default, the SGD optimizer is used.
- [lmnn()](#lmnn)
- [Neighbourhood components analysis on Wikipedia](https://en.wikipedia.org/wiki/Neighbourhood_components_analysis)
- - [Neighbourhood components analysis (pdf)](http://papers.nips.cc/paper/2566-neighbourhood-components-analysis.pdf)
+ - [Neighbourhood components analysis (pdf)](https://proceedings.neurips.cc/paper_files/paper/2004/file/42fe880812925e520249e808937738d2-Paper.pdf)
- [NCA C++ class documentation](../../user/methods/nca.md)
## knn()
@@ -2481,7 +2481,7 @@ julia> H, W = nmf(V, 10; update_rules="multdist")
- [cf()](#cf)
- [Non-negative matrix factorization on Wikipedia](https://en.wikipedia.org/wiki/Non-negative_matrix_factorization)
- - [Algorithms for non-negative matrix factorization (pdf)](http://papers.nips.cc/paper/1861-algorithms-for-non-negative-matrix-factorization.pdf)
+ - [Algorithms for non-negative matrix factorization (pdf)](https://proceedings.neurips.cc/paper_files/paper/2000/file/f9d1152547c0bde01830b7e8bd60024c-Paper.pdf)
- [NMF C++ class documentation](../../user/methods/nmf.md)
- [AMF C++ class documentation](../../user/methods/amf.md)
@@ -3214,7 +3214,7 @@ The output matrices are organized such that row i and column j in the neighbors
- [knn()](#knn)
- [lsh()](#lsh)
- - [Rank-approximate nearest neighbor search: Retaining meaning and speed in high dimensions (pdf)](https://papers.nips.cc/paper/3864-rank-approximate-nearest-neighbor-search-retaining-meaning-and-speed-in-high-dimensions.pdf)
+ - [Rank-approximate nearest neighbor search: Retaining meaning and speed in high dimensions (pdf)](https://proceedings.neurips.cc/paper_files/paper/2009/file/ddb30680a691d157187ee1cf9e896d03-Paper.pdf)
- [RASearch C++ class documentation](https://github.com/mlpack/mlpack/blob/master/src/mlpack/methods/rann/ra_search.hpp)
## softmax_regression()
@@ -3384,7 +3384,7 @@ julia> codes, _, _ = sparse_coding(input_model=model,
- [local_coordinate_coding()](#local_coordinate_coding)
- [Sparse dictionary learning on Wikipedia](https://en.wikipedia.org/wiki/Sparse_dictionary_learning)
- - [Efficient sparse coding algorithms (pdf)](http://papers.nips.cc/paper/2979-efficient-sparse-coding-algorithms.pdf)
+ - [Efficient sparse coding algorithms (pdf)](https://proceedings.neurips.cc/paper_files/paper/2006/file/2d71b2ae158c7c5912cc0bbde2bb9d95-Paper.pdf)
- [Regularization and variable selection via the elastic net](https://citeseerx.ist.psu.edu/document?repid=rep1&type=pdf&doi=46217f372a75dddc2254fdbc6b9418ba3554e453)
- [SparseCoding C++ class documentation](../../user/methods/sparse_coding.md)
diff --git a/doc/user/bindings/julia.sidebar.html b/doc/user/bindings/julia.sidebar.html
index e68ac0ae8e..20625cc1c6 100644
--- a/doc/user/bindings/julia.sidebar.html
+++ b/doc/user/bindings/julia.sidebar.html
@@ -9,6 +9,7 @@
Classification
diff --git a/doc/user/bindings/python.md b/doc/user/bindings/python.md
index 2d5adce175..c07ee90533 100644
--- a/doc/user/bindings/python.md
+++ b/doc/user/bindings/python.md
@@ -1327,7 +1327,7 @@ In addition to the last program call, it is also possible to activate Monte Carl
- [knn()](#knn)
- [Kernel density estimation on Wikipedia](https://en.wikipedia.org/wiki/Kernel_density_estimation)
- [Tree-Independent Dual-Tree Algorithms](https://arxiv.org/pdf/1304.4327)
- - [Fast High-dimensional Kernel Summations Using the Monte Carlo Multipole Method](http://papers.nips.cc/paper/3539-fast-high-dimensional-kernel-summations-using-the-monte-carlo-multipole-method.pdf)
+ - [Fast High-dimensional Kernel Summations Using the Monte Carlo Multipole Method](https://proceedings.neurips.cc/paper_files/paper/2008/file/39059724f73a9969845dfe4146c5660e-Paper.pdf)
- [KDE C++ class documentation](https://github.com/mlpack/mlpack/blob/master/src/mlpack/methods/kde/kde.hpp)
## kernel_pca()
@@ -1805,7 +1805,7 @@ Another program call making use of update interval & regularization parameter wi
- [nca()](#nca)
- [Large margin nearest neighbor on Wikipedia](https://en.wikipedia.org/wiki/Large_margin_nearest_neighbor)
- - [Distance metric learning for large margin nearest neighbor classification (pdf)](http://papers.nips.cc/paper/2795-distance-metric-learning-for-large-margin-nearest-neighbor-classification.pdf)
+ - [Distance metric learning for large margin nearest neighbor classification (pdf)](https://proceedings.neurips.cc/paper_files/paper/2005/file/a7f592cef8b130a6967a90617db5681b-Paper.pdf)
- [LMNN C++ class documentation](../../user/methods/lmnn.md)
## local_coordinate_coding()
@@ -1890,7 +1890,7 @@ An LCC model may be saved using the `output_model` output parameter. Then, to e
### See also
- [sparse_coding()](#sparse_coding)
- - [Nonlinear learning using local coordinate coding (pdf)](https://papers.nips.cc/paper/3875-nonlinear-learning-using-local-coordinate-coding.pdf)
+ - [Nonlinear learning using local coordinate coding (pdf)](https://proceedings.neurips.cc/paper_files/paper/2009/file/2afe4567e1bf64d32a5527244d104cea-Paper.pdf)
- [LocalCoordinateCoding C++ class documentation](../../user/methods/local_coordinate_coding.md)
## logistic_regression()
@@ -2290,7 +2290,7 @@ By default, the SGD optimizer is used.
- [lmnn()](#lmnn)
- [Neighbourhood components analysis on Wikipedia](https://en.wikipedia.org/wiki/Neighbourhood_components_analysis)
- - [Neighbourhood components analysis (pdf)](http://papers.nips.cc/paper/2566-neighbourhood-components-analysis.pdf)
+ - [Neighbourhood components analysis (pdf)](https://proceedings.neurips.cc/paper_files/paper/2004/file/42fe880812925e520249e808937738d2-Paper.pdf)
- [NCA C++ class documentation](../../user/methods/nca.md)
## knn()
@@ -2523,7 +2523,7 @@ For example, to run NMF on the input matrix `'V'` using the 'multdist' update ru
- [cf()](#cf)
- [Non-negative matrix factorization on Wikipedia](https://en.wikipedia.org/wiki/Non-negative_matrix_factorization)
- - [Algorithms for non-negative matrix factorization (pdf)](http://papers.nips.cc/paper/1861-algorithms-for-non-negative-matrix-factorization.pdf)
+ - [Algorithms for non-negative matrix factorization (pdf)](https://proceedings.neurips.cc/paper_files/paper/2000/file/f9d1152547c0bde01830b7e8bd60024c-Paper.pdf)
- [NMF C++ class documentation](../../user/methods/nmf.md)
- [AMF C++ class documentation](../../user/methods/amf.md)
@@ -3264,7 +3264,7 @@ The output matrices are organized such that row i and column j in the neighbors
- [knn()](#knn)
- [lsh()](#lsh)
- - [Rank-approximate nearest neighbor search: Retaining meaning and speed in high dimensions (pdf)](https://papers.nips.cc/paper/3864-rank-approximate-nearest-neighbor-search-retaining-meaning-and-speed-in-high-dimensions.pdf)
+ - [Rank-approximate nearest neighbor search: Retaining meaning and speed in high dimensions (pdf)](https://proceedings.neurips.cc/paper_files/paper/2009/file/ddb30680a691d157187ee1cf9e896d03-Paper.pdf)
- [RASearch C++ class documentation](https://github.com/mlpack/mlpack/blob/master/src/mlpack/methods/rann/ra_search.hpp)
## softmax_regression()
@@ -3435,7 +3435,7 @@ Then, this model could be used to encode a new matrix, `'otherdata'`, and save t
- [local_coordinate_coding()](#local_coordinate_coding)
- [Sparse dictionary learning on Wikipedia](https://en.wikipedia.org/wiki/Sparse_dictionary_learning)
- - [Efficient sparse coding algorithms (pdf)](http://papers.nips.cc/paper/2979-efficient-sparse-coding-algorithms.pdf)
+ - [Efficient sparse coding algorithms (pdf)](https://proceedings.neurips.cc/paper_files/paper/2006/file/2d71b2ae158c7c5912cc0bbde2bb9d95-Paper.pdf)
- [Regularization and variable selection via the elastic net](https://citeseerx.ist.psu.edu/document?repid=rep1&type=pdf&doi=46217f372a75dddc2254fdbc6b9418ba3554e453)
- [SparseCoding C++ class documentation](../../user/methods/sparse_coding.md)
diff --git a/doc/user/bindings/python.sidebar.html b/doc/user/bindings/python.sidebar.html
index e1a70f496e..024fd74822 100644
--- a/doc/user/bindings/python.sidebar.html
+++ b/doc/user/bindings/python.sidebar.html
@@ -9,6 +9,7 @@
Classification
diff --git a/doc/user/bindings/r.md b/doc/user/bindings/r.md
index 36a50a77b6..9ca2a00625 100644
--- a/doc/user/bindings/r.md
+++ b/doc/user/bindings/r.md
@@ -1307,7 +1307,7 @@ R> out_data <- output$predictions
- [knn()](#knn)
- [Kernel density estimation on Wikipedia](https://en.wikipedia.org/wiki/Kernel_density_estimation)
- [Tree-Independent Dual-Tree Algorithms](https://arxiv.org/pdf/1304.4327)
- - [Fast High-dimensional Kernel Summations Using the Monte Carlo Multipole Method](http://papers.nips.cc/paper/3539-fast-high-dimensional-kernel-summations-using-the-monte-carlo-multipole-method.pdf)
+ - [Fast High-dimensional Kernel Summations Using the Monte Carlo Multipole Method](https://proceedings.neurips.cc/paper_files/paper/2008/file/39059724f73a9969845dfe4146c5660e-Paper.pdf)
- [KDE C++ class documentation](https://github.com/mlpack/mlpack/blob/master/src/mlpack/methods/kde/kde.hpp)
## kernel_pca()
@@ -1779,7 +1779,7 @@ R> output <- output$output
- [nca()](#nca)
- [Large margin nearest neighbor on Wikipedia](https://en.wikipedia.org/wiki/Large_margin_nearest_neighbor)
- - [Distance metric learning for large margin nearest neighbor classification (pdf)](http://papers.nips.cc/paper/2795-distance-metric-learning-for-large-margin-nearest-neighbor-classification.pdf)
+ - [Distance metric learning for large margin nearest neighbor classification (pdf)](https://proceedings.neurips.cc/paper_files/paper/2005/file/a7f592cef8b130a6967a90617db5681b-Paper.pdf)
- [LMNN C++ class documentation](../../user/methods/lmnn.md)
## local_coordinate_coding()
@@ -1863,7 +1863,7 @@ R> new_codes <- output$codes
### See also
- [sparse_coding()](#sparse_coding)
- - [Nonlinear learning using local coordinate coding (pdf)](https://papers.nips.cc/paper/3875-nonlinear-learning-using-local-coordinate-coding.pdf)
+ - [Nonlinear learning using local coordinate coding (pdf)](https://proceedings.neurips.cc/paper_files/paper/2009/file/2afe4567e1bf64d32a5527244d104cea-Paper.pdf)
- [LocalCoordinateCoding C++ class documentation](../../user/methods/local_coordinate_coding.md)
## logistic_regression()
@@ -2258,7 +2258,7 @@ By default, the SGD optimizer is used.
- [lmnn()](#lmnn)
- [Neighbourhood components analysis on Wikipedia](https://en.wikipedia.org/wiki/Neighbourhood_components_analysis)
- - [Neighbourhood components analysis (pdf)](http://papers.nips.cc/paper/2566-neighbourhood-components-analysis.pdf)
+ - [Neighbourhood components analysis (pdf)](https://proceedings.neurips.cc/paper_files/paper/2004/file/42fe880812925e520249e808937738d2-Paper.pdf)
- [NCA C++ class documentation](../../user/methods/nca.md)
## knn()
@@ -2489,7 +2489,7 @@ R> H <- output$h
- [cf()](#cf)
- [Non-negative matrix factorization on Wikipedia](https://en.wikipedia.org/wiki/Non-negative_matrix_factorization)
- - [Algorithms for non-negative matrix factorization (pdf)](http://papers.nips.cc/paper/1861-algorithms-for-non-negative-matrix-factorization.pdf)
+ - [Algorithms for non-negative matrix factorization (pdf)](https://proceedings.neurips.cc/paper_files/paper/2000/file/f9d1152547c0bde01830b7e8bd60024c-Paper.pdf)
- [NMF C++ class documentation](../../user/methods/nmf.md)
- [AMF C++ class documentation](../../user/methods/amf.md)
@@ -3218,7 +3218,7 @@ The output matrices are organized such that row i and column j in the neighbors
- [knn()](#knn)
- [lsh()](#lsh)
- - [Rank-approximate nearest neighbor search: Retaining meaning and speed in high dimensions (pdf)](https://papers.nips.cc/paper/3864-rank-approximate-nearest-neighbor-search-retaining-meaning-and-speed-in-high-dimensions.pdf)
+ - [Rank-approximate nearest neighbor search: Retaining meaning and speed in high dimensions (pdf)](https://proceedings.neurips.cc/paper_files/paper/2009/file/ddb30680a691d157187ee1cf9e896d03-Paper.pdf)
- [RASearch C++ class documentation](https://github.com/mlpack/mlpack/blob/master/src/mlpack/methods/rann/ra_search.hpp)
## softmax_regression()
@@ -3385,7 +3385,7 @@ R> codes <- output$codes
- [local_coordinate_coding()](#local_coordinate_coding)
- [Sparse dictionary learning on Wikipedia](https://en.wikipedia.org/wiki/Sparse_dictionary_learning)
- - [Efficient sparse coding algorithms (pdf)](http://papers.nips.cc/paper/2979-efficient-sparse-coding-algorithms.pdf)
+ - [Efficient sparse coding algorithms (pdf)](https://proceedings.neurips.cc/paper_files/paper/2006/file/2d71b2ae158c7c5912cc0bbde2bb9d95-Paper.pdf)
- [Regularization and variable selection via the elastic net](https://citeseerx.ist.psu.edu/document?repid=rep1&type=pdf&doi=46217f372a75dddc2254fdbc6b9418ba3554e453)
- [SparseCoding C++ class documentation](../../user/methods/sparse_coding.md)
diff --git a/doc/user/bindings/r.sidebar.html b/doc/user/bindings/r.sidebar.html
index 980adad917..3b6a12d32a 100644
--- a/doc/user/bindings/r.sidebar.html
+++ b/doc/user/bindings/r.sidebar.html
@@ -9,6 +9,7 @@
Classification
diff --git a/scripts/README.md b/scripts/README.md
index 3e09514751..0974133bf6 100644
--- a/scripts/README.md
+++ b/scripts/README.md
@@ -9,7 +9,8 @@ This will convert all the Markdown documentation in `doc/` into HTML in
process but also can be run manually.
The `kramdown` parser with the `parser-gfm` and `rouge` extensions installed is
-necessary, as are the `tidy` and `checklink` HTML checking packages.
+necessary, as are the `tidy`, `checklink`, and `linkchecker` HTML checking
+packages.
```sh
scripts/build-docs.sh
diff --git a/scripts/build-docs.sh b/scripts/build-docs.sh
index f0d1f4c1b4..0dbfab4d34 100755
--- a/scripts/build-docs.sh
+++ b/scripts/build-docs.sh
@@ -1,13 +1,21 @@
#!/usr/bin/env bash
#
# Convert all the Markdown files in doc/ to HTML.
-# This requires `kramdown` to be available on the path.
-# `tidy` and `checklink` (from Debian's w3c-linkchecker package) are used to
-# test the output and must also be available and on the path.
+#
+# This requires `kramdown` to be available on the path. `tidy` and
+# `linkchecker` (the Python package) and `checklink` (from w3c-linkchecker on
+# Debian) are used to test the output and must also be available and on the
+# path. `sqlite3` must also be available.
+#
# Run this from the root directory of the repository.
+#
# The output directory can be specified as the first option.
+#
# If the environment variable DISABLE_HTML_CHECKS is specified, then checks are
# skipped.
+#
+# If the environment variable LINK_CACHE_FILE is specified, then that file is
+# used as a cache of already-valid links that will not be checked.
if [ "$#" -gt 1 ]; then
echo "Usage: $0 [output_dir/]";
@@ -34,13 +42,25 @@ if [ -z ${DISABLE_HTML_CHECKS+x} ];
then
if ! command -v tidy &>/dev/null
then
- echo "tidy not installed! Cannot build documentation.";
+ echo "tidy not installed! Cannot check documentation.";
exit 1;
fi
if ! command -v checklink &>/dev/null
then
- echo "checklink not installed! Cannot build documentation.";
+ echo "checklink not installed! Cannot check documentation.";
+ exit 1;
+ fi
+
+ if ! command -v linkchecker &>/dev/null
+ then
+ echo "linkchecker not installed! Cannot check documentation.";
+ exit 1;
+ fi
+
+ if ! command -v sqlite3 &> /dev/null
+ then
+ echo "sqlite3 not installed! Cannot check documentation.";
exit 1;
fi
fi
@@ -424,12 +444,12 @@ do
fi
done
-# Now take a second pass to check all the links, if we need to.
+# Now take a second pass to check all local links.
if [ -z ${DISABLE_HTML_CHECKS+x} ];
then
find "$output_dir" -iname '*.html' -print0 | while read -d $'\0' f
do
- echo "Checking links in $f...";
+ echo "Checking local links and anchors in $f...";
# To run checklink we have to strip out some perl stderr warnings...
checklink -qs \
@@ -438,19 +458,292 @@ then
--suppress-broken 503 \
--suppress-broken 301 \
--suppress-broken 400 \
- -X "https://eigen.tuxfamily.org/index.php\?title=Main_Page" \
- -X "https://mlpack.slack.com/" "$f" 2>&1 |
+ -X "^http.*$" "$f" 2>&1 |
grep -v 'Use of uninitialized value' > checklink_out;
if [ -s checklink_out ];
then
- cat checklink_out;
- exit 1;
+ # Store up all failures to print them at once.
+ cat checklink_out >> overall_checklink_out;
fi
rm -f checklink_out;
done
+
+ # Check to see if there were any failures, all at once.
+ if [ -f overall_checklink_out ];
+ then
+ cat overall_checklink_out;
+ rm -f overall_checklink_out;
+ exit 1;
+ fi
+
+ # Check to see if there were any failures, all at once.
+fi
+
+# Utility script to create linkchecker result SQL table, with a bit of extra
+# information.
+cat > create.sql << EOF
+create table linksdb (
+ urlname varchar(256) not null,
+ parentname varchar(256),
+ baseref varchar(256),
+ valid int,
+ result varchar(256),
+ warning varchar(512),
+ info varchar(512),
+ url varchar(256),
+ line int,
+ col int,
+ name varchar(256),
+ checktime int,
+ dltime int,
+ size int,
+ cached int,
+ level int not null,
+ modified int,
+ resulttime timestamp,
+ validdays int
+);
+EOF
+
+# Finally, take a third pass to check external links.
+if [ -z ${DISABLE_HTML_CHECKS+x} ];
+then
+ # Create a basic config file for linkchecker. We will append domains to ignore
+ # to this as we go.
+ echo "[checking]" > "$output_dir/linkcheckerrc.in";
+ echo "maxrequestspersecond=2" >> "$output_dir/linkcheckerrc.in";
+ echo "" >> "$output_dir/linkcheckerrc.in";
+ echo "[filtering]" >> "$output_dir/linkcheckerrc.in";
+ echo "ignore=" >> "$output_dir/linkcheckerrc.in";
+ echo " ^(?!http).*$" >> "$output_dir/linkcheckerrc.in";
+ # Github issues/pull requests redirect to each other and we link to so many of
+ # them it's not worth checking them.
+ echo " ^https://github.com/mlpack/mlpack/issues/[0-9]*$" >> "$output_dir/linkcheckerrc.in";
+ echo " ^https://github.com/mlpack/mlpack/issues[?]q.*$" >> "$output_dir/linkcheckerrc.in";
+ echo " ^https://github.com/mlpack/mlpack/pulls[?]q.*$" >> "$output_dir/linkcheckerrc.in";
+
+ # Initialize our cache or take the current version of it.
+ if [ ! -z ${LINK_CACHE_FILE+x} ];
+ then
+ if [ -f ${LINK_CACHE_FILE} ];
+ then
+ cp "$LINK_CACHE_FILE" "$output_dir/all_links.db";
+ else
+ rm -f "$output_dir/all_links.db";
+ cat create.sql | sqlite3 "$output_dir/all_links.db";
+ fi
+ else
+ rm -f "$output_dir/all_links.db";
+ cat create.sql | sqlite3 "$output_dir/all_links.db";
+ fi
+
+ find "$output_dir" -iname '*.html' -print0 | while read -d $'\0' f
+ do
+ echo "Checking external links in $f...";
+
+ # Generate our config file for this file by appending all valid files that
+ # we have already seen. Note that we have to append $ to all the ignore
+ # patterns so that we don't accidentally match anchors that haven't been
+ # checked yet.
+ cp "$output_dir/linkcheckerrc.in" "$output_dir/linkcheckerrc";
+ echo "SELECT DISTINCT urlname FROM linksdb
+ WHERE valid = 1 AND
+ urlname LIKE 'http%' AND
+ julianday(datetime()) - julianday(resulttime) < validdays AND
+ (result LIKE '200%' OR
+ result = 'filtered' OR
+ result = 'syntax OK');" | sqlite3 "$output_dir/all_links.db" |\
+ sed 's/^/ /' |\
+ sed 's/?/\\?/g' |\
+ sed 's/$/$/' >> "$output_dir/linkcheckerrc";
+
+ # Run linkchecker, and make things a little bit prettier if there are
+ # failures.
+ rm -f links.sql;
+ linkchecker --check-extern \
+ --recursion-level=1 \
+ --threads=4 \
+ --verbose \
+ --no-status \
+ --output=failures \
+ --file-output=sql/ascii/links.sql \
+ --config="$output_dir/linkcheckerrc" \
+ $f |\
+ awk -F"', '" '{ print $2; }' |\
+ sed 's/'"'"')"$//' |\
+ sed 's/^/Failed: /' |\
+ sed 's/$/; will try again at the end of the run./';
+
+ # Print the number of links we checked and the number we filtered.
+ total_links=`cat links.sql | grep -v '^--' | grep 'http' | wc -l`;
+ filtered_links=`grep 'filtered' links.sql | grep -v '^--' | grep 'http' |\
+ wc -l`;
+ echo " $filtered_links of $total_links external links were cached.";
+
+ # Insert results into the database. We have to insert the timestamp and the
+ # number of days the result is valid for. For that, we use a random number
+ # of days, because we don't want *all* of our results to expire on the same
+ # CI run and have it take forever.
+ cat links.sql |\
+ sed 's/modified) values (/modified,resulttime,validdays) values (/' |\
+ sed "s/);$/, current_timestamp, random() % 10 + 25);/" |\
+ sqlite3 "$output_dir/all_links.db";
+
+ # Print any warnings too, because we will try them again later.
+ cat create.sql | sqlite3 tmp.db;
+ cat links.sql |\
+ sed 's/modified) values (/modified,resulttime,validdays) values (/' |\
+ sed "s/);$/, current_timestamp, random() % 10 + 25);/" |\
+ sqlite3 tmp.db;
+ echo "SELECT DISTINCT urlname, warning FROM linksdb
+ WHERE valid = 1 AND
+ warning IS NOT NULL AND
+ (result NOT LIKE '200%' AND
+ warning NOT LIKE '%307 Temporary Redirect%' AND
+ result <> 'filtered' AND
+ result <> 'syntax OK');" |\
+ sqlite3 tmp.db |\
+ awk -F'|' '{ print "Warning: "$1": "$2"; will try again at the end of the run."; }';
+ rm -f tmp.db;
+ done
+
+ # Second chance on errors and warnings: filter out any spurious failures.
+ echo "SELECT DISTINCT urlname FROM linksdb
+ WHERE valid = 0 OR
+ (warning IS NOT NULL AND
+ warning NOT LIKE '%307 Temporary Redirect%') OR
+ (result NOT LIKE '200%' AND
+ result <> 'filtered' AND
+ result <> 'syntax OK');" | sqlite3 "$output_dir/all_links.db" >\
+ links_to_check.txt;
+ num_links=`cat links_to_check.txt | wc -l`;
+ if [ $num_links -gt 0 ];
+ then
+ echo "Second check for the following URLs that failed the first time:";
+ cat links_to_check.txt | sed 's/^/ /';
+
+ # Slow down the process to try and fix any links that got rate limited.
+ cat "$output_dir/linkcheckerrc.in" |\
+ sed 's/maxrequestspersecond=.*$/maxrequestspersecond=1/' >\
+ "$output_dir/linkcheckerrc";
+
+ linkchecker --check-extern \
+ --recursion-level=0 \
+ --threads=1 \
+ --file-output=sql/ascii/links_failed.sql \
+ --no-status \
+ --verbose \
+ --config="$output_dir/linkcheckerrc" \
+ `cat links_to_check.txt | tr '\n' ' '`;
+
+ cat create.sql | sqlite3 tmp.db;
+ cat links_failed.sql |\
+ sed 's/modified) values (/modified,resulttime,validdays) values (/' |\
+ sed "s/);$/, current_timestamp, random() % 10 + 25);/" |\
+ sqlite3 tmp.db;
+ echo "SELECT DISTINCT urlname, result FROM linksdb
+ WHERE valid = 0" | sqlite3 tmp.db |\
+ awk -F'|' '{ print " "$1": "$2; }' > links_failed.txt;
+ echo "SELECT DISTINCT urlname, warning FROM linksdb
+ WHERE valid = 1 AND warning IS NOT NULL" | sqlite3 tmp.db |\
+ awk -F'|' '{ print " "$1": "$2; }' > links_warned.txt;
+
+ # Also add the second pass results to the global cache.
+ cat links_failed.sql |\
+ sed 's/modified) values (/modified,resulttime,validdays) values (/' |\
+ sed "s/);$/, current_timestamp, random() % 10 + 25);/" |\
+ sqlite3 "$output_dir/all_links.db";
+
+ total_links_failed=`cat links_failed.txt links_warned.txt | wc -l`;
+ if [ $total_links_failed -gt 0 ];
+ then
+ echo "The following links have failed:";
+
+ cat links_failed.txt links_warned.txt;
+ rm -f links_failed.sql tmp.db links_failed.txt links_warned.txt;
+ exitcode=1;
+ else
+ exitcode=0;
+ fi
+
+ rm -f tmp.db links_failed.sql;
+ else
+ exitcode=0;
+ fi
+
+ rm -f links_to_check.txt;
+
+ # Add to the global cache.
+ if [ ! -z ${LINK_CACHE_FILE+x} ];
+ then
+ mv "$output_dir/all_links.db" "${LINK_CACHE_FILE}";
+ echo "DELETE FROM linksdb
+ WHERE valid = 0 OR
+ warning IS NOT NULL OR
+ julianday(datetime()) - julianday(resulttime) >= validdays;" |\
+ sqlite3 "${LINK_CACHE_FILE}";
+
+ # Keep only the most recent entry for a given urlname, to keep the size of
+ # the cache as small as possible.
+ echo "CREATE TABLE tmp_linksdb AS SELECT * FROM linksdb
+ GROUP BY urlname HAVING MAX(resulttime) ORDER BY urlname;" |\
+ sqlite3 "${LINK_CACHE_FILE}";
+ echo "DROP TABLE linksdb;" | sqlite3 "${LINK_CACHE_FILE}";
+ echo "ALTER TABLE tmp_linksdb RENAME TO linksdb;" | sqlite3 "${LINK_CACHE_FILE}";
+ fi
+
+ # Pick all the links that are within a week of timing out and run them again,
+ # to see if we can "refresh" them. This is intended to handle situations
+ # where flaky URLs may not always work, but they will be tried a handful of
+ # times over the week before their last run expires. The hope is that one of
+ # those runs in the last week before they expire will succeed, preventing a
+ # documentation job from failing due to a bad link.
+ echo "SELECT DISTINCT urlname FROM linksdb
+ WHERE valid = 1 AND
+ urlname LIKE 'http%' AND
+ validdays -
+ (julianday(datetime()) - julianday(resulttime)) <= 7 AND
+ (result LIKE '200%' OR
+ result = 'filtered' OR
+ result = 'syntax OK');" |\
+ sqlite3 "$output_dir/all_links.db" > links_to_check.txt;
+ num_links=`cat links_to_check.txt | wc -l`;
+ if [ $num_links -gt 0 ];
+ then
+ echo "Checking $num_links links before their cache entry expires...";
+ linkchecker --check-extern \
+ --recursion-level=0 \
+ --threads=1 \
+ --file-output=sql/ascii/links_output.sql \
+ --output=failures \
+ --no-status \
+ --verbose \
+ --config="$output_dir/linkcheckerrc" \
+ `cat links_to_check.txt | tr '\n' ' '` |\
+ awk -F"', '" '{ print $2; }' |\
+ sed 's/'"'"')"$//' |\
+ sed 's/^/Warning: /' |\
+ sed 's/$/ failed, but cache entry not yet expired./';
+
+ cat links_output.sql |\
+ sed 's/modified) values (/modified,resulttime,validdays) values (/' |\
+ sed "s/);$/, current_timestamp, random() % 10 + 25);/" |\
+ sqlite3 "$output_dir/all_links.db";
+ # Filter out any bad links.
+ echo "DELETE FROM all_links WHERE valid = 0;" |\
+ sqlite3 "$output_dir/all_links.db";
+ fi
+
+ # Clean up unnecessary files.
+ rm -f "$output_dir/link_errors.csv" "$output_dir/all_links.csv" \
+ "$output_dir/linkcheckerrc.in" "$output_dir/linkcheckerrc";
+ rm -f links.csv links_failed.csv;
+else
+ exitcode=0;
fi
# Remove temporary files.
+rm -f create.sql;
if [ "a$del_header" == "a1" ];
then
rm -f "$template_html_header";
@@ -460,3 +753,5 @@ if [ "a$del_footer" == "a1" ];
then
rm -f "$template_html_footer";
fi
+
+exit $exitcode;
diff --git a/scripts/test-docs.sh b/scripts/test-docs.sh
index 97aff1a003..31bb75a9d9 100755
--- a/scripts/test-docs.sh
+++ b/scripts/test-docs.sh
@@ -190,9 +190,10 @@ compile_code_blocks()
for f in $input_dir/*.cpp;
do
echo " Compiling $f...";
- of=${f%.cpp};
+ of=${f/.cpp/.o};
+ lf=${f%.cpp};
- if ! $CXX -std=c++17 -Isrc/ $CXXFLAGS -o $of $f $LDFLAGS -larmadillo 2>$of.tmp;
+ if ! $CXX -std=c++17 -Isrc/ $CXXFLAGS -c -o $of $f 2>$of.tmp;
then
echo "Compilation of the following program failed:";
echo "";
@@ -203,9 +204,26 @@ compile_code_blocks()
echo "";
echo "For full error output run either:";
echo " - less $of.tmp";
- echo " - $CXX -std=c++17 -Isrc/ $CXXFLAGS -o $of $f $LDFLAGS -larmadillo";
+ echo " - $CXX -std=c++17 -Isrc/ $CXXFLAGS -c -o $of $f";
echo "";
- echo "Did you set \$CXX, \$CXXFLAGS, and \$LDFLAGS correctly?"
+ echo "Did you set \$CXX and \$CXXFLAGS correctly?"
+ exit 1;
+ fi
+
+ if ! $CXX -o $lf $of $LDFLAGS -larmadillo 2>$lf.tmp;
+ then
+ echo "Linking of the following program failed:"
+ echo "";
+ cat $f;
+ echo "";
+ echo "First ten lines of error output:";
+ head $lf.tmp;
+ echo "";
+ echo "For full error output run either:";
+ echo " - less $lf.tmp";
+ echo " - $CXX -o $lf $of $LDFLAGS -larmadillo";
+ echo "";
+ echo "Did you set \$CXX and \$LDFLAGS correctly?"
exit 1;
fi
done
diff --git a/src/mlpack/bindings/julia/mlpack/mlpack.jl.in b/src/mlpack/bindings/julia/mlpack/mlpack.jl.in
index 62ff3704e2..f44bcc97b7 100644
--- a/src/mlpack/bindings/julia/mlpack/mlpack.jl.in
+++ b/src/mlpack/bindings/julia/mlpack/mlpack.jl.in
@@ -10,7 +10,7 @@ Each function inside the module performs a specific machine learning task.
For complete documentation of these functions, including example usage, see the
mlpack website's documentation for the Julia bindings:
-https://www.mlpack.org/doc/stable/julia_documentation.html
+https://www.mlpack.org/doc/user/bindings/julia.html
Each function also contains an equivalent docstring; the Julia REPL's help
functionality can be used to access the documentation that way.
diff --git a/src/mlpack/bindings/python/setup_readme.md b/src/mlpack/bindings/python/setup_readme.md
index 3a14db5135..7db16d21fe 100644
--- a/src/mlpack/bindings/python/setup_readme.md
+++ b/src/mlpack/bindings/python/setup_readme.md
@@ -26,4 +26,4 @@ mlpack's techniques fall into a handful of categories:
For more documentation on each individual function that mlpack provides, see the
[Python binding
-documentation](https://www.mlpack.org/doc/stable/python_documentation.html).
+documentation](https://www.mlpack.org/doc/user/bindings/python.html).
diff --git a/src/mlpack/methods/kde/kde_main.cpp b/src/mlpack/methods/kde/kde_main.cpp
index 513ad81d96..371d5df64a 100644
--- a/src/mlpack/methods/kde/kde_main.cpp
+++ b/src/mlpack/methods/kde/kde_main.cpp
@@ -124,8 +124,8 @@ BINDING_SEE_ALSO("Kernel density estimation on Wikipedia",
BINDING_SEE_ALSO("Tree-Independent Dual-Tree Algorithms",
"https://arxiv.org/pdf/1304.4327");
BINDING_SEE_ALSO("Fast High-dimensional Kernel Summations Using the Monte Carlo"
- " Multipole Method", "http://papers.nips.cc/paper/3539-fast-high-"
- "dimensional-kernel-summations-using-the-monte-carlo-multipole-method.pdf");
+ " Multipole Method", "https://proceedings.neurips.cc/paper_files/"
+ "paper/2008/file/39059724f73a9969845dfe4146c5660e-Paper.pdf");
BINDING_SEE_ALSO("KDE C++ class documentation",
"@src/mlpack/methods/kde/kde.hpp");
diff --git a/src/mlpack/methods/lmnn/lmnn_main.cpp b/src/mlpack/methods/lmnn/lmnn_main.cpp
index d54b60a682..a259efe49c 100644
--- a/src/mlpack/methods/lmnn/lmnn_main.cpp
+++ b/src/mlpack/methods/lmnn/lmnn_main.cpp
@@ -135,8 +135,8 @@ BINDING_SEE_ALSO("@nca", "#nca");
BINDING_SEE_ALSO("Large margin nearest neighbor on Wikipedia",
"https://en.wikipedia.org/wiki/Large_margin_nearest_neighbor");
BINDING_SEE_ALSO("Distance metric learning for large margin nearest neighbor "
- "classification (pdf)", "http://papers.nips.cc/paper/2795-distance-metric-"
- "learning-for-large-margin-nearest-neighbor-classification.pdf");
+ "classification (pdf)", "https://proceedings.neurips.cc/paper_files/"
+ "paper/2005/file/a7f592cef8b130a6967a90617db5681b-Paper.pdf");
BINDING_SEE_ALSO("LMNN C++ class documentation", "@doc/user/methods/lmnn.md");
PARAM_MATRIX_IN_REQ("input", "Input dataset to run LMNN on.", "i");
diff --git a/src/mlpack/methods/local_coordinate_coding/local_coordinate_coding_main.cpp b/src/mlpack/methods/local_coordinate_coding/local_coordinate_coding_main.cpp
index 50418d9d1f..e0ce39a8df 100644
--- a/src/mlpack/methods/local_coordinate_coding/local_coordinate_coding_main.cpp
+++ b/src/mlpack/methods/local_coordinate_coding/local_coordinate_coding_main.cpp
@@ -87,10 +87,10 @@ BINDING_EXAMPLE(
// See also...
BINDING_SEE_ALSO("@sparse_coding", "#sparse_coding");
BINDING_SEE_ALSO("Nonlinear learning using local coordinate coding (pdf)",
- "https://papers.nips.cc/paper/3875-nonlinear-learning-using-local-"
- "coordinate-coding.pdf");
+ "https://proceedings.neurips.cc/paper_files/paper/2009/file/"
+ "2afe4567e1bf64d32a5527244d104cea-Paper.pdf");
BINDING_SEE_ALSO("LocalCoordinateCoding C++ class documentation",
- "@doc/user/methods/local_coordinate_coding.md");
+ "@doc/user/methods/local_coordinate_coding.md");
// Training parameters.
PARAM_MATRIX_IN("training", "Matrix of training data (X).", "t");
diff --git a/src/mlpack/methods/nca/nca_main.cpp b/src/mlpack/methods/nca/nca_main.cpp
index f6c4dac520..15ebb21164 100644
--- a/src/mlpack/methods/nca/nca_main.cpp
+++ b/src/mlpack/methods/nca/nca_main.cpp
@@ -97,7 +97,8 @@ BINDING_SEE_ALSO("@lmnn", "#lmnn");
BINDING_SEE_ALSO("Neighbourhood components analysis on Wikipedia",
"https://en.wikipedia.org/wiki/Neighbourhood_components_analysis");
BINDING_SEE_ALSO("Neighbourhood components analysis (pdf)",
- "http://papers.nips.cc/paper/2566-neighbourhood-components-analysis.pdf");
+ "https://proceedings.neurips.cc/paper_files/paper/2004/file/"
+ "42fe880812925e520249e808937738d2-Paper.pdf");
BINDING_SEE_ALSO("NCA C++ class documentation", "@doc/user/methods/nca.md");
PARAM_MATRIX_IN_REQ("input", "Input dataset to run NCA on.", "i");
diff --git a/src/mlpack/methods/nmf/nmf_main.cpp b/src/mlpack/methods/nmf/nmf_main.cpp
index ff477c3903..98ff6d8128 100644
--- a/src/mlpack/methods/nmf/nmf_main.cpp
+++ b/src/mlpack/methods/nmf/nmf_main.cpp
@@ -73,8 +73,8 @@ BINDING_SEE_ALSO("@cf", "#cf");
BINDING_SEE_ALSO("Non-negative matrix factorization on Wikipedia",
"https://en.wikipedia.org/wiki/Non-negative_matrix_factorization");
BINDING_SEE_ALSO("Algorithms for non-negative matrix factorization (pdf)",
- "http://papers.nips.cc/paper/1861-algorithms-for-non-negative-matrix-"
- "factorization.pdf");
+ "https://proceedings.neurips.cc/paper_files/paper/2000/file/"
+ "f9d1152547c0bde01830b7e8bd60024c-Paper.pdf");
BINDING_SEE_ALSO("NMF C++ class documentation", "@doc/user/methods/nmf.md");
BINDING_SEE_ALSO("AMF C++ class documentation", "@doc/user/methods/amf.md");
diff --git a/src/mlpack/methods/rann/krann_main.cpp b/src/mlpack/methods/rann/krann_main.cpp
index a331499978..c22f84a580 100644
--- a/src/mlpack/methods/rann/krann_main.cpp
+++ b/src/mlpack/methods/rann/krann_main.cpp
@@ -70,9 +70,8 @@ BINDING_EXAMPLE(
BINDING_SEE_ALSO("@knn", "#knn");
BINDING_SEE_ALSO("@lsh", "#lsh");
BINDING_SEE_ALSO("Rank-approximate nearest neighbor search: Retaining meaning"
- " and speed in high dimensions (pdf)", "https://papers.nips.cc/paper/3864-"
- "rank-approximate-nearest-neighbor-search-retaining-meaning-and-speed-in-"
- "high-dimensions.pdf");
+ " and speed in high dimensions (pdf)", "https://proceedings.neurips.cc/"
+ "paper_files/paper/2009/file/ddb30680a691d157187ee1cf9e896d03-Paper.pdf");
BINDING_SEE_ALSO("RASearch C++ class documentation",
"@src/mlpack/methods/rann/ra_search.hpp");
diff --git a/src/mlpack/methods/sparse_coding/sparse_coding_main.cpp b/src/mlpack/methods/sparse_coding/sparse_coding_main.cpp
index 25235f2ac8..1d39ced04d 100644
--- a/src/mlpack/methods/sparse_coding/sparse_coding_main.cpp
+++ b/src/mlpack/methods/sparse_coding/sparse_coding_main.cpp
@@ -85,7 +85,8 @@ BINDING_SEE_ALSO("@local_coordinate_coding", "#local_coordinate_coding");
BINDING_SEE_ALSO("Sparse dictionary learning on Wikipedia",
"https://en.wikipedia.org/wiki/Sparse_dictionary_learning");
BINDING_SEE_ALSO("Efficient sparse coding algorithms (pdf)",
- "http://papers.nips.cc/paper/2979-efficient-sparse-coding-algorithms.pdf");
+ "https://proceedings.neurips.cc/paper_files/paper/2006/file/"
+ "2d71b2ae158c7c5912cc0bbde2bb9d95-Paper.pdf");
BINDING_SEE_ALSO("Regularization and variable selection via the elastic net",
"https://citeseerx.ist.psu.edu/document?repid=rep1&type=pdf"
"&doi=46217f372a75dddc2254fdbc6b9418ba3554e453");