* installing *source* package ‘rsparse’ ...
** package ‘rsparse’ successfully unpacked and MD5 sums checked
** using staged installation
configure: creating ./config.status
config.status: creating src/Makevars
** libs
using C++ compiler: ‘g++-14 (GCC) 14.1.0’
make[1]: Entering directory '/data/gannet/ripley/R/packages/tests-devel/rsparse/src'
g++-14 -std=gnu++17 -I"/data/gannet/ripley/R/R-devel/include" -DNDEBUG -DARMA_32BIT_WORD -I../inst/include/ -DRSPARSE_R_PKG -DARMA_NO_DEBUG -I'/data/gannet/ripley/R/test-dev/Rcpp/include' -I'/data/gannet/ripley/R/test-dev/RcppArmadillo/include' -I/usr/local/include   -fopenmp -fpic  -g -O2 -Wall -pedantic -mtune=native -Wno-ignored-attributes -Wno-parentheses -Wp,-D_FORTIFY_SOURCE=3 -fexceptions -fstack-protector-strong -fstack-clash-protection -fcf-protection   -c FTRL.cpp -o FTRL.o
g++-14 -std=gnu++17 -I"/data/gannet/ripley/R/R-devel/include" -DNDEBUG -DARMA_32BIT_WORD -I../inst/include/ -DRSPARSE_R_PKG -DARMA_NO_DEBUG -I'/data/gannet/ripley/R/test-dev/Rcpp/include' -I'/data/gannet/ripley/R/test-dev/RcppArmadillo/include' -I/usr/local/include   -fopenmp -fpic  -g -O2 -Wall -pedantic -mtune=native -Wno-ignored-attributes -Wno-parentheses -Wp,-D_FORTIFY_SOURCE=3 -fexceptions -fstack-protector-strong -fstack-clash-protection -fcf-protection   -c GloVe.cpp -o GloVe.o
g++-14 -std=gnu++17 -I"/data/gannet/ripley/R/R-devel/include" -DNDEBUG -DARMA_32BIT_WORD -I../inst/include/ -DRSPARSE_R_PKG -DARMA_NO_DEBUG -I'/data/gannet/ripley/R/test-dev/Rcpp/include' -I'/data/gannet/ripley/R/test-dev/RcppArmadillo/include' -I/usr/local/include   -fopenmp -fpic  -g -O2 -Wall -pedantic -mtune=native -Wno-ignored-attributes -Wno-parentheses -Wp,-D_FORTIFY_SOURCE=3 -fexceptions -fstack-protector-strong -fstack-clash-protection -fcf-protection   -c RcppExports.cpp -o RcppExports.o
g++-14 -std=gnu++17 -I"/data/gannet/ripley/R/R-devel/include" -DNDEBUG -DARMA_32BIT_WORD -I../inst/include/ -DRSPARSE_R_PKG -DARMA_NO_DEBUG -I'/data/gannet/ripley/R/test-dev/Rcpp/include' -I'/data/gannet/ripley/R/test-dev/RcppArmadillo/include' -I/usr/local/include   -fopenmp -fpic  -g -O2 -Wall -pedantic -mtune=native -Wno-ignored-attributes -Wno-parentheses -Wp,-D_FORTIFY_SOURCE=3 -fexceptions -fstack-protector-strong -fstack-clash-protection -fcf-protection   -c factorization_machine.cpp -o factorization_machine.o
g++-14 -std=gnu++17 -I"/data/gannet/ripley/R/R-devel/include" -DNDEBUG -DARMA_32BIT_WORD -I../inst/include/ -DRSPARSE_R_PKG -DARMA_NO_DEBUG -I'/data/gannet/ripley/R/test-dev/Rcpp/include' -I'/data/gannet/ripley/R/test-dev/RcppArmadillo/include' -I/usr/local/include   -fopenmp -fpic  -g -O2 -Wall -pedantic -mtune=native -Wno-ignored-attributes -Wno-parentheses -Wp,-D_FORTIFY_SOURCE=3 -fexceptions -fstack-protector-strong -fstack-clash-protection -fcf-protection   -c kmeans.cpp -o kmeans.o
g++-14 -std=gnu++17 -I"/data/gannet/ripley/R/R-devel/include" -DNDEBUG -DARMA_32BIT_WORD -I../inst/include/ -DRSPARSE_R_PKG -DARMA_NO_DEBUG -I'/data/gannet/ripley/R/test-dev/Rcpp/include' -I'/data/gannet/ripley/R/test-dev/RcppArmadillo/include' -I/usr/local/include   -fopenmp -fpic  -g -O2 -Wall -pedantic -mtune=native -Wno-ignored-attributes -Wno-parentheses -Wp,-D_FORTIFY_SOURCE=3 -fexceptions -fstack-protector-strong -fstack-clash-protection -fcf-protection   -c matrix_top_product.cpp -o matrix_top_product.o
g++-14 -std=gnu++17 -I"/data/gannet/ripley/R/R-devel/include" -DNDEBUG -DARMA_32BIT_WORD -I../inst/include/ -DRSPARSE_R_PKG -DARMA_NO_DEBUG -I'/data/gannet/ripley/R/test-dev/Rcpp/include' -I'/data/gannet/ripley/R/test-dev/RcppArmadillo/include' -I/usr/local/include   -fopenmp -fpic  -g -O2 -Wall -pedantic -mtune=native -Wno-ignored-attributes -Wno-parentheses -Wp,-D_FORTIFY_SOURCE=3 -fexceptions -fstack-protector-strong -fstack-clash-protection -fcf-protection   -c nnls.cpp -o nnls.o
g++-14 -std=gnu++17 -I"/data/gannet/ripley/R/R-devel/include" -DNDEBUG -DARMA_32BIT_WORD -I../inst/include/ -DRSPARSE_R_PKG -DARMA_NO_DEBUG -I'/data/gannet/ripley/R/test-dev/Rcpp/include' -I'/data/gannet/ripley/R/test-dev/RcppArmadillo/include' -I/usr/local/include   -fopenmp -fpic  -g -O2 -Wall -pedantic -mtune=native -Wno-ignored-attributes -Wno-parentheses -Wp,-D_FORTIFY_SOURCE=3 -fexceptions -fstack-protector-strong -fstack-clash-protection -fcf-protection   -c rankmf.cpp -o rankmf.o
g++-14 -std=gnu++17 -I"/data/gannet/ripley/R/R-devel/include" -DNDEBUG -DARMA_32BIT_WORD -I../inst/include/ -DRSPARSE_R_PKG -DARMA_NO_DEBUG -I'/data/gannet/ripley/R/test-dev/Rcpp/include' -I'/data/gannet/ripley/R/test-dev/RcppArmadillo/include' -I/usr/local/include   -fopenmp -fpic  -g -O2 -Wall -pedantic -mtune=native -Wno-ignored-attributes -Wno-parentheses -Wp,-D_FORTIFY_SOURCE=3 -fexceptions -fstack-protector-strong -fstack-clash-protection -fcf-protection   -c utils.cpp -o utils.o
g++-14 -std=gnu++17 -I"/data/gannet/ripley/R/R-devel/include" -DNDEBUG -DARMA_32BIT_WORD -I../inst/include/ -DRSPARSE_R_PKG -DARMA_NO_DEBUG -I'/data/gannet/ripley/R/test-dev/Rcpp/include' -I'/data/gannet/ripley/R/test-dev/RcppArmadillo/include' -I/usr/local/include   -fopenmp -fpic  -g -O2 -Wall -pedantic -mtune=native -Wno-ignored-attributes -Wno-parentheses -Wp,-D_FORTIFY_SOURCE=3 -fexceptions -fstack-protector-strong -fstack-clash-protection -fcf-protection   -c wrmf_explicit.cpp -o wrmf_explicit.o
g++-14 -std=gnu++17 -I"/data/gannet/ripley/R/R-devel/include" -DNDEBUG -DARMA_32BIT_WORD -I../inst/include/ -DRSPARSE_R_PKG -DARMA_NO_DEBUG -I'/data/gannet/ripley/R/test-dev/Rcpp/include' -I'/data/gannet/ripley/R/test-dev/RcppArmadillo/include' -I/usr/local/include   -fopenmp -fpic  -g -O2 -Wall -pedantic -mtune=native -Wno-ignored-attributes -Wno-parentheses -Wp,-D_FORTIFY_SOURCE=3 -fexceptions -fstack-protector-strong -fstack-clash-protection -fcf-protection   -c wrmf_implicit.cpp -o wrmf_implicit.o
g++-14 -std=gnu++17 -I"/data/gannet/ripley/R/R-devel/include" -DNDEBUG -DARMA_32BIT_WORD -I../inst/include/ -DRSPARSE_R_PKG -DARMA_NO_DEBUG -I'/data/gannet/ripley/R/test-dev/Rcpp/include' -I'/data/gannet/ripley/R/test-dev/RcppArmadillo/include' -I/usr/local/include   -fopenmp -fpic  -g -O2 -Wall -pedantic -mtune=native -Wno-ignored-attributes -Wno-parentheses -Wp,-D_FORTIFY_SOURCE=3 -fexceptions -fstack-protector-strong -fstack-clash-protection -fcf-protection   -c wrmf_init.cpp -o wrmf_init.o
In file included from wrmf_implicit.cpp:1:
../inst/include/wrmf_implicit.hpp:140:5: warning: multi-line comment [-Wcomment]
  140 |     // rhs_user = rhs_init - \
      |     ^
../inst/include/wrmf_implicit.hpp:221:11: warning: multi-line comment [-Wcomment]
  221 |           // rhs += (X_nnz.each_row() % confidence.t()) * \
      |           ^
nnls.cpp: In function 'arma::Mat<double> c_nnls_double(const arma::mat&, const arma::vec&, unsigned int, double)':
nnls.cpp:9:22: warning: comparison of integer expressions of different signedness: 'int' and 'unsigned int' [-Wsign-compare]
    9 |   for (auto i = 0; i < n; i++) {
      |                    ~~^~~
In file included from nnls.cpp:1:
../inst/include/nnls.hpp: In instantiation of 'arma::Col<eT> scd_ls_update(const arma::Mat<eT>&, arma::Col<eT>&, arma::uword, double, const arma::Col<eT>&) [with T = double; arma::uword = unsigned int]':
../inst/include/nnls.hpp:45:42:   required from 'arma::Col<eT> c_nnls(const arma::Mat<eT>&, const arma::Col<eT>&, const arma::Col<eT>&, arma::uword, double) [with T = double; arma::uword = unsigned int]'
   45 |   const arma::Col<T> H = scd_ls_update<T>(XtX, mu, max_iter, rel_tol, init);
      |                          ~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
nnls.cpp:14:24:   required from here
   14 |   return c_nnls<double>(x, y, init, max_iter, rel_tol);
      |          ~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../inst/include/nnls.hpp:17:22: warning: comparison of integer expressions of different signedness: 'int' and 'arma::uword' {aka 'unsigned int'} [-Wsign-compare]
   17 |   for (auto t = 0; t < max_iter; t++) {
      |                    ~~^~~~~~~~~~
../inst/include/nnls.hpp:19:24: warning: comparison of integer expressions of different signedness: 'int' and 'const arma::uword' {aka 'const unsigned int'} [-Wsign-compare]
   19 |     for (auto k = 0; k < XtX.n_cols; k++) {
      |                      ~~^~~~~~~~~~~~
In file included from wrmf_explicit.cpp:1:
../inst/include/wrmf_explicit.hpp: In instantiation of 'arma::Col<eT> cg_solver_explicit(const arma::Mat<eT>&, const arma::Col<eT>&, const arma::Col<eT>&, T, arma::uword) [with T = double; arma::uword = unsigned int]':
../inst/include/wrmf_explicit.hpp:101:38:   required from 'T als_explicit(const dMappedCSC&, arma::Mat<eT>&, arma::Mat<eT>&, double, int, unsigned int, unsigned int, bool, const arma::Col<eT>&, bool, bool) [with T = double; dMappedCSC = MappedCSC<double>]'
  101 |         Y_new = cg_solver_explicit<T>(X_nnz, confidence, init, lambda_use, cg_steps);
      |                 ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
wrmf_explicit.cpp:10:38:   required from here
   10 |   return (double)als_explicit<double>(Conf, X, Y, lambda, n_threads, solver, cg_steps,
      |                  ~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   11 |                                       dynamic_lambda, cnt_X, with_biases,
      |                                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   12 |                                       is_x_bias_last_row);
      |                                       ~~~~~~~~~~~~~~~~~~~
../inst/include/wrmf_explicit.hpp:20:22: warning: comparison of integer expressions of different signedness: 'int' and 'const arma::uword' {aka 'const unsigned int'} [-Wsign-compare]
   20 |   for (auto k = 0; k < n_iter; k++) {
      |                    ~~^~~~~~~~
../inst/include/wrmf_explicit.hpp: In instantiation of 'arma::Col<eT> cg_solver_explicit(const arma::Mat<eT>&, const arma::Col<eT>&, const arma::Col<eT>&, T, arma::uword) [with T = float; arma::uword = unsigned int]':
../inst/include/wrmf_explicit.hpp:101:38:   required from 'T als_explicit(const dMappedCSC&, arma::Mat<eT>&, arma::Mat<eT>&, double, int, unsigned int, unsigned int, bool, const arma::Col<eT>&, bool, bool) [with T = float; dMappedCSC = MappedCSC<double>]'
  101 |         Y_new = cg_solver_explicit<T>(X_nnz, confidence, init, lambda_use, cg_steps);
      |                 ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
wrmf_explicit.cpp:24:37:   required from here
   24 |   return (double)als_explicit<float>(Conf, X, Y, lambda, n_threads, solver, cg_steps,
      |                  ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   25 |                                      dynamic_lambda, cnt_X, with_biases,
      |                                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   26 |                                      is_x_bias_last_row);
      |                                      ~~~~~~~~~~~~~~~~~~~
../inst/include/wrmf_explicit.hpp:20:22: warning: comparison of integer expressions of different signedness: 'int' and 'const arma::uword' {aka 'const unsigned int'} [-Wsign-compare]
   20 |   for (auto k = 0; k < n_iter; k++) {
      |                    ~~^~~~~~~~
In file included from ../inst/include/wrmf_explicit.hpp:1:
../inst/include/nnls.hpp: In instantiation of 'arma::Col<eT> scd_ls_update(const arma::Mat<eT>&, arma::Col<eT>&, arma::uword, double, const arma::Col<eT>&) [with T = double; arma::uword = unsigned int]':
../inst/include/nnls.hpp:45:42:   required from 'arma::Col<eT> c_nnls(const arma::Mat<eT>&, const arma::Col<eT>&, const arma::Col<eT>&, arma::uword, double) [with T = double; arma::uword = unsigned int]'
   45 |   const arma::Col<T> H = scd_ls_update<T>(XtX, mu, max_iter, rel_tol, init);
      |                          ~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../inst/include/wrmf_explicit.hpp:110:28:   required from 'T als_explicit(const dMappedCSC&, arma::Mat<eT>&, arma::Mat<eT>&, double, int, unsigned int, unsigned int, bool, const arma::Col<eT>&, bool, bool) [with T = double; dMappedCSC = MappedCSC<double>]'
  110 |           Y_new = c_nnls<T>(lhs, rhs, init, SCD_MAX_ITER, SCD_TOL);
      |                   ~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
wrmf_explicit.cpp:10:38:   required from here
   10 |   return (double)als_explicit<double>(Conf, X, Y, lambda, n_threads, solver, cg_steps,
      |                  ~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   11 |                                       dynamic_lambda, cnt_X, with_biases,
      |                                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   12 |                                       is_x_bias_last_row);
      |                                       ~~~~~~~~~~~~~~~~~~~
../inst/include/nnls.hpp:17:22: warning: comparison of integer expressions of different signedness: 'int' and 'arma::uword' {aka 'unsigned int'} [-Wsign-compare]
   17 |   for (auto t = 0; t < max_iter; t++) {
      |                    ~~^~~~~~~~~~
../inst/include/nnls.hpp:19:24: warning: comparison of integer expressions of different signedness: 'int' and 'const arma::uword' {aka 'const unsigned int'} [-Wsign-compare]
   19 |     for (auto k = 0; k < XtX.n_cols; k++) {
      |                      ~~^~~~~~~~~~~~
../inst/include/nnls.hpp: In instantiation of 'arma::Col<eT> scd_ls_update(const arma::Mat<eT>&, arma::Col<eT>&, arma::uword, double, const arma::Col<eT>&) [with T = float; arma::uword = unsigned int]':
../inst/include/nnls.hpp:45:42:   required from 'arma::Col<eT> c_nnls(const arma::Mat<eT>&, const arma::Col<eT>&, const arma::Col<eT>&, arma::uword, double) [with T = float; arma::uword = unsigned int]'
   45 |   const arma::Col<T> H = scd_ls_update<T>(XtX, mu, max_iter, rel_tol, init);
      |                          ~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../inst/include/wrmf_explicit.hpp:110:28:   required from 'T als_explicit(const dMappedCSC&, arma::Mat<eT>&, arma::Mat<eT>&, double, int, unsigned int, unsigned int, bool, const arma::Col<eT>&, bool, bool) [with T = float; dMappedCSC = MappedCSC<double>]'
  110 |           Y_new = c_nnls<T>(lhs, rhs, init, SCD_MAX_ITER, SCD_TOL);
      |                   ~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
wrmf_explicit.cpp:24:37:   required from here
   24 |   return (double)als_explicit<float>(Conf, X, Y, lambda, n_threads, solver, cg_steps,
      |                  ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   25 |                                      dynamic_lambda, cnt_X, with_biases,
      |                                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   26 |                                      is_x_bias_last_row);
      |                                      ~~~~~~~~~~~~~~~~~~~
../inst/include/nnls.hpp:17:22: warning: comparison of integer expressions of different signedness: 'int' and 'arma::uword' {aka 'unsigned int'} [-Wsign-compare]
   17 |   for (auto t = 0; t < max_iter; t++) {
      |                    ~~^~~~~~~~~~
../inst/include/nnls.hpp:19:24: warning: comparison of integer expressions of different signedness: 'int' and 'const arma::uword' {aka 'const unsigned int'} [-Wsign-compare]
   19 |     for (auto k = 0; k < XtX.n_cols; k++) {
      |                      ~~^~~~~~~~~~~~
rankmf.cpp: In instantiation of 'void rankmf_solver(const MappedCSR<T2>&, arma::Mat<eT>&, arma::Mat<eT>&, arma::Col<eT>&, arma::Col<eT>&, const MappedCSR<T2>&, const MappedCSR<T2>&, arma::uword, arma::uword, T, T, T, T, T, arma::uword, bool, arma::uword, arma::uword, arma::uword, T, arma::uword, arma::uword) [with T = double; T2 = double; arma::uword = unsigned int]':
rankmf.cpp:305:32:   required from here
  305 |   rankmf_solver<double, double>(x, W, H, W2_grad, H2_grad, user_features, item_features,
      |   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  306 |                                 rank, n_updates, learning_rate, gamma, lambda_user,
      |                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  307 |                                 lambda_item_positive, lambda_item_negative, n_threads,
      |                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  308 |                                 update_items, loss, kernel, max_negative_samples, margin,
      |                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  309 |                                 optimizer, report_progress);
      |                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
rankmf.cpp:240:28: warning: comparison of integer expressions of different signedness: 'int' and 'arma::uword' {aka 'unsigned int'} [-Wsign-compare]
  240 |         for (auto i = 0; i < user_features_nnz_indices.size(); i++) {
      |                          ~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
rankmf.cpp:254:30: warning: comparison of integer expressions of different signedness: 'int' and 'arma::uword' {aka 'unsigned int'} [-Wsign-compare]
  254 |           for (auto i = 0; i < item_features_pos_nnz_indices.size(); i++) {
      |                            ~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
rankmf.cpp:267:30: warning: comparison of integer expressions of different signedness: 'int' and 'arma::uword' {aka 'unsigned int'} [-Wsign-compare]
  267 |           for (auto i = 0; i < item_features_neg_nnz_indices.size(); i++) {
      |                            ~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
rankmf.cpp: In instantiation of 'void rankmf_solver(const MappedCSR<T2>&, arma::Mat<eT>&, arma::Mat<eT>&, arma::Col<eT>&, arma::Col<eT>&, const MappedCSR<T2>&, const MappedCSR<T2>&, arma::uword, arma::uword, T, T, T, T, T, arma::uword, bool, arma::uword, arma::uword, arma::uword, T, arma::uword, arma::uword) [with T = float; T2 = double; arma::uword = unsigned int]':
rankmf.cpp:348:31:   required from here
  348 |   rankmf_solver<float, double>(
      |   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
  349 |       x, W_float, H_float, W2_grad_float, H2_grad_float, user_features, item_features,
      |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  350 |       rank, n_updates, learning_rate, gamma, lambda_user, lambda_item_positive,
      |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  351 |       lambda_item_negative, n_threads, update_items, loss, kernel, max_negative_samples,
      |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  352 |       margin, optimizer, report_progress);
      |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
rankmf.cpp:240:28: warning: comparison of integer expressions of different signedness: 'int' and 'arma::uword' {aka 'unsigned int'} [-Wsign-compare]
  240 |         for (auto i = 0; i < user_features_nnz_indices.size(); i++) {
      |                          ~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
rankmf.cpp:254:30: warning: comparison of integer expressions of different signedness: 'int' and 'arma::uword' {aka 'unsigned int'} [-Wsign-compare]
  254 |           for (auto i = 0; i < item_features_pos_nnz_indices.size(); i++) {
      |                            ~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
rankmf.cpp:267:30: warning: comparison of integer expressions of different signedness: 'int' and 'arma::uword' {aka 'unsigned int'} [-Wsign-compare]
  267 |           for (auto i = 0; i < item_features_neg_nnz_indices.size(); i++) {
      |                            ~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from wrmf_init.cpp:3:
../inst/include/wrmf_utils.hpp: In instantiation of 'double initialize_biases_explicit(dMappedCSC&, dMappedCSC&, arma::Col<eT>&, arma::Col<eT>&, T, bool, bool, bool) [with T = double; dMappedCSC = MappedCSC<double>]':
../inst/include/wrmf_utils.hpp:177:38:   required from 'double initialize_biases(dMappedCSC&, dMappedCSC&, arma::Col<eT>&, arma::Col<eT>&, T, bool, bool, bool, bool) [with T = double; dMappedCSC = MappedCSC<double>]'
  177 |     return initialize_biases_explicit(ConfCSC, ConfCSR, user_bias, item_bias,
      |            ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  178 |                                       lambda, dynamic_lambda, non_negative,
      |                                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  179 |                                       calculate_global_bias);
      |                                       ~~~~~~~~~~~~~~~~~~~~~~
wrmf_init.cpp:14:35:   required from here
   14 |   return initialize_biases<double>(ConfCSC, ConfCSR, user_bias, item_bias, lambda,
      |          ~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   15 |                                    dynamic_lambda, non_negative, calculate_global_bias,
      |                                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   16 |                                    is_explicit_feedback);
      |                                    ~~~~~~~~~~~~~~~~~~~~~
../inst/include/wrmf_utils.hpp:56:27: warning: comparison of integer expressions of different signedness: 'int' and 'const arma::uword' {aka 'const unsigned int'} [-Wsign-compare]
   56 |     for (int col = 0; col < ConfCSC.n_cols; col++) {
      |                       ~~~~^~~~~~~~~~~~~~~~
../inst/include/wrmf_utils.hpp:60:47: warning: comparison of integer expressions of different signedness: 'int' and 'arma::uword' {aka 'unsigned int'} [-Wsign-compare]
   60 |       for (int ix = ConfCSC.col_ptrs[col]; ix < ConfCSC.col_ptrs[col + 1]; ix++) {
      |                                            ~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
../inst/include/wrmf_utils.hpp:69:27: warning: comparison of integer expressions of different signedness: 'int' and 'const arma::uword' {aka 'const unsigned int'} [-Wsign-compare]
   69 |     for (int row = 0; row < ConfCSR.n_cols; row++) {
      |                       ~~~~^~~~~~~~~~~~~~~~
../inst/include/wrmf_utils.hpp:73:47: warning: comparison of integer expressions of different signedness: 'int' and 'arma::uword' {aka 'unsigned int'} [-Wsign-compare]
   73 |       for (int ix = ConfCSR.col_ptrs[row]; ix < ConfCSR.col_ptrs[row + 1]; ix++) {
      |                                            ~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
../inst/include/wrmf_utils.hpp: In instantiation of 'double initialize_biases_implicit(dMappedCSC&, dMappedCSC&, arma::Col<eT>&, arma::Col<eT>&, T, bool, bool) [with T = double; dMappedCSC = MappedCSC<double>]':
../inst/include/wrmf_utils.hpp:181:38:   required from 'double initialize_biases(dMappedCSC&, dMappedCSC&, arma::Col<eT>&, arma::Col<eT>&, T, bool, bool, bool, bool) [with T = double; dMappedCSC = MappedCSC<double>]'
  181 |     return initialize_biases_implicit(ConfCSC, ConfCSR, user_bias, item_bias, lambda,
      |            ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  182 |                                       calculate_global_bias,non_negative);
      |                                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
wrmf_init.cpp:14:35:   required from here
   14 |   return initialize_biases<double>(ConfCSC, ConfCSR, user_bias, item_bias, lambda,
      |          ~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   15 |                                    dynamic_lambda, non_negative, calculate_global_bias,
      |                                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   16 |                                    is_explicit_feedback);
      |                                    ~~~~~~~~~~~~~~~~~~~~~
../inst/include/wrmf_utils.hpp:104:47: warning: comparison of integer expressions of different signedness: 'int' and 'arma::uword' {aka 'unsigned int'} [-Wsign-compare]
  104 |       for (int ix = ConfCSR.col_ptrs[row]; ix < ConfCSR.col_ptrs[row + 1]; ix++)
      |                                            ~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
../inst/include/wrmf_utils.hpp:116:47: warning: comparison of integer expressions of different signedness: 'int' and 'arma::uword' {aka 'unsigned int'} [-Wsign-compare]
  116 |       for (int ix = ConfCSC.col_ptrs[col]; ix < ConfCSC.col_ptrs[col + 1]; ix++)
      |                                            ~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
../inst/include/wrmf_utils.hpp:141:47: warning: comparison of integer expressions of different signedness: 'int' and 'arma::uword' {aka 'unsigned int'} [-Wsign-compare]
  141 |       for (int ix = ConfCSC.col_ptrs[col]; ix < ConfCSC.col_ptrs[col + 1]; ix++)
      |                                            ~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
../inst/include/wrmf_utils.hpp:157:47: warning: comparison of integer expressions of different signedness: 'int' and 'arma::uword' {aka 'unsigned int'} [-Wsign-compare]
  157 |       for (int ix = ConfCSR.col_ptrs[row]; ix < ConfCSR.col_ptrs[row + 1]; ix++)
      |                                            ~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
../inst/include/wrmf_utils.hpp: In instantiation of 'double initialize_biases_explicit(dMappedCSC&, dMappedCSC&, arma::Col<eT>&, arma::Col<eT>&, T, bool, bool, bool) [with T = float; dMappedCSC = MappedCSC<double>]':
../inst/include/wrmf_utils.hpp:177:38:   required from 'double initialize_biases(dMappedCSC&, dMappedCSC&, arma::Col<eT>&, arma::Col<eT>&, T, bool, bool, bool, bool) [with T = float; dMappedCSC = MappedCSC<double>]'
  177 |     return initialize_biases_explicit(ConfCSC, ConfCSR, user_bias, item_bias,
      |            ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  178 |                                       lambda, dynamic_lambda, non_negative,
      |                                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  179 |                                       calculate_global_bias);
      |                                       ~~~~~~~~~~~~~~~~~~~~~~
wrmf_init.cpp:31:34:   required from here
   31 |   return initialize_biases<float>(ConfCSC, ConfCSR, user_bias_arma, item_bias_arma,
      |          ~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   32 |                                   lambda, dynamic_lambda, non_negative,
      |                                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   33 |                                   calculate_global_bias, is_explicit_feedback);
      |                                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../inst/include/wrmf_utils.hpp:56:27: warning: comparison of integer expressions of different signedness: 'int' and 'const arma::uword' {aka 'const unsigned int'} [-Wsign-compare]
   56 |     for (int col = 0; col < ConfCSC.n_cols; col++) {
      |                       ~~~~^~~~~~~~~~~~~~~~
../inst/include/wrmf_utils.hpp:60:47: warning: comparison of integer expressions of different signedness: 'int' and 'arma::uword' {aka 'unsigned int'} [-Wsign-compare]
   60 |       for (int ix = ConfCSC.col_ptrs[col]; ix < ConfCSC.col_ptrs[col + 1]; ix++) {
      |                                            ~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
../inst/include/wrmf_utils.hpp:69:27: warning: comparison of integer expressions of different signedness: 'int' and 'const arma::uword' {aka 'const unsigned int'} [-Wsign-compare]
   69 |     for (int row = 0; row < ConfCSR.n_cols; row++) {
      |                       ~~~~^~~~~~~~~~~~~~~~
../inst/include/wrmf_utils.hpp:73:47: warning: comparison of integer expressions of different signedness: 'int' and 'arma::uword' {aka 'unsigned int'} [-Wsign-compare]
   73 |       for (int ix = ConfCSR.col_ptrs[row]; ix < ConfCSR.col_ptrs[row + 1]; ix++) {
      |                                            ~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
../inst/include/wrmf_utils.hpp: In instantiation of 'double initialize_biases_implicit(dMappedCSC&, dMappedCSC&, arma::Col<eT>&, arma::Col<eT>&, T, bool, bool) [with T = float; dMappedCSC = MappedCSC<double>]':
../inst/include/wrmf_utils.hpp:181:38:   required from 'double initialize_biases(dMappedCSC&, dMappedCSC&, arma::Col<eT>&, arma::Col<eT>&, T, bool, bool, bool, bool) [with T = float; dMappedCSC = MappedCSC<double>]'
  181 |     return initialize_biases_implicit(ConfCSC, ConfCSR, user_bias, item_bias, lambda,
      |            ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  182 |                                       calculate_global_bias,non_negative);
      |                                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
wrmf_init.cpp:31:34:   required from here
   31 |   return initialize_biases<float>(ConfCSC, ConfCSR, user_bias_arma, item_bias_arma,
      |          ~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   32 |                                   lambda, dynamic_lambda, non_negative,
      |                                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   33 |                                   calculate_global_bias, is_explicit_feedback);
      |                                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../inst/include/wrmf_utils.hpp:104:47: warning: comparison of integer expressions of different signedness: 'int' and 'arma::uword' {aka 'unsigned int'} [-Wsign-compare]
  104 |       for (int ix = ConfCSR.col_ptrs[row]; ix < ConfCSR.col_ptrs[row + 1]; ix++)
      |                                            ~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
../inst/include/wrmf_utils.hpp:116:47: warning: comparison of integer expressions of different signedness: 'int' and 'arma::uword' {aka 'unsigned int'} [-Wsign-compare]
  116 |       for (int ix = ConfCSC.col_ptrs[col]; ix < ConfCSC.col_ptrs[col + 1]; ix++)
      |                                            ~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
../inst/include/wrmf_utils.hpp:141:47: warning: comparison of integer expressions of different signedness: 'int' and 'arma::uword' {aka 'unsigned int'} [-Wsign-compare]
  141 |       for (int ix = ConfCSC.col_ptrs[col]; ix < ConfCSC.col_ptrs[col + 1]; ix++)
      |                                            ~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
../inst/include/wrmf_utils.hpp:157:47: warning: comparison of integer expressions of different signedness: 'int' and 'arma::uword' {aka 'unsigned int'} [-Wsign-compare]
  157 |       for (int ix = ConfCSR.col_ptrs[row]; ix < ConfCSR.col_ptrs[row + 1]; ix++)
      |                                            ~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
../inst/include/wrmf_implicit.hpp: In instantiation of 'arma::Col<eT> cg_solver_implicit(const arma::Mat<eT>&, const arma::Col<eT>&, const arma::Col<eT>&, arma::uword, const arma::Mat<eT>&) [with T = double; arma::uword = unsigned int]':
../inst/include/wrmf_implicit.hpp:197:40:   required from 'T als_implicit(const dMappedCSC&, arma::Mat<eT>&, arma::Mat<eT>&, const arma::Mat<eT>&, double, int, unsigned int, unsigned int, bool, bool, double, arma::Col<eT>&, bool) [with T = double; dMappedCSC = MappedCSC<double>]'
  197 |           Y_new = cg_solver_implicit<T>(X_nnz, confidence, init, cg_steps, XtX);
      |                   ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
wrmf_implicit.cpp:11:38:   required from here
   11 |   return (double)als_implicit<double>(Conf, X, Y, XtX, lambda, n_threads, solver,
      |                  ~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   12 |                                       cg_steps, with_biases, is_x_bias_last_row,
      |                                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   13 |                                       global_bias, global_bias_base, initialize_bias_base);
      |                                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../inst/include/wrmf_implicit.hpp:21:22: warning: comparison of integer expressions of different signedness: 'int' and 'const arma::uword' {aka 'const unsigned int'} [-Wsign-compare]
   21 |   for (auto k = 0; k < n_iter; k++) {
      |                    ~~^~~~~~~~
../inst/include/wrmf_implicit.hpp: In instantiation of 'arma::Col<eT> cg_solver_implicit_user_item_bias(const arma::Mat<eT>&, const arma::Col<eT>&, const arma::Col<eT>&, arma::uword, const arma::Mat<eT>&, const arma::Col<eT>&, const arma::Col<eT>&, T) [with T = double; arma::uword = unsigned int]':
../inst/include/wrmf_implicit.hpp:200:55:   required from 'T als_implicit(const dMappedCSC&, arma::Mat<eT>&, arma::Mat<eT>&, const arma::Mat<eT>&, double, int, unsigned int, unsigned int, bool, bool, double, arma::Col<eT>&, bool) [with T = double; dMappedCSC = MappedCSC<double>]'
  200 |           Y_new = cg_solver_implicit_user_item_bias<T>(X_nnz, confidence, init, cg_steps, XtX,
      |                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  201 |                                                        rhs_init, x_biases(idx), global_bias);
      |                                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
wrmf_implicit.cpp:11:38:   required from here
   11 |   return (double)als_implicit<double>(Conf, X, Y, XtX, lambda, n_threads, solver,
      |                  ~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   12 |                                       cg_steps, with_biases, is_x_bias_last_row,
      |                                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   13 |                                       global_bias, global_bias_base, initialize_bias_base);
      |                                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../inst/include/wrmf_implicit.hpp:77:22: warning: comparison of integer expressions of different signedness: 'int' and 'const arma::uword' {aka 'const unsigned int'} [-Wsign-compare]
   77 |   for (auto k = 0; k < n_iter; k++) {
      |                    ~~^~~~~~~~
../inst/include/wrmf_implicit.hpp: In instantiation of 'arma::Col<eT> cg_solver_implicit_global_bias(const arma::Mat<eT>&, const arma::Col<eT>&, const arma::Col<eT>&, arma::uword, const arma::Mat<eT>&, arma::Col<eT>, T) [with T = double; arma::uword = unsigned int]':
../inst/include/wrmf_implicit.hpp:203:52:   required from 'T als_implicit(const dMappedCSC&, arma::Mat<eT>&, arma::Mat<eT>&, const arma::Mat<eT>&, double, int, unsigned int, unsigned int, bool, bool, double, arma::Col<eT>&, bool) [with T = double; dMappedCSC = MappedCSC<double>]'
  203 |           Y_new = cg_solver_implicit_global_bias<T>(X_nnz, confidence, init, cg_steps, XtX,
      |                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  204 |                                                     rhs_init, global_bias);
      |                                                     ~~~~~~~~~~~~~~~~~~~~~~
wrmf_implicit.cpp:11:38:   required from here
   11 |   return (double)als_implicit<double>(Conf, X, Y, XtX, lambda, n_threads, solver,
      |                  ~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   12 |                                       cg_steps, with_biases, is_x_bias_last_row,
      |                                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   13 |                                       global_bias, global_bias_base, initialize_bias_base);
      |                                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../inst/include/wrmf_implicit.hpp:49:22: warning: comparison of integer expressions of different signedness: 'int' and 'const arma::uword' {aka 'const unsigned int'} [-Wsign-compare]
   49 |   for (auto k = 0; k < n_iter; k++) {
      |                    ~~^~~~~~~~
../inst/include/wrmf_implicit.hpp: In instantiation of 'arma::Col<eT> cg_solver_implicit(const arma::Mat<eT>&, const arma::Col<eT>&, const arma::Col<eT>&, arma::uword, const arma::Mat<eT>&) [with T = float; arma::uword = unsigned int]':
../inst/include/wrmf_implicit.hpp:197:40:   required from 'T als_implicit(const dMappedCSC&, arma::Mat<eT>&, arma::Mat<eT>&, const arma::Mat<eT>&, double, int, unsigned int, unsigned int, bool, bool, double, arma::Col<eT>&, bool) [with T = float; dMappedCSC = MappedCSC<double>]'
  197 |           Y_new = cg_solver_implicit<T>(X_nnz, confidence, init, cg_steps, XtX);
      |                   ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
wrmf_implicit.cpp:28:37:   required from here
   28 |   return (double)als_implicit<float>(Conf, X, Y, XtX, lambda, n_threads, solver, cg_steps,
      |                  ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   29 |                                      with_biases, is_x_bias_last_row,
      |                                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   30 |                                      global_bias, global_bias_base, initialize_bias_base);
      |                                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../inst/include/wrmf_implicit.hpp:21:22: warning: comparison of integer expressions of different signedness: 'int' and 'const arma::uword' {aka 'const unsigned int'} [-Wsign-compare]
   21 |   for (auto k = 0; k < n_iter; k++) {
      |                    ~~^~~~~~~~
../inst/include/wrmf_implicit.hpp: In instantiation of 'arma::Col<eT> cg_solver_implicit_user_item_bias(const arma::Mat<eT>&, const arma::Col<eT>&, const arma::Col<eT>&, arma::uword, const arma::Mat<eT>&, const arma::Col<eT>&, const arma::Col<eT>&, T) [with T = float; arma::uword = unsigned int]':
../inst/include/wrmf_implicit.hpp:200:55:   required from 'T als_implicit(const dMappedCSC&, arma::Mat<eT>&, arma::Mat<eT>&, const arma::Mat<eT>&, double, int, unsigned int, unsigned int, bool, bool, double, arma::Col<eT>&, bool) [with T = float; dMappedCSC = MappedCSC<double>]'
  200 |           Y_new = cg_solver_implicit_user_item_bias<T>(X_nnz, confidence, init, cg_steps, XtX,
      |                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  201 |                                                        rhs_init, x_biases(idx), global_bias);
      |                                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
wrmf_implicit.cpp:28:37:   required from here
   28 |   return (double)als_implicit<float>(Conf, X, Y, XtX, lambda, n_threads, solver, cg_steps,
      |                  ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   29 |                                      with_biases, is_x_bias_last_row,
      |                                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   30 |                                      global_bias, global_bias_base, initialize_bias_base);
      |                                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../inst/include/wrmf_implicit.hpp:77:22: warning: comparison of integer expressions of different signedness: 'int' and 'const arma::uword' {aka 'const unsigned int'} [-Wsign-compare]
   77 |   for (auto k = 0; k < n_iter; k++) {
      |                    ~~^~~~~~~~
../inst/include/wrmf_implicit.hpp: In instantiation of 'arma::Col<eT> cg_solver_implicit_global_bias(const arma::Mat<eT>&, const arma::Col<eT>&, const arma::Col<eT>&, arma::uword, const arma::Mat<eT>&, arma::Col<eT>, T) [with T = float; arma::uword = unsigned int]':
../inst/include/wrmf_implicit.hpp:203:52:   required from 'T als_implicit(const dMappedCSC&, arma::Mat<eT>&, arma::Mat<eT>&, const arma::Mat<eT>&, double, int, unsigned int, unsigned int, bool, bool, double, arma::Col<eT>&, bool) [with T = float; dMappedCSC = MappedCSC<double>]'
  203 |           Y_new = cg_solver_implicit_global_bias<T>(X_nnz, confidence, init, cg_steps, XtX,
      |                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  204 |                                                     rhs_init, global_bias);
      |                                                     ~~~~~~~~~~~~~~~~~~~~~~
wrmf_implicit.cpp:28:37:   required from here
   28 |   return (double)als_implicit<float>(Conf, X, Y, XtX, lambda, n_threads, solver, cg_steps,
      |                  ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   29 |                                      with_biases, is_x_bias_last_row,
      |                                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   30 |                                      global_bias, global_bias_base, initialize_bias_base);
      |                                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../inst/include/wrmf_implicit.hpp:49:22: warning: comparison of integer expressions of different signedness: 'int' and 'const arma::uword' {aka 'const unsigned int'} [-Wsign-compare]
   49 |   for (auto k = 0; k < n_iter; k++) {
      |                    ~~^~~~~~~~
In file included from ../inst/include/wrmf_implicit.hpp:1:
../inst/include/nnls.hpp: In instantiation of 'arma::Col<eT> scd_ls_update(const arma::Mat<eT>&, arma::Col<eT>&, arma::uword, double, const arma::Col<eT>&) [with T = double; arma::uword = unsigned int]':
../inst/include/nnls.hpp:45:42:   required from 'arma::Col<eT> c_nnls(const arma::Mat<eT>&, const arma::Col<eT>&, const arma::Col<eT>&, arma::uword, double) [with T = double; arma::uword = unsigned int]'
   45 |   const arma::Col<T> H = scd_ls_update<T>(XtX, mu, max_iter, rel_tol, init);
      |                          ~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../inst/include/wrmf_implicit.hpp:234:28:   required from 'T als_implicit(const dMappedCSC&, arma::Mat<eT>&, arma::Mat<eT>&, const arma::Mat<eT>&, double, int, unsigned int, unsigned int, bool, bool, double, arma::Col<eT>&, bool) [with T = double; dMappedCSC = MappedCSC<double>]'
  234 |           Y_new = c_nnls<T>(lhs, rhs, init, SCD_MAX_ITER, SCD_TOL);
      |                   ~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
wrmf_implicit.cpp:11:38:   required from here
   11 |   return (double)als_implicit<double>(Conf, X, Y, XtX, lambda, n_threads, solver,
      |                  ~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   12 |                                       cg_steps, with_biases, is_x_bias_last_row,
      |                                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   13 |                                       global_bias, global_bias_base, initialize_bias_base);
      |                                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../inst/include/nnls.hpp:17:22: warning: comparison of integer expressions of different signedness: 'int' and 'arma::uword' {aka 'unsigned int'} [-Wsign-compare]
   17 |   for (auto t = 0; t < max_iter; t++) {
      |                    ~~^~~~~~~~~~
../inst/include/nnls.hpp:19:24: warning: comparison of integer expressions of different signedness: 'int' and 'const arma::uword' {aka 'const unsigned int'} [-Wsign-compare]
   19 |     for (auto k = 0; k < XtX.n_cols; k++) {
      |                      ~~^~~~~~~~~~~~
../inst/include/nnls.hpp: In instantiation of 'arma::Col<eT> scd_ls_update(const arma::Mat<eT>&, arma::Col<eT>&, arma::uword, double, const arma::Col<eT>&) [with T = float; arma::uword = unsigned int]':
../inst/include/nnls.hpp:45:42:   required from 'arma::Col<eT> c_nnls(const arma::Mat<eT>&, const arma::Col<eT>&, const arma::Col<eT>&, arma::uword, double) [with T = float; arma::uword = unsigned int]'
   45 |   const arma::Col<T> H = scd_ls_update<T>(XtX, mu, max_iter, rel_tol, init);
      |                          ~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../inst/include/wrmf_implicit.hpp:234:28:   required from 'T als_implicit(const dMappedCSC&, arma::Mat<eT>&, arma::Mat<eT>&, const arma::Mat<eT>&, double, int, unsigned int, unsigned int, bool, bool, double, arma::Col<eT>&, bool) [with T = float; dMappedCSC = MappedCSC<double>]'
  234 |           Y_new = c_nnls<T>(lhs, rhs, init, SCD_MAX_ITER, SCD_TOL);
      |                   ~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
wrmf_implicit.cpp:28:37:   required from here
   28 |   return (double)als_implicit<float>(Conf, X, Y, XtX, lambda, n_threads, solver, cg_steps,
      |                  ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   29 |                                      with_biases, is_x_bias_last_row,
      |                                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   30 |                                      global_bias, global_bias_base, initialize_bias_base);
      |                                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../inst/include/nnls.hpp:17:22: warning: comparison of integer expressions of different signedness: 'int' and 'arma::uword' {aka 'unsigned int'} [-Wsign-compare]
   17 |   for (auto t = 0; t < max_iter; t++) {
      |                    ~~^~~~~~~~~~
../inst/include/nnls.hpp:19:24: warning: comparison of integer expressions of different signedness: 'int' and 'const arma::uword' {aka 'const unsigned int'} [-Wsign-compare]
   19 |     for (auto k = 0; k < XtX.n_cols; k++) {
      |                      ~~^~~~~~~~~~~~
g++-14 -std=gnu++17 -shared -L/usr/local/gcc14/lib64 -L/usr/local/lib64 -o rsparse.so FTRL.o GloVe.o RcppExports.o factorization_machine.o kmeans.o matrix_top_product.o nnls.o rankmf.o utils.o wrmf_explicit.o wrmf_implicit.o wrmf_init.o -fopenmp -L/data/gannet/ripley/R/test-dev/float/libs -l:float.so -Wl,-rpath=/data/gannet/ripley/R/test-dev/float/libs -llapack -lblas -llapack -L/data/gannet/ripley/R/R-devel/lib -lRblas -lgfortran -lm -lquadmath
make[1]: Leaving directory '/data/gannet/ripley/R/packages/tests-devel/rsparse/src'
make[1]: Entering directory '/data/gannet/ripley/R/packages/tests-devel/rsparse/src'
make[1]: Leaving directory '/data/gannet/ripley/R/packages/tests-devel/rsparse/src'
installing to /data/gannet/ripley/R/packages/tests-devel/rsparse.Rcheck/00LOCK-rsparse/00new/rsparse/libs
** R
** data
*** moving datasets to lazyload DB
** inst
** byte-compile and prepare package for lazy loading
** help
*** installing help indices
*** copying figures
** building package indices
** testing if installed package can be loaded from temporary location
** checking absolute paths in shared objects and dynamic libraries
** testing if installed package can be loaded from final location
** testing if installed package keeps a record of temporary installation path
* DONE (rsparse)