123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548 |
- /*
- Language: Stan
- Description: The Stan probabilistic programming language
- Author: Jeffrey B. Arnold <jeffrey.arnold@gmail.com>
- Website: http://mc-stan.org/
- Category: scientific
- */
- function stan(hljs) {
- // variable names cannot conflict with block identifiers
- const BLOCKS = [
- 'functions',
- 'model',
- 'data',
- 'parameters',
- 'quantities',
- 'transformed',
- 'generated'
- ];
- const STATEMENTS = [
- 'for',
- 'in',
- 'if',
- 'else',
- 'while',
- 'break',
- 'continue',
- 'return'
- ];
- const SPECIAL_FUNCTIONS = [
- 'print',
- 'reject',
- 'increment_log_prob|10',
- 'integrate_ode|10',
- 'integrate_ode_rk45|10',
- 'integrate_ode_bdf|10',
- 'algebra_solver'
- ];
- const VAR_TYPES = [
- 'int',
- 'real',
- 'vector',
- 'ordered',
- 'positive_ordered',
- 'simplex',
- 'unit_vector',
- 'row_vector',
- 'matrix',
- 'cholesky_factor_corr|10',
- 'cholesky_factor_cov|10',
- 'corr_matrix|10',
- 'cov_matrix|10',
- 'void'
- ];
- const FUNCTIONS = [
- 'Phi',
- 'Phi_approx',
- 'abs',
- 'acos',
- 'acosh',
- 'algebra_solver',
- 'append_array',
- 'append_col',
- 'append_row',
- 'asin',
- 'asinh',
- 'atan',
- 'atan2',
- 'atanh',
- 'bernoulli_cdf',
- 'bernoulli_lccdf',
- 'bernoulli_lcdf',
- 'bernoulli_logit_lpmf',
- 'bernoulli_logit_rng',
- 'bernoulli_lpmf',
- 'bernoulli_rng',
- 'bessel_first_kind',
- 'bessel_second_kind',
- 'beta_binomial_cdf',
- 'beta_binomial_lccdf',
- 'beta_binomial_lcdf',
- 'beta_binomial_lpmf',
- 'beta_binomial_rng',
- 'beta_cdf',
- 'beta_lccdf',
- 'beta_lcdf',
- 'beta_lpdf',
- 'beta_rng',
- 'binary_log_loss',
- 'binomial_cdf',
- 'binomial_coefficient_log',
- 'binomial_lccdf',
- 'binomial_lcdf',
- 'binomial_logit_lpmf',
- 'binomial_lpmf',
- 'binomial_rng',
- 'block',
- 'categorical_logit_lpmf',
- 'categorical_logit_rng',
- 'categorical_lpmf',
- 'categorical_rng',
- 'cauchy_cdf',
- 'cauchy_lccdf',
- 'cauchy_lcdf',
- 'cauchy_lpdf',
- 'cauchy_rng',
- 'cbrt',
- 'ceil',
- 'chi_square_cdf',
- 'chi_square_lccdf',
- 'chi_square_lcdf',
- 'chi_square_lpdf',
- 'chi_square_rng',
- 'cholesky_decompose',
- 'choose',
- 'col',
- 'cols',
- 'columns_dot_product',
- 'columns_dot_self',
- 'cos',
- 'cosh',
- 'cov_exp_quad',
- 'crossprod',
- 'csr_extract_u',
- 'csr_extract_v',
- 'csr_extract_w',
- 'csr_matrix_times_vector',
- 'csr_to_dense_matrix',
- 'cumulative_sum',
- 'determinant',
- 'diag_matrix',
- 'diag_post_multiply',
- 'diag_pre_multiply',
- 'diagonal',
- 'digamma',
- 'dims',
- 'dirichlet_lpdf',
- 'dirichlet_rng',
- 'distance',
- 'dot_product',
- 'dot_self',
- 'double_exponential_cdf',
- 'double_exponential_lccdf',
- 'double_exponential_lcdf',
- 'double_exponential_lpdf',
- 'double_exponential_rng',
- 'e',
- 'eigenvalues_sym',
- 'eigenvectors_sym',
- 'erf',
- 'erfc',
- 'exp',
- 'exp2',
- 'exp_mod_normal_cdf',
- 'exp_mod_normal_lccdf',
- 'exp_mod_normal_lcdf',
- 'exp_mod_normal_lpdf',
- 'exp_mod_normal_rng',
- 'expm1',
- 'exponential_cdf',
- 'exponential_lccdf',
- 'exponential_lcdf',
- 'exponential_lpdf',
- 'exponential_rng',
- 'fabs',
- 'falling_factorial',
- 'fdim',
- 'floor',
- 'fma',
- 'fmax',
- 'fmin',
- 'fmod',
- 'frechet_cdf',
- 'frechet_lccdf',
- 'frechet_lcdf',
- 'frechet_lpdf',
- 'frechet_rng',
- 'gamma_cdf',
- 'gamma_lccdf',
- 'gamma_lcdf',
- 'gamma_lpdf',
- 'gamma_p',
- 'gamma_q',
- 'gamma_rng',
- 'gaussian_dlm_obs_lpdf',
- 'get_lp',
- 'gumbel_cdf',
- 'gumbel_lccdf',
- 'gumbel_lcdf',
- 'gumbel_lpdf',
- 'gumbel_rng',
- 'head',
- 'hypergeometric_lpmf',
- 'hypergeometric_rng',
- 'hypot',
- 'inc_beta',
- 'int_step',
- 'integrate_ode',
- 'integrate_ode_bdf',
- 'integrate_ode_rk45',
- 'inv',
- 'inv_Phi',
- 'inv_chi_square_cdf',
- 'inv_chi_square_lccdf',
- 'inv_chi_square_lcdf',
- 'inv_chi_square_lpdf',
- 'inv_chi_square_rng',
- 'inv_cloglog',
- 'inv_gamma_cdf',
- 'inv_gamma_lccdf',
- 'inv_gamma_lcdf',
- 'inv_gamma_lpdf',
- 'inv_gamma_rng',
- 'inv_logit',
- 'inv_sqrt',
- 'inv_square',
- 'inv_wishart_lpdf',
- 'inv_wishart_rng',
- 'inverse',
- 'inverse_spd',
- 'is_inf',
- 'is_nan',
- 'lbeta',
- 'lchoose',
- 'lgamma',
- 'lkj_corr_cholesky_lpdf',
- 'lkj_corr_cholesky_rng',
- 'lkj_corr_lpdf',
- 'lkj_corr_rng',
- 'lmgamma',
- 'lmultiply',
- 'log',
- 'log10',
- 'log1m',
- 'log1m_exp',
- 'log1m_inv_logit',
- 'log1p',
- 'log1p_exp',
- 'log2',
- 'log_determinant',
- 'log_diff_exp',
- 'log_falling_factorial',
- 'log_inv_logit',
- 'log_mix',
- 'log_rising_factorial',
- 'log_softmax',
- 'log_sum_exp',
- 'logistic_cdf',
- 'logistic_lccdf',
- 'logistic_lcdf',
- 'logistic_lpdf',
- 'logistic_rng',
- 'logit',
- 'lognormal_cdf',
- 'lognormal_lccdf',
- 'lognormal_lcdf',
- 'lognormal_lpdf',
- 'lognormal_rng',
- 'machine_precision',
- 'matrix_exp',
- 'max',
- 'mdivide_left_spd',
- 'mdivide_left_tri_low',
- 'mdivide_right_spd',
- 'mdivide_right_tri_low',
- 'mean',
- 'min',
- 'modified_bessel_first_kind',
- 'modified_bessel_second_kind',
- 'multi_gp_cholesky_lpdf',
- 'multi_gp_lpdf',
- 'multi_normal_cholesky_lpdf',
- 'multi_normal_cholesky_rng',
- 'multi_normal_lpdf',
- 'multi_normal_prec_lpdf',
- 'multi_normal_rng',
- 'multi_student_t_lpdf',
- 'multi_student_t_rng',
- 'multinomial_lpmf',
- 'multinomial_rng',
- 'multiply_log',
- 'multiply_lower_tri_self_transpose',
- 'neg_binomial_2_cdf',
- 'neg_binomial_2_lccdf',
- 'neg_binomial_2_lcdf',
- 'neg_binomial_2_log_lpmf',
- 'neg_binomial_2_log_rng',
- 'neg_binomial_2_lpmf',
- 'neg_binomial_2_rng',
- 'neg_binomial_cdf',
- 'neg_binomial_lccdf',
- 'neg_binomial_lcdf',
- 'neg_binomial_lpmf',
- 'neg_binomial_rng',
- 'negative_infinity',
- 'normal_cdf',
- 'normal_lccdf',
- 'normal_lcdf',
- 'normal_lpdf',
- 'normal_rng',
- 'not_a_number',
- 'num_elements',
- 'ordered_logistic_lpmf',
- 'ordered_logistic_rng',
- 'owens_t',
- 'pareto_cdf',
- 'pareto_lccdf',
- 'pareto_lcdf',
- 'pareto_lpdf',
- 'pareto_rng',
- 'pareto_type_2_cdf',
- 'pareto_type_2_lccdf',
- 'pareto_type_2_lcdf',
- 'pareto_type_2_lpdf',
- 'pareto_type_2_rng',
- 'pi',
- 'poisson_cdf',
- 'poisson_lccdf',
- 'poisson_lcdf',
- 'poisson_log_lpmf',
- 'poisson_log_rng',
- 'poisson_lpmf',
- 'poisson_rng',
- 'positive_infinity',
- 'pow',
- 'print',
- 'prod',
- 'qr_Q',
- 'qr_R',
- 'quad_form',
- 'quad_form_diag',
- 'quad_form_sym',
- 'rank',
- 'rayleigh_cdf',
- 'rayleigh_lccdf',
- 'rayleigh_lcdf',
- 'rayleigh_lpdf',
- 'rayleigh_rng',
- 'reject',
- 'rep_array',
- 'rep_matrix',
- 'rep_row_vector',
- 'rep_vector',
- 'rising_factorial',
- 'round',
- 'row',
- 'rows',
- 'rows_dot_product',
- 'rows_dot_self',
- 'scaled_inv_chi_square_cdf',
- 'scaled_inv_chi_square_lccdf',
- 'scaled_inv_chi_square_lcdf',
- 'scaled_inv_chi_square_lpdf',
- 'scaled_inv_chi_square_rng',
- 'sd',
- 'segment',
- 'sin',
- 'singular_values',
- 'sinh',
- 'size',
- 'skew_normal_cdf',
- 'skew_normal_lccdf',
- 'skew_normal_lcdf',
- 'skew_normal_lpdf',
- 'skew_normal_rng',
- 'softmax',
- 'sort_asc',
- 'sort_desc',
- 'sort_indices_asc',
- 'sort_indices_desc',
- 'sqrt',
- 'sqrt2',
- 'square',
- 'squared_distance',
- 'step',
- 'student_t_cdf',
- 'student_t_lccdf',
- 'student_t_lcdf',
- 'student_t_lpdf',
- 'student_t_rng',
- 'sub_col',
- 'sub_row',
- 'sum',
- 'tail',
- 'tan',
- 'tanh',
- 'target',
- 'tcrossprod',
- 'tgamma',
- 'to_array_1d',
- 'to_array_2d',
- 'to_matrix',
- 'to_row_vector',
- 'to_vector',
- 'trace',
- 'trace_gen_quad_form',
- 'trace_quad_form',
- 'trigamma',
- 'trunc',
- 'uniform_cdf',
- 'uniform_lccdf',
- 'uniform_lcdf',
- 'uniform_lpdf',
- 'uniform_rng',
- 'variance',
- 'von_mises_lpdf',
- 'von_mises_rng',
- 'weibull_cdf',
- 'weibull_lccdf',
- 'weibull_lcdf',
- 'weibull_lpdf',
- 'weibull_rng',
- 'wiener_lpdf',
- 'wishart_lpdf',
- 'wishart_rng'
- ];
- const DISTRIBUTIONS = [
- 'bernoulli',
- 'bernoulli_logit',
- 'beta',
- 'beta_binomial',
- 'binomial',
- 'binomial_logit',
- 'categorical',
- 'categorical_logit',
- 'cauchy',
- 'chi_square',
- 'dirichlet',
- 'double_exponential',
- 'exp_mod_normal',
- 'exponential',
- 'frechet',
- 'gamma',
- 'gaussian_dlm_obs',
- 'gumbel',
- 'hypergeometric',
- 'inv_chi_square',
- 'inv_gamma',
- 'inv_wishart',
- 'lkj_corr',
- 'lkj_corr_cholesky',
- 'logistic',
- 'lognormal',
- 'multi_gp',
- 'multi_gp_cholesky',
- 'multi_normal',
- 'multi_normal_cholesky',
- 'multi_normal_prec',
- 'multi_student_t',
- 'multinomial',
- 'neg_binomial',
- 'neg_binomial_2',
- 'neg_binomial_2_log',
- 'normal',
- 'ordered_logistic',
- 'pareto',
- 'pareto_type_2',
- 'poisson',
- 'poisson_log',
- 'rayleigh',
- 'scaled_inv_chi_square',
- 'skew_normal',
- 'student_t',
- 'uniform',
- 'von_mises',
- 'weibull',
- 'wiener',
- 'wishart'
- ];
- return {
- name: 'Stan',
- aliases: [ 'stanfuncs' ],
- keywords: {
- $pattern: hljs.IDENT_RE,
- title: BLOCKS,
- keyword: STATEMENTS.concat(VAR_TYPES).concat(SPECIAL_FUNCTIONS),
- built_in: FUNCTIONS
- },
- contains: [
- hljs.C_LINE_COMMENT_MODE,
- hljs.COMMENT(
- /#/,
- /$/,
- {
- relevance: 0,
- keywords: {
- 'meta-keyword': 'include'
- }
- }
- ),
- hljs.COMMENT(
- /\/\*/,
- /\*\//,
- {
- relevance: 0,
- // highlight doc strings mentioned in Stan reference
- contains: [
- {
- className: 'doctag',
- begin: /@(return|param)/
- }
- ]
- }
- ),
- {
- // hack: in range constraints, lower must follow "<"
- begin: /<\s*lower\s*=/,
- keywords: 'lower'
- },
- {
- // hack: in range constraints, upper must follow either , or <
- // <lower = ..., upper = ...> or <upper = ...>
- begin: /[<,]\s*upper\s*=/,
- keywords: 'upper'
- },
- {
- className: 'keyword',
- begin: /\btarget\s*\+=/,
- relevance: 10
- },
- {
- begin: '~\\s*(' + hljs.IDENT_RE + ')\\s*\\(',
- keywords: DISTRIBUTIONS
- },
- {
- className: 'number',
- variants: [
- {
- begin: /\b\d+(?:\.\d*)?(?:[eE][+-]?\d+)?/
- },
- {
- begin: /\.\d+(?:[eE][+-]?\d+)?\b/
- }
- ],
- relevance: 0
- },
- {
- className: 'string',
- begin: '"',
- end: '"',
- relevance: 0
- }
- ]
- };
- }
- module.exports = stan;
|