Skip to content

Commit 73f5391

Browse files
committedJul 27, 2018
build on windows - related to dselivanov#20
1 parent a0df549 commit 73f5391

15 files changed

+118
-96
lines changed
 

‎.gitignore

-1
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,3 @@ config.log
1616
autom4te.cache
1717

1818
src/Makevars
19-
R/configure.R

‎DESCRIPTION

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
Package: rsparse
22
Type: Package
33
Title: Statistical Learning on Sparse Matrices
4-
Version: 0.3.0.4
4+
Version: 0.3.1
55
Authors@R: c(
66
person("Dmitriy", "Selivanov", role=c("aut", "cre", "cph"), email="selivanov.dmitriy@gmail.com"),
77
person("Drew", "Schmidt", role="ctb", comment="configure script for BLAS, LAPACK detection"),

‎R/BaseRecommender.R

+4-4
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@ BaseRecommender = R6::R6Class(
22
inherit = mlapi::mlapiDecomposition,
33
classname = "BaseRecommender",
44
public = list(
5-
predict = function(x, k, not_recommend = x, items_exclude = NULL, ...) {
5+
predict = function(x, k, not_recommend = x, items_exclude = integer(0), ...) {
66
items_exclude = unique(items_exclude)
77

8-
if(!(is.null(items_exclude) || is.character(items_exclude) || is.integer(items_exclude)))
9-
stop("items_exclude should be one of NULL/character/integer")
8+
if(!(is.character(items_exclude) || is.integer(items_exclude)))
9+
stop("items_exclude should be one of character/integer")
1010

1111
stopifnot(private$item_ids == colnames(x))
1212
stopifnot(is.null(not_recommend) || inherits(not_recommend, "sparseMatrix"))
@@ -46,7 +46,7 @@ BaseRecommender = R6::R6Class(
4646
}
4747
),
4848
private = list(
49-
predict_low_level = function(user_embeddings, item_embeddings, k, not_recommend, items_exclude = NULL, ...) {
49+
predict_low_level = function(user_embeddings, item_embeddings, k, not_recommend, items_exclude = integer(0), ...) {
5050

5151
flog.debug("BaseRecommender$predict(): calling `RhpcBLASctl::blas_set_num_threads(1)` (to avoid thread contention)")
5252
RhpcBLASctl::blas_set_num_threads(1)

‎R/RcppExports.R

+16-16
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,6 @@
11
# Generated by using Rcpp::compileAttributes() -> do not edit by hand
22
# Generator token: 10BE3573-1514-4C36-9D1C-5A225CD40393
33

4-
get_ftrl_weights <- function(R_model) {
5-
.Call('_rsparse_get_ftrl_weights', PACKAGE = 'rsparse', R_model)
6-
}
7-
8-
ftrl_partial_fit <- function(m, y, R_model, weights, do_update = 1L, n_threads = 1L) {
9-
.Call('_rsparse_ftrl_partial_fit', PACKAGE = 'rsparse', m, y, R_model, weights, do_update, n_threads)
10-
}
11-
124
fm_create_param <- function(learning_rate_w, learning_rate_v, rank, lambda_w, lambda_v, w0_R, w_R, v_R, grad_w2_R, grad_v2_R, task, intercept) {
135
.Call('_rsparse_fm_create_param', PACKAGE = 'rsparse', learning_rate_w, learning_rate_v, rank, lambda_w, lambda_v, w0_R, w_R, v_R, grad_w2_R, grad_v2_R, task, intercept)
146
}
@@ -41,6 +33,18 @@ is_invalid_ptr <- function(sexp_ptr) {
4133
.Call('_rsparse_is_invalid_ptr', PACKAGE = 'rsparse', sexp_ptr)
4234
}
4335

36+
get_ftrl_weights <- function(R_model) {
37+
.Call('_rsparse_get_ftrl_weights', PACKAGE = 'rsparse', R_model)
38+
}
39+
40+
ftrl_partial_fit <- function(m, y, R_model, weights, do_update = 1L, n_threads = 1L) {
41+
.Call('_rsparse_ftrl_partial_fit', PACKAGE = 'rsparse', m, y, R_model, weights, do_update, n_threads)
42+
}
43+
44+
arma_kmeans <- function(x, k, seed_mode, n_iter, verbose, result) {
45+
.Call('_rsparse_arma_kmeans', PACKAGE = 'rsparse', x, k, seed_mode, n_iter, verbose, result)
46+
}
47+
4448
csr_dense_tcrossprod <- function(x_csr_r, y_transposed, num_threads = 1L) {
4549
.Call('_rsparse_csr_dense_tcrossprod', PACKAGE = 'rsparse', x_csr_r, y_transposed, num_threads)
4650
}
@@ -49,6 +53,10 @@ dense_csc_prod <- function(x_r, y_csc_r, num_threads = 1L) {
4953
.Call('_rsparse_dense_csc_prod', PACKAGE = 'rsparse', x_r, y_csc_r, num_threads)
5054
}
5155

56+
omp_thread_count <- function() {
57+
.Call('_rsparse_omp_thread_count', PACKAGE = 'rsparse')
58+
}
59+
5260
als_implicit_double <- function(m_csc_r, X, Y, lambda, n_threads, solver, cg_steps = 3L) {
5361
.Call('_rsparse_als_implicit_double', PACKAGE = 'rsparse', m_csc_r, X, Y, lambda, n_threads, solver, cg_steps)
5462
}
@@ -65,14 +73,6 @@ top_product <- function(x, y, k, n_threads, not_recommend_r, exclude) {
6573
.Call('_rsparse_top_product', PACKAGE = 'rsparse', x, y, k, n_threads, not_recommend_r, exclude)
6674
}
6775

68-
arma_kmeans <- function(x, k, seed_mode, n_iter, verbose, result) {
69-
.Call('_rsparse_arma_kmeans', PACKAGE = 'rsparse', x, k, seed_mode, n_iter, verbose, result)
70-
}
71-
72-
omp_thread_count <- function() {
73-
.Call('_rsparse_omp_thread_count', PACKAGE = 'rsparse')
74-
}
75-
7676
cpp_make_sparse_approximation <- function(mat_template, X, Y, sparse_matrix_type, n_threads) {
7777
.Call('_rsparse_cpp_make_sparse_approximation', PACKAGE = 'rsparse', mat_template, X, Y, sparse_matrix_type, n_threads)
7878
}

‎R/configure.R

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
SINGLE_PRECISION_BLAS_AVAILABLE = FALSE
2+
SINGLE_PRECISION_LAPACK_AVAILABLE = FALSE

‎R/configure.R.in

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
SINGE_PRECISION_BLAS_AVAILABLE = @SINGE_PRECISION_BLAS_AVAILABLE@
2-
SINGE_PRECISION_LAPACK_AVAILABLE = @SINGE_PRECISION_LAPACK_AVAILABLE@
1+
SINGLE_PRECISION_BLAS_AVAILABLE = @SINGLE_PRECISION_BLAS_AVAILABLE@
2+
SINGLE_PRECISION_LAPACK_AVAILABLE = @SINGLE_PRECISION_LAPACK_AVAILABLE@

‎R/model_WRMF.R

+1-1
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ WRMF = R6::R6Class(
123123
private$feedback = match.arg(feedback)
124124

125125
if(private$precision == "float" && solver == "cholesky")
126-
if(!SINGE_PRECISION_LAPACK_AVAILABLE)
126+
if(!SINGLE_PRECISION_LAPACK_AVAILABLE)
127127
stop("single precision lapack not available - can't solve for precison='float'")
128128

129129
if(private$feedback == "explicit" && private$precision == "float")

‎README.md

+8
Original file line numberDiff line numberDiff line change
@@ -71,3 +71,11 @@ Here is example of `rsparse::WRMF` on [lastfm360k](https://www.upf.edu/web/mtg/l
7171
# API
7272
7373
We follow [mlapi](https://github.com/dselivanov/mlapi) conventions.
74+
75+
# Configure
76+
77+
Generate configure:
78+
79+
```sh
80+
autoconf configure.ac > configure && chmod +x configure
81+
```

‎configure

+10-6
Original file line numberDiff line numberDiff line change
@@ -582,10 +582,11 @@ PACKAGE_BUGREPORT=
582582
PACKAGE_URL=
583583

584584
ac_unique_file="DESCRIPTION"
585-
ac_subst_vars='SINGE_PRECISION_BLAS_AVAILABLE
586-
SINGE_PRECISION_LAPACK_AVAILABLE
585+
ac_subst_vars='SINGLE_PRECISION_BLAS_AVAILABLE
586+
SINGLE_PRECISION_LAPACK_AVAILABLE
587587
LTLIBOBJS
588588
LIBOBJS
589+
DSINGLE_PRECISION_LAPACK_AVAILABLE
589590
ARMA_BLAS
590591
OPENMP_CXXFLAGS
591592
ac_ct_CXX
@@ -3045,23 +3046,25 @@ fi
30453046

30463047
# Set additional object files and messages
30473048
ARMA_BLAS=""
3048-
SINGE_PRECISION_BLAS_AVAILABLE="FALSE"
3049+
SINGLE_PRECISION_BLAS_AVAILABLE="FALSE"
30493050

30503051
if test "X${HAVESBLAS}" = "Xno"; then
30513052
echo "* NOTE: defining ARMA_DONT_USE_BLAS"
30523053
echo "* WARNING: using Armadillo reference BLAS implementation"
30533054
ARMA_BLAS="${ARMA_BLAS} -DARMA_DONT_USE_BLAS"
30543055
else
30553056
echo "* NOTE: using system-wide BLAS"
3056-
SINGE_PRECISION_BLAS_AVAILABLE="TRUE"
3057+
SINGLE_PRECISION_BLAS_AVAILABLE="TRUE"
30573058
fi
30583059

30593060
# Set additional object files and messages
3060-
SINGE_PRECISION_LAPACK_AVAILABLE="FALSE"
3061+
SINGLE_PRECISION_LAPACK_AVAILABLE="FALSE"
3062+
DSINGLE_PRECISION_LAPACK_AVAILABLE=""
30613063

30623064
if test "X${HAVESLAPACK}" = "Xyes"; then
30633065
echo "* NOTE: using system-wide LAPACK"
3064-
SINGE_PRECISION_LAPACK_AVAILABLE="TRUE"
3066+
SINGLE_PRECISION_LAPACK_AVAILABLE="TRUE"
3067+
DSINGLE_PRECISION_LAPACK_AVAILABLE="-DSINGLE_PRECISION_LAPACK_AVAILABLE"
30653068
else
30663069
echo "* WARNING: single precision LAPACK is not available"
30673070
fi
@@ -3407,6 +3410,7 @@ $as_echo "$ac_cv_prog_cxx_openmp" >&6; }
34073410

34083411

34093412

3413+
34103414
ac_config_files="$ac_config_files src/Makevars"
34113415

34123416
cat >confcache <<\_ACEOF

‎configure.ac

+9-6
Original file line numberDiff line numberDiff line change
@@ -63,23 +63,25 @@ fi
6363

6464
# Set additional object files and messages
6565
ARMA_BLAS=""
66-
SINGE_PRECISION_BLAS_AVAILABLE="FALSE"
66+
SINGLE_PRECISION_BLAS_AVAILABLE="FALSE"
6767

6868
if test "X${HAVESBLAS}" = "Xno"; then
6969
echo "* NOTE: defining ARMA_DONT_USE_BLAS"
7070
echo "* WARNING: using Armadillo reference BLAS implementation"
7171
ARMA_BLAS="${ARMA_BLAS} -DARMA_DONT_USE_BLAS"
7272
else
7373
echo "* NOTE: using system-wide BLAS"
74-
SINGE_PRECISION_BLAS_AVAILABLE="TRUE"
74+
SINGLE_PRECISION_BLAS_AVAILABLE="TRUE"
7575
fi
7676

7777
# Set additional object files and messages
78-
SINGE_PRECISION_LAPACK_AVAILABLE="FALSE"
78+
SINGLE_PRECISION_LAPACK_AVAILABLE="FALSE"
79+
DSINGLE_PRECISION_LAPACK_AVAILABLE=""
7980

8081
if test "X${HAVESLAPACK}" = "Xyes"; then
8182
echo "* NOTE: using system-wide LAPACK"
82-
SINGE_PRECISION_LAPACK_AVAILABLE="TRUE"
83+
SINGLE_PRECISION_LAPACK_AVAILABLE="TRUE"
84+
DSINGLE_PRECISION_LAPACK_AVAILABLE="-DSINGLE_PRECISION_LAPACK_AVAILABLE"
8385
else
8486
echo "* WARNING: single precision LAPACK is not available"
8587
fi
@@ -127,9 +129,10 @@ dnl this the meat of R's m4/openmp.m4
127129

128130
AC_SUBST(OPENMP_CXXFLAGS)
129131
AC_SUBST(ARMA_BLAS)
132+
AC_SUBST(DSINGLE_PRECISION_LAPACK_AVAILABLE)
130133
AC_OUTPUT(src/Makevars)
131134

132-
AC_SUBST(SINGE_PRECISION_LAPACK_AVAILABLE)
133-
AC_SUBST(SINGE_PRECISION_BLAS_AVAILABLE)
135+
AC_SUBST(SINGLE_PRECISION_LAPACK_AVAILABLE)
136+
AC_SUBST(SINGLE_PRECISION_BLAS_AVAILABLE)
134137
AC_OUTPUT([R/configure.R])
135138

‎src/Makevars.in

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
PKG_CXXFLAGS = @OPENMP_CXXFLAGS@ -DARMA_32BIT_WORD @ARMA_BLAS@
1+
PKG_CXXFLAGS = @OPENMP_CXXFLAGS@ -DARMA_32BIT_WORD @ARMA_BLAS@ @DSINGLE_PRECISION_LAPACK_AVAILABLE@
22
PKG_LIBS = @OPENMP_CXXFLAGS@ $(LAPACK_LIBS) $(BLAS_LIBS) $(FLIBS)
33

44
CXX_STD = CXX11

‎src/Makevars.win

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
PKG_CXXFLAGS = $(SHLIB_OPENMP_CXXFLAGS) -DARMA_32BIT_WORD -DARMA_DONT_USE_BLAS
2+
PKG_LIBS = $(SHLIB_OPENMP_CXXFLAGS) $(LAPACK_LIBS) $(BLAS_LIBS) $(FLIBS)
3+
4+
CXX_STD = CXX11

‎src/RcppExports.cpp

+57-57
Original file line numberDiff line numberDiff line change
@@ -6,33 +6,6 @@
66

77
using namespace Rcpp;
88

9-
// get_ftrl_weights
10-
NumericVector get_ftrl_weights(const List& R_model);
11-
RcppExport SEXP _rsparse_get_ftrl_weights(SEXP R_modelSEXP) {
12-
BEGIN_RCPP
13-
Rcpp::RObject rcpp_result_gen;
14-
Rcpp::RNGScope rcpp_rngScope_gen;
15-
Rcpp::traits::input_parameter< const List& >::type R_model(R_modelSEXP);
16-
rcpp_result_gen = Rcpp::wrap(get_ftrl_weights(R_model));
17-
return rcpp_result_gen;
18-
END_RCPP
19-
}
20-
// ftrl_partial_fit
21-
NumericVector ftrl_partial_fit(const S4& m, const NumericVector& y, const List& R_model, const NumericVector& weights, int do_update, int n_threads);
22-
RcppExport SEXP _rsparse_ftrl_partial_fit(SEXP mSEXP, SEXP ySEXP, SEXP R_modelSEXP, SEXP weightsSEXP, SEXP do_updateSEXP, SEXP n_threadsSEXP) {
23-
BEGIN_RCPP
24-
Rcpp::RObject rcpp_result_gen;
25-
Rcpp::RNGScope rcpp_rngScope_gen;
26-
Rcpp::traits::input_parameter< const S4& >::type m(mSEXP);
27-
Rcpp::traits::input_parameter< const NumericVector& >::type y(ySEXP);
28-
Rcpp::traits::input_parameter< const List& >::type R_model(R_modelSEXP);
29-
Rcpp::traits::input_parameter< const NumericVector& >::type weights(weightsSEXP);
30-
Rcpp::traits::input_parameter< int >::type do_update(do_updateSEXP);
31-
Rcpp::traits::input_parameter< int >::type n_threads(n_threadsSEXP);
32-
rcpp_result_gen = Rcpp::wrap(ftrl_partial_fit(m, y, R_model, weights, do_update, n_threads));
33-
return rcpp_result_gen;
34-
END_RCPP
35-
}
369
// fm_create_param
3710
SEXP fm_create_param(float learning_rate_w, float learning_rate_v, int rank, float lambda_w, float lambda_v, Rcpp::IntegerVector& w0_R, Rcpp::IntegerVector& w_R, Rcpp::IntegerMatrix& v_R, Rcpp::IntegerVector& grad_w2_R, Rcpp::IntegerMatrix& grad_v2_R, const Rcpp::String task, int intercept);
3811
RcppExport SEXP _rsparse_fm_create_param(SEXP learning_rate_wSEXP, SEXP learning_rate_vSEXP, SEXP rankSEXP, SEXP lambda_wSEXP, SEXP lambda_vSEXP, SEXP w0_RSEXP, SEXP w_RSEXP, SEXP v_RSEXP, SEXP grad_w2_RSEXP, SEXP grad_v2_RSEXP, SEXP taskSEXP, SEXP interceptSEXP) {
@@ -137,6 +110,49 @@ BEGIN_RCPP
137110
return rcpp_result_gen;
138111
END_RCPP
139112
}
113+
// get_ftrl_weights
114+
NumericVector get_ftrl_weights(const List& R_model);
115+
RcppExport SEXP _rsparse_get_ftrl_weights(SEXP R_modelSEXP) {
116+
BEGIN_RCPP
117+
Rcpp::RObject rcpp_result_gen;
118+
Rcpp::RNGScope rcpp_rngScope_gen;
119+
Rcpp::traits::input_parameter< const List& >::type R_model(R_modelSEXP);
120+
rcpp_result_gen = Rcpp::wrap(get_ftrl_weights(R_model));
121+
return rcpp_result_gen;
122+
END_RCPP
123+
}
124+
// ftrl_partial_fit
125+
NumericVector ftrl_partial_fit(const S4& m, const NumericVector& y, const List& R_model, const NumericVector& weights, int do_update, int n_threads);
126+
RcppExport SEXP _rsparse_ftrl_partial_fit(SEXP mSEXP, SEXP ySEXP, SEXP R_modelSEXP, SEXP weightsSEXP, SEXP do_updateSEXP, SEXP n_threadsSEXP) {
127+
BEGIN_RCPP
128+
Rcpp::RObject rcpp_result_gen;
129+
Rcpp::RNGScope rcpp_rngScope_gen;
130+
Rcpp::traits::input_parameter< const S4& >::type m(mSEXP);
131+
Rcpp::traits::input_parameter< const NumericVector& >::type y(ySEXP);
132+
Rcpp::traits::input_parameter< const List& >::type R_model(R_modelSEXP);
133+
Rcpp::traits::input_parameter< const NumericVector& >::type weights(weightsSEXP);
134+
Rcpp::traits::input_parameter< int >::type do_update(do_updateSEXP);
135+
Rcpp::traits::input_parameter< int >::type n_threads(n_threadsSEXP);
136+
rcpp_result_gen = Rcpp::wrap(ftrl_partial_fit(m, y, R_model, weights, do_update, n_threads));
137+
return rcpp_result_gen;
138+
END_RCPP
139+
}
140+
// arma_kmeans
141+
int arma_kmeans(const arma::dmat& x, const int k, const int seed_mode, const int n_iter, bool verbose, Rcpp::NumericMatrix& result);
142+
RcppExport SEXP _rsparse_arma_kmeans(SEXP xSEXP, SEXP kSEXP, SEXP seed_modeSEXP, SEXP n_iterSEXP, SEXP verboseSEXP, SEXP resultSEXP) {
143+
BEGIN_RCPP
144+
Rcpp::RObject rcpp_result_gen;
145+
Rcpp::RNGScope rcpp_rngScope_gen;
146+
Rcpp::traits::input_parameter< const arma::dmat& >::type x(xSEXP);
147+
Rcpp::traits::input_parameter< const int >::type k(kSEXP);
148+
Rcpp::traits::input_parameter< const int >::type seed_mode(seed_modeSEXP);
149+
Rcpp::traits::input_parameter< const int >::type n_iter(n_iterSEXP);
150+
Rcpp::traits::input_parameter< bool >::type verbose(verboseSEXP);
151+
Rcpp::traits::input_parameter< Rcpp::NumericMatrix& >::type result(resultSEXP);
152+
rcpp_result_gen = Rcpp::wrap(arma_kmeans(x, k, seed_mode, n_iter, verbose, result));
153+
return rcpp_result_gen;
154+
END_RCPP
155+
}
140156
// csr_dense_tcrossprod
141157
Rcpp::NumericMatrix csr_dense_tcrossprod(const Rcpp::S4& x_csr_r, const arma::Mat<double>& y_transposed, int num_threads);
142158
RcppExport SEXP _rsparse_csr_dense_tcrossprod(SEXP x_csr_rSEXP, SEXP y_transposedSEXP, SEXP num_threadsSEXP) {
@@ -163,6 +179,16 @@ BEGIN_RCPP
163179
return rcpp_result_gen;
164180
END_RCPP
165181
}
182+
// omp_thread_count
183+
int omp_thread_count();
184+
RcppExport SEXP _rsparse_omp_thread_count() {
185+
BEGIN_RCPP
186+
Rcpp::RObject rcpp_result_gen;
187+
Rcpp::RNGScope rcpp_rngScope_gen;
188+
rcpp_result_gen = Rcpp::wrap(omp_thread_count());
189+
return rcpp_result_gen;
190+
END_RCPP
191+
}
166192
// als_implicit_double
167193
double als_implicit_double(const Rcpp::S4& m_csc_r, arma::mat& X, arma::mat& Y, double lambda, unsigned n_threads, unsigned solver, unsigned cg_steps);
168194
RcppExport SEXP _rsparse_als_implicit_double(SEXP m_csc_rSEXP, SEXP XSEXP, SEXP YSEXP, SEXP lambdaSEXP, SEXP n_threadsSEXP, SEXP solverSEXP, SEXP cg_stepsSEXP) {
@@ -228,32 +254,6 @@ BEGIN_RCPP
228254
return rcpp_result_gen;
229255
END_RCPP
230256
}
231-
// arma_kmeans
232-
int arma_kmeans(const arma::dmat& x, const int k, const int seed_mode, const int n_iter, bool verbose, Rcpp::NumericMatrix& result);
233-
RcppExport SEXP _rsparse_arma_kmeans(SEXP xSEXP, SEXP kSEXP, SEXP seed_modeSEXP, SEXP n_iterSEXP, SEXP verboseSEXP, SEXP resultSEXP) {
234-
BEGIN_RCPP
235-
Rcpp::RObject rcpp_result_gen;
236-
Rcpp::RNGScope rcpp_rngScope_gen;
237-
Rcpp::traits::input_parameter< const arma::dmat& >::type x(xSEXP);
238-
Rcpp::traits::input_parameter< const int >::type k(kSEXP);
239-
Rcpp::traits::input_parameter< const int >::type seed_mode(seed_modeSEXP);
240-
Rcpp::traits::input_parameter< const int >::type n_iter(n_iterSEXP);
241-
Rcpp::traits::input_parameter< bool >::type verbose(verboseSEXP);
242-
Rcpp::traits::input_parameter< Rcpp::NumericMatrix& >::type result(resultSEXP);
243-
rcpp_result_gen = Rcpp::wrap(arma_kmeans(x, k, seed_mode, n_iter, verbose, result));
244-
return rcpp_result_gen;
245-
END_RCPP
246-
}
247-
// omp_thread_count
248-
int omp_thread_count();
249-
RcppExport SEXP _rsparse_omp_thread_count() {
250-
BEGIN_RCPP
251-
Rcpp::RObject rcpp_result_gen;
252-
Rcpp::RNGScope rcpp_rngScope_gen;
253-
rcpp_result_gen = Rcpp::wrap(omp_thread_count());
254-
return rcpp_result_gen;
255-
END_RCPP
256-
}
257257
// cpp_make_sparse_approximation
258258
Rcpp::NumericVector cpp_make_sparse_approximation(const Rcpp::S4& mat_template, arma::mat& X, arma::mat& Y, int sparse_matrix_type, unsigned n_threads);
259259
RcppExport SEXP _rsparse_cpp_make_sparse_approximation(SEXP mat_templateSEXP, SEXP XSEXP, SEXP YSEXP, SEXP sparse_matrix_typeSEXP, SEXP n_threadsSEXP) {
@@ -282,8 +282,6 @@ END_RCPP
282282
}
283283

284284
static const R_CallMethodDef CallEntries[] = {
285-
{"_rsparse_get_ftrl_weights", (DL_FUNC) &_rsparse_get_ftrl_weights, 1},
286-
{"_rsparse_ftrl_partial_fit", (DL_FUNC) &_rsparse_ftrl_partial_fit, 6},
287285
{"_rsparse_fm_create_param", (DL_FUNC) &_rsparse_fm_create_param, 12},
288286
{"_rsparse_fm_create_model", (DL_FUNC) &_rsparse_fm_create_model, 1},
289287
{"_rsparse_fill_float_matrix_randn", (DL_FUNC) &_rsparse_fill_float_matrix_randn, 2},
@@ -292,14 +290,16 @@ static const R_CallMethodDef CallEntries[] = {
292290
{"_rsparse_fill_float_vector", (DL_FUNC) &_rsparse_fill_float_vector, 2},
293291
{"_rsparse_fm_partial_fit", (DL_FUNC) &_rsparse_fm_partial_fit, 6},
294292
{"_rsparse_is_invalid_ptr", (DL_FUNC) &_rsparse_is_invalid_ptr, 1},
293+
{"_rsparse_get_ftrl_weights", (DL_FUNC) &_rsparse_get_ftrl_weights, 1},
294+
{"_rsparse_ftrl_partial_fit", (DL_FUNC) &_rsparse_ftrl_partial_fit, 6},
295+
{"_rsparse_arma_kmeans", (DL_FUNC) &_rsparse_arma_kmeans, 6},
295296
{"_rsparse_csr_dense_tcrossprod", (DL_FUNC) &_rsparse_csr_dense_tcrossprod, 3},
296297
{"_rsparse_dense_csc_prod", (DL_FUNC) &_rsparse_dense_csc_prod, 3},
298+
{"_rsparse_omp_thread_count", (DL_FUNC) &_rsparse_omp_thread_count, 0},
297299
{"_rsparse_als_implicit_double", (DL_FUNC) &_rsparse_als_implicit_double, 7},
298300
{"_rsparse_als_implicit_float", (DL_FUNC) &_rsparse_als_implicit_float, 7},
299301
{"_rsparse_als_loss_explicit", (DL_FUNC) &_rsparse_als_loss_explicit, 5},
300302
{"_rsparse_top_product", (DL_FUNC) &_rsparse_top_product, 6},
301-
{"_rsparse_arma_kmeans", (DL_FUNC) &_rsparse_arma_kmeans, 6},
302-
{"_rsparse_omp_thread_count", (DL_FUNC) &_rsparse_omp_thread_count, 0},
303303
{"_rsparse_cpp_make_sparse_approximation", (DL_FUNC) &_rsparse_cpp_make_sparse_approximation, 5},
304304
{"_rsparse_arma_svd_econ", (DL_FUNC) &_rsparse_arma_svd_econ, 1},
305305
{NULL, NULL, 0}

‎src/SolverAlsWrmf.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ double als_implicit_double(const Rcpp::S4 &m_csc_r,
9696
return (double)als_implicit_cpp<double>(Conf, X, Y, lambda, n_threads, solver, cg_steps);
9797
}
9898

99+
#ifdef SINGLE_PRECISION_LAPACK_AVAILABLE
99100
// [[Rcpp::export]]
100101
double als_implicit_float(const Rcpp::S4 &m_csc_r,
101102
Rcpp::S4 &XR,
@@ -110,6 +111,7 @@ double als_implicit_float(const Rcpp::S4 &m_csc_r,
110111
arma::fmat Y = arma::fmat((float *)YRM.begin(), YRM.nrow(), YRM.ncol(), false, true);
111112
return (double)als_implicit_cpp<float>(Conf, X, Y, lambda, n_threads, solver, cg_steps);
112113
}
114+
#endif
113115

114116
// [[Rcpp::export]]
115117
double als_loss_explicit(const Rcpp::S4 &m_csc_r, arma::mat& X, arma::mat& Y, double lambda, unsigned n_threads) {

‎tests/testthat/test-wrmf.R

+1-1
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ test_that("test WRMF core", {
4949
}
5050
})
5151

52-
if(SINGE_PRECISION_LAPACK_AVAILABLE)
52+
if(SINGLE_PRECISION_LAPACK_AVAILABLE)
5353
test_that("test WRMF FLOAT", {
5454
params = expand.grid(solver = c("conjugate_gradient", "cholesky"),
5555
feedback = c("implicit"),

0 commit comments

Comments
 (0)
Please sign in to comment.