[Rcpp-commits] r3245 - pkg/RcppEigen/inst/doc
noreply at r-forge.r-project.org
noreply at r-forge.r-project.org
Sat Oct 29 20:44:05 CEST 2011
Author: edd
Date: 2011-10-29 20:44:04 +0200 (Sat, 29 Oct 2011)
New Revision: 3245
Modified:
pkg/RcppEigen/inst/doc/Rcpp.bib
pkg/RcppEigen/inst/doc/RcppEigen-Intro.Rnw
pkg/RcppEigen/inst/doc/RcppEigen-Intro.pdf
Log:
first partial pass (but only up to Section 3.1)
Modified: pkg/RcppEigen/inst/doc/Rcpp.bib
===================================================================
--- pkg/RcppEigen/inst/doc/Rcpp.bib 2011-10-29 15:06:57 UTC (rev 3244)
+++ pkg/RcppEigen/inst/doc/Rcpp.bib 2011-10-29 18:44:04 UTC (rev 3245)
@@ -216,6 +216,15 @@
url = CRAN # "package=rbenchmark"
}
+; see http://eigen.tuxfamily.org/index.php?title=BibTeX
+; replaced 'howpublished' with 'url' and updated year to 2011
+ at MISC{Eigen:Web,
+ author = {Ga\"{e}l Guennebaud and Beno\^{i}t Jacob and others},
+ title = {Eigen v3},
+ year = 2011,
+ url = {http://eigen.tuxfamily.org},
+}
+
@Article{Gropp+Lusk+Doss+Skjellum:1996:MPI,
author = {William Gropp and Ewing Lusk and Nathan Doss and Anthony Skjellum},
title = {A high-performance, portable implementation of the {MPI} message passing interface standard},
Modified: pkg/RcppEigen/inst/doc/RcppEigen-Intro.Rnw
===================================================================
--- pkg/RcppEigen/inst/doc/RcppEigen-Intro.Rnw 2011-10-29 15:06:57 UTC (rev 3244)
+++ pkg/RcppEigen/inst/doc/RcppEigen-Intro.Rnw 2011-10-29 18:44:04 UTC (rev 3245)
@@ -4,6 +4,7 @@
\usepackage{color, alltt, bm, amsmath, listings}
\lstset{language=C++,basicstyle=\small}
\usepackage[authoryear,round,longnamesfirst]{natbib}
+\usepackage{booktabs,flafter,thumbpdf} % booktabs for nice tables, flafter for float control, thumbpdf is a tip from Achim
\usepackage[colorlinks]{hyperref}
\definecolor{link}{rgb}{0,0,0.3} %% next few lines courtesy of RJournal.sty
\hypersetup{
@@ -21,7 +22,7 @@
prettyVersion <- packageDescription("RcppEigen")$Version
prettyDate <- format(Sys.Date(), "%B %e, %Y")
@
-\author{Douglas Bates}
+\author{Douglas Bates \and Dirk Eddelbuettel \and Romain Fran\c{c}ois}
\title{An Introduction to \pkg{RcppEigen}}
\date{\pkg{RcppEigen} version \Sexpr{prettyVersion} as of \Sexpr{prettyDate}}
@@ -48,20 +49,83 @@
require( RcppEigen )
@
\begin{document}
+
+%% Below is what DE currently uses somewhere else -- I am not religuous about
+%% the grey background etc -- comment out and see if you like any of it
+%% Just like DB below, DE also uses frame=tb for top+bottom frame lines
+% \definecolor{darkgray}{rgb}{0.95,0.95,0.95}
+% \lstset{backgroundcolor=\color{darkgray}}
+% \lstset{numbers=left, numberstyle=\tiny, stepnumber=2, numbersep=5pt}
+% \lstset{keywordstyle=\color{black}\bfseries\tt}
+% \lstset{ %
+% %language=Octave, % the language of the code
+% %basicstyle=\footnotesize, % the size of the fonts that are used for the code
+% basicstyle=\small, % the size of the fonts that are used for the code
+% numbers=left, % where to put the line-numbers
+% %numberstyle=\footnotesize, % the size of the fonts that are used for the line-numbers
+% stepnumber=2, % the step between two line-numbers. If it's 1, each line
+% % will be numbered
+% numbersep=5pt, % how far the line-numbers are from the code
+% %backgroundcolor=\color{white}, % choose the background color. You must add \usepackage{color}
+% showspaces=false, % show spaces adding particular underscores
+% showstringspaces=false, % underline spaces within strings
+% showtabs=false, % show tabs within strings adding particular underscores
+% %frame=single, % adds a frame around the code
+% tabsize=2, % sets default tabsize to 2 spaces
+% captionpos=b, % sets the caption-position to bottom
+% breaklines=true, % sets automatic line breaking
+% breakatwhitespace=false % sets if automatic breaks should only happen at whitespace
+% %title=\lstname, % show the filename of files included with \lstinputlisting;
+% % also try caption instead of title
+% %escapeinside={\%*}{*)}, % if you want to add a comment within your code
+% %morekeywords={*,...} % if you want to add more keywords to the set
+% }
+
+
\maketitle
\abstract{
\noindent
- The \pkg{RcppEigen} package provides access from \proglang{R} to the
- \pkg{Eigen} \proglang{C++} template library for numerical linear
- algebra. \pkg{Rcpp} \citep{JSS:Rcpp} classes and specializations of
- the \proglang{C++} templated functions \code{as} and \code{wrap}
- from \pkg{Rcpp} provide the ``glue'' for passing objects from
+ The \pkg{RcppEigen} package provides access from \proglang{R}
+ \citep{R:Main} to the \pkg{Eigen} \proglang{C++} template library for
+ numerical linear algebra. \pkg{Rcpp} \citep{JSS:Rcpp} classes and
+ specializations of the \proglang{C++} templated functions \code{as} and
+ \code{wrap} from \pkg{Rcpp} provide the ``glue'' for passing objects from
\proglang{R} to \proglang{C++} and back. }
\section{Introduction}
\label{sec:intro}
+Linear algebra is an essential building block of statistical computing.
+Operations such as matrix decompositions, linear program solvers, and
+eigenvalue / eigenvector computations are used in many estimation and
+analysis routines. As such, libraries supporting linear algebra have long been
+provided by statistical programmers for different programming languages and
+environments. \proglang{C++}, one the central modern languages for numerical
+and statistical computing, can be extended particularly well due to its
+object-oriented nature, and numerous class libraries providing linear algebra
+routines have been written over the years.
+% Could cite Eddelbuettel (1996) here, but a real survey would be better.
+
+As both the \proglang{C++} language and standards have evolved
+\citep{Meyers:2005:EffectiveC++,Meyers:1995:MoreEffectiveC++}, so have the
+compilers implementing the language. Relatively modern language constructs
+such as template meta-programming are particularly useful. It provides both
+overloading of operations (allowing expressive code in the compiled language
+similar to what can be done in scripting languages) and can shift some of the
+computational burden from the run-time to the compile-time (though a more
+detailed discussions of template programming is however beyond this
+paper). \cite{Veldhuizen:1998:Blitz} provided an early and influential
+implementation that already demonstrated key features of this approach. Its
+usage however was held back at the time by the somewhat limited availability
+of compilers implementing all necessary features of the \proglang{C++}
+language.
+
+This situation has greatly improved over the last decade, and many more such
+libraries have been contributed. One such \proglang{C++} library is
+\pkg{Eigen} by \citet*{Eigen:Web}. \marginpar{TODO: short Eigen history. Then pivot to
+R and Rcpp.}
+
As stated in the \pkg{Rcpp} \citep{CRAN:Rcpp} vignette, ``Extending \pkg{Rcpp}''
\begin{quote}
\pkg{Rcpp} facilitates data interchange between \proglang{R} and
@@ -78,43 +142,43 @@
versatile and comprehensive representations of dense and sparse
matrices and vectors, as well as decompositions and other functions
to be applied to these objects. In the next section we introduce some
-of these classes and show how to interface to them from R.
+of these classes and show how to interface to them from \proglang{R}.
\section{Eigen classes}
\label{sec:eclasses}
-\pkg{Eigen} (\url{http://eigen.tuxfamily.org}) is a \proglang{C++} template
+\pkg{Eigen} \citep*{Eigen:Web} is a \proglang{C++} template
library providing classes for many forms of matrices, vectors, arrays
and decompositions. These classes are flexible and comprehensive
allowing for both high performance and well structured code
representing high-level operations. \proglang{C++} code based on Eigen
is often more like \proglang{R} code, working on the ``whole object'',
-than compiled code in other languages where operations often must be
+rather than compiled code in other languages where operations often must be
coded in loops.
As in many \proglang{C++} template libraries using template
meta-programming
\citep{Abrahams+Gurtovoy:2004:TemplateMetaprogramming}, the templates
themselves can be very complicated. However, \pkg{Eigen} provides
-typedef's for common classes that correspond to \proglang{R} matrices and
+\code{typedef}s for common classes that correspond to \proglang{R} matrices and
vectors, as shown in Table~\ref{tab:REigen}. We will use these
-typedef's throughout this document.
+\code{typedef}s throughout this document.
\begin{table}[tb]
\caption{Correspondence between R matrix and vector types and classes in the \code{Eigen} namespace.}
\label{tab:REigen}
- \centering
+ \centering
\begin{tabular}{l l}
- \hline
+ \toprule
\multicolumn{1}{c}{\proglang{R} object type} & \multicolumn{1}{c}{\pkg{Eigen} class typedef}\\
- \hline
- numeric matrix & \code{MatrixXd}\\
- integer matrix & \code{MatrixXi}\\
- complex matrix & \code{MatrixXcd}\\
- numeric vector & \code{VectorXd}\\
- integer vector & \code{VectorXi}\\
- complex vector & \code{VectorXcd}\\
- \code{Matrix::dgCMatrix} & \code{SparseMatrix<double>}\\
- \hline
+ \midrule
+ numeric matrix & \code{MatrixXd}\\
+ integer matrix & \code{MatrixXi}\\
+ complex matrix & \code{MatrixXcd}\\
+ numeric vector & \code{VectorXd}\\
+ integer vector & \code{VectorXi}\\
+ complex vector & \code{VectorXcd}\\
+ \code{Matrix::dgCMatrix} \phantom{XXX} & \code{SparseMatrix<double>}\\
+ \bottomrule
\end{tabular}
\end{table}
@@ -184,13 +248,13 @@
using Eigen::MatrixXd;
using Rcpp::as;
-const Map<MatrixXd> A(as<Map<MatrixXd> >(AA));
+const Map<MatrixXd> A(as<Map<MatrixXd> >(AA));
\end{lstlisting}
where \code{AA} is the name of the R object (called an \code{SEXP} in
\proglang{C} and \proglang{C++}) passed to the \proglang{C++} function.
The \Sexpr{link("cxxfunction")} from the \pkg{inline}
-\citep{CRAN:inline} package for \proglang{R} and its \pkg{RcppEigen}
+package \citep*{CRAN:inline} for \proglang{R} and its \pkg{RcppEigen}
plugin provide a convenient way of developing and debugging the
\proglang{C++} code. For actual production code we generally
incorporate the \proglang{C++} source code files in a package and
@@ -218,7 +282,7 @@
<<Adef>>=
(A <- matrix(1:6, ncol=2))
str(A)
-@
+@
and, in Listing~\ref{trans}, use the \code{transpose()} method for the
\code{Eigen::MatrixXi} class to return its transpose. The \proglang{R}
matrix in the \code{SEXP} \code{AA} is mapped to an
@@ -237,10 +301,10 @@
return wrap(At);
'
@
-\begin{lstlisting}[frame=tb,float,caption={transCpp: Transpose a matrix of integers},label=trans]
-<<transCppLst,results=tex,echo=FALSE>>=
+\begin{lstlisting}[frame=tb,caption={transCpp: Transpose a matrix of integers},label=trans]
+<<transCppLst,results=tex,echo=FALSE >>=
cat(transCpp, "\n")
-@
+@
\end{lstlisting}
<<ftrans>>=
ftrans <- cxxfunction(signature(AA="matrix"), transCpp, plugin="RcppEigen")
@@ -271,10 +335,10 @@
_["crossprod(B, C)"] = B.adjoint() * C);
'
@
-\begin{lstlisting}[frame=tb,float,caption={prodCpp: Product and cross-product of two matrices},label=prod]
+\begin{lstlisting}[frame=tb,caption={prodCpp: Product and cross-product of two matrices},label=prod]
<<prodCppLst,results=tex,echo=FALSE>>=
cat(prodCpp, "\n")
-@
+@
\end{lstlisting}
<<prod>>=
fprod <- cxxfunction(signature(BB = "matrix", CC = "matrix"), prodCpp, "RcppEigen")
@@ -328,7 +392,7 @@
using Eigen::Lower;
const Map<MatrixXi> A(as<Map<MatrixXi> >(AA));
-const int m(A.rows()), n(A.cols());
+const int m(A.rows()), n(A.cols());
MatrixXi AtA(MatrixXi(n, n).setZero().
selfadjointView<Lower>().rankUpdate(A.adjoint()));
MatrixXi AAt(MatrixXi(m, m).setZero().
@@ -338,10 +402,10 @@
_["tcrossprod(A)"] = AAt);
'
@
-\begin{lstlisting}[frame=tb,float,caption={crossprodCpp: Cross-product and transposed cross-product of a single matrix},label=crossprod]
+\begin{lstlisting}[frame=tb,caption={crossprodCpp: Cross-product and transposed cross-product of a single matrix},label=crossprod]
<<crossprodCppLst,results=tex,echo=FALSE>>=
cat(crossprodCpp, "\n")
-@
+@
\end{lstlisting}
<<>>=
fcprd <- cxxfunction(signature(AA = "matrix"), crossprodCpp, "RcppEigen")
@@ -386,7 +450,7 @@
switch to numeric matrices
<<storage>>=
storage.mode(A) <- "double"
-@
+@
before applying the code in Listing~\ref{chol}.
<<cholCpp,echo=FALSE>>=
cholCpp <- '
@@ -403,11 +467,11 @@
return List::create(_["L"] = MatrixXd(llt.matrixL()),
_["R"] = MatrixXd(llt.matrixU()));
'
-@
-\begin{lstlisting}[frame=tb,float,caption={cholCpp: Cholesky decomposition of a cross-product},label=chol]
+@
+\begin{lstlisting}[frame=tb,caption={cholCpp: Cholesky decomposition of a cross-product},label=chol]
<<cholCppLst,results=tex,echo=FALSE>>=
cat(cholCpp, "\n")
-@
+@
\end{lstlisting}
<<fchol>>=
fchol <- cxxfunction(signature(AA = "matrix"), cholCpp, "RcppEigen")
@@ -456,11 +520,11 @@
_["d2"] = Dvec.prod(),
_["ld"] = Dvec.array().log().sum());
'
-@
-\begin{lstlisting}[frame=tb,float,caption={cholDetCpp: Determinant of a cross-product using the Cholesky decomposition},label=cholDet]
+@
+\begin{lstlisting}[frame=tb,caption={cholDetCpp: Determinant of a cross-product using the Cholesky decomposition},label=cholDet]
<<cholDetCppLst,results=tex,echo=FALSE>>=
cat(cholDetCpp, "\n")
-@
+@
\end{lstlisting}
<<fdet>>=
fdet <- cxxfunction(signature(AA = "matrix"), cholDetCpp, "RcppEigen")
@@ -528,11 +592,11 @@
_["rank"] = p,
_["Std. Error"] = se);
'
-@
-\begin{lstlisting}[frame=tb,float,caption={lltLSCpp: Least squares using the Cholesky decomposition},label=lltLS]
+@
+\begin{lstlisting}[frame=tb,caption={lltLSCpp: Least squares using the Cholesky decomposition},label=lltLS]
<<lltLSCppLst,results=tex,echo=FALSE>>=
cat(lltLSCpp, "\n")
-@
+@
\end{lstlisting}
shows a calculation of the least squares coefficient estimates
(\code{betahat}) and the standard errors (\code{se}) through an
@@ -600,7 +664,7 @@
Listing~\ref{QRLS} shows a least squares solution using the unpivoted
QR decomposition.
-\begin{lstlisting}[frame=tb,float,caption={QRLSCpp: Least squares using the unpivoted QR decomposition},label=QRLS]
+\begin{lstlisting}[frame=tb,caption={QRLSCpp: Least squares using the unpivoted QR decomposition},label=QRLS]
using Eigen::HouseholderQR;
const HouseholderQR<MatrixXd> QR(X);
@@ -622,13 +686,13 @@
One important consideration when determining least squares solutions
is whether $\rank(\bm X)$ is $p$, a situation we describe by saying
that $\bm X$ has ``full column rank''. When $\bm X$ does not have
-full column rank we say it is ``rank deficient''.
+full column rank we say it is ``rank deficient''.
-Although the theoretical rank of a matrix is well-defined, its
+Although the theoretical rank of a matrix is well-defined, its
evaluation in practice is not. At best we can compute an effective
rank according to some tolerance. We refer to decompositions that
allow us to estimate the rank of the matrix in this way as
-``rank-revealing''.
+``rank-revealing''.
Because the \code{model.matrix} function in \proglang{R} does a
considerable amount of symbolic analysis behind the scenes, we usually
@@ -653,7 +717,7 @@
# lm detects the rank deficiency
fm1 <- lm(y ~ f1 * f2, dd)
writeLines(capture.output(print(summary(fm1), signif.stars=FALSE))[9:22])
-@
+@
The \code{lm} function for fitting linear models in \proglang{R} uses
a rank-revealing form of the QR decomposition. When the model matrix
@@ -691,7 +755,7 @@
are in increasing order we include a Boolean argument \code{rev}
indicating whether the order is reversed.
-\begin{lstlisting}[frame=tb,float,caption={DplusCpp: Create the
+\begin{lstlisting}[frame=tb,caption={DplusCpp: Create the
diagonal matrix $\bm D^+$ from the array of singular values $\bm d$},label=Dplus]
using Eigen::DiagonalMatrix;
using Eigen::Dynamic;
@@ -710,7 +774,7 @@
With these definitions the code for least squares using the singular
value decomposition can be written as in Listing~\ref{SVDLS}.
-\begin{lstlisting}[frame=tb,float,caption={SVDLSCpp: Least squares using the SVD},label=SVDLS]
+\begin{lstlisting}[frame=tb,caption={SVDLSCpp: Least squares using the SVD},label=SVDLS]
using Eigen::JacobiSVD;
const JacobiSVD<MatrixXd> UDV(X.jacobiSvd(Eigen::ComputeThinU|Eigen::ComputeThinV));
@@ -757,7 +821,7 @@
With these definitions we can adapt much of the code from the SVD
method for the eigendecomposition, as shown in Listing~\ref{SymmEigLS}.
-\begin{lstlisting}[frame=tb,float,caption={SymmEigLSCpp: Least squares using the eigendecomposition},label=SymmEigLS]
+\begin{lstlisting}[frame=tb,caption={SymmEigLSCpp: Least squares using the eigendecomposition},label=SymmEigLS]
using Eigen::SelfAdjointEigenSolver;
const SelfAdjointEigenSolver<MatrixXd>
@@ -793,7 +857,7 @@
X\bm P$ only.
In the rank-deficient case the straightforward calculation of the
-fitted values, as $\bm X\widehat{\bm\beta}$, cannot be used. We
+fitted values, as $\bm X\widehat{\bm\beta}$, cannot be used. We
could do some complicated rearrangement of the columns of X and the
coefficient estimates but it is conceptually (and computationally)
easier to employ the relationship
@@ -807,7 +871,7 @@
\end{displaymath}
The vector $\bm Q^\prime\bm y$ is called the ``effects'' vector in \proglang{R}.
-\begin{lstlisting}[frame=tb,float,caption={ColPivQRLSCpp: Least squares using the pivoted QR decomposition},label=ColPivQRLS]
+\begin{lstlisting}[frame=tb,caption={ColPivQRLSCpp: Least squares using the pivoted QR decomposition},label=ColPivQRLS]
using Eigen::ColPivHouseholderQR;
typedef ColPivHouseholderQR<MatrixXd>::PermutationType Permutation;
@@ -842,7 +906,7 @@
all.equal(coef(fm1), coef(fmPQR))
all.equal(unname(fitted(fm1)), fitted(fmPQR))
all.equal(unname(residuals(fm1)), residuals(fmPQR))
-@
+@
The rank-revealing SVD method produces the same fitted
values but not the same coefficients.
@@ -851,14 +915,14 @@
all.equal(coef(fm1), coef(fmSVD))
all.equal(unname(fitted(fm1)), fitted(fmSVD))
all.equal(unname(residuals(fm1)), residuals(fmSVD))
-@
+@
The coefficients from the symmetric eigendecomposition method are the same as those from the SVD
<<rankdeficientVLV>>=
print(summary(fmVLV <- fastLm(y ~ f1 * f2, dd, method=5L)), signif.stars=FALSE)
all.equal(coef(fmSVD), coef(fmVLV))
all.equal(unname(fitted(fm1)), fitted(fmSVD))
all.equal(unname(residuals(fm1)), residuals(fmSVD))
-@
+@
\subsection{Comparative speed}
@@ -875,7 +939,7 @@
installed \pkg{RcppEigen} package.
-It can be run as
+It can be run as
<<benchmark,eval=FALSE>>=
source(system.file("examples", "lmBenchmark.R", package="RcppEigen"))
@
@@ -966,10 +1030,10 @@
return wrap(A.transpose());
'
@
-\begin{lstlisting}[frame=tb,float,caption={badtransCpp: Transpose producing incorrect results},label=badtrans]
+\begin{lstlisting}[frame=tb,caption={badtransCpp: Transpose producing incorrect results},label=badtrans]
<<badtransCppLst,results=tex,echo=FALSE>>=
cat(badtransCpp, "\n")
-@
+@
\end{lstlisting}
<<ftrans2>>=
Ai <- matrix(1:6, ncol=2L)
@@ -1001,11 +1065,11 @@
_["Aty"] = At * y);
'
@
-\begin{lstlisting}[frame=tb,float,
+\begin{lstlisting}[frame=tb,
caption={sparseProdCpp: Transpose and product with sparse matrices},label=sparseProd]
<<sparseProdCppLst,results=tex,echo=FALSE>>=
cat(sparseProdCpp, "\n")
-@
+@
\end{lstlisting}
<<>>=
sparse1 <- cxxfunction(signature(AA = "dgCMatrix", yy = "numeric"),
@@ -1021,6 +1085,7 @@
\pkg{CHOLMOD} code from the \pkg{Matrix} package. At present, both of
these are regarded as experimental.
+
\bibliographystyle{plainnat}
\bibliography{Rcpp}
Modified: pkg/RcppEigen/inst/doc/RcppEigen-Intro.pdf
===================================================================
--- pkg/RcppEigen/inst/doc/RcppEigen-Intro.pdf 2011-10-29 15:06:57 UTC (rev 3244)
+++ pkg/RcppEigen/inst/doc/RcppEigen-Intro.pdf 2011-10-29 18:44:04 UTC (rev 3245)
@@ -129,1819 +129,1968 @@
85 0 obj
<< /S /GoTo /D [86 0 R /Fit ] >>
endobj
-98 0 obj <<
-/Length 3396
+107 0 obj <<
+/Length 4232
/Filter /FlateDecode
>>
stream
-xÚ½[ëã¶ÿ~
/µÑ3#R%¦E$½¤
-P½,Ú ¹|ðzµ»jüØÈÞÛ»þõ_ìõ&×â ,Ãá<~ó®ÝÍÙ·¯¿ºzõù7µÉZ(YéÙÕíLZ#%gÆ4BZ¸u3ûqþån±,bþ×
ïªûýb©ªùÍ#ÜYÃqìöô÷®¾ÊuF¹4¢°.|àôðNwíÎMSÅLJa«Já´¥)E
-óªnöaü×¾cÇ
-¬®Ìü+¼>ÂÑ" ½¦²r¥(mùBfL!ºò{x¿Pͼíqiã% r)\K8ðoéøJXÄ·îòï¸4r»¿y½{¤à²ãµ£©
-¤)"?ÿdÜkZ¢²ÍlYÂÈu³¯(~åv¶ ¥l@ðÒÀH]Ý£|xãhiEQ7çLB¢Ù2ºnðÄVéz¡ìüçEUÓ¯;ZtYV
-ÂÓ÷HùÆ©5s¿»5Ýã·=Ê|ëµ'«L4r<fÍ
-vDr$ñòT
-Æeü$Ú|ºóUÁú¯aÔï?ÁØ«V&å£Ý>$ÖÂÁ[Ý5JôY{6-±CÉ¡ÿlÉÞº5Ù¸¡xD ¹©¡Áqdî`4Ç©¬Ë¯(&$RiF1µS-lÜ黢*ØNá(g=©»|ûí«ÙrþÕO&°a6pkíÑKv¥3¡fþÍ¢1_¼ù®(
C[³'wÌ;p×gù 5Ðgö}IÌÀ~¤c`ëÀæ;Áå·ÈY·bwÿIôÎàKø4_ðr`¥¹å5V(û¼åi0æúË»qFRÖµ¨Ü>2{ë1¿+[1Aý«8*cJ*¡MrBÓÔ4ý'2hÇø¤ñIÑÅ3ÔÈ\ÚÈË̹MQ¥ÈÆÀÕy«§Ó*ÑÔRÉzþNÚ¸Gö°ÏÜ£àÉ0ë!?B;ÏCT©Ìüßd<Ç»k-.Ï£amÆÁá)Ö`ªÍXÄåuSl5`Ú¸X^V0¥ qÍ
-ÜKJ¥9[)1â1jíÇubc
-°\ P4NÐ:s';ùpy<Ø®
©|äCÞ=|÷·´>¤9¾ÕÃ=JûÎGÀëëÌî1f~ û;Þb4î w,!6úcùd°àÏNä@yÈ¿ Î
-°30>í³âó«(ÀÁàH·>)é»)r})È#o{+¼UÏ;
-Ó4¨'/¸ç1»áÔk8ärR'· ¿ÔàqFóïF
9
«-(Lõ¼+¡*ƽ@g«wt¶{¼[rQdøº|Y@
-"Ê )eÊx|ÁÇ©HÜä1SfPLþ³s9)Ú>«
-oÝØ4G 9ª¡TõCç41î{.ÖBªP
-ÜpBÒÏÅàª|¡ O°Ñ°uóÂÀt§ÔEMô6!gÇ`UM-lYårº®jDm/¨5˯©À«R&©©|Í&TÞûêõnÌ»BjN[.u}:½uIì~¦Às
´¢qya%
ÃEY,ç+)`w¢âJÞSøÙ¹íñ¾¬ÞJ@(3ÐØ:\FP©{°Ü &ÆÎU58×)Ó
0Õ¯H?§Þ{¶"±àÍÝsíCåÀ-'¹dl»QÊ6¶´2ú¸ôÈÐEµÁмCÕ ô9çÐ6Bù3ËU ÊúüvT·ºö??]wÜ{a
-K.7qÓÛv[ÌÓ\ÇF¶¼T)g¶¢¾½÷¹òÛ15Û·nm/¤@´Hî-$ö
-
-N«s©þr¥á»9¯âúÚïýßQ®
-f»øC$uðíº¤Ý§8'Ûp
©þNä°¶q Óâ{÷ü\nD|.9q½S¨å%\;J£DÆa]Zi§S±XêªâR5!ËÃ)äh,ý>´¦iÆS°½MÐ5ðÑéÉQñÆs¼5À#^n{0x71¼'QvM7²ß°)<Êlûø·£Ñc§ÄëSr¦·±©ÀE^ù*®|ßPyÕ¢üêj¸Ç2@T¾Ï"Rcí
ê°¿#ª:Ù=ëûDÏùh`jY#Ç¢¾?^ÝÖ¶<·úÇí9BÝe%Þ¨¤¬Læê²wÜNËÕT¤2$özgRVÏæº4¹®=ÛçNºÔÁ 'ùpd·¡fÓç[òÙRLÀ³Õ
-äLÉAÀ;@~Dàª×uNÝ
-~úsC~ÚTEã*{p5éÁ¼T#LYiÅ>tÜ&Ù´,%@Ì(©.Ô8u³ HÅ:e´ðåºuãdy¶èÜ røÎÿÖ¾ß;}qDÂ<À®k|ì(ðHºqºmzìlÝMvm°4Q÷|âOJ|Âû§!ûØ®î'ºÓÆR_Ìö²ª,V¤0¡iH¸<í8G3åU¬üM Lí]/É7-#¸±Ý{Ë&v61ÞµÂÍùj½<¹t£sZóçTÌ3¶µõ-´§{¶æMg#ôg©ª9/æé¬"éÌ#:GÌI6<LUPW¡'Êfù <ÞzXüû.¼±Eí`vls5=yÏïÛX'±µXK½n5â¿ù:}Ùç@¾³74îònöÁ*!òT9»_úøa°áo3â±ÅTJ}QPÑÍAÅ:A¥s¢qHJsB2ÑsséE!UËE¨&ÖôvE¦æîõ±û$³ÐÒ÷`@î[°£Û÷Î-¼/M·´Pëß¼ÆCO¾±Ãæ´Í)OIìÞû¤$sÄ!ëèlªIòq|ƽqä>m4w¶ÜEh¥ÿâbLæõä[j)tQ^Xf½©ròà6qÄe?Fߤg×Íüwqç>EÉö¶
-ße#¶¶èj"ãÑ9rÝ-J+zWFÆÌÂVgÚz°yæ%²®µ.3%ó([òo}yÒ·ât¸s¼2áåÕ¢©hüµÀϼrdÔ`,çÿBb[øÉð·Ð#gY$+Wê1h4nô½÷ÍJªbáªAO×î¿Å#×6»ä7×<v{§QøêT§ k{Ô*N·^´ÎËCÖc¾n^®ªiú6%¾sÌ[xU!´ggÔÄNkQÅæéÎ2»Õ`b¢kãÂqçûÉ÷1¾J>F¨±k&¥ïGá2nÌ¡j-+Ù@ï$G
-íªI;0t)Ê¢9-ØÓü[©=Ã*óØ)Íd_ÄÔIö+=þRßÂúô bU:W¦æ
-Å_4á¸ÛOô
-Ñ»l{ÉS&w6+e(!8øÖZ
+xÚ[IãƾûW4|àÍ*7ßÆk$0`4r±sÐHìe¤VT{Üùõyk-$µ´a4M±öWoùÞ¢üîñ.¿ûéüÌßoï¿øúÇÊÝ:³¦tw÷w¦²Æ»ªj2Ó«íݯ÷OËUç¿/ÍâiiëÅ©?.W¶\l_àÍ>§ÝÚ¨Ûé¸üÏý?`æ6¹¨²ÂÀº4å/8ðþ{þþÛÁç±{âa6¿3&kËÒâ°ijØQ{·²MÖ´¸ø#|öðYÃgåmµøOðéà
mzãý'ìQ.~ØÂüt2ú|p¶ø-Å}âѸÆNÎSü¸lì¢
àó[^äKWÍQVÂq&k])²¢-ÞH*ϺTþ¾´Í¢Ã=;Ù¥l.ÏàÙÀÿL@ØóÆ¥ñÐÇpàÒs
Ç>ïxNã·5ᣯ¬ë;8XUÑM»<+[8cQfMU
+!¤n¿V93Wc£¹àúáÚMeVg»ÿH§ô
+ÝMy}%8àÌF=Ë¥n¶]|Z5}{¤W.¯©COúÿ++
+ÜA¸!¤Õâ¡g6âÕ=[¸a`p¿ééÛ¬Ê}ßò2ÒÁ¿¬¸ërüøËO_Üýj`Zóûyd/ì;?t,Ä-Ð:}-½í~Ù ¬u§þV`Ùwפ©era=3R^NÏÞdí²Öx}AøÈ{Ðo8íútúê«*®¶ÎÚy)j¹;iÃs¤GNr×m¹ØïD;×ö¯üöáÈbâÚIù"¢ëwrïë=6; õµçñø¸'òSg³Ì\gyî¦Ü<s6 iÞÀ!ANõ¿õ;}¢t=úuÐw a.¯òÞÂ4°DÊ4¸3}7±¶Tä}Â`ЮÖ9\zÑÃ3¨¸u³Ièzþ§÷ԨȲ×(H[%U;{Aë7¥Wàg8o+
+ãEv²]ØÍÜæñ\f[/-ëÐ+YßYî^h£ùL¹ªÒEåÏqÍ\Ð ªK8úE{C;ÐÉ.VÊ0+Úï;o»cè ÅN1Áèä/¹É,)p»Xj7h³
+\YôÃxrUVÿvzhH½ ÓË"³åÏ
+qÆ4̺ⶲu=½VØ$Ëv°g¢gUØU±ôåh±MælÍÓÈc¾-7«mxܾl"n(¶Údª`QØ©·0åÀ×Oü·£{êÄ`±Y3>ÃITqíöÂ;¾NûA$±j£ö)ÇáÉÞnP5°I×Q%GÒú¢½Ù2à«Ò.~~fÕÏ)ZëEïá£2´tdBþàÄç~íqi²'+µ£rsª(Þ!uDñئP©âCôlõ¡6zÒ Æâ\waÏn§à®èwÅK{µ(¼Ò×,
ÝîQÄRzãì*TÇ°±Yr¯§z¶°ü_è5+QlÄÖaåWÙý <uÍSºÊ,û¤\òªôÇÛ}U_
+ÂÈÀ(eÝ.Þ<EÌ´Û/+@828+õg
©Þ¢»}än{åÍN¶×8/©ÐÁ>>R?!ac:ño@»'9§
>δñy!eèXòJ;Ç£´nWÅÏ[¡Åo¹)º>ºgfÂOL<èµ|ºG¹Dï È1'õañ^)Áì!À»´¶
+hàë°ÕæàCk/dÒùéxCÐ×Gö¶ö¼ÏÃî.©geÞÉ!%¢ÁY4 ãs Àä<îâûkÊTjJÎçz
+º¬nIP ÓZ<^`måLÝýqbÄé¼c×ûqæ=½Â¿òèÏÞeÍl*ï§#O·S ïæ0Â,sÝv7:ÁÖÆz]råúÎé SÁ;ªhe£G»³ëBÓüªÅµ¦Þ
+wÒí¬4Ñ1ø2U(¸âgRx§SôêÂMÌ5æÀe¯Úv=ð!ömMǽ+£õÁ«Ô粺÷K¹9ãñÛþ¬^á-$j¥
+JSN³
+[ªmx.KçØÓS'³]õ ÿ+}U?öî8s¸º:sø)ßèâ.ÚrÞd᯽|2!Æbð¼LD#Ö;õ$°(¼[a|)aþêêyHá§ÈmÛxüz^o"Bt<n«¿ yå9FJÞ5ó6é1¬»¡&aÈÈo¸S>qÖuhñDeêFðåêª M
gàlSÁúv*جϺmCâU59"'î0;n9æ¡7ª?7úýQÖÚ`+½Sà* nêç`'vGRDµ§5>ÇþC;$×cÚ<ÂqLjufñ¥ap¢ÒªÅ5'O³'Üëòc^ÐßUvq,;»
+úЦ
+Gþèm}ßøÙè«7¶8fñ¼ÚI¿a£ ö9F²Å(Kc>8[ìpL÷2àVw²ÑAÅ\v"WJgS9Å9bmàÝI=Íz?Gjõ8I6µ Jn¾öÇYy_£³cüûR6<nÈ:Rmï£0¾A{B½ê[ɨiY,´&ÛxPnMÌø0íñ!ì¹S*î£À)6MáÕÄjΩ:D2cÛZ¢¤øT$W¨#E¹MXðUm2H4ÿnàïÏ>nÅò] Kü{HO¶¥ tQ¼Ð¡#Ek]7²ÞÀÁ§9éÔ]Ï8VؤÜ]^U§G´Øùä)Å[¶Ö<WÍ\õ¬ì¼nñ{¾(rAò}§zößn_RSµÖÛ»}RðFÃÀÁëT8ÜMµu¼õ¿s+n®cO¬±âÇ(ÃǨ,·c6AÞ½Õ8N.R¼ßr&4½5{Ê:ÅR/çðú!7êA_Á» £ ^5waØ8±ª×Ð2¾ÐXòÆÙ
+|PMÃQ$ñÝM(
+6RÔ:M)¯©Y4Â{~~Ò Çù4ÉM]ê
-z,\b¤HB_ì}_ÑQö}¶àøaÓRúüc¥AÃsGçï&¤[BKõ¶´(¼¥ÅÑxÝÒ%¨o©TA깬Ðí0×=Ò¹§sGçtþÎôFQÎÿ0ù¾ ³Mïá)éU®W17Lö¹<¤D7ºãþÑ·Êùå1|âçvÛïMJxTìªÄªGÔ?u<¸Ávááê_ïûÐyuоß
ªk¯¹$ÅÐÛf2qpS_¥·nÌ6ö>¸;«P®º½qDZ>o0ÜÃ7îÂúI.DE¤9x« ¢Ô
-}ySÑ)+"ì;ÅQô{pÎKÿÍÕ«_^Ir ¥ÑgÒ4ÂÍl½}õãOÅì~8l<ÑÐíLÉZô©Óföý«¸Ïqe¡S>d#Jð
-i m³$e×á¤Ï}Zê
%e!4#LsúD&ªè0tÁéb°h¾õM¦ÒªP~±´2®
- ýQ`O¯;-[WRÖhÀø £E!ê"Á±!ó=?}é>vDºð5Þ]Ûÿ/ê.eh½§òeãûcNyÇï·2³~Nè!ñây~þé{i²}±¶ÌsÚúìüF]
üâÓpuSö)Ô
-ãê×'Ó) gíüûô½[§S°?2m)có?ÆZ Xí%°2ù$Rå 3UagHCzÂâÁmDgr
+í\è ú2p
oAèy^]Gè¸ËUnï#æC¯fØ¢áô;C7$= Fùs"üq1!ûº8vàe³~õñQDHò,|ìYâð<øÔ /ÉT]sö:<ÌùcÈRìb¥¦%ØÊë§àò
+Ò$íãC´Ef
+s[(=ðÃ$ýk¥ÉýçÚÌ4í4c9Ê×åßNôî¬üSPârzÕ0/rµï8èÿÍAå ïxëÝÛ×Z¬vº!}x)ӫƼîZ8µèÔu¡á/3ðï7ËU^/òò±×ú Ò|T1¥êª1MPü¦z²ãÅǹl à>{÷zã³0~\¥ùUQìÚmùù$îóstÌ$Ó"³Xm^§±aÖSïÃ+ñØßOWuÖ¸ú¶üW^þEa©Á½²KN`4)üg2Â8ç8#¼e0êJA×G½Æ\ UÉ"Ϥ!ÁÄaç(<ss
Jó¡Ù:ä3¿<SÐLÜã²
+Z9»eÕ"=¨hõÝÅ
+lãEܯj4Àb»Þã ØÚu<Tô)<Ý\Í
q *+{)ÇÙĶumN窨Rèªr¶-]4ý¨ø.r}ð¸ÞÛ³gý-÷|[ÝØ6«ê&aj~#sùw à&µz$!ERFòó.¯àÙbß? 6¶Ê¬-ÿõsA|/U î,Gb8Cék eå.-Qúe#ç(}Xs´ñâ6BÎÝGf4¡¡`«¦ÎÚ¢LuÊù"¹&«Û7×ÈY¿X$WX®±èg+ä°5ö_,Gp½·HE_Ú8u&¤p1
+$Iou.ì$h?ª§rYcKÊö¦ÒS´W*zø@#¼üê2ÕÚjäDäzspf:Õ(¥ºKSé*[¤ëtSÅMuDXú¯b¯«bé½äªnCQÒâæÏ8¨,|)ù4ÁlSN«
+àæFO fë_:
Y3~æn.¿îxõåãzªÅìÈIû|5Þ¢ñGajîz¾·Ã:²·Ý;
qêÐ÷aÖæ!úî£;
+³s:Ìa÷H«f
+tìe
+ÑMS¶T--4uïøE"¼ë}Cû¤
=¯'£Ùþ'J
+Z|oÛQzZf¢ýSÆxF³&ªíEpD4mm·iüèN8ç¢À~]"ZÑÎcòüK)Hny8äò }Á÷¡mF|ö¼ô
+Kô!óÂ÷ijDã+ÇZ]\¸^lBiª"IßÓQ<^$ßa%)4%ìzü»IÏ ±sáÂóO]QÇ|õ ©STZ©üa÷¨yºSèLeT=xUµæ
+nîOQüÄÎÆO\ÏÆOð=ÆO\Á¹ÏÞ!Çöj|Qù`bQ³ó;q°÷Éeó¯\f
+NpÊCêL96Ìæ«máy\wý!h]eÉW»MkP*¦ f®p&:GOQÈW*Ó©B S]ÔÔqü61X¸×±ÀÕs"ßÔ!åÝÔz!Í´ÓTi÷¤üÈ^£
+ÂüQÚùbúÝ£%ëâÉÚMöcø®y21×Q@Uu©á(ÆFÉqË" ¾ô&¿aZÒå¡B*Á÷Én1£( +¢ .äýè&ç ¹nräq1tAÕÉÐ
#5x²Íª Ú5*2ÐÒª¿ÇSô6Iã6RÕ%ɲ9weê²{_4ÍÃÖ`SÜò ÆÄ{`Jpû¬ iÏë~`Æ[ÌùKPL,ĨrÜÑØ$§(+ͤķqK|¡ðV^Fûì%ù¿X¨·=:9W×w!sÏ"÷ËߢÃ[DòpÒò|
Mö GF÷G/ÂÏ/¶9y*±&©j³à̺Ìkn0+í´ôpà¼\wW´çë °KÉÑ]ÅiÝ´(8ئæ(ðÞoLyíçÆ`:
+ýi#ã¬Í `Õ+;v1âª97¤ø>·¦XfÈ5HS ¨§uó¬×RJz Aa¯3µøû¸X7IÉUÿÛ¤`CºwsaöÑbu£Ó±À?ÖâïOË$6ó*äê¢ßÿ>̬Wج ÊQèõ0÷
jã;KS^+S6ÉKüõaf§?®GüpÿÅÿ$ZU7
endstream
endobj
86 0 obj <<
/Type /Page
-/Contents 98 0 R
-/Resources 97 0 R
+/Contents 107 0 R
+/Resources 106 0 R
/MediaBox [0 0 612 792]
-/Parent 115 0 R
-/Annots [ 87 0 R 88 0 R 89 0 R 90 0 R 91 0 R 92 0 R 93 0 R 94 0 R 95 0 R ]
+/Parent 119 0 R
+/Annots [ 87 0 R 88 0 R 89 0 R 90 0 R 91 0 R 92 0 R 93 0 R 94 0 R 95 0 R 96 0 R 97 0 R 98 0 R 99 0 R 100 0 R 101 0 R 102 0 R 103 0 R ]
>> endobj
87 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[0 1 0]
-/Rect [163.586 554.726 273.477 565.6]
-/A << /S /GoTo /D (cite.JSS:Rcpp) >>
+/Rect [296.913 561.189 410.159 572.063]
+/A << /S /GoTo /D (cite.R:Main) >>
>> endobj
88 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[0 1 0]
-/Rect [278.226 554.726 303.728 565.6]
-/A << /S /GoTo /D (cite.JSS:Rcpp) >>
+/Rect [414.368 561.189 434.759 572.063]
+/A << /S /GoTo /D (cite.R:Main) >>
>> endobj
89 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[0 1 0]
-/Rect [191.14 492.861 298.79 503.735]
-/A << /S /GoTo /D (cite.CRAN:Rcpp) >>
+/Rect [321.672 550.23 432.07 561.104]
+/A << /S /GoTo /D (cite.JSS:Rcpp) >>
>> endobj
90 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[0 1 0]
-/Rect [302.419 492.861 327.41 503.735]
-/A << /S /GoTo /D (cite.CRAN:Rcpp) >>
+/Rect [437.073 550.23 462.575 561.104]
+/A << /S /GoTo /D (cite.JSS:Rcpp) >>
>> endobj
91 0 obj <<
/Type /Annot
-/Border[0 0 0]/H/I/C[0 1 1]
-/Rect [125.387 347.213 249.536 358.087]
-/Subtype/Link/A<</Type/Action/S/URI/URI(http://eigen.tuxfamily.org)>>
+/Subtype /Link
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [341.225 400.346 371.694 411.22]
+/A << /S /GoTo /D (cite.Meyers:2005:EffectiveC++) >>
>> endobj
92 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[0 1 0]
-/Rect [409.925 292.419 513.534 303.293]
-/A << /S /GoTo /D (cite.Abrahams+Gurtovoy:2004:TemplateMetaprogramming) >>
+/Rect [375.46 400.346 395.852 411.22]
+/A << /S /GoTo /D (cite.Meyers:2005:EffectiveC++) >>
>> endobj
93 0 obj <<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[0 1 0]
-/Rect [95.91 281.46 116.302 292.334]
-/A << /S /GoTo /D (cite.Abrahams+Gurtovoy:2004:TemplateMetaprogramming) >>
+/Rect [399.618 400.346 420.009 411.22]
+/A << /S /GoTo /D (cite.Meyers:1995:MoreEffectiveC++) >>
>> endobj
94 0 obj <<
/Type /Annot
/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [387.235 271.003 393.828 280.958]
-/A << /S /GoTo /D (table.1) >>
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [244.291 345.552 290.012 356.425]
+/A << /S /GoTo /D (cite.Veldhuizen:1998:Blitz) >>
>> endobj
95 0 obj <<
/Type /Annot
/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [250.996 248.835 257.589 259.04]
-/A << /S /GoTo /D (table.1) >>
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [294.268 345.552 314.659 356.425]
+/A << /S /GoTo /D (cite.Veldhuizen:1998:Blitz) >>
>> endobj
+96 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [289.373 301.716 396.88 312.59]
+/A << /S /GoTo /D (cite.Eigen:Web) >>
+>> endobj
+97 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [401.531 301.716 421.922 312.59]
+/A << /S /GoTo /D (cite.Eigen:Web) >>
+>> endobj
+98 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [204.953 290.757 312.602 301.631]
+/A << /S /GoTo /D (cite.CRAN:Rcpp) >>
+>> endobj
99 0 obj <<
-/D [86 0 R /XYZ 71 757.862 null]
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [316.232 290.757 341.223 301.631]
+/A << /S /GoTo /D (cite.CRAN:Rcpp) >>
>> endobj
100 0 obj <<
-/D [86 0 R /XYZ 72 720 null]
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [125.398 143.862 235.877 154.736]
+/A << /S /GoTo /D (cite.Eigen:Web) >>
>> endobj
-2 0 obj <<
-/D [86 0 R /XYZ 72 531.868 null]
+101 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [240.356 143.862 260.747 154.736]
+/A << /S /GoTo /D (cite.Eigen:Web) >>
>> endobj
-6 0 obj <<
-/D [86 0 R /XYZ 72 388.211 null]
+102 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [409.925 89.068 513.534 99.941]
+/A << /S /GoTo /D (cite.Abrahams+Gurtovoy:2004:TemplateMetaprogramming) >>
>> endobj
+103 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [95.91 78.109 116.302 88.982]
+/A << /S /GoTo /D (cite.Abrahams+Gurtovoy:2004:TemplateMetaprogramming) >>
+>> endobj
+108 0 obj <<
+/D [86 0 R /XYZ 71 757.862 null]
+>> endobj
109 0 obj <<
-/D [86 0 R /XYZ 72 233.793 null]
+/D [86 0 R /XYZ 72 720 null]
>> endobj
-110 0 obj <<
-/D [86 0 R /XYZ 96.907 235.784 null]
+2 0 obj <<
+/D [86 0 R /XYZ 72 516.316 null]
>> endobj
-112 0 obj <<
-/D [86 0 R /XYZ 131.895 184 null]
+6 0 obj <<
+/D [86 0 R /XYZ 72 184.859 null]
>> endobj
-97 0 obj <<
-/Font << /F72 101 0 R /F77 102 0 R /F20 103 0 R /F54 104 0 R /F49 105 0 R /F93 106 0 R /F94 107 0 R /F95 108 0 R /F8 111 0 R /F102 113 0 R /F104 114 0 R >>
+106 0 obj <<
+/Font << /F64 110 0 R /F69 111 0 R /F20 112 0 R /F77 113 0 R /F82 114 0 R /F89 115 0 R /F90 116 0 R /F91 117 0 R /F8 118 0 R >>
/ProcSet [ /PDF /Text ]
[TRUNCATED]
To get the complete diff run:
svnlook diff /svnroot/rcpp -r 3245
More information about the Rcpp-commits
mailing list