549 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			549 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /*
 | |
| 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;
 |