From: Soeren S. <so...@de...> - 2014-02-24 15:48:53
|
Dear all, trying to get swig-R to work with shogun on debian sid (swig 2.0.11) I am seeing a regression from swig2.0.4 with output typemaps no longer working. Due to 2 newly added lines if (inherits(self, "ExternalReference")) self = slot(self,"ref") if (inherits(preallocated, "ExternalReference")) preallocated = slot(preallocated,"ref") Searching CHANGES in swig src points to 2012-08-26: drjoe [R] make ExternalReference slot ref to contain reference The issue manifests like this: Welcome! This is SHOGUN version 3.2.1 > > fm_train_real <- t(as.matrix(read.table('../data/fm_train_real.dat'))) > fm_test_real <- t(as.matrix(read.table('../data/fm_test_real.dat'))) > > # gaussian > print('Gaussian') [1] "Gaussian" > > feats_train <- RealFeatures() > dump <- feats_train$set_feature_matrix(fm_train_real) > feats_test <- RealFeatures() > dump <- feats_test$set_feature_matrix(fm_test_real) > width <- 1.9 > > kernel <- GaussianKernel(feats_train, feats_train, width) > km_train <- feats_train$get_feature_matrix() Error in validObject(.Object) : invalid class "_p_shogun__SGMatrixT_double_t" object: invalid object for slot "ref" in class "_p_shogun__SGMatrixT_double_t": got class "matrix", should be or extend class "externalptr" Calls: <Anonymous> ... f -> new -> initialize -> initialize -> validObject I guess it is easy to figure out how to fix it. Regards, Soeren |
From: William S F. <ws...@fu...> - 2014-02-24 19:28:46
|
On 24/02/14 15:48, Soeren Sonnenburg wrote: > Dear all, > > trying to get swig-R to work with shogun on debian sid (swig 2.0.11) > I am seeing a regression from swig2.0.4 with output typemaps no longer > working. Due to 2 newly added lines > > if (inherits(self, "ExternalReference")) self = slot(self,"ref") > if (inherits(preallocated, "ExternalReference")) preallocated = > slot(preallocated,"ref") > > Searching CHANGES in swig src points to > > 2012-08-26: drjoe > [R] make ExternalReference slot ref to contain reference > > The issue manifests like this: > > Welcome! This is SHOGUN version 3.2.1 >> >> fm_train_real <- t(as.matrix(read.table('../data/fm_train_real.dat'))) >> fm_test_real <- t(as.matrix(read.table('../data/fm_test_real.dat'))) >> >> # gaussian >> print('Gaussian') > [1] "Gaussian" >> >> feats_train <- RealFeatures() >> dump <- feats_train$set_feature_matrix(fm_train_real) >> feats_test <- RealFeatures() >> dump <- feats_test$set_feature_matrix(fm_test_real) >> width <- 1.9 >> >> kernel <- GaussianKernel(feats_train, feats_train, width) >> km_train <- feats_train$get_feature_matrix() > Error in validObject(.Object) : > invalid class "_p_shogun__SGMatrixT_double_t" object: invalid object > for slot "ref" in class "_p_shogun__SGMatrixT_double_t": got class > "matrix", should be or extend class "externalptr" > Calls: <Anonymous> ... f -> new -> initialize -> initialize -> validObject > > I guess it is easy to figure out how to fix it. > Joe, could you look at this change you made please? Thanks William |
From: Joseph W. <joe...@gm...> - 2014-02-25 02:09:46
|
Yes. I'll take a look, and I should have a fix out a a few days. The externalptr change is correct since this is how swig represents unknown objects, but matrix is a special object in swig which needs to be recognized. Can you give me a small test case that generates a matrix that fails? On Tue, Feb 25, 2014 at 3:28 AM, William S Fulton <ws...@fu...>wrote: > On 24/02/14 15:48, Soeren Sonnenburg wrote: > >> Dear all, >> >> trying to get swig-R to work with shogun on debian sid (swig 2.0.11) >> I am seeing a regression from swig2.0.4 with output typemaps no longer >> working. Due to 2 newly added lines >> >> if (inherits(self, "ExternalReference")) self = slot(self,"ref") >> if (inherits(preallocated, "ExternalReference")) preallocated = >> slot(preallocated,"ref") >> >> Searching CHANGES in swig src points to >> >> 2012-08-26: drjoe >> [R] make ExternalReference slot ref to contain reference >> >> The issue manifests like this: >> >> Welcome! This is SHOGUN version 3.2.1 >> >>> >>> fm_train_real <- t(as.matrix(read.table('../data/fm_train_real.dat'))) >>> fm_test_real <- t(as.matrix(read.table('../data/fm_test_real.dat'))) >>> >>> # gaussian >>> print('Gaussian') >>> >> [1] "Gaussian" >> >>> >>> feats_train <- RealFeatures() >>> dump <- feats_train$set_feature_matrix(fm_train_real) >>> feats_test <- RealFeatures() >>> dump <- feats_test$set_feature_matrix(fm_test_real) >>> width <- 1.9 >>> >>> kernel <- GaussianKernel(feats_train, feats_train, width) >>> km_train <- feats_train$get_feature_matrix() >>> >> Error in validObject(.Object) : >> invalid class "_p_shogun__SGMatrixT_double_t" object: invalid object >> for slot "ref" in class "_p_shogun__SGMatrixT_double_t": got class >> "matrix", should be or extend class "externalptr" >> Calls: <Anonymous> ... f -> new -> initialize -> initialize -> validObject >> >> I guess it is easy to figure out how to fix it. >> >> > Joe, could you look at this change you made please? > > Thanks > William > > |
From: Soeren S. <so...@de...> - 2014-02-25 07:30:40
|
Hi Joe, sounds excellent! I unfortunately don't have an isolated test case. You would need to compile whole shogun to get it atm. The way I do this is git clone git://github.com/shogun-toolbox/shogun.git cd shogun git submodule udpate mkdir build cd build cmake -DRModular=ON -DCMAKE_BUILD_TYPE=Debug -DENABLE_TESTING=ON .. mkdir i make DESTDIR=`pwd`/i install export R_LIBS=`pwd`/i/usr/local/lib/R/site-library export LD_LIBRARY_PATH=`pwd`/i/usr/local/lib/ cd ../examples/undocumented/r_modular R -f kernel_gaussian_modular.R For fixing the issue I guess it is sufficient if you then just modify ./src/interfaces/r_modular/modshogunR_wrap.cxx (search for Kernel_get_kernel_matrix) followed by make and the make install above. FYI here is https://travis-ci.org/shogun-toolbox/shogun/jobs/19528018 the stuff that fails now (search for Error in .Call( Thanks & just ask. Soeren On 25.02.14 03:09, Joseph Wang wrote: > Yes. I'll take a look, and I should have a fix out a a few days. > > The externalptr change is correct since this is how swig represents > unknown objects, but matrix is a special object in swig which needs to > be recognized. > > Can you give me a small test case that generates a matrix that fails? > > > On Tue, Feb 25, 2014 at 3:28 AM, William S Fulton > <ws...@fu... <mailto:ws...@fu...>> wrote: > > On 24/02/14 15:48, Soeren Sonnenburg wrote: > > Dear all, > > trying to get swig-R to work with shogun on debian sid (swig 2.0.11) > I am seeing a regression from swig2.0.4 with output typemaps no > longer > working. Due to 2 newly added lines > > if (inherits(self, "ExternalReference")) self = slot(self,"ref") > if (inherits(preallocated, "ExternalReference")) preallocated = > slot(preallocated,"ref") > > Searching CHANGES in swig src points to > > 2012-08-26: drjoe > [R] make ExternalReference slot ref to contain > reference > > The issue manifests like this: > > Welcome! This is SHOGUN version 3.2.1 > > > fm_train_real <- > t(as.matrix(read.table('../__data/fm_train_real.dat'))) > fm_test_real <- > t(as.matrix(read.table('../__data/fm_test_real.dat'))) > > # gaussian > print('Gaussian') > > [1] "Gaussian" > > > feats_train <- RealFeatures() > dump <- feats_train$set_feature___matrix(fm_train_real) > feats_test <- RealFeatures() > dump <- feats_test$set_feature_matrix(__fm_test_real) > width <- 1.9 > > kernel <- GaussianKernel(feats_train, feats_train, width) > km_train <- feats_train$get_feature___matrix() > > Error in validObject(.Object) : > invalid class "_p_shogun__SGMatrixT_double___t" object: > invalid object > for slot "ref" in class "_p_shogun__SGMatrixT_double___t": got class > "matrix", should be or extend class "externalptr" > Calls: <Anonymous> ... f -> new -> initialize -> initialize -> > validObject > > I guess it is easy to figure out how to fix it. > > > Joe, could you look at this change you made please? > > Thanks > William > > |