[Rcpp-devel] Error detected in Rcpp module wrapper (fixed with patch)

Tama Ma pingnang at phys.ethz.ch
Sun Dec 5 17:51:58 CET 2010


Dear Dirk and Romain,

	Here is my fix. The bug is in l.37 of <Rcpp/module/Module_generated_Constructor.h>:

instead of:

return new Class ;

it should be:

return new Class() ;


	Anyway, the patch attached removes this bug.

	Thank you very much.

Best regards,
Tama Ma


-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: patch-r2721.txt
URL: <http://lists.r-forge.r-project.org/pipermail/rcpp-devel/attachments/20101205/298b348f/attachment.txt>
-------------- next part --------------





On Dec 5, 2010, at 5:33 PM, Tama Ma wrote:

> Hi Dirk,
> 
> 
> On Dec 5, 2010, at 4:02 PM, Dirk Eddelbuettel wrote:
> 
>> 
>> Hi Tama,
>> 
>> On 5 December 2010 at 15:36, Tama Ma wrote:
>> | Dear Rcpp developers,
>> | 
>> | 	I have written the following BlackScholesCallFiniteDifference class in <include/black-scholes/black-scholes-call-finite-difference.hpp>, with the Rcpp module wrapper in <src/black-scholes/black-scholes-call-finite-difference-R-module.C>. Then, I compile successfully using g++ (version 4.4) compiler to <lib/gold.so>, to be called within R. There, I met with some problem, given in the error log as follows. Is there any quick solution, or can I help?
>> 
>> I just got in from a run in the snow and have a bunch of errands to run parts
>> of the day so I may not get to this ... but if you're into Black/Scholes via
>> FDE, did you look at QuantLib (www.quantlib.org) and RQuantLib (my site, and
>> CRAN)?  Maybe you'd like to contribute to the latter....  I have a some plans
>> on adding Rcpp modules to the mix.
>> 
> 
> 
> Good luck to the snow. Anyway, I am more interested in the Rcpp module wrapper than the finance simulation. Hmm, I have located the problem anyway.
> 
> The problem lies in the declaration of the empty constructor, with the description as follows. 
> (Let me see if I can help to remove this bug from Rcpp itself.)
> 
> Thank you very much!
> 
> Best regards,
> Tama Ma
> 
> 
> <src/rcpp-test/rcpp-test-R-module.C>
> ==========================
> #include <Rcpp.h>
> 
> namespace gold {
> 
> template <class T>
> class Uniform { 
> public:
> 
>  Uniform() {}
>  Uniform(T min_)         : _min(min_) {}
>  Uniform(T min_, T max_) : _min(min_), _max(max_){}
> 
>  T min()  { return _min; }
>  T max()  { return _max; }
> 
> private:   
>  T _min, _max ;
> };
> 
> }
> 
> 
> RCPP_MODULE(gold){ 
> 
> Rcpp::class_<gold::Uniform<double> >( "Uniform" )
> 
>  .constructor()
>  .constructor<double>()
>  .constructor<double,double>() 
> 
>  .property( "max", &gold::Uniform<double>::max )
>  .property( "min", &gold::Uniform<double>::min )
>  ;   
> 
> }
> 
> 
> Tama-Mas-MacBook-Pro:code tamama$ make test
> g++ -dynamiclib -I/Users/tamama/Work/acedemic/eth/computational-finance/option-pricing-introduction/code/include -I/opt/local/include  -I/opt/local/lib/R/include -I/opt/local/lib/R/include/x86_64 -I/opt/local/share/R-packages/Rcpp-svn/pkg/Rcpp/inst/include -o /Users/tamama/Work/acedemic/eth/computational-finance/option-pricing-introduction/code/lib/test.so /Users/tamama/Work/acedemic/eth/computational-finance/option-pricing-introduction/code/src/rcpp-test/rcpp-test-R-module.C -L/opt/local/lib -lblitz -framework veclib -L/opt/local/lib/R/lib/x86_64 -lR -lRblas -lRlapack -L/opt/local/share/R-packages/Rcpp-svn/pkg/Rcpp/inst/lib/x86_64 -lRcpp
> Tama-Mas-MacBook-Pro:code tamama$ vi src/rcpp-test/rcpp-test-R-module.C 
> Tama-Mas-MacBook-Pro:code tamama$ vi src/rcpp-test/rcpp-test-R-module.C 
> Tama-Mas-MacBook-Pro:code tamama$ make test
> g++ -dynamiclib -I/Users/tamama/Work/acedemic/eth/computational-finance/option-pricing-introduction/code/include -I/opt/local/include  -I/opt/local/lib/R/include -I/opt/local/lib/R/include/x86_64 -I/opt/local/share/R-packages/Rcpp-svn/pkg/Rcpp/inst/include -o /Users/tamama/Work/acedemic/eth/computational-finance/option-pricing-introduction/code/lib/test.so /Users/tamama/Work/acedemic/eth/computational-finance/option-pricing-introduction/code/src/rcpp-test/rcpp-test-R-module.C -L/opt/local/lib -lblitz -framework veclib -L/opt/local/lib/R/lib/x86_64 -lR -lRblas -lRlapack -L/opt/local/share/R-packages/Rcpp-svn/pkg/Rcpp/inst/lib/x86_64 -lRcpp
> Tama-Mas-MacBook-Pro:code tamama$ cd lib/
> Tama-Mas-MacBook-Pro:lib tamama$ ls
> gold.so* test.so*
> Tama-Mas-MacBook-Pro:lib tamama$ R
> 
> R version 2.12.0 (2010-10-15)
> Copyright (C) 2010 The R Foundation for Statistical Computing
> ISBN 3-900051-07-0
> Platform: x86_64-apple-darwin10.5.0/x86_64 (64-bit)
> 
> R is free software and comes with ABSOLUTELY NO WARRANTY.
> You are welcome to redistribute it under certain conditions.
> Type 'license()' or 'licence()' for distribution details.
> 
> R is a collaborative project with many contributors.
> Type 'contributors()' for more information and
> 'citation()' on how to cite R or R packages in publications.
> 
> Type 'demo()' for some demos, 'help()' for on-line help, or
> 'help.start()' for an HTML browser interface to help.
> Type 'q()' to quit R.
> 
>> require(dyn)
> Loading required package: dyn
> Loading required package: zoo
>> require(Rcpp)
> Loading required package: Rcpp
>> dll = dyn.load("test.so")
>> gold = Module( "gold", dll)
>> Uniform = gold$Uniform
>> u = new (Uniform, 10, 20)
>> u$min
> [1] 7.410985e-323
>> 
> 
> 	Thank you very much.
> 
> Best regards,
> Tama Ma
> 
> 
> 
> 
> 
> 
> 
> 
> 
>> Cheers, Dirk
>> 
>> | 
>> | 	Thank you very much.
>> | 
>> | Best regards,
>> | Tama Ma
>> | 
>> | 
>> | 
>> | error log
>> | =======
>> | 
>> | Tama-Mas-MacBook-Pro:R tamama$ R
>> | 
>> | R version 2.12.0 (2010-10-15)
>> | Copyright (C) 2010 The R Foundation for Statistical Computing
>> | ISBN 3-900051-07-0
>> | Platform: x86_64-apple-darwin10.5.0/x86_64 (64-bit)
>> | 
>> | R is free software and comes with ABSOLUTELY NO WARRANTY.
>> | You are welcome to redistribute it under certain conditions.
>> | Type 'license()' or 'licence()' for distribution details.
>> | 
>> | R is a collaborative project with many contributors.
>> | Type 'contributors()' for more information and
>> | 'citation()' on how to cite R or R packages in publications.
>> | 
>> | Type 'demo()' for some demos, 'help()' for on-line help, or
>> | 'help.start()' for an HTML browser interface to help.
>> | Type 'q()' to quit R.
>> | 
>> | > source("gold.R")
>> | Loading required package: dyn
>> | Loading required package: zoo
>> | Loading required package: Rcpp
>> | > ls()
>> | [1] "BlackScholesCallFiniteDifference" "E"                               
>> | [3] "GOLD_DYLIB"                       "GOLD_DYLIB_NAME"                 
>> | [5] "GOLD_DYLIB_PATH"                  "gold"                            
>> | [7] "r"                                "sigma"                           
>> | [9] "simulation"                      
>> | > cat(E,sep="\n")
>> | 1
>> | > cat(sigma,sep="\n")
>> | 0.2
>> | > cat(r,sep="\n")
>> | 0.1
>> | >
>> | >
>> | > simulation$E
>> | [1] 2.134972e-314
>> | > simulation$sigma
>> | [1] 2.143981e-314
>> | > simulation$r
>> | [1] 1.561247e-321
>> | > 
>> | 
>> | 
>> | [ Now, obviously, this is wrong. ]
>> | 
>> | 
>> | 
>> | <R/gold.R>
>> | =========
>> | 
>> | require(dyn)
>> | require(Rcpp)
>> | 
>> | GOLD_DYLIB_NAME = "gold"
>> | GOLD_DYLIB_PATH = "../lib"
>> | GOLD_DYLIB      = paste(GOLD_DYLIB_PATH, "/", GOLD_DYLIB_NAME, ".so", sep="")
>> | 
>> | gold = Module("gold", dyn.load(GOLD_DYLIB))
>> | BlackScholesCallFiniteDifference = gold$BlackScholesCallFiniteDifference
>> | 
>> | E             = 1.0;
>> | sigma         = 0.2;
>> | r             = 0.1;
>> | 
>> | simulation = new(BlackScholesCallFiniteDifference, E, sigma, r); 
>> | 
>> | 
>> | 
>> | 
>> | <src/black-scholes/black-scholes-call-finite-difference-R-module.C>
>> | ====================================================
>> | 
>> | #include <iostream>
>> | #include <cmath>
>> | 
>> | #include <Rcpp.h>
>> | 
>> | #include "black-scholes/black-scholes-call-finite-difference.hpp"
>> | 
>> | 
>> | RCPP_MODULE(gold)
>> | {
>> |   Rcpp::class_<Gold::BlackScholesCallFiniteDifference<unsigned int, int, double> >("BlackScholesCallFiniteDifference")
>> |     .constructor()
>> |     .constructor<double, double, double>()
>> |     .constructor<double, double, double, unsigned int, unsigned int, double, double>()
>> | 
>> |     .property("E",      &Gold::BlackScholesCallFiniteDifference<unsigned int, int, double>::E)
>> |     .property("sigma",  &Gold::BlackScholesCallFiniteDifference<unsigned int, int, double>::sigma)
>> |     .property("r",      &Gold::BlackScholesCallFiniteDifference<unsigned int, int, double>::r)
>> | 
>> |     ;   
>> | }
>> | 
>> | 
>> | 
>> | <include/black-scholes/black-scholes-call-finite-difference.hpp>
>> | =======================================
>> | 
>> | #ifndef BLACK_SCHOLES_CALL_FINITE_DIFFERENCE_HPP
>> | #define BLACK_SCHOLES_CALL_FINITE_DIFFERENCE_HPP
>> | 
>> | #include <iostream>
>> | #include <cmath>
>> | #include <algorithm>
>> | #include <numeric>
>> | 
>> | #include <blitz/array.h>
>> | #include <blitz/tinyvec-et.h>
>> | 
>> | 
>> | namespace Gold {
>> | 
>> | template <class S1, class S2, class T>
>> | class BlackScholesCallFiniteDifference
>> | {
>> | public:
>> |   typedef S1  size_type;
>> |   typedef S1  index_type;
>> |   typedef S2  blitz_size_type;
>> |   typedef S2  blitz_index_type;
>> |   typedef T   parm_type;
>> |   typedef T   asset_type;
>> |   typedef T   option_type;
>> |   typedef T   tau_type;
>> | 
>> |   asset_type  E()       {   return _E;      }   
>> |   parm_type   sigma()   {   return _sigma;  }
>> |   parm_type   r()       {   return _r;      }   
>> | 
>> |   BlackScholesCallFiniteDifference()
>> |     : _initialized    (false)
>> |     , _simulated      (false)
>> |   {}  
>> | 
>> |   BlackScholesCallFiniteDifference(asset_type E_, parm_type sigma_, parm_type r_) 
>> |     :  _initialized(false)
>> |     ,  _simulated(false)
>> |     ,  _E(E_)
>> |     , _sigma(sigma_)
>> |     , _r(r_)
>> |   {}  
>> | 
>> | private:
>> |   bool             _initialized;
>> |   bool             _simulated;
>> |   asset_type  _E;
>> |   parm_type  _sigma;
>> |   parm_type  _r;
>> | };
>> | 
>> | }
>> | 
>> | #endif
>> | 
>> | 
>> | 
>> | 
>> | 
>> | 
>> | 
>> | 
>> | 
>> | _______________________________________________
>> | 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
>> 
>> -- 
>> Dirk Eddelbuettel | edd at debian.org | http://dirk.eddelbuettel.com
>> 
> 
> _______________________________________________
> 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
> 



More information about the Rcpp-devel mailing list