Warning, /frameworks/syntax-highlighting/autotests/input/highlight.stan is written in an unsupported language. File is not indexed.
0001 /* Stan Highlighting Example
0002
0003 This file contains a syntatically correct but nonsensical Stan program that
0004 includes almost every feature of the language needed to validate syntax
0005 highlighters. It will compile (as of Stan 2.17.1), but it does nothing
0006 useful.
0007
0008 Author: Jeffrey Arnold <jeffrey.anold@gmail.com>
0009 Copyright: Jeffrey Arnold (2018)
0010 License: MIT
0011
0012 */
0013 // line comment
0014 # deprecated line comment
0015 functions {
0016 #include stuff.stan
0017 #include "morestuff.stan"
0018 #include 'moststuff.stan'
0019 #include <evenmorestuff.stan>
0020
0021 // declarations
0022 void oof(real x);
0023
0024 // definitions
0025 // return types
0026 void oof(real x) {
0027 print("print ", x);
0028 }
0029 /*
0030 @param x A number
0031 @return x + 1
0032 */
0033 real foo(real x) {
0034 return x;
0035 }
0036 int bar(int x) {
0037 return x;
0038 }
0039 vector baz(vector x) {
0040 return x;
0041 }
0042 row_vector qux(row_vector x) {
0043 return x;
0044 }
0045 matrix quux(matrix x) {
0046 return x;
0047 }
0048 // numbers of arguments
0049 void corge() {
0050 print("no parameters");
0051 }
0052 void grault(int a, real b, vector c, row_vector d, matrix f) {
0053 print("many parameters");
0054 }
0055 void garply(real a, real[] b, real[,] c, real[,,] d) {
0056 print("array arguments");
0057 }
0058 // array return types
0059 int[] waldo(int[] x) {
0060 return x;
0061 }
0062 int[,] fred(int[,] x) {
0063 return x;
0064 }
0065 int[,,] plough(int[,,] x) {
0066 return x;
0067 }
0068 // data only function argument
0069 real plugh(data real x) {
0070 return x;
0071 }
0072 // ode function
0073 real[] ode_func(real a, real[] b, real[] c, real[] d, int[] e) {
0074 return b;
0075 }
0076 }
0077 data {
0078 // non-int variable types
0079 int x_int;
0080 real x_real;
0081 real y_real;
0082 vector[1] x_vector;
0083 ordered[1] x_ordered;
0084 positive_ordered[1] x_positive_ordered;
0085 simplex[1] x_simplex;
0086 unit_vector[1] x_unit_vector;
0087 row_vector[1] x_row_vector;
0088 matrix[1, 1] x_matrix;
0089 cholesky_factor_corr[2] x_cholesky_factor_corr;
0090 cholesky_factor_cov[2] x_cholesky_factor_cov;
0091 cholesky_factor_cov[2, 3] x_cholesky_factor_cov_2;
0092 corr_matrix[2] x_corr_matrix;
0093 cov_matrix[2] x_cov_matrix;
0094
0095 // range constraints
0096 real<lower = 0., upper = 1.> alpha;
0097 real<lower = 0.> bravo;
0098 real<upper = 1.> charlie;
0099
0100 // arrays
0101 int echo[1];
0102 int foxtrot[1, 1];
0103 int golf[1, 1, 1];
0104
0105 // identifier with all valid letters
0106 real abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789;
0107
0108 // hard pattern
0109 real<lower = (bravo < charlie), upper = (bravo > charlie)> ranger;
0110
0111 // identifier patterns
0112 real a;
0113 real a3;
0114 real a_3;
0115 real Sigma;
0116 real my_cpp_style_variable;
0117 real myCamelCaseVariable;
0118 real abcdefghijklmnojk;
0119 // names beginning with keywords
0120 real iffffff;
0121 real whilest;
0122 // name ending with truncation
0123 real fooT;
0124
0125 // new array syntax
0126 array [N] real foo_new;
0127 }
0128
0129 transformed data {
0130 // declaration and assignment
0131 int india = 1;
0132 real romeo = 1.0;
0133 row_vector[2] victor = [1, 2];
0134 matrix[2, 2] mike = [[1, 2], [3, 4]];
0135 real sierra[2] = {1., 2.};
0136 complex zulu = 3+4.1i;
0137 }
0138 parameters {
0139 real hotel;
0140 real<offset = 0., multiplier = 1.> alpha;
0141 }
0142 transformed parameters {
0143 real juliette;
0144 juliette = hotel * 2.;
0145 }
0146 model {
0147 real x;
0148 int k;
0149 vector[2] y = [1., 1.]';
0150 matrix[2, 2] A = [[1., 1.], [1., 1.]];
0151 real odeout[2, 2];
0152 real algout[2, 2];
0153
0154 // if else statements
0155 if (x_real < 0) x = 0.;
0156
0157 if (x_real < 0) {
0158 x = 0.;
0159 }
0160
0161 if (x_real < 0) x = 0.;
0162 else x = 1.;
0163
0164 if (x_real < 0) {
0165 x = 0.;
0166 } else {
0167 x = 1.;
0168 }
0169
0170 if (x_real < 0) x = 0.;
0171 else if (x_real > 1) x = 1.;
0172 else x = 0.5;
0173
0174 if (x_real < 0) {
0175 x = 0.;
0176 } else if (x_real > 1) {
0177 x = 1.;
0178 } else {
0179 x = 0.5;
0180 }
0181
0182 // for loops
0183 for (i in 1:5) {
0184 print("i = ", i);
0185 }
0186 // for (j in echo) {
0187 // print("j = ", j);
0188 // }
0189 // while loop
0190 while (1) {
0191 break;
0192 continue;
0193 }
0194
0195 // reject statement
0196 reject("reject statment ", x_real);
0197
0198 // print statement
0199 print("print statement ", x_real);
0200 print("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_~@#$%^&*`'-+={}[].,;: ");
0201
0202 // increment log probability statements;
0203 target += 1.;
0204
0205 // valid integer literals
0206 k = 0;
0207 k = 1;
0208 k = -1;
0209 k = 256;
0210 k = -127098;
0211 k = 007;
0212
0213 // valid real literals
0214 x = 0.0;
0215 x = 1.0;
0216 x = 3.14;
0217 x = 003.14;
0218 x = -217.9387;
0219 x = 0.123;
0220 x = .123;
0221 x = 1.;
0222 x = -0.123;
0223 x = -.123;
0224 x = -1.;
0225 x = 12e34;
0226 x = 12E34;
0227 x = 12.e34;
0228 x = 12.E34;
0229 x = 12.0e34;
0230 x = 12.0E34;
0231 x = .1e34;
0232 x = .1E34;
0233 x = -12e34;
0234 x = -12E34;
0235 x = -12.e34;
0236 x = -12.E34;
0237 x = -12.0e34;
0238 x = -12.0E34;
0239 x = -.1e34;
0240 x = -.1E34;
0241 x = 12e-34;
0242 x = 12E-34;
0243 x = 12.e-34;
0244 x = 12.E-34;
0245 x = 12.0e-34;
0246 x = 12.0E-34;
0247 x = .1e-34;
0248 x = .1E-34;
0249 x = -12e-34;
0250 x = -12E-34;
0251 x = -12.e-34;
0252 x = -12.E-34;
0253 x = -12.0e-34;
0254 x = -12.0E-34;
0255 x = -.1e-34;
0256 x = -.1E-34;
0257 x = 12e+34;
0258 x = 12E+34;
0259 x = 12.e+34;
0260 x = 12.E+34;
0261 x = 12.0e+34;
0262 x = 12.0E+34;
0263 x = .1e+34;
0264 x = .1E+34;
0265 x = -12e+34;
0266 x = -12E+34;
0267 x = -12.e+34;
0268 x = -12.E+34;
0269 x = -12.0e+34;
0270 x = -12.0E+34;
0271 x = -.1e+34;
0272 x = -.1E+34;
0273
0274 // imaginary literals
0275 complex z = 3 + 3i;
0276 z = 2.3i;
0277 z = 3.4e10i;
0278 z = 0i;
0279
0280 // assignment statements
0281 x = 1;
0282 x += 1.;
0283 x -= 1.;
0284 x *= 1.;
0285 x /= 1.;
0286 y .*= x_vector;
0287 y ./= x_vector;
0288
0289 // operators
0290 x = x_real && 1;
0291 x = x_real || 1;
0292 x = x_real < 1.;
0293 x = x_real <= 1.;
0294 x = x_real > 1.;
0295 x = x_real >= 1.;
0296 x = x_real + 1.;
0297 x = x_real - 1.;
0298 x = x_real * 1.;
0299 x = x_real / 1.;
0300 x = x_real ^ 2.;
0301 x = x_real % 2;
0302 x = !x_real;
0303 x = +x_real;
0304 x = -x_real;
0305 x = x_int ? x_real : 0.;
0306
0307 y = x_row_vector';
0308 y = x_matrix \ x_vector;
0309 y = x_vector .* x_vector;
0310 y = x_vector ./ x_vector;
0311
0312 // parenthized expression
0313 x = (x_real + x_real);
0314
0315 // block statement
0316 {
0317 real z;
0318 z = 1.;
0319 }
0320
0321 profile("profile-test") {
0322 real z;
0323 z = 1.;
0324 }
0325 // built-in functions
0326 x = log(1.);
0327 x = exp(1.);
0328
0329 // non-built-in function
0330 x = foo(1.);
0331
0332 // constants and nullary functions
0333 x = machine_precision();
0334 x = pi();
0335 x = e();
0336 x = sqrt2();
0337 x = log2();
0338 x = log10();
0339 // special values
0340 x = not_a_number();
0341 x = positive_infinity();
0342 x = negative_infinity();
0343 x = machine_precision();
0344 // log probability
0345 x = target();
0346
0347 // sampling statement
0348 x_real ~ normal(0., 1.);
0349
0350 // truncation
0351 x_real ~ normal(0., 1.) T[-1., 1.];
0352 x_real ~ normal(0., 1.) T[, 1.];
0353 x_real ~ normal(0., 1.) T[-1., ];
0354 x_real ~ normal(0., 1.) T[ , ];
0355
0356 // transformation on lhs of sampling
0357 log(x_real) ~ normal(0., 1.);
0358
0359 // lhs indexes
0360 y[1] = 1.;
0361 A[1, 2] = 1.;
0362 A[1][2] = 1.;
0363
0364 // special functions
0365 odeout = integrate_ode(ode_func, {1.}, x_real, {1.}, {1.}, {1.}, {0});
0366 odeout = integrate_ode_bdf(ode_func, {1.}, x_real, {1.}, {1.}, {1.}, {0},
0367 x_real, x_real, x_int);
0368 odeout = integrate_ode_rk45(ode_func, {1.}, x_real, {1.}, {1.}, {1.}, {0},
0369 x_real, x_real, x_int);
0370 // algout = algebra_solver(algebra_func, x_vector, x_vector, {1.}, {0});
0371
0372 // distribution functions
0373 x = normal_lpdf(0.5 | 0., 1.);
0374 x = normal_cdf(0.5, 0., 1.);
0375 x = normal_lcdf(0.5 | 0., 1.);
0376 x = normal_lccdf(0.5 | 0., 1.);
0377 x = binomial_lpmf(1 | 2, 0.5);
0378
0379 // deprecated features
0380 foo <- 1;
0381 increment_log_prob(0.0);
0382 y_hat = integrate_ode(sho, y0, t0, ts, theta, x_r, x_i);
0383 x = get_lp();
0384 x = multiply_log(1.0, 1.0);
0385 x = binomial_coefficient_log(1.0, 1.0);
0386 // deprecated distribution functions versions
0387 x = normal_log(0.5, 0.0, 1.0);
0388 x = normal_cdf_log(0.5, 0.0, 1.0);
0389 x = normal_ccdf_log(0.5, 0.0, 1.0);
0390
0391 }
0392 generated quantities {
0393 real Y;
0394 // rng function
0395 Y = normal_rng(0., 1.);
0396 }