Warning, /frameworks/syntax-highlighting/autotests/folding/highlight.stan.fold is written in an unsupported language. File is not indexed.

0001 <beginfold id='1'>/*</beginfold id='1'> 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 <endfold id='1'>*/</endfold id='1'>
0013 // line comment
0014 # deprecated line comment
0015 functions <beginfold id='2'>{</beginfold id='2'>
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) <beginfold id='2'>{</beginfold id='2'>
0027     print("print ", x);
0028   <endfold id='2'>}</endfold id='2'>
0029   <beginfold id='1'>/*</beginfold id='1'>
0030     @param x A number
0031     @return x + 1
0032   <endfold id='1'>*/</endfold id='1'>
0033   real foo(real x) <beginfold id='2'>{</beginfold id='2'>
0034     return x;
0035   <endfold id='2'>}</endfold id='2'>
0036   int bar(int x) <beginfold id='2'>{</beginfold id='2'>
0037     return x;
0038   <endfold id='2'>}</endfold id='2'>
0039   vector baz(vector x) <beginfold id='2'>{</beginfold id='2'>
0040     return x;
0041   <endfold id='2'>}</endfold id='2'>
0042   row_vector qux(row_vector x) <beginfold id='2'>{</beginfold id='2'>
0043     return x;
0044   <endfold id='2'>}</endfold id='2'>
0045   matrix quux(matrix x) <beginfold id='2'>{</beginfold id='2'>
0046     return x;
0047   <endfold id='2'>}</endfold id='2'>
0048   // numbers of arguments
0049   void corge() <beginfold id='2'>{</beginfold id='2'>
0050     print("no parameters");
0051   <endfold id='2'>}</endfold id='2'>
0052   void grault(int a, real b, vector c, row_vector d, matrix f) <beginfold id='2'>{</beginfold id='2'>
0053     print("many parameters");
0054   <endfold id='2'>}</endfold id='2'>
0055   void garply(real a, real[] b, real[,] c, real[,,] d) <beginfold id='2'>{</beginfold id='2'>
0056     print("array arguments");
0057   <endfold id='2'>}</endfold id='2'>
0058   // array return types
0059   int[] waldo(int[] x) <beginfold id='2'>{</beginfold id='2'>
0060     return x;
0061   <endfold id='2'>}</endfold id='2'>
0062   int[,] fred(int[,] x) <beginfold id='2'>{</beginfold id='2'>
0063     return x;
0064   <endfold id='2'>}</endfold id='2'>
0065   int[,,] plough(int[,,] x) <beginfold id='2'>{</beginfold id='2'>
0066     return x;
0067   <endfold id='2'>}</endfold id='2'>
0068   // data only function argument
0069   real plugh(data real x) <beginfold id='2'>{</beginfold id='2'>
0070     return x;
0071   <endfold id='2'>}</endfold id='2'>
0072   // ode function
0073   real[] ode_func(real a, real[] b, real[] c, real[] d, int[] e) <beginfold id='2'>{</beginfold id='2'>
0074     return b;
0075   <endfold id='2'>}</endfold id='2'>
0076 <endfold id='2'>}</endfold id='2'>
0077 data <beginfold id='2'>{</beginfold id='2'>
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 <endfold id='2'>}</endfold id='2'>
0128 
0129 transformed data <beginfold id='2'>{</beginfold id='2'>
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] = <beginfold id='2'>{</beginfold id='2'>1., 2.<endfold id='2'>}</endfold id='2'>;
0136   complex zulu = 3+4.1i;
0137 <endfold id='2'>}</endfold id='2'>
0138 parameters <beginfold id='2'>{</beginfold id='2'>
0139   real hotel;
0140   real<offset = 0., multiplier = 1.> alpha;
0141 <endfold id='2'>}</endfold id='2'>
0142 transformed parameters <beginfold id='2'>{</beginfold id='2'>
0143   real juliette;
0144   juliette = hotel * 2.;
0145 <endfold id='2'>}</endfold id='2'>
0146 model <beginfold id='2'>{</beginfold id='2'>
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) <beginfold id='2'>{</beginfold id='2'>
0158     x = 0.;
0159   <endfold id='2'>}</endfold id='2'>
0160 
0161   if (x_real < 0) x = 0.;
0162   else x = 1.;
0163 
0164   if (x_real < 0) <beginfold id='2'>{</beginfold id='2'>
0165     x = 0.;
0166   <endfold id='2'>}</endfold id='2'> else <beginfold id='2'>{</beginfold id='2'>
0167     x = 1.;
0168   <endfold id='2'>}</endfold id='2'>
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) <beginfold id='2'>{</beginfold id='2'>
0175     x = 0.;
0176   <endfold id='2'>}</endfold id='2'> else if (x_real > 1) <beginfold id='2'>{</beginfold id='2'>
0177     x = 1.;
0178   <endfold id='2'>}</endfold id='2'> else <beginfold id='2'>{</beginfold id='2'>
0179     x = 0.5;
0180   <endfold id='2'>}</endfold id='2'>
0181 
0182   // for loops
0183   for (i in 1:5) <beginfold id='2'>{</beginfold id='2'>
0184     print("i = ", i);
0185   <endfold id='2'>}</endfold id='2'>
0186   // for (j in echo) {
0187   //   print("j = ", j);
0188   // }
0189   // while loop
0190   while (1) <beginfold id='2'>{</beginfold id='2'>
0191     break;
0192     continue;
0193   <endfold id='2'>}</endfold id='2'>
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   <beginfold id='2'>{</beginfold id='2'>
0317     real z;
0318     z = 1.;
0319   <endfold id='2'>}</endfold id='2'>
0320 
0321   profile("profile-test") <beginfold id='2'>{</beginfold id='2'>
0322     real z;
0323     z = 1.;
0324   <endfold id='2'>}</endfold id='2'>
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, <beginfold id='2'>{</beginfold id='2'>1.<endfold id='2'>}</endfold id='2'>, x_real, <beginfold id='2'>{</beginfold id='2'>1.<endfold id='2'>}</endfold id='2'>, <beginfold id='2'>{</beginfold id='2'>1.<endfold id='2'>}</endfold id='2'>, <beginfold id='2'>{</beginfold id='2'>1.<endfold id='2'>}</endfold id='2'>, <beginfold id='2'>{</beginfold id='2'>0<endfold id='2'>}</endfold id='2'>);
0366   odeout = integrate_ode_bdf(ode_func, <beginfold id='2'>{</beginfold id='2'>1.<endfold id='2'>}</endfold id='2'>, x_real, <beginfold id='2'>{</beginfold id='2'>1.<endfold id='2'>}</endfold id='2'>, <beginfold id='2'>{</beginfold id='2'>1.<endfold id='2'>}</endfold id='2'>, <beginfold id='2'>{</beginfold id='2'>1.<endfold id='2'>}</endfold id='2'>, <beginfold id='2'>{</beginfold id='2'>0<endfold id='2'>}</endfold id='2'>,
0367                              x_real, x_real, x_int);
0368   odeout = integrate_ode_rk45(ode_func, <beginfold id='2'>{</beginfold id='2'>1.<endfold id='2'>}</endfold id='2'>, x_real, <beginfold id='2'>{</beginfold id='2'>1.<endfold id='2'>}</endfold id='2'>, <beginfold id='2'>{</beginfold id='2'>1.<endfold id='2'>}</endfold id='2'>, <beginfold id='2'>{</beginfold id='2'>1.<endfold id='2'>}</endfold id='2'>, <beginfold id='2'>{</beginfold id='2'>0<endfold id='2'>}</endfold id='2'>,
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 <endfold id='2'>}</endfold id='2'>
0392 generated quantities <beginfold id='2'>{</beginfold id='2'>
0393   real Y;
0394   // rng function
0395   Y = normal_rng(0., 1.);
0396 <endfold id='2'>}</endfold id='2'>