400 lines
7.5 KiB
Plaintext
400 lines
7.5 KiB
Plaintext
/* Stan Highlighting Example
|
|
|
|
This file contains a syntatically correct but nonsensical Stan program that
|
|
includes almost every feature of the language needed to validate syntax
|
|
highlighters. It will compile (as of Stan 2.17.1), but it does nothing
|
|
useful.
|
|
|
|
Author: Jeffrey Arnold <jeffrey.anold@gmail.com>
|
|
Copyright: Jeffrey Arnold (2018)
|
|
License: MIT
|
|
|
|
*/
|
|
// line comment
|
|
# deprecated line comment
|
|
functions {
|
|
#include stuff.stan
|
|
#include "morestuff.stan"
|
|
#include 'moststuff.stan'
|
|
#include <evenmorestuff.stan>
|
|
|
|
// declarations
|
|
void oof(real x);
|
|
|
|
// definitions
|
|
// return types
|
|
void oof(real x) {
|
|
print("print ", x);
|
|
}
|
|
/*
|
|
@param x A number
|
|
@return x + 1
|
|
*/
|
|
real foo(real x) {
|
|
return x;
|
|
}
|
|
int bar(int x) {
|
|
return x;
|
|
}
|
|
vector baz(vector x) {
|
|
return x;
|
|
}
|
|
row_vector qux(row_vector x) {
|
|
return x;
|
|
}
|
|
matrix quux(matrix x) {
|
|
return x;
|
|
}
|
|
// numbers of arguments
|
|
void corge() {
|
|
print("no parameters");
|
|
}
|
|
void grault(int a, real b, vector c, row_vector d, matrix f) {
|
|
print("many parameters");
|
|
}
|
|
void garply(real a, real[] b, real[,] c, real[,,] d) {
|
|
print("array arguments");
|
|
}
|
|
// array return types
|
|
int[] waldo(int[] x) {
|
|
return x;
|
|
}
|
|
int[,] fred(int[,] x) {
|
|
return x;
|
|
}
|
|
int[,,] plough(int[,,] x) {
|
|
return x;
|
|
}
|
|
// data only function argument
|
|
real plugh(data real x) {
|
|
return x;
|
|
}
|
|
// ode function
|
|
real[] ode_func(real a, real[] b, real[] c, real[] d, int[] e) {
|
|
return b;
|
|
}
|
|
}
|
|
data {
|
|
// non-int variable types
|
|
int x_int;
|
|
real x_real;
|
|
real y_real;
|
|
vector[1] x_vector;
|
|
ordered[1] x_ordered;
|
|
positive_ordered[1] x_positive_ordered;
|
|
simplex[1] x_simplex;
|
|
unit_vector[1] x_unit_vector;
|
|
row_vector[1] x_row_vector;
|
|
matrix[1, 1] x_matrix;
|
|
cholesky_factor_corr[2] x_cholesky_factor_corr;
|
|
cholesky_factor_cov[2] x_cholesky_factor_cov;
|
|
cholesky_factor_cov[2, 3] x_cholesky_factor_cov_2;
|
|
corr_matrix[2] x_corr_matrix;
|
|
cov_matrix[2] x_cov_matrix;
|
|
|
|
// range constraints
|
|
real<lower = 0., upper = 1.> alpha;
|
|
real<lower = 0.> bravo;
|
|
real<upper = 1.> charlie;
|
|
|
|
// arrays
|
|
int echo[1];
|
|
int foxtrot[1, 1];
|
|
int golf[1, 1, 1];
|
|
|
|
// identifier with all valid letters
|
|
real abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789;
|
|
|
|
// hard pattern
|
|
real<lower = (bravo < charlie), upper = (bravo > charlie)> ranger;
|
|
|
|
// identifier patterns
|
|
real a;
|
|
real a3;
|
|
real a_3;
|
|
real Sigma;
|
|
real my_cpp_style_variable;
|
|
real myCamelCaseVariable;
|
|
real abcdefghijklmnojk;
|
|
// names beginning with keywords
|
|
real iffffff;
|
|
real whilest;
|
|
// name ending with truncation
|
|
real fooT;
|
|
|
|
// new array syntax
|
|
array [N] real foo_new;
|
|
}
|
|
|
|
transformed data {
|
|
// declaration and assignment
|
|
int india = 1;
|
|
real romeo = 1.0;
|
|
row_vector[2] victor = [1, 2];
|
|
matrix[2, 2] mike = [[1, 2], [3, 4]];
|
|
real sierra[2] = {1., 2.};
|
|
complex zulu = 3+4.1i;
|
|
}
|
|
parameters {
|
|
real hotel;
|
|
real<offset = 0., multiplier = 1.> alpha;
|
|
}
|
|
transformed parameters {
|
|
real juliette;
|
|
juliette = hotel * 2.;
|
|
}
|
|
model {
|
|
real x;
|
|
int k;
|
|
vector[2] y = [1., 1.]';
|
|
matrix[2, 2] A = [[1., 1.], [1., 1.]];
|
|
real odeout[2, 2];
|
|
real algout[2, 2];
|
|
|
|
// if else statements
|
|
if (x_real < 0) x = 0.;
|
|
|
|
if (x_real < 0) {
|
|
x = 0.;
|
|
}
|
|
|
|
if (x_real < 0) x = 0.;
|
|
else x = 1.;
|
|
|
|
if (x_real < 0) {
|
|
x = 0.;
|
|
} else {
|
|
x = 1.;
|
|
}
|
|
|
|
if (x_real < 0) x = 0.;
|
|
else if (x_real > 1) x = 1.;
|
|
else x = 0.5;
|
|
|
|
if (x_real < 0) {
|
|
x = 0.;
|
|
} else if (x_real > 1) {
|
|
x = 1.;
|
|
} else {
|
|
x = 0.5;
|
|
}
|
|
|
|
// for loops
|
|
for (i in 1:5) {
|
|
print("i = ", i);
|
|
}
|
|
// for (j in echo) {
|
|
// print("j = ", j);
|
|
// }
|
|
// while loop
|
|
while (1) {
|
|
break;
|
|
continue;
|
|
}
|
|
|
|
// reject statement
|
|
reject("reject statment ", x_real);
|
|
|
|
// print statement
|
|
print("print statement ", x_real);
|
|
print("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_~@#$%^&*`'-+={}[].,;: ");
|
|
|
|
// increment log probability statements;
|
|
target += 1.;
|
|
|
|
// valid integer literals
|
|
k = 0;
|
|
k = 1;
|
|
k = -1;
|
|
k = 256;
|
|
k = -127098;
|
|
k = 007;
|
|
|
|
// valid real literals
|
|
x = 0.0;
|
|
x = 1.0;
|
|
x = 3.14;
|
|
x = 003.14;
|
|
x = -217.9387;
|
|
x = 0.123;
|
|
x = .123;
|
|
x = 1.;
|
|
x = -0.123;
|
|
x = -.123;
|
|
x = -1.;
|
|
x = 12e34;
|
|
x = 12E34;
|
|
x = 12.e34;
|
|
x = 12.E34;
|
|
x = 12.0e34;
|
|
x = 12.0E34;
|
|
x = .1e34;
|
|
x = .1E34;
|
|
x = -12e34;
|
|
x = -12E34;
|
|
x = -12.e34;
|
|
x = -12.E34;
|
|
x = -12.0e34;
|
|
x = -12.0E34;
|
|
x = -.1e34;
|
|
x = -.1E34;
|
|
x = 12e-34;
|
|
x = 12E-34;
|
|
x = 12.e-34;
|
|
x = 12.E-34;
|
|
x = 12.0e-34;
|
|
x = 12.0E-34;
|
|
x = .1e-34;
|
|
x = .1E-34;
|
|
x = -12e-34;
|
|
x = -12E-34;
|
|
x = -12.e-34;
|
|
x = -12.E-34;
|
|
x = -12.0e-34;
|
|
x = -12.0E-34;
|
|
x = -.1e-34;
|
|
x = -.1E-34;
|
|
x = 12e+34;
|
|
x = 12E+34;
|
|
x = 12.e+34;
|
|
x = 12.E+34;
|
|
x = 12.0e+34;
|
|
x = 12.0E+34;
|
|
x = .1e+34;
|
|
x = .1E+34;
|
|
x = -12e+34;
|
|
x = -12E+34;
|
|
x = -12.e+34;
|
|
x = -12.E+34;
|
|
x = -12.0e+34;
|
|
x = -12.0E+34;
|
|
x = -.1e+34;
|
|
x = -.1E+34;
|
|
|
|
// imaginary literals
|
|
complex z = 3 + 3i;
|
|
z = 2.3i;
|
|
z = 3.4e10i;
|
|
z = 0i;
|
|
|
|
// assignment statements
|
|
x = 1;
|
|
x += 1.;
|
|
x -= 1.;
|
|
x *= 1.;
|
|
x /= 1.;
|
|
y .*= x_vector;
|
|
y ./= x_vector;
|
|
|
|
// operators
|
|
x = x_real && 1;
|
|
x = x_real || 1;
|
|
x = x_real < 1.;
|
|
x = x_real <= 1.;
|
|
x = x_real > 1.;
|
|
x = x_real >= 1.;
|
|
x = x_real + 1.;
|
|
x = x_real - 1.;
|
|
x = x_real * 1.;
|
|
x = x_real / 1.;
|
|
x = x_real ^ 2.;
|
|
x = x_real % 2;
|
|
x = !x_real;
|
|
x = +x_real;
|
|
x = -x_real;
|
|
x = x_int ? x_real : 0.;
|
|
|
|
y = x_row_vector';
|
|
y = x_matrix \ x_vector;
|
|
y = x_vector .* x_vector;
|
|
y = x_vector ./ x_vector;
|
|
|
|
// parenthized expression
|
|
x = (x_real + x_real);
|
|
|
|
// block statement
|
|
{
|
|
real z;
|
|
z = 1.;
|
|
}
|
|
|
|
profile("profile-test") {
|
|
real z;
|
|
z = 1.;
|
|
}
|
|
// built-in functions
|
|
x = log(1.);
|
|
x = exp(1.);
|
|
|
|
// non-built-in function
|
|
x = foo(1.);
|
|
|
|
// constants and nullary functions
|
|
x = machine_precision();
|
|
x = pi();
|
|
x = e();
|
|
x = sqrt2();
|
|
x = log2();
|
|
x = log10();
|
|
// special values
|
|
x = not_a_number();
|
|
x = positive_infinity();
|
|
x = negative_infinity();
|
|
x = machine_precision();
|
|
// log probability
|
|
x = target();
|
|
|
|
// sampling statement
|
|
x_real ~ normal(0., 1.);
|
|
|
|
// truncation
|
|
x_real ~ normal(0., 1.) T[-1., 1.];
|
|
x_real ~ normal(0., 1.) T[, 1.];
|
|
x_real ~ normal(0., 1.) T[-1., ];
|
|
x_real ~ normal(0., 1.) T[ , ];
|
|
|
|
// transformation on lhs of sampling
|
|
log(x_real) ~ normal(0., 1.);
|
|
|
|
// lhs indexes
|
|
y[1] = 1.;
|
|
A[1, 2] = 1.;
|
|
A[1][2] = 1.;
|
|
|
|
// special functions
|
|
odeout = integrate_ode(ode_func, {1.}, x_real, {1.}, {1.}, {1.}, {0});
|
|
odeout = integrate_ode_bdf(ode_func, {1.}, x_real, {1.}, {1.}, {1.}, {0},
|
|
x_real, x_real, x_int);
|
|
odeout = integrate_ode_rk45(ode_func, {1.}, x_real, {1.}, {1.}, {1.}, {0},
|
|
x_real, x_real, x_int);
|
|
// algout = algebra_solver(algebra_func, x_vector, x_vector, {1.}, {0});
|
|
|
|
// distribution functions
|
|
x = normal_lpdf(0.5 | 0., 1.);
|
|
x = normal_cdf(0.5, 0., 1.);
|
|
x = normal_lcdf(0.5 | 0., 1.);
|
|
x = normal_lccdf(0.5 | 0., 1.);
|
|
x = binomial_lpmf(1 | 2, 0.5);
|
|
|
|
// deprecated features
|
|
foo <- 1;
|
|
increment_log_prob(0.0);
|
|
y_hat = integrate_ode(sho, y0, t0, ts, theta, x_r, x_i);
|
|
x = get_lp();
|
|
x = multiply_log(1.0, 1.0);
|
|
x = binomial_coefficient_log(1.0, 1.0);
|
|
// deprecated distribution functions versions
|
|
x = normal_log(0.5, 0.0, 1.0);
|
|
x = normal_cdf_log(0.5, 0.0, 1.0);
|
|
x = normal_ccdf_log(0.5, 0.0, 1.0);
|
|
|
|
}
|
|
generated quantities {
|
|
real Y;
|
|
// rng function
|
|
Y = normal_rng(0., 1.);
|
|
|
|
tuple(real, int) tupl = (1.5, 2);
|
|
complex_matrix C_mike = mike;
|
|
}
|