[Rcpp-devel] RcppEigen fails on win-builder i386, and a possibly related issue.
Dirk Eddelbuettel
edd at debian.org
Sun May 22 22:16:18 CEST 2016
On 22 May 2016 at 09:13, Dirk Eddelbuettel wrote:
|
| Hi Francois,
|
| Thanks for taking the time to track this down and to create an example.
| I just opened a GitHub issue for it:
| https://github.com/RcppCore/RcppEigen/issues/34
| Feel free to comment there as well.
In that thread on GH, Dan raises a good point: what actually is the supposed
error message? What you have at the end of this long email isn't all that
clear and _still indirect_: "Running examples in 'minimalTest-Ex.R' failed"
For those of us without a windows 32bit machine at hand, can you (or anybody
else) actually produce an error message? Preferably with compiler output?
Dirk
| On 22 May 2016 at 12:09, François Rousset wrote:
| | Hi,
| |
| | RcppEigen no longer passes the CRAN checks for Windows i386 architecture:
| | https://cran.r-project.org/web/checks/check_results_RcppEigen.html
| | This problem seems to have appeared in the middle of last month,
| | presumably following some change on CRAN.
| |
| | A similar problem appeared at the same time in some packages I maintain,
| | which link to RcppEigen. For one package, execution stops on a line of
| | the form
| | MatrixXd
| | someMatrix(MatrixXd(nb,nb).setZero().selfadjointView<Lower>().rankUpdate(
| | anotherMatrix ));
| | I have reduced the code causing the error to a small reproducible
| | example, and since I can reproduce the error only on the win-builder
| | service on CRAN, not on my Windows PC, this example takes the form of a
| | package 'minimalTest'. It can be downloaded from
| | http://kimura.univ-montp2.fr/~rousset/minimalTest_1.1.3.tar.gz.
| |
| | I hope the following may help in correcting RcppEigen (as I think I can
| | circumvent the problem in my package), but I am also curious whether I
| | am missing some obvious error in my code.
| |
| | In this small example, the checks fail (on Windows i386 only; the
| | relevant part of the check log is pasted at the end of this message)
| | when executing
| |
| | mini(14)
| |
| | where the mini() function is
| |
| | // [[Rcpp::export]]
| | int mini( int nb ){
| | MatrixXd swZ(nb,nb);
| | swZ.setZero();
| | Rcout <<"Trivial code:
| | swZ.selfadjointView<Lower>().rankUpdate(swZ):"<<std::endl;
| | swZ.selfadjointView<Lower>().rankUpdate(swZ);
| | Rcout << "after minimal test. "<<std::endl; // not printed when error
| | occurs
| | return(0);
| | }
| |
| | However, the problem occurs only when two other functions, derived from
| | more meaningful functions in the original package, are included in the
| | sources (yet are not called by the tests):
| |
| | // [[Rcpp::export]]
| | List unusedFn1( SEXP XX ) {
| | const MappedSparseMatrix<double> X(as<MappedSparseMatrix<double> >(XX));
| | SparseQR<SparseMatrix<double, Eigen::ColMajor>,
| | Eigen::COLAMDOrdering<int> > spQR(X);
| | SparseMatrix<double> Q_ap(5,5);
| | Q_ap.setZero();
| | List out = List::create(Named("Q_ap") = Q_ap);
| | return(out);
| | }
| |
| | // [[Rcpp::export]]
| | SEXP unusedFn2( SEXP ZZ ) {
| | const Map<MatrixXd> Z(as<Map<MatrixXd> >(ZZ));
| | int c(Z.cols());
| | if (c==0) return(wrap(MatrixXd(0,0)));
| | MatrixXd bidon(MatrixXd(c,c).setZero());
| | MatrixXd
| | swZ(MatrixXd(c,c).setZero().selfadjointView<Lower>().rankUpdate(bidon.transpose()));
| | return(wrap(swZ));
| | }
| |
| | The problem does not occur if either of these two functions is removed
| | from the sources. I found that I could resolve the problem in my
| | original package by removing any Eigen::SparseMatrix-related code from
| | it. Much as in the checks for the small example package, that code was
| | not called in the checks for my original package.
| |
| | The small example package does not contain other C++ or R functions
| | (except those generated automatically by Rcpp).
| |
| | Can anyone make sense of this?
|
| The fact that inclusion of other code, which is not called and should be
| optimized away, is involved is really, really weird.
|
| All I can think of so far is maybe some macro going haywire?
|
| Dirk
|
| | Thanks in advance,
| |
| | F.R.
| |
| | ==============================================
| | ** running examples for arch 'i386' ... ERROR
| | Running examples in 'minimalTest-Ex.R' failed
| | The error most likely occurred in:
| |
| | > base::assign(".ptime", proc.time(), pos = "CheckExEnv")
| | > ### Name: mini
| | > ### Title: Test RcppEigen code
| | > ### Aliases: mini unusedFn1 unusedFn2
| | >
| | > ### ** Examples
| | >
| | > sessionInfo()
| | R Under development (unstable) (2016-05-21 r70655)
| | Platform: i386-w64-mingw32/i386 (32-bit)
| | Running under: Windows Server 2008 x64 (build 6002) Service Pack 2
| |
| | locale:
| | [1] LC_COLLATE=C LC_CTYPE=German_Germany.1252
| | [3] LC_MONETARY=C LC_NUMERIC=C
| | [5] LC_TIME=C
| |
| | attached base packages:
| | [1] stats graphics grDevices utils datasets methods base
| |
| | other attached packages:
| | [1] minimalTest_1.1.3
| |
| | loaded via a namespace (and not attached):
| | [1] Rcpp_0.12.5
| | > mini(14)
| | Trivial code: swZ.selfadjointView<Lower>().rankUpdate(swZ):
| | ** running examples for arch 'x64' ... [1s] OK
| | * checking PDF version of manual ... OK
| | * DONE
| | ===============================================
| | _______________________________________________
| | Rcpp-devel mailing list
| | Rcpp-devel at lists.r-forge.r-project.org
| | https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel
|
| --
| http://dirk.eddelbuettel.com | @eddelbuettel | edd at debian.org
| _______________________________________________
| Rcpp-devel mailing list
| Rcpp-devel at lists.r-forge.r-project.org
| https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel
--
http://dirk.eddelbuettel.com | @eddelbuettel | edd at debian.org
More information about the Rcpp-devel
mailing list