RcppDist/0000755000175100001440000000000015022510723012015 5ustar hornikusersRcppDist/tests/0000755000175100001440000000000013353766651013201 5ustar hornikusersRcppDist/tests/testthat/0000755000175100001440000000000015022510723015017 5ustar hornikusersRcppDist/tests/testthat/test_truncnorm.R0000644000175100001440000001235513353766651020260 0ustar hornikuserscontext("Truncated Normal Distribution") test_that('The density functions provide correct answers', { x <- seq(from = -3, to = 3) mu <- 1; sigma <- 2; a <- -2.5; b <- 2.5 expect_equal(test_dtruncnorm(x, mu, sigma, a, b), list( "VectorLog" = c(-Inf, -2.426903727039, -1.801903727039, -1.426903727039, -1.301903727039, -1.426903727039, -Inf), "VectorNoLog" = c(0, 0.088309841083, 0.164984503605, 0.240051036290, 0.272013460429, 0.240051036290, 0), "DoubleLog" = -Inf, "DoubleNoLog" = 0 ) ) x <- x[-1] expect_equal(test_dtruncnorm(x, mu, sigma, a, b), list( "VectorLog" = c(-2.426903727039, -1.801903727039, -1.426903727039, -1.301903727039, -1.426903727039, -Inf), "VectorNoLog" = c(0.088309841083, 0.164984503605, 0.240051036290, 0.272013460429, 0.240051036290, 0), "DoubleLog" = -2.426903727039, "DoubleNoLog" = 0.088309841083 ) ) }) test_that('The distribution functions provide correct answers', { x <- seq(from = -3, to = 3) mu <- 1; sigma <- 2; a <- -2.5; b <- 2.5 expect_equal(test_ptruncnorm(x, mu, sigma, a, b), list( "VectorLog" = c(-Inf, -3.311111927941, -1.821849714602, -1.004802896029, -0.466475412921, -0.118444326645, 0), "VectorNoLog" = c(0, 0.036475592965, 0.161726326547, 0.366116790766, 0.627209029879, 0.888301268992, 1), "DoubleLog" = -Inf, "DoubleNoLog" = 0, "VectorLogNoLower" = c(0, -0.037157459809, -0.176410652516, -0.455890554079, -0.986737418242, -2.191949933685, -Inf), "VectorNoLogNoLower" = c(1, 0.963524407035, 0.838273673453, 0.633883209234, 0.372790970121, 0.111698731008, 0), "DoubleLogNoLower" = 0, "DoubleNoLogNoLower" = 1 ) ) x <- x[-1] expect_equal(test_ptruncnorm(x, mu, sigma, a, b), list( "VectorLog" = c(-3.311111927941, -1.821849714602, -1.004802896029, -0.466475412921, -0.118444326645, 0), "VectorNoLog" = c(0.036475592965, 0.161726326547, 0.366116790766, 0.627209029879, 0.888301268992, 1), "DoubleLog" = -3.311111927941, "DoubleNoLog" = 0.036475592965, "VectorLogNoLower" = c(-0.037157459809, -0.176410652516, -0.455890554079, -0.986737418242, -2.191949933685, -Inf), "VectorNoLogNoLower" = c(0.963524407035, 0.838273673453, 0.633883209234, 0.372790970121, 0.111698731008, 0), "DoubleLogNoLower" = -0.037157459809, "DoubleNoLogNoLower" = 0.963524407035 ) ) x <- x[length(x)] expect_equal(test_ptruncnorm(x, mu, sigma, a, b), list( "VectorLog" = 0, "VectorNoLog" = 1, "DoubleLog" = 0, "DoubleNoLog" = 1, "VectorLogNoLower" = -Inf, "VectorNoLogNoLower" = 0, "DoubleLogNoLower" = -Inf, "DoubleNoLogNoLower" = 0 ) ) }) test_that('The quantile functions provide correct answers', { x <- c(0, 0.5, 1) mu <- 1; sigma <- 2; a <- -2.5; b <- 2.5 expect_equal(test_qtruncnorm_nolog(x, mu, sigma, a, b), list( "VectorNoLog" = c(-2.5, 0.527997768764, 2.5), "DoubleNoLog" = -2.5, "VectorNoLogNoLower" = c(2.5, 0.527997768764, -2.5), "DoubleNoLogNoLower" = 2.5 ) ) x <- c(-1, -2, -10) expect_equal(test_qtruncnorm_log(x, mu, sigma, a, b), list( "VectorLog" = c(0.007336100294, -1.166918217198, -2.499228507645), "DoubleLog" = 0.007336100294, "VectorLogNoLower" = c(1.018056443472, 1.902689539480, 2.499778898288), "DoubleLogNoLower" = 1.018056443472 ) ) }) RcppDist/tests/testthat/test_Wishart.R0000644000175100001440000000105413353766651017644 0ustar hornikuserscontext("Wishart Distribution") test_that('The density function provides correct answers', { S = matrix(c(1/2, 1/3, 1/3, 1/4), nrow = 2) expect_equal(test_dwish(S, 2, S), list( "Log" = 2.88397493155479, "NoLog" = 17.885224616332 ) ) X = diag(2) expect_equal(test_dwish(X, 2, S), list( "Log" = -25.25435812795322477, "NoLog" = 0.00000000001076891 ) ) }) RcppDist/tests/testthat/test_triangular.R0000644000175100001440000000751213353766651020400 0ustar hornikuserscontext("Triangular Distribution") test_that('The density functions provide correct answers', { x <- seq(from = -3, to = 3) a <- -2.5; b <- 2.5; c <- 0; expect_equal(test_dtri(x, a, b, c), list( "VectorLog" = c(-Inf, -2.525728644308, -1.427116355640, -0.916290731874, -1.427116355640, -2.525728644308, -Inf), "VectorNoLog" = c(0, 0.08, 0.24, 0.4, 0.24, 0.08, 0), "DoubleLog" = -Inf, "DoubleNoLog" = 0 ) ) x <- x[-1] expect_equal(test_dtri(x, a, b, c), list( "VectorLog" = c(-2.525728644308, -1.427116355640, -0.916290731874, -1.427116355640, -2.525728644308, -Inf), "VectorNoLog" = c(0.08, 0.24, 0.4, 0.24, 0.08, 0), "DoubleLog" = -2.525728644308, "DoubleNoLog" = 0.08 ) ) }) test_that('The distribution functions provide correct answers', { x <- seq(from = -3, to = 3) a <- -2.5; b <- 2.5; c <- 0; expect_equal(test_ptri(x, a, b, c), list( "VectorLog" = c(-Inf, -3.912023005428, -1.714798428092, -0.693147180560, -0.198450938724, -0.020202707318, 0), "VectorNoLog" = c(0, 0.02, 0.18, 0.5, 0.82, 0.98, 1), "DoubleLog" = -Inf, "DoubleNoLog" = 0, "VectorLogNoLower" = c(0, -0.020202707318, -0.198450938724, -0.693147180560, -1.714798428092, -3.912023005428, -Inf), "VectorNoLogNoLower" = c(1, 0.98, 0.82, 0.5, 0.18, 0.02, 0), "DoubleLogNoLower" = 0, "DoubleNoLogNoLower" = 1 ) ) x <- x[-1] expect_equal(test_ptri(x, a, b, c), list( "VectorLog" = c(-3.912023005428, -1.714798428092, -0.693147180560, -0.198450938724, -0.020202707318, 0), "VectorNoLog" = c(0.02, 0.18, 0.5, 0.82, 0.98, 1), "DoubleLog" = -3.912023005428, "DoubleNoLog" = 0.02, "VectorLogNoLower" = c(-0.020202707318, -0.198450938724, -0.693147180560, -1.714798428092, -3.912023005428, -Inf), "VectorNoLogNoLower" = c(0.98, 0.82, 0.5, 0.18, 0.02, 0), "DoubleLogNoLower" = -0.020202707318, "DoubleNoLogNoLower" = 0.98 ) ) }) test_that('The quantile functions provide correct answers', { x <- c(0, 0.5, 1) a <- -2.5; b <- 2.5; c <- 0; expect_equal(test_qtri_nolog(x, a, b, c), list( "VectorNoLog" = c(-2.5, 0, 2.5), "DoubleNoLog" = -2.5, "VectorNoLogNoLower" = c(2.5, 0, -2.5), "DoubleNoLogNoLower" = 2.5 ) ) x <- c(0, -1, -2, -10) expect_equal(test_qtri_log(x, a, b, c), list( "VectorLog" = c(2.5, -0.355590287598, -1.199349762443, -2.476177759928), "DoubleLog" = 2.5, "VectorLogNoLower" = c(-2.500000000000, 0.355590287598, 1.199349762443, 2.476177759928), "DoubleLogNoLower" = -2.5 ) ) }) RcppDist/tests/testthat/test_trunclst.R0000644000175100001440000001244713353766651020111 0ustar hornikuserscontext("Truncated Location-Scale t Distribution") test_that('The density functions provide correct answers', { x <- seq(from = -3, to = 3) df <- 1; mu <- 1; sigma <- 2; a <- -2.5; b <- 2.5 expect_equal(test_dtrunclst(x, df, mu, sigma, a, b), list( "VectorLog" = c(-Inf, -2.399574188877, -1.914066373095, -1.444062743849, -1.220919192535, -1.444062743849, -Inf), "VectorNoLog" = c(0, 0.090756590228, 0.147479459121, 0.235967134593, 0.294958918242, 0.235967134593, 0), "DoubleLog" = -Inf, "DoubleNoLog" = 0 ) ) x <- x[-1] expect_equal(test_dtrunclst(x, df, mu, sigma, a, b), list( "VectorLog" = c(-2.399574188877, -1.914066373095, -1.444062743849, -1.220919192535, -1.444062743849, -Inf), "VectorNoLog" = c(0.090756590228, 0.147479459121, 0.235967134593, 0.294958918242, 0.235967134593, 0), "DoubleLog" = -2.399574188877, "DoubleNoLog" = 0.090756590228 ) ) }) test_that('The distribution functions provide correct answers', { x <- seq(from = -3, to = 3) df <- 1; mu <- 1; sigma <- 2; a <- -2.5; b <- 2.5 expect_equal(test_ptrunclst(x, df, mu, sigma, a, b), list( "VectorLog" = c(-Inf, -3.203502817486, -1.851083877622, -1.058795915267, -0.477411450527, -0.112160010453, 0), "VectorNoLog" = c(0, 0.040619671196, 0.157066832795, 0.346873223732, 0.620387218125, 0.893901212518, 1), "DoubleLog" = -Inf, "DoubleNoLog" = 0, "VectorLogNoLower" = c(0, -0.041467693769, -0.170867603832, -0.425984024188, -0.968603540856, -2.243384661497, -Inf), "VectorNoLogNoLower" = c(1, 0.959380328804, 0.842933167205, 0.653126776268, 0.379612781875, 0.106098787482, 0), "DoubleLogNoLower" = 0, "DoubleNoLogNoLower" = 1 ) ) x <- x[-1] expect_equal(test_ptrunclst(x, df, mu, sigma, a, b), list( "VectorLog" = c(-3.203502817486, -1.851083877622, -1.058795915267, -0.477411450527, -0.112160010453, 0), "VectorNoLog" = c(0.040619671196, 0.157066832795, 0.346873223732, 0.620387218125, 0.893901212518, 1), "DoubleLog" = -3.203502817486, "DoubleNoLog" = 0.040619671196, "VectorLogNoLower" = c(-0.041467693769, -0.170867603832, -0.425984024188, -0.968603540856, -2.243384661497, -Inf), "VectorNoLogNoLower" = c(0.959380328804, 0.842933167205, 0.653126776268, 0.379612781875, 0.106098787482, 0), "DoubleLogNoLower" = -0.041467693769, "DoubleNoLogNoLower" = 0.959380328804 ) ) x <- x[length(x)] expect_equal(test_ptrunclst(x, df, mu, sigma, a, b), list( "VectorLog" = 0, "VectorNoLog" = 1, "DoubleLog" = 0, "DoubleNoLog" = 1, "VectorLogNoLower" = -Inf, "VectorNoLogNoLower" = 0, "DoubleLogNoLower" = -Inf, "DoubleNoLogNoLower" = 0 ) ) }) test_that('The quantile functions provide correct answers', { x <- c(0, 0.5, 1) df <- 1; mu <- 1; sigma <- 2; a <- -2.5; b <- 2.5 expect_equal(test_qtrunclst_nolog(x, df, mu, sigma, a, b), list( "VectorNoLog" = c(-2.5, 0.586088907313, 2.5), "DoubleNoLog" = -2.5, "VectorNoLogNoLower" = c(2.5, 0.586088907313, -2.5), "DoubleNoLogNoLower" = 2.5 ) ) x <- c(-1, -2, -10) expect_equal(test_qtrunclst_log(x, df, mu, sigma, a, b), list( "VectorLog" = c(0.087500882304, -1.153060797725, -2.499374786226), "DoubleLog" = 0.087500882304, "VectorLogNoLower" = c(1.039784822473, 1.878998635049, 2.499759514659), "DoubleLogNoLower" = 1.039784822473 ) ) }) RcppDist/tests/testthat/test_4beta.R0000644000175100001440000000666113353766651017233 0ustar hornikuserscontext("Four Parameter Beta Distribution") test_that('The density functions provide correct answers', { x <- c(-3, 2, 0, 4, -1) s1 <- 2.0; s2 <- 2.0; a <- -2.5; b <- 2.5; expect_equal(test_d4beta(x, s1, s2, a, b), list( "VectorLog" = c(-Inf, -2.225624051858, -1.203972804326, -Inf, -1.378326191471), "VectorNoLog" = c(0, 0.108, 0.3, 0, 0.252), "DoubleLog" = -Inf, "DoubleNoLog" = 0 ) ) x <- x[-1] expect_equal(test_d4beta(x, s1, s2, a, b), list( "VectorLog" = c(-2.225624051858, -1.203972804326, -Inf, -1.378326191471), "VectorNoLog" = c(0.108, 0.3, 0, 0.252), "DoubleLog" = -2.225624051858, "DoubleNoLog" = 0.108 ) ) }) test_that('The distribution functions provide correct answers', { x <- c(-3, 2, 0, 4, -1) s1 <- 2.0; s2 <- 2.0; a <- -2.5; b <- 2.5; expect_equal(test_p4beta(x, s1, s2, a, b), list( "VectorLog" = c(-Inf, -0.028399474522, -0.693147180560, 0, -1.532476871298), "VectorNoLog" = c(0, 0.972, 0.5, 1, 0.216), "DoubleLog" = -Inf, "DoubleNoLog" = 0, "VectorLogNoLower" = c(0, -3.575550768807, -0.693147180560, -Inf, -0.243346258632), "VectorNoLogNoLower" = c(1, 0.028, 0.5, 0, 0.784), "DoubleLogNoLower" = 0, "DoubleNoLogNoLower" = 1 ) ) x <- x[-1] expect_equal(test_p4beta(x, s1, s2, a, b), list( "VectorLog" = c(-0.028399474522, -0.693147180560, 0, -1.532476871298), "VectorNoLog" = c(0.972, 0.5, 1, 0.216), "DoubleLog" = -0.028399474522, "DoubleNoLog" = 0.972, "VectorLogNoLower" = c(-3.575550768807, -0.693147180560, -Inf, -0.243346258632), "VectorNoLogNoLower" = c(0.028, 0.5, 0, 0.784), "DoubleLogNoLower" = -3.575550768807, "DoubleNoLogNoLower" = 0.028 ) ) }) test_that('The quantile functions provide correct answers', { x <- c(0, 0.5, 1) s1 <- 2.0; s2 <- 2.0; a <- -2.5; b <- 2.5; expect_equal(test_q4beta_nolog(x, s1, s2, a, b), list( "VectorNoLog" = c(-2.5, 0, 2.5), "DoubleNoLog" = -2.5, "VectorNoLogNoLower" = c(2.5, 0, -2.5), "DoubleNoLogNoLower" = 2.5 ) ) x <- c(-1, -2, -10) expect_equal(test_q4beta_log(x, s1, s2, a, b), list( "VectorLog" = c(-0.445104983167, -1.345445414451, -2.480523918142), "DoubleLog" = -0.445104983167, "VectorLogNoLower" = c(0.445104983167, 1.345445414451, 2.480523918142), "DoubleLogNoLower" = 0.445104983167 ) ) }) RcppDist/tests/testthat/test_mvnorm.R0000644000175100001440000000147213353766651017545 0ustar hornikuserscontext("Multivariate Normal Distribution") test_that('The density function provides correct answers', { x <- matrix(c(0.5, -0.5), nrow = 1) mu <- c(1, -1) S <- matrix(c(1/2, 1/3, 1/3, 1/4), nrow = 2) expect_equal(test_dmvnorm(x, mu, S), list( "Log" = matrix(-12.4495440069013, ncol = 1), "NoLog" = matrix(0.0000039195096, ncol = 1) ) ) x <- matrix(c(0.5, -0.5, 0.5), nrow = 1) mu <- c(1, -1, 0) S <- matrix(c(1/2, 1/3, 1/4, 1/3, 1/4, 1/5, 1/4, 1/5, 1/6), ncol = 3) expect_equal(test_dmvnorm(x, mu, S), list( "Log" = matrix(-28.92001771250195, ncol = 1), "NoLog" = matrix(0.00000000000027, ncol = 1) ) ) }) RcppDist/tests/testthat/test_mvt.R0000644000175100001440000000202213353766651017025 0ustar hornikuserscontext("Multivariate t Distribution") test_that('The density function provides correct answers', { x <- matrix(c(-1:3, -2:2), ncol = 2) mu <- c(1, -1) S <- matrix(c(1/2, 1/3, 1/3, 1/4), ncol = 2) df <- 1 expect_equal(test_dmvt(x, mu, S, df), list( "Log" = matrix(c(-3.5469680431, -4.1162024757, -5.1159208759, -6.0065829360, -6.7365658302), ncol = 1), "NoLog" = matrix(c(0.0288118637, 0.0163063207, 0.0060004496, 0.0024624883, 0.0011867155), ncol = 1) ) ) S <- matrix(c(1/2, 1/3, 1/4, 1/3, 1/4, 1/5, 1/4, 1/5, 1/6), ncol = 3) expect_equal(test_dmvt(matrix(rep(1, 3), nrow = 1), rep(0, 3), S, df), list( "Log" = matrix(-2.082560599505, ncol = 1), "NoLog" = matrix(0.124610725172, ncol = 1) ) ) }) RcppDist/tests/testthat/test_bayeslm.R0000644000175100001440000000102213360701163017633 0ustar hornikuserscontext("bayeslm") test_that('Example estimates are as expected', { set.seed(123) n <- 30 x <- cbind(1, matrix(rnorm(n*3), ncol = 3)) beta <- matrix(c(10, 2, -1, 3), nrow = 4) y <- x %*% beta + rnorm(n) freqmod <- lm(y ~ x[ , -1]) bayesmod <- bayeslm(y, x, 10000) beta_means <- apply(bayesmod$beta_draws, 2, mean) sigma_mean <- mean(bayesmod$sigma_draws) expect_equivalent(beta_means, coef(freqmod), tolerance = 0.01) expect_equivalent(sigma_mean, sigma(freqmod), tolerance = 0.04) }) RcppDist/tests/testthat/test_lst.R0000644000175100001440000001041413353766651017025 0ustar hornikuserscontext("Location-Scale t Distribution") test_that('The density functions provide correct answers', { x <- c(-3, 2, 0, 4, -1) df <- 1; mu <- 1; sigma <- 2; expect_equal(test_dlst(x, df, mu, sigma), list( "VectorLog" = c(-3.447314978843, -2.061020617724, -2.061020617724, -3.016532062751, -2.531024246969), "VectorNoLog" = c(0.031830988618, 0.127323954474, 0.127323954474, 0.048970751721, 0.079577471546), "DoubleLog" = -3.447314978843, "DoubleNoLog" = 0.031830988618 ) ) x <- x[-1] expect_equal(test_dlst(x, df, mu, sigma), list( "VectorLog" = c(-2.061020617724, -2.061020617724, -3.016532062751, -2.531024246969), "VectorNoLog" = c(0.127323954474, 0.127323954474, 0.048970751721, 0.079577471546), "DoubleLog" = -2.061020617724, "DoubleNoLog" = 0.127323954474 ) ) }) test_that('The distribution functions provide correct answers', { x <- c(-3, 2, 0, 4, -1) df <- 1; mu <- 1; sigma <- 2; expect_equal(test_plst(x, df, mu, sigma), list( "VectorLog" = c(-1.913360364504, -0.434507354518, -1.042941898062, -0.207229654027, -1.386294361120), "VectorNoLog" = c(0.147583617650, 0.647583617650, 0.352416382350, 0.812832958189, 0.25), "DoubleLog" = -1.913360364504, "DoubleNoLog" = 0.147583617650, "VectorLogNoLower" = c(-0.159680159856, -1.042941898062, -0.434507354518, -1.675753789141, -0.287682072452), "VectorNoLogNoLower" = c(0.852416382350, 0.352416382350, 0.647583617650, 0.187167041811, 0.75), "DoubleLogNoLower" = -0.159680159856, "DoubleNoLogNoLower" = 0.852416382350 ) ) x <- x[-1] expect_equal(test_plst(x, df, mu, sigma), list( "VectorLog" = c(-0.434507354518, -1.042941898062, -0.207229654027, -1.386294361120), "VectorNoLog" = c(0.647583617650, 0.352416382350, 0.812832958189, 0.25), "DoubleLog" = -0.434507354518, "DoubleNoLog" = 0.647583617650, "VectorLogNoLower" = c(-1.042941898062, -0.434507354518, -1.675753789141, -0.287682072452), "VectorNoLogNoLower" = c(0.352416382350, 0.647583617650, 0.187167041811, 0.75), "DoubleLogNoLower" = -1.042941898062, "DoubleNoLogNoLower" = 0.352416382350 ) ) }) test_that('The quantile functions provide correct answers', { x <- c(0, 0.5, 1) df <- 1; mu <- 1; sigma <- 2; expect_equal(test_qlst_nolog(x, df, mu, sigma), list( "VectorNoLog" = c(-Inf, 1, Inf), "DoubleNoLog" = -Inf, "VectorNoLogNoLower" = c(Inf, 1, -Inf), "DoubleNoLogNoLower" = Inf ) ) x <- c(-1, -2, -10) expect_equal(test_qlst_log(x, df, mu, sigma), list( "VectorLog" = c(0.118657817008, -3.417097905848, -14021.483545266779), "DoubleLog" = 0.118657817008, "VectorLogNoLower" = c(1.881342182992, 5.417097905848, 14023.483545266779), "DoubleLogNoLower" = 1.881342182992 ) ) }) RcppDist/tests/testthat/test_inverse_Wishart.R0000644000175100001440000000105113353766651021374 0ustar hornikuserscontext("Inverse Wishart Distribution") test_that('The density function provides correct answers', { S = matrix(c(1/2, 1/3, 1/3, 1/4), nrow = 2) expect_equal(test_diwish(S, 2, S), list( "Log" = 2.883974931554, "NoLog" = 17.885224616332 ) ) X = diag(2) expect_equal(test_diwish(X, 2, S), list( "Log" = -7.182690365985, "NoLog" = 0.000759621431 ) ) }) RcppDist/tests/testthat/test_trunct.R0000644000175100001440000001175613353766651017554 0ustar hornikuserscontext("Truncated t Distribution") test_that('The density functions provide correct answers', { x <- seq(from = -3, to = 3) df <- 1; a <- -2.5; b <- 2.5 expect_equal(test_dtrunct(x, df, a, b), list( "VectorLog" = c(-Inf, -2.476782025634, -1.560491293760, -0.867344113200, -1.560491293760, -2.476782025634, -Inf), "VectorNoLog" = c(0, 0.084013143207, 0.210032858016, 0.420065716033, 0.210032858016, 0.084013143207, 0), "DoubleLog" = -Inf, "DoubleNoLog" = 0 ) ) x <- x[-1] expect_equal(test_dtrunct(x, df, a, b), list( "VectorLog" = c(-2.476782025634, -1.560491293760, -0.867344113200, -1.560491293760, -2.476782025634, -Inf), "VectorNoLog" = c(0.084013143207, 0.210032858016, 0.420065716033, 0.210032858016, 0.084013143207, 0), "DoubleLog" = -2.476782025634, "DoubleNoLog" = 0.084013143207 ) ) }) test_that('The distribution functions provide correct answers', { x <- seq(from = -3, to = 3) df <- 1; a <- -2.5; b <- 2.5 expect_equal(test_ptrunct(x, df, a, b), list( "VectorLog" = c(-Inf, -3.354558641430, -1.771479555136, -0.693147180560, -0.186427363842, -0.035549233639, 0), "VectorNoLog" = c(0, 0.034924781105, 0.170081158122, 0.5, 0.829918841878, 0.965075218895, 1), "DoubleLog" = -Inf, "DoubleNoLog" = 0, "VectorLogNoLower" = c(0, -0.035549233639, -0.186427363842, -0.693147180560, -1.771479555136, -3.354558641430, -Inf), "VectorNoLogNoLower" = c(1, 0.965075218895, 0.829918841878, 0.5, 0.170081158122, 0.034924781105, 0), "DoubleLogNoLower" = 0, "DoubleNoLogNoLower" = 1 ) ) x <- x[-1] expect_equal(test_ptrunct(x, df, a, b), list( "VectorLog" = c(-3.354558641430, -1.771479555136, -0.693147180560, -0.186427363842, -0.035549233639, 0), "VectorNoLog" = c(0.034924781105, 0.170081158122, 0.5, 0.829918841878, 0.965075218895, 1), "DoubleLog" = -3.354558641430, "DoubleNoLog" = 0.034924781105, "VectorLogNoLower" = c(-0.035549233639, -0.186427363842, -0.693147180560, -1.771479555136, -3.354558641430, -Inf), "VectorNoLogNoLower" = c(0.965075218895, 0.829918841878, 0.5, 0.170081158122, 0.034924781105, 0), "DoubleLogNoLower" = -0.035549233639, "DoubleNoLogNoLower" = 0.965075218895 ) ) x <- x[length(x)] expect_equal(test_ptrunct(x, df, a, b), list( "VectorLog" = 0, "VectorNoLog" = 1, "DoubleLog" = 0, "DoubleNoLog" = 1, "VectorLogNoLower" = -Inf, "VectorNoLogNoLower" = 0, "DoubleLogNoLower" = -Inf, "DoubleNoLogNoLower" = 0 ) ) }) test_that('The quantile functions provide correct answers', { x <- c(0, 0.5, 1) df <- 1; a <- -2.5; b <- 2.5 expect_equal(test_qtrunct_nolog(x, df, a, b), list( "VectorNoLog" = c(-2.5, 0, 2.5), "DoubleNoLog" = -2.5, "VectorNoLogNoLower" = c(2.5, 0, -2.5), "DoubleNoLogNoLower" = 2.5 ) ) x <- c(-1, -2, -10) expect_equal(test_qtrunct_log(x, df, a, b), list( "VectorLog" = c(-0.325322483405, -1.180797941894, -2.499216644994), "DoubleLog" = -0.325322483405, "VectorLogNoLower" = c(0.325322483405, 1.180797941894, 2.499216644994), "DoubleLogNoLower" = 0.325322483405 ) ) }) RcppDist/tests/testthat.R0000644000175100001440000000007413353766651015165 0ustar hornikuserslibrary(testthat) library(RcppDist) test_check("RcppDist") RcppDist/MD50000644000175100001440000000443315022510723012331 0ustar hornikusers916b9b5580a997a15b0bb1a94bdde088 *DESCRIPTION 91d2a2574f5945ad8ddb45248717ec58 *NAMESPACE 1763c9c80fc1fdaaa12c8fb18968807e *R/RcppDist-package.R 502d5a8db35752c6b5d24b7051adf2db *R/RcppExports.R 501e3ddc283d879e128e70d7adb58f53 *README.md 79a45c84a680049c0f1348beceb954df *build/vignette.rds 6ae6d26d431ba0d2141ccde7e76b5663 *cleanup 9729aae451faa4a33869eb8cd09da093 *configure 13bb0866cbb8ec92582d6a5eb1cd1f02 *configure.ac 46750e778a5cdb4d65c347f8e43df623 *inst/doc/RcppDist.R 946a3c97e0a530f135594eea62d047fc *inst/doc/RcppDist.Rmd ea61d98f7e61a4494e5e387d198ebde8 *inst/doc/RcppDist.pdf 4d2aaa1bea45e4fc9cb381e757785d38 *inst/include/4beta.h e16f35ac3066b8db1079993ee4fd0e08 *inst/include/RcppDist.h db978d14101521ea3ed96b2ca03e36a0 *inst/include/lst.h cb6bc2f332824f1bd5d34096c028d58a *inst/include/mvnorm.h b8ebd7e27afd33ed54fa74b55ee06338 *inst/include/mvt.h e2c5bd2028a6193128cf33d50006c2c1 *inst/include/triangular.h 07b8511f93ac56c8e0801ec344d1b563 *inst/include/trunclst.h 5a681f0227a7f626fa606f8d4e08d015 *inst/include/truncnorm.h d7ca7e6a2fe1d09226c0c64b6edc4c5e *inst/include/trunct.h 425deadf994637d850884c76d02454bf *inst/include/wishart.h 164c1fa0772287f640f5f73549dbfd19 *man/RcppDist.Rd 33ceae90a601da120771bc1de7d3e634 *man/bayeslm.Rd 4df1f94db248d7d879ece550dd7ff19b *src/Makevars.in 448f0bdbf43a0bdb23bf5f9e059d4131 *src/Makevars.win 77eeccc568d8dd82d21c2d975a022be9 *src/RcppExports.cpp f0226ea22e7c842fe08d3bb1ac2a2c22 *src/bayeslm.cpp 995c39c0268239b422796df97f2c7f0f *src/test_functions.cpp cabcb61ca3ad1e22a634b5f2eab75902 *tests/testthat.R 632be33bc36b3ffdfeed2518259c3ad6 *tests/testthat/test_4beta.R a087c6cc1f35e03d677fde06adfe4972 *tests/testthat/test_Wishart.R a6497bbbde09d912f978de37115564d8 *tests/testthat/test_bayeslm.R 6a6cab7ed6d3162c2a872e7424017acf *tests/testthat/test_inverse_Wishart.R 740784d13155b378b3e96ec2d93d9f54 *tests/testthat/test_lst.R 97bb574506c25c527a799c1833f67685 *tests/testthat/test_mvnorm.R c6992ce93f9f3716669bf4d36153f229 *tests/testthat/test_mvt.R dee5bdf234bec95769bde55298f3e156 *tests/testthat/test_triangular.R 848da918e110f1eb39c686f17c124662 *tests/testthat/test_trunclst.R d786755944232006ff61656323e3eeda *tests/testthat/test_truncnorm.R db1204e888581730114b48b222d6cbbe *tests/testthat/test_trunct.R 946a3c97e0a530f135594eea62d047fc *vignettes/RcppDist.Rmd RcppDist/R/0000755000175100001440000000000013353766651012240 5ustar hornikusersRcppDist/R/RcppExports.R0000644000175100001440000001400013361067474014643 0ustar hornikusers# Generated by using Rcpp::compileAttributes() -> do not edit by hand # Generator token: 10BE3573-1514-4C36-9D1C-5A225CD40393 #' bayeslm #' #' Demonstrates the use of RcppDist in C++ with Bayesian linear regression #' #' To see an example of using RcppDist C++ functions in C++ code, #' we can code up a Bayesian linear regression with completely uninformative #' priors (such that estimates should be equivalent to classical estimates). #' The code to do so is as follows: #' \preformatted{ #' #include #' // or, alternatively, #' // #include #' // #include #' #' // [[Rcpp::depends(RcppArmadillo, RcppDist)]] #' #' // [[Rcpp::export]] #' Rcpp::List bayeslm(const arma::vec& y, const arma::mat x, #' const int iters = 1000) { #' int n = x.n_rows; #' int p = x.n_cols; #' double a = (n - p) / 2.0; #' arma::mat xtx = x.t() * x; #' arma::mat xtxinv = xtx.i(); #' arma::vec mu = xtxinv * x.t() * y; #' arma::mat px = x * xtxinv * x.t(); #' double ssq = arma::as_scalar(y.t() * (arma::eye(n, n) - px) * y); #' ssq *= (1.0 / (n - p)); #' double b = 1.0 / (a * ssq); #' arma::mat beta_draws(iters, p); #' Rcpp::NumericVector sigma_draws(iters); #' for ( int iter = 0; iter < iters; ++iter ) { #' double sigmasq = 1.0 / R::rgamma(a, b); #' sigma_draws[iter] = sigmasq; #' // Here we can use our multivariate normal generator #' beta_draws.row(iter) = rmvnorm(1, mu, xtxinv * sigmasq); #' } #' return Rcpp::List::create(Rcpp::_["beta_draws"] = beta_draws, #' Rcpp::_["sigma_draws"] = sigma_draws); #' } #' } #' #' @param y A numeric vector -- the response #' @param x A numeric matrix -- the explanatory variables; note this assumes #' you have included a column of ones if you intend there to be an intercept. #' @param iters An integer vector of length one, the number of posterior draws #' desired; the default is 1000. #' #' @return A list of length two; the first element is a numeric matrix of the #' beta draws and the second element is a numeric vector of the sigma draws #' @examples #' set.seed(123) #' n <- 30 #' x <- cbind(1, matrix(rnorm(n*3), ncol = 3)) #' beta <- matrix(c(10, 2, -1, 3), nrow = 4) #' y <- x %*% beta + rnorm(n) #' freqmod <- lm(y ~ x[ , -1]) #' bayesmod <- bayeslm(y, x) #' round(unname(coef(freqmod)), 2) #' round(apply(bayesmod$beta_draws, 2, mean), 2) #' c(beta) #' @export bayeslm <- function(y, x, iters = 1000L) { .Call('_RcppDist_bayeslm', PACKAGE = 'RcppDist', y, x, iters) } test_d4beta <- function(x, shape1, shape2, a, b) { .Call('_RcppDist_test_d4beta', PACKAGE = 'RcppDist', x, shape1, shape2, a, b) } test_p4beta <- function(x, shape1, shape2, a, b) { .Call('_RcppDist_test_p4beta', PACKAGE = 'RcppDist', x, shape1, shape2, a, b) } test_q4beta_nolog <- function(x, shape1, shape2, a, b) { .Call('_RcppDist_test_q4beta_nolog', PACKAGE = 'RcppDist', x, shape1, shape2, a, b) } test_q4beta_log <- function(x, shape1, shape2, a, b) { .Call('_RcppDist_test_q4beta_log', PACKAGE = 'RcppDist', x, shape1, shape2, a, b) } test_dlst <- function(x, df, mu, sigma) { .Call('_RcppDist_test_dlst', PACKAGE = 'RcppDist', x, df, mu, sigma) } test_plst <- function(x, df, mu, sigma) { .Call('_RcppDist_test_plst', PACKAGE = 'RcppDist', x, df, mu, sigma) } test_qlst_nolog <- function(x, df, mu, sigma) { .Call('_RcppDist_test_qlst_nolog', PACKAGE = 'RcppDist', x, df, mu, sigma) } test_qlst_log <- function(x, df, mu, sigma) { .Call('_RcppDist_test_qlst_log', PACKAGE = 'RcppDist', x, df, mu, sigma) } test_dtruncnorm <- function(x, mu, sigma, a, b) { .Call('_RcppDist_test_dtruncnorm', PACKAGE = 'RcppDist', x, mu, sigma, a, b) } test_ptruncnorm <- function(x, mu, sigma, a, b) { .Call('_RcppDist_test_ptruncnorm', PACKAGE = 'RcppDist', x, mu, sigma, a, b) } test_qtruncnorm_nolog <- function(x, mu, sigma, a, b) { .Call('_RcppDist_test_qtruncnorm_nolog', PACKAGE = 'RcppDist', x, mu, sigma, a, b) } test_qtruncnorm_log <- function(x, mu, sigma, a, b) { .Call('_RcppDist_test_qtruncnorm_log', PACKAGE = 'RcppDist', x, mu, sigma, a, b) } test_dtrunct <- function(x, df, a, b) { .Call('_RcppDist_test_dtrunct', PACKAGE = 'RcppDist', x, df, a, b) } test_ptrunct <- function(x, df, a, b) { .Call('_RcppDist_test_ptrunct', PACKAGE = 'RcppDist', x, df, a, b) } test_qtrunct_nolog <- function(x, df, a, b) { .Call('_RcppDist_test_qtrunct_nolog', PACKAGE = 'RcppDist', x, df, a, b) } test_qtrunct_log <- function(x, df, a, b) { .Call('_RcppDist_test_qtrunct_log', PACKAGE = 'RcppDist', x, df, a, b) } test_dtrunclst <- function(x, df, mu, sigma, a, b) { .Call('_RcppDist_test_dtrunclst', PACKAGE = 'RcppDist', x, df, mu, sigma, a, b) } test_ptrunclst <- function(x, df, mu, sigma, a, b) { .Call('_RcppDist_test_ptrunclst', PACKAGE = 'RcppDist', x, df, mu, sigma, a, b) } test_qtrunclst_nolog <- function(x, df, mu, sigma, a, b) { .Call('_RcppDist_test_qtrunclst_nolog', PACKAGE = 'RcppDist', x, df, mu, sigma, a, b) } test_qtrunclst_log <- function(x, df, mu, sigma, a, b) { .Call('_RcppDist_test_qtrunclst_log', PACKAGE = 'RcppDist', x, df, mu, sigma, a, b) } test_dtri <- function(x, a, b, c) { .Call('_RcppDist_test_dtri', PACKAGE = 'RcppDist', x, a, b, c) } test_ptri <- function(x, a, b, c) { .Call('_RcppDist_test_ptri', PACKAGE = 'RcppDist', x, a, b, c) } test_qtri_nolog <- function(x, a, b, c) { .Call('_RcppDist_test_qtri_nolog', PACKAGE = 'RcppDist', x, a, b, c) } test_qtri_log <- function(x, a, b, c) { .Call('_RcppDist_test_qtri_log', PACKAGE = 'RcppDist', x, a, b, c) } test_dmvnorm <- function(x, mu, S) { .Call('_RcppDist_test_dmvnorm', PACKAGE = 'RcppDist', x, mu, S) } test_dmvt <- function(x, mu, S, df) { .Call('_RcppDist_test_dmvt', PACKAGE = 'RcppDist', x, mu, S, df) } test_dwish <- function(x, df, S) { .Call('_RcppDist_test_dwish', PACKAGE = 'RcppDist', x, df, S) } test_diwish <- function(x, df, S) { .Call('_RcppDist_test_diwish', PACKAGE = 'RcppDist', x, df, S) } RcppDist/R/RcppDist-package.R0000644000175100001440000000421213362766473015505 0ustar hornikusers#' RcppDist #' #' 'Rcpp' Integration of Additional Probability Distributions #' #' The 'Rcpp' package provides a C++ library to make it easier to use C++ with #' R. R and 'Rcpp' provide functions for a variety of statistical #' distributions. Several R packages make functions available to R for #' additional statistical distributions. However, to access these functions #' from C++ code, a costly call to the R functions must be made. #' #' 'RcppDist' provides a header-only C++ library with functions for additional #' statistical distributions that can be called from C++ when writing code #' using 'Rcpp' or 'RcppArmadillo'. Functions are available that return a #' 'NumericVector' as well as doubles, and for multivariate or matrix #' distributions, 'Armadillo' vectors and matrices. #' RcppDist provides functions for the following distributions: #' \itemize{ #' \item The four parameter beta distribution #' \item The location-scale t distribution #' \item The truncated normal distribution #' \item The truncated t distribution #' \item A truncated location-scale t distribution #' \item The triangle distribution #' \item The multivariate normal distribution* #' \item The multivariate t distribution* #' \item The Wishart distribution* #' \item And the inverse Wishart distribution*. #' } #' #' Distributions marked with an asterisk rely also on RcppArmadillo. #' #' For more information on using 'RcppDist' functions in your C++ code, please #' consult the vignette via \code{vignette("RcppDist")}; the vignette explains #' how to link to the package and include the headers, which header files #' provide which functions, and also provides all function declarations #' (so that you can see the function and argument names and return/argument #' types; the arguments are also described in reasonable detail). You can also #' see an example of using the multivariate normal generator provided by #' 'RcppDist' in the function \code{\link{bayeslm}}. #' #' @name RcppDist #' @docType package #' @author JB Duck-Mayr #' @useDynLib RcppDist #' @importFrom Rcpp sourceCpp NULL .onUnload <- function (libpath) { library.dynam.unload('RcppDist', libpath) } RcppDist/cleanup0000755000175100001440000000005015022504774013376 0ustar hornikusers#!/bin/sh rm -f config.* src/Makevars RcppDist/vignettes/0000755000175100001440000000000015022504773014035 5ustar hornikusersRcppDist/vignettes/RcppDist.Rmd0000644000175100001440000005355613362745021016245 0ustar hornikusers--- title: "RcppDist Introduction" author: "JB Duck-Mayr" date: "`r Sys.Date()`" output: pdf_document vignette: > %\VignetteIndexEntry{RcppDist Introduction} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r setup, include = FALSE} knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) ``` The Rcpp package provides a C++ library to make it easier to use C++ with R. R and Rcpp provide functions for a variety of statistical distributions. Several R packages make functions available to R for additional statistical distributions. However, to access these functions from C++ code, a costly call to the R functions must be made.\footnote{Some of the R packages alluded to have written these functions in C++ (in some cases using Rcpp). However, these packages do not make such functions available as a header library for other package writers intending to make use of the functions in C++ code, thus the motivation for this package.} RcppDist provides a C++ header-only library with functions for additional statistical distributions that can be called from C++ when writing code using Rcpp or RcppArmadillo. Functions are available that return NumericVectors as well as doubles, and for multivariate or matrix distributions, Armadillo vectors and matrices. RcppDist provides functions for the following distributions: - the four parameter beta distribution - the location-scale t distribution - the truncated normal distribution - the truncated t distribution - a truncated location-scale t distribution - the triangle distribution - the multivariate normal distribution* - the multivariate t distribution* - the Wishart distribution* - the inverse Wishart distribution* Distributions marked with an asterisk rely on RcppArmadillo. After discussing how to include `RcppDist` headers into your code to use these functions, each function provided by the package is listed (such that you can see the function and argument names, as well as the return and argument types), with a brief explanation. # Including RccpDist in Your Code RcppDist provides several header files you can include in your code. `RcppDist.h` includes all of them, as well as `Rcpp.h` or `RcppArmadillo.h` as appropriate (see "Use Rpp, or RcppArmadillo?" below). So, in any C++ file you need to use functions from RcppDist, you can simply use ```{Rcpp full-include, eval = FALSE} #include ``` which will also take care of Rcpp(Armadillo) headers for you. You can alternatively pull in only the header(s) you need; for example, if you only need functions for the four parameter beta distribution, you can just use ```{Rcpp partial-include, eval = FALSE} #include <4beta.h> ``` However, you'll then be responsible for pulling in Rcpp/RcppArmadillo headers as appropriate. The header names that correspond to the various distributions are as follows: \newpage | Distribution | Header | |:----------------------------|:--------------| | Four Parameter Beta | 4beta.h | | Location-Scale t | lst.h | | Truncated Normal | truncnorm.h | | Truncated t | trunct.h | | Truncated Location-Scale t | trunclst.h | | Triangle | triangular.h | | Multivariate Normal | mvnorm.h | | Multivariate t | mvt.h | | Wishart and Inverse Wishart | wishart.h | ## Using Rcpp, or RcppArmadillo? Including `RcppDist.h` by default will pull in the RcppArmadillo headers (and therefore the Rcpp headers), as well as the RcppDist headers. If you would prefer to use Rcpp but *not* RcppArmadillo (i.e. include the Rcpp headers but not the RcppArmadillo headers), include the line ```{Rcpp dont-use-arma, eval = FALSE} #define RCPPDIST_DONT_USE_ARMA ``` before any inclusion of `RcppDist.h`, though this will make the asterisked (multivariate and Wishart) distributions unavailable. ## Using RcppDist in a Package ### With Rcpp To use RcppDist in a package that does not link to RcppArmadillo, you must - Set up your package to use `Rcpp`, such as via `Rcpp::Rcpp.package.skeleton(your_package)` or `devtools::use_rcpp(your_package)`.\footnote{See the Rcpp-package vignette from Rcpp for more details.} - Add RcppDist to the LinkingTo field of your DESCRIPTION file. - In any C++ file that calls a `RcppDist` function, add `#include ` (or a more specific header from the package such as `lst.h` and `Rcpp.h`) - Remember to define `RCPPDIST_DONT_USE_ARMA` before any include of `RcppDist.h`. ### With RcppArmadillo To use RcppDist in a package that links to RcppArmadillo, you must - Set up your package to use `RcppArmadillo`, such as via `RcppArmadillo::RcppArmadillo.package.skeleton(your_package)`\footnote{See the RcppArmadillo manual or help files for more details, in particular the `RcppArmadillo-package' and `RcppArmadillo.package.skeleton' entries.} - Add RcppDist to the LinkingTo field of your DESCRIPTION file. - In any C++ file that calls a `RcppDist` function, add `#include ` (or a more specific header from the package such as `mvt.h` and `RcppArmadillo.h`) ## Using RcppDist in a Standalone file ### With Rcpp If you are using RcppDist in a standalone file (i.e., not as part of a package), and you don't want to pull in the Armadillo headers, you'll need ```{Rcpp standalone-noarma-full, eval = FALSE} #define RCPPDIST_DONT_USE_ARMA #include // [[Rcpp::depends(RcppDist)]] ``` at the top of your file. If you want to pull in just one or more of the distribution specific headers, you won't need the define, but don't forget to also include `Rcpp.h`; as an example: ```{Rcpp standalone-noarma-partial, eval = FALSE} #include #include // [[Rcpp::depends(RcppDist)]] ``` ### With RcppArmadillo If you are using RcppDist in a standalone file (i.e., not as part of a package), and you do want the Armadillo headers, you'll need ```{Rcpp standalone-arma-full, eval = FALSE} #include // [[Rcpp::depends(RcppArmadillo, RcppDist)]] ``` at the top of your file. If you want to pull in just one or more of the distribution specific headers, don't forget to also include `RcppArmadillo.h`; as an example: ```{Rcpp standalone-arma-partial, eval = FALSE} #include #include // [[Rcpp::depends(RcppArmadillo, RcppDist)]] ``` # RcppDist Functions Much like distributions in R, functions are prefixed by d, p, q, and r to mean density, distribution, quantile, and random number generating functions respectively. Functions that return a double rather than, say, a NumericVector are instead prefixed by d_, p_, q_, and r_. Below are more detailed descriptions of the functions provided by each header. ## 4beta.h (Four Parameter Beta Distribution) The four parameter beta distribution is a beta distribution supported over an interval $[a, b]$ rather than only $[0, 1]$. The functions provided in this header are: ```{Rcpp 4beta, eval = FALSE} Rcpp::NumericVector d4beta(const Rcpp::NumericVector& x, const double shape1, const double shape2, const double a, const double b, const bool log_p = false) Rcpp::NumericVector p4beta(const Rcpp::NumericVector& q, const double shape1, const double shape2, const double a, const double b, const bool lower_tail = true, const bool log_p = false) Rcpp::NumericVector q4beta(const Rcpp::NumericVector& p, const double shape1, const double shape2, const double a, const double b, const bool lower_tail = true, const bool log_p = false) Rcpp::NumericVector r4beta(const int n, const double shape1, const double shape2, const double a, const double b) double d_4beta(const double x, const double shape1, const double shape2, const double a, const double b, const int log_p = 0) double p_4beta(const double q, const double shape1, const double shape2, const double a, const double b, const int lower_tail = 1, const int log_p = 0) double q_4beta(const double p, const double shape1, const double shape2, const double a, const double b, const int lower_tail = 1, const int log_p = 0) double r_4beta(const double shape1, const double shape2, const double a, const double b) ``` Where - `x` and `q` are quantiles (either a single value or a vector depending) - `p` is a single probability or a vector of probabilities - `n` is the numer of observations to draw - `shape1` and `shape2` are the positive shape parameters of the Beta distribution - `a` and `b` are the minimum and maximum values of the distribution respectively - `log_p` is a `bool` or `int` (the default is `false`/0); if `true` (or > 0), the probabilities are given as $\log(p)$ - `lower_tail` is a `bool` or `int`; if `true` (or > 0), the probabilities are $P[X \leq x]$, otherwise, $P[X > x]$. ## lst.h (Location-Scale t Distribution) The location-scale t distribution is a t distribution shifted by a location parameter $\mu$ and scaled by a scaling parameter $\sigma$. The functions provided in this header are: ```{Rcpp lst, eval = FALSE} Rcpp::NumericVector dlst(const Rcpp::NumericVector& x, const double df, const double mu, const double sigma, const bool log_p = false) Rcpp::NumericVector plst(const Rcpp::NumericVector& q, const double df, const double mu, const double sigma, const bool lower_tail = true, const bool log_p = false) Rcpp::NumericVector qlst(const Rcpp::NumericVector& p, const double df, const double mu, const double sigma, const bool lower_tail = true, const bool log_p = false) Rcpp::NumericVector rlst(const int n, const double df, const double mu, const double sigma) double d_lst(const double x, const double df, const double mu, const double sigma, const int log_p = 0) double p_lst(const double q, const double df, const double mu, const double sigma, const int lower_tail = 1, const int log_p = 0) double q_lst(const double p, const double df, const double mu, const double sigma, const int lower_tail = 1, const int log_p = 0) double r_lst(const double df, const double mu, const double sigma) ``` Where - `x` and `q` are quantiles (either a single value or a vector depending) - `p` is a single probability or a vector of probabilities - `n` is the numer of observations to draw - `df` is the positive degrees of freedom - `mu` is the location/shifting parameter - `sigma` is the scaling parameter - `log_p` is a `bool` or `int` (the default is `false`/0); if `true` (or > 0), the probabilities are given as $\log(p)$ - `lower_tail` is a `bool` or `int`; if `true` (or > 0), the probabilities are $P[X \leq x]$, otherwise, $P[X > x]$. ## truncnorm.h (Truncated Normal Distribution) The truncated normal distribution is a normal distribution supported over an interval $[a, b]$ rather than $(-\infty, \infty)$. The functions provided in this header are: ```{Rcpp truncnorm, eval = FALSE} Rcpp::NumericVector dtruncnorm(const Rcpp::NumericVector& x, const double mu, const double sigma, const double a, const double b, const bool log_p = false) Rcpp::NumericVector ptruncnorm(const Rcpp::NumericVector& x, const double mu, const double sigma, const double a, const double b, const bool lower_tail = true, const bool log_p = false) Rcpp::NumericVector qtruncnorm(const Rcpp::NumericVector& p, const double mu, const double sigma, const double a, const double b, const bool lower_tail = true, const bool log_p = false) Rcpp::NumericVector rtruncnorm(const int n, const double mu, const double sigma, const double a, const double b) double d_truncnorm(const double x, const double mu, const double sigma, const double a, const double b, const int log_p = 0) double p_truncnorm(const double x, const double mu, const double sigma, const double a, const double b, const int lower_tail = 1, const int log_p = 0) double q_truncnorm(const double p, const double mu, const double sigma, const double a, const double b, const int lower_tail = 1, const int log_p = 0) double r_truncnorm(const double mu, const double sigma, const double a, const double b) ``` Where - `x` and `q` are quantiles (either a single value or a vector depending) - `p` is a single probability or a vector of probabilities - `n` is the numer of observations to draw - `mu` is the mean of the distribution - `sigma` is the standard deviation - `a` and `b` are the minimum and maximum values of the distribution respectively - `log_p` is a `bool` or `int` (the default is `false`/0); if `true` (or > 0), the probabilities are given as $\log(p)$ - `lower_tail` is a `bool` or `int`; if `true` (or > 0), the probabilities are $P[X \leq x]$, otherwise, $P[X > x]$. ## trunct.h (Truncated t Distribution) The truncated t distribution is a t distribution supported over an interval $[a, b]$ rather than $(-\infty, \infty)$. The functions provided in this header are: ```{Rcpp trunct, eval = FALSE} Rcpp::NumericVector dtrunct(const Rcpp::NumericVector& x, const double df, const double a, const double b, const bool log_p = false) Rcpp::NumericVector ptrunct(const Rcpp::NumericVector& x, const double df, const double a, const double b, const bool lower_tail = true, const bool log_p = false) Rcpp::NumericVector qtrunct(const Rcpp::NumericVector& p, const double df, const double a, const double b, const bool lower_tail = true, const bool log_p = false) Rcpp::NumericVector rtrunct(const int n, const double df, const double a, const double b) double d_trunct(const double x, const double df, const double a, const double b, const int log_p = 0) double p_trunct(const double x, const double df, const double a, const double b, const int lower_tail = 1, const int log_p = 0) double q_trunct(const double p, const double df, const double a, const double b, const int lower_tail = 1, const int log_p = 0) double r_trunct(const double df, const double a, const double b) ``` Where - `x` and `q` are quantiles (either a single value or a vector depending) - `p` is a single probability or a vector of probabilities - `n` is the numer of observations to draw - `df` is the positive degrees of freedom - `a` and `b` are the minimum and maximum values of the distribution respectively - `log_p` is a `bool` or `int` (the default is `false`/0); if `true` (or > 0), the probabilities are given as $\log(p)$ - `lower_tail` is a `bool` or `int`; if `true` (or > 0), the probabilities are $P[X \leq x]$, otherwise, $P[X > x]$. ## trunclst.h (Truncated Location-Scale t Distribution) The truncated location-scale t distribution is a location-scale t distribution supported over an interval $[a, b]$ rather than $(-\infty, \infty)$. The functions provided in this header are: ```{Rcpp trunclst, eval = FALSE} Rcpp::NumericVector dtrunclst(const Rcpp::NumericVector& x, const double df, const double mu, const double sigma, const double a, const double b, const bool log_p = false) Rcpp::NumericVector ptrunclst(const Rcpp::NumericVector& x, const double df, const double mu, const double sigma, const double a, const double b, const bool lower_tail = true, const bool log_p = false) Rcpp::NumericVector qtrunclst(const Rcpp::NumericVector& p, const double df, const double mu, const double sigma, const double a, const double b, const bool lower_tail = true, const bool log_p = false) Rcpp::NumericVector rtrunclst(const int n, const double df, const double mu, const double sigma, const double a, const double b) double d_trunclst(const double x, const double df, const double mu, const double sigma, const double a, const double b, const int log_p = 0) double p_trunclst(const double x, const double df, const double mu, const double sigma, const double a, const double b, const int lower_tail = 1, const int log_p = 0) double q_trunclst(const double p, const double df, const double mu, const double sigma, const double a, const double b, const int lower_tail = 1, const int log_p = 0) double r_trunclst(const double df, const double mu, const double sigma, const double a, const double b) ``` Where - `x` and `q` are quantiles (either a single value or a vector depending) - `p` is a single probability or a vector of probabilities - `n` is the numer of observations to draw - `df` is the positive degrees of freedom - `mu` is the location/shifting parameter - `sigma` is the scaling parameter - `a` and `b` are the minimum and maximum values of the distribution respectively - `log_p` is a `bool` or `int` (the default is `false`/0); if `true` (or > 0), the probabilities are given as $\log(p)$ - `lower_tail` is a `bool` or `int`; if `true` (or > 0), the probabilities are $P[X \leq x]$, otherwise, $P[X > x]$. ## triangular.h (Triangle Distribution) The triangle (or triangular) distribution is supported over an interval $[a, b]$ with a mode $c$; as the name suggests, the density function is shaped like a triangle with vertices at $a$, $b$, and $c$. The functions provided in this header are: ```{Rcpp triangle, eval = FALSE} double d_tri(const double x, const double a, const double b, const double c, const int log_p = 0) double p_tri(const double x, const double a, const double b, const double c, const int lower_tail = 1, const int log_p = 0) double q_tri(const double p, const double a, const double b, const double c, const int lower_tail = 1, const int log_p = 0) double r_tri(const double a, const double b, const double c) Rcpp::NumericVector dtri(const Rcpp::NumericVector& x, const double a, const double b, const double c, const bool log_p = false) Rcpp::NumericVector ptri(const Rcpp::NumericVector& x, const double a, const double b, const double c, const bool lower_tail = true, const bool log_p = false) Rcpp::NumericVector qtri(const Rcpp::NumericVector& p, const double a, const double b, const double c, const bool lower_tail = true, const bool log_p = false) Rcpp::NumericVector rtri(const int n, const double a, const double b, const double c) ``` Where - `x` and `q` are quantiles (either a single value or a vector depending) - `p` is a single probability or a vector of probabilities - `n` is the numer of observations to draw - `a` and `b` are the minimum and maximum values of the distribution respectively - `c` is the mode of the distribution - `log_p` is a `bool` or `int` (the default is `false`/0); if `true` (or > 0), the probabilities are given as $\log(p)$ - `lower_tail` is a `bool` or `int`; if `true` (or > 0), the probabilities are $P[X \leq x]$, otherwise, $P[X > x]$. ## mvnorm.h (Multivariate Normal Distribution) The multivariate normal distribution is a generalization of the normal distribution to multiple dimensions. Then each draw is a vector, the mean parameter $\mu$ is a vector, and rather than a scalar standard deviation parameter $\sigma$, we have a covariance matrix $\Sigma$ (or here denoted $S$). The functions provided in this header are: ```{Rcpp mvnorm, eval = FALSE} arma::vec dmvnorm(const arma::mat& x, const arma::vec& mu, const arma::mat& S, const bool log_p = false) arma::mat rmvnorm(const arma::uword n, const arma::vec& mu, const arma::mat& S) ``` Where - `x` is a matrix of quantiles, such that each row is a quantile - `n` is the numer of observations to draw - `mu` is the mean vector - `S` is the covariance matrix - `log_p` is a `bool` (the default is `false`); if `true`, the probabilities are given as $\log(p)$ ## mvt.h (Multivariate t Distribution) The multivariate t distribution is a generalization of the t distribution to multiple dimensions. Then each draw is a vector, and in addition to the degrees of freedom, we have a correlation matrix $\Sigma$ (or here denoted $S$), and this implementation allows for a location vector $\mu$. The functions provided in this header are: ```{Rcpp mvt, eval = FALSE} arma::vec dmvt(const arma::mat& x, const arma::vec& mu, const arma::mat& S, const double df, const bool log_p = false) arma::mat rmvt(const arma::uword n, const arma::vec& mu, const arma::mat& S, const double df) ``` Where - `x` is a matrix of quantiles, such that each row is a quantile - `n` is the numer of observations to draw - `mu` is the location vector - `S` is the correlation matrix - `log_p` is a `bool` (the default is `false`); if `true`, the probabilities are given as $\log(p)$ ## wishart.h (Wishart and Inverse Wishart Distributions) The Wishart distribution is a generalization of the gamma distribution to multiple dimensions defined over symmetric, nonnegative-definite random matrices. Its parameters are the degrees of freedom and a scale matrix $S$. If $X \sim$ Wishart(df, $S$), then $X^{-1} \sim$ Inverse Wishart(df, $S^{-1}$). Due to their use in the density functions for these distributions, a multivariate gamma function and logged multivariate gamma function are also provided. Note that for now, all functions for this distribution are designed to deal with only one random matrix. The functions provided in this header are: ```{Rcpp wishart, eval = FALSE} double mvgamma(const int p, const double x) double lmvgamma(const int p, const double x) double dwish(const arma::mat& X, const int df, const arma::mat& S, const bool log_p = false) arma::mat rwish(const int df, const arma::mat& S) double diwish(const arma::mat& X, const int df, const arma::mat& S, const bool log_p = false) arma::mat riwish(const int df, const arma::mat& S) ``` Where - `p` and `x` are the arguments to the multivariate gamma function - `X` is a matrix, a draw from the Wishart or Inverse Wishart distribution - `df` is the degrees of feedom - `S` is the scale matrix - `log_p` is a `bool` (the default is `false`); if `true`, the probabilities are given as $\log(p)$ RcppDist/src/0000755000175100001440000000000015022504773012614 5ustar hornikusersRcppDist/src/test_functions.cpp0000644000175100001440000003014013363101416016356 0ustar hornikusers#include using namespace Rcpp; // FOUR PARAMETER BETA DISTRIBUTION // [[Rcpp::export]] List test_d4beta(NumericVector x, double shape1, double shape2, double a, double b) { return List::create( _["VectorLog"] = d4beta(x, shape1, shape2, a, b, true), _["VectorNoLog"] = d4beta(x, shape1, shape2, a, b), _["DoubleLog"] = d_4beta(x[0], shape1, shape2, a, b, 1), _["DoubleNoLog"] = d_4beta(x[0], shape1, shape2, a, b) ); } // nocov // [[Rcpp::export]] List test_p4beta(NumericVector x, double shape1, double shape2, double a, double b) { return List::create( _["VectorLog"] = p4beta(x, shape1, shape2, a, b, true, true), _["VectorNoLog"] = p4beta(x, shape1, shape2, a, b), _["DoubleLog"] = p_4beta(x[0], shape1, shape2, a, b, 1, 1), _["DoubleNoLog"] = p_4beta(x[0], shape1, shape2, a, b), _["VectorLogNoLower"] = p4beta(x, shape1, shape2, a, b, false, true), _["VectorNoLogNoLower"] = p4beta(x, shape1, shape2, a, b, false), _["DoubleLogNoLower"] = p_4beta(x[0], shape1, shape2, a, b, 0, 1), _["DoubleNoLogNoLower"] = p_4beta(x[0], shape1, shape2, a, b, 0) ); } // nocov // [[Rcpp::export]] List test_q4beta_nolog(NumericVector x, double shape1, double shape2, double a, double b) { return List::create( _["VectorNoLog"] = q4beta(x, shape1, shape2, a, b), _["DoubleNoLog"] = q_4beta(x[0], shape1, shape2, a, b), _["VectorNoLogNoLower"] = q4beta(x, shape1, shape2, a, b, false), _["DoubleNoLogNoLower"] = q_4beta(x[0], shape1, shape2, a, b, 0) ); } // nocov // [[Rcpp::export]] List test_q4beta_log(NumericVector x, double shape1, double shape2, double a, double b) { return List::create( _["VectorLog"] = q4beta(x, shape1, shape2, a, b, true, true), _["DoubleLog"] = q_4beta(x[0], shape1, shape2, a, b, 1, 1), _["VectorLogNoLower"] = q4beta(x, shape1, shape2, a, b, false, true), _["DoubleLogNoLower"] = q_4beta(x[0], shape1, shape2, a, b, 0, 1) ); } // nocov // LOCATION-SCALE T DISTRIBUTION // [[Rcpp::export]] List test_dlst(NumericVector x, double df, double mu, double sigma) { return List::create( _["VectorLog"] = dlst(x, df, mu, sigma, true), _["VectorNoLog"] = dlst(x, df, mu, sigma), _["DoubleLog"] = d_lst(x[0], df, mu, sigma, 1), _["DoubleNoLog"] = d_lst(x[0], df, mu, sigma) ); } // nocov // [[Rcpp::export]] List test_plst(NumericVector x, double df, double mu, double sigma) { return List::create( _["VectorLog"] = plst(x, df, mu, sigma, true, true), _["VectorNoLog"] = plst(x, df, mu, sigma), _["DoubleLog"] = p_lst(x[0], df, mu, sigma, 1, 1), _["DoubleNoLog"] = p_lst(x[0], df, mu, sigma), _["VectorLogNoLower"] = plst(x, df, mu, sigma, false, true), _["VectorNoLogNoLower"] = plst(x, df, mu, sigma, false), _["DoubleLogNoLower"] = p_lst(x[0], df, mu, sigma, 0, 1), _["DoubleNoLogNoLower"] = p_lst(x[0], df, mu, sigma, 0) ); } // nocov // [[Rcpp::export]] List test_qlst_nolog(NumericVector x, double df, double mu, double sigma) { return List::create( _["VectorNoLog"] = qlst(x, df, mu, sigma), _["DoubleNoLog"] = q_lst(x[0], df, mu, sigma), _["VectorNoLogNoLower"] = qlst(x, df, mu, sigma, false), _["DoubleNoLogNoLower"] = q_lst(x[0], df, mu, sigma, 0) ); } // nocov // [[Rcpp::export]] List test_qlst_log(NumericVector x, double df, double mu, double sigma) { return List::create( _["VectorLog"] = qlst(x, df, mu, sigma, true, true), _["DoubleLog"] = q_lst(x[0], df, mu, sigma, 1, 1), _["VectorLogNoLower"] = qlst(x, df, mu, sigma, false, true), _["DoubleLogNoLower"] = q_lst(x[0], df, mu, sigma, 0, 1) ); } // nocov // TRUNCATED NORMAL DISTRIBUTION // [[Rcpp::export]] List test_dtruncnorm(NumericVector x, double mu, double sigma, double a, double b) { return List::create( _["VectorLog"] = dtruncnorm(x, mu, sigma, a, b, true), _["VectorNoLog"] = dtruncnorm(x, mu, sigma, a, b), _["DoubleLog"] = d_truncnorm(x[0], mu, sigma, a, b, 1), _["DoubleNoLog"] = d_truncnorm(x[0], mu, sigma, a, b) ); } // nocov // [[Rcpp::export]] List test_ptruncnorm(NumericVector x, double mu, double sigma, double a, double b) { return List::create( _["VectorLog"] = ptruncnorm(x, mu, sigma, a, b, true, true), _["VectorNoLog"] = ptruncnorm(x, mu, sigma, a, b), _["DoubleLog"] = p_truncnorm(x[0], mu, sigma, a, b, 1, 1), _["DoubleNoLog"] = p_truncnorm(x[0], mu, sigma, a, b), _["VectorLogNoLower"] = ptruncnorm(x, mu, sigma, a, b, false, true), _["VectorNoLogNoLower"] = ptruncnorm(x, mu, sigma, a, b, false), _["DoubleLogNoLower"] = p_truncnorm(x[0], mu, sigma, a, b, 0, 1), _["DoubleNoLogNoLower"] = p_truncnorm(x[0], mu, sigma, a, b, 0) ); } // nocov // [[Rcpp::export]] List test_qtruncnorm_nolog(NumericVector x, double mu, double sigma, double a, double b) { return List::create( _["VectorNoLog"] = qtruncnorm(x, mu, sigma, a, b), _["DoubleNoLog"] = q_truncnorm(x[0], mu, sigma, a, b), _["VectorNoLogNoLower"] = qtruncnorm(x, mu, sigma, a, b, false), _["DoubleNoLogNoLower"] = q_truncnorm(x[0], mu, sigma, a, b, 0) ); } // nocov // [[Rcpp::export]] List test_qtruncnorm_log(NumericVector x, double mu, double sigma, double a, double b) { return List::create( _["VectorLog"] = qtruncnorm(x, mu, sigma, a, b, true, true), _["DoubleLog"] = q_truncnorm(x[0], mu, sigma, a, b, 1, 1), _["VectorLogNoLower"] = qtruncnorm(x, mu, sigma, a, b, false, true), _["DoubleLogNoLower"] = q_truncnorm(x[0], mu, sigma, a, b, 0, 1) ); } // nocov // TRUNCATED T DISTRIBUTION // [[Rcpp::export]] List test_dtrunct(NumericVector x, double df, double a, double b) { return List::create( _["VectorLog"] = dtrunct(x, df, a, b, true), _["VectorNoLog"] = dtrunct(x, df, a, b), _["DoubleLog"] = d_trunct(x[0], df, a, b, 1), _["DoubleNoLog"] = d_trunct(x[0], df, a, b) ); } // nocov // [[Rcpp::export]] List test_ptrunct(NumericVector x, double df, double a, double b) { return List::create( _["VectorLog"] = ptrunct(x, df, a, b, true, true), _["VectorNoLog"] = ptrunct(x, df, a, b), _["DoubleLog"] = p_trunct(x[0], df, a, b, 1, 1), _["DoubleNoLog"] = p_trunct(x[0], df, a, b), _["VectorLogNoLower"] = ptrunct(x, df, a, b, false, true), _["VectorNoLogNoLower"] = ptrunct(x, df, a, b, false), _["DoubleLogNoLower"] = p_trunct(x[0], df, a, b, 0, 1), _["DoubleNoLogNoLower"] = p_trunct(x[0], df, a, b, 0) ); } // nocov // [[Rcpp::export]] List test_qtrunct_nolog(NumericVector x, double df, double a, double b) { return List::create( _["VectorNoLog"] = qtrunct(x, df, a, b), _["DoubleNoLog"] = q_trunct(x[0], df, a, b), _["VectorNoLogNoLower"] = qtrunct(x, df, a, b, false), _["DoubleNoLogNoLower"] = q_trunct(x[0], df, a, b, 0) ); } // nocov // [[Rcpp::export]] List test_qtrunct_log(NumericVector x, double df, double a, double b) { return List::create( _["VectorLog"] = qtrunct(x, df, a, b, true, true), _["DoubleLog"] = q_trunct(x[0], df, a, b, 1, 1), _["VectorLogNoLower"] = qtrunct(x, df, a, b, false, true), _["DoubleLogNoLower"] = q_trunct(x[0], df, a, b, 0, 1) ); } // nocov // TRUNCATED LOCATION-SCALE T DISTRIBUTION // [[Rcpp::export]] List test_dtrunclst(NumericVector x, double df, double mu, double sigma, double a, double b) { return List::create( _["VectorLog"] = dtrunclst(x, df, mu, sigma, a, b, true), _["VectorNoLog"] = dtrunclst(x, df, mu, sigma, a, b), _["DoubleLog"] = d_trunclst(x[0], df, mu, sigma, a, b, 1), _["DoubleNoLog"] = d_trunclst(x[0], df, mu, sigma, a, b) ); } // nocov // [[Rcpp::export]] List test_ptrunclst(NumericVector x, double df, double mu, double sigma, double a, double b) { return List::create( _["VectorLog"] = ptrunclst(x, df, mu, sigma, a, b, true, true), _["VectorNoLog"] = ptrunclst(x, df, mu, sigma, a, b), _["DoubleLog"] = p_trunclst(x[0], df, mu, sigma, a, b, 1, 1), _["DoubleNoLog"] = p_trunclst(x[0], df, mu, sigma, a, b), _["VectorLogNoLower"] = ptrunclst(x, df, mu, sigma, a, b, false, true), _["VectorNoLogNoLower"] = ptrunclst(x, df, mu, sigma, a, b, false), _["DoubleLogNoLower"] = p_trunclst(x[0], df, mu, sigma, a, b, 0, 1), _["DoubleNoLogNoLower"] = p_trunclst(x[0], df, mu, sigma, a, b, 0) ); } // nocov // [[Rcpp::export]] List test_qtrunclst_nolog(NumericVector x, double df, double mu, double sigma, double a, double b) { return List::create( _["VectorNoLog"] = qtrunclst(x, df, mu, sigma, a, b), _["DoubleNoLog"] = q_trunclst(x[0], df, mu, sigma, a, b), _["VectorNoLogNoLower"] = qtrunclst(x, df, mu, sigma, a, b, false), _["DoubleNoLogNoLower"] = q_trunclst(x[0], df, mu, sigma, a, b, 0) ); } // nocov // [[Rcpp::export]] List test_qtrunclst_log(NumericVector x, double df, double mu, double sigma, double a, double b) { return List::create( _["VectorLog"] = qtrunclst(x, df, mu, sigma, a, b, true, true), _["DoubleLog"] = q_trunclst(x[0], df, mu, sigma, a, b, 1, 1), _["VectorLogNoLower"] = qtrunclst(x, df, mu, sigma, a, b, false, true), _["DoubleLogNoLower"] = q_trunclst(x[0], df, mu, sigma, a, b, 0, 1) ); } // nocov // FOUR PARAMETER BETA DISTRIBUTION // [[Rcpp::export]] List test_dtri(NumericVector x, double a, double b, double c) { return List::create( _["VectorLog"] = dtri(x, a, b, c, true), _["VectorNoLog"] = dtri(x, a, b, c), _["DoubleLog"] = d_tri(x[0], a, b, c, 1), _["DoubleNoLog"] = d_tri(x[0], a, b, c) ); } // nocov // [[Rcpp::export]] List test_ptri(NumericVector x, double a, double b, double c) { return List::create( _["VectorLog"] = ptri(x, a, b, c, true, true), _["VectorNoLog"] = ptri(x, a, b, c), _["DoubleLog"] = p_tri(x[0], a, b, c, 1, 1), _["DoubleNoLog"] = p_tri(x[0], a, b, c), _["VectorLogNoLower"] = ptri(x, a, b, c, false, true), _["VectorNoLogNoLower"] = ptri(x, a, b, c, false), _["DoubleLogNoLower"] = p_tri(x[0], a, b, c, 0, 1), _["DoubleNoLogNoLower"] = p_tri(x[0], a, b, c, 0) ); } // nocov // [[Rcpp::export]] List test_qtri_nolog(NumericVector x, double a, double b, double c) { return List::create( _["VectorNoLog"] = qtri(x, a, b, c), _["DoubleNoLog"] = q_tri(x[0], a, b, c), _["VectorNoLogNoLower"] = qtri(x, a, b, c, false), _["DoubleNoLogNoLower"] = q_tri(x[0], a, b, c, 0) ); } // nocov // [[Rcpp::export]] List test_qtri_log(NumericVector x, double a, double b, double c) { return List::create( _["VectorLog"] = qtri(x, a, b, c, true, true), _["DoubleLog"] = q_tri(x[0], a, b, c, 1, 1), _["VectorLogNoLower"] = qtri(x, a, b, c, false, true), _["DoubleLogNoLower"] = q_tri(x[0], a, b, c, 0, 1) ); } // nocov // MULTIVARIATE NORMAL DISTRIBUTION // [[Rcpp::export]] List test_dmvnorm(arma::mat x, arma::vec mu, arma::mat S) { return List::create( _["Log"] = dmvnorm(x, mu, S, true), _["NoLog"] = dmvnorm(x, mu, S, false) ); } // nocov // MULTIVARIATE T DISTRIBUTION // [[Rcpp::export]] List test_dmvt(arma::mat x, arma::vec mu, arma::mat S, double df) { return List::create( _["Log"] = dmvt(x, mu, S, df, true), _["NoLog"] = dmvt(x, mu, S, df, false) ); } // nocov // WISHART DISTRIBUTION // [[Rcpp::export]] List test_dwish(arma::mat x, int df, arma::mat S) { return List::create( _["Log"] = dwish(x, df, S, true), _["NoLog"] = dwish(x, df, S, false) ); } // nocov // INVERSE WISHART DISTRIBUTION // [[Rcpp::export]] List test_diwish(arma::mat x, int df, arma::mat S) { return List::create( _["Log"] = diwish(x, df, S, true), _["NoLog"] = diwish(x, df, S, false) ); } // nocov RcppDist/src/RcppExports.cpp0000644000175100001440000005246513363101416015616 0ustar hornikusers// Generated by using Rcpp::compileAttributes() -> do not edit by hand // Generator token: 10BE3573-1514-4C36-9D1C-5A225CD40393 #include "../inst/include/RcppDist.h" #include #include using namespace Rcpp; // bayeslm Rcpp::List bayeslm(const arma::vec& y, const arma::mat x, const int iters); RcppExport SEXP _RcppDist_bayeslm(SEXP ySEXP, SEXP xSEXP, SEXP itersSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< const arma::vec& >::type y(ySEXP); Rcpp::traits::input_parameter< const arma::mat >::type x(xSEXP); Rcpp::traits::input_parameter< const int >::type iters(itersSEXP); rcpp_result_gen = Rcpp::wrap(bayeslm(y, x, iters)); return rcpp_result_gen; END_RCPP } // test_d4beta List test_d4beta(NumericVector x, double shape1, double shape2, double a, double b); RcppExport SEXP _RcppDist_test_d4beta(SEXP xSEXP, SEXP shape1SEXP, SEXP shape2SEXP, SEXP aSEXP, SEXP bSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< NumericVector >::type x(xSEXP); Rcpp::traits::input_parameter< double >::type shape1(shape1SEXP); Rcpp::traits::input_parameter< double >::type shape2(shape2SEXP); Rcpp::traits::input_parameter< double >::type a(aSEXP); Rcpp::traits::input_parameter< double >::type b(bSEXP); rcpp_result_gen = Rcpp::wrap(test_d4beta(x, shape1, shape2, a, b)); return rcpp_result_gen; END_RCPP } // test_p4beta List test_p4beta(NumericVector x, double shape1, double shape2, double a, double b); RcppExport SEXP _RcppDist_test_p4beta(SEXP xSEXP, SEXP shape1SEXP, SEXP shape2SEXP, SEXP aSEXP, SEXP bSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< NumericVector >::type x(xSEXP); Rcpp::traits::input_parameter< double >::type shape1(shape1SEXP); Rcpp::traits::input_parameter< double >::type shape2(shape2SEXP); Rcpp::traits::input_parameter< double >::type a(aSEXP); Rcpp::traits::input_parameter< double >::type b(bSEXP); rcpp_result_gen = Rcpp::wrap(test_p4beta(x, shape1, shape2, a, b)); return rcpp_result_gen; END_RCPP } // test_q4beta_nolog List test_q4beta_nolog(NumericVector x, double shape1, double shape2, double a, double b); RcppExport SEXP _RcppDist_test_q4beta_nolog(SEXP xSEXP, SEXP shape1SEXP, SEXP shape2SEXP, SEXP aSEXP, SEXP bSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< NumericVector >::type x(xSEXP); Rcpp::traits::input_parameter< double >::type shape1(shape1SEXP); Rcpp::traits::input_parameter< double >::type shape2(shape2SEXP); Rcpp::traits::input_parameter< double >::type a(aSEXP); Rcpp::traits::input_parameter< double >::type b(bSEXP); rcpp_result_gen = Rcpp::wrap(test_q4beta_nolog(x, shape1, shape2, a, b)); return rcpp_result_gen; END_RCPP } // test_q4beta_log List test_q4beta_log(NumericVector x, double shape1, double shape2, double a, double b); RcppExport SEXP _RcppDist_test_q4beta_log(SEXP xSEXP, SEXP shape1SEXP, SEXP shape2SEXP, SEXP aSEXP, SEXP bSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< NumericVector >::type x(xSEXP); Rcpp::traits::input_parameter< double >::type shape1(shape1SEXP); Rcpp::traits::input_parameter< double >::type shape2(shape2SEXP); Rcpp::traits::input_parameter< double >::type a(aSEXP); Rcpp::traits::input_parameter< double >::type b(bSEXP); rcpp_result_gen = Rcpp::wrap(test_q4beta_log(x, shape1, shape2, a, b)); return rcpp_result_gen; END_RCPP } // test_dlst List test_dlst(NumericVector x, double df, double mu, double sigma); RcppExport SEXP _RcppDist_test_dlst(SEXP xSEXP, SEXP dfSEXP, SEXP muSEXP, SEXP sigmaSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< NumericVector >::type x(xSEXP); Rcpp::traits::input_parameter< double >::type df(dfSEXP); Rcpp::traits::input_parameter< double >::type mu(muSEXP); Rcpp::traits::input_parameter< double >::type sigma(sigmaSEXP); rcpp_result_gen = Rcpp::wrap(test_dlst(x, df, mu, sigma)); return rcpp_result_gen; END_RCPP } // test_plst List test_plst(NumericVector x, double df, double mu, double sigma); RcppExport SEXP _RcppDist_test_plst(SEXP xSEXP, SEXP dfSEXP, SEXP muSEXP, SEXP sigmaSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< NumericVector >::type x(xSEXP); Rcpp::traits::input_parameter< double >::type df(dfSEXP); Rcpp::traits::input_parameter< double >::type mu(muSEXP); Rcpp::traits::input_parameter< double >::type sigma(sigmaSEXP); rcpp_result_gen = Rcpp::wrap(test_plst(x, df, mu, sigma)); return rcpp_result_gen; END_RCPP } // test_qlst_nolog List test_qlst_nolog(NumericVector x, double df, double mu, double sigma); RcppExport SEXP _RcppDist_test_qlst_nolog(SEXP xSEXP, SEXP dfSEXP, SEXP muSEXP, SEXP sigmaSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< NumericVector >::type x(xSEXP); Rcpp::traits::input_parameter< double >::type df(dfSEXP); Rcpp::traits::input_parameter< double >::type mu(muSEXP); Rcpp::traits::input_parameter< double >::type sigma(sigmaSEXP); rcpp_result_gen = Rcpp::wrap(test_qlst_nolog(x, df, mu, sigma)); return rcpp_result_gen; END_RCPP } // test_qlst_log List test_qlst_log(NumericVector x, double df, double mu, double sigma); RcppExport SEXP _RcppDist_test_qlst_log(SEXP xSEXP, SEXP dfSEXP, SEXP muSEXP, SEXP sigmaSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< NumericVector >::type x(xSEXP); Rcpp::traits::input_parameter< double >::type df(dfSEXP); Rcpp::traits::input_parameter< double >::type mu(muSEXP); Rcpp::traits::input_parameter< double >::type sigma(sigmaSEXP); rcpp_result_gen = Rcpp::wrap(test_qlst_log(x, df, mu, sigma)); return rcpp_result_gen; END_RCPP } // test_dtruncnorm List test_dtruncnorm(NumericVector x, double mu, double sigma, double a, double b); RcppExport SEXP _RcppDist_test_dtruncnorm(SEXP xSEXP, SEXP muSEXP, SEXP sigmaSEXP, SEXP aSEXP, SEXP bSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< NumericVector >::type x(xSEXP); Rcpp::traits::input_parameter< double >::type mu(muSEXP); Rcpp::traits::input_parameter< double >::type sigma(sigmaSEXP); Rcpp::traits::input_parameter< double >::type a(aSEXP); Rcpp::traits::input_parameter< double >::type b(bSEXP); rcpp_result_gen = Rcpp::wrap(test_dtruncnorm(x, mu, sigma, a, b)); return rcpp_result_gen; END_RCPP } // test_ptruncnorm List test_ptruncnorm(NumericVector x, double mu, double sigma, double a, double b); RcppExport SEXP _RcppDist_test_ptruncnorm(SEXP xSEXP, SEXP muSEXP, SEXP sigmaSEXP, SEXP aSEXP, SEXP bSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< NumericVector >::type x(xSEXP); Rcpp::traits::input_parameter< double >::type mu(muSEXP); Rcpp::traits::input_parameter< double >::type sigma(sigmaSEXP); Rcpp::traits::input_parameter< double >::type a(aSEXP); Rcpp::traits::input_parameter< double >::type b(bSEXP); rcpp_result_gen = Rcpp::wrap(test_ptruncnorm(x, mu, sigma, a, b)); return rcpp_result_gen; END_RCPP } // test_qtruncnorm_nolog List test_qtruncnorm_nolog(NumericVector x, double mu, double sigma, double a, double b); RcppExport SEXP _RcppDist_test_qtruncnorm_nolog(SEXP xSEXP, SEXP muSEXP, SEXP sigmaSEXP, SEXP aSEXP, SEXP bSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< NumericVector >::type x(xSEXP); Rcpp::traits::input_parameter< double >::type mu(muSEXP); Rcpp::traits::input_parameter< double >::type sigma(sigmaSEXP); Rcpp::traits::input_parameter< double >::type a(aSEXP); Rcpp::traits::input_parameter< double >::type b(bSEXP); rcpp_result_gen = Rcpp::wrap(test_qtruncnorm_nolog(x, mu, sigma, a, b)); return rcpp_result_gen; END_RCPP } // test_qtruncnorm_log List test_qtruncnorm_log(NumericVector x, double mu, double sigma, double a, double b); RcppExport SEXP _RcppDist_test_qtruncnorm_log(SEXP xSEXP, SEXP muSEXP, SEXP sigmaSEXP, SEXP aSEXP, SEXP bSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< NumericVector >::type x(xSEXP); Rcpp::traits::input_parameter< double >::type mu(muSEXP); Rcpp::traits::input_parameter< double >::type sigma(sigmaSEXP); Rcpp::traits::input_parameter< double >::type a(aSEXP); Rcpp::traits::input_parameter< double >::type b(bSEXP); rcpp_result_gen = Rcpp::wrap(test_qtruncnorm_log(x, mu, sigma, a, b)); return rcpp_result_gen; END_RCPP } // test_dtrunct List test_dtrunct(NumericVector x, double df, double a, double b); RcppExport SEXP _RcppDist_test_dtrunct(SEXP xSEXP, SEXP dfSEXP, SEXP aSEXP, SEXP bSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< NumericVector >::type x(xSEXP); Rcpp::traits::input_parameter< double >::type df(dfSEXP); Rcpp::traits::input_parameter< double >::type a(aSEXP); Rcpp::traits::input_parameter< double >::type b(bSEXP); rcpp_result_gen = Rcpp::wrap(test_dtrunct(x, df, a, b)); return rcpp_result_gen; END_RCPP } // test_ptrunct List test_ptrunct(NumericVector x, double df, double a, double b); RcppExport SEXP _RcppDist_test_ptrunct(SEXP xSEXP, SEXP dfSEXP, SEXP aSEXP, SEXP bSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< NumericVector >::type x(xSEXP); Rcpp::traits::input_parameter< double >::type df(dfSEXP); Rcpp::traits::input_parameter< double >::type a(aSEXP); Rcpp::traits::input_parameter< double >::type b(bSEXP); rcpp_result_gen = Rcpp::wrap(test_ptrunct(x, df, a, b)); return rcpp_result_gen; END_RCPP } // test_qtrunct_nolog List test_qtrunct_nolog(NumericVector x, double df, double a, double b); RcppExport SEXP _RcppDist_test_qtrunct_nolog(SEXP xSEXP, SEXP dfSEXP, SEXP aSEXP, SEXP bSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< NumericVector >::type x(xSEXP); Rcpp::traits::input_parameter< double >::type df(dfSEXP); Rcpp::traits::input_parameter< double >::type a(aSEXP); Rcpp::traits::input_parameter< double >::type b(bSEXP); rcpp_result_gen = Rcpp::wrap(test_qtrunct_nolog(x, df, a, b)); return rcpp_result_gen; END_RCPP } // test_qtrunct_log List test_qtrunct_log(NumericVector x, double df, double a, double b); RcppExport SEXP _RcppDist_test_qtrunct_log(SEXP xSEXP, SEXP dfSEXP, SEXP aSEXP, SEXP bSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< NumericVector >::type x(xSEXP); Rcpp::traits::input_parameter< double >::type df(dfSEXP); Rcpp::traits::input_parameter< double >::type a(aSEXP); Rcpp::traits::input_parameter< double >::type b(bSEXP); rcpp_result_gen = Rcpp::wrap(test_qtrunct_log(x, df, a, b)); return rcpp_result_gen; END_RCPP } // test_dtrunclst List test_dtrunclst(NumericVector x, double df, double mu, double sigma, double a, double b); RcppExport SEXP _RcppDist_test_dtrunclst(SEXP xSEXP, SEXP dfSEXP, SEXP muSEXP, SEXP sigmaSEXP, SEXP aSEXP, SEXP bSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< NumericVector >::type x(xSEXP); Rcpp::traits::input_parameter< double >::type df(dfSEXP); Rcpp::traits::input_parameter< double >::type mu(muSEXP); Rcpp::traits::input_parameter< double >::type sigma(sigmaSEXP); Rcpp::traits::input_parameter< double >::type a(aSEXP); Rcpp::traits::input_parameter< double >::type b(bSEXP); rcpp_result_gen = Rcpp::wrap(test_dtrunclst(x, df, mu, sigma, a, b)); return rcpp_result_gen; END_RCPP } // test_ptrunclst List test_ptrunclst(NumericVector x, double df, double mu, double sigma, double a, double b); RcppExport SEXP _RcppDist_test_ptrunclst(SEXP xSEXP, SEXP dfSEXP, SEXP muSEXP, SEXP sigmaSEXP, SEXP aSEXP, SEXP bSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< NumericVector >::type x(xSEXP); Rcpp::traits::input_parameter< double >::type df(dfSEXP); Rcpp::traits::input_parameter< double >::type mu(muSEXP); Rcpp::traits::input_parameter< double >::type sigma(sigmaSEXP); Rcpp::traits::input_parameter< double >::type a(aSEXP); Rcpp::traits::input_parameter< double >::type b(bSEXP); rcpp_result_gen = Rcpp::wrap(test_ptrunclst(x, df, mu, sigma, a, b)); return rcpp_result_gen; END_RCPP } // test_qtrunclst_nolog List test_qtrunclst_nolog(NumericVector x, double df, double mu, double sigma, double a, double b); RcppExport SEXP _RcppDist_test_qtrunclst_nolog(SEXP xSEXP, SEXP dfSEXP, SEXP muSEXP, SEXP sigmaSEXP, SEXP aSEXP, SEXP bSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< NumericVector >::type x(xSEXP); Rcpp::traits::input_parameter< double >::type df(dfSEXP); Rcpp::traits::input_parameter< double >::type mu(muSEXP); Rcpp::traits::input_parameter< double >::type sigma(sigmaSEXP); Rcpp::traits::input_parameter< double >::type a(aSEXP); Rcpp::traits::input_parameter< double >::type b(bSEXP); rcpp_result_gen = Rcpp::wrap(test_qtrunclst_nolog(x, df, mu, sigma, a, b)); return rcpp_result_gen; END_RCPP } // test_qtrunclst_log List test_qtrunclst_log(NumericVector x, double df, double mu, double sigma, double a, double b); RcppExport SEXP _RcppDist_test_qtrunclst_log(SEXP xSEXP, SEXP dfSEXP, SEXP muSEXP, SEXP sigmaSEXP, SEXP aSEXP, SEXP bSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< NumericVector >::type x(xSEXP); Rcpp::traits::input_parameter< double >::type df(dfSEXP); Rcpp::traits::input_parameter< double >::type mu(muSEXP); Rcpp::traits::input_parameter< double >::type sigma(sigmaSEXP); Rcpp::traits::input_parameter< double >::type a(aSEXP); Rcpp::traits::input_parameter< double >::type b(bSEXP); rcpp_result_gen = Rcpp::wrap(test_qtrunclst_log(x, df, mu, sigma, a, b)); return rcpp_result_gen; END_RCPP } // test_dtri List test_dtri(NumericVector x, double a, double b, double c); RcppExport SEXP _RcppDist_test_dtri(SEXP xSEXP, SEXP aSEXP, SEXP bSEXP, SEXP cSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< NumericVector >::type x(xSEXP); Rcpp::traits::input_parameter< double >::type a(aSEXP); Rcpp::traits::input_parameter< double >::type b(bSEXP); Rcpp::traits::input_parameter< double >::type c(cSEXP); rcpp_result_gen = Rcpp::wrap(test_dtri(x, a, b, c)); return rcpp_result_gen; END_RCPP } // test_ptri List test_ptri(NumericVector x, double a, double b, double c); RcppExport SEXP _RcppDist_test_ptri(SEXP xSEXP, SEXP aSEXP, SEXP bSEXP, SEXP cSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< NumericVector >::type x(xSEXP); Rcpp::traits::input_parameter< double >::type a(aSEXP); Rcpp::traits::input_parameter< double >::type b(bSEXP); Rcpp::traits::input_parameter< double >::type c(cSEXP); rcpp_result_gen = Rcpp::wrap(test_ptri(x, a, b, c)); return rcpp_result_gen; END_RCPP } // test_qtri_nolog List test_qtri_nolog(NumericVector x, double a, double b, double c); RcppExport SEXP _RcppDist_test_qtri_nolog(SEXP xSEXP, SEXP aSEXP, SEXP bSEXP, SEXP cSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< NumericVector >::type x(xSEXP); Rcpp::traits::input_parameter< double >::type a(aSEXP); Rcpp::traits::input_parameter< double >::type b(bSEXP); Rcpp::traits::input_parameter< double >::type c(cSEXP); rcpp_result_gen = Rcpp::wrap(test_qtri_nolog(x, a, b, c)); return rcpp_result_gen; END_RCPP } // test_qtri_log List test_qtri_log(NumericVector x, double a, double b, double c); RcppExport SEXP _RcppDist_test_qtri_log(SEXP xSEXP, SEXP aSEXP, SEXP bSEXP, SEXP cSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< NumericVector >::type x(xSEXP); Rcpp::traits::input_parameter< double >::type a(aSEXP); Rcpp::traits::input_parameter< double >::type b(bSEXP); Rcpp::traits::input_parameter< double >::type c(cSEXP); rcpp_result_gen = Rcpp::wrap(test_qtri_log(x, a, b, c)); return rcpp_result_gen; END_RCPP } // test_dmvnorm List test_dmvnorm(arma::mat x, arma::vec mu, arma::mat S); RcppExport SEXP _RcppDist_test_dmvnorm(SEXP xSEXP, SEXP muSEXP, SEXP SSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< arma::mat >::type x(xSEXP); Rcpp::traits::input_parameter< arma::vec >::type mu(muSEXP); Rcpp::traits::input_parameter< arma::mat >::type S(SSEXP); rcpp_result_gen = Rcpp::wrap(test_dmvnorm(x, mu, S)); return rcpp_result_gen; END_RCPP } // test_dmvt List test_dmvt(arma::mat x, arma::vec mu, arma::mat S, double df); RcppExport SEXP _RcppDist_test_dmvt(SEXP xSEXP, SEXP muSEXP, SEXP SSEXP, SEXP dfSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< arma::mat >::type x(xSEXP); Rcpp::traits::input_parameter< arma::vec >::type mu(muSEXP); Rcpp::traits::input_parameter< arma::mat >::type S(SSEXP); Rcpp::traits::input_parameter< double >::type df(dfSEXP); rcpp_result_gen = Rcpp::wrap(test_dmvt(x, mu, S, df)); return rcpp_result_gen; END_RCPP } // test_dwish List test_dwish(arma::mat x, int df, arma::mat S); RcppExport SEXP _RcppDist_test_dwish(SEXP xSEXP, SEXP dfSEXP, SEXP SSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< arma::mat >::type x(xSEXP); Rcpp::traits::input_parameter< int >::type df(dfSEXP); Rcpp::traits::input_parameter< arma::mat >::type S(SSEXP); rcpp_result_gen = Rcpp::wrap(test_dwish(x, df, S)); return rcpp_result_gen; END_RCPP } // test_diwish List test_diwish(arma::mat x, int df, arma::mat S); RcppExport SEXP _RcppDist_test_diwish(SEXP xSEXP, SEXP dfSEXP, SEXP SSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< arma::mat >::type x(xSEXP); Rcpp::traits::input_parameter< int >::type df(dfSEXP); Rcpp::traits::input_parameter< arma::mat >::type S(SSEXP); rcpp_result_gen = Rcpp::wrap(test_diwish(x, df, S)); return rcpp_result_gen; END_RCPP } static const R_CallMethodDef CallEntries[] = { {"_RcppDist_bayeslm", (DL_FUNC) &_RcppDist_bayeslm, 3}, {"_RcppDist_test_d4beta", (DL_FUNC) &_RcppDist_test_d4beta, 5}, {"_RcppDist_test_p4beta", (DL_FUNC) &_RcppDist_test_p4beta, 5}, {"_RcppDist_test_q4beta_nolog", (DL_FUNC) &_RcppDist_test_q4beta_nolog, 5}, {"_RcppDist_test_q4beta_log", (DL_FUNC) &_RcppDist_test_q4beta_log, 5}, {"_RcppDist_test_dlst", (DL_FUNC) &_RcppDist_test_dlst, 4}, {"_RcppDist_test_plst", (DL_FUNC) &_RcppDist_test_plst, 4}, {"_RcppDist_test_qlst_nolog", (DL_FUNC) &_RcppDist_test_qlst_nolog, 4}, {"_RcppDist_test_qlst_log", (DL_FUNC) &_RcppDist_test_qlst_log, 4}, {"_RcppDist_test_dtruncnorm", (DL_FUNC) &_RcppDist_test_dtruncnorm, 5}, {"_RcppDist_test_ptruncnorm", (DL_FUNC) &_RcppDist_test_ptruncnorm, 5}, {"_RcppDist_test_qtruncnorm_nolog", (DL_FUNC) &_RcppDist_test_qtruncnorm_nolog, 5}, {"_RcppDist_test_qtruncnorm_log", (DL_FUNC) &_RcppDist_test_qtruncnorm_log, 5}, {"_RcppDist_test_dtrunct", (DL_FUNC) &_RcppDist_test_dtrunct, 4}, {"_RcppDist_test_ptrunct", (DL_FUNC) &_RcppDist_test_ptrunct, 4}, {"_RcppDist_test_qtrunct_nolog", (DL_FUNC) &_RcppDist_test_qtrunct_nolog, 4}, {"_RcppDist_test_qtrunct_log", (DL_FUNC) &_RcppDist_test_qtrunct_log, 4}, {"_RcppDist_test_dtrunclst", (DL_FUNC) &_RcppDist_test_dtrunclst, 6}, {"_RcppDist_test_ptrunclst", (DL_FUNC) &_RcppDist_test_ptrunclst, 6}, {"_RcppDist_test_qtrunclst_nolog", (DL_FUNC) &_RcppDist_test_qtrunclst_nolog, 6}, {"_RcppDist_test_qtrunclst_log", (DL_FUNC) &_RcppDist_test_qtrunclst_log, 6}, {"_RcppDist_test_dtri", (DL_FUNC) &_RcppDist_test_dtri, 4}, {"_RcppDist_test_ptri", (DL_FUNC) &_RcppDist_test_ptri, 4}, {"_RcppDist_test_qtri_nolog", (DL_FUNC) &_RcppDist_test_qtri_nolog, 4}, {"_RcppDist_test_qtri_log", (DL_FUNC) &_RcppDist_test_qtri_log, 4}, {"_RcppDist_test_dmvnorm", (DL_FUNC) &_RcppDist_test_dmvnorm, 3}, {"_RcppDist_test_dmvt", (DL_FUNC) &_RcppDist_test_dmvt, 4}, {"_RcppDist_test_dwish", (DL_FUNC) &_RcppDist_test_dwish, 3}, {"_RcppDist_test_diwish", (DL_FUNC) &_RcppDist_test_diwish, 3}, {NULL, NULL, 0} }; RcppExport void R_init_RcppDist(DllInfo *dll) { R_registerRoutines(dll, NULL, CallEntries, NULL, NULL); R_useDynamicSymbols(dll, FALSE); } RcppDist/src/Makevars.win0000644000175100001440000000022215022504723015073 0ustar hornikusersPKG_CXXFLAGS = $(SHLIB_OPENMP_CXXFLAGS) PKG_LIBS = $(SHLIB_OPENMP_CXXFLAGS) $(LAPACK_LIBS) $(BLAS_LIBS) $(FLIBS) PKG_CPPFLAGS = -I../inst/include RcppDist/src/Makevars.in0000644000175100001440000000017415022504716014714 0ustar hornikusersPKG_CXXFLAGS = @OPENMP_FLAG@ PKG_LIBS = @OPENMP_FLAG@ $(LAPACK_LIBS) $(BLAS_LIBS) $(FLIBS) PKG_CPPFLAGS = -I../inst/include RcppDist/src/bayeslm.cpp0000644000175100001440000000654213363101416014754 0ustar hornikusers#include #include //' bayeslm //' //' Demonstrates the use of RcppDist in C++ with Bayesian linear regression //' //' To see an example of using RcppDist C++ functions in C++ code, //' we can code up a Bayesian linear regression with completely uninformative //' priors (such that estimates should be equivalent to classical estimates). //' The code to do so is as follows: //' \preformatted{ //' #include //' // or, alternatively, //' // #include //' // #include //' //' // [[Rcpp::depends(RcppArmadillo, RcppDist)]] //' //' // [[Rcpp::export]] //' Rcpp::List bayeslm(const arma::vec& y, const arma::mat x, //' const int iters = 1000) { //' int n = x.n_rows; //' int p = x.n_cols; //' double a = (n - p) / 2.0; //' arma::mat xtx = x.t() * x; //' arma::mat xtxinv = xtx.i(); //' arma::vec mu = xtxinv * x.t() * y; //' arma::mat px = x * xtxinv * x.t(); //' double ssq = arma::as_scalar(y.t() * (arma::eye(n, n) - px) * y); //' ssq *= (1.0 / (n - p)); //' double b = 1.0 / (a * ssq); //' arma::mat beta_draws(iters, p); //' Rcpp::NumericVector sigma_draws(iters); //' for ( int iter = 0; iter < iters; ++iter ) { //' double sigmasq = 1.0 / R::rgamma(a, b); //' sigma_draws[iter] = sigmasq; //' // Here we can use our multivariate normal generator //' beta_draws.row(iter) = rmvnorm(1, mu, xtxinv * sigmasq); //' } //' return Rcpp::List::create(Rcpp::_["beta_draws"] = beta_draws, //' Rcpp::_["sigma_draws"] = sigma_draws); //' } //' } //' //' @param y A numeric vector -- the response //' @param x A numeric matrix -- the explanatory variables; note this assumes //' you have included a column of ones if you intend there to be an intercept. //' @param iters An integer vector of length one, the number of posterior draws //' desired; the default is 1000. //' //' @return A list of length two; the first element is a numeric matrix of the //' beta draws and the second element is a numeric vector of the sigma draws //' @examples //' set.seed(123) //' n <- 30 //' x <- cbind(1, matrix(rnorm(n*3), ncol = 3)) //' beta <- matrix(c(10, 2, -1, 3), nrow = 4) //' y <- x %*% beta + rnorm(n) //' freqmod <- lm(y ~ x[ , -1]) //' bayesmod <- bayeslm(y, x) //' round(unname(coef(freqmod)), 2) //' round(apply(bayesmod$beta_draws, 2, mean), 2) //' c(beta) //' @export // [[Rcpp::export]] Rcpp::List bayeslm(const arma::vec& y, const arma::mat x, const int iters = 1000) { int n = x.n_rows; int p = x.n_cols; double a = (n - p) / 2.0; arma::mat xtx = x.t() * x; arma::mat xtxinv = xtx.i(); arma::vec mu = xtxinv * x.t() * y; arma::mat px = x * xtxinv * x.t(); double ssq = arma::as_scalar(y.t() * (arma::eye(n, n) - px) * y); ssq *= (1.0 / (n - p)); double b = 1.0 / (a * ssq); arma::mat beta_draws(iters, p); Rcpp::NumericVector sigma_draws(iters); for ( int iter = 0; iter < iters; ++iter ) { double sigmasq = 1.0 / R::rgamma(a, b); sigma_draws[iter] = sigmasq; // Here we can use our multivariate normal generator beta_draws.row(iter) = rmvnorm(1, mu, xtxinv * sigmasq); } return Rcpp::List::create(Rcpp::_["beta_draws"] = beta_draws, Rcpp::_["sigma_draws"] = sigma_draws); } RcppDist/NAMESPACE0000644000175100001440000000015513362766504013254 0ustar hornikusers# Generated by roxygen2: do not edit by hand export(bayeslm) importFrom(Rcpp,sourceCpp) useDynLib(RcppDist) RcppDist/configure.ac0000644000175100001440000000370715022503442014312 0ustar hornikusers## -*- mode: autoconf; autoconf-indentation: 4; -*- ## ## Copyright (C) 2016 - 2017 Dirk Eddelbuettel for ## the RcppArmadillo package. Licensed under GPL-2 or later ## This file is a subset of the configure.ac used by ## RcppArmadillo, adapted for the mfbvar package by ## Sebastian Ankargren, and used with slight modification for the ## RcppDist package by JB Duck-Mayr ## require at least autoconf 2.61 AC_PREREQ(2.61) ## Process this file with autoconf to produce a configure script. AC_INIT([RcppDist], 0.1.0) ## Set R_HOME, respecting an environment variable if one is set : ${R_HOME=$(R RHOME)} if test -z "${R_HOME}"; then AC_MSG_ERROR([Could not determine R_HOME.]) fi ## Use R to set CXX and CXXFLAGS CXX=$(${R_HOME}/bin/R CMD config CXX) CXXFLAGS=$("${R_HOME}/bin/R" CMD config CXXFLAGS) ## We are using C++ AC_LANG(C++) AC_REQUIRE_CPP ## Default the OpenMP flag to the empty string. ## If and only if OpenMP is found, expand to $(SHLIB_OPENMP_CXXFLAGS) openmp_flag="" openmp_cflag="" ## Check for broken systems produced by a corporation based in Cupertino AC_MSG_CHECKING([for macOS]) RSysinfoName=$("${R_HOME}/bin/Rscript" --vanilla -e 'cat(Sys.info()[["sysname"]])') if test x"${RSysinfoName}" = x"Darwin"; then AC_MSG_RESULT([found]) AC_MSG_WARN([OpenMP unavailable and turned off.]) openmp_flag="-DARMA_DONT_USE_OPENMP" else AC_MSG_RESULT([not found as on ${RSysinfoName}]) ## Check for OpenMP AC_MSG_CHECKING([for OpenMP]) ## if R has -fopenmp we should be good allldflags=$(${R_HOME}/bin/R CMD config --ldflags) hasOpenMP=$(echo ${allldflags} | grep -- -fopenmp) if test x"${hasOpenMP}" = x""; then AC_MSG_RESULT([missing]) openmp_flag="-DARMA_DONT_USE_OPENMP" else AC_MSG_RESULT([found]) openmp_flag='$(SHLIB_OPENMP_CXXFLAGS)' openmp_cflag='$(SHLIB_OPENMP_CFLAGS)' fi fi AC_SUBST([OPENMP_CFLAG], ["${openmp_cflag}"]) AC_SUBST([OPENMP_FLAG], ["${openmp_flag}"]) AC_CONFIG_FILES([src/Makevars]) AC_OUTPUT RcppDist/inst/0000755000175100001440000000000013363101416012773 5ustar hornikusersRcppDist/inst/include/0000755000175100001440000000000013354475130014425 5ustar hornikusersRcppDist/inst/include/truncnorm.h0000644000175100001440000001561713354475103016637 0ustar hornikusers// truncnorm.h // // Copyright (C) 2018 JB Duck-Mayr // // This file is part of RcppDist. // // RcppDist is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // RcppDist is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with RcppDist. If not, see . #ifndef RCPPDIST_TRUNCNORM_H #define RCPPDIST_TRUNCNORM_H // Vector versions: inline Rcpp::NumericVector dtruncnorm(const Rcpp::NumericVector& x, const double mu, const double sigma, const double a, const double b, const bool log_p = false) { int n = x.size(); Rcpp::NumericVector result(n); double scale = R::pnorm(b, mu, sigma, 1, 0) - R::pnorm(a, mu, sigma, 1, 0); if ( log_p ) { scale = log(scale); for ( int i = 0; i < n; ++i ) { if ( x[i] < a || x[i] > b ) { result[i] = R_NegInf; } else { result[i] = R::dnorm(x[i], mu, sigma, 1) - scale; } } } else { scale = 1.0 / scale; for ( int i = 0; i < n; ++i ) { if ( x[i] < a || x[i] > b ) { result[i] = 0.0; } else { result[i] = R::dnorm(x[i], mu, sigma, 0) * scale; } } } return result; } inline Rcpp::NumericVector ptruncnorm(const Rcpp::NumericVector& x, const double mu, const double sigma, const double a, const double b, const bool lower_tail = true, const bool log_p = false) { int n = x.size(); Rcpp::NumericVector result(n); double F_a = R::pnorm(a, mu, sigma, 1, 0); double F_b = R::pnorm(b, mu, sigma, 1, 0); if ( lower_tail ) { if ( log_p ) { double scale = log(F_b - F_a); for ( int i = 0; i < n; ++i ) { if ( x[i] > b ) { result[i] = 0.0; } else if ( x[i] < a ) { result[i] = R_NegInf; } else{ result[i] = log(R::pnorm(x[i], mu, sigma, 1, 0) - F_a) - scale; } } } else { double scale = 1.0 / (F_b - F_a); for ( int i = 0; i < n; ++i ) { double q = std::max(std::min(x[i], b), a); result[i] = (R::pnorm(q, mu, sigma, 1, 0) - F_a) * scale; } } } else { double scale = 1.0 / (F_b - F_a); if ( log_p ) { for ( int i = 0; i < n; ++i ) { if ( x[i] > b ) { result[i] = R_NegInf; } else if ( x[i] < a ) { result[i] = 0.0; } else{ result[i] = log(1.0 - ((R::pnorm(x[i], mu, sigma, 1, 0) - F_a) * scale)); } } } else { for ( int i = 0; i < n; ++i ) { double q = std::max(std::min(x[i], b), a); result[i] = 1 - ((R::pnorm(q, mu, sigma, 1, 0) - F_a) * scale); } } } return result; } inline Rcpp::NumericVector qtruncnorm(const Rcpp::NumericVector& p, const double mu, const double sigma, const double a, const double b, const bool lower_tail = true, const bool log_p = false) { int n = p.size(); Rcpp::NumericVector probs = Rcpp::clone(p); if ( log_p ) { probs = Rcpp::exp(probs); } if ( !lower_tail ) { probs = 1 - probs; } double F_a = R::pnorm(a, mu, sigma, 1, 0); double F_b = R::pnorm(b, mu, sigma, 1, 0); Rcpp::NumericVector result(n); for ( int i = 0; i < n; ++i ) { double q = R::qnorm(F_a + probs[i] * (F_b - F_a), mu, sigma, 1, 0); result[i] = std::min(std::max(a, q), b); } return result; } inline Rcpp::NumericVector rtruncnorm(const int n, const double mu, const double sigma, const double a, const double b) { return qtruncnorm(Rcpp::runif(n), mu, sigma, a, b); } // Scalar versions: inline double d_truncnorm(const double x, const double mu, const double sigma, const double a, const double b, const int log_p = 0) { if ( x < a || x > b ) { return log_p ? R_NegInf : 0.0; } double scale = R::pnorm(b, mu, sigma, 1, 0) - R::pnorm(a, mu, sigma, 1, 0); if ( log_p ) { return R::dnorm(x, mu, sigma, 1) - log(scale); } return R::dnorm(x, mu, sigma, 0) / scale; } inline double p_truncnorm(const double x, const double mu, const double sigma, const double a, const double b, const int lower_tail = 1, const int log_p = 0) { double F_a = R::pnorm(a, mu, sigma, 1, 0); double F_b = R::pnorm(b, mu, sigma, 1, 0); if ( lower_tail ) { if ( log_p ) { if ( x < a ) { return R_NegInf; } else if ( x > b ) { return 0.0; } else { return log(R::pnorm(x, mu, sigma, 1, 0) - F_a) - log(F_b - F_a); } } else { if ( x < a ) { return 0.0; } else if ( x > b ) { return 1.0; } else { return (R::pnorm(x, mu, sigma, 1, 0) - F_a) / (F_b - F_a); } } } else { if ( log_p ) { if ( x < a ) { return 0.0; } else if ( x > b ) { return R_NegInf; } else { return log(1.0 - ((R::pnorm(x, mu, sigma, 1, 0) - F_a) / (F_b-F_a))); } } else { if ( x < a ) { return 1.0; } else if ( x > b ) { return 0.0; } else { return 1.0 - (R::pnorm(x, mu, sigma, 1, 0) - F_a) / (F_b - F_a); } } } } inline double q_truncnorm(const double p, const double mu, const double sigma, const double a, const double b, const int lower_tail = 1, const int log_p = 0) { double prob = p; if ( log_p ) { prob = exp(prob); } if ( !lower_tail ) { prob = 1 - prob; } double F_a = R::pnorm(a, mu, sigma, 1, 0); double F_b = R::pnorm(b, mu, sigma, 1, 0); double q = R::qnorm(F_a + prob * (F_b - F_a), mu, sigma, 1, 0); return std::min(std::max(a, q), b); } inline double r_truncnorm(const double mu, const double sigma, const double a, const double b) { return q_truncnorm(R::runif(0.0, 1.0), mu, sigma, a, b); } #endif RcppDist/inst/include/RcppDist.h0000644000175100001440000000207413354475130016331 0ustar hornikusers// RcppDist.h // // Copyright (C) 2018 JB Duck-Mayr // // This file is part of RcppDist. // // RcppDist is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // RcppDist is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with RcppDist. If not, see . #ifndef RCPPDIST_RCPPDIST_H #define RCPPDIST_RCPPDIST_H #ifdef RCPPDIST_DONT_USE_ARMA #include #else #include #include #include #include #endif #include <4beta.h> #include #include #include #include #include #endif RcppDist/inst/include/triangular.h0000644000175100001440000001150213354475103016745 0ustar hornikusers// triangular.h // // Copyright (C) 2018 JB Duck-Mayr // // This file is part of RcppDist. // // RcppDist is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // RcppDist is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with RcppDist. If not, see . #ifndef RCPPDIST_TRIANGULAR_H #define RCPPDIST_TRIANGULAR_H // Scalar Versions inline double d_tri(const double x, const double a, const double b, const double c, const int log_p = 0) { if ( x < a ) { if ( log_p ) { return R_NegInf; } return 0.0; } else if ( x < c ) { if ( log_p ) { return M_LN2 + log(x - a) - log(b - a) - log(c - a); } return (2.0 * (x - a)) / ((b - a) * (c - a)); } else if ( x == c ) { if ( log_p ) { return M_LN2 - log(b - a); } return 2.0 / (b - a); } else if ( x <= b ) { if ( log_p ) { return M_LN2 + log(b - x) - log(b - a) - log(b - c); } return (2.0 * (b - x)) / ((b - a) * (b - c)); } else { if ( log_p ) { return R_NegInf; } return 0.0; } } inline double p_tri(const double x, const double a, const double b, const double c, const int lower_tail = 1, const int log_p = 0) { if ( x < a ) { if ( log_p ) { if ( lower_tail ) { return R_NegInf; } return 0.0; } if ( lower_tail ) { return 0.0; } return 1.0; } else if ( x <= c ) { if ( log_p ) { if ( lower_tail ) { return (2.0 * log(x - a)) - log(b - a) - log(c - a); } return log(1.0 - (pow(x-a, 2.0) / ((b-a) * (c-a)))); } if ( lower_tail ) { return pow(x-a, 2.0) / ((b-a) * (c-a)); } return 1.0 - (pow(x-a, 2.0) / ((b-a) * (c-a))); } else if ( x <= b ) { if ( log_p ) { if ( lower_tail ) { return log(1.0 - (pow(b-x, 2.0) / ((b-a) * (b-c)))); } return (2.0 * log(b - x)) - log(b - a) - log(b - c); } if ( lower_tail ) { return 1.0 - (pow(b-x, 2.0) / ((b-a) * (b-c))); } return pow(b-x, 2.0) / ((b-a) * (b-c)); } else { if ( log_p ) { if ( lower_tail ) { return 0.0; } return R_NegInf; } if ( lower_tail ) { return 1.0; } return 0.0; } } inline double q_tri(const double p, const double a, const double b, const double c, const int lower_tail = 1, const int log_p = 0) { double c_a = c - a; double b_a = b - a; double prob = p; if ( log_p ) { prob = exp(prob); } if ( !lower_tail ) { prob = 1.0 - prob; } if ( prob < (c_a / b_a ) ) { return a + sqrt(b_a * c_a * prob); } return b - sqrt(b_a * (b - c) * (1 - prob)); } inline double r_tri(const double a, const double b, const double c) { return q_tri(R::runif(0.0, 1.0), a, b, c); } // NumericVector versions: inline Rcpp::NumericVector dtri(const Rcpp::NumericVector& x, const double a, const double b, const double c, const bool log_p = false) { int n = x.size(); Rcpp::NumericVector result(n); for ( int i = 0; i < n; ++i ) { result[i] = d_tri(x[i], a, b, c, log_p); } return result; } inline Rcpp::NumericVector ptri(const Rcpp::NumericVector& x, const double a, const double b, const double c, const bool lower_tail = true, const bool log_p = false) { int n = x.size(); Rcpp::NumericVector result(n); for ( int i = 0; i < n; ++i ) { result[i] = p_tri(x[i], a, b, c, lower_tail, log_p); } return result; } inline Rcpp::NumericVector qtri(const Rcpp::NumericVector& p, const double a, const double b, const double c, const bool lower_tail = true, const bool log_p = false) { int n = p.size(); Rcpp::NumericVector result(n); for ( int i = 0; i < n; ++i ) { result[i] = q_tri(p[i], a, b, c, lower_tail, log_p); } return result; } inline Rcpp::NumericVector rtri(const int n, const double a, const double b, const double c) { Rcpp::NumericVector result(n); for ( int i = 0; i < n; ++i ) { result[i] = r_tri(a, b, c); } return result; } #endif RcppDist/inst/include/lst.h0000644000175100001440000000501013354475103015374 0ustar hornikusers// lst.h // // Copyright (C) 2018 JB Duck-Mayr // // This file is part of RcppDist. // // RcppDist is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // RcppDist is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with RcppDist. If not, see . #ifndef RCPPDIST_LST_H #define RCPPDIST_LST_H // NumericVector versions: inline Rcpp::NumericVector dlst(const Rcpp::NumericVector& x, const double df, const double mu, const double sigma, const bool log_p = false){ Rcpp::NumericVector p = Rcpp::dt((x - mu)/sigma, df, log_p); if ( log_p ) { return p - log(sigma); } else { return (1.0 / sigma) * p; } } inline Rcpp::NumericVector plst(const Rcpp::NumericVector& q, const double df, const double mu, const double sigma, const bool lower_tail = true, const bool log_p = false){ return Rcpp::pt((q - mu)/sigma, df, lower_tail, log_p); } inline Rcpp::NumericVector qlst(const Rcpp::NumericVector& p, const double df, const double mu, const double sigma, const bool lower_tail = true, const bool log_p = false){ return Rcpp::qt(p, df, lower_tail, log_p) * sigma + mu; } inline Rcpp::NumericVector rlst(const int n, const double df, const double mu, const double sigma){ return Rcpp::rt(n, df) * sigma + mu; } // Scalar versions: inline double d_lst(const double x, const double df, const double mu, const double sigma, const int log_p = 0){ double p = R::dt((x - mu) / sigma, df, log_p); return log_p ? (p - log(sigma)) : ((1.0 / sigma) * p); } inline double p_lst(const double q, const double df, const double mu, const double sigma, const int lower_tail = 1, const int log_p = 0){ return R::pt((q - mu)/sigma, df, lower_tail, log_p); } inline double q_lst(const double p, const double df, const double mu, const double sigma, const int lower_tail = 1, const int log_p = 0) { return R::qt(p, df, lower_tail, log_p) * sigma + mu; } inline double r_lst(const double df, const double mu, const double sigma){ return R::rt(df) * sigma + mu; } #endif RcppDist/inst/include/4beta.h0000644000175100001440000000634313354475103015603 0ustar hornikusers// 4beta.h // // Copyright (C) 2018 JB Duck-Mayr // // This file is part of RcppDist. // // RcppDist is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // RcppDist is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with RcppDist. If not, see . #ifndef RCPPDIST_4BETA_H #define RCPPDIST_4BETA_H // NumericVector versions: inline Rcpp::NumericVector d4beta(const Rcpp::NumericVector& x, const double shape1, const double shape2, const double a, const double b, const bool log_p = false){ Rcpp::NumericVector res = Rcpp::dbeta((x-a) / (b-a), shape1, shape2, log_p); if ( log_p ) { res = res - log(b - a); for ( int i = 0; i < x.size(); ++i ) { if ( x[i] < a || x[i] > b ) { res[i] = R_NegInf; } } } else { res = res / (b - a); for ( int i = 0; i < x.size(); ++i ) { if ( x[i] < a || x[i] > b ) { res[i] = 0.0; } } } return res; } inline Rcpp::NumericVector p4beta(const Rcpp::NumericVector& q, const double shape1, const double shape2, const double a, const double b, const bool lower_tail = true, const bool log_p = false){ return Rcpp::pbeta((q - a) / (b - a), shape1, shape2, lower_tail, log_p); } inline Rcpp::NumericVector q4beta(const Rcpp::NumericVector& p, const double shape1, const double shape2, const double a, const double b, const bool lower_tail = true, const bool log_p = false){ return (b - a) * Rcpp::qbeta(p, shape1, shape2, lower_tail, log_p) + a; } inline Rcpp::NumericVector r4beta(const int n, const double shape1, const double shape2, const double a, const double b){ return (b - a) * Rcpp::rbeta(n, shape1, shape2) + a; } // Scalar versions: inline double d_4beta(const double x, const double shape1, const double shape2, const double a, const double b, const int log_p = 0){ if ( x < a || x > b ) { return log_p ? R_NegInf : 0.0; } double p = R::dbeta((x - a) / (b - a), shape1, shape2, log_p); return log_p ? (p - log(b - a)) : (p / (b - a)); } inline double p_4beta(const double q, const double shape1, const double shape2, const double a, const double b, const int lower_tail = 1, const int log_p = 0){ return R::pbeta((q - a) / (b - a), shape1, shape2, lower_tail, log_p); } inline double q_4beta(const double p, const double shape1, const double shape2, const double a, const double b, const int lower_tail = 1, const int log_p = 0){ return (b - a) * R::qbeta(p, shape1, shape2, lower_tail, log_p) + a; } inline double r_4beta(const double shape1, const double shape2, const double a, const double b){ return (b - a) * R::rbeta(shape1, shape2) + a; } #endif RcppDist/inst/include/mvnorm.h0000644000175100001440000000376113354475103016123 0ustar hornikusers// mvnorm.h // // Copyright (C) 2018 JB Duck-Mayr // // This file is part of RcppDist. // // RcppDist is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // RcppDist is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with RcppDist. If not, see . #ifndef RCPPDIST_MVNORM_H #define RCPPDIST_MVNORM_H inline arma::vec dmvnorm(const arma::mat& x, const arma::vec& mu, const arma::mat& S, const bool log_p = false) { arma::uword n = x.n_rows, m = x.n_cols; double det_S = arma::det(S); arma::mat S_inv = S.i(); arma::vec result(n); arma::rowvec X(m); if ( log_p ) { double P = -1.0 * (x.n_cols/2.0) * M_LN_2PI - 0.5 * log(det_S); for ( arma::uword i = 0; i < n; ++i ) { X = x.row(i) - mu.t(); result[i] = arma::as_scalar(P - 0.5 * X * S_inv * X.t()); } return result; } double P = 1.0 / sqrt(pow(M_2PI, m) * det_S); for ( arma::uword i = 0; i < n; ++i ) { X = x.row(i) - mu.t(); result[i] = arma::as_scalar(P * exp(-0.5 * X * S_inv * X.t())); } return result; } inline arma::mat rmvnorm(const arma::uword n, const arma::vec& mu, const arma::mat& S) { arma::uword m = S.n_cols, i, j; arma::mat result(n, m); arma::rowvec Mu = mu.t(); for ( i = 0; i < n; ++i ) { for ( j = 0; j < m; ++j ) { result(i, j) = R::rnorm(0.0, 1.0); } } result = result * arma::chol(S); for ( i = 0; i < n; ++i ) { result.row(i) = result.row(i) + Mu; } return result; } #endif RcppDist/inst/include/wishart.h0000644000175100001440000000557513354475103016273 0ustar hornikusers// wishart.h // // Copyright (C) 2018 JB Duck-Mayr // // This file is part of RcppDist. // // RcppDist is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // RcppDist is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with RcppDist. If not, see . #ifndef RCPPDIST_WISHART_H #define RCPPDIST_WISHART_H inline double mvgamma(const int p, const double x) { double result = pow(M_PI, (p * (p - 1) * 0.25)); for ( int j = 1; j < (p + 1); ++j ) { result *= R::gammafn(x - ((j - 1.0) * 0.5)); } return result; } inline double lmvgamma(const int p, const double x) { double result = (p * (p - 1) * 0.25) * log(M_PI); for ( int j = 1; j < (p + 1); ++j ) { result += R::lgammafn(x - ((j - 1.0) * 0.5)); } return result; } inline double dwish(const arma::mat& X, const int df, const arma::mat& S, const bool log_p = false) { double x = df * 0.5; int p = X.n_cols; if ( log_p ) { double P = ((df - p - 1) * 0.5) * log(arma::det(X)); P -= (arma::trace(S.i() * X) * 0.5); P -= ( (p * x * M_LN2) + (x * log(arma::det(S))) ); return P - lmvgamma(p, x); } double P = pow(arma::det(X), ((df - p - 1.0) * 0.5)); P *= exp(-0.5 * arma::trace(S.i() * X)); return P / ( pow(2.0, (x * p)) * pow(arma::det(S), x) * mvgamma(p, x) ); } inline arma::mat rwish(const int df, const arma::mat& S) { arma::uword m = S.n_cols; arma::uword i, j; arma::mat A(m, m, arma::fill::zeros); for ( i = 1; i < m; ++i ) { for ( j = 0; j < i; ++j ) { A(i, j) = R::rnorm(0.0, 1.0); } } for ( i = 0; i < m; ++i ) { A(i, i) = sqrt(R::rchisq(df - i)); } arma::mat B = A.t() * arma::chol(S); return B.t() * B; } inline double diwish(const arma::mat& X, const int df, const arma::mat& S, const bool log_p = false) { double x = df * 0.5; int p = X.n_cols; if ( log_p ) { double P = (x * log(arma::det(S))) - (0.5 * arma::trace(S * X.i())); P -= ( (0.5 * (df + p + 1)) * log(arma::det(X)) ); P -= ( (0.5 * (df * p)) * M_LN2 ); return P - lmvgamma(p, x); } double P = pow(arma::det(S), x); P *= exp(-0.5 * arma::trace(S * X.i())); P *= pow(arma::det(X), (-1.0 * (0.5 * (df + p + 1)))); return P / ( pow(2.0, (0.5 * (df * p))) * mvgamma(p, x) ); } inline arma::mat riwish(const int df, const arma::mat& S) { return rwish(df, S.i()).i(); } #endif RcppDist/inst/include/trunct.h0000644000175100001440000001563413354475103016126 0ustar hornikusers// trunct.h // // Copyright (C) 2018 JB Duck-Mayr // // This file is part of RcppDist. // // RcppDist is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // RcppDist is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with RcppDist. If not, see . #ifndef RCPPDIST_TRUNCT_H #define RCPPDIST_TRUNCT_H // Vector versions: inline Rcpp::NumericVector dtrunct(const Rcpp::NumericVector& x, const double df, const double a, const double b, const bool log_p = false) { int n = x.size(); Rcpp::NumericVector result(n); double scale = R::pt(b, df, 1, 0) - R::pt(a, df, 1, 0); if ( log_p ) { scale = log(scale); for ( int i = 0; i < n; ++i ) { if ( x[i] < a || x[i] > b ) { result[i] = R_NegInf; } else { result[i] = R::dt(x[i], df, 1) - scale; } } } else { scale = 1.0 / scale; for ( int i = 0; i < n; ++i ) { if ( x[i] < a || x[i] > b ) { result[i] = 0.0; } else { result[i] = R::dt(x[i], df, 0) * scale; } } } return result; } inline Rcpp::NumericVector ptrunct(const Rcpp::NumericVector& x, const double df, const double a, const double b, const bool lower_tail = true, const bool log_p = false) { int n = x.size(); Rcpp::NumericVector result(n); double F_a = R::pt(a, df, 1, 0); double F_b = R::pt(b, df, 1, 0); if ( lower_tail ) { if ( log_p ) { // lower_tail = true AND log_p = true double scale = log(F_b - F_a); for ( int i = 0; i < n; ++i ) { if ( x[i] > b ) { result[i] = 0.0; } else if ( x[i] < a ) { result[i] = R_NegInf; } else{ result[i] = log(R::pt(x[i], df, 1, 0) - F_a) - scale; } } } else { // lower_tail = true AND log_p = false double scale = 1.0 / (F_b - F_a); for ( int i = 0; i < n; ++i ) { if ( x[i] > b ) { result[i] = 1.0; } else if ( x[i] < a ) { result[i] = 0.0; } else { result[i] = (R::pt(x[i], df, 1, 0) - F_a) * scale; } } } } else { double scale = 1.0 / (F_b - F_a); if ( log_p ) { // lower_tail = false AND log_p = true for ( int i = 0; i < n; ++i ) { if ( x[i] > b ) { result[i] = R_NegInf; } else if ( x[i] < a ) { result[i] = 0.0; } else{ result[i] = log(1.0 - ((R::pt(x[i], df, 1, 0) - F_a) * scale)); } } } else { // lower_tail = false AND log_p = false for ( int i = 0; i < n; ++i ) { if ( x[i] > b ) { result[i] = 0.0; } else if ( x[i] < a ) { result[i] = 1.0; } else { result[i] = 1.0 - ((R::pt(x[i], df, 1, 0) - F_a) * scale); } } } } return result; } inline Rcpp::NumericVector qtrunct(const Rcpp::NumericVector& p, const double df, const double a, const double b, const bool lower_tail = true, const bool log_p = false) { int n = p.size(); Rcpp::NumericVector probs = Rcpp::clone(p); if ( log_p ) { probs = Rcpp::exp(probs); } if ( !lower_tail ) { probs = 1.0 - probs; } double F_a = R::pt(a, df, 1, 0); double F_b = R::pt(b, df, 1, 0); Rcpp::NumericVector result(n); for ( int i = 0; i < n; ++i ) { double q = R::qt(F_a + probs[i] * (F_b - F_a), df, 1, 0); result[i] = std::min(std::max(a, q), b); } return result; } inline Rcpp::NumericVector rtrunct(const int n, const double df, const double a, const double b) { return qtrunct(Rcpp::runif(n), df, a, b); } // Scalar versions: inline double d_trunct(const double x, const double df, const double a, const double b, const int log_p = 0) { if ( x < a || x > b ) { return log_p ? R_NegInf : 0.0; } double scale = R::pt(b, df, 1, 0) - R::pt(a, df, 1, 0); if ( log_p ) { return R::dt(x, df, 1) - log(scale); } return R::dt(x, df, 0) / scale; } inline double p_trunct(const double x, const double df, const double a, const double b, const int lower_tail = 1, const int log_p = 0) { double F_a = R::pt(a, df, 1, 0); double F_b = R::pt(b, df, 1, 0); if ( lower_tail ) { if ( log_p ) { if ( x < a ) { return R_NegInf; } else if ( x > b ) { return 0.0; } else { return log(R::pt(x, df, 1, 0) - F_a) - log(F_b - F_a); } } else { if ( x < a ) { return 0.0; } else if ( x > b ) { return 1.0; } else { return (R::pt(x, df, 1, 0) - F_a) / (F_b - F_a); } } } else { if ( log_p ) { if ( x < a ) { return 0.0; } else if ( x > b ) { return R_NegInf; } else { return log(1.0 - ((R::pt(x, df, 1, 0) - F_a) / (F_b-F_a))); } } else { if ( x < a ) { return 1.0; } else if ( x > b ) { return 0.0; } else { return 1.0 - (R::pt(x, df, 1, 0) - F_a) / (F_b - F_a); } } } } inline double q_trunct(const double p, const double df, const double a, const double b, const int lower_tail = 1, const int log_p = 0) { double prob = p; if ( log_p ) { prob = exp(prob); } if ( !lower_tail ) { prob = 1.0 - prob; } double F_a = R::pt(a, df, 1, 0); double F_b = R::pt(b, df, 1, 0); double q = R::qt(F_a + prob * (F_b - F_a), df, 1, 0); return std::min(std::max(a, q), b); } inline double r_trunct(const double df, const double a, const double b) { return q_trunct(R::runif(0.0, 1.0), df, a, b); } #endif RcppDist/inst/include/trunclst.h0000644000175100001440000001712413354475103016461 0ustar hornikusers// trunclst.h // // Copyright (C) 2018 JB Duck-Mayr // // This file is part of RcppDist. // // RcppDist is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // RcppDist is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with RcppDist. If not, see . #ifndef RCPPDIST_TRUNCLST_H #define RCPPDIST_TRUNCLST_H #include // Vector versions: inline Rcpp::NumericVector dtrunclst(const Rcpp::NumericVector& x, const double df, const double mu, const double sigma, const double a, const double b, const bool log_p = false) { int n = x.size(); Rcpp::NumericVector result(n); double scale = p_lst(b, df, mu, sigma, 1, 0) - p_lst(a, df, mu, sigma, 1, 0); if ( log_p ) { scale = log(scale); for ( int i = 0; i < n; ++i ) { if ( x[i] < a || x[i] > b ) { result[i] = R_NegInf; } else { result[i] = d_lst(x[i], df, mu, sigma, 1) - scale; } } } else { scale = 1.0 / scale; for ( int i = 0; i < n; ++i ) { if ( x[i] < a || x[i] > b ) { result[i] = 0.0; } else { result[i] = d_lst(x[i], df, mu, sigma, 0) * scale; } } } return result; } inline Rcpp::NumericVector ptrunclst(const Rcpp::NumericVector& x, const double df, const double mu, const double sigma, const double a, const double b, const bool lower_tail = true, const bool log_p = false) { int n = x.size(); Rcpp::NumericVector result(n); double F_a = p_lst(a, df, mu, sigma, 1, 0); double F_b = p_lst(b, df, mu, sigma, 1, 0); if ( lower_tail ) { if ( log_p ) { // lower_tail = true AND log_p = true double scale = log(F_b - F_a); for ( int i = 0; i < n; ++i ) { if ( x[i] > b ) { result[i] = 0.0; } else if ( x[i] < a ) { result[i] = R_NegInf; } else{ result[i] = log(p_lst(x[i], df, mu, sigma, 1, 0) - F_a) - scale; } } } else { // lower_tail = true AND log_p = false double scale = 1.0 / (F_b - F_a); for ( int i = 0; i < n; ++i ) { if ( x[i] > b ) { result[i] = 1.0; } else if ( x[i] < a ) { result[i] = 0.0; } else { result[i] = (p_lst(x[i], df, mu, sigma, 1, 0) - F_a) * scale; } } } } else { double scale = 1.0 / (F_b - F_a); if ( log_p ) { // lower_tail = false AND log_p = true for ( int i = 0; i < n; ++i ) { if ( x[i] > b ) { result[i] = R_NegInf; } else if ( x[i] < a ) { result[i] = 0.0; } else{ result[i] = log(1.0 - ((p_lst(x[i], df, mu, sigma, 1, 0) - F_a) * scale)); } } } else { // lower_tail = false AND log_p = false for ( int i = 0; i < n; ++i ) { if ( x[i] > b ) { result[i] = 0.0; } else if ( x[i] < a ) { result[i] = 1.0; } else { result[i] = 1.0 - ((p_lst(x[i], df, mu, sigma, 1, 0) - F_a) * scale); } } } } return result; } inline Rcpp::NumericVector qtrunclst(const Rcpp::NumericVector& p, const double df, const double mu, const double sigma, const double a, const double b, const bool lower_tail = true, const bool log_p = false) { int n = p.size(); Rcpp::NumericVector probs = Rcpp::clone(p); if ( log_p ) { probs = Rcpp::exp(probs); } if ( !lower_tail ) { probs = 1.0 - probs; } double F_a = p_lst(a, df, mu, sigma, 1, 0); double F_b = p_lst(b, df, mu, sigma, 1, 0); Rcpp::NumericVector result(n); for ( int i = 0; i < n; ++i ) { double q = q_lst(F_a + probs[i] * (F_b - F_a), df, mu, sigma, 1, 0); result[i] = std::min(std::max(a, q), b); } return result; } inline Rcpp::NumericVector rtrunclst(const int n, const double df, const double mu, const double sigma, const double a, const double b) { return qtrunclst(Rcpp::runif(n), df, mu, sigma, a, b); } // Scalar versions: inline double d_trunclst(const double x, const double df, const double mu, const double sigma, const double a, const double b, const int log_p = 0) { if ( x < a || x > b ) { return log_p ? R_NegInf : 0.0; } double scale = p_lst(b, df, mu, sigma, 1, 0) - p_lst(a, df, mu, sigma, 1, 0); if ( log_p ) { return d_lst(x, df, mu, sigma, 1) - log(scale); } return d_lst(x, df, mu, sigma, 0) / scale; } inline double p_trunclst(const double x, const double df, const double mu, const double sigma, const double a, const double b, const int lower_tail = 1, const int log_p = 0) { double F_a = p_lst(a, df, mu, sigma, 1, 0); double F_b = p_lst(b, df, mu, sigma, 1, 0); if ( lower_tail ) { if ( log_p ) { if ( x < a ) { return R_NegInf; } else if ( x > b ) { return 0.0; } else { return log(p_lst(x, df, mu, sigma, 1, 0) - F_a) - log(F_b - F_a); } } else { if ( x < a ) { return 0.0; } else if ( x > b ) { return 1.0; } else { return (p_lst(x, df, mu, sigma, 1, 0) - F_a) / (F_b - F_a); } } } else { if ( log_p ) { if ( x < a ) { return 0.0; } else if ( x > b ) { return R_NegInf; } else { return log(1.0 - ((p_lst(x, df, mu, sigma, 1, 0) - F_a) / (F_b-F_a))); } } else { if ( x < a ) { return 1.0; } else if ( x > b ) { return 0.0; } else { return 1.0 - (p_lst(x, df, mu, sigma, 1, 0) - F_a) / (F_b - F_a); } } } } inline double q_trunclst(const double p, const double df, const double mu, const double sigma, const double a, const double b, const int lower_tail = 1, const int log_p = 0) { double prob = p; if ( log_p ) { prob = exp(prob); } if ( !lower_tail ) { prob = 1.0 - prob; } double F_a = p_lst(a, df, mu, sigma, 1, 0); double F_b = p_lst(b, df, mu, sigma, 1, 0); double q = q_lst(F_a + prob * (F_b - F_a), df, mu, sigma, 1, 0); return std::min(std::max(a, q), b); } inline double r_trunclst(const double df, const double mu, const double sigma, const double a, const double b) { return q_trunclst(R::runif(0.0, 1.0), df, mu, sigma, a, b); } #endif RcppDist/inst/include/mvt.h0000644000175100001440000000425413354475103015411 0ustar hornikusers// mvt.h // // Copyright (C) 2018 JB Duck-Mayr // // This file is part of RcppDist. // // RcppDist is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // RcppDist is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with RcppDist. If not, see . #ifndef RCPPDIST_MVT_H #define RCPPDIST_MVT_H #include inline arma::vec dmvt(const arma::mat& x, const arma::vec& mu, const arma::mat& S, const double df, const bool log_p = false) { arma::uword n = x.n_rows, m = x.n_cols; double det_S = arma::det(S); arma::mat S_inv = S.i(); arma::vec result(n); arma::rowvec X(m); if ( log_p ) { double P = R::lgammafn((df + m) * 0.5) - R::lgammafn(df * 0.5); P -= ( (m * 0.5) * (log(df) + log(M_PI)) + 0.5 * log(det_S) ); for ( arma::uword i = 0; i < n; ++i ) { X = x.row(i) - mu.t(); result[i] = arma::as_scalar(P - ((df + m) * 0.5) * log(1.0 + (1.0 / df) * X * S_inv * X.t())); } return result; } double P = R::gammafn((df + m) * 0.5); P /= (R::gammafn(df*0.5) * pow(df, m*0.5) * pow(M_PI, m*0.5) * sqrt(det_S)); for ( arma::uword i = 0; i < n; ++i ) { X = x.row(i) - mu.t(); result[i] = arma::as_scalar(P/pow(1.0+(1.0/df) * X * S_inv * X.t(), (df+m) * 0.5)); } return result; } inline arma::mat rmvt(const arma::uword n, const arma::vec& mu, const arma::mat& S, const double df) { arma::uword m = S.n_cols; arma::vec U = Rcpp::rchisq(n, df); U = sqrt(df / U); arma::mat Y = rmvnorm(n, arma::vec(m, arma::fill::zeros), S).t(); arma::mat result(m, n); for ( arma::uword i = 0; i < n; ++i ) { result.col(i) = mu + Y.col(i) * U[i]; } return result.t(); } #endif RcppDist/inst/doc/0000755000175100001440000000000013363101416013540 5ustar hornikusersRcppDist/inst/doc/RcppDist.Rmd0000644000175100001440000005355613362745021015757 0ustar hornikusers--- title: "RcppDist Introduction" author: "JB Duck-Mayr" date: "`r Sys.Date()`" output: pdf_document vignette: > %\VignetteIndexEntry{RcppDist Introduction} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r setup, include = FALSE} knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) ``` The Rcpp package provides a C++ library to make it easier to use C++ with R. R and Rcpp provide functions for a variety of statistical distributions. Several R packages make functions available to R for additional statistical distributions. However, to access these functions from C++ code, a costly call to the R functions must be made.\footnote{Some of the R packages alluded to have written these functions in C++ (in some cases using Rcpp). However, these packages do not make such functions available as a header library for other package writers intending to make use of the functions in C++ code, thus the motivation for this package.} RcppDist provides a C++ header-only library with functions for additional statistical distributions that can be called from C++ when writing code using Rcpp or RcppArmadillo. Functions are available that return NumericVectors as well as doubles, and for multivariate or matrix distributions, Armadillo vectors and matrices. RcppDist provides functions for the following distributions: - the four parameter beta distribution - the location-scale t distribution - the truncated normal distribution - the truncated t distribution - a truncated location-scale t distribution - the triangle distribution - the multivariate normal distribution* - the multivariate t distribution* - the Wishart distribution* - the inverse Wishart distribution* Distributions marked with an asterisk rely on RcppArmadillo. After discussing how to include `RcppDist` headers into your code to use these functions, each function provided by the package is listed (such that you can see the function and argument names, as well as the return and argument types), with a brief explanation. # Including RccpDist in Your Code RcppDist provides several header files you can include in your code. `RcppDist.h` includes all of them, as well as `Rcpp.h` or `RcppArmadillo.h` as appropriate (see "Use Rpp, or RcppArmadillo?" below). So, in any C++ file you need to use functions from RcppDist, you can simply use ```{Rcpp full-include, eval = FALSE} #include ``` which will also take care of Rcpp(Armadillo) headers for you. You can alternatively pull in only the header(s) you need; for example, if you only need functions for the four parameter beta distribution, you can just use ```{Rcpp partial-include, eval = FALSE} #include <4beta.h> ``` However, you'll then be responsible for pulling in Rcpp/RcppArmadillo headers as appropriate. The header names that correspond to the various distributions are as follows: \newpage | Distribution | Header | |:----------------------------|:--------------| | Four Parameter Beta | 4beta.h | | Location-Scale t | lst.h | | Truncated Normal | truncnorm.h | | Truncated t | trunct.h | | Truncated Location-Scale t | trunclst.h | | Triangle | triangular.h | | Multivariate Normal | mvnorm.h | | Multivariate t | mvt.h | | Wishart and Inverse Wishart | wishart.h | ## Using Rcpp, or RcppArmadillo? Including `RcppDist.h` by default will pull in the RcppArmadillo headers (and therefore the Rcpp headers), as well as the RcppDist headers. If you would prefer to use Rcpp but *not* RcppArmadillo (i.e. include the Rcpp headers but not the RcppArmadillo headers), include the line ```{Rcpp dont-use-arma, eval = FALSE} #define RCPPDIST_DONT_USE_ARMA ``` before any inclusion of `RcppDist.h`, though this will make the asterisked (multivariate and Wishart) distributions unavailable. ## Using RcppDist in a Package ### With Rcpp To use RcppDist in a package that does not link to RcppArmadillo, you must - Set up your package to use `Rcpp`, such as via `Rcpp::Rcpp.package.skeleton(your_package)` or `devtools::use_rcpp(your_package)`.\footnote{See the Rcpp-package vignette from Rcpp for more details.} - Add RcppDist to the LinkingTo field of your DESCRIPTION file. - In any C++ file that calls a `RcppDist` function, add `#include ` (or a more specific header from the package such as `lst.h` and `Rcpp.h`) - Remember to define `RCPPDIST_DONT_USE_ARMA` before any include of `RcppDist.h`. ### With RcppArmadillo To use RcppDist in a package that links to RcppArmadillo, you must - Set up your package to use `RcppArmadillo`, such as via `RcppArmadillo::RcppArmadillo.package.skeleton(your_package)`\footnote{See the RcppArmadillo manual or help files for more details, in particular the `RcppArmadillo-package' and `RcppArmadillo.package.skeleton' entries.} - Add RcppDist to the LinkingTo field of your DESCRIPTION file. - In any C++ file that calls a `RcppDist` function, add `#include ` (or a more specific header from the package such as `mvt.h` and `RcppArmadillo.h`) ## Using RcppDist in a Standalone file ### With Rcpp If you are using RcppDist in a standalone file (i.e., not as part of a package), and you don't want to pull in the Armadillo headers, you'll need ```{Rcpp standalone-noarma-full, eval = FALSE} #define RCPPDIST_DONT_USE_ARMA #include // [[Rcpp::depends(RcppDist)]] ``` at the top of your file. If you want to pull in just one or more of the distribution specific headers, you won't need the define, but don't forget to also include `Rcpp.h`; as an example: ```{Rcpp standalone-noarma-partial, eval = FALSE} #include #include // [[Rcpp::depends(RcppDist)]] ``` ### With RcppArmadillo If you are using RcppDist in a standalone file (i.e., not as part of a package), and you do want the Armadillo headers, you'll need ```{Rcpp standalone-arma-full, eval = FALSE} #include // [[Rcpp::depends(RcppArmadillo, RcppDist)]] ``` at the top of your file. If you want to pull in just one or more of the distribution specific headers, don't forget to also include `RcppArmadillo.h`; as an example: ```{Rcpp standalone-arma-partial, eval = FALSE} #include #include // [[Rcpp::depends(RcppArmadillo, RcppDist)]] ``` # RcppDist Functions Much like distributions in R, functions are prefixed by d, p, q, and r to mean density, distribution, quantile, and random number generating functions respectively. Functions that return a double rather than, say, a NumericVector are instead prefixed by d_, p_, q_, and r_. Below are more detailed descriptions of the functions provided by each header. ## 4beta.h (Four Parameter Beta Distribution) The four parameter beta distribution is a beta distribution supported over an interval $[a, b]$ rather than only $[0, 1]$. The functions provided in this header are: ```{Rcpp 4beta, eval = FALSE} Rcpp::NumericVector d4beta(const Rcpp::NumericVector& x, const double shape1, const double shape2, const double a, const double b, const bool log_p = false) Rcpp::NumericVector p4beta(const Rcpp::NumericVector& q, const double shape1, const double shape2, const double a, const double b, const bool lower_tail = true, const bool log_p = false) Rcpp::NumericVector q4beta(const Rcpp::NumericVector& p, const double shape1, const double shape2, const double a, const double b, const bool lower_tail = true, const bool log_p = false) Rcpp::NumericVector r4beta(const int n, const double shape1, const double shape2, const double a, const double b) double d_4beta(const double x, const double shape1, const double shape2, const double a, const double b, const int log_p = 0) double p_4beta(const double q, const double shape1, const double shape2, const double a, const double b, const int lower_tail = 1, const int log_p = 0) double q_4beta(const double p, const double shape1, const double shape2, const double a, const double b, const int lower_tail = 1, const int log_p = 0) double r_4beta(const double shape1, const double shape2, const double a, const double b) ``` Where - `x` and `q` are quantiles (either a single value or a vector depending) - `p` is a single probability or a vector of probabilities - `n` is the numer of observations to draw - `shape1` and `shape2` are the positive shape parameters of the Beta distribution - `a` and `b` are the minimum and maximum values of the distribution respectively - `log_p` is a `bool` or `int` (the default is `false`/0); if `true` (or > 0), the probabilities are given as $\log(p)$ - `lower_tail` is a `bool` or `int`; if `true` (or > 0), the probabilities are $P[X \leq x]$, otherwise, $P[X > x]$. ## lst.h (Location-Scale t Distribution) The location-scale t distribution is a t distribution shifted by a location parameter $\mu$ and scaled by a scaling parameter $\sigma$. The functions provided in this header are: ```{Rcpp lst, eval = FALSE} Rcpp::NumericVector dlst(const Rcpp::NumericVector& x, const double df, const double mu, const double sigma, const bool log_p = false) Rcpp::NumericVector plst(const Rcpp::NumericVector& q, const double df, const double mu, const double sigma, const bool lower_tail = true, const bool log_p = false) Rcpp::NumericVector qlst(const Rcpp::NumericVector& p, const double df, const double mu, const double sigma, const bool lower_tail = true, const bool log_p = false) Rcpp::NumericVector rlst(const int n, const double df, const double mu, const double sigma) double d_lst(const double x, const double df, const double mu, const double sigma, const int log_p = 0) double p_lst(const double q, const double df, const double mu, const double sigma, const int lower_tail = 1, const int log_p = 0) double q_lst(const double p, const double df, const double mu, const double sigma, const int lower_tail = 1, const int log_p = 0) double r_lst(const double df, const double mu, const double sigma) ``` Where - `x` and `q` are quantiles (either a single value or a vector depending) - `p` is a single probability or a vector of probabilities - `n` is the numer of observations to draw - `df` is the positive degrees of freedom - `mu` is the location/shifting parameter - `sigma` is the scaling parameter - `log_p` is a `bool` or `int` (the default is `false`/0); if `true` (or > 0), the probabilities are given as $\log(p)$ - `lower_tail` is a `bool` or `int`; if `true` (or > 0), the probabilities are $P[X \leq x]$, otherwise, $P[X > x]$. ## truncnorm.h (Truncated Normal Distribution) The truncated normal distribution is a normal distribution supported over an interval $[a, b]$ rather than $(-\infty, \infty)$. The functions provided in this header are: ```{Rcpp truncnorm, eval = FALSE} Rcpp::NumericVector dtruncnorm(const Rcpp::NumericVector& x, const double mu, const double sigma, const double a, const double b, const bool log_p = false) Rcpp::NumericVector ptruncnorm(const Rcpp::NumericVector& x, const double mu, const double sigma, const double a, const double b, const bool lower_tail = true, const bool log_p = false) Rcpp::NumericVector qtruncnorm(const Rcpp::NumericVector& p, const double mu, const double sigma, const double a, const double b, const bool lower_tail = true, const bool log_p = false) Rcpp::NumericVector rtruncnorm(const int n, const double mu, const double sigma, const double a, const double b) double d_truncnorm(const double x, const double mu, const double sigma, const double a, const double b, const int log_p = 0) double p_truncnorm(const double x, const double mu, const double sigma, const double a, const double b, const int lower_tail = 1, const int log_p = 0) double q_truncnorm(const double p, const double mu, const double sigma, const double a, const double b, const int lower_tail = 1, const int log_p = 0) double r_truncnorm(const double mu, const double sigma, const double a, const double b) ``` Where - `x` and `q` are quantiles (either a single value or a vector depending) - `p` is a single probability or a vector of probabilities - `n` is the numer of observations to draw - `mu` is the mean of the distribution - `sigma` is the standard deviation - `a` and `b` are the minimum and maximum values of the distribution respectively - `log_p` is a `bool` or `int` (the default is `false`/0); if `true` (or > 0), the probabilities are given as $\log(p)$ - `lower_tail` is a `bool` or `int`; if `true` (or > 0), the probabilities are $P[X \leq x]$, otherwise, $P[X > x]$. ## trunct.h (Truncated t Distribution) The truncated t distribution is a t distribution supported over an interval $[a, b]$ rather than $(-\infty, \infty)$. The functions provided in this header are: ```{Rcpp trunct, eval = FALSE} Rcpp::NumericVector dtrunct(const Rcpp::NumericVector& x, const double df, const double a, const double b, const bool log_p = false) Rcpp::NumericVector ptrunct(const Rcpp::NumericVector& x, const double df, const double a, const double b, const bool lower_tail = true, const bool log_p = false) Rcpp::NumericVector qtrunct(const Rcpp::NumericVector& p, const double df, const double a, const double b, const bool lower_tail = true, const bool log_p = false) Rcpp::NumericVector rtrunct(const int n, const double df, const double a, const double b) double d_trunct(const double x, const double df, const double a, const double b, const int log_p = 0) double p_trunct(const double x, const double df, const double a, const double b, const int lower_tail = 1, const int log_p = 0) double q_trunct(const double p, const double df, const double a, const double b, const int lower_tail = 1, const int log_p = 0) double r_trunct(const double df, const double a, const double b) ``` Where - `x` and `q` are quantiles (either a single value or a vector depending) - `p` is a single probability or a vector of probabilities - `n` is the numer of observations to draw - `df` is the positive degrees of freedom - `a` and `b` are the minimum and maximum values of the distribution respectively - `log_p` is a `bool` or `int` (the default is `false`/0); if `true` (or > 0), the probabilities are given as $\log(p)$ - `lower_tail` is a `bool` or `int`; if `true` (or > 0), the probabilities are $P[X \leq x]$, otherwise, $P[X > x]$. ## trunclst.h (Truncated Location-Scale t Distribution) The truncated location-scale t distribution is a location-scale t distribution supported over an interval $[a, b]$ rather than $(-\infty, \infty)$. The functions provided in this header are: ```{Rcpp trunclst, eval = FALSE} Rcpp::NumericVector dtrunclst(const Rcpp::NumericVector& x, const double df, const double mu, const double sigma, const double a, const double b, const bool log_p = false) Rcpp::NumericVector ptrunclst(const Rcpp::NumericVector& x, const double df, const double mu, const double sigma, const double a, const double b, const bool lower_tail = true, const bool log_p = false) Rcpp::NumericVector qtrunclst(const Rcpp::NumericVector& p, const double df, const double mu, const double sigma, const double a, const double b, const bool lower_tail = true, const bool log_p = false) Rcpp::NumericVector rtrunclst(const int n, const double df, const double mu, const double sigma, const double a, const double b) double d_trunclst(const double x, const double df, const double mu, const double sigma, const double a, const double b, const int log_p = 0) double p_trunclst(const double x, const double df, const double mu, const double sigma, const double a, const double b, const int lower_tail = 1, const int log_p = 0) double q_trunclst(const double p, const double df, const double mu, const double sigma, const double a, const double b, const int lower_tail = 1, const int log_p = 0) double r_trunclst(const double df, const double mu, const double sigma, const double a, const double b) ``` Where - `x` and `q` are quantiles (either a single value or a vector depending) - `p` is a single probability or a vector of probabilities - `n` is the numer of observations to draw - `df` is the positive degrees of freedom - `mu` is the location/shifting parameter - `sigma` is the scaling parameter - `a` and `b` are the minimum and maximum values of the distribution respectively - `log_p` is a `bool` or `int` (the default is `false`/0); if `true` (or > 0), the probabilities are given as $\log(p)$ - `lower_tail` is a `bool` or `int`; if `true` (or > 0), the probabilities are $P[X \leq x]$, otherwise, $P[X > x]$. ## triangular.h (Triangle Distribution) The triangle (or triangular) distribution is supported over an interval $[a, b]$ with a mode $c$; as the name suggests, the density function is shaped like a triangle with vertices at $a$, $b$, and $c$. The functions provided in this header are: ```{Rcpp triangle, eval = FALSE} double d_tri(const double x, const double a, const double b, const double c, const int log_p = 0) double p_tri(const double x, const double a, const double b, const double c, const int lower_tail = 1, const int log_p = 0) double q_tri(const double p, const double a, const double b, const double c, const int lower_tail = 1, const int log_p = 0) double r_tri(const double a, const double b, const double c) Rcpp::NumericVector dtri(const Rcpp::NumericVector& x, const double a, const double b, const double c, const bool log_p = false) Rcpp::NumericVector ptri(const Rcpp::NumericVector& x, const double a, const double b, const double c, const bool lower_tail = true, const bool log_p = false) Rcpp::NumericVector qtri(const Rcpp::NumericVector& p, const double a, const double b, const double c, const bool lower_tail = true, const bool log_p = false) Rcpp::NumericVector rtri(const int n, const double a, const double b, const double c) ``` Where - `x` and `q` are quantiles (either a single value or a vector depending) - `p` is a single probability or a vector of probabilities - `n` is the numer of observations to draw - `a` and `b` are the minimum and maximum values of the distribution respectively - `c` is the mode of the distribution - `log_p` is a `bool` or `int` (the default is `false`/0); if `true` (or > 0), the probabilities are given as $\log(p)$ - `lower_tail` is a `bool` or `int`; if `true` (or > 0), the probabilities are $P[X \leq x]$, otherwise, $P[X > x]$. ## mvnorm.h (Multivariate Normal Distribution) The multivariate normal distribution is a generalization of the normal distribution to multiple dimensions. Then each draw is a vector, the mean parameter $\mu$ is a vector, and rather than a scalar standard deviation parameter $\sigma$, we have a covariance matrix $\Sigma$ (or here denoted $S$). The functions provided in this header are: ```{Rcpp mvnorm, eval = FALSE} arma::vec dmvnorm(const arma::mat& x, const arma::vec& mu, const arma::mat& S, const bool log_p = false) arma::mat rmvnorm(const arma::uword n, const arma::vec& mu, const arma::mat& S) ``` Where - `x` is a matrix of quantiles, such that each row is a quantile - `n` is the numer of observations to draw - `mu` is the mean vector - `S` is the covariance matrix - `log_p` is a `bool` (the default is `false`); if `true`, the probabilities are given as $\log(p)$ ## mvt.h (Multivariate t Distribution) The multivariate t distribution is a generalization of the t distribution to multiple dimensions. Then each draw is a vector, and in addition to the degrees of freedom, we have a correlation matrix $\Sigma$ (or here denoted $S$), and this implementation allows for a location vector $\mu$. The functions provided in this header are: ```{Rcpp mvt, eval = FALSE} arma::vec dmvt(const arma::mat& x, const arma::vec& mu, const arma::mat& S, const double df, const bool log_p = false) arma::mat rmvt(const arma::uword n, const arma::vec& mu, const arma::mat& S, const double df) ``` Where - `x` is a matrix of quantiles, such that each row is a quantile - `n` is the numer of observations to draw - `mu` is the location vector - `S` is the correlation matrix - `log_p` is a `bool` (the default is `false`); if `true`, the probabilities are given as $\log(p)$ ## wishart.h (Wishart and Inverse Wishart Distributions) The Wishart distribution is a generalization of the gamma distribution to multiple dimensions defined over symmetric, nonnegative-definite random matrices. Its parameters are the degrees of freedom and a scale matrix $S$. If $X \sim$ Wishart(df, $S$), then $X^{-1} \sim$ Inverse Wishart(df, $S^{-1}$). Due to their use in the density functions for these distributions, a multivariate gamma function and logged multivariate gamma function are also provided. Note that for now, all functions for this distribution are designed to deal with only one random matrix. The functions provided in this header are: ```{Rcpp wishart, eval = FALSE} double mvgamma(const int p, const double x) double lmvgamma(const int p, const double x) double dwish(const arma::mat& X, const int df, const arma::mat& S, const bool log_p = false) arma::mat rwish(const int df, const arma::mat& S) double diwish(const arma::mat& X, const int df, const arma::mat& S, const bool log_p = false) arma::mat riwish(const int df, const arma::mat& S) ``` Where - `p` and `x` are the arguments to the multivariate gamma function - `X` is a matrix, a draw from the Wishart or Inverse Wishart distribution - `df` is the degrees of feedom - `S` is the scale matrix - `log_p` is a `bool` (the default is `false`); if `true`, the probabilities are given as $\log(p)$ RcppDist/inst/doc/RcppDist.R0000644000175100001440000000021715022504771015420 0ustar hornikusers## ----setup, include = FALSE--------------------------------------------------- knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) RcppDist/inst/doc/RcppDist.pdf0000644000175100001440000024570315022504773016005 0ustar hornikusers%PDF-1.5 %¿÷¢þ 1 0 obj << /Type /ObjStm /Length 4494 /Filter /FlateDecode /N 92 /First 768 >> stream xœí\[sÛ8–~ß_·é©©ˆÄØêJUâ´s³·oq²•E¦lNË’£Kw²¿~ÏñR´­™š‡-E& €À9ß¹PI '”j"ˆLS"‰J5QDkN41<%†ÐTKb eï (¡ÊÂF¨¡@þY Ï‚0ÆáAÆ¥„F^:`J@¹!Ìp O-# ºgŒøÇ…²ð2áÒB#N¸Ñ)¼LD ãb’&ઈ0V‰aá%faø^†)px‰S"¥‚+#RY¸r"­¢‚(ô9L®ˆ²Ø¹&š¥ð¾Á©ÃÕÃ$vNŒ€q JŒÒ8b ÌŠl ó‚X‰ƒá8„q7ù”‘i”r'ÜH` Lñ(HŠœÇ!©…áJàãÀèš2 ԇ̦8 ¼~I ÌS¬Êœj¸±x³T@™s˜¦Ê\`$”[˜…Ê‚ÂÌ¡*8t¤€²©%Já pTe¡° (;á(KQP‰ãA«Ä£²âø”•2P”A&P”u ¯ÀØ`~0 ”µ!€È¨ŠDe­€í(Ëß@Yd4b*äÄ F!€ ÈŸ l ( ] l týR‹P1o€ˆÊ–+§ÑŒ¥XF,¸ð_¿þJ’ãl=¾¯Ç8˜’S’|¼Ïæ/&ë|1'ÿáÊó5ù U›õ,Ÿg+PW|2¾ÉŽ×I.VÙ¶Ò¯HAîüç=Ô@³Å yþÜuúb³¾],ɯÓl:MS1†/KSø— ¼]T¾ß ìÊà«(”à 5{Ô–Ùøj¼ÎÈ/¯þ°+¡ƒ6‚Ò¤ìoiú·¿í*ýL< }(èCß§Vðl}{Ný½Êà‹m§8è÷}öó¯ÅòzE~â0ñ]ýŸ,×›I¶$¿¼>9"¯o«õj²Ìï× £TŽ(´9Û|ûg6Y;’çùz–…ÑJæ¹ ‹!gp”ËDÁ-ëG‰Ïš#­pPï¸òìy`ÿÁb3Ç1ÀŒr˜M3è^ŒûK}˜*¼€*» ÷/æ[r_÷5ÈÚ‹?Hz>_¬]"´:XÌ×Ù m®ãì:¿\ü€V)|€‘  ›žŒ—Ð2@é4[-6Ë GÊ¿ýX¿>[£d@)FKá±¹\Lβ5ÐLN^ÂØ²ˆáçϫì3„!З«5ñ|HŽÆpOuÇ[×^|ÆIò*[­K…¹úümXý˜‰”Ì7³NÈÓ·Uúž¥É_謘w1•,‚È‚L Q1c¹öÐð ŠÁ'¼ãÚ0Az:(#/!¥äó–L•»ŠˆVíG´ª*ZõÑr15¹HMG‚Vä⹟ָ¯#Ü—Òs°‹ÛAYÙ¤àð´äfK¡i¡´…yÛJqR|á]>m(í3Ö1%!鈥² 5J«XcU¬ñØlO–ÙŸŸšù.œ#+ƒ‘- ½»×5œÅçÉÓ‘a¼):V›Ld}ºŽÐÄFßß3OÍb²çFgŽußìy†"✑¶´…QE‚ê~œwû–~pNU7KKÜ»2Y¼£*œØˆ¡FÈÉ:ê³ È,:J+§ŸbåœMÓüñ6Ö Xð‘–²O^•®ø·áÓv T03¢i ¦P^WhU™BÔ. –Tá-³Xp„m›ØjŒ’‹cM¯Áê^ƒÆ†Ç±+æ!`ϲ’Ù@Ô ¯é€ƒ‘tŒ§óª£nÒŽ°ÀѰ~Z¶§Ïlàæé‚Ó.‚Ï-n„A^×ä?‹òߣÝD„ᢦ€‹¦‚ýáã›Lºö¶+Ô{›T¤ bŒ·Og¼~<ã‹p?0^1ŒWMÆ‹nƳ˜ ̨*¡»NKÓÒˆŒ½CK Pé :A8ûú”'KÄ_ȯ!¦aÍùêžùÆ]=æ`0úþCÌxÕ§£Ô>¥ªî0)8zwCj¶Gj²Gja& N*“ÒCvI¯ù^•ûûá:{2×Mú®72$£F©iê ‡)žë±˜­¨[Ûa¡qu.H"p˽GëÜ:ó/´Öq~à"ŒI[üè X,üˆ† àÁ~õž?òñäxÁˆ¬‰T™Ì£!‚.™  Œç¾¶%ÜÚb©J·Á³{·È.z¶«ëåx•9F'ï..ß\^þãèøtq7žSýì4»ÙÌÆK’ü6Ÿ,®óù I>åóóU^¸éàZ)ã%¼w‹É‹%nìlS'×÷´piyí$†r£pY\Ìó ®×Ó´¶:ï‡õ)¿^ßⲞNµC~¸S¦úG™fIû#RE¤[ ñpàÛ{,Òõ\ ÜõrW,ùº]f\M\êgîÜ¿Éò›[x4aŽˆÑ_’WÉÛä4™$×IžÌ“ErŸ,“U²N6wàtžQ+a’³ñÍ ÕÞM÷ePW© sý|õ•‡ù,ãÀ¤Êâã‡ñ]Ö'¹·ëñ,Ÿ¼˜ß–SÐÃ|µ±9–L“³uvwé\E…é&WÅ…`mÈœ_~zÿù|Û1{ d„lCF5!A/dÂjt 2Üy~»-¿ÕçøGY4[ZT!&)Ã,ÝñV j޾à²Q.i7ŽRˆJ‹‡Áí%î]rœŒrÓüÏ,¹ýy›Í“?’ņ=1fQlH©¢å r1n¬ûâοÆÝt,ãÜ]Ýi€_V¼‹t‘Ž‹vûÆÜ!¸`%H”àáÊcQAÀk…®5¼«F5Wnäî]éßËaŠ—Ër怮íoQî&†ÏÌÔàyYÖc9n»s<*€ )ʰ{¼âi6U{¯¨ŠFI—ªò”åÔå·ä0yVúÔæCò19{}–œ'Éeò)ù ª(È–ùêähÕd1[ÌáïÝÝŒz–8ÚÉ´Í+Üâ–ä&¹Á­Ýl™Ü Ì“‚Î’;pó”qáTò>¹ÇØc–M×þnéèÝC‡‹ëä~¶Y%ß“ïcrèöûf±Î®¿Í\óðàßpOþ=Ì*»ËýPWÙŸÐ=*þj6^Ý‚ïYß.³¬0›ùu¶\MË,ù3ù+ùv¡m‘Þ2¨šax&R_ ¡ˆuünØÛ´ Ý*:ØC©¶`ܲ _®./ŽŽBÇi„mu'Ò†‘ýþi»o³RÙí·eñUÝâ»Ç-ŒD[ÖÍùVf 0¦mÐaÀÂQ«Ë,ì•2ëdÝ@‘é.kÞÒç/‡o?¼ì7à¦eÀyÛ‚ Ö´àØ¨O:¬G:hùšRáZV¥â·Rù‰E¶®ˆ£* ‘6„Ç¢¸#ÑoŠ¢›ACea‡ÊâåÅû×Ç¿CWÇ‹ù"*Š>…áíˆN´’€íK$+ã)¼o>—¥åSiQÖÄÞJkoVëÚ­»úŠQîúkÕõÝ+2^w€Þý½8¾+p{¥·C?7m{¶Ü9´Y¶Zy¯¶¹û¾$¿™òmß‹L¨Û5½³ÛøT4ܯ•\GTÚJ“:¡=8>•Ê’N{pX Œ_.f×…²ÁônÕˆµsiÑJŒ¨íW£¾ÄH±fZ²M[ðT$÷a#§Þæ\OežíÝžWgW‡•UˆEj¸ÖÄ‹J›†ö¯×lbÄWÓXmssÖv>LÕÙÚâ0ªíº¶E·u:”Sš¶Ôê%˜p$ÓÐ:ÕÔºNî õ:6G"ÉçÙÁåË«•nÉgï–n;¸V­¶]Ó=3Êît*¦’nB¨{AJ,EÑ+êñŽ'^­S Ù¬o#4jޱ­6Sƒˆ{¬ø‚SÈðÆno÷¶[ýþn8¶gW +oÂÑnà&¬snqÓ!À¡¶ZHÊøÃluåKi«Å(­þÌ£f«™R£ìªÒ#ÜídšPX\Û‘ô!ønSýø¡Q1’‚v M¤P›2ÂÀmpP1h8Â}2©G*}‚ù—º‹äTa¼î5Q4n²ON>¾;ì]Y·ùŠÚ·µ¾Rï@ÃQ¥èº:‹ïŠ>ìöIk† ØûÜÿÇ句ýÔ†ùI›í|Ù® SÖ–”Îò›»ž¤ù,M±¾‹*{ö"æIíX1~*­O7€ Ûµóпow~ñåõ»SL»Çë[ßU½!º-ó'ÖêJ§Møâ.Y|ÃÁ±xn›–IjÄÃå·Ùw·VÂ«Žª¬ÈšÈY( (ðËãkµ¢Í:©Û“Ne}´–­Ÿ@NtUËŠÂ>ÁÝœâÊaúG=Wq`>?éj XSì¦MÖ„æˆìóÐI$®zwøùô¥Ü²(ÿg-‘ÇôDÍâ|+©píÉžúFíÏìí‰"`À=‘Ã¥UL¡öD®àåž§Š¹ô6¤Á¸†€ÆY…õìk üßmð§>¹ÄU0ñÇ;ø?ÎÓŠÊendstream endobj 94 0 obj << /Subtype /XML /Type /Metadata /Length 1688 >> stream GPL Ghostscript 10.05.1 2025-06-12T10:04:11+02:00 2025-06-12T10:04:11+02:00 2025-06-12T10:04:11+02:00 LaTeX via pandoc RcppDist IntroductionJB Duck-Mayr endstream endobj 95 0 obj << /Filter /FlateDecode /Length 3623 >> stream xœÅZIsãÆ¾ó”Ü}`U. =„Ñ{wâJÊ[b»’TY£$åòä‘”DEÊ8²þA~vÞÒ tC”<™xÊ¥ƒØ@/oýÞÒøqÞÔbÞà_ü¿º™5ó«Ù3AOçñßêfþÙùìã3eæÂÕR=?¿œñ1—ÒÕÎ˹µ¾^Ý̾¯ÎMÝå}ðÕêv±„‘BZ]ñ@×xU}Aœ²ÚÒÀc¥®îx Vºª_,U#«¯÷ iê`xÒK„ÆTë|Ëc~ت/6=ì³™ÿ>ÿyrs!ê`ŒDžtSk)Â|©tímóó50óÍgp¾´u#lõÅqµ†›FT¯—kð8xíª‡n Ød±„)>è€ë+ÙH³lìRÈÅùxd˜àBZ’"°éDmµ˜'kcËñüz³XêFG¡:[13Þ[á«Û[|#ðøê¶]%JYíUZƒâAIôZY½Ù®7ùwqšóU‹?±õùGѬvÛ‹®íÒü!.jtuÓ¾¦SƒU:Ò€ûø[„*žç¬=µwùh[¼ëÒ¶²8âÈK,Я†3´*‰¼ßö×éH]Õi9Hlܩݯi0H‘Ï¥hXV¨[8`”ÍCÝ6µ2`àf¾d‹‰ÖqyÜzé·‡=P­<ìdDuyèp*$fzjz³0 ug«¶ÛjéÙ¨B¨âôFU‡Ë´‹ˆ¾‘f·ý6X¼¨ Û]\Š®²-tÐwÛ‹c$xØäƒ]V/ ½Aá„`m©ÕnØ|ø,1¨F›”*Úä¸&ÉŒzbD´‘Í„ -…Ú"1j#<ÛîÚ‹]ÚÂ%ZÎF Q¬MX•ÄÍ7€ ä™i([[ïØ425F˜KO-«Vœ ¹ÀK…â¦$zOu±XÒœ Yv&Ypƒ5 à‹®6ùÊzÁ "˜¼Sž¢Fq¸ñsU[a!€`˜?]€ðjgLŒÐ“`òŶ„ Í1ˆ°hÝ©BÓ€TŒS„ú¬]Zî«ëbA».ÁcyØ“²ƒ÷oÒÆv… ž„"!D¬uˆæ®tb$¬AËK“†9nJm8CMÇ!ñjâNÝ€_D( ¥ýuÛ³ Q”€௳ó¿¯ y·ûÈ”—Ñ š.‰7™½ÛB\§Å:¹ò ©V¼"»/%¿O¢1Õ}’Ù_ œFzÖ›8@àHÂÓm8[lOTVxs¦Žé¬O;0ùínwÌ34_V^xæã)5+RsÛ%9ÙP†‚Q1¦h jA½>¡dz:f­]˜³è³Çe&2½¿oŠ·Ý€ù4üçÂkFìbV1§?tÈ…¯„`×ÒoLgDDy`¼XLh%Ù Û´@f}8^$ƒpF¨”-CøA¬”šbå<´CÊCpa"LøuÜõ[œÃ,¤í7q ŒÓt0q'0ùŸÆå£?Ð鳈D†!T=îÀ E> D3ÅÅäÒ"N&° yv õkŽ(\å¸Y€èÝcD…J&$'ï<+p˜ãwÊ)ŠÙØå/†³Ù©LΈ›TÉé¹" ¿á@B„XPK^©©'Æ­Í)h+º“ÐÏöð|°’S‘IY[k§sµ ‘©¾~>6iì¿XSªt[ñ#yœ†·$Ü@bAÑeYvŒ ¼ä†z5Ýe8u¥èÂgÒ¤]S2³ƒT/¤û“„nI(ol¨¶7·œ–kJ”ÉVY•,ÎÞQp_žÏ¾EsÒ;ü£»šÙÐÔ*'á_+7×N…ÚyˆC¢6€Ýf†6j,^zÍñn0€NoèW÷ô‡:œpP¢ðèøä¿ÛRTÛ c0µÏ|rÚédSûFå›~2ߟG¾ø-„° €&ßýõ6¦¦LR{,yË8gèΡÝ1ê0¶¡{¼iFûe@£ÇÆ—-z¾Z üŒˆ©©>£¯Æ¦ö«EÙð¸n@ûrh_]ÂU—®©ðxaó¨†þ¨™Ïw JÍu´CHž tí®/)&.o(– ë'ÀýÅ–{{d¡ñEy< _ÈáqÖG±U6Ú2ðt¯Ø´‘²#r•:T©Á9±mÿÀp , ”o¨]£ ˜øCšfòú˜nÓ’ŸZpÆâÉ în/Órwòl—¸§‘|D Á…{X'´È1ÈjÙÅ€Aš’‚ʘC§7Ç¡GnŠvzܨ8|ÒN·ùuQœ?´Ó³ö’†”ÓŽ}Œ£ø"ÿ”nŽOWù™í~Üñ‡c¹ãø¦|‘ý¿B‚8 P0@µ6îý@ÂlÓüÒX—íú‰¾ØômD:Úöã3#æWw3ÔâüNùËÌIX.­¯Î›™4P7<ÙÍ^>I‡‘sðWçÊ„ â^’葚>YHß=u»FLÖ;˜ ” Wk‘öå-Q C UÂAøÝ¤PXþÐ*þlâ·> ìZaéÓ(‰wðWè2 ÛyÁR;;n)*~M;qȧC¡oTô@=ñAñÁßšà{ð¼Âî7û´€zw‰8vÊäˆBÓ„mš ñ=yÜêÕ𪠾‹¼[åU{·¹KC¼ç2VJ"9²†ÂÄW óf”Þç3í;›߈„ G¢CN1}!ÑYˆ1˜R^ÁÁÔ¨„à ho Î`Tܨ\£¬4_­ï}(úž ÏŒŸSÑS¨ Žt ¨ÍQèÔÜÎËŤãwrL<^ÑZòj“}Y…s@F”új¾ªoé1„Ýxàø!>€5Œƒqƒ!›<˜Èi"ƒD«"o(ŒjE’­)A4÷Ѷ ?®ö±Ç­]üÌ'’šDcƒeƒ©ZÆ{Z{=oO‰ŠÌ&nr"%¾6‰‘nÅU<}M²AK0ž=*rî G•á”6ä#7ºS_'ʼnà,Vúðà õÄ ãr”*é<:¥6CAªõ©6‚ilê[+(àǯн¾ý¶Ø0€endstream endobj 96 0 obj << /Filter /FlateDecode /Length 3087 >> stream xœíZ]·}×oðƒ€øt‡Àÿ*à6ˆº "ÿëÈ«ºÀ¼ÞmFc¥d‚¨^$¬k$n&Ëë6^Y!­V¿ƒ_}Q6›ŒÆÚ:2§ÒoGc‰™ñf¯Q}Ŧ Qƒ<ûjpö‡«¯ÖÝ ç…ßÈ©ãÓòÞb–@XSmGcë ŠjqS •F¢îÏZ£7»Õ^ÿ³QSe…ðÕ”ºÕhhªoÖ›åd1£™ƒ0Á{/®Ðà7àÞEàw:ßö½dUöÒÇRú-´ R”^M›¼Š÷l p²Ñâ ¸ÃnÞ›ÐÔùduI}‹ðjÎÜÙ-&›žÿ¾Þ-¶óÛ‘1„`Ðf›ñ˜ÐN‡·e“n÷fá½À*ç)à}¿~ ü0/Œ»šl¶)Ô„­&«iJo«—+ê¡iŒªn‘;e˜o rÈÑêôáþ…l8 ~¹û0Ac¢HL—‰ÂøàjzD‘ï# ðWœ)Ùg '‡Æà]—Hâû›áh%e5_]Âg`¬ªN¡ÓF9W__?¡G”ó®ZoR3q·Ù3Lßt¾X¬ÿ«&M†í3ÆÐ=L*ÔO˜^¶Qh\ÐÕb7%`±mПðŠïwR ˜›Üzö¯cƒ 'jT‰à-ÇLСzO3*ØÒ–×ÕÅH‘jžft±HMÁ—×»xE“­áÖüDUÛ«Yº° û=ö|×µ¿Ñà £OJ0…ü†vÕë½ ØkY±ÞÌNgŽcK¦@úb¥­¨^žDÆ †êM6œ+h&ÈÕ‚Nɩꗛ¼Ùv©qÁ®ä½Ö2Áå ÑÂm*žûþmî·ðãƒ~¼Ìð…«jÐr\5_^¤±0Ÿï#h‹ÂÊw3ðFãÎbšÆ÷\oŠÞ/˜ºµÕx…RHîo»Î}ËjW˜uÖîØ9’’Ãö“C5¦6^ÁégÓŠØöP"8‚ãc›ïŒÑGÌ ºæuaS=0_ï"g3vÓ‹A~ÈÑ‹aj‘é褨?1ꈒ]uEÖMjh »# ËfóÑVŠo<ÂÖVtq'÷dè÷ Ù]Q¤·ji¾WE£/²Šé@àÑ|Õ—\m@”8iÞý±¹ØuÜ„¡Jµw9?(ãÚw3\  cƒ"€& w(O"£†mî×Åú¼¤YBá’*IâϦ³ Fn$Õ ]|ùêÕó—§gožûÍÙ›ïO_¼yvòõ³® =\‰“voÕDÑ´œ<æ´’O¦}`93‰ÅZ(¦nºKQ;§¼  Ñª›zw±»é_²ªï@4_-9^Ö^?Xs²eR!â…-Í{BÞ¤‘ÁWëÝå#Áo"2–5¨2#.^)–n#Ê—“wL@Á1u²/tª5Ñ1LœîQ‘…~ºÚÌ3逷«wÑøU4šF<¯£žb' Fš€¨9I0…Øæ*¤½'MÝŠ¡Øé×£Ñh ·èT¦­B’è­ºÚDwÕn5ᥠå+A€†¡pO¶4¸x»(’¶ÎSZh#Øã½ YÐ>\Q‘éšnsC+>‹%T¾eW”¾šœã'ÜLn 0"ýr–ÜõCÆ×* j®æ…G€(RÞ„ XFDÖ˜rß#¤†cêËÓÊx>IvQËv¾ÚÏ$eÔ¦|^Š×mVÊ& ÍjiÒõ| ‹©|( ³ÉÖD†°a²MoÀŠé:eø¾Æ¾ImtGçD³ ÏwyìTD¹V¨;U¤åö'ÕpËwZwË„]¹ÞÏ!£ú3#k£ÝÝÌÞlê!¬«•I¥ÕiD1D÷xˆ0)ëAU[¡‘ÊÔN¦vý˜sIrˆIè>Âý1)kŠÝ¤ùžµÛAÓ¼æ JyÍ•¿K;]ꫯ ÏD5àÄÕ<*Ò›3Öðë‹Nz½O‚Ú—{WÏ_œ~yòòÕÙËo¿éxàÑ=_:'=n7/ž°Ú"ÀÛ¥)âUÖÝ$5¸üh–|×U_~þy¾PšÆê”–(‘íø UèÉ‚¶Zè-Ö0ÇÒ@bæE«ÈTgQçliÐE»å“”j쓼ìűœ„â$í^tùôoÔ¼,‘ìê”ÑŸÕ©H:}TöøšwØs îIòopÕ2j?ò”¡1@ yv Ã{cJ ¹÷è|÷³AîòBõøj +>›õ²[€¤œ ½6}!,²ki(¬«ú€ã6‡¦DÓ2Ê%"YÜ£B¡0±ZHH¡`8ÚJÏÆ6Ì­‡za‚,S«LmeÎIåAª&%mnÞÏHN5¡]†Îúì³,¯"]Ѳ7íwYž WS9_V³ãî %¦õÂáõÍK¢ÎÊ–dŒ{‚&o»SÊÌ#TÂßwytyxm>3ûñÕˆ6*”e§Ÿ—Á/†c$±:D‹Ž‹Ð(´ ÜýÉ[ôŸ¬¤XýïY±’½éfåá4V³žeMú[$èCsëtvÐŽgªþ©øÊ²öÞï“dvføþÞÆ>ÓHQË`zñÚmÂÜ5ÄÆÙlHÜo9Μñdd’§Hß'1kHJ¢*ðD‘Ù^>Pm:N5RQ²Ž£]C¢M§ZI…œCú¿û$BNJ Iá~oB®ë#…\aЧrE—ŸDÈ=þ·„œd”ÿƒBnyû …\Ç_‡ºt¾Ö”Q{’®Ø*Ë€õ*•çvÓlúQ§ˆ³evº…a“Åš´ZŽCÒÉŸ­ë´sÇñ´. ŠX–¢ùT5vgím ek‘–Œ½f«ý³/>æl§Ul²¯ŒG,’/‹ÕD©õ§Ý)ˆŠßÿ8 ¼R…Úз?ÒAÇýùα#}ä èÒ¹‚º)ƃ„õ‚Êh®#iWô)1\ t-Lã<2—.|ÈzüdrÍ7ªS (‚Q4ŒyÚš ] :µ´2î`[¬¿È‘MÓâÐ`ÆÊÇñÁbt#Mè¦5¶ŠkŸx—Ã+ÔÕ’¢;ÊUðç-,,lWÅäâ:½Ï!³or»èüN¯Xòg ì!®õqÙ;ÏÚùCÉ=?§OpÒ8²4ð§Ø4J´%‚Ì‘¤ô²9üöŒ¯' ®Ñõ—ʲ4*¢Ú¡t#gl鈫½¯~ŠÝ÷³«V¬RÚöô5uÜ2ûqÍ=¢ Â1ŠïÇmàÒ·Gäo§ª7j¤¥³£Y@eU¢6Xñv/x8Y¿üqETendstream endobj 97 0 obj << /Filter /FlateDecode /Length 3309 >> stream xœÅ\moÇþÎßà4ËBÙܾï:n¤IMš8júA2„“HYL)’:‘Nüï;³/w»­8Ö­ ·7³óöÌ3KJwÓ†²iƒÿâÏ«ÛICáZééÃÝë‰v°´qSmŒ£RM¥Ž;¶¡Ú¹i·˜\ƒ¥% <)TÓ8 /ÖøW ãn¼Îiüqu;ýêtòùK馎:Íõôôzöæ†OMch£ìôôvrF>™/®—ëÅì3ÅmI^þ퇾þö§Ó‹¯ÿõýéÅ¿úæâË—ß}9{uú cÔ)Ŧ§ÿœO–ë«Õ~¾˜}:ùætò㤙>²ud#Œ7Ô6bªÜ yñòj»ýzy¿£7þ%k½¶‚2­ÿüs4\Rç89;CíÏŸÏÛÅz~NÒfÎg¯^yû×P‘ë„0»L­Æ]ó ¶ÝÍ>ÂÝÍ¿€p²ÛlñBSgÙ\Ç#ogÜÀ›\; KšFg+x„*'c }&%h·†|›f²x8Šw–ü:ã–´køEö¶ÝÏ”¦•"«Õp¹NÂùeŸoa—ö¬Éf,“Šlºô¹Ýt™É½•¬tÅ|9c𦚔 ºåå~·Ü¬“%¬¼DkáíÂ5WùÅòÙUTdÉM±¬‡K-…²’tQ´”Ê0r2¨Œ.e¬wiÓ¨àÒÍúÓ](•,òœ¬Lˆü:j´–‹‹9Ê`¶KÎÞ{óbÕ³RÂI\iž Îj2÷;K[6äzÓ½.žÛ%e6\ø€¶«û|U¼ã†ý*¿¥éḴ¬0?¨x¸ÁàÞôt>ñUEo°ºêE0*,«ÎÈ^5iïñ§Äa¾FƒJ•ä·öv»*ÞyžÕëûáo#³?üjð(ãðzíÁîƒa4“ú"ø¸„rF™6c[I}•Þ®_ïWmWÓŽÆQž0yäV†Õ©Œ¥±ùügYTä d·ÚQÝ—Ým;/V¬Â…K™.R†²;ì?6Ó ýG244‡JuD3ãѬíaZ:’Pš([®_ã-åëðåU~Ë;)í’ ÙwÀ´eÚœ´I€"åòv=oWYïСËyŒUšœ“%]äP€¯ÆëÍ.‰Õ7‚ˆmÛõýMÇž£üë6m ]yXŽü·X©tÐùìdðlðëC×I€Þáõ¯^¦ÓÊ7Û¸¸ßŒË»ž#>â¾ñA’åjµ9l% Z‰àòA¼)¯-ÛDwÿ Kpïú·¡ç3èÊûOC_çÈŽw¦kó?ЦŠiAµèá”k(mÅ«À©àSœ F¹ÔÁJAÔï E ANo·#°Õ -¤ƒDYeÎ'IÈWîS#V¼ûôeÅ¿*Ö…L„5.é k OX±L"aE©,å§ %Å›ªfÕãw£s‰:·žŽ4\0²÷iÍ}!Øñðl©†sîÅøGU䪨^óÀU£µ‘¬ú;ÁÀcn˜@^ÆQƒÞû L¡¢}€Ñ ¦‚DQÚÀP½tÕWyXÖWy¸ìrÑXä¼dÑOû Ï=à¨Òj* ¡üBˆÞÔNZâ‹îQ¨QÈ8`ŸÃGÉ A SîÿÄ¥„êãö£ÐAi ò娸•K}qàîj &•£Êê±Mɤ¾¸}³Þt·5mHÒ‚}T †Í3I…Ôüp3 òQGºøÒ§´‘ÖÀt@?Ðn=žÜ©$Ÿ9„£È~}…Hä×)“µ<Ît ka+QçwûÀŠ`Ì#7©ö|.ÿf`éa éT£ø€„ŠHzLf‚q1ñ>.Ö,òA\v’&WK®÷iÒÔZjÀÓô–½MÄdAßHíH·Èzö[q9 ]FMçm oÎOÒ^€ÃÆ×ó»~_&1¿p£Këe–øöm¡µ]«ÜuÊA7•ã ™ ËÑâÍ "o)¯ ÷˜»êÓ”áýÓ‡o`œÊrï¿»_ ”Ú Nj$#ƒd´R@t e.¿†tŒÕ&Òñ~ç G•XF­°¹rÓnlÜ …•i©â3ÎÕ–Õõw@¡S>ð7ϸð_Ì©î4lйºN“ %²°¦Õ_˜—‘²¾¿úÂTŠra+æ Hè˜þb¨­.5Ôñ—3øè£þºÜlVO)I…LjEH`”}1rŸÅÏE@®å/OôØqE†î¦TtÝ®îÆZ`þýà΋´¿¶Ã«ÒZW(…ÖòÞIk·imfN]Z›)‹ÖÖŒwOkGŠwOk3yÖfÚF µ™´»*´6SP·{2G…ᕻ砤&­Í´Ô¥µ5}ÖÓÚCŸU¢µµÖÓÚšNëimfM%Z[Û_}aB[’ÌT.ÌAI-Z›i¨Kkñ×X´6³eµùuÑ]à'Mã–%ãTrUU¸mÏ:3E»n?2µMÍ·zÄ¢aNQÿñ“€èÈÆä*jÌ6 §F¹BKÙ&ôÌ\Ïø£ –¬ÐòÄÑÃà?©¬9ÚäJÆm2yïmîê6¹9UG›\ÑH£MÕx§Ñf¬x‡ÑFòê6¹¶§6¹´q½G›\AÝf€ßQt•T¦¤âh“k©:ÚTõYmø¬ÎhSÝii´©ê´4ÚäÖÔmªû«/Lü:¯d• sPRi´É5Tmó×H£MnKåÑ&WUu´ÉUmê'A*¡¡uÕÑfPQs´É´Tm2=G›LËSGƨ1ºòh“)e´ä½s´é*Ž6™9uG›Ü΃ò[®wO`?„ˆÂ”õ¸¹j¨> stream xœÝKo#¹Çï:¹ä¢SÐÆ\¾d‹äAvc$ xù9 dÉ–åy|ƒ|ì›dwQ–äñ˜µ@‚Åb^R/…9¯ÅjûŠ`)¥˜uê—ë›÷wM¦,Œæ#Vùã¨ÐOñ¬òÒ)g`\²2ÍÛÞCþB­ðnF‘n'§ÖK0“DòLÃôÒÙÆ=³BU6ïÞëó«mãö¡ “ÒT:ï:’þa8ÓÐê‘AÿD*oîÛ¶©˜õ¢R iJê'iÃ¥¸dB¹Ê›‡ó»+Ñvö*ÐMiDhƒ¦…õ4h²iÐ4ø¢êùB´°g²°2*MËA£!R ¢ V ä Q« Б`µ! äÈrýéjó~;_,Û¶° 7UNAæ|¨,·í¾ØÇiúl}Äx¦<ð kaM´Xx‡)ŽTåZrÇBm¹-ïJÈ”•î¡h§Ûâ.²yO‰»H‡wG%:ÜEÞ´ î"ZÜ¥ WÂÝ*'¤¸K´w)ƒ6àînЈp—:hÃ2%eŸ%ZÞE¨€)Ð/e¼äEÞ1/u¼è=¯FÔ‹\¡Æ^$Õš{‘i"ð%Ÿ"¥¥0a)6:ùŽ ”ä‹T“/²LC¾H€Œ|·Ìš¶ä‹mnÉëÐ’/R"#_ì ÉI`¯“C³hØhCÑÆLIϤ÷OƒÖ–ä” Ì:A4KºP‚6hZyq]imgf!_òx•eÊ8Ílð´ä‹D“\!_¬€[ý‘«}öœ`:N#á³–}¸šp`ï…rÝÿ-¼WØ–„m²žžXå`šMO/'Ýâv£$™SB‚n<âs:¢•gÆpçóóÕå>+)´œŽ¹ÎÊY7ãØÈmèîç«´.¼í¶‹evÍsº{ˆÇiƵ‡Õ¡ ÁbûaÆ¡F€Ùê6Ét&üQ >Bç®n–eZvgÆ€¼QÝ|ù8ŒLvëÍx>2õq&-s_ë^ô±BZ­ºm: ¸:ænv"#x˜1¯fÀµBòÐ]ÂØ zöäôš¿Œî$î€dzÊEÎÇÝóùX<”`ˆä¨ŽÙØY#wðû¼˜pi³>ŸŸ/–‹mJ"èK‰•{ÂdBøUÑ[_—ÓZTg>Ÿ 'ö?ž¿8l«—…mû¡ÄÄê.Õ3TT÷x[•s‰†—È5Ó­Ï«P×å Õi!h`l¾]@wÌ2&@˜²>LËÍ<‰:Û}Ú[>߇cv‚ƒp\ºt†qq?fj§=äÀªTliþxß­ëâÜ.>¦òÓ¡+‰0umt §S·t×÷HÏo«ào¯pYnJìaX¸2«!þP˜ç6°¨†²Ý,Îc6÷fJÄ­(÷%Sá+35oÒ¾Ï_ؾ‘ó¦»]¬·3Hsâñ6ñŽÒ¹ömw;ÿœƒöm†ÃbZûV SÂæV\Mó¢’b¯ûº¯b0ÊyšØ²pæ„æ£­²JäÚâ|·7_T&O[×òKËv=l£wrÀc?-ÈU¬F´ƒM”É×tCuJ(…<¢½H¤aºÁ¶ݯ×ËçDm|RW§AŸÞãB/›|B¼ìp\FrÞ?Uùö®î¯—%‹ZC5]Ï—Û²èûn¨¸;¨fœ«†w=_>\=7ÀÀ™“;ÁÿŽ¿›ýa,ãÅõ±( ÌÌ+ P«Ï «˜7#v#“ÖÊ8L÷}üÑt0˜7e0 …ÖŒ=«hŒÓZN—é­û¹v³H¸¼èªV%â°.=¸Ûç·†e+¿¡Ü£ÛØO\íÔMº4vÝ>»ÐV¤©íæ)T£QŽI[ç Qû.Jç¼fÂY˜5¶GÌ¢çœ+)»-ûƒrªñ¯‘¤c{º»è1ûäó~›ãtßÑ·ý¡0~Ûýi‘¬@9BưkÛmàÞ;{«ãLÀŒøiìß§©Ä]_¿KFï½±CÂàùŸ<à_ÕŸ§Ä׺~¨*b®A@ÔV‘éQ,5(Ÿ7hÔhÃö6À 鬶µ×ÏÞ¬ m‹îÃâ:3sþÅå(užˆPëK±®°æà=×Å»dc^Ó€z^ŽÇ•göth-¾ÙWÛã•4Á´Õu:~›NW:È3ÙÔ8ÀËúüŒ¹¶ßT‘Éicã»ì7üq³ü4Z®ß"ŽV¿·pÜð×)¥¹ÍÔßϪg]ó»L°öX[§úòºím¦þF–¥W¹Í¤€9•$~À ‰t·Ÿ†ˆ_¼•ÍÍßÒï(VžÂÞ<,nnÛÞË”¸‰[ú˜)qV‰Y¿aÅíòüÅGì Á×+!bÒW³?sóM;ò4T-4\~kØe` Û@¬ò•7g2lŽu~|‹ˆÑB%Ò„ÑF{펎Ñ7ÄŒ†”Z1e¾Fk”ïѽ_ÑZ FCæÚ~]¶0 e4<ëÈ 9CÅhÔñMÇk2Š˜ÑF2FC´ŒF°Ñ7„ŒF³ÑŽÄ¬£!_ˆ…×R2­L%Ej=BÕù)7yÚyÆ G_C§‘¡Æ‚ „ xK€úÐ Iþó“ìX§=§KB•Êk9 åç1é8‰4áôÑÞAN¿§ãtä 1§#¥VœN™ïÓå{àtdïWàt¤Ö‚Ó‘¹ÆW!2§#RNÇ³ŽŒÓ‘3TœN¯²zÊ ˜ÕÄœŽD¨8Kr:iÀ §coè8Tî´}æª0 éðù½c´á ÀTÎÔ5Ö¸Ãç7Ž‘L É œG°ô6í*+­{|yáyÀ†Ïá3c‰{ü(BØã‘ͤLï\9±W"já:ä ÁWeN"•V/´/³™nüB{á`!¯Ètá-ãÚ6]бÍ;²«Ð.èH‰nAÇî4~Ÿ}Zбé‚N®¼ WuK³ “¬´Ò€•{C´ “¬,èÂiƃ ]БÝ‚ŽE(ôck³ cO¨ÞT™_n†¥Z­êý• :ßœoð’g\Í´&ÌxyʼÎxk„+W‚’­µgÆ»Êt[„+·t°Â°çE[„C6ïé©#ܨDˆpÈÆ7¼2Â!Z„# WA8\·DG°á(6 ò† á¨6 ´÷ø®ZZ„E‰"Ü‘ˆ5B8ä 5Â!©Ö‡L!uÆ Â‘e|@¸*ãd×>ÙÂ!ÓD‡èNh¦DÛVÛÜÐ!R!F¸Q‰áp"Ú2IiãHˆá< BÇ«p±ö¦5’äGÉV®·“Lùxw¾Ê ’¤ÈggV6xov|%ço_óÞl%ÿ/ߛݿI9îºòš¸òzÛ|ÿ_q¶ˆ/â—~z¢ ”N¯?7Ceý8ù/Ñî™[endstream endobj 99 0 obj << /Filter /FlateDecode /Length 3426 >> stream xœí]K#·ÎyÎù:°C7ߤø$—‚Ø$v C3š‡=fµšõúäg§ØMREmK3³b90`ìa% ›ÅúªXõU«Åz?鸘tñ_úÿfuÑMî/Þ_ˆþÓIúïf5ùËÕÅWßk5 Ú³ÇÙv¶ªTÛÕþÒRÍ‹ûÕlDS¸vâyM?ô6óƆE—I§ ôê¤%—,:…ê´ÜÜÿ4»®R°… Ä• k:.!èB°ÍZFÅ$D²´"3ª…ÖÜ9‰¯f×›Íò9¡6D4ªË Žè“/ð‚‹ ª ëÝ3bd£;Sëö®¶[Úˆ4ñ–ÝÍž–»ÁÂ1Š/²ƒ†Ð¹0@ çÆ¹jyw³å‡Ûç:îäø_uï¦ß¤5xXÃÝ)(ÙqÓU3°Ýöé9Á*Ú öÆ2C*ŠžjØ·ñ¥a°˜7y1 AAy$IEœJÌršÍ¶%…vC¡À V]°ÎˆCàÿq7¦·†e+½ÁÝ£ÚXO¡WøÍ;6€ö™¬4õ¼i U먄(ck¼›&o>Ep¬‚Õuö…g¹ùùvûÓn¶Û]Æp+•g:cþã¹–^¤©lY©¹ÔR¦Aã4F&h‘- ¦²!Oó– ¾}̯mL¢iº#ŽÜ/Kåé²×äàÛ½ï=(&-î½ê‡89xnaiÉ+‰©Øé´ÔŽøˆ‹9²K6aoG¼Nr/Jra? #¼ÆR÷Êvúã˜çBà±ÃˆO#ëˆðk‘Wúã¢ÜY”äÞìyì¦Ç å§ŸSL´Ê jæñf:‚“Q\ ëÏÆÉçþ–gz?‰æ–Îõ¡éÓt$\ ÌK=£zYOî&C¢•Cöµ°¯ƒ™D&ã½WÃ*À9×7ëÍvÅ`=N÷á뻚†>Tÿ>ÛÝÎó_Ù?`ðlßX¼g]DÒÐÑAÔù×O‘Aè4©7ïd Np«!ì Ÿ…!v_õî?1zXZ6Œ&5Û“ŒøvÞe뼞xYgؼ¤»~TYPá†°Ò 1}…ªÆa¢¾*’V V¦ŒÉ«L ƒ„8e_^iiX™;nP™J TQ±§Ç8Ä _‘YG¶äi³Íz ÓÍÓj°î!³HË-pˆP\sºÝ+1[çõ™Xí¥Ñõ̱‰fŒi9æXÀô ÿ¨>›ƒ½¶à߯տšA¶'Æìzl~dn ÜÇÉj‚QO¶Ü: ªy—lgeë"À­æì„ÙÕuÜ+=1¾‹Y¼ÊšUtRÜÃõc €î¢ÄóoF¦Ð}Ê9FŒ„‡þ•ÏsäÄZ©ס÷†O/µÖiOôäC²»¸%À©$°%Ȩ¼´6æƒRR~\Ìqäst6zK©Àv{’ØCïÿPùÖq6? ÷ñ‚ƒÔ¾î-ñ·«‹ï"«pÒÆ`þÙ‹íý…¶Á”ÊE_Ÿh§„ΉR|ÕM¶·w§ï¶ŒÚZN ÐWéòýÍcÏwÒz<§˜Þ¹²èbžßŸß…‘ùãN“BTB¾þz/âµëâÊW‹~Ëþñ´ºÝ.nþu{ÓßN1@úðS‚4Æø|$8K8ÐiØ I„!&Š˜7º\r´ 2Úè•ÚJp0¡kI7à»»/Ü V£h­s â[Y]py Êx¾Úè-W¯@JèjÔÿôå‹ _ÙzºOm ‘òC%á …? ±È7p#®€—ö»opÈ´ë bnž®—·hǽz‹CÆóPÌ !é6T3À„% 1‹ LvÀ0M LBÂvFWÚ”ZíötÞƒÔ˜©ÎÁ*-f攕6mñ*›’/ uPCœÀËž—6ˆT½)¯›â¥cðrž¯Ä4¬ÖÙQÿêo‰œ HS@…‘ˆýíØv;2$åÏg"6.~å”û›í´:« €ÁRºÿe6ˆÌV ±¤Ì6TBš0Ûý|G™í#5³E:Q2ÛÚDM˜­¦µza¶¬^²*šïW`¶HÚÙ̶6"³Eh“B§¹¡&¶E¯ÝK ¥µ„hV»×…ÔV8-!`e7îu!b´Ô`eB{ ¬–|v¯ %+. [ßCÉf‘ˆƒ¯#›,ІÒ&¶‰å/ÛiÓuTÙ†(§XIè ,#½?p‚Ö%‚mi½ù&jô¯h$—ø$–rfE£­çVÚŠ iQÑ ùŽV4ï‰+¬mEƒ%5ªhH­ž+šVVÏ” ÏG_Ñ`i *<]ã—H–@K Œå6ÐV4{T ’@ZÑP¢U²ô^ºŠ†°\ÑPVvã^šŠ†¬TÑ«aEƒt¡©h¨Á*+>¥ªh+š½òЉ¢­h ºŠ ¡­h蜠T4•PU4ÔæÏ ’CXÑ )çV4&5qEƒ„4©höó­h¶Ô Ò‰¸¢ÁÚìÁøÌ÷Œ(×H—uc:$`ûÙJ’°ÿìI°¢a“#eó툨ñ*Y¾óÜ“×'{!”»sý™HMNŒ?Û0´ˆ•‰”i] ¤I WÙ‘”x剔i˺K „$à”Û/HÆÊ,f’ 9#WznšjΟöI±é]k!S¹JMNÌ•’D° •Çê´ý^]³]mpš˜eLüµ-^Jªø;‡J›ÖyQ)n€I’¦t|š?Цãœ\½7ÛçE­<àbé1Ë\B¹ø‹$"Ò83 ï`¯Ôhð .^J‹Wþ¡Ö¦mjÌ÷Èñ’`z)ÌI¼Î+„†ðR›žà^Dú²KA7#â¨,åÕa+Ñ8Í¿9x]Hn½ž\ Hr°ÉN»^±Lgð~ÖN¡sùœÙÙz>6K {2Ÿ)úþ¹YÞæÓµUåû§Ùzè4ø\,«n ù¨Jí!1Tôý,‚rcù¼Ðt.e> ¼³C7‹á@àƒf©G†êÏØü8…¾0ŠÍ–OeiòóÆÃËá4pß½¨;F}’æÐn!U}Þ7ï² lk+'霦â©ðâ…ŠY5AiÒ`d7Xú ÷)¨ë-rµêlþÁŸãYÞ¿Õæ"†³ºh¬†† ÚƒõúÓ‹{ë׺WMYÐIÎ}‹‰r’óцòÕÛ¡aÃŒ]\lV˜þtæøZÈØ$e¶ç ¤"ÀÇÅì¨F}» %^Ø.£h4¦Íëãöõ+ãve¸Õb½XMûŽ)€×Ó*ýBdœÞ²ÕìÓ0,xcʰø›“>ƒ?Ø‚??Û¤ ~£{‡ß=ôá(€EJkwÄzËhÈ„lS¼Õ‡§Ë¬ŠGç¦8‡Qºj24È©,9¸Ø¶v“×·A*ž±ü¥mPÐÕ¯iƒ‚/{Q|ÁËÛ TºQ¶AÁË{M”j_ÔK~E”d~{mP°Þ'Ú àa/jƒ‚/xi”JÈKÚ áûÛñ‚ßÛ  coƒò{”ÿo”Ëø3SçíäÒ ŸýŸl)È¿»ø.WC endstream endobj 100 0 obj << /Filter /FlateDecode /Length 3711 >> stream xœ½]ÛnÉͳžó| †€Õ;}ïö"û$/Aìn„dyaPw”hS”íýƒ|vª§/SM )ËìZøÁ–5S§úTU÷)j¦ôqÖ3>ëßô÷åýI?»=ùx‡ÿ¥¿.ïg9;ùîgegœ3¯µ˜ÝœÄ[øÌŠ™å=ë¥ÝŸœwÛÍÓÃå–ÝÍO¥Õ¬ç¦{×ͽdÞIß…o.¶×WỊyßmÓu½éþº|œƒ!Í{-ØY^$sÊ/ÑÁæ§JAÎy‹ äE U­u/cœnJx% T déÜrHî›õ?½5ݧåU²jµƒÔòQ xË!³ÕùÛ»e6 yWqÑÝâªúr“®ƒ»›”¼ÝÛ!v;;ùéVd…Ñföü›ÛãaA )+=³n&Á(spÉõÉÍáÍMO„>°d`çêÍ@þÏ—P @òÇÁF{bϤéyøßì·oý„}´ Î+·oGˆ×úË{É`§Áöλ>Ý_o–—ÿ¾¾Üžrª¡ž½sÝUܨ1ÁÇ/HÛ¢&-ÖVBà !ÿ!D}9Ü3- âí! É• î|]BÆn¿;¡%r… ”?ÉØÁãáÜ,V×mWÖ¥åJ”±ßƒ Ê8´N‹2ÒD”ööв”¢ ­‡V”! V¢Œ2àå°hð"Ê=zQ†Àˆ2dH”!ÚÓ WŒKbQV0ÈDÙˆ@+ÊÙ*u6®…H”Q“•E!YE”k¡eÄ\å2ÔÈÜ’Š2¢ìóõæýv±\µÍ°ð)1h E£Ì’hÂ@  +3­bCT0©ò “ |~/œÛI‚ÖÊ< yø%ÆëÀ´æÒ LT(G sm FÑ s ÒB˜#{{…ùGBaŽ×C*Ì1P#aNð²m4 xæØ¹0Ç`Ç sl­ñÖ–„9F UÚ0Ù{ZeŽ@¨¤9† Õæ¤„•ZC«¡Qçô|%yNÊWÖçx5$œ®RJ1X©B!È:‚¢UèˆN¡#Z…N—E¡WI@¥Ð©ÃŸ:Â!TèåX….zØ):܉Aš(ôÑÞ^…¾¡Tèh=´ /t§ü–Ûç;ZÊÍùŽhÏ÷dµ;ßÑj È¢¸© +'|Iæ±âA Hî,ëM@×·áVZ¾„ÑR¥±€,%ðéÑŽ08W”SLÛ’¸9bÛwÌÀáZÙ|Ÿö÷¦¥¡ò´©€höw®53®B"H)!¤ZMÛÞeqh¶øA\ ZºdoŠ:ú­·xn™–ž°,®i Kr¯¦íž!×;•Oz$*+˜Ä?F ·ø|$bÒ#ñ_G Ôô‰2^ Á£Ué#`Œ‚úÃpUFyõžÓ·¦2Ý·uê/<ÈŠètå˜Í5´:Бͤ:">ÐG$º­†è@G´:%]å@Ç©Kt SVtRÂòŽVCt SóUti é±ÄúBu #Úý_t´¢ýcáÛ ªÑ©^ ™æmá¹ß!äá;Í)C.²vCÞZÃ)‰è5E´•°Ì˜Út[ §¤`Λ HÃqæ}@
lC!'*›I…"r#C«iÜ×d!‡h…%]EÈáÔ¥rŽž°"äH ËB­†HÈQóU„\n{A)ä,¡rVÈà«‘CK¡rªµC¦‰„uÈ‹# yrUÈÉ„\ûh!‡L 9„@+ä¤5ZÑTÈa›J!‡h…B"rU(Ú !㪎 ’SŠ™^Ðò%A.èÜm+L²#ç+ 9Z¾’ëi+L²« òëž)“Sö`wRž»áð>ÒòŸzÞϧ1ÂC¶•šB(½¥¦#ý/¸´Ë’`V– K_â•WŽi͹MW,®¦¬ nf+_²r‡ ŠŒï>>-ò,-Óm—«jÒcš¤lrËí]æ€únjøQŸ´È“”\™ ï}¸]]ØâÄ.®e·X=ÏD˜VîG¦>ÍEˆtïjÜKUÃ+wzÎtç<^ ŸŒ­†ùÔÊC†AŠÅ×aˆ5?<âúA÷ŠîrÐçÿº\ ýˆ¯-}ëük„„}sèša×+Žž•Ì7²š{ïnk‘9†~µN£§ëvn ^?N›Ø#,JkªE·Í%è÷ȬõC¾Â mKà~µxòÕŽ¤ïO:â¾Â‘êûq7ÔÂfš+Xr˜…<Ñ–NÞÅÑÛIå§ÑÛa òvªU ʧGo‡‡¦(š¯-•—‡mƒwÆû鯙µø¬FlÇùÐ¥3äGlC‚Ό؃«Ç#爡ڎg#SCµ‡¹lcÿmWŽ™a†¶ÊŤ†½Ù©%èrwÚÜ=³²SßðlVvL‘<+[ ]Sü ª«N¯©¡ÙêèÙÖúði˜Íˆ6øÿo˜ÍƒÊMOú‘€Á -^0Eö^˜½zlýŠéð…zIDgD0Ò±c`Òûé¤AÏÏì· z~PÛ#_HÇ`ÇŒ^;¯cØx@#¨iê:&}Ѓ[GÿÄ.¡šƒ!HçÀ–_Å«¹¢©grÂr¡Së›W«y\ÞÞ7þ)gz ƒœ³øÈCUiŽçLhêAæáÕ4~\Íx¦{GÏWÙÅŒ­Nú¸šÃ D«aÒÇÕñuä ~> stream xœ½]KoɾëœÀS0¬Þéw·ƒì!H.9Ù…,`/ êÍ„z˜¢ÖÞŸêçTÓ#Z²º LŠ=]]_½¾š™žù¸_Œá_þÿìæhdÞ £ÍâËÛ«#ãaèèÊHÃ_(+=³n!´Ì«Åöâè¦àÂ;'áHáÇQzø …Þ†)>ñ(r‘ÿ;»Yüåä臟•^xæ0‹“Ë£´¾à\2§äÂŽ–Ú-NnŽÞ gw·»å±Šy'‡ó»ÇÓÍÅòד¿ýíäè§£qñR!Ž3'2œ_.Oþ“çcŽZYÐBš‘ðáÖωð°ðˆ7HB7ÀÄ(˜Õž0aG¢mn»&À&‚ëï˜çÌXC ˜Ô„ðF›‡õÕͪ+fÒiæ„ ÇLz~w(*Íë1SF1aۨ싗2žéÑÑãU²˜ñ²§¤ÍbHÈpÚ7‰9ÀÉ´hðò6z¯Ó»»ÍkR˜Ö Kc’as÷ébûa·Zoú†%L XÔŸ_ Û¼ ¨Á£ní¶}µQPè­ÿNP‚ÆIÆÕ|b~¥pË™´‹'¸úpß·”å’Œ¥Ø_bþ±œËÕæ¡¯ý> ¥ Ky¿œD¼Ô ÕQH§úùì¾/ú@¼¼à¼òöí·¯|žI×,úÝðÇ›‹íúì_g»»mqO7l!únÏ6౓ö0Ĺq­Jïr$ó-x_Äàúv÷š<yžjt¹íÌ$ S K b’†ùÑëõLX‘otéÜ©H«á`AWÍïÊ™ĤhÒ»S)­AÚÚ‘VZ;¬MÿN¥† 5f¨½4–³2H›Þ àÅwÀ ºáQ ʤ–QµAÙ·S)½#–€IJ?À}r,m’±y»pÌpÙÎù¡Òˆ®yËŒPÛM#ІEpc€*Z,‰ qIBx£ÎgæÛÚ›&Ñ+EKÒâ%¹eN¸ÖÓ:S `Â9zÀ¤tÌ*O ˜ Q6©„›ˆQÓV¹ç „s¯I•€ ØB”ܱÐEP"V[¤Loâ•Îv“Ã%¬rihñ’@VyãÅyDevÔp•€ÔÞ3e8A£Š°ÁÎu•3·X :×F)/ob ã™Ç¾±‘NŸadœQƒciÍ»rF<ç=-gÄ¢h9#’DDZ:4œK 匤x%Îh[ï¥áŒä€ÎH XâŒmhqFrÀj‰2’ioh9#BDZBÎÈi!+¤kCCÉñ*¤‘¯L±24¤‘®‘ì£HIã$ê*y¹¨…EõbŽ±Ì‹fjNSæ‘Ú2OfòƒÉ{÷ RBlpOaírƒžºo£ Á¢õTºFAXfeß>ašò#q›0I"îª Â&aR¦óý!%yLhs!XµC@nKÔ £UûB´j{0éBÕ£U©×ÌZMÜLB›$„¶9 „¬6H¢æ€¯DL,-^©96DÝ5^5$GøþšX§æ  ï &I½[ƒif¢Î`@[Ü©¬]ûlm²¶ »¡cWàðÄ4=Á4?YK ,ü¹ï¥4å–²%°XmK0 ¢k °%ú²\¡3ccš´‘·AP¢U¶% ]:³Ü’6¨ÑÊI„,Å9ó@ *ý)®‚ކߨñ*D Ôš¸+@B:Sܲï K Ý÷DŠ—0„4FéLqË=ÄXÂ3·ˆÈ¹ù,gÊsÀ_i y'п¯/–ÇcØ·ç +¶ø[´—x.‡j±8††ØK“œ ÿ kÚ‡I@£<ÑaÄç4¢Y–cZÖå«Ûó¹Y"ë“yÌǯÍònXB>>®n—±‘;3ìÖ›¬›íÔðÆ©p-TЃõîz UÖi.Û¶ijï D|ðÑ…‰Ð±·W›²%†ß–¡0p-‡Õæ±®L wÛéøU^w0\¸VäYüb Ë(9ìÒaà¼Í˜ûå±½¶Þ[îí’ìbôÃ9, DÄùv•„Z3|šu©oÄ!Q¿ýÜ%™…FàiÂ]BÀyP·u°Ýú·ä.IÝâLm]mc¨ï[Hf†Ö·\nçI_Îïnæ2À³ ÍIA•xB‰î}B›» ‘q9ò£­h@»^_î c›»á~µ]Ý4šíöã×µvü<-+OÛSTx¦¬üª¢_{6àjS• cV©1ìrTó*)²%©kÏ©óòòwúÂò×dŠ›utñ*áíúf ®¥Á@ÚÈãG׳†nVŸÓ0¨ƒº »1cMƒdbrMkd±BŠ32„ĺ1Ðn»>} XœÍ ’3tm¤‘<‡ù8îWºÆ¡cÄXê2?Ti°é°ùýõïÙ¡XÏÙìÙc ®Uh(¬B³“*˜À'¾µ.iXÀª¬h–ÄÂQÖ |tÚ§ý¡Æ‡*ÚEnFÄû¹—Íá×a1bã‘F·÷­ËC*u¹zÜìJô¹¡º÷£=8ÓÖ6Ë«»±-Ðy{àÿ0¾_þiòäõå!H ÈØÌPp@pn5ßG&zø1|Ô,æMYŒDÐAÁ¡ §Zƒ¬*¡®b¸]eŸ÷ŽÍ·q(ê_"nçôgÔµ4ÞàîAm¬§†ª*÷ü&Š‚yíܼY„nçÍ!Ô¬£"-¦µAjöû’|€SŒ[QÂ8„A8àéhö5šñùö=ãB¶3B>AkçüÇ1%\IO„,t¡B‰\¶ŸÐPkB‡Ì‡$˜ÊxQ«òí§üÈ]Õø GŽËª5¶xm"~?N/gÒE"Õò+ª×Õ±ìáv‘¨“HÕׄ³=zʺsP+ã*€¬n¯7«-»†Y[î÷ÃÉÒÇ\é‡8 6ÚVÜRx˜EmxÛˆa£˜Î‡„ûŽDxÜSyÎÀIôe?Fš¿›Ä8¨ªºDø™[´LC\ÚÖ[*(?ê†à„ãÆTúÒ„¥§4#}x¼/üÆsT(všç<º”ê… Ý­MG`1±ë‹ƒ <ܖϱˎ'üÐÎ:¾P¸*7gc ¶Ò5͹ϴá9ìÞ-˜+ÈGÜ… ×¹’3#ÜÃ!LcY§2Ìè±&¼Oá\Mf•q…œtSÚ_yHRz.Ý”%Xh¥t£0Ë™¤‹Vm]<ïߨ Z+Á¥~ÈfW*§É°>èÛkçQNyTÏ„EÀb ôÓŒ¥r˜æñê*ê…±¾þ6Šœ?½¡m‹É&à‘e«ðÓ„Gœî6žkñ è(–N²Änѧ“,>8Üpù‡Ë€x’=ÓhÓ{}&{ÔxÕîÂØXâ·5 !D¯Åh»_J¼Ê6z¬Mßê\¶Ñ“ãUny8„×+ß´Yž¦‡u!x|P|zo¤Ð¼iµ'$¨ÿ«6Ëg°”WÒ3ë¶bz†…ô gh¾'éÙ==ÃÚÐÒ3,©=#µw¡g½ì]èžžžai螎„ža¤ô¬ ;*z†µ¡¡gOàõÒ‡ÐÈ1¸ ¬›ñðl€0›«³ýtôiÛ¯Uendstream endobj 102 0 obj << /Filter /FlateDecode /Length 4138 >> stream xœí\Ioɾå sK.<MÀêtíUdAr AfFHƒ6%Y ¸Ø4e{ò ò³ó^-ݯ¨&%™U |0Iu½½ÞRõ‘ïg]Ëfþ‹ÿ/Ö]ë ×JϿؽ½ÐíÜLwF·Ìͤ®5vÆ:+ZÜ^Ü ƵVr×uÂÁ ÅwI¼¿`žå,þ·XÏþtuñû駱9 Áõìêî"ˆÃfŒ‰ÖJ13i;egWë‹ëf±Ý|ØÏ/—­³¢¹Ù>¼YÝμúëÅ_®.¾½èf/ebYk…¥Lš7ó«Er­e’”ºc¼8¥†q“€²Î9¼"ÊÙË\Z×^ À$sJ³(j/nºÖ(Yß^\Ï™:i¯7Ûíê k a[#3—4«í§ÛÝOû~¹*j6átËmî˜?ži¶IF²Ó SÎh¿{¸-ªä¦ÕZý6ML2Ú)Hn¢F0ÃZa eAðö§we·MÇaÛ¸ŒKÿs°çŸ»~õ¡¬ÿ9”aXÆåõ|dñRÜÀ\ õÝâ]Yë;Þ:ÎXÆä«¯¾\^й6úºùæa}»[.þq»Øow)^µCYÔìÐ —ª:áS±C'\ÎíÐ94½†×ìÐ]ƤH‡>Ò;Ú¡ïêuèD›Ê:Õó`û-7ûs Vꥉ.›²±ªÑ9‡:+UÆÆ:»À‡’e3mÊ6CC_Û^BÉVV6—伕"cR¸Jams ¥±V²ÚýöȤpÿ8ôÛ„Ã3K‡˜¢Õ[:fgÊÂôfu0Ë?ïoç—Z&L³£ïÐ8 ½ ´8,•³KfZ'¸]Ý\4ÿA‘­ÙP0|ñ‰Ïá‰L*Û*ÕŸè77ST°vBžyÿ•ë¦Gùqlï´kÞ?ô›9·mǬnöËUTÍ€r²ù€Ïɶ“ Bf‚å¼k¦3Í>G3®¥hvqM§!‘ÀK(•Î"%²xóv•D¼ù8Ǥ͔húÕà o¶»q=!õqÎ5Dggs‰Tˆ}X œ=ón~ ÛË9`•}¾™3€w®¹Ù |&œz‰ÇbàVÖ:/žçÖwO;dù!ƒE%ºãÐf(cgàóh<ô ¨´Û¾éß,WÞ!¶ãÜ5û97ÍÏÉ`æ±y°ã³L¸½KËÅÈm¿ÌV~8½!.9ó}Ý M·y™é| †7 Öú(á tQ4¤“-à/£bªÙ¾É¬owP &cªé÷KÈц L½„Ú®÷©3ºù4AÞ L?Ó KÛ¾HbxóÂÄYs½Ü,×V úaÿ{YG‹êfÝ9«Ôðv­~ƒ¡uÜãYè$.Á!Ò[sïãÝiÙ¤hW¶gæ&h…ß<ìC.’j›í&QHI:Fs\¦…,¦®;L‹ŒöòñYý|<3@{¡__Þ Ød 甾 ”…tæÀiÃ¹ŽÆ)ˆõqOèâ>Ô{ zǤr B (ä I›xOºL; ’~Ÿ$šl'¤l 4Eduן`ªD„Ì–…Sðm vÒ8—œfû+D®ÛëÜo7)*¥„ýr×?¬öq“@r|ä\gN˜"ºUÆdâ Cù)LüÀø¿ï^Ïÿ0nÔåÝ)ýf—QNƒN0è7ؖ٦^2ë×øR5 Ì«$Œ ¦ƒ\;Q{ÐNC“bdJ`Ò‡üÛeèœeM¶`“,ùü±Å͔ފ©V é áŽjS=äq7a’ºfŠ.ìU®rºq erdL„i¹Î}:ÞÃ64.°²eFîø„Á/x:;å—Î…dÊ‘f*~l+¡ô¥R4½eaèà0`Ҧ7(™6<2½%ÁUÚ%2×Mˆícq­±ÆDrGÙ‹%¹µ¡æ=ð¹Ð)ÐäkNuMþÃCäå*Fb1˜ÕŒ¢þ}"FLk,TäøÄõDÔq˜· Kêþž€A…pq­ÉO¿žŠ\H Á\tfÉä@óK–$ýqÊ¢­Ñƒ×Í«±=Ýî&­O1'ja˜ty5~5Ÿ°“-gÚžm'=÷ žòq‚îæÆøÔôy>‘.ü%Īҵ1ÂÍ,Zº À¤fØ£Xk\b=˜:l¥Ð0üsÞl¶»u{؇èü[0—® TH‚B ¢blÙï1, Œ[o¾Åý*½·ÍŸÁÖHfrè*†a‡ò]†šŽ3³–l&Áö¶—ÏîW~pçSwì …)Ü20‚ô;ߺ‹…'Ȇ+ŒðŠyÙÀ¤Î1Ò¿`²&ýK|B„„«¥ôS¾„ômÜW°¡ln‘¡îØjׯ–ÿ¦D{JP‡^ _ÛÔ #IÍŽÊyxÙü@Éc—8˜4øÒ Ü›‘ 3„ç¡à‘`¨w«+t˵ž[ýì&3GJð=T¸Ö{ ûgyà"ÉZŒ¨ÁC¸Æ1 ênÂ.„ñeØeÊ8°åÂ;O‚SîS~‹³Œ9ðó•t(*™ð1Œ[YíéÅ&Û?>í^É4æL\çB ÒA÷Þïúü¯ûìÝn*-Œ·€°©\f‡ßDË9H½Ó>X‘;(½Ìf˃âAè>Ôš£JGq£Ö̇Y Ð“0÷`¼èÎø!UâìLL¬ýá(Ï~Õ§ùc{þ†‘ÙA†MÂàYHÆÿ㲔ХÈâ3 !j… öÈÜÃ9nžgRwÚ=°cZ¦ ¥Øüvº¹`\SL.…7°ñçŸÂñ³a4¾9¼ïçá$È ·ŒOžäÏÞ¦ÚoÏUe’’ç§ÕÍ‚ª˜ÁËué`²V`A‡rKÁ¯¦(µ°¡;?„7÷¹Q–lp[øËf››ÿæ”ùĵÎüÙ|ÿ„õ…„–·¹õ_ÏÛù%L8þø)TN±æî!7Õpžbü¡tJ¸w>.o„Žîx6Ø`¿LkÕ¡Eú~ ›ƒà „ìÐp)©Ò¯è•Ús€ëBc_8×a¢ÃÃ\ÿ‚ Kh™°Y 70P`ª@ )“–„ÞuóñvW¡¹¸YÄ:Yø¦Z#Çt¦F›J¦uË€åt&–0]³Vu4ÇIKó3Ǿä n ¥•YÊVwù8@˜n€)¹ÏUn€)‡ª7ÀƒPt¼eB× BÁ}X, Ä”ÒÃdSZ(#ö3Û6eå…Ø`‚ÕÂtO,!r:Ç‹dB WÉâA8dpÂ䬒g4¤©œ^éTÈ Nsç2ç¤Â·¡ä¾/ CÃÖ9cP'Ʋ6ò) ÛãFá•©R¶'À^BçAT¶'̹ÜfŒÊãö<¶'gr&lOÛ2[)%¤.˜2)Ñz×>' ]ð®fLÕ¨ÛSN…ºàªŽŽé¢”ŸSœùùáÓvw3¦ŸMY§ïðP*õ˜!ïtqHrº®‹ñÄ”[[ÌÇ »Oéï1B‘²8§ÇÔy]žÍŠ7™ ³úQ˜šLè uÉ&“’¬ÖdR&%šLJ¯V“Iyh2)¹*M&ep6“sJ®ÂSðg~Ž! ŒÇÈñž@g8Ÿ§œôÂ4žíëüó‡…Jp)Ã÷ûû~Ÿ ]2¿ywBŠñ° Ü€ïFâvÀh~ ŽºqªÛ(¿³£üô"ü–'ßgÙþ–ðˆíÿ?°„ÏETVõápc¼w'Ì1gþþQHëD¼“þÒêcTšBÓS!štR Ýz¼P©[‰çz3Cùm¨Q«„PÔ6»Ð ÒXdv¡sÊ%O¡æFœÍ4jŽ»VDˆ § ±ƒ¥ 8 Ñ€p‚?bÒ„JZƒ£¿™ù'äæ´#ׂf§:]ø:Å“Pð˜Fä·¿…W¶9…Å Ó€J°Š =õp2ÌR‡ÐñaÓö-tpã§ü7P£˜ˆ»dh\np~›º—Ó)@ò¬ l@›Œ> Àr@‰°0Kt"J _;(Ù4 Ò}˜dŸ^ê—ãHìX™¤À!JãH gšˆŽèO0äÇì(Kx EáʃBF؈3Fæ°5%œÖÃ¥/R` 4¢Œ1Â"h„¼a#ÐÏX6¢FA¨XA“PJNIL !ˆ9R¨4FèE !HRHô}7€B4‡ ^É ¤?"?â²Ä,Á¡ã‚„üˆüH×þƒ¯8ŒÅˆ nòË_£ËPò½‡ëY¿ îmcÁÑ×Ü7^´ã›„‘оÂDŒ„H“pìoxÁÑržt´œ¿á²¾Æë ñV\A’lÞî²·Ù›AæôÕå!@w'–Ül×à@ àÀ£X“ø+–2õà@$ÀB”òv—ØšNÓ¬R¸yÅ |p “úì4¾@Z5{Œ/%î3wƒ&úÀ’_Lq _€AÓaVG±0ÿØ¡Œa…BTFf—ÿ›w¹~—7¾y§¶Z”ý`@¤‰À˜Õ6ì0®šO¤ Ü E`„)gßCZm÷‰¬Í[ŠŒxÎ×l&,Æ%¶ZÉ O@”üÞeCUõØ é³òÕP¡ñ¹{ظ€À9ø®Ã؉ÊÂÀäÃ#<™¾ì€»Íøš:ƒ7ù,Õç"Ž WõÙ˜õr Ã'`‚`0œ/ _ŒÁÀÑØèÊ ʤÄé3¡÷ƒ±/|ôU¨•ŽžU×Jp7åtî‰Pü2jU/§ãR^Ž¿¿@É`ÄãmÊãœ!ÿc¹È…1B9Ô9X’‚AÈ­n¥Tuƒ0]3– Âp›˜Ó+~8A…¢0ýì@¶q ŸŽ‡ãüêQ˜Ç™E©‹"0(Éj‡ã”I‰ÃqJ¯Öá8åQàpœ’«r8NÔD`>~m,åF¢ÌÍ]Ys9˜›:]ß^C >a°sn,^R]*@Vâ/Q.iLfŒÊCVÒïR.gbV˜Â˜ªŒY¡LŠL #½Ç˜•ZSÑ¡òÔ@8•šjzy¨…¼œ¦êäÊ€‰ßÿ™u QD_t1w¬ÕFÕu±`¼U o)'5¥W¾' Ê㬞Üc¬)µâ-¹Ç]W¡%‡IÔúzHJ’„d½–œ0)Ò’zÕZr£DKNÈÕiÉ ƒª-ùȧbKN”©Õ’%ð=Œ#HçxÏ/ðž_à=–‰fðžxŸåÁ0Ç.´ðÖæ%pÌÝJþ%6PÜPH7lío/þ K2©ºendstream endobj 103 0 obj << /Filter /FlateDecode /Length 2862 >> stream xœÝ[IoÉΙ¿ ‡9ð”±Rûâ —`r˜ 06 AÛ$%\4-ÊK~A~vÞ«¥YEµ(Ëì¾>XdW½­Þ÷–f½_§Œò)ÃéÿÛ ›ÞN~ððí4ý÷q;ýóõäÿPrê©7ÂL¯W“¸ƒO¢Ü1µœQ&íôz;!ÿ]ÿ×ër½ V2{®òK\!}±ÂQ­9·qÅ Y?ÌæRJÊ'‡»eþ ÉÇÙXi縴dß¶ËøÙÂ7ŠlšÃz¿‹‹½wdÛÚõ—Ù?¯ÿzªÀ\p*œ˜Î9§8¹^–|³¿ý×}ôÂSe¹ï“¾Éì+ªŽ*áx¢úa¿ßôUT(î2Ñ÷…! '‹ei‰Uó¸9¤‡Ìº‡=ü¢Z™ø¯šÍòOC¹ÿÙnÈzÕ«–§p ‰ê¡}ì%ʨGS]šY5ªYr?ƒ5Ž”´û͇õf}XWÚ>¤µÚ’¦ ‹5—dyüövýi&HJª}»¬€$ÍS ÙJ©©à:‹ ?›s4®°pIykË<%Y‹$'©Hj`,\v¥÷³ämv}P¿”NSÍät.,ØÒúÈþ3(J˘‚Ü5íÞ.VêäyŸ+Ï8çáyzêiv ü€ÜÉO»™ä „6äSø œ€,ÛHœ3-E°bØi2Õô  ê ù±z0ûðˆØ‹_`´B £™ªóGö"…Ë©Q|j4§ŽiŒ7äúèä>Hñ­¬ÔY>ŠšÜ·1ãtŸÖÙ<óP\-Àär¨>þ¾‚z¬&àäB]™ jŸô5×ùtmðÙÝ>jm ù|•ùÁúÍ&­*¬³4€ óTç-.œK¢çCýs¸[çGêX;åEíøË¬?l†’¥sm( s†¸qz}»«†sseA/(•B!è D®V6›,‡rüp—¤ƒp·ùš4ŒîwË‚_8¶ã‘i/ ¤R©+TBñÈSžÅCP***aQºihuE}§Dw°X1vk¸0JÆúN„Š>Dƒð·Ì&µ¤'Gtb£Ô°D$h7Ú\H'3)¿ ~ù—ëÉÏXm…¬üôövb èq袡éUT™)Tóò-¤]‹ œ¶ËÉ Hp~])$0@tJ$¼ðI<û^B÷Äx´5PJ„ð¾Ø?~Ø„f4Êzî5G9‘ÙpYÑÜ~ŠîˆR•tsŒJhÁ|yFlëûø(©¤âÍæ‘Å`âœMÁé†|—:` ¬Âa¯w‡â|_k3Áµ1J]îµ–`ˆýŠÁÕ¶ø¶FŸ5Ur° ¬å U5òeXkyh¶­©}k6†½|ZP)ù°à+hnFA_ÆDÁh,ôi¨-+Nƒ£s®¯t}\B¬ªŒƒ>õ·ãgmu9ü8t¥ÍÐðƒ‚š8×hðø~y`ø•4?¯î†Å”!Ö¨ŠËH؃ÊŠÈŠSt§ï7‘åTB¯Y’lÚ¡£ÔŽÓ]ÁäÍ›ïºËÏ=(AŽ1s,~wÄXbs^‘{7¬¼à…\Õø'¨A‰¯ FC'€ojÛ/VƒZKBŽ‘ÆŽo-É-u Y‰oɘ²Ò‚$ ²Ò ½²üF89f3Ôª:®ÿ2¨À ßHY5¾BüõÇRݘ^̆_r¿´±Õ%‹ãOÎÃeÇ©“®âò§ -v&eÕŒºßšO2“²°zí@ù¤@n­õ8A!»QÉä’ À™¤ÒUBß„¨N‰/$iCµV¼©®U*•·UªÔ¥U*u8S&-9ŒÔ+Å ©dta¢Å’ãbB@DÂËCa"¿ë(é ž(SõSò¸ Qæ§$7l¢”¯¸³cu Ê@רô hEs=B Ã’ÍH1-½æ-9]Ü‚h(lEr„ԢʓËZÐð·$7xšÞ•<.iASƒX’ºõTžh¤ÔCX¡jàÄ*™€öÇÔ¸¸å˼ßZ]ð²R+ ѨˆÅkÒˆÁ‹·£BV1NõI¸¿¤MýaInèÔRÁôøN[˜‚½¯5‡ûςɨígÁg´î³àqió)µÖÙ|úŠÉ Íç‘Þió¹£ûL=a¡ÅH•t?ž›Z¿a»Ïø3Z©ÊÐÍg. ãT¹8*]Ü}êpOpTPäßÞ‡Eþ©¯¤7x÷™ Ÿ‚Ç%Ýg.o rCwŸŽ WsøÆH)ûèYN•ç@³P-Ä »õ-¦¶üÔ364NMç¿=Þ=;ÄOF;žL/±î(^Àî¡ û;ÎÆ^mç˜jN!†WáYï0[1¦¥âEIg¤Öµº·îº[”áÚbwãPƒ3pÏïÀ;’½À}§1§oÓø¹ÙÃg<«R‡›<´@ÇÊûÃüDV륙Ã×ÒÙ¡CÙ‡çfó-þÿ³‘ÃyÏÎò鹙ö:<™9Lw]«™ÃÃb°QC3}å¨a7”úܬ!¦´zÖ°2ÊœCÏ¢0ÿá‹£bþã¬ËÉ?Oþî2åendstream endobj 104 0 obj << /Filter /FlateDecode /Length 246 >> stream xœ]‘Ánà Dï|`ìØ H—ä’C«ªí¼D>#âò÷™]'=ô0#=ÌhØus8Oy^uóU—øC«Nsž*Ý–{¤Ït™³j;=Íq}‘x¼†¢šÃG(¿B(mü®Ô|·]/GíŠËD·"Õ/¤Fcü˜’W”§ŸÚÝ–8§×Õ¾÷"càÀ½÷À¡ó"càj´;/2DÎJÖrÖ"g%k9kÉ‹€Ä˜¼ˆ—Od¢ÄI‘ã"‡'EŽ‹Jœ9.rƒò= ÏË›{/JÇ{­”WY¯¬·6gúûe)œÒz Pyšendstream endobj 105 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1651 >> stream xœ}”}PwÇwIÌn9š5Fow™³Wú"bkϳÓñªV=AË{eÔz„—’ÈK^„HÄ!ù%‚#Æ%H„¥LA´•Þ‘ªUÇŒSOàœ›¶Ö^ï®Z¯–ÎÜôYúë\oƒÚ»éunž™ýãùíþžçû}žÏ’„2Š IR½ek–±\W±bÕ²¬â’š2]e$û )”–DI?S ¼mvÍlê<«@±Ê3K¨åj¨ò™ñ„‚$·éÍë&K¥¡D_Í?“’òì²eòs5_`á×%ó©ºÂRcmU©×Uñ©É[“ù—µrÒÀ'+ø‚b½®ì5ÞøŸSœÇçfoÈÊæ7e¥çfd?‘ü?}}Ÿ b~…ÑôReUuÍæÂ¢,A¤D&ñ‘Mä¹Ä+Ä“ÄKÄâY"•ˆ“UJ¢…¸C6’·£v*ÔŠbÅ%£Ü«œwY•Çã¾#ÿõ!D)FlÔ3P4¡eRíB‘J³uŒqÐH…šnâè ^.|ų˜k8zß<3uñ@ËQŶÖ4ÖLõ»N#QŽqÔo§~›C1ÏÎ_ûãt׿,¶þè»rWz «OZ)ƒa„ÒzØ­É_b“ÉãX}û) ¼}ÔlZ—ÙÓM;Œ¯æ×£¨ðê±Êñ¶óè4zËuV?r|l8$ß}¢²_?´mFeô}‘x›Ï ð™oDlö©ïM€7¬e’$3”i@½òîÒôí» ìÅ|c¾WømùÿU˜Nto™&ýå̧°„Ksh°*-ù…’¢žß•³ ~Ô‰¶SÈ‹úÆFi&ºÃÉ‚Ru–mÇr!² Q.X@‘)½B@½¯eâái¡f¸ôˆá×»×ê›X*&€éï;²ö ¡Áˆzæ•õhœƒÕÔÝSû“Çãh󰨦Ù\ÕÛt¸Ûïy#R³daà” ÷„¯z`Ä4µ#Zf |ñ2 6t—é=º®œî ^t™½çf¾î|¼ÔÅ:[ÝŽvD@í=()&Þçp¶ØŽ×Ù6Ûþ¦6̓¥»œ{°¢03sÅW{-Ü•¿­Ïr¨Ñ_ƒJh]Uîò•eW?µ°L”· 9­ ŒÒêpÔrx)eq::ÝNg—›e¬ƒo1½i>ß›x÷Ïœ’—‘ak­ú‹ ‹XŸ–ù'\’[¾`ɦ6š^ÕUù; #À‹˜‡­£·¨ìKõ+~i§ë)fê/8¨ªCX ôÅà{Óìýݳ¥˜Qr/Å\û;ÏÁ7žÿ³S©U»Ö­]Ýü‡³,|ôàä$DÎBçPè7(_4j0O¢[èødWíLVÉ×o.‘öª‚òås³‘NPãÝh’©R{2È‘‡J]´™šì~°Rh½<ÙaWå¡á9æË€ÿú´O}< ‹'ÓÂhRË@´¦ÃÑÞÜìp4ØXóóYµùˆN[s’8FOOŸ»8ö^]ŽŸ­3"½ñ¨õÇŒyío^ßôîšÄOÈ/¾“òÄu{`Š`{FásŒ¢y4RMi™b©ê¡?Ò7#üŒ¸²¹ ÂÏ#ú±¤¼ko/ÿâÖé«7·Žbòa•[LÕµ4ã)7Zë*~~²!ènñQsÉQîÐÔ†,²Ê¨@5Q/Ó0.Ô‹Ð$À%Q-#yat£àƱûå™Çó³k>Öt"Ï~–Éw[-6®5µ¢¦ å –+-—Ûúì‡í~šùí‹-g¬S8fäóÞÂèúNâ-̳ØÿCt©€ë,’ã, DÚ¸/ÂPÐpµ·ád2¡Mò Ç 4³/8²ù˜¸Œéƒ7{8œ-ýJƒ5‰•/²X}ª9§T7ÿQãe7‰Ùûÿpó(<ú‘úã·ÈFÀöÎNRQÌLEŒ<ßõ®ßF¨BGí4³h»4£é¯ëÙSµ·®¦ªwo_O¯Ÿ«¤uÝ`ìò *1ÚÃF+sŒ±v:n§ËÕÙ>r 6Öçënwuº]®Žwì|‚ø774VHendstream endobj 106 0 obj << /Filter /FlateDecode /Length 261 >> stream xœ]‘Anà E÷œ‚0E²f“l²hUµ½ÆãÈ‹`DœEoß™qÒEéáýïOwºœ/eÙt÷ÑÖü…›ž—25¼¯–Qx]вNOKÞž$g¾¥ªºÓ[ªß?5 à¼ó{ºa÷i]”+»/åuÂ{M[*WTƒ10Ì3(,Ó¿O6ìãüuˆŒ¡S =m²Œ¡“ЂˆÐ2::ƈŒD„ÐÓ —aÏÃÞƒˆÐ3&&FŠà%†ç<ƒøö =ˆ{ÆD„#a$“(F‘"%Š’*rªxáQyý:—Ã5¿ZÕùÑ–MÞBºæŠ—‚ÏU×Ê[š¤~ªƒ‡endstream endobj 107 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2112 >> stream xœe•yPgÆ{fºU–Äi‡ËØ=1êF¢¨¨IÊ0®* «!†SQ˜áœD–fxg8Ea@†Æ D#" E´‘x€%‚®WT\“5›úš4[Ùf=òGê­ê?¾>Þç}úù}Ÿ³´ÀÄËÛW¢Xâ¼Ð7<"1*$nru;SÀ~dÁÎ<þlÜSVB°²ìøˆx"AYÓQØÈçCL(lÛ뮌IŠ‹ŒØ• s^¼xéÂ…üu¥,4Iææ$ó Û£TÇ…(vÊ<¼d›”j~1Rö©R! ß%—)å²­áÛeþ~ë|ýdë}7ûoñ›ïô']ï0 ûÐÍ#.Ñ3$)Ì{ÏÂÅKœ—»`Ø'Ø\Ìû;öæ†`˜æ…YcÓ1 Fb6˜-6³ÄŠùé’Ã.—„raeˆÈJ4Gdý,ŽÄðëè¨õï§å0h f$ˆBû†à‘×S[’— R¸ç6ÌM+'ÈÖÕWþ¹l”³¥¸+jÄ7óÓåôD#.צ»Sjk%&CÒ'ÇhŽ@÷¥¶}Î )n.2ˆŠÏPH"þ©y¹?]ÏJ]7­Oq3ÄAºâ£4bÐf|¬cÅ*šW3ÖÇ«14ë.kóT8¾=’"n&ZĹRÜë?÷E¯Åè 䀑7½X/¿¼…¾kw‡l]Äì7ØÓøÿ%üG< ×ÂZ7œõ€yFXÿ.Øwyrøþ–jFÑ"ùåJîÝ#wmÉèW–”6Å4»(i²©<$“ ç&Rà×K²h΄¦'¥À ¡ Ìpêtƒ“Yj1éé¦;ÐL£%øË–§wJ W@eæ&gC ¡¨K;XSSn¦¬ÙÖôS,Ñ"@X ë²Õ6 ¾>³ø—+´#çpBTŸ]ÅöäÖ†ãPC1x¬.”à8ùB/”ä”G¡ùvAƒ.7sotLx Qšj áxÁq“¦<‰&+÷ªÒá'ä]=­ç¯4Ðh-»ÊÜNo{Þ¯',ýbFº Ž¡ÀQ!눦I÷g6#O›ª¥=ü£ýØäÚ… ×­'/îÛYG§Ê!4¾j¯©ÎXÁô¯kwå¦8}ÂI¸có‘Ù5!«ý<0Ât—wÀÐ&Öç¶þ¶pü™ £ÆÝµ¥'h¶?‘_z“ªa¸EâDÈËËÔpЉkvœ‚íÏ2æAØs‹Þ#¥Çc`Ç>Õ †.hä« &S½Î™i¶M£ìÿN-HËÏ,ûý`(,ªD¹ãÖvú‰Añ[Åu†a`øžäáÍŸáù cÐ,Å¿aÌ–|Éjù¸Ç@([9´Í.«ò¯t—”Ø\:£¯Õó-ÕºXˆ†XØ |Pñª¼² H&Ôª$ 8Þ«ÂÉ[ý”‰Ú?ˆlç‰l‚vhœÔ¾1ÎÒ¿âW{Æ8ªRUœ)öI)9*þÁzÃyÜ60@Û¤TÁW¡òé@åBdB>Òn®Ü“vP»©­C¨dHÈnE·¤0šs/b(tÔýPø€‡Bþ¹Ò+Ý8 ‹Ýš=N­ˆï„‡ÐÑÉô6þ½Äê2)ü V§mÒp^š]|=«5Hv †àÛ¿¯ê¿p¸ NBo‚qy¹/| 뉷í¶…¹ª å€u²a¢ð¥Ú²fš½Œ×^MÅÇ|-Ÿ¼KuЈ‰jÂùòUdmpDâθ ™ÀólÒ­B]Q^!UæÒcšƒqI±;]®;"!½zHúÝ(ÀôÌÜ[óãHè˜$­#hÝHòˆ-¹<F°Ù;=þ«óîUÊtÊŒ£"ôAK7EX34§£'õ¦†C(MBZb¥¦¡¾ª’é ¿°Œ‡ÚŽ“r1\#²ò~@‘kàÙ dC¯ä³í¨ û&boxAtOFmFCúyø¸ÛüêÉEFYI”Ã×LX«jY÷J¤,-©3Sû¦QS-·*­¦õÞ‡¢½¡¥ÒÊê¹ÂPT˜o0XýÃþ"*9endstream endobj 108 0 obj << /Filter /FlateDecode /Length 606 >> stream xœ]”=nÛ@„{‚7É}?1`lã4.I.@‘+C…)‚–‹Ü>3#;EŠ·ÀH$ø}ó€=>=}^/·îøc¿Î¿Ú­;_Öeoo×÷}nÝ©½\ÖÃ0vËe¾}$óë´ŽOߦí÷Ÿ­ux ïùûôÚŽ?‡Òë§áþÒ|]ÚÛ6ÍmŸÖ—vxìûúx>×C[—ÿþÊñþÆéüñè€G9c?Ìq¨ÄqÌzŸ~x`üR5}ñ¡jõïT5ˆã©jOŒsÕ òCãR5ˆúP«ÄÆx®Dh<rú'"9ˆãX5ˆ#c©ÄÂhUƒhŒ^5ˆÎUƒŒpå &#\‹| } \‹| } \‹| } \‹| } lŠŒ lŠŒ ø&£‚ߤ`T0à›Œ |“‚QÁ€oR0*ðM F¯‰ÙÈlà51™ 0mÁ¸ÃL[0nÁÀkb62xMÌFfÇ\[pnÁÁëbv2;x]ÌNf¯‹ÙÉìàu1;™¼.f'³£rWíÎÚ¼.f'³Á…áÄÔª.X]!„Ä „0‚„F#€ÂbBAŒB#ˆh1Ôd°ÉQˆ*HØ|hûÁí6Ú~pûŽC={tê9Øs ãPÏÁžr!Á `¢ãTÏÉž®)ߤoÂ5å›ôM¸¦|“¾ ×”oÒ7ášòMú&\S¾Iß„kÊ7é›pMù&}®)ߤoÂ5å‹“7ËçÂK†×ÕçíÔÍïûÞÖ›î4ÝY¼ª.kûwím×ou˜Ã_åä:eendstream endobj 109 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 7345 >> stream xœ¥YX×¾Ÿuagìʸ²¨wcoXbIì½¢ v©R”ÞA–²°»vé½.Ýì½Ä5&±DÔØrKbbÎÃ}÷4¹7Þ¼÷½÷íç~ãÌœóo¿rVB™t£$‰ÙÊU6¾ÞN>VÇÙ¸º{9ˆW‡ ƒ%ÂnÂߤ.Øð›º-ÖzI¡—Éñ!ÃÌ„ ýQA_´¶%•H6xø/ðõ Øáîd9iâÄÉãÆ‘ï–Îá–óÇ[.wrñô ôÜaéä³ÝrùøUã-Wû†’‹;,GúúX:»z8y¹YúºY®sÝhig»ÈÆÖr‰µÝÛQãÿ´¯·(ŠZ6Ïg¾ï¦~ ý, Z¼,$Ô)Ìye¸Ëª]ÛW»Z»­q÷°Ùa»s§×zï £F2vÜx‡ ­&Mž2µÿ‡Ó¦Ï˜ùш~³GΡ¨÷(kê}j 5“F­¥> l¨á”-5‚ZGÙQ£¨õÔhjµ‘šOm¢Pã¨ÍÔBj<µ…ZDM S©%”µ”ZFM¦–SS¨ÔTj%õ!µŠšF­¦¦S=¨žT/Ê›êMõ¡úRs©~TÊŒb©”œH…R攂² Qƒ©!Cí ”TwÊ’ZN*C™PáÔkIœäq7Ïn¥ÞÒV“U&L?4m–¹ÊŽÐé£L&¦»U÷s= ç€žÁ½zöòêmÚÛ¡÷ó>^}¾î;¦of¿>ýþÙ?Êl¶Y>»ž=1`ꀛr¹a 5°ÞÜßü3ÅfEÅB‹X‹<‹£Ÿê>(nPËàEƒo ±ò¿Ep2Λ{­LQ^²fécùb謡ùïEµ}ÚbG›xa[¨¤Íi N[Cdšª{µ™*r´iuB$viÿ^¾Ñe·Žñ¢2 ZcÊÓ›Ê+ I™IzåadnŠ@v KJÔ«!ÑÂÛü8/ºÞp öƒ  9–!tË´Ï?»1PÀ ¦¼Êh†º]E®WÍÙj¡f Oo€Ðía- €÷ª,ØY¼æÃVGßUÌ/4{U™zÑ×Òã7+q m¯‚¥ddj@&↖ªà­¤Ù꟯Ÿ½r9ËΆÑ¸K\ûœYµQ#o†”­èü³ù/ÍÙCmJ´BßÎø K³Ÿ]½_2ßN¸‹ríݼÊd7õ*we{í®UÍæ½„!26Y<~ôw%î‡îÉWlž†¥þédµú´#ê'co>«ûp½² ·Ên˜1ŒÃýe[µiµJTÖЬɋæñK•}ª\˜h”Tµ¢=­RÁ픣#^ãÞ¸ÿh,Áý±üç1¨;êýãsÄrÓÓåàvÁÁö>›ÀJü„‹Ppºì`åá#%ûá ®p¬p„µàÊt¸MÂKнÒ¶6K9O{i]t~€iƒÂ‹nÊ U©£ÕJ<—àeèh|&è!Å¢¤<ùÇÓîšù°ð@ro!ý9¤«òý‘þ^7¼I…¬Þp,ßס^ÃðAôlMf£ÙÑÈ}Öpñ“ä° Y¿> æÛÆñ’³¯¿=Ò¶q(Rž iQ*PÇè¸8ü¾å ,f5Þ¸@'ц½‘äÑD<¼X©M.0ù`(Q¢ºÒT‰‰ÇmšçV¿ñø°ÀÖx*žŒ± ú[¡ÕhÚs¤DŒ²³Óðz5 |d¹Ùë«(¿Õœí'"/9bG¿À&³œ‚C¹š}†‡‰½u=Mí l÷xÛ5&dú{o}LgÐ)Ív_ƒzþüÉ•ÓâÞ‹¦Ísq-nòã"K ŠH³NT«>1øÆÅÉØTÜ ~Hu•‚{pì%Šz)mۀɑ Œ¬ðœw÷Y7úqh$Z£1°4ÌÚ}s¨ŸÍÚáÀ ïì'aÝÑr/e—àjð‰…ÖdL…Y Y°ï…7¡.—ìmEùW¥B^/ï E8L»NŒªr¾üÉ óÞh<÷61ךT•xÉ2`ê…îÈÁ3Ü780*ÒÓo+0óW?B4êy­õË;ÍSÖ‹ñU‹3.ðx49äÚ\ŽÆ”Ê¥m–(K Àãƒæã¹ ,ºF¡ø1ý,ËóCe9* MUyæ¬P|×ÉehT®ËÇJ¦\æ‹‚MÛ/¼ÍOÉÛü|)ëóOI"ÿM^·¼~`ÎZ ”Ð_^ãUí8ß}©c$‡º‰È¡|rÈ ûáì×Xð!ôº ˜"REƒ.+ V›˜¨ú§+° ªQç@2€EE#²À¸$yë-¼èˬÎñBÃ0R¤Fêr€Ü™‘œ‰ÌÑ-EFiÁ–$¦“È’>—¶Í“¶Ùv,L †ñâ¢õ:c8ø€´ Qq†b$ªIÌÖ‰UÙÅdÍ÷5ÞàÓ¹däk3£RÔYÞiaSq‚b,*NÈ&d–üæ^²¿ñÊèã­ÉöDføWEJ¤!NÜ›>5%÷GT¯ø 7$«ÄK9`÷Û}£(<ÎçÔ‘ý¶6îâQþã£F³š›Èåê ÒÆQBè#ùÙ[zm€Zµ3ñP ‡¶ÒÐ î Û7åofÆâ­Ë¼‹wUTWd'ÔnKRVÖ˪æØ¹í“”nôFÍ"ÍJï¹;6€êf> ¸Ürxÿ‘"Žï’\étdpÉÅÜo”ø£r6iì‚ö›ëŽŸinE3R¹Îªß¼À›e Iæ¬FÈ!mÆ®±ƒp}P5„æ)öìÛw¬¬‚¯oÊ;’Äð´¿Ö[çÞ°^•DäkY¢MŠ1Q êU³³~ŒU@ªäåe'1lI¥ ­I~b¦¯A’îˆõ ,WlµíV›-k×hC€¼©BÏ'UÀ÷Yn°!>'o«k/~ñõEº*'‚26v·ŸŽa5{)C%4êöh-ÞŒÌÅfô‰¹5_ÖŠô„¨tõ¨X6Ëqkx‡®Ñ<Ý17íß•Óõ—ò‚š7} o9InZkû/×vÀ°nöà^Ø@¸Ù… r¦¡’²òÏžI/ƒCPï_æZál°g"—LI*CC…I]ÐŽêI‰?nw˜êƒH"É’ŠÊØ‰ä»‡Þ ¹ßsµ¼Œ©qŸ΃·Ã¬.$aoü;›ʺhÙÉXxŒ‚oVthÏ?¯ËßE¤pŒN›=ëXŠŒ‰™ÚdÒÌ PôoÃv””ëF·Kk‚×ù.^ìÍ óZÈ'§!Ÿ©Ë Žò¶ov?~¹éܹ2-æT\>‘”/ê3É1¥kŸ6tH… O¥ÂdÔSž2ðj-ç3~y´0ë'@SÑ´»Í§2.ëÜë”ε7D1þ…¡UÅ{>ŸÓ8÷Ÿ€)Üx11hP ê•IúTšÁ¿,Ë*”W…b¾‘þ&}hãY2]|8öm¿ ÀÞ¹X£†Dbg½¥T í[‡‰ôÝÝ€º‹âl©T õI4Rÿ£[JT é_‹,0¤'g!][oERûuÙ°n0|Þ¡W?ƒöÄÈ¡\@D¸Ð]*|€¬I¥cqÌ>ì!C¼Ð+#«Grâ œÃ7d*<Õ´\–úSQêF˜N&Ã5í½cU …‹È4RÔ*ûÎòè éj‘ Hj‹ZÌYW¡ì ?Ólþ{Ñ>õŽvâÒïÂrÌ>‰dWí­)W.#C…ä&ZÕ.†mÜâmì8˜4wEà>ÿ&Í9h‚ý…êC%ü¾ÚÓPÍ»yû¬]dWáðCª„U„/;¬î®ÁÝEH|[ý”íshüZÈÍÖ%…‘|Ïöª–åA±.OWªIÒAÓ^ôò^@§$$é’ÕÂØögŠŒè$]0¹V¤ŽÑ•pä÷¶Á¼KÐü»ÛÒÕaqú„X­:NËy ³‚Ø.{‚¼B Ô3¨Ff4@É »gdî˜ ÃÈ÷ _FÝÙç’)—! 9Ž‘¥¢Q÷Ê÷ó*ÞN‡´û*¸¢mz¹è5^IÛ\ÑS9rÄcˆ9XŽ—àqx vÆNh<žˆ£åh šŒì¹a¹r\ˆÿ6mÂ<è!ÊEÙhøç­ß¢÷â qûV]ŽM¹—n” “–§ßJQ[[_yƒ[íúE®Êaúc¯Ûøæ_(˯ŒÇÝC?¨ÇÏ'nÕEžØXÅ­¯Z « ¨9B|’gr5D<”7ú6iŠ€ùîêÕ›  ¥Êú½õ)…·ÍUi`ЩTÍìʉÎÏ,J+åðBLÉÁOç¹; .:Èט)ð²´2©&¯\É^Qe§—Víü-ŒR¢ní=åv 7¾øÄ©Ãû¸Od LU¾=…°èšÍ7*íÆ_DLëwF‡~”½±‹4Tð"þóAÄý!T°‘”ú”ì,5:µù=”§BqƱñ:N½Ð#<6C܉Èï¢î(¯l®]Wô¬ìÖE¸Åü€e÷ðö‡n`}ÞíËßôC*¢é|"Oêvìs/X ËÁ¥É•aO¸7Qï|«àn• “å‹gâ‘ál”B¶Ñ©¯†b`#“Dü(ìå:G«I^›Ýÿu&A¶r$yËS•‚”fÏaK1GŸf¨ ²߯ßÍPuÚ½: V±NøQ^Tá½#Ô7À¯ÔÏÞâªr®³6Á2âéö©\’ÔY]Fmëp:ñ:]t<çaã]íÜ4‰@›tÚä¡ÓOÍ¿å§ÌJ<}mWeüžø*·ÿ̰“Y¸iÁ4Ÿ9)ÇÖskOk®èêu™q yãw¶vø´$}V`H®=Åï¸âþˆ°@÷;ÏQ7e'T‚Ï(v$Æåé‰_—‘Ô|Ü6ÉÇŠ)¹™!¶%m;uEBäøsyÉŹPÉT„ûú†‡úo8ë{î«KWžp쀶÷LÞ•""žIþW‡ õ¼¤¾¥?BéÄkÏ6ÊÃDŠda8˜ÐT.ššW‹Æ@!T@¦¶$TÄNÙ‘ïq.^²&ÃOp˜|^Aéú=ÈÝ+ò1)vnar–¾’ˆ òxÞÎ\<•y#8E$ô§æuËW-$ºV!Þ ‚ÁõfÑ…NŸJôVòõ ™é—O4ëKDá飉_p‡UúHQxé2U¡‘Ñqñx(h¶îÝs%1 noçê}åÌ͡Ͷn¶+1Œë“ÕP­«&b²-6˜.ñG:ÍáŒG¯ø·t×Cƒ{¾¥;ü’ÆïþhìVÜ£ÙpBÿÿÁö¦ñPÄ`òVD?þÉ 8C1dÀ~Ý káPËuÌáYO¤$- HLKçyˉ‡ïŒMJð -VÒö!1_m[¤m>oêüËDAxRWâOTPœF­Uãí! l+èÕ¹ö«ú”wœÕ-&{Ƭxû§¢"tE»ÛS¤…¥hr ô))¹(P¸¯Èm¨¬þ\´_Òyvÿv Û€ÇÚNÿ%îrüv^–ýNe¿ù_žÊ{7þ/ÓDzÒ…Ïù¾ž7+ü-ÐœÝø›º#SÞZ/7Ú’Ð?Óï$>U­‰#™Ýî¬ÀS„(]²6•˜Æ=ç¡¢#SKÄLõog§ŸƒÈv7.R`eû</ÉB…RTM¬Çy\¸–î‘ג¯¥hÝ)yu`™O` OY`uuYYµx†¹ ‰ø-¯øG¬?-ª·Î¾:+˜Kë6yVl†*21&FÃá¿ÿ×ü„(H iQeÄfå&gf8ô÷ßæ§Š$ÉÃÁÆ6…QÒØŠÒ[¥‚#º!‡; w<¾ÜöÃŒ|'°†ùþÎã='Ì‚`n²UÓœ3o„ƒÓðuÉÁïk®¦Ü‚ÛÌôl9Ë%ª»ÇÚxÛÃvXSþƒê<…Oà ´¤Ÿ.B=¿Ê(‡Zh /™i s`¥Ø´¤¨ ü2~_J…iyOÚJ“Õ ÎÓe âV­˜ žâÉB1yÏÉ ¦=Ìc´ç)êÝoa?ù|Ûq|EÞtóÙM´ø—y³ã¿<ÿž˜³¿ vh>qs Þñ1»ãã–vbðRÙëWh"â.œ†—Hfu÷Á¦ó&L²=†‚ºì¦Šð 8-è4\é§§ÎóäÀÌJöSøhÓÇëVáux§B%Z½@F ebŸ;¬õøñR¹Jb&öyš#‡»+o½_r·òü5’¡»“ÏŽ>ÇzÎNcX5_l¬>¾vsü±–œz`šÎ[Ek×ú;(½·ìÐèâtÚxˆÓÅë †Q¥AwPv·aÉ(ž‘¿[†$¨Ï“'?qYEƒx!˜¤õÔuñg¥r~„°…$15"V#þt‚/´ï0õBESDû0 eÀI" ›áT‡ è²,ßÒ y9ÖÈFènÚ+êö|L+ÚdDæ­‹žûV… ¡fÇ_„<úð’?2gô#9ß&G=g¼ÄÔÇwm Y¦D]\_3õ½ö$'U“¯d»S@TU‚&4vsèR"ö»Q.°-mkIœ!Q<¦f÷Œ¸%>F‡C\nšÞšÌeå7œþNBù¶ôð|7ývâ=À:Ð)p»›ÿ6ÂG6§v}°sçê ]ÖàÚ‚ò²²]å;#=â·)ÙÅÔ«£‘ b~ú±$G^Â}2²+h.™ZgáüBà!Ç7c[œ›™J„¤^ŸD¶úÈDÏø+W)£;ñWœà¬Ö¯Q­øy¬#“Â{¥­Oö—›5?Fóû>6gÛIÏ8Ê;é,]â¶qK(WF½Þ¯þDY³z‡‘Ûíö^e»ù{2/8ŽàÁXŽýq1b~§dÏ é÷G ¥U’¶À¦]îÞÖÛˆ´\ ÞÔyáGà2·j^>Î? «x®Ð 6Âfqp§>¸YCze!iÛð6…'ÊpÐæ$1²Ø™ˆHC~Æåœì´Ô[C¤®‹ ›àIVxðN¬„,bÀþða8”É áŒáLúéäÒÜ/¡ÁÈF‘!žÀ–0·õ-—4/9Ž4ÇÅùøXõªC®Ía%™+öÑpì$´0O'›8bæ¼ñázûæ­\VtC@ù®µ>Sma$3ô§¥¿ Óï[墟ä`³}‹µîwG±mOâ^(`.~Ú|ýÆ• ¸’v¹|ÞÜ 3¦.¸Ôz¾æÊý#ê;«*ìˆ7¬îÀºªú§÷J/—ÃSdU¾OÌÉcÔäÿå)²©»rdÄôç“Öm·wäœíƒœ`.ƒû?…L.65Ÿ/å=¨òY+æÅÇýÞ¨_ÜAL׫…)ü¶òÿ1)âÀq¯‘]¨ä‹Î‘['ØÊ+vUº‡Fƨ՜N+Ò6ÚÜäš´/._Rf‹}c`Ò’TÓçàÖeöê ++Ä‘û¿<Ö©IZ$m[.ª®ì¸UJû ”«ˆJÓŠöN«ŠMQçÆ+#Nj'ÿ"ãÔÛÁ™=¤åp¹=+%=…è¨Ñr/ˆ”»‡ãåÄîèwàþÈÌ­4Ðü}h>ê‹úçtm+Ñ Ž±Z‚Ù5ÜFÜ-K‰žž•…{ŸÁ¦pßË3IM6¤‰&ò&1w¯ AGžlyò¹ÑììÓ’×›_Û<õh5gÇQÂdá3ùy—›x¦V-YαCæî(,`8äD4ê|^3™S ,Ù®dU°&"<<|Ù‚à °š±'€ªÎÎŒB®Ždöìz]ÃÆÎ­,.©o„-Ûsß!8‚‚ä“•j”ñ=®öäz˜¬óíÕݘ¤+Ÿ¦×.öêUÞdHÕ§ †”Ôä^½)ê¿T)‘eendstream endobj 110 0 obj << /Filter /FlateDecode /Length 172 >> stream xœ]=à …wNÁ €°F,é’¡UÕöĘˆ¡€zûò“tèð,}¶Ÿõ̦ù2{—)»§OÌÔ:onaO€tÁÕy"jäƒZ…·Ž„MW_Ÿˆ´, í|Óod!{Ktƒ[Ô€IûÉȹ­U½ùÉnXì±)…jâ¼Ô‚ƒj*8T”ª© l×N_=\#ž‰(ì)¡Ïí–³Æs¯Æ«‹‘/íNY3endstream endobj 111 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 596 >> stream xœcd`ab`ddôñ ÊÏMÌ3× JM/ÍI, ªüfü!ÃôC–¹»üÇ´Ÿ:¬Ý<ÌÝ<,{ìú!ø=ÿ»3#cxz¾s~AeQfzF‰‚‘±®.´THªTpÒSðJLÎÎ//ÎÎTHÌKQðÒóÕSðË/ f*häç)$¥f$æ¤)ä§)„¤F(„»+¸ù‡kê¡; Æg```642f`bf{…ÁacØ÷5|ÿ™, º×ÿX²¾{ýòr¡ï“îˆ ïø‘+¶>•]½{ÆùûØ—uöäËyût%usŸHg_Ü}¶ûÐrŽ?“سºëÔåRÓÙ¾»õ³BMzðýÍ×ëO}}ôuçæ½ß½D3Ù:Jê›[íºk»9~û°}y±nùñ]W]8ÙýŠã;¯âÕß"¿ÌMô#¶µM]¼bÎú¹-ëÂåV]:¿pW7Çûý¶V&¾nÙéò¿[756uwvçKþ0`ƒØW¾úâwæïŠË¿³:´‚ñÁ§gß|cþ1í»£h÷M™}Ù¸ñZ÷ Ž[Ç~3ÿf6 µÎ\X±rÕüEËW”/Èé•[·ý´ Ý;N•š$ÖÆæÈg¥æwFvuvv·uqt7v6ÔNéž#íæáP…ßÎiÉÆÓŽ%Êï궦{ÇêâE9ùùUIºŸý¾ó~—ýâ½_ùüγ¾çM2Ÿm=×-n9.–|Î¥½½½=}½“z'­^Áó|bï¦þžþIý“û'ñð207­ÿendstream endobj 112 0 obj << /Filter /FlateDecode /Length 161 >> stream xœ]O1ƒ0 Üó ÿ . ˆ…. ­ª¶Žƒ2àD! ý}I€ÎÒùîä³ì‡ëÀ.|D/J`›H‹_#Œ49µã0¬Lœu²¿éðþ‚Í@vçw=“|Ö—KYÕ{½¡%h¤¨y"ÑVU×ZÛ bó'ÑΦé T¥TñŸJŽæçMÀ5FâTš–&¹€cú=|È)Ø ¾1ŒS;endstream endobj 113 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 279 >> stream xœcd`ab`ddòñ ÊÏMÌ34Ð JM/ÍI,‰ªüfü!ÃôC–¹»ûÇÊܬÝ<ÌÝ<,{¿7 }üÄÿÝ_€™‘1<£Ð9¿ ²(3=£DÁÈÀÀXWHZ*$U*8é)x%&gç—gg*$æ¥(xéùê)øå—34òó’R3sÒòÓBR#Bƒ]ƒ‚܃üC‚5õ0\````ì``(a`bddÑü¾†ï?3çq†Gß·0~ïü¾…ùÇÊïÕ¢·¼ÎØØxyÙØœñºuëÌ™[r|¥ 8Ïùž7mâB¶U\¸å¸XBòy8öôöôööLêíí;ÁódKßÄÞ‰}}}&öóð20®fTendstream endobj 114 0 obj << /Filter /FlateDecode /Length 478 >> stream xœ]“±nã@C{}…þÀ’µ3“Æ6I“"‡ w? ¯VŠÈ‚âùû#çŠ+¸miÉ7žŸÖåÚ^öKù]¯í¼¬Ó^?.Ÿ{©í¹¾-kÓÛi)×›ÓYÞÇ­9<<ÛŸ¯­¶x Îßþ×ø^¯ý`ú©ÿ~©\¦ú±¥îãúV›S×åÓ<禮ÓÙíó|{ô8d©ëpÂÞe öŽö>K°÷´5K°v@ Õu8aû,Áö´Ç,ÁiS–`í˜%Ø‘¶d ¶Ð"dPÐÀ „[“nN¼9¡oRçÄÎ ·&Ýœxs²,Á-ê'!$"¤)K°-B’‚’‚æ,Áb|'œ Ðh 1‰ L5Œ5 L5Œ5 L5Œ5̳ë´˜±iÎÆ92M¹Æ\«‹×ÉëÈtå:s™®\g®#Ó•ëÌudºr¹ŽLW®3×#K°A‹ ®ÎŽ9¹f圕Ÿ³{¦Å÷q}#ç7rLÑ5Iç$StMÒ9I‹ÈI˜bh’ÁIàB€AÀ\0€ p!À `. À…ƒ€¸`0 àB€8¹?{ÀMáÎý¬X[>÷½®W-¦û¶¬õßîn—oµPó¥iô£endstream endobj 115 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 4635 >> stream xœXy\S×¶>rrÄáôHÐÞs¨U´Z)ujµjÁ Ø ¢â€ È Sf62hd2£ëT•ª-­;E‹¶}­½×Šuº­í­}ëÜ»ùãí$@è­íï!&ìµ×^ß·¾µö‘PÖc(‰Dbçåí­ˆV¼ì:wCHh|dÒ8é,N•ˆÏŽÿf•‹“Äcÿö”¢ñVh¼õ{ÏÊwÛÃC;È´ŸI”•D²)T±R±/Iç4ÏÕuþܹäu±Sp’Ó 'Ï ]ŠÄ؈p§ èÝNž.Þ.N>ŠD2î4Kí¹ÇI±ÇÉ/d³ÓFßÕ|ÖnX¿ñMß\þÛ­á1EQóÝ£7+Vî[³Z NÚå½Û'dýž7CÃ6„ûúElŒôzÁ%Ðõåy ž_²tù,ŠšF­§SoRÓ©·¨ÔÊ™ò¥ü¨”?5›ÚDm¦VP[¨•TµŠr¡VS/Qk(Wj-õ2µŽò æSžÔj!åE-¢¼©W(ʆ²¥Ü(;Êžb)޲¦¦R£j,µ€• Ó(QR+ùnÌú1ŸY9[i­'[gJí¥û¤wè¹´Væ";Ãl`Þ8ö¤ÂæÑ¸ qŒ~|Áø‡îLÜjKÛ†N²›9iÐ.Ð£ýûìXv6»ž­b|&ü™¯¸îêdvòÖÉpt¢Ø€ô¿êÅç%-°þ¬·³Û9T‘s8½$»(¥"ŸõÂ’Ø`ĸ.ü fà ßÿ6påƒíK*…¢ä)íˆéBºzY5jŠJÊÙŸ•Ãçç¢ü4åÞÖíõ›ƒ9âÅì‰ßò“¹=p×è1Vêá%=|nõŒœ¬r1Õè»í¼ŸÛº#)2œgj˯ ùžƒ­Šg0}2è´¦1 ùçC`…5“ç¬ö\½,ìÎy¾_ÆÚ_þèÒÕ­XÀ£*¹e€ZrÞ$xŸƒ a6väqð°õ*¡aPoóàpœ`!1ŒÇ¾…m±?GT?¢AÚKdFë†)–Äö1ìÇSøñ}º5„‡¡ä~_[póë/bOz0Æ|~¶»Q'àˆ™‰6GPµ¯ÑUMÆ\˜'Næ6,^ìîyíî½k†on¾»ÜÃ| ˆ×C )- ï¶‘þG,8É ÈÌ[%$òkp=ăƒ,¥tC uüý¡ÏR‚yì4{òýiŠ?fÄ’Dª#ûp8?8ÖÂÑöAu”%¢@³cŽÔv £òæÀÊ€þáÀºŠ)â8®>ýÔ«›ßHòòãÉØ¯Lñzädßâ¾%–TZ²[ÍNpùLà ck›ÓP_Ýbaùz¨Õ[‰`Ç¡_1§‹(Y[..^[ŽÞaš;;~WSÄ&HÁÄÎØ\uV>¨ D*ù×⇾ô$ùžZèÉü& ù3{öìuÝæ[öµ’Ï©Í-‹AŒ1zÂlY R¶k« »ËùžÐKù­„\ó:¿;?äÎçz‰ñäóÐÁž«Eº°½ É|÷†ýqˆYŽ.6  WeF4ð«·èl/0KŽ1™ïà‚˜#ºš¶þçÑì¶?;0ìA8öcÍø‹õP­·ÿ°wgï7½ð,ys`Åb~ŠàEµ¬ÓHXv¡[Þ—F¹jMÌ:¼Cžª‰ÎŽ&ɱÿÜ|(Ï/ÝD‰Ôˆñ5EJ`ÛHvtòƒjY„d¶Ä þ–ù4ìgfã1…²²íc¿â´Cq!%Y¥™åYå¨U:TYTú(-¿ÄÆÐFæžgÿ­Qñð3Ê+¡ÇhL³( XúœGïm ®ÞIô]2‡TV-“îÎþ­÷TK[+Ïú„"õ ~Hï° ¼Â±]¾;^]¾jýõG×>¹öq¯Ÿ¥9¸ß ½Vb–ø•™%ÏYPoTÐØKÌK?šZ´9®µð§iP­´Œ~³°F)* iðÌ««.hFŽíåEDZ´If91ºòåxFoÏîw1 )3O•ÅÇoÞ¨Q 7äö^Êm.к:Ô ô?âÉxÜœ™ØV`»ñÄŸù¹»Mü*˜Æá:º²ÿò×ÐEÔ§ÔNgFz¼^´d ƒ88•Њ½±wÂ>|ŸÒíoðjhSü-‡¼ÑªŒ¾1 óÐ|¤Ô¥¿—~}>@}èó²³—;Êo¡›¨KSåW¾xæÃ k Ø‘âeøç÷V¢‡ø>wå5”òÚòí xÿ™–Z÷3îsU7ŽXê‹3ôÁÄQ©6ñýõg¨ÏÕîîªo¬nêz¼ôgÒ|r”8Ñ»ï~Ëx÷gM p–=¢À‹ôÀôß½OdÃçš9üs÷ýèôS—tÜ?üà ¼~%êŠ}ÛG*ì3Ä|”kxë#v%–Šr®QÕ±1#  |;ÏÚPe)auÛ§Î]å¶hgÍÞ*•ÀJ¨ŒM|ÔV©Ô¦I˜ä¾­Í˜²ð‰<Ï<éûϺ;¡î¤÷6·¤ jx1«éL”†2¤¢l”^ɰÓ22* ÐT| ²øpQþñ¸ÄÜëÿb@`繡vM[r«®üHqEa龯¬Ãˆ©i,oð:lÅm Ü´1èÜ%žý¤äÃ3g.¾j›?Æ\ ÛΙ3ÝNŸ©ÕvvÖóMÕZÔ˜¢…Crñù° û‘À>ýŽ>OÑeõ_\²þW,ØküµÿÞ† C=©˜źû\'¹„>*ª€ÏÌß“¬@g/]E‡4|z[œN]ưO>í®ÓŸœrûõ[؆ǫG'(É‘Œ•†°÷kÒ€µ£NÃþ§!ÅMAž(ª.¢&ª5åb®ùô8é¸á_\ÀŽ·\ù•°÷ š¸wæÍ­#åôÆc{¼‚xIªÊP6Ü‘ái£˜-Å}xÂ(ž7wH¬+ž&6p­ñ E|¼BÑßÚÚÐÐ:r³¿ø‰§áœCÈ'l¤ K8ôqè©ôŠàû.«]R+*éBç˜ =篃MÕÜÈR¾(¾,»~øB&7·¼9ÉQ™|pׯòD­Ü–.ZwÖã»Xdû¤lUköw‰ ¦lÚùæRE@qË.>¨%÷TAmAMAmÄP÷‹å¦ö·¡´²SËŸˆÒ§|Lê-óÅK·ø™áùg%æˆÙÜðÕa*½73s¯°B6r©¸ŽƒêM£n6îD6‘S>ê2"$ãˆ,­¾½¾¦în(Б4~üÁdÒ®Q}©‹în/Â/Já‰ÙO‹÷ ªF];\,N|KsÆá—Ì"L¬±ig (Dnn ƒœ´FüÚX‚HoÌRü€vòØ´Éßóâÿòð ]F¾ÚÑnòìw«~¢±í÷/=~üý=°åá§vÙSzïÐö¡¶dòp#uÍ’]“I×Í[jfæ7¢Ro_ ^øyðúð2öyEÃÞÎ0»¡C]Âr|9Í_õzÖNc‡Ó•[£éž-:ÊÙ]º!ŸÙ7gÐìý¡õo6 Ö©FmȱÕ!m7ÈÅZùÛºaÏÍWÀK½0ÎøëÀöˆ¦#”‡Y=z^TpÚnŸzLQ»E (ul<Ã~ÛžŸˆ’¦FÐ#ûà>YhÂ<Ü1cKŒ°VÆö œuÀ[~ŽÁ>šÌì¤vŒlBÕ<[÷h–õHÒ‹#ǹÑÛG°LØj>Ñ2xBÍ:Î+èX”S–ˆUø?rMÊG‰Ì^mV%˜ò¥ûë, î Ô×COSVtpXIƒ~1>YÔ%À+×Àù,J”% 0£æAׂ³ô¼ .ã„BW‚¬¤;öp*rŒD¹Ñé©x‚|úSg—[ÿŒNÂÎÒËÄ;t ¶E91I•ÉºŽ¢¶ò|5L”þëOæ¿43/ÎhjºÉ13 ÁÃBEÑú\Ä—­ŸÆO1ìÕ¥Ê8ˆO€‡ÈKÙÁŠC¨Î±QUž¢É+Шy| ïÒd§e"•#"+gÁm"¯Ô»iu]y£`2d̦ŠÌ²ýñm‘«µy…Ĥ¨ÒãTd6K€Ø“ÿY&KquéÕÚ¢Bm%·`—¶Ô´§13Ý o=6r¨*«8©OúûvpD`¦üP]v°U1‡rêc¢ñN,ÇZ<îìË][øK+nú’+PsIý!abF™¸² –•—ÑzÃ8ÞÆÚO1~ìñêÒBãOI}qéøñ]ºÅ ë ¿ôðø õ¼±ïeendstream endobj 116 0 obj << /Filter /FlateDecode /Length 437 >> stream xœ]“ÁnÛ0Dïú ýi›œmƒ—ô’Cƒ¢íØèYPœCþ¾3㤇†ÀØ"çí.¹{|úþ´Ì·~÷s»¿Û­ŸæeÜÚÛõ}Zi/óÒíý8·Oçux=¯ÝîñÇyýó±¶ž´éîŸÏ¯m÷kŸï?íëØÞÖóжóòÒºSJõ4MµkËøß_ùxßq™>?=|«VJ\iªEû ;T‹v«E;ʶjÑ6Úc®VJ\i§jÑå”÷ÕJ‰+í¡Z´Ùcµh²<&û¨¬£2ªE YfCfAffCfAffCfAffCfA¶FJ‰+-Š1Š0 Š1Š0 Š1Š0J©m‘jц,‰Š©Š¨ÀZáz¡zÁ8 Cà ( ƒ  0‚‚À8 Ç ˜ ç¹—jÑ^dÙ¸9PsÀÆÀÍš6nÔp\ðÈ ‘ûîU¨WAüp ¡‚øáB%ñÃ%„Jâ‡K•œ^x‚¡ « WÄU×ôë>êÆêî]õ~xß¶¶Üü@ütïç¥ý{CëuÕ®žêþmÛ}endstream endobj 117 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 4474 >> stream xœX TSç¶>1$瀈ʹap8 ¨8ס“3NPQ°8‰2ãÀ$S²YeI‰EDR‹-Z§ûÔVm­ÞÞW­m­TokuüÓußÀ¶¶·ë½·Þ:!‹ä ÿ¿÷÷ío;2Ʀ#“Éúø®Ôm ŠžC^"'6 ¹b¥â„â‘ÒOùer^\¾­§m¥Ý,»¶þƒú?¶ß2 ÿ€ÍN!– ¼1(i°Ã`Ý`«ãËŽ~ޱޗy/þ2šþ%_¡gÀ‚“,âÆDYO§“eKJz2+õûbÁ5ôÙ™ÉÄh}ê’¹ ôºÜ˜Üˆ.Y«qè[ §±wh} „Ñ%Rz·Å¿Cÿ}NºzÙOXlU\°(cõ~t wº‰KlÞÞ})ùyY%±“ê2›¬ VIWÅéÑ«"al£OºÄâxëàÂäüÌp-¥¤):ô+]žòâxé£k äVR}æRX‘WxQÚ]¿ŸSZno‡›):Á6§ÄÖUuì|ŒPµF±]ó.7b—=#¨9¹¡©±ºµ*³rg©`.®ƒ*டÜ2K½™%SÈÔMD> ¹ÄŸ¼ÓþÖ!5¿:´ÿ:•ÕEP£&h«?#9rm°ùíÿBæè÷ûú"r[͸ª“V7–J²¥é“­áãáÇÖ'Grxš}Q¹þÙÎVTUT•ê|ã\Z+áÉ=ô bEee#¬Œ Z·>=Aèé=5œ¤Zî§ßá—H¨îûßdËEÞÃa­*H™é½‹F²8 e’«EIüõ¡@”mr}.bY1—Öˆs‹¬•v°Eh'Ãilei¾Ë`HÍ2“¶/žHÍ pÜ©KFtFçÂKúl0èõunnÊnˆá‚Ží¬¯nÝßq—°«ˆ÷BÚàX2ìÛ‰8 'E®j’ÍØ¿lpT‡ø˜®ó¬ÄÉâ&v?±62 #dZßt!™â›´Ú#"è.¯)!Þ`Ø‘“¬O4$§UÖšþÑ«ñÿÙ«ñqìvÐCl^t¾Á5œxÎÈb½õé¾´‚ô p­€‚’}¥ØÔÓÏÅ(¬l0=†côx ´lújZ´£Ie-¥ @bÎRñ‹_«ZdyË `‘l|Õ¦Foš’žS‰†Œ|8]ÏuT™O¨Y~ÎS¾áõ Õ)aCÉ @þÚâkZÕGÏ_*¨…“ðV²y“TLºê_áê³:ä=w{Û{œþUÚÜuðJo{¯eÀu¹9FÄsÖé¬u„›^j0&Òäìø$ÇÌŠ{­_—¦ ûÁµ jÕâjŒÆÃù•¦CÆÊÞR’-§ª‰þøšÙQ²5ž]ÐåÌ"ÆS^Ü Y» ¹)YÂŽ¥KÖÑ$xpèy5¾§äª-€ú¦ÌÛ:ÔAíþûWГ“¦{G¢ùqŽÅ±§žT¨'¢«Šd(M''ª[ªšß¬±ÀS(¦D_#e…éíŽ[ñl_ûÅt“÷¼!¦«÷9™%XÇõñ–6®§ÔɴЛi˜nx_cñå¯?ÿQMÜœ–À 2Q j<‹j%N„Y‹ž[5²¡§tÝnÆÍºcŽGï®|‚óžÜuæ9FlÝUuÉÍAÚà„äwdê‚CŠW%BÀk £J‚Û#Ô;“’éâikC«wqü÷i±Y¾q+‡ø½¿}ð¥{ïݾ¿¢1¦LXW· ¦B l‚l£¶0µ•ªJ‘ñ`éþÓ;ÎÃA©´Ï}òagtKj‰º±¼.¿Â”›M]w —p éðáUÕÙâ¥ÚÞÓ¾ˆ™7Þ~n|ù%xoPSᨠ_A\~Aq ;ßzõ T£Rùñ‡)ê>Ã]n¹þœÌ¿õ¨oç¹=×.Ø&ٌãµõâŸzîÿÅq/Ò0©æ 7c‹Å±3[tk@7g¾ªçï]ªŠ½y)I†Ìƒ½&*AË óÚÞ®¬³™·cÆ¡-æ›ð÷hÄ=â+XÚ'J>\‚—ÕǽðþôÞãØŸmƒæÔšMtDYLàÎŽï ?s×P3ô‡²Ô¤Yœ  0L#/ Ä[°¿gäÍò“|ÀÌç®KÛùº;Ri%Ücg¾›,¾âX–¿@^“òpé»uƒN?Gàªd·x—5âOª“G·Gn >Õz²Ù|BÒ{j–g[0° ½Ûd— ßƒörñ®WÁ7¾ˆ¬ž ?ê2º&÷&à:Í—º»¿\Oœ«…¼0T=·Bè×ë…2s é‚vmLõš^´¶GΞLd‹[ÖØ£>x$ëqÜ£ø2}MÂþ”F¬æ´ ¯›©DÝ„ž{C%ä%þâ‡üúüÑX\"”–ﯯ¿¸ánŠd'}ðä‰doB%á¹OëëÔŽ•zE’è£J¤®ðçQÊD’®hW£¬èstîŽõ>«Uâ6nÓ+,d¬xÿS–ž(šQLú=7` îÄA\bÁuíÓÌ–Š7©|î‚DH3îÉËÉK;@^Æ(tü¡¬¤´ø¸ZØúD…àß7È”ÕåîÍÉÊÑëÕd)ñTˆZ–7ü‘œüS-…e(_Ý7žt[^vpM% “\ø9…{!†ði鉴é÷ÞQ÷tGZ'€ö^ÆjKèŒ#Š}Rñ¶¼çÚï¤÷Õ?•ÞÁ,鹂ؑù98ä¢ Î|" •ƒ0ÐÐ~ÊQ]šÌêRúáô½G‡GAü˵µ‰T÷¥úTÐLÇ´4{Ô,µüÿV‹Q6ÀGÏK­©—Ä æ­/ŒÔ›úþœùëÏ<úJ¼+ä ±ñ\¿(r—°ëóE—ÁXôMXÇõÎØoýfìë(»sæÊñšøWÿ¤âû$á¸Àa˜¡,¡Gc‘I¿úHy%2}4̃Xj9زû° 7'CM^±®$‹Ä(Å·Ò¼:ΫQàE/â´÷Ø“„!í ñ¦§¿±(£õch’#aÄôžÆŒŸ¹‚y’;¤N°° ç‰A.8ßT°«÷Û*Ø—_X…Éâ.…•¦‚{½‰§£Ù™ðlO¢ ÓºäxM*@o\DF ·£FéÀe§Bjè«’©Ö YÒkÍZ2ØEjªÁ9\jì+6Aõaˆ½Ž>€‹¹>í}fÑžùí=,ŸJÓ†P|k$#á-N v/[Áûä÷G,*Ю¤­´›„¨ô”XØÁñƒBb üuó‘ÚÖs/z%A¨=çjo‘gd…á.dë ájrûß¹"ÑŒÌMÀ7Ð]v'É1³NuuÛù€MÛ·†„Õ‡u4VÌÏ ºì™³ffÑA!›Ë(K/ØÿðÄþ¸ KV†gåø>.Pu‘³ÙçÔí}ž»“nªNn=²5*8Øuâ„ùhïÜ9¥—¢ÊÞŸ›$ N…D.68Y¼PÙmñç²õ†ü˜d=ìNH·u¹B‹Çi 2IïRµ?%WF‚©‚P"àGŠßCÇtÉE;²Wù`Jª$6h£Å ½Ö¼ƒÓÑeeF#äse©¡‡„q'ì"âÔŸdŽ Üáx”·¯ Ê$gÀÏ‘"û&Ú ÛfÇËh·íˆÚǵ¡=H6~&#†‹×TèDFœ–ù.nJjln¨9.ðSæ@E¦9¨èäñ ¦à¾ÉÛ¼& 5%y§šgÒ&O-C"Y~“n*…¢¡¼lN5ì«Vfáþ…«·OUï?ÕW92Êš­â3™¶ÈæÍ›##7onŽlkknnRËD¿bÜt¨¤Li±CYÁÎ&@goÛ˜gÌË3šŒE…¥·ííÛóß.Ûg*.Ì3çÛ`˜ÿºÑuendstream endobj 118 0 obj << /Filter /FlateDecode /Length 393 >> stream xœ]’ÁnÂ0DïùŠü¼k/ôÒC«ªíÇ©r D)=ôï;3”zKbÍójWÇLJÇi¼¶«—åRÞêµÆ©_êçåk)µ=ÕqjÖ›¶Ëõ—t–s77«ãS7¿ϵÅu¸ñsw®«×uÜë§õíR¹ôõsîJ]ºé£6‡òarS§þß_Ût»q~?Ýl³Nà.+ÀqŸàžX²,Ä!+@”¶]VBÀÙâ:+!à¢$ª(²(Ƭ#Ѳ4":£z#{cŸ`O¬YV"¢4"5 gBÀ Üd¸!BÁ¤aÔ0(˜4Œ“†QÃNYžˆP0i5 ¦^c¯ã­®÷:ßë(q9‹%®"g‘£ÄUä,rÏ Ð‰xºëùÎç;Fî»sì—†SÃ1 ×4œÓp¹¬œV “HšFâ4&‘4Äi$&I&J&&I&J&&Iâä2Ý·†{Å ½/d[¾–¥NW­±Ö”Û9NõoÓçËÌ[-Òü«.Élendstream endobj 119 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3764 >> stream xœ¥W{TSg¶?1æxD|O*i;ç`UjµR;:jÛÛk­¯Òúª­ È'ì„$„ðH„WðY¡í(jM_Š:m§Óé»ËvÍ8·ÓUíw˜c׺_ˆ5Lo;ÿ\ÂÊJNÎùöïûíßÞû÷ñˆ©S7gÛöí±äÑ•+¤i¹¡kqì}<öþ)ìoùÀUŒ?2þ¬¢ù=õôýó^™‡ÎÌE¥³Ñ¶9ŸÇÛ—%Þ()’—äfçHc·råª+ðûc±éòاãcŸMËÈ—ÈJóscÓÄcŸß»C"Ãsc—Jıé™9iY±’¬ØÄÌý±I{7ïÙ»uÏΤ]{ŠÿªŸ¾±dƒX²±hÓæ’RiYBZÆöƒ;2wfíÚ“»71© ð¡¿”úȢǗÄÄNb±˜ØM,!∽D"‘Db:‡‰Âå¼E¼\ÞçSäSÞç+ø7§ê¦Ž :7Èò£iuCµM¿oº&Ꞩª¿›1]}}景ÍÊ›uj6öS³aöÑÙ7ææ|;÷ ˜ÅvBðû »PÆcëB1Ól·`PE¥åWIsŽÛ½ (ƒI$×ÕI(‰\ôw¤Û|)sú{ZCÖ.RB1jEjƒ^*JÒ n|—dž›‰’„\ ‰£Kæ:ª¢÷‚xæ4PÍ5y)i\”2ÑË J(§’ûs‡¿9ŠîuÓw‘¢ùcH™ÏZOx+aô)nÅ-ä˜øÑÍŸ" ÍD÷¢8z«EÈñVrS×ï—¾>‚¦~xïŸoßórh•ª ëò¾ÇÛ½ÎnE™ë-¨5i=e•½ªŠ®Ñ@­F™8è>·Ž[ÃäR¸Y—âðòK¿A ζiœeU•P®c²¹©Kåù@=–ùÑ'h=¢Ñf4kt0}›¬¶ôŒ¸ìî æÇåJ‚葉4¡áðVtTøeò;›’JJ$´ôLŠE iP"QW䫞‡ª0•–f¿ƒ¶wµœób~Ì%S-&“áfÝV ²Iµò°Z´œtáôú‹@ͤ¯£}æÚÙ# BÄ-´ Å2[0ÓÖrÔÎTÝe/|Šf\<Úš’BOˆŽUáü›¯òÙkìrá9h:7“æòHe1^¼ ‡‚©bRYôS°d­FKQzÙ¤rË8‚Ûʉèå$šÅª'ßÁÍÉf&GeA”Š×·º„õ¶>DAå4¶HLÕ¹ZZ‘ àÚÉ7P™ÝCÖêŒj, j«üP{“­ÇN÷üÙn±AƒÈ/½¤V÷‚†æî!O£T2‘†²êt0QLq[“µÛN{?5[- `ù% ¦oG…ñû0Þ.rbY‘°±¤šÁá¢0FW9;¬üšÏ~€¾^ÞxZ¾v'ÑêCy¾ –—pqư¬[:íLãѦa?PF‰jJf+ç3*±¬M“díCDÏŸügz‡; -p¼¶£LoÐh¡„*m¯ìl 4Ÿž$èç‚è™ Ÿ•£%Bø2®-Ù±×™Õ}ÐØÐðô»Zá0t*u:STS¹}g‡Ïur$yðanIöÊ4ic±¯œöÉ<¦«êCú Õ U~®<»"Ý$5$B‘·¾¾Å Ê­é.TæÔì[Žî¯ øß4ÎÓ§|}¯Á)*ŒçríñÐÁ+|¶æN7(5V˵tyrjZ*PÊr»ß«‹y5 ¾ «Ι1ý0gÌC­nÛÌ@„»ñ~âî©€R.â¶Ääî–È3©:.—!]ÅØ£‚]x°…5ãƒöp÷©SbûcÒÕ;1î*4ƒ•Ì•$hAæäDŽGc¬Éfyô™=ý(¥ÇôœKÏ(3ÉEÝ.Èy™PzÚ'v7;H€©™wy²&1Ah›b¶Yì`÷Ç#"3¹ád‰þßɺÃႇXTôÂpœîÐHŸ~»PPGîdõÆ£ZØ ¢ŒOXšù±ÞšPáDÉ*HÅ ÌäÅÛúú2³ò$ˆœdg¨/BBÖsh2%÷î’ˆCº±_SËc€ÛžÙÜÎÈ+ðfã1Ï_Þ/uaÿðÓÜ\,•ùÜ’Ýé¾bzø¥a8öïBy 5 7= ù=]H~xíõQ ºÅÌ݉ýõûèïñYâ ^BNø˜úì…&<ûã2ÊcS预-\#¬¦Ö½¦Æ€nûîrY˜»¬¬0„mmiÛ™«o ÔÖ“ÌÀ­^ïM >öWíÙ°kKC1¸Š ;Dsƒ¼áëèÆu>{™=)<‘xl±zëZ—góVí¦ž‰ðøGr÷¡Œ›V´ìˆ4`0k-V»¥\T©S!./§ IÞyï•ûœ´û”sØ1üúWÌöŸ$mþ†“Ö{¯Ís(«¯Îh4ðÒ6EWo·w œv´-ˆL¸ó´_ –á[ipÍ)ÿÓxCÂH÷‘’¯¢m4‡D÷ý€¢`6Ê…[7=±„~€¼ˆL‚[ä_É/Þ™Ôy¡ÿyì½cíc[®.˜“º²¡Z•Jµ´V¬.«ª¦ÖÖÚfijaœ¯Ô7 F²ûk->zæ\¢>Ø9ºŒæ¶ý'ý¡“xå >%ßq«ª+u ¨°c]¶ª‡žÿÍŸ¾ð2[X¾pû愇éäY|÷5ò¯‡RÓîÖé{_ÍCê1ߨ‚ùfÕûª1ÒŠ]ù…x`):Z8¼Ìáº/ºOàRõˆF^>’´d7=/4zlN—î~ÈÓT[sµ¢ÆXSgbÖqéµI2ÑóC9g¿EQ‡éù±©ì*ao…«¬¨¬DZÑZæ÷úÚú#®­}•^â³nt@W_z}ŸûÁž˜Tçf8G]¼öî§ÃÔ¬«¬ÕƒŽû¡!ì[Ž Å“¨B¯­ÒÓú}µ¡:uh§U‚ýÌÅ+–.ú›ôx sI1T5T;D[6lXýÜÖöwm—¥‰‹½>dª´rëHçVk«òN·ÝÑhgÌ––ÎzûÉŸƒ($º7˜HCᱟ9§ûI)T¶@öxŒ©:äk&LVG£½ÓN»ß ˜pNwMÊé†HNSïL»ÿס…iÂbF3ÆøãÜ¥÷DVê$×r_KãŸÜúˆä6Y<Ö6æKôƒàh$Äϸ®Í‡2Љâƒ[¾øáÛÞ쥿DèÎa¡°Z´÷­Ò;)1hTFZ_.Ûü2>á¼X?`³µ•A$ûâänÎý&â]®“±·7+ñ¬Ñ‹6_-ùî%p&:Fñ<¡µ¦Ya1˜õíÐíèt·Ÿï| NScéþ´ä¬â\1mðTœJ„ (”)T¦žŠz=Æo™ª2¸51xzÕÖ•%ˆ9tìùÍöó­t÷ß±Oþ¨.«¼,OºÞ¨b¤[B÷híuJÞ F‘\+9µþX{m]ÎÞåã|ÆœŽéØÁ®ÂÕ»9JN&]ã^­R©mF—š¹ºÛ÷8¬ná:n·—›¢¬©1@%¥rª:†Ð«(„ÖZ_„©=Èîä³/ÜÉç­_$@«&¥,,ÃFT'æ6ý¸7¦Î€k@:½¶Ð(ánž¸¨rÄ ¹<”‡òz]8šÙQøRQzA¹+ÿ„ÍæzZ²/U&Öêk+ôøp¨m”v £¹½AâÃ@ÐÐóB´i<Éb7ÛpU…1%LꎋIní‹ܪI×H/6Ù ý!¿Â=q…Ç>ÃÅs9®‘šÈÉ„f]#›a0v{ùx›Œ÷*û ™„K¦ºÁd)ö>ñ& -ú mG»ÏÕè´›j0x‹S¹W¹DndWkÂà.º'ýÜÎ> zmÞfVU›`CO6×›É`ÔØ :jj¢$zú°Ëú³š›¶èè7ÌV›­7{¢gÄÿSŸ,=endstream endobj 120 0 obj << /Filter /FlateDecode /Length 174 >> stream xœ]=à …wNÁ ø“:E,é’¡UÕöLÄ@$zû‚“tèð,}¶ŸõÌúá:İRö(ɾ`¥>DW`I[±@G˜B$BRìzV;›LX3ùýÉ@ëøïföò‚-±›lr°dc¡˜8é8×÷š@t#µFl*¡Qœ×ZQjTEÙPiTE…×N_;Ü"ž‰¨ÝJ¸â˜³Å ~¯æ”›‹V‘/ïY6endstream endobj 121 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 614 >> stream xœcd`ab`ddôñ ÊÏMÌ3Ó JM/ÍI, ªüfü!ÃôC–¹»ìÇöŸº¬Ý<ÌÝ<,{œú!ø=ÿ»3#cxz¾s~AeQfzF‰‚‘±®.´THªTpÒSðJLÎÎ//ÎÎTHÌKQðÒóÕSðË/ f*häç)$¥f$æ¤)ä§)„¤F(„»+¸ù‡kê¡; Æg```642f`bf{…!á8cÖ÷5|ÿ™’¥º7ý˜¿ét9ã÷¥™ôŠmJ`Wéž±FþÇ.ö•íݹržÞªÝéÝ)ìK»Ïv_Îñ§—=«»NE.!…íPÿÍîÃ@x³ûP;Ô°§ßŸgx²‰ñòw†ïS?0ÿX÷Ý_4­³¶Ñ³¦¡¥Õª»¶›ã·?Ûw‘Ïk—=9½j¥äÊ•[öu_âø.ø›õÊo©ß¢†fºÛZ§-Y1wýºÕñr‹öØx¡›ãËa[+—'Woùß¿s»ººs$¸³Al-[ê;ûwù5Yë¿~9°FèÕ×â¯ßu¿3‹ ó1üØþÝQ´ûJðßÜ+o-=}ºû.ÇmÝã¿y~s…Z&¬©Ÿ¿tÙÜu«JçôËíÚÿ¬{J7ǾÓÅò‚ Ý!9Úê­Âº* :›¤»ººk8ª§uÏ‘;ÊöàHêo&Ïh§•‰Gãä7õÏ^Ú½Œcmñ¢¬‚ܪDïLÁß…¿k¼{õNޝlÁçYßó§N^À¶‰ë·KH>çêžÞž¾žÞI=½“óðlèÝÜßÓ?©§JïT^ËŒÍendstream endobj 122 0 obj << /Filter /FlateDecode /Length 378 >> stream xœ]’Ánƒ@ Dï|ÀBÀN¤È—ô’C«ªíe©8!‡þ}ÇCÒCcé{wgâât~9ÚïË?Óš÷ÃØ-é6Ý—˜òKúƬ¬ònˆëƒXãµ³âôÚÎ_?sÊÑúßÚk*>ÊjÏŸÊm(N]ºÍmLK;~§ì‚ûÞ²4vÿ>íšmâÒ?Z+µM¡<poT¨ÀƒQ@~½¼8F£€Ñ±3 Ø9&£€ X—F…€ ÜÜ9âΚ÷Ö~oS* ›oØsáÍÞ,8Ux²øÉ‚9á¬ø¬`N8+œ­ÖŽQÀÆQŒŠ#‚qÕ>Rx/‚†#Ž a8âႆ#Ž a8âႆ#ŽôFñ·æ\! áFéHÝ‘ÂÒ‘º#…¥#uG 7JGêŽn”ŽÔ)Ü(©;R<_iÕ×å¹¾9¾ƒÏ•Ëã}YÒ¸rQ¹ˆ¾ØþvyžfŸÊ¡ì±¤ÁNendstream endobj 123 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3836 >> stream xœW TSg¶>!šsDTà4 jO¢K‹ø ŽŽ®Úö¶>ÚŠŠVE…RAy?HÀ€¼!„ì†÷  ˆ@m©«ck§ÅÑ:}Ù¥íØV;·­Ýa~çöþ±ÎÜvºÖM²ÎZ'çÿ÷ÞgïoûûEÌ;F$9ymÞ®ˆ Š}fÉö0etP‚íϧ¬³DÖÙvÖ'Å@ô#wG²'‚ƒ&œ™í\çŒgœ0qnqdÄ"‘O˜b"N•ž(_¶téò%Kèu•œ¸qâ?%:v:ÛÁI¹ºI“'eÙ'ØLîqxÒá½)SÎOÍœúé´§§½ïèäèîèåXèxÅÉ -SϺ΀}-VßdÑL·¤°^eÌ8BÒ­ÿ㢮ÐS@šuÙÿà¦KV\ÒžUÀE²GôoB-6Ðp6P_­P…†ò>trÁÃ’sd!ò\c|@!D²8WŽîy[ãJ°JJ@‚޸׉S¶Û²Æ`e,)fgüâÐï ~À:4ÝÂnÊ€S2T²Ÿ… Î]°{Ýþ Aû„ÿ˜ÌÏœÉ^9”ë'#Õìî ØDí÷è{¡…Ñ =¶Æ¶n`ùÿ:ðÎ;U{¼¢úÕµ4~5“ÕncµÝÂS·ÄV FHÑi2Ä…¸Ì# q"N?¹ã(½„eF)ìPÅíÝ­ „dRv&œÔ À8Ú{LÝõ}ðô$4…·évÂ^›—Ÿ÷0I–7‹hèkI‡xÄÓ¥¥`LÍÔ¨³´Bñ Žëæ·’lÛ±=/|}9O²Ú$Óåèr+«’:f°ÕPšž«Õ¦g ¾kÂŽoX®$€õ™²o[–¯p‘åOw[z?0äÉ„üÇô®bù-¾}gsŽÌBíîâ²eÓ »î™gêÎD 5 ƒ:#ئgº.wýòJ"¢‰êœÆJÙKcFñ­µÃ3x¹õ ëTig”9pc Ÿw’ ýQ“¹¿Rëãú· † .Ó`’ÙµeGe¸€…¿´#óM!ÇsyùY9‰3£›Óꛪ[ê²y&“e¶ºubî ØÊ£T ý±&“s ½Kó!ºÄ¿NpmÝ_ãÃ*E¡ Ë)Ñ”WmËúѤ«5š*h³³5 ¼¢Ô²Ø²ÝÀyô‹¯¿Ö«×ÈNÄ4å¿—Ñ—}= Ösûâž~*ö£7Ó…ü -m.rȈ#› YÅ:]]­`0”U §‚û LÀ!ß;ü®-CµËmœbA¯dg´»Ý~á´Ïà¿Çûè$=½“}%:4ÄnV hFw qG/––h—/öÐp –¾ML2é¶ê´ÀÛ½wâÂ_dú}È‚íÎÿ ¯~%É™nQ²/”uɬµlWaÙu¡Ñ"!n⦟ÙÈ^/Ì •‘rS~ëéƒZ6´ óA)A7=ºi&Ž[Ä2¼JÊú°ã³z>êEu¯èaÇ‹Gû}}NÉ€ dÉâ_о–]áãµzE~Ï?}øäh–ÉÈBvxàïýÐhtÏJ¨á¥o3eIÖÅ‘µÓ:WjaÃ5 ÙàÑzJ[F%¤@V:?›vµÁ…Øcs^¢4uø(ÔvÆ@¼Q¶ï€!¯*’{.%‹iVBÉ!C9>‰¸4Ÿë¨èÒ=ìì1·#i£n#©Û=qcFz Êâ)fhò r“B—yhRW€Š\MGtÍÔé>Í.È% 5fÌi¡ºn×Ó\`¹¶(¿Œ®l9µ£áí¦á©Àbm+Ï@i~™g’]Š곫¡ŠÊ ÷±Ãå>é0¤eÖ€k5••áüÐÅØTÓ;¤§³ô™5QbT&s]}KóÁ¥Aè:ßUjѹR>¸þå™CÎ#ŽDŠŒ}?þÌOM²õ8SJŠ%F”ÞÜ8 ŠÈ]¢ÍÙK­¶y$²`®EAUˆý0Ü.¾=ƒ¿n2â í jݵzÙN¹@&¬Šü„ ÿç)ô:XÈ4œÈòO|1pªWàçVƒ1¿H«ÊV§@:_wÀÔR[gÆzµ¢çåî˱­ÐZÜêÜ6”0´õÆÍõ7:†fðKk¹u¾´&½#0åõü !¡v_?p Ö¾ò_þ¦ð†d™2!' öCp}tc Ç瓼/`æºï½ÑÐîìÁ¨îÈak»¸ç-‰Ö'´ÀQh.6–»Ž«›»7üþGÇRŽì7É*Ë- º|Z ©œª"½¶²ÆØ$WåRUÇLV*¢rUÀñºø¦±Ë`ªª—Õ4™Ë[€û,RÊpâ‰tç  ~­£Û‹§ª‡>‘}#iÁðœl\éaR/Ú=D×#½÷ÝÿÑ{˼£T‚ïHx|¼á+~Gðý¾ÜO©d’̹ì7cŸÅÝnáì®üð]Û ¾n¤îKi1T¤¦Af®VP{…+TßåV!Ÿ{>ë}b×ñQý7çá&wPê.‘’ñÈG?šsóõøÔcSЙ½ –Ð’œÖ(ÊßëÁ öt‡r|hÏ9uë¬Oë?i“QɽTJÄÏ…Í(~Š%`Ò•5ëº#PÜmtâfnóh)SÓüÝG±ó©á´[ItVÐnÌ7—Y–ßGž²%íOÆ<Ú 5c©à3m¨=UP SÃñöÛ­÷¤–ø¦ØØøÄÈØ¦ø#íͦև„œd±F¶áÊ6ÑÐ%¼{IlmÁÍRøbû­ùÍD8ⲩÊÿ,¼Ã½÷ö¥/pMYb 3u¹õúŽ ¦œMf®îýÚ[›ªvP•:yùæ¿ØTw@v4Ì’ƒLÂÍä*%¼4ópøq¯ìZ»„ØÉ›(Ë´ÔNÚ¸`òL‡t…¥%BQq‘ÑÜ}Éûjú*˜œ>»÷“lŒ·)¶{ë-¨וU4-÷¬ÇiZ‚@UÖGæãV—ϯ¼ûF·á°ÎÕÂîפљëiºÀBÊÐuÚ¢tzdIJNÉÉ#óçbcy㯂ï¸~ÎÚzÛôx¾oÙ+ƒz0…Wp­JªN®N®Lnˆ‡ƒ\ÊMÆ( OÑ-Çè¦N Ç iýçh¬ö4Ð.¬oë–ÿ7üžõ;hóK¡¬Œùåì4éáôGOO#wë¦ÃÏÑÓ^±©‚êÃíõa!¼’ÇýÎR7.].óÝñ[ÍõXþÎÊ1‰KTIÿ8˜,BÍe1^D½¾NEÉf´÷ûjéÇ”i²è`ˇ‚ò ʉë² ˆtjÍö HO×jAÍ©õ¹¥ÕgÎ 8åfôt°eæÙPæ™$üì4~–,²Î<-)¡ö›”&>ì—TBcb"(é]?égÓ”˜Ø•2¤w’4P65Ac¥€ýØÇV6BÓ#ò¢3¢üÛŠoMf‘ _ñÃâÑ©8V4KfdgjÕP u-Ð/™Ž"ɽ¿u]lkË=pX€àœà(Sjce‡ñä›>ý+ÝÉt?"‘»›+Õx<£Ã¸ší.É’‘ºßÀ‚ PdMîB±'›O˜ÅU$}+ù×#•ñ±1 ñ•åz½1°êÅ—4*gò¸lcž¡âÓÐÁvD ^Äà¦Ë¢rìcn’^&Ù‡H¥F¿B±ß’vÄ5*"”qŠˆ¥¹£±Å,Œ-±º¢w%‹®›{¨ë@ë6©IÕ—™—'ÀÝ£§{» 0pÆìbuÚÊç‰ýÖf¿¾öæ&˸GÁÛ,ÄZ?•íðT&ÄØ¢o1– àD'”šZ²E_ùù ´þNßS4Ý'ÙR(ÒêÒ+È“(À-€OžÄÉ8ëìéÊ  œ!¿$+õ5ßìÌ$rñâ$ññÄÙ‹¸Cå@QRƒu]*J5H,ö×& öv(&™u¶Á +> stream xœUR»nÜ0ìùì²"™ï‡;¤³¡.H¡;}2ô2­‹‘¿÷RÏ'° 9;;Kîìe§,®m?„ÑòFøŠÒm;ôGM§¾òFZ?Vy¯‹ZA-g“–Öù¿¦B¸Šqe᣶òŽk8%R´S^jø·˜wöœy á{QJ©1¢àÒà¦Ë·¾Ï Ëy—3戃CQ ƒÕ˜²+ª„ýýö2c‚ƒiÜÝ¡ÏÙVÂórüøm«Œ‡KßwãK )„tc> x:&=c”Q0ÏwتÎahÚ®ï§-Ç 8IŸn³›vß¡÷í5†C“ÏÏó¦9tͲÑwØçª(•Ò•·êóõWÎ;ÖµFº†âoý›ð/sG'œHæŽÍ­t\ZX!ñAhL³Ä‹À)8Þ’¦]°ˆ¨ìB Fll"G+Ú¬€FOI-™¾ÖQqz´Ž¨&tÓåú m·S^Bw¸,ÝjðJÑSN©ëq6šPhtô#Í­‡ÎýÚ!y¥™§¥‰åqÖ[¢¨_ÉÏš<âúÈüÃsendstream endobj 125 0 obj << /Filter /FlateDecode /Length 177 >> stream xœ]1 E{N±7€hF› Ml,tõdY2†ÂÛ $±°øæÃ¾¿¼¿^®Î&àèñE Œu:Òì—ˆÖ±æÚbÚRuœT`¼¿©ðþ‚<@fÍw56­¨OÍ ¡×4…•‰uBÈÎÉÈ鿯ã f›<‘¬"{ŽFVå˜ñîÜÊ*!²—m;W—Š{#À%Fr©ÞQ{–zÖÑïÔàC¡ ‹}w]Z‹endstream endobj 126 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 646 >> stream xœcd`ab`ddôñ ÊÏMÌ34Ðõ,IÌÉL ªüfü!ÃôC–¹»áǽŸl¬Ý<ÌÝ<,û~|ú)ø=ˆÿ»¯3#cxzs~AeQfzF‰‚‘±®.´THªTpÒSðJLÎÎ//ÎÎTHÌKQðÒóÕSðË/ f*häç)$¥f$æ¤)ä§)„¤F(„»+¸ù‡kê¡; Îg```ÎË/a`ðg`û…a/£(ã¤ïkøþ3Y04,ü¡»ñ‡ðá¹'˜Üû®,:µ¹»¥®»³¦]®¹ @3°›£¬kÖÌ%S—N^,?ÿÀ–ï,ÝG9î†,Œ²Œö¯¨“kÙ“¹2¡;½»¼¤:·"¹Î¯»›£qj÷„== 'Èͽ8oϪnŽ¥Ýy ÕíÕò¿t¶vµuwH6L®™?}Τy“ä67™°pâ‚ %gìëbæâ×®wslï+óÿÍ]›,_—ÙÑÔ]Æ¿<}÷‹µß5'Èñýgü/uøw¦‹ß§_dþ1ñû*ÑWL~ üý­ô[Må”ï½ïßE¿+}W—sÝ$ÚPª’íŸÕÍ‘’¶êòޥߙW”ßpb÷ÊMÝ{–ÇÈÍõˆäªïáåŒß¹3ÿ ‘úî®Êf¹Êèd‡ nŽ‚î%³'uÏž´\þê÷½¬ØæLëž7½©»ZÞšmÃwþ™Ý½Ý$TMh,j,†cÊocV3¶ª†îŠú)ݳåo³9ÿÞÜÕÞ^Ý]+¹&yÿ‡}`O•.üá<í{qïì…l ¹sËq±„äóp.ìëéÁMsú'òðlœdOêÙ3aÞ<¼ ‹f9endstream endobj 127 0 obj << /Filter /FlateDecode /Length 247 >> stream xœ]‘1nÃ0 EwB7°œ¸–\Ò%C‹¢í‰ ]¹ùl»AÚ­(,‘oe \§|a3:GcJd8ÇWm·UœÓ#µkIqÑŒ/;RœC„zR Ú#±×ä^’û=)нhG ´H¢R Ñ@ 4ˆFR Q4‘Å£Ç<‚sˆP4èµI/Mz¼éõ]D™ù9œŒ/‹|î͆{­œWݶnS–8gþû²©²Àü¸±}2endstream endobj 128 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1616 >> stream xœ}U{PTeÿ–ݽ÷b¸à^–GÐÝ¥1ÁHjeOˆDGPÞh+²¹²>ØHÂ÷ÊY––adlQ2\tQ^Ö,Ó©,+-§wÓø¨´´¨¬s飡»’–ÓÔ÷ÎÜó}sÎïüsDåC …rJºeyAÙÝ±Ñ –Ò"o)R SHá>ÒJ Ùá*ûpªü”à§:ΦhÑ:þ˜@” EŽ©ì1Ë ëªâeærÃŒØØ™ÑÑòû~C¡ÕcH*XZb©\]Rl((+2$ŤÄR-•r±Øe)3šÌ¥O,O2M¹†¬ŒÄô üôY 3&ÇÜŠêæ!Dó¨eŪò‚¥EæôâÒå9„ÜI’4’A²H™CÉ|2“$‘’JfyG¢"å䔢PqÌ'À§Uy›r³ò²ªIõ:TÝÎÌÅýšQ¥i'‰R^¥bøý q K· «k_|ž†P lÙ°ÑJí#?„lzƶ!¸ #ƒ¾Žn8m¡" 3 Yß°cÇ«ÑżI'©§™CŽï zàxlý7êhƒ ºÕéÃM=ߥèÄ@lÄ@¥Ôe:¼}ú½Î޽‹†Ò€ ‘ø >t~ýؤ›”Pžò€äüËp´õ€°ë`Ÿkú ¯ºÍì*†LxœÓŒúÔ\ 4[Ĉ.<'>#–ôhE0ªåÁþÌsDº‚«u{™NŒÏ.µ– ,¿ÐÄ j#{²Lúû\#‹Zjmjq.¦²|B­¹ÿðºÞ0œòÓר×ÓÀ ‘˜“´ÖÇò„Úf°Ã.Í,Q »ìö––žÞWmÀ½w<•jõšQŧ­^v‡Dãë2¨©FM0%¥J*ÝkY9‰K%— ¨fù³ô¿pééÉ1‡àè’iž…±gÚQó#T=]VØYÙÑÑéêäö¯Î&›zpTÄŒJíÏÈE'óW$-è^3æ²óJV[ÒàÝvÈÓI˜adë"GEÙ¸eòÈ/é^Æp~Í¿|⬠‘ŽoêZ.â‚}ݥ݋¾X„L0o”÷èv×@j‡fØÍa {qÎ):9j¶Ì|ÂSµ×ÝéêÛWÕj«^rvÚw÷‘§ N_ÌÎ±ÑÆõ@ïâøÚ©`=ý¹ØÛ×&ðñ¥°äáóÂØ£§KÕñû§N¯Y•»Ôs ÎhtxW —W“ü{´‡0pB N¸'ó—¤Uè«kY ë¬u[k6 +“¯ÊŽê#_9„:O«ÍÖ¬ç3­Õ[+Öß~á9Ê9ÓÞEç=JYÊÑÐËÓ0ï݇\£~Ì>Þí%e¦yÕ’§âsÞý“¤«A"›²ºõÒ5–ï¿iY¦vQwŽó)yü¤;gÒòí4ŒzëÈžv·~1ËÇ£BÅïµÖfÆ…Q àø3GàØ‹ÝúŽ>q»N@OI[Ù_Î…¿£7)ùÞÉg%$»p{-«;rjnšiP‡—þÊ? Œ ÞâX‹ŠsopUÄ t÷Ø‘Zy^­×†î.t‹ZŒÄpÀðŸp Þ1(:üÃwº6™ÏŠºu5uÂfcÙšå°Ö°¹okÓ†ÓuÏ­=“éÎ߉ܾ£§à]nˆú|E #F†ÿ ÉÈEJŒL—ãª7pUv+'R‚nôe[à0¸‹;ÍP 0Ÿ)>¼æä–^à~kþz§žŠÒd]̦÷ ”“ïcðžú‡S½™‰[y#3Ÿa¬öKŒ¥$Á|;v‰)R$ËŸ  ^Þø;*‡š9- éúÍžü|³9?ßcîï÷xú…ý¤‹×Éå¼â+2±Ãa,ú_Tú_çëhÖÍØ^×£`ì æ~pL“Ÿs{'Ææ,Z²R¨¼4Ýa‚YžW’,·gù/hü¿’ü}Μ<ÐVùÈM}þçH†¢j¿@š+†ÃDÅžpU¹ÒûKâu"»¢Î¼5LËœ‘m‡#ÐQKãG2Bh¢”§þ^dL¶hȇ"xÌòslo §×þë7þ¡pV7¬k‡ÐvhØî܉ Rv&ŒdßZ­–.‡8[íõnÇ õ.Ø œ¦¶IZ¸ ó\Û›q2· ãT™?ßý‡Ý^ß`ol<𦟟èìkv69žo¨orø'äO³±rêendstream endobj 129 0 obj << /Filter /FlateDecode /Length 219 >> stream xœ]1n!E{NÁ vð*Ž-­¦q‰¢$`‡Á¢0‹ðºðí= Ù)Þ—0þp:¿sZíðYúæÕÆ”CåÛr¯ÄvæKÊÆílH´þš&]}1ÃéÝ—ŸGa+8vÿðW¾ÜxÐ%ׇh |+ž¸ú|a3à#Îáß–ƒ>1Çíè;£ÑL»*’¢GTD¢£ÜÛu¨ˆ:Ñ—IÑ€ŠhÝ¿¢ )J¨ˆRÓˆŠh÷öÀö…VÆöwK÷Z9¯Ú˜6ÒŠH™ÿJ-KiSV0Oêõqoendstream endobj 130 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1191 >> stream xœeR}LSW½¯-íãÛ¶{¢QÛ÷ǢȀP™Qçü:0*‚| Ü"P°l¥X)¬ÊìÓTô•R£ i)²&•ªè¢8_‰3c‹º9.Ë–ù13ïƒKØžY²Ä,¿äþqrî½çwΡL‚(ŠR­ÏγlÓ×èÒRò F›Yo}ÎfQÂl‰0G „Oß1Rˆ‘]˜-»¬ÂŸ(qE<.š†dUTµ½~•¥Ön­6VÕ± ÒÒÒSRÄs [ng3RÙµú “¥a‡©šÕ×laצf§², "XÍ&ZjØrC•Þ\ÉZ*ÙC1[˜ÿA^>›•—S˜›??õÂþò«Ûô¡(‹Ñ<ÿãÍiºD9B¹h ÊFQè}´)‘ ERP´¸"’¡JªˆòR/$JÉÉ ä•´@zÆ N. ¤ù¨þøËRÁ„·2ø­y‘X¢L"Qæå;8Ǿx†ÕšÅ^ŒPh+µ•”Öl‚2(í©=g0Ãp©wäø¹¯{Â0gl}e}e° ´ø)÷㼫gýGýü¿ §ßqÔ N° ‰L—c`KCis¹^£&Ü ^ÏÛf¥ff./õõÚÝö­PæÃ†`CÎNSTЫžà8õrôÞ‰OG‹û5öo„ `õ4µšÜõA7ø»Ž [N9»þ}lì§Ð®Õ¯új¨ís Õ @;ð¸–}8è‡G;ºÛý²š j˜­Ÿ9ê,@¿ ú· hÕ7¹N¯¿?<ë1Ì«ÓbÉd4S¸zÓü¹™£ßœ;á5×ä° jãþ¦˜ë‚ãTÐ|Z…¥·Ô!ìT¬áà¬V˜R¨ÇÈÛ\„Yñ½·é#íd—¢„ƒ5³KùñnÓ/ˆØë'(¼ëªŸÆ<÷8[€#rpüÂo÷ÝÜÒÒì„ýÝví³Ä+$ˆÈŠJQü4¢Úí€ýछÝ-žŽ_¿ÃêkšQ,éÄRxHÿ+Œðá‰ä0…£ÂRì%<NšH~&s¦o¢EBºH˜h$s*žN%'U(Ä,m¾ñ>jøöŠm)÷¸¿ï~ÕÍO–ÕCdl/O5eî[Ka¥[wjÅ™÷n7œ‡KðcÏÈcm÷àgzq'+!‹[טœ·­¶@nÀþ„»¿Á5¸ ·¼—ºqô݃„[öîÄŽ|Xë_·‚B(xS´¥öŽTX4=hR蜇BZ᪢\ušìué`Ú¬8&¾s±ž<¢0::É,?Á?†°8á„“~Ãâç¢ÃI<¸vv%V™ðFÀ)€3Nâ •‡;Á<ÝÞÂ7ïÑeu®¦˜HD ‹`Ù!{™D\'ñÖvíqóíbø’#8m ¯‚ªqu_‚ºv<sŒUn'K³j‰hò…»qè`xfB[K›ÓMôøü ¼KŽ—ÁcY@äl‹˜¼(ß±ĺ¹ÈÙKz÷p¯Ó©nã:àˆF¸(³ù„U]¸æÇ'FEk¢d–˜H_««Õåjmw¹ø11S¼Çåáy¾Í㎉Eè•ÈF endstream endobj 131 0 obj << /Filter /FlateDecode /Length 239 >> stream xœ]1rà E{NÁ ´H¸Ðlã4.’É$¹B‹G…ƒå"·ÏîÚN‘âïðÿ#~w<½žÊºÛî£mé‹v›×²4ºn·–ÈÎt^‹q½]Ö´?HgºÄjºã[¬ß?•, |ç÷x¡îÓ½xýä-t­1Q‹åLfÀ)g4T–[|—:æü8ê<ªægTÁÆ—"€> ªxšiäkD<T1Šw< ŠñÀèªx2ö¨bìÙçÕëÅ85hräÀ1A£xÊ«ž¿/”ªžÍØtkÊ®}j_RÓZè¯òºUqY–ùdvvöendstream endobj 132 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1960 >> stream xœuUipçÞE¶YÀIFÁ[È®RRMìÐ&cð¤)„€I\ŒÁ`sËȇäC¶l#Ë–,Y·ô®V‡uùöÚÆrl䇣\0G(˜ SÚ´¤3MÂôši›’Ožiº¦Îd¦ý±ßoßïÛçyßçy–$’æ$I.ý 'G^W–]'¯PY»&=¯¸´¾B®™}µ2±ŒL,Ÿ“xIRŽ+fÏä'CªR“.,§Ö?<Ï¡ºÅ¨d ‘D’{*›L›ÔÕ:²´¬NöÆš5ëÒÓÅ5SV¤“mÌm“)WkkË•2y•B¶-#'Cö3µVÜTÊ^UWÉŠŠËä%2u‰lWq,çæ¼²-yÛósw®Îøßè¾»[«,­”‘ZP-o(:’»sËo/#ˆLb±‘($6ïk‰ ‰(Á’nb¡È[LÞžS%Y%9•Ä$IÖ$ŸK)O9;w:¾è[I–Ž€ár˜œ©ê–FZÀÂlå\|ã$–¢›iw§ÿŒÄ†ú'ú§ø(è¦ÂÍ•*'T0%PÌ—ek­Õç ¸Ù {Øj0˜š-fü&Þ˜öÚg‚¿³û¤—q!:©ˆœE‡ g4ÃkÄãFКBò·ÔY4àR¬µÙÝn›Þ»{S³Ùmh¿lŠ~xœ‡afN8Ç€òG 'dä€5sˆAG{G$ú7D¤}ù—¿b‹Ï–†F…ƒ6¹Ính¤Œað2èy~n8€D ›]ô-‰dÞ=Œ^é™xóSI¢Jÿwç'…ûJ*¦åòáÞ8 ³N§lÞNª%â8ÁÏtÞï9'él³×9MŽF'=ÝaQº¬‡€6š Áâs´ñcCÜ9”/ =á0B 9‰Þ °ÑªXÙE …žC+Ñ*/ÆYRåæ}ª ²›ù¼|„= ƒƒ±®vztx(Ð ÔdYn® ÏÕ‹,æ,‰¦g &ïKv´B2ƒ³Åí08™ÆmºÜ" ªÇzOkø4+|9†dxÀKwCµúúz'£¯<ž‡—àUxeú•ì_õ\ðÞŸb[壪s0 }}#cÑ[ ÉÐ;ÒB\`×KßHÚUÔ¤ªÐpåÄ…´¸ïçìðõ3ã“@}Ò–i³¹lnû,Ä bô $ÿ"*CÑ/KÖÿ 5»V£’m©-JÑ4ü‚ˆ4Ž^òë{< ´ú¡·Ym×j –j 7 #]“ç¶)w”í®32š;ù¡* Väa©fv:­¼'èaãOî Äê5ï¨hÜZ‚elSN™üØ ŽF|B/ĨÁúV}¥¦¦üÀíé;cÓ~ž‰”Œ)¦€úûU$˜UHü‡ÿî-*9IžB&Q"ëD‰|µûÞ†EU•Ìt9yÖu-®Æâ6¹AGƒÐ~Îcm±š•ö£L&þµ±ÐÑeôë—r ùh1Z^ažÍZµõ@©(¥jðA7twÜb…Ç~<Á0}þ“3íÇ€¬|ÿ¿£&Ç/‹pPü÷“ùÑIbã7R¿-`³»\“õ*&ÁÔÕç§>êùsü&;|õÊ©+‡‰æ¶ê&0€ÁФw5‚•ªí2u öOžß?þ.^†i¼¿¼öZÖ×hÅçO"Ì¢™aMC·Äd°'†¤³ॠ~˜Ò ÊZäÖír»#l‡Ëï8ÜN§ïi<­Eá²dÕ8[žE/ð·Ý®^Ñr³â7CC‰ºüçgo">½‚¾Ø¯Q›Ñ/…öÇŠÒƒÛ-‡D½œr G=ü) ÿ”òèRõ{³J*^KÔϬ‰‘hË4ÒOKQ ÷”q}[]ŸÞûFßÖ®´ê r.Q¿ùìw|tã0N*wèÀÆ´DBßée.#u2ï ˜Åœ1™}y5g÷ l¿€Sñ\¼pý¥õì7êqó=dÒk3ÓW¿%ZÒïëçü çåxÑ!+g·»DîŒÃ±7ˆÑ`ó9ü>Žk‹0篞Úq×p h´\7–ÌÎN:EàwŽ¢ü'$Ê$è'½£9¡Pi5êꞚ㑨7bx‡ïÛðÓ²í*k2K¼ÚêsøÂŸ=Dó±{9ï9ŠäBb“–LÜû¿†œmecˆàÛCÞvÚך?Õeêí5n¥…Ù·×üÀmß·f=Ð…µÇ/b{eùzÅJß³|pªÝef¿òô—N#8h}ØØÙéâ=Œ7ýxeŒTŸqôÀ4œ8Ó WŸþn\ˆ¿™y7ˆG $™Ù†x)D,>“ïéEÔ–Ö™e2›MfŸ­ÍÊ&Ì=ƒÕn3m šÃ¼Q&!–‡}­>ˆÐ³Y¢œõÀ?¯‘7Qì¶$q;ñš´ÿ(èÜ‚_܉¬»¾ù«g_ˆ2:á\ÅiÍI‰ŽAœÅ»ðR)ì×f* ¹ù5¢÷öûôÃÈoG¯³'ïMµ‰™ñykv»¨^lo8E•BŠ0j3?i—:užÀyx>èéhãÚ¹ÔÔ..ÌÏy"~OêB‚øU Üendstream endobj 133 0 obj << /Filter /FlateDecode /Length 245 >> stream xœ]‘=nÃ0 FwŸB7°ü§$@À%Y24(Ú^@‘èÀCdAq†Þ>é¤C‡÷O–H®§ã)M‹©?˾y1ã”báûü(Í…¯SªšÖÄ),/Ó 7Ÿ«úðáóÏofƒ <®~ö7®¿švУf}æÈ÷쟮\í­¥ý8RÅ)þûÔôë‹ËøºÚ:R¬EB·¤@·¢;R ;Ñ@ 4@;OеHh$¡®!ÅZ$t :ˆ¢§Ó¾Nú:TuZÙIåMKеHhG ´íIö¢¨ºÑÊH™ù=œŒ/‹|ïÍ„G)œݶnS–8%þû!yÎòÊ€ê e½}œendstream endobj 134 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1625 >> stream xœ]T{PWß°YUÊv¥ÝÝi-â 0huZ;c,E눥 >ZÄ.¯ I ÄA{—@($”€!@ÀT…JýüÚqæ«í| eíC°¯±ÓNߣ½Û¹ý£lÇNï¹3çÌ9÷œóûýæ(0U¦P(¢v¦§ Æåë“·õùA_œ«V…H«•ÅJ®ß·‡‚H%ˆTͬÂg¢aåÃ0g9Ü…)Š}…¦Œ&[Y‘VWÎnHN~*1Q~7³¹6vk»ƒË;l´š±œ!ŸÝ‘”žÄî2Zego4°¹:N_È ÙÌ‚ýlÖžwïa·í~9+cϺ¤uõÀÄ0lY™¹ÜÂê×%<·%Ãö`™X¶ÛŠ¥aÛ°t,{‹ÅÔ…aËå)1fQ<¬0*>É ™R²Ê|å„ò;ÕšÐ'Cu¡è[&õ¶ˆâ‹b4Œ_„ˆ!•ª¥0ª¯fê©×^©Ú·îR“ìxýé<šÅIÍЬcÈ¡B/ï¦gÑd*n3ðÚ ÅÀVÜuV÷—6f-ÄqòðÅå¯ æ ÈT³ÇvæŒÇ5LËDxJ4ŠÑ×EØ(ÆR.\A{(ÆSìŒs=ZzÊÔ<Éz†û?§IÍG Ëì(¬«¡ßÃü_îÇÝìÕYìuöFšëÉ6@£ç-›´‰w­ßV3êÅCéL›_ßß>[N7ô8­D.o63‰ê Á0ÞÞ|ô´þRó ঑//1÷{»(*àÚEÈ,(¥}0†zôsù¼ÙJóYêŽb;˜z“˜ v ÉÃ… %Ìá}ü@žü{9ýÂsê c³Vëå]Ì'è(£àæÍ…‹ßÜŸf©ŒÄÉEJ•R±Ÿ ’M£© _â%ÉTñ…KTÁˆ?8þ{Ê#øGÆ‘ß;­ 8¸ „¼Jžóµnfïüsÿ5B__vÜÖYwª‘ÉO¼’@:HТǵñh½؈ã­eÃC“áh *ÀÕ ¸nP»#ÔܹìCeÅ:nÄ4îh‚ƒ®Ì.¬9ÞXÓt¤˜‰ ·µ×wï ý+n‚t0yµÞ–B¨@ñŽ3éŠò|†±·GGiôŽ*Pì•}E|rf­gäý0/FŸ¹e¿¾k®ôVÃ-Íœþ†ûVé´ëis1¤Æ)ÕJ߇g=~tiAhX w5¸øò]¦Tó«Gõ—«ý¹Qóý¯àjßÊkæORö¿rp ךå~™®®ÊÙßÄdÓš#¥•Úì•[.¥|:snhl˜v[Ü@\ž èxÀµÄá¦;Ó¨=Vs èAÉX͉Eõú\çÛû Rò.\Jj¢pòñ%PÇʪJòd@sü¾uåLo¿{dØé†?”Tñ¡’Çäý†å7¼ç ´uúßbH¬và€÷`Ÿ>¨5¸ûöµÛ ©JŠ¢Îå¶TÒè^™Ûœ—;Áw1ðg¼kB0(^(ªiô3^]Àçæš»xï´œû‡¶ÈbMÏ¡€«ÞiíBŸ‚$ø |ç‡ÁG¾tu¶:‹h?1Pl@ZÚPøÅ cèÿ¤|œÙŸs YVÛ!=ÓŸé8Ù‹á‹t¸*Ó6í9)Ó}òTdäAh•­Þ6¡-ò! û9Ç+Îendstream endobj 135 0 obj << /Filter /FlateDecode /Length 183 >> stream xœ]A E÷œ‚´L‰qѰ©£^€Âа(JÞ^ ÖäÃÿßf8ŸÎÎ&ÚÜ¢WLÔX§#.~ 鈓u„ÕV¥ª§še Íp‘áù H³ͦ¯rÆæÎ8¯Wl )¯q Ra”nBÒ·­èþ{â[`4?ÎAzÆEàÀ‹<Š @§²ì˜¨d3Öáû˜òOi¼¤j]ªkÕÚ¥­uøÝ<øPR4CÞ»H\¯endstream endobj 136 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 677 >> stream xœcd`ab`dd”ðñõM,É®ÌMÊÏ)64Ð JM/ÍI,É©þfü!ÃôC–¹û·ì/矬Ý<ÌÝ<,{j}ïüÞÌÿ½V€‘1<¯¶µoªs~AeQfzF‰‚‘±®.´THªTpÒSðJLÎÎ//ÎÎTHÌKQðÒóÕSðË/ f*häç)$¥f$æ¤)ä§)„¤F(„»+¸ù‡kêápšpf^Zf^fIeNjqqjaibNqfn&È , †" Ë»»{XÞŠé0g4fìû¾†ï?3ç †ïU›z}ï_Ñ]+÷g+[mEwyù¼î™ò?¶²Íœ×=_žïWMÃê’«/üy!ó/çï9¢ß™]¿³ÿæþ­bô[£´NÎãNWOé¼ìe[mº9~sØÿfüÍõ›ùâoöïÜßUž|×X8CþœUO׊ÕÇous|ç¸þñ;—|©˜º«ylÒ¢=qrù«âNå¯Ýxþú—ï¬Ý_*Êÿ‰)Mu·Wú P ýüôýÅ[÷wn)‰Ú!¿mfoïOG^h†0Ùendstream endobj 137 0 obj << /Filter /FlateDecode /Length 160 >> stream xœ]O1ƒ0 Üó ÿ’J ]ZUm?eÀ‰Búû’UÕá,ïN>W]éÙ%¨îÑã“XÇ&Òì—ˆŽ…T`¦•‰“¢ê®:¼Þ`5ÝøMOT=äé\Vr ¡745$šºnk[Alþ¤=0Øg†RRÿ¡äh.qÜ\b$N¥ii’ 8¦ï3Á‡œ‚â)%Sendstream endobj 138 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 279 >> stream xœcd`ab`dd÷ñõM,É®ÌMÊÏ)6× JM/ÍI,I©üfü!ÃôC–¹»ûç’ïËY»y˜»yXv~Ÿ*ô=Eð{"ÿ÷8fFÆðÜjçü‚Ê¢ÌôŒ#c]] i©T©à¤§à•˜œ_^œ©˜—¢à¥ç«§à—_ÌTÐÈÏSHJÍHÌISÈOSIP v Vpò ÖÔÃî4TQF ^ÆÀÄÈÈ¢ó} ßæš; ßËö0Ü'º¤¤»VîÏ;¶Ú’î¢âÅÝ3ä¼c›±¸{±<_ãÔÍ~ -ß´m×n9.æp}Îå{zz§öLš0¡o7sNßä‰SyxÅ.l!endstream endobj 139 0 obj << /Filter /FlateDecode /Length 160 >> stream xœ]O1à Üy…´£,é’¡UÕöĘˆ!2ô÷ $éÐáN²ïN>Ë®¿öì3ÈG ø¢ γM4‡%!Á@£g¡O`=æ}ªŒ“‰Bv7ߟH°ÈmóÝL$Ÿú¢ëJo! –æh’á‘D£TÛ8× bû'íÁíγn+”Z¹ø¥DK‰ã&à’q®Mk“RÀ3ýž‰!–¬_(hS endstream endobj 140 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 316 >> stream xœcd`ab`ddôñ ÊÏMÌ3× JM/ÍI, ªüfü!ÃôC–¹»ûGîOÖnæn–½ß— }üîÏÿÝG€™‘1<=ß9¿ ²(3=£DÁÈÀÀXWHZ*$U*8é)x%&gç—gg*$æ¥(xéùê)øå—34òó’R3sÒòÓBR#Bƒ]ƒ‚܃üC‚5õÐã3000201012²ø}_Ã÷ŸÉ²¡{ý%ë»×//ú>鎸ð޹bëSÙÕ»g¬‘ÿ±}YgO¾œ·AWR7‡ð‰töÅÝg»-çø3‰=«»N].5í»[?+_ùüγ¾çM2Ÿm=×-n9.–|Î¥½½½=}½“z'­^Áó|bï¦þžþIý“û'ñð20¡1rÝendstream endobj 141 0 obj << /Type /XRef /Length 181 /Filter /FlateDecode /DecodeParms << /Columns 5 /Predictor 12 >> /W [ 1 3 1 ] /Info 3 0 R /Root 2 0 R /Size 142 /ID [<1134172695517fd1be43173230bca16e><01ce63d26ea304e982d700fa35cfa6b3>] >> stream xœíÒ± AQÇñsÎÍE]Žì)o žÀÊcP’'±˜eP& Lƒ²32Š”Áuß”ÉÜ3|úõ;ÿ:ÿá8£ã¬1oÆ©°©©M9˜'9¼ê·øŒú²ÐÅ3.¹ÝaU–FLN¤mËìžÜ•ù™t Y‰è2X‘yËiê²’‰Ö{&Ÿ4Üòz|çöE>aG†lkk2ãè›2зØvM6ì“/¿­¾yj>þ|d endstream endobj startxref 84476 %%EOF RcppDist/README.md0000644000175100001440000000455213353766651013324 0ustar hornikusers# RcppDist [![Travis-CI Build Status](https://travis-ci.org/duckmayr/RcppDist.svg?branch=master)](https://travis-ci.org/duckmayr/RcppDist) [![AppVeyor Build Status](https://ci.appveyor.com/api/projects/status/github/duckmayr/RcppDist?branch=master&svg=true)](https://ci.appveyor.com/project/duckmayr/RcppDist) [![Coverage Status](https://codecov.io/github/duckmayr/RcppDist/graph/badge.svg)](https://codecov.io/github/duckmayr/RcppDist) [![License: GPL v2](https://img.shields.io/badge/License-GPL%20v2-blue.svg)](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html) The [Rcpp package](https://github.com/RcppCore/Rcpp) provides a C++ library to make it easier to use C++ with R. R and Rcpp provide functions for a variety of statistical distributions. Several R packages make functions available to R for additional statistical distributions. However, to access these functions from C++ code, a costly call to the R functions must be made. **RcppDist** provides a C++ library with functions for additional statistical distributions that can be called from C++ when writing code using Rcpp or [RcppArmadillo](https://github.com/RcppCore/RcppArmadillo). Functions are available that return NumericVectors as well as doubles, and for multivariate or matrix distributions, Armadillo vectors and matrices. RcppDist will provide functions for the following distributions: - The four parameter beta distribution - The location-scale t distribution - The truncated normal distribution - The truncated t distribution - A truncated location-scale t distribution - The triangular distribution - The multivariate normal distribution* - The multivariate t distribution* - The Wishart distribution* - The inverse Wishart distribution* Distributions marked with an asterisk rely on RcppArmadillo; if a user would prefer to use Rcpp but *not* RcppArmadillo (i.e. include the Rcpp headers but not the RcppArmadillo headers), include the line #define RCPPDIST_DONT_USE_ARMA before including `RcppDist.h`, though this will make the asterisked distributions unavailable. The distributions above were selected for inclusion because I already had occasion to generate C++ code for use with Rcpp (or RcppArmadillo) for these distributions, but I am open to requests to expand the package to include additional distributions -- just open an issue with the requested feature. ### License GPL (>= 2) RcppDist/build/0000755000175100001440000000000015022504773013124 5ustar hornikusersRcppDist/build/vignette.rds0000644000175100001440000000031515022504773015462 0ustar hornikusers‹‹àb```b`a’Ì@&³0r€˜‘…Hó%¸d—è妠ɉÂä<óJŠòSJ“K2óópP’†&Ç…0èa° D°0!©dÍKÌM-FÓÎî’Zš—þ‡]?ã4-Þ©•åùE0=(jØ jXÜ2sRaö†d–À9Ì.nP&cº0ÌGq?gQ~¹Ì¼ poÿÝ£É9‰ÅèåJI,IÔK+ê¹ïâ¶#¹RcppDist/configure0000755000175100001440000034374115022504774013751 0ustar hornikusers#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.72 for RcppDist 0.1.0. # # # Copyright (C) 1992-1996, 1998-2017, 2020-2023 Free Software Foundation, # Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case e in #( e) case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as 'sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed 'exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case e in #( e) case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ) then : else case e in #( e) exitcode=1; echo positional parameters were not saved. ;; esac fi test x\$exitcode = x0 || exit 1 blah=\$(echo \$(echo blah)) test x\"\$blah\" = xblah || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1" if (eval "$as_required") 2>/dev/null then : as_have_required=yes else case e in #( e) as_have_required=no ;; esac fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null then : else case e in #( e) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && as_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$as_shell as_have_required=yes if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null then : break 2 fi fi done;; esac as_found=false done IFS=$as_save_IFS if $as_found then : else case e in #( e) if { test -f "$SHELL" || test -f "$SHELL.exe"; } && as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$SHELL as_have_required=yes fi ;; esac fi if test "x$CONFIG_SHELL" != x then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed 'exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno then : printf "%s\n" "$0: This script requires a shell more modern than all" printf "%s\n" "$0: the shells that I found on your system." if test ${ZSH_VERSION+y} ; then printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should" printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later." else printf "%s\n" "$0: Please tell bug-autoconf@gnu.org about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi ;; esac fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null then : eval 'as_fn_append () { eval $1+=\$2 }' else case e in #( e) as_fn_append () { eval $1=\$$1\$2 } ;; esac fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null then : eval 'as_fn_arith () { as_val=$(( $* )) }' else case e in #( e) as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } ;; esac fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' t clear :clear s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { printf "%s\n" "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_echo='printf %s\n' as_echo_n='printf %s' rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both 'ln -s file dir' and 'ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; 'ln -s' creates a wrapper executable. # In both cases, we have to default to 'cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_sed_cpp="y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" as_tr_cpp="eval sed '$as_sed_cpp'" # deprecated # Sed expression to map a string onto a valid variable name. as_sed_sh="y%*+%pp%;s%[^_$as_cr_alnum]%_%g" as_tr_sh="eval sed '$as_sed_sh'" # deprecated test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='RcppDist' PACKAGE_TARNAME='rcppdist' PACKAGE_VERSION='0.1.0' PACKAGE_STRING='RcppDist 0.1.0' PACKAGE_BUGREPORT='' PACKAGE_URL='' ac_subst_vars='LTLIBOBJS LIBOBJS OPENMP_FLAG OPENMP_CFLAG CXXCPP OBJEXT EXEEXT ac_ct_CXX CPPFLAGS LDFLAGS CXXFLAGS CXX target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir runstatedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking ' ac_precious_vars='build_alias host_alias target_alias CXX CXXFLAGS LDFLAGS LIBS CPPFLAGS CCC CXXCPP' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -runstatedir | --runstatedir | --runstatedi | --runstated \ | --runstate | --runstat | --runsta | --runst | --runs \ | --run | --ru | --r) ac_prev=runstatedir ;; -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ | --run=* | --ru=* | --r=*) runstatedir=$ac_optarg ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: '$ac_option' Try '$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: '$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && printf "%s\n" "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: '$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but 'cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF 'configure' configures RcppDist 0.1.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print 'checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for '--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or '..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, 'make install' will install all the files in '$ac_default_prefix/bin', '$ac_default_prefix/lib' etc. You can specify an installation prefix other than '$ac_default_prefix' using '--prefix', for instance '--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/rcppdist] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of RcppDist 0.1.0:";; esac cat <<\_ACEOF Some influential environment variables: CXX C++ compiler command CXXFLAGS C++ compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CXXCPP C++ preprocessor Use these variables to override the choices made by 'configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to the package provider. _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for configure.gnu first; this name is used for a wrapper for # Metaconfig's "Configure" on case-insensitive file systems. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else printf "%s\n" "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF RcppDist configure 0.1.0 generated by GNU Autoconf 2.72 Copyright (C) 2023 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_cxx_try_compile LINENO # ---------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext then : ac_retval=0 else case e in #( e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 ;; esac fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_compile # ac_fn_cxx_try_cpp LINENO # ------------------------ # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err } then : ac_retval=0 else case e in #( e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 ;; esac fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_cpp ac_configure_args_raw= for ac_arg do case $ac_arg in *\'*) ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append ac_configure_args_raw " '$ac_arg'" done case $ac_configure_args_raw in *$as_nl*) ac_safe_unquote= ;; *) ac_unsafe_z='|&;<>()$`\\"*?[ '' ' # This string ends in space, tab. ac_unsafe_a="$ac_unsafe_z#~" ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g" ac_configure_args_raw=` printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;; esac cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by RcppDist $as_me 0.1.0, which was generated by GNU Autoconf 2.72. Invocation command line was $ $0$ac_configure_args_raw _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac printf "%s\n" "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Sanitize IFS. IFS=" "" $as_nl" # Save into config.log some information that might help in debugging. { echo printf "%s\n" "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo printf "%s\n" "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then printf "%s\n" "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then printf "%s\n" "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && printf "%s\n" "$as_me: caught signal $ac_signal" printf "%s\n" "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h printf "%s\n" "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. printf "%s\n" "#define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h printf "%s\n" "#define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h printf "%s\n" "#define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h printf "%s\n" "#define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h printf "%s\n" "#define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h printf "%s\n" "#define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. if test -n "$CONFIG_SITE"; then ac_site_files="$CONFIG_SITE" elif test "x$prefix" != xNONE; then ac_site_files="$prefix/share/config.site $prefix/etc/config.site" else ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi for ac_site_file in $ac_site_files do case $ac_site_file in #( */*) : ;; #( *) : ac_site_file=./$ac_site_file ;; esac if test -f "$ac_site_file" && test -r "$ac_site_file"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See 'config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 printf "%s\n" "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 printf "%s\n" "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Test code for whether the C++ compiler supports C++98 (global declarations) ac_cxx_conftest_cxx98_globals=' // Does the compiler advertise C++98 conformance? #if !defined __cplusplus || __cplusplus < 199711L # error "Compiler does not advertise C++98 conformance" #endif // These inclusions are to reject old compilers that // lack the unsuffixed header files. #include #include // and are *not* freestanding headers in C++98. extern void assert (int); namespace std { extern int strcmp (const char *, const char *); } // Namespaces, exceptions, and templates were all added after "C++ 2.0". using std::exception; using std::strcmp; namespace { void test_exception_syntax() { try { throw "test"; } catch (const char *s) { // Extra parentheses suppress a warning when building autoconf itself, // due to lint rules shared with more typical C programs. assert (!(strcmp) (s, "test")); } } template struct test_template { T const val; explicit test_template(T t) : val(t) {} template T add(U u) { return static_cast(u) + val; } }; } // anonymous namespace ' # Test code for whether the C++ compiler supports C++98 (body of main) ac_cxx_conftest_cxx98_main=' assert (argc); assert (! argv[0]); { test_exception_syntax (); test_template tt (2.0); assert (tt.add (4) == 6.0); assert (true && !false); } ' # Test code for whether the C++ compiler supports C++11 (global declarations) ac_cxx_conftest_cxx11_globals=' // Does the compiler advertise C++ 2011 conformance? #if !defined __cplusplus || __cplusplus < 201103L # error "Compiler does not advertise C++11 conformance" #endif namespace cxx11test { constexpr int get_val() { return 20; } struct testinit { int i; double d; }; class delegate { public: delegate(int n) : n(n) {} delegate(): delegate(2354) {} virtual int getval() { return this->n; }; protected: int n; }; class overridden : public delegate { public: overridden(int n): delegate(n) {} virtual int getval() override final { return this->n * 2; } }; class nocopy { public: nocopy(int i): i(i) {} nocopy() = default; nocopy(const nocopy&) = delete; nocopy & operator=(const nocopy&) = delete; private: int i; }; // for testing lambda expressions template Ret eval(Fn f, Ret v) { return f(v); } // for testing variadic templates and trailing return types template auto sum(V first) -> V { return first; } template auto sum(V first, Args... rest) -> V { return first + sum(rest...); } } ' # Test code for whether the C++ compiler supports C++11 (body of main) ac_cxx_conftest_cxx11_main=' { // Test auto and decltype auto a1 = 6538; auto a2 = 48573953.4; auto a3 = "String literal"; int total = 0; for (auto i = a3; *i; ++i) { total += *i; } decltype(a2) a4 = 34895.034; } { // Test constexpr short sa[cxx11test::get_val()] = { 0 }; } { // Test initializer lists cxx11test::testinit il = { 4323, 435234.23544 }; } { // Test range-based for int array[] = {9, 7, 13, 15, 4, 18, 12, 10, 5, 3, 14, 19, 17, 8, 6, 20, 16, 2, 11, 1}; for (auto &x : array) { x += 23; } } { // Test lambda expressions using cxx11test::eval; assert (eval ([](int x) { return x*2; }, 21) == 42); double d = 2.0; assert (eval ([&](double x) { return d += x; }, 3.0) == 5.0); assert (d == 5.0); assert (eval ([=](double x) mutable { return d += x; }, 4.0) == 9.0); assert (d == 5.0); } { // Test use of variadic templates using cxx11test::sum; auto a = sum(1); auto b = sum(1, 2); auto c = sum(1.0, 2.0, 3.0); } { // Test constructor delegation cxx11test::delegate d1; cxx11test::delegate d2(); cxx11test::delegate d3(45); } { // Test override and final cxx11test::overridden o1(55464); } { // Test nullptr char *c = nullptr; } { // Test template brackets test_template<::test_template> v(test_template(12)); } { // Unicode literals char const *utf8 = u8"UTF-8 string \u2500"; char16_t const *utf16 = u"UTF-8 string \u2500"; char32_t const *utf32 = U"UTF-32 string \u2500"; } ' # Test code for whether the C compiler supports C++11 (complete). ac_cxx_conftest_cxx11_program="${ac_cxx_conftest_cxx98_globals} ${ac_cxx_conftest_cxx11_globals} int main (int argc, char **argv) { int ok = 0; ${ac_cxx_conftest_cxx98_main} ${ac_cxx_conftest_cxx11_main} return ok; } " # Test code for whether the C compiler supports C++98 (complete). ac_cxx_conftest_cxx98_program="${ac_cxx_conftest_cxx98_globals} int main (int argc, char **argv) { int ok = 0; ${ac_cxx_conftest_cxx98_main} return ok; } " # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' was set to '$ac_old_val' in the previous run" >&5 printf "%s\n" "$as_me: error: '$ac_var' was set to '$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' was not set in the previous run" >&5 printf "%s\n" "$as_me: error: '$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' has changed since the previous run:" >&5 printf "%s\n" "$as_me: error: '$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in '$ac_var' since the previous run:" >&5 printf "%s\n" "$as_me: warning: ignoring whitespace changes in '$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: '$ac_old_val'" >&5 printf "%s\n" "$as_me: former value: '$ac_old_val'" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: '$ac_new_val'" >&5 printf "%s\n" "$as_me: current value: '$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`printf "%s\n" "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run '${MAKE-make} distclean' and/or 'rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ## Set R_HOME, respecting an environment variable if one is set : ${R_HOME=$(R RHOME)} if test -z "${R_HOME}"; then as_fn_error $? "Could not determine R_HOME." "$LINENO" 5 fi ## Use R to set CXX and CXXFLAGS CXX=$(${R_HOME}/bin/R CMD config CXX) CXXFLAGS=$("${R_HOME}/bin/R" CMD config CXXFLAGS) ## We are using C++ ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -z "$CXX"; then if test -n "$CCC"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC clang++ do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CXX+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 printf "%s\n" "$CXX" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC clang++ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CXX+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CXX="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 printf "%s\n" "$ac_ct_CXX" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_CXX" && break done if test "x$ac_ct_CXX" = x; then CXX="g++" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CXX=$ac_ct_CXX fi fi fi fi # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C++ compiler works" >&5 printf %s "checking whether the C++ compiler works... " >&6; } ac_link_default=`printf "%s\n" "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : # Autoconf-2.13 could set the ac_cv_exeext variable to 'no'. # So ignore a value of 'no', otherwise this would lead to 'EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test ${ac_cv_exeext+y} && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an '-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else case e in #( e) ac_file='' ;; esac fi if test -z "$ac_file" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error 77 "C++ compiler cannot create executables See 'config.log' for more details" "$LINENO" 5; } else case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++ compiler default output file name" >&5 printf %s "checking for C++ compiler default output file name... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 printf "%s\n" "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 printf %s "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : # If both 'conftest.exe' and 'conftest' are 'present' (well, observable) # catch 'conftest.exe'. For instance with Cygwin, 'ls conftest' will # work properly (i.e., refer to 'conftest.exe'), while it won't with # 'rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else case e in #( e) { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See 'config.log' for more details" "$LINENO" 5; } ;; esac fi rm -f conftest conftest$ac_cv_exeext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 printf "%s\n" "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { FILE *f = fopen ("conftest.out", "w"); if (!f) return 1; return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 printf %s "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error 77 "cannot run C++ compiled programs. If you meant to cross compile, use '--host'. See 'config.log' for more details" "$LINENO" 5; } fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 printf "%s\n" "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext \ conftest.o conftest.obj conftest.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 printf %s "checking for suffix of object files... " >&6; } if test ${ac_cv_objext+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else case e in #( e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See 'config.log' for more details" "$LINENO" 5; } ;; esac fi rm -f conftest.$ac_cv_objext conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 printf "%s\n" "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C++" >&5 printf %s "checking whether the compiler supports GNU C++... " >&6; } if test ${ac_cv_cxx_compiler_gnu+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : ac_compiler_gnu=yes else case e in #( e) ac_compiler_gnu=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 printf "%s\n" "$ac_cv_cxx_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test $ac_compiler_gnu = yes; then GXX=yes else GXX= fi ac_test_CXXFLAGS=${CXXFLAGS+y} ac_save_CXXFLAGS=$CXXFLAGS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 printf %s "checking whether $CXX accepts -g... " >&6; } if test ${ac_cv_prog_cxx_g+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : ac_cv_prog_cxx_g=yes else case e in #( e) CXXFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : else case e in #( e) ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : ac_cv_prog_cxx_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cxx_werror_flag=$ac_save_cxx_werror_flag ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 printf "%s\n" "$ac_cv_prog_cxx_g" >&6; } if test $ac_test_CXXFLAGS; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi ac_prog_cxx_stdcxx=no if test x$ac_prog_cxx_stdcxx = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++11 features" >&5 printf %s "checking for $CXX option to enable C++11 features... " >&6; } if test ${ac_cv_prog_cxx_cxx11+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_cv_prog_cxx_cxx11=no ac_save_CXX=$CXX cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_cxx_conftest_cxx11_program _ACEOF for ac_arg in '' -std=gnu++11 -std=gnu++0x -std=c++11 -std=c++0x -qlanglvl=extended0x -AA do CXX="$ac_save_CXX $ac_arg" if ac_fn_cxx_try_compile "$LINENO" then : ac_cv_prog_cxx_cxx11=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cxx_cxx11" != "xno" && break done rm -f conftest.$ac_ext CXX=$ac_save_CXX ;; esac fi if test "x$ac_cv_prog_cxx_cxx11" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else case e in #( e) if test "x$ac_cv_prog_cxx_cxx11" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx11" >&5 printf "%s\n" "$ac_cv_prog_cxx_cxx11" >&6; } CXX="$CXX $ac_cv_prog_cxx_cxx11" ;; esac fi ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx11 ac_prog_cxx_stdcxx=cxx11 ;; esac fi fi if test x$ac_prog_cxx_stdcxx = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++98 features" >&5 printf %s "checking for $CXX option to enable C++98 features... " >&6; } if test ${ac_cv_prog_cxx_cxx98+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_cv_prog_cxx_cxx98=no ac_save_CXX=$CXX cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_cxx_conftest_cxx98_program _ACEOF for ac_arg in '' -std=gnu++98 -std=c++98 -qlanglvl=extended -AA do CXX="$ac_save_CXX $ac_arg" if ac_fn_cxx_try_compile "$LINENO" then : ac_cv_prog_cxx_cxx98=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cxx_cxx98" != "xno" && break done rm -f conftest.$ac_ext CXX=$ac_save_CXX ;; esac fi if test "x$ac_cv_prog_cxx_cxx98" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else case e in #( e) if test "x$ac_cv_prog_cxx_cxx98" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx98" >&5 printf "%s\n" "$ac_cv_prog_cxx_cxx98" >&6; } CXX="$CXX $ac_cv_prog_cxx_cxx98" ;; esac fi ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx98 ac_prog_cxx_stdcxx=cxx98 ;; esac fi fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 printf %s "checking how to run the C++ preprocessor... " >&6; } if test -z "$CXXCPP"; then if test ${ac_cv_prog_CXXCPP+y} then : printf %s "(cached) " >&6 else case e in #( e) # Double quotes because $CXX needs to be expanded for CXXCPP in "$CXX -E" cpp /lib/cpp do ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include Syntax error _ACEOF if ac_fn_cxx_try_cpp "$LINENO" then : else case e in #( e) # Broken: fails on valid input. continue ;; esac fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_cxx_try_cpp "$LINENO" then : # Broken: success on invalid input. continue else case e in #( e) # Passes both tests. ac_preproc_ok=: break ;; esac fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of 'break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok then : break fi done ac_cv_prog_CXXCPP=$CXXCPP ;; esac fi CXXCPP=$ac_cv_prog_CXXCPP else ac_cv_prog_CXXCPP=$CXXCPP fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 printf "%s\n" "$CXXCPP" >&6; } ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include Syntax error _ACEOF if ac_fn_cxx_try_cpp "$LINENO" then : else case e in #( e) # Broken: fails on valid input. continue ;; esac fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_cxx_try_cpp "$LINENO" then : # Broken: success on invalid input. continue else case e in #( e) # Passes both tests. ac_preproc_ok=: break ;; esac fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of 'break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok then : else case e in #( e) { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check See 'config.log' for more details" "$LINENO" 5; } ;; esac fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ## Default the OpenMP flag to the empty string. ## If and only if OpenMP is found, expand to $(SHLIB_OPENMP_CXXFLAGS) openmp_flag="" openmp_cflag="" ## Check for broken systems produced by a corporation based in Cupertino { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for macOS" >&5 printf %s "checking for macOS... " >&6; } RSysinfoName=$("${R_HOME}/bin/Rscript" --vanilla -e 'cat(Sys.info()["sysname"])') if test x"${RSysinfoName}" = x"Darwin"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: found" >&5 printf "%s\n" "found" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: OpenMP unavailable and turned off." >&5 printf "%s\n" "$as_me: WARNING: OpenMP unavailable and turned off." >&2;} openmp_flag="-DARMA_DONT_USE_OPENMP" else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found as on ${RSysinfoName}" >&5 printf "%s\n" "not found as on ${RSysinfoName}" >&6; } ## Check for OpenMP { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for OpenMP" >&5 printf %s "checking for OpenMP... " >&6; } ## if R has -fopenmp we should be good allldflags=$(${R_HOME}/bin/R CMD config --ldflags) hasOpenMP=$(echo ${allldflags} | grep -- -fopenmp) if test x"${hasOpenMP}" = x""; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: missing" >&5 printf "%s\n" "missing" >&6; } openmp_flag="-DARMA_DONT_USE_OPENMP" else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: found" >&5 printf "%s\n" "found" >&6; } openmp_flag='$(SHLIB_OPENMP_CXXFLAGS)' openmp_cflag='$(SHLIB_OPENMP_CFLAGS)' fi fi OPENMP_CFLAG="${openmp_cflag}" OPENMP_FLAG="${openmp_flag}" ac_config_files="$ac_config_files src/Makevars" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # 'ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* 'ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # 'set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # 'set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test ${\1+y} || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 printf "%s\n" "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 printf "%s\n" "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # Transform confdefs.h into DEFS. # Protect against shell expansion while executing Makefile rules. # Protect against Makefile macro expansion. # # If the first sed substitution is executed (which looks for macros that # take arguments), then branch to the quote section. Otherwise, # look for a macro that doesn't take arguments. ac_script=' :mline /\\$/{ N s,\\\n,, b mline } t clear :clear s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g t quote s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g t quote b any :quote s/[][ `~#$^&*(){}\\|;'\''"<>?]/\\&/g s/\$/$$/g H :any ${ g s/^\n// s/\n/ /g p } ' DEFS=`sed -n "$ac_script" confdefs.h` ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`printf "%s\n" "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 printf "%s\n" "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case e in #( e) case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as 'sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null then : eval 'as_fn_append () { eval $1+=\$2 }' else case e in #( e) as_fn_append () { eval $1=\$$1\$2 } ;; esac fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null then : eval 'as_fn_arith () { as_val=$(( $* )) }' else case e in #( e) as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } ;; esac fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_echo='printf %s\n' as_echo_n='printf %s' rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both 'ln -s file dir' and 'ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; 'ln -s' creates a wrapper executable. # In both cases, we have to default to 'cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_sed_cpp="y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" as_tr_cpp="eval sed '$as_sed_cpp'" # deprecated # Sed expression to map a string onto a valid variable name. as_sed_sh="y%*+%pp%;s%[^_$as_cr_alnum]%_%g" as_tr_sh="eval sed '$as_sed_sh'" # deprecated exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by RcppDist $as_me 0.1.0, which was generated by GNU Autoconf 2.72. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ '$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE Configuration files: $config_files Report bugs to the package provider." _ACEOF ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"` ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"` cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ RcppDist config.status 0.1.0 configured by $0, generated by GNU Autoconf 2.72, with options \\"\$ac_cs_config\\" Copyright (C) 2023 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) printf "%s\n" "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) printf "%s\n" "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --he | --h | --help | --hel | -h ) printf "%s\n" "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: '$1' Try '$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \printf "%s\n" "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX printf "%s\n" "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "src/Makevars") CONFIG_FILES="$CONFIG_FILES src/Makevars" ;; *) as_fn_error $? "invalid argument: '$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test ${CONFIG_FILES+y} || CONFIG_FILES=$config_files fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to '$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with './config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" eval set X " :F $CONFIG_FILES " shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag '$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain ':'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: '$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is 'configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 printf "%s\n" "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`printf "%s\n" "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when '$srcdir' = '.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable 'datarootdir' which seems to be undefined. Please make sure it is defined" >&5 printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable 'datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi RcppDist/man/0000755000175100001440000000000013360675600012601 5ustar hornikusersRcppDist/man/bayeslm.Rd0000644000175100001440000000453113361067552014531 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/RcppExports.R \name{bayeslm} \alias{bayeslm} \title{bayeslm} \usage{ bayeslm(y, x, iters = 1000L) } \arguments{ \item{y}{A numeric vector -- the response} \item{x}{A numeric matrix -- the explanatory variables; note this assumes you have included a column of ones if you intend there to be an intercept.} \item{iters}{An integer vector of length one, the number of posterior draws desired; the default is 1000.} } \value{ A list of length two; the first element is a numeric matrix of the beta draws and the second element is a numeric vector of the sigma draws } \description{ Demonstrates the use of RcppDist in C++ with Bayesian linear regression } \details{ To see an example of using RcppDist C++ functions in C++ code, we can code up a Bayesian linear regression with completely uninformative priors (such that estimates should be equivalent to classical estimates). The code to do so is as follows: \preformatted{ #include // or, alternatively, // #include // #include // [[Rcpp::depends(RcppArmadillo, RcppDist)]] // [[Rcpp::export]] Rcpp::List bayeslm(const arma::vec& y, const arma::mat x, const int iters = 1000) { int n = x.n_rows; int p = x.n_cols; double a = (n - p) / 2.0; arma::mat xtx = x.t() * x; arma::mat xtxinv = xtx.i(); arma::vec mu = xtxinv * x.t() * y; arma::mat px = x * xtxinv * x.t(); double ssq = arma::as_scalar(y.t() * (arma::eye(n, n) - px) * y); ssq *= (1.0 / (n - p)); double b = 1.0 / (a * ssq); arma::mat beta_draws(iters, p); Rcpp::NumericVector sigma_draws(iters); for ( int iter = 0; iter < iters; ++iter ) { double sigmasq = 1.0 / R::rgamma(a, b); sigma_draws[iter] = sigmasq; // Here we can use our multivariate normal generator beta_draws.row(iter) = rmvnorm(1, mu, xtxinv * sigmasq); } return Rcpp::List::create(Rcpp::_["beta_draws"] = beta_draws, Rcpp::_["sigma_draws"] = sigma_draws); } } } \examples{ set.seed(123) n <- 30 x <- cbind(1, matrix(rnorm(n*3), ncol = 3)) beta <- matrix(c(10, 2, -1, 3), nrow = 4) y <- x \%*\% beta + rnorm(n) freqmod <- lm(y ~ x[ , -1]) bayesmod <- bayeslm(y, x) round(unname(coef(freqmod)), 2) round(apply(bayesmod$beta_draws, 2, mean), 2) c(beta) } RcppDist/man/RcppDist.Rd0000644000175100001440000000406313362766504014631 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/RcppDist-package.R \docType{package} \name{RcppDist} \alias{RcppDist} \alias{RcppDist-package} \title{RcppDist} \description{ 'Rcpp' Integration of Additional Probability Distributions } \details{ The 'Rcpp' package provides a C++ library to make it easier to use C++ with R. R and 'Rcpp' provide functions for a variety of statistical distributions. Several R packages make functions available to R for additional statistical distributions. However, to access these functions from C++ code, a costly call to the R functions must be made. 'RcppDist' provides a header-only C++ library with functions for additional statistical distributions that can be called from C++ when writing code using 'Rcpp' or 'RcppArmadillo'. Functions are available that return a 'NumericVector' as well as doubles, and for multivariate or matrix distributions, 'Armadillo' vectors and matrices. RcppDist provides functions for the following distributions: \itemize{ \item The four parameter beta distribution \item The location-scale t distribution \item The truncated normal distribution \item The truncated t distribution \item A truncated location-scale t distribution \item The triangle distribution \item The multivariate normal distribution* \item The multivariate t distribution* \item The Wishart distribution* \item And the inverse Wishart distribution*. } Distributions marked with an asterisk rely also on RcppArmadillo. For more information on using 'RcppDist' functions in your C++ code, please consult the vignette via \code{vignette("RcppDist")}; the vignette explains how to link to the package and include the headers, which header files provide which functions, and also provides all function declarations (so that you can see the function and argument names and return/argument types; the arguments are also described in reasonable detail). You can also see an example of using the multivariate normal generator provided by 'RcppDist' in the function \code{\link{bayeslm}}. } \author{ JB Duck-Mayr } RcppDist/DESCRIPTION0000644000175100001440000000406115022510723013524 0ustar hornikusersPackage: RcppDist Title: 'Rcpp' Integration of Additional Probability Distributions Version: 0.1.1.1 Authors@R: person(given = "JB", family = "Duck-Mayr", email = "j.duckmayr@gmail.com", role = c("aut", "cre"), comment = c(ORCID = "0000-0002-2231-1294")) Description: The 'Rcpp' package provides a C++ library to make it easier to use C++ with R. R and 'Rcpp' provide functions for a variety of statistical distributions. Several R packages make functions available to R for additional statistical distributions. However, to access these functions from C++ code, a costly call to the R functions must be made. 'RcppDist' provides a header-only C++ library with functions for additional statistical distributions that can be called from C++ when writing code using 'Rcpp' or 'RcppArmadillo'. Functions are available that return a 'NumericVector' as well as doubles, and for multivariate or matrix distributions, 'Armadillo' vectors and matrices. 'RcppDist' provides functions for the following distributions: the four parameter beta distribution; the location- scale t distribution; the truncated normal distribution; the truncated t distribution; a truncated location-scale t distribution; the triangle distribution; the multivariate normal distribution*; the multivariate t distribution*; the Wishart distribution*; and the inverse Wishart distribution*. Distributions marked with an asterisk rely on 'RcppArmadillo'. License: GPL (>= 2.0) URL: https://github.com/duckmayr/RcppDist BugReports: https://github.com/duckmayr/RcppDist/issues Depends: R (>= 3.0.0) Encoding: UTF-8 LinkingTo: Rcpp, RcppArmadillo Imports: Rcpp RoxygenNote: 6.1.0 Suggests: testthat, knitr, rmarkdown VignetteBuilder: knitr NeedsCompilation: yes Packaged: 2025-06-12 08:04:12 UTC; hornik Author: JB Duck-Mayr [aut, cre] (ORCID: ) Maintainer: JB Duck-Mayr Repository: CRAN Date/Publication: 2025-06-12 08:37:39 UTC