ocbe-uio / BayesMallows

R-package for Bayesian preference learning with the Mallows rank model.
https://ocbe-uio.github.io/BayesMallows/
GNU General Public License v3.0
21 stars 9 forks source link

Here we go again #402

Closed osorensen closed 5 months ago

osorensen commented 5 months ago

This time I checked valgrind before submitting, and then we got an UBSAN issue.

https://www.stats.ox.ac.uk/pub/bdr/memtests/gcc-UBSAN/BayesMallows/

> ### ** Examples
> 
> # Observe one ranking at each of 12 timepoints
> library(ggplot2)
> data <- lapply(seq_len(nrow(potato_visual)), function(i) {
+   setup_rank_data(potato_visual[i, ])
+ })
> 
> initial_values <- sample_prior(
+   n = 200, n_items = 20,
+   priors = set_priors(gamma = 3, lambda = .1))
> 
> mod <- compute_mallows_sequentially(
+   data = data,
+   initial_values = initial_values,
+   smc_options = set_smc_options(n_particles = 500, mcmc_steps = 20))
/data/gannet/ripley/R/test-dev/RcppArmadillo/include/armadillo_bits/Mat_meat.hpp:6280:13: runtime error: reference binding to null pointer of type 'const double'
    #0 0x7f485a9d8182 in arma::Mat<double>::at(unsigned int, unsigned int) const /data/gannet/ripley/R/test-dev/RcppArmadillo/include/armadillo_bits/Mat_meat.hpp:6280
    #1 0x7f485a9d8182 in void arma::op_strans::apply_mat_noalias<double, arma::Mat<double> >(arma::Mat<double>&, arma::Mat<double> const&) /data/gannet/ripley/R/test-dev/RcppArmadillo/include/armadillo_bits/op_strans_meat.hpp:208
    #2 0x7f485acdff66 in void arma::op_strans::apply_mat<double, arma::Mat<double> >(arma::Mat<double>&, arma::Mat<double> const&) /data/gannet/ripley/R/test-dev/RcppArmadillo/include/armadillo_bits/op_strans_meat.hpp:290
    #3 0x7f485acdff66 in void arma::op_strans::apply_direct<arma::Mat<double> >(arma::Mat<arma::Mat<double>::elem_type>&, arma::Mat<double> const&) /data/gannet/ripley/R/test-dev/RcppArmadillo/include/armadillo_bits/op_strans_meat.hpp:383
    #4 0x7f485acdff66 in void arma::op_htrans::apply<arma::Mat<double> >(arma::Mat<arma::Mat<double>::elem_type>&, arma::Op<arma::Mat<double>, arma::op_htrans> const&, arma::arma_not_cx<arma::Mat<double>::elem_type>::result const*) /data/gannet/ripley/R/test-dev/RcppArmadillo/include/armadillo_bits/op_htrans_meat.hpp:366
    #5 0x7f485acdff66 in arma::Mat<double>::Mat<arma::Mat<double>, arma::op_htrans>(arma::Op<arma::Mat<double>, arma::op_htrans> const&) /data/gannet/ripley/R/test-dev/RcppArmadillo/include/armadillo_bits/Mat_meat.hpp:4939
    #6 0x7f485acdff66 in SEXPREC* Rcpp::wrap<arma::Mat<double>, arma::op_htrans>(arma::Op<arma::Mat<double>, arma::op_htrans> const&) /data/gannet/ripley/R/test-dev/RcppArmadillo/include/RcppArmadillo/interface/RcppArmadilloWrap.h:170
    #7 0x7f485acb3b16 in SEXPREC* Rcpp::internal::generic_element_converter<19>::get<arma::Op<arma::Mat<double>, arma::op_htrans> >(arma::Op<arma::Mat<double>, arma::op_htrans> const&) /data/gannet/ripley/R/test-dev/Rcpp/include/Rcpp/vector/converter.h:80
    #8 0x7f485acb3b16 in void Rcpp::Vector<19, Rcpp::PreserveStorage>::replace_element__dispatch__isArgument<Rcpp::traits::named_object<arma::Op<arma::Mat<double>, arma::op_htrans> > >(Rcpp::traits::integral_constant<bool, false>, Rcpp::internal::Proxy_Iterator<Rcpp::internal::generic_proxy<19, Rcpp::PreserveStorage> >, SEXPREC*, long, Rcpp::traits::named_object<arma::Op<arma::Mat<double>, arma::op_htrans> > const&) /data/gannet/ripley/R/test-dev/Rcpp/include/Rcpp/vector/Vector.h:532
    #9 0x7f485acb3b16 in void Rcpp::Vector<19, Rcpp::PreserveStorage>::replace_element__dispatch<Rcpp::traits::named_object<arma::Op<arma::Mat<double>, arma::op_htrans> > >(Rcpp::traits::integral_constant<bool, true>, Rcpp::internal::Proxy_Iterator<Rcpp::internal::generic_proxy<19, Rcpp::PreserveStorage> >, SEXPREC*, long, Rcpp::traits::named_object<arma::Op<arma::Mat<double>, arma::op_htrans> > const&) /data/gannet/ripley/R/test-dev/Rcpp/include/Rcpp/vector/Vector.h:525
    #10 0x7f485acb3b16 in void Rcpp::Vector<19, Rcpp::PreserveStorage>::replace_element<Rcpp::traits::named_object<arma::Op<arma::Mat<double>, arma::op_htrans> > >(Rcpp::internal::Proxy_Iterator<Rcpp::internal::generic_proxy<19, Rcpp::PreserveStorage> >, SEXPREC*, long, Rcpp::traits::named_object<arma::Op<arma::Mat<double>, arma::op_htrans> > const&) /data/gannet/ripley/R/test-dev/Rcpp/include/Rcpp/vector/Vector.h:514
    #11 0x7f485acb3b16 in Rcpp::Vector<19, Rcpp::PreserveStorage> Rcpp::Vector<19, Rcpp::PreserveStorage>::create__dispatch<Rcpp::traits::named_object<bool>, Rcpp::traits::named_object<bool>, Rcpp::traits::named_object<unsigned int>, Rcpp::traits::named_object<arma::Mat<unsigned int> >, Rcpp::traits::named_object<Rcpp::Vector<19, Rcpp::PreserveStorage> >, Rcpp::traits::named_object<unsigned int>, Rcpp::traits::named_object<arma::Op<arma::Mat<double>, arma::op_htrans> >, Rcpp::traits::named_object<Rcpp::Vector<13, Rcpp::PreserveStorage> >, Rcpp::traits::named_object<arma::Col<double> >, Rcpp::traits::named_object<arma::Col<unsigned int> > >(Rcpp::traits::integral_constant<bool, true>, Rcpp::traits::named_object<bool> const&, Rcpp::traits::named_object<bool> const&, Rcpp::traits::named_object<unsigned int> const&, Rcpp::traits::named_object<arma::Mat<unsigned int> > const&, Rcpp::traits::named_object<Rcpp::Vector<19, Rcpp::PreserveStorage> > const&, Rcpp::traits::named_object<unsigned int> const&, Rcpp::traits::named_object<arma::Op<arma::Mat<double>, arma::op_htrans> > const&, Rcpp::traits::named_object<Rcpp::Vector<13, Rcpp::PreserveStorage> > const&, Rcpp::traits::named_object<arma::Col<double> > const&, Rcpp::traits::named_object<arma::Col<unsigned int> > const&) /data/gannet/ripley/R/test-dev/Rcpp/include/Rcpp/generated/Vector__create.h:542
    #12 0x7f485acb3b16 in Rcpp::Vector<19, Rcpp::PreserveStorage> Rcpp::Vector<19, Rcpp::PreserveStorage>::create<Rcpp::traits::named_object<bool>, Rcpp::traits::named_object<bool>, Rcpp::traits::named_object<unsigned int>, Rcpp::traits::named_object<arma::Mat<unsigned int> >, Rcpp::traits::named_object<Rcpp::Vector<19, Rcpp::PreserveStorage> >, Rcpp::traits::named_object<unsigned int>, Rcpp::traits::named_object<arma::Op<arma::Mat<double>, arma::op_htrans> >, Rcpp::traits::named_object<Rcpp::Vector<13, Rcpp::PreserveStorage> >, Rcpp::traits::named_object<arma::Col<double> >, Rcpp::traits::named_object<arma::Col<unsigned int> > >(Rcpp::traits::named_object<bool> const&, Rcpp::traits::named_object<bool> const&, Rcpp::traits::named_object<unsigned int> const&, Rcpp::traits::named_object<arma::Mat<unsigned int> > const&, Rcpp::traits::named_object<Rcpp::Vector<19, Rcpp::PreserveStorage> > const&, Rcpp::traits::named_object<unsigned int> const&, Rcpp::traits::named_object<arma::Op<arma::Mat<double>, arma::op_htrans> > const&, Rcpp::traits::named_object<Rcpp::Vector<13, Rcpp::PreserveStorage> > const&, Rcpp::traits::named_object<arma::Col<double> > const&, Rcpp::traits::named_object<arma::Col<unsigned int> > const&) /data/gannet/ripley/R/test-dev/Rcpp/include/Rcpp/generated/Vector__create.h:502
    #13 0x7f485acb3b16 in SMCData::wrapup() /data/gannet/ripley/R/packages/tests-gcc-SAN/BayesMallows/src/smc_data_class.cpp:70
    #14 0x7f485ac6665d in run_smc(Rcpp::Vector<19, Rcpp::PreserveStorage>, Rcpp::Vector<19, Rcpp::PreserveStorage>, Rcpp::Vector<19, Rcpp::PreserveStorage>, Rcpp::Vector<19, Rcpp::PreserveStorage>, Rcpp::Vector<19, Rcpp::PreserveStorage>, Rcpp::Vector<19, Rcpp::PreserveStorage>, Rcpp::Vector<19, Rcpp::PreserveStorage>, Rcpp::Nullable<arma::Mat<double> >, Rcpp::Nullable<arma::Mat<double> >) /data/gannet/ripley/R/packages/tests-gcc-SAN/BayesMallows/src/run_smc.cpp:61
    #15 0x7f485aa5d18c in _BayesMallows_run_smc /data/gannet/ripley/R/packages/tests-gcc-SAN/BayesMallows/src/RcppExports.cpp:147
    #16 0x58c1b3 in R_doDotCall /data/gannet/ripley/R/svn/R-devel/src/main/dotcode.c:790
    #17 0x652c7f in bcEval /data/gannet/ripley/R/svn/R-devel/src/main/eval.c:8226
    #18 0x68474f in Rf_eval /data/gannet/ripley/R/svn/R-devel/src/main/eval.c:1152
    #19 0x68a275 in R_execClosure /data/gannet/ripley/R/svn/R-devel/src/main/eval.c:2359
    #20 0x68ca0b in applyClosure_core /data/gannet/ripley/R/svn/R-devel/src/main/eval.c:2250
    #21 0x68d6d2 in Rf_applyClosure /data/gannet/ripley/R/svn/R-devel/src/main/eval.c:2270
    #22 0x63fcdd in bcEval /data/gannet/ripley/R/svn/R-devel/src/main/eval.c:7647
    #23 0x68474f in Rf_eval /data/gannet/ripley/R/svn/R-devel/src/main/eval.c:1152
    #24 0x68a275 in R_execClosure /data/gannet/ripley/R/svn/R-devel/src/main/eval.c:2359
    #25 0x68ca0b in applyClosure_core /data/gannet/ripley/R/svn/R-devel/src/main/eval.c:2250
    #26 0x68d6d2 in Rf_applyClosure /data/gannet/ripley/R/svn/R-devel/src/main/eval.c:2270
    #27 0x684ced in Rf_eval /data/gannet/ripley/R/svn/R-devel/src/main/eval.c:1270
    #28 0x692757 in do_set /data/gannet/ripley/R/svn/R-devel/src/main/eval.c:3550
    #29 0x6850c8 in Rf_eval /data/gannet/ripley/R/svn/R-devel/src/main/eval.c:1222
    #30 0x70696e in Rf_ReplIteration /data/gannet/ripley/R/svn/R-devel/src/main/main.c:262
    #31 0x707001 in R_ReplConsole /data/gannet/ripley/R/svn/R-devel/src/main/main.c:314
    #32 0x707144 in run_Rmainloop /data/gannet/ripley/R/svn/R-devel/src/main/main.c:1216
    #33 0x707192 in Rf_mainloop /data/gannet/ripley/R/svn/R-devel/src/main/main.c:1223
    #34 0x41c7b8 in main /data/gannet/ripley/R/svn/R-devel/src/main/Rmain.c:29
    #35 0x7f486e62950f in __libc_start_call_main (/lib64/libc.so.6+0x2950f) (BuildId: 8257ee907646e9b057197533d1e4ac8ede7a9c5c)
    #36 0x7f486e6295c8 in __libc_start_main_alias_2 (/lib64/libc.so.6+0x295c8) (BuildId: 8257ee907646e9b057197533d1e4ac8ede7a9c5c)
    #37 0x41f014 in _start (/data/gannet/ripley/R/gcc-SAN/bin/exec/R+0x41f014) (BuildId: 2357b3d47b677776b3078d64c9f2013b3126e3a5)

> 

Must reproduce it on my Docker image and fix.

osorensen commented 5 months ago

Reproduce it on Docker. Here is the relevant part:

> example("compute_mallows_sequentially", "BayesMallows")

cmpt__> # Observe one ranking at each of 12 timepoints
cmpt__> library(ggplot2)

cmpt__> data <- lapply(seq_len(nrow(potato_visual)), function(i) {
cmpt__+   setup_rank_data(potato_visual[i, ])
cmpt__+ })

cmpt__> initial_values <- sample_prior(
cmpt__+   n = 200, n_items = 20,
cmpt__+   priors = set_priors(gamma = 3, lambda = .1))

cmpt__> mod <- compute_mallows_sequentially(
cmpt__+   data = data,
cmpt__+   initial_values = initial_values,
cmpt__+   smc_options = set_smc_options(n_particles = 500, mcmc_steps = 20))
/usr/local/lib/R/site-library/RcppArmadillo/include/armadillo_bits/Mat_meat.hpp:6280:13: runtime error: reference binding to null pointer of type 'const double'
osorensen commented 5 months ago

All good after adding user IDs.

> example("compute_mallows_sequentially", "BayesMallows")

cmpt__> # Observe one ranking at each of 12 timepoints
cmpt__> library(ggplot2)

cmpt__> data <- lapply(seq_len(nrow(potato_visual)), function(i) {
cmpt__+   setup_rank_data(potato_visual[i, ], user_ids = i)
cmpt__+ })

cmpt__> initial_values <- sample_prior(
cmpt__+   n = 200, n_items = 20,
cmpt__+   priors = set_priors(gamma = 3, lambda = .1))

cmpt__> mod <- compute_mallows_sequentially(
cmpt__+   data = data,
cmpt__+   initial_values = initial_values,
cmpt__+   smc_options = set_smc_options(n_particles = 500, mcmc_steps = 20))

cmpt__> # We can see the acceptance ratio of the move step for each timepoint:
cmpt__> get_acceptance_ratios(mod)