Flatten shape and autodiff type in stan-dev/math down to one file per function

I’ve been thinking about adding complex number support, which in our current way of looking at things is an alternative to scalars. So the hierarchy would be extended from scalar/matrix/array to scalar/complex/matrix/array. I’ll do this for the PR for complex, but going forward, I would like to propose that we flatten everything:

  • the scalar type hierarchy: prim, rev, fwd, mix
  • the scalar/matrix/array hierarchy: scal, mat, arr, and
  • the fun vs. prob distinction within the scalar/matrix/array hierarchy

The top-level directory structure would then reduce to:

stan/math/{ err, fun, meta }

for error-handling functions, plain old functions, and meta-functions. I wouldn’t even mind collapsing these three directories.

Then we have a single include for Stan math, stan/math.hpp, which is much simpler than supporting a whole bunch of includes, and easier to manage include order with.

The big advantage is that we get one file per function. Rather than having the implementation of a function like exp spread over half a dozen files, all of the code for exp would be in a single file. The branching in the directory structure at the lowest levels would not increase much compared to what’s already in stan/math/scal/prim.

The original goal in the directory structure was to keep things organized and to allow someone to use subsets of the math lib, like reverse mode without forward mode or without Eigen. I don’t think anyone needs this functionality. This is clean in theory, but has been a pain in practice.

I can also volunteer to actually carry out the refactor. I’m really liking taking on these really big code projects. The tricky part of this one will be keeping up and not destrying other people’s work as I go. So maybe a couple of us could get together and try to workshop the whole thing in a few coding sessions.

4 Likes

I think pragmatically, we’ll need to keep mix separate from everything else. Last time I checked, the windows compiler couldn’t keep up with handling mix. (It would compile, but fail silently. It was pretty obvious it was failing; nothing would happen on the run.)

This could be a problem of the past, though. So a quick check would be prudent before trying to squash that down.

I agree with you that our original goals of keeping it separate for different use cases isn’t as useful now, so happy to have it be flattened if we can.

@rok_cesnovar was going to put together a plan for flattening the scal / arr / mat. Maybe we can stage this by doing that flattening first?

I’m volunteering to help. I’ve been planning out how to do the flattening for the shapes. (It’s a measure twice cut once type of project.)

1 Like

There is almost nothing in the mix headers:

$ ls -R mix
arr.hpp		mat		mat.hpp		meta.hpp	scal.hpp

mix/mat:
fun	functor

mix/mat/fun:
typedefs.hpp

mix/mat/functor:
derivative.hpp				gradient_dot_vector.hpp
finite_diff_grad_hessian.hpp		hessian.hpp
finite_diff_grad_hessian_auto.hpp	hessian_times_vector.hpp
grad_hessian.hpp			partial_derivative.hpp
grad_tr_mat_times_hessian.hpp

The autodiff tests use hessian and grad_hessian from the functors. The others aren’t any more complicated. So I’m not sure what could cause a problem.

+1 for all of this.

The first thing we need to do is finish the meta flatten. I wrote my thoughts on how to proceed here: https://github.com/stan-dev/math/issues/937

1 Like

When we encountered the problem, it was template instantiation issues. Things that should have compiled didn’t. I don’t recall if we also had issues that could have been resolved by splitting into multiple translation units.

This is something that is verifiable. If there are no issues now compiling with mix, then it isn’t a problem now and we can move forward.

Was this with MSVC or gcc (rtools)?

Let’s start measuring. Aside from stan/math/opencl and stan/math/memory, the directory structure follows the pattern:

\texttt{stan} \Bigg{/} \texttt{math} \Bigg{/} \left\{ \begin{array}{c} \texttt{prim} \\ \texttt{rev} \\ \texttt{fwd} \\ \texttt{mix} \end{array} \right\} \Bigg{/} \left\{ \begin{array}{c} \texttt{core} \\ \texttt{scal} \\ \texttt{cplx} \\ \texttt{arr} \\ \texttt{mat} \end{array} \right\} \Bigg{/} \left\{ \begin{array}{c} \texttt{meta} \\ \texttt{err} \\ \texttt{fun} \\ \texttt{functor} \\ \texttt{prob} \\ \texttt{vectorize} \end{array} \right\}

There is a top-level stan/math.hpp and almost every subdirectory of depth 3 gets its own .hpp file (e.g., stan/math/mix/mat.hpp).

I’m suggesting we flatten this to:

\texttt{stan} \Bigg{/} \texttt{math} \Bigg{/} \left\{ \begin{array}{c} \texttt{core} \\ \texttt{meta} \\ \texttt{err} \\ \texttt{fun} \\ \texttt{functor} \\ \texttt{prob} \end{array} \right\}

with

  • a single stan/math.hpp include file
  • pure template programs go in meta; this includes traits specializations for Eigen and std:: classes.
  • core will have subdirectories fwd and rev, each with its own std::complex specialization
  • operands_and_partials moves to core
  • vectorize moves to functor (integrators and other solvers are already in functor)
  • stan/math/memory moving into core/rev as that’s the only place it’s used

Files would still be organized to hold single functions. This would mean each probability distribution would get a separate file for its pdf/pmf, cdf, ccdf, and rng.

stan/math/opencl

This is its own beast right now. It has subdirectories err, prim, rev, and kernels as well as a lot of plain old .hpp files. I propose:

  • the top-level .hpp files should be distributed among core, meta, and fun as appropriate, e.g.,

    • scalar_type goes to meta
    • matrix_cl goes to core, and
    • cholesky_decompose goes to fun.
  • the code in prim and rev goes to fun (e.g., transpose.hpp merges with all the other transpose.hpp files)

  • the code in kernels and kernels/device_functions goes to fun (e.g., kernels/gp_exp_quad_cov.hpp from merges with all the other gp_exp_quad_cov.hpp files in fun as does kernels/device_functions/digamma.hpp)

This gets a little messy as the code in device_functions defines a string in the stan::math::opencl namespace, the contents of which is a C-style definition of a function double digamma(double). It’s not really a definition of a function in stan::math—the string is in stan::math::opencl, but presumably the function lives on the GPU.

Edit: I also wouldn’t be totally opposed to adding a util subdirectory for utility classes like operands_and_partials. Otherwise, they can just go into core. Utility functions can just go in fun and functors in functor.

2 Likes

This is a nearly complete list (I say “nearly” because I did it in a hurry without triple checking every step). It works out to about 800 files. There are currently 1343 .hpp files by my reckoining (via grep and wc). So it’s going to be quite the job moving everyting around as the copies are spread throughout the code base.

stan/math/core

VectorBuilderHelper.hpp
as_array_or_scalar.hpp
as_column_vector_or_scalar.hpp
as_scalar.hpp
broadcast_array.hpp
init_threadpool_tbb.hpp
operands_and_partials.hpp
scalar_seq_view.hpp
seq_view.hpp
vector_seq_view.hpp

stan/math/core/fwd

fvar.hpp
std_numeric_limits.hpp

stan/math/core/rev/

Eigen_NumTraits.hpp
autodiffstackstorage.hpp
build_vari_array.hpp
chainable_alloc.hpp
chainablestack.hpp
ddv_vari.hpp
dv_vari.hpp
dvd_vari.hpp
dvv_vari.hpp
empty_nested.hpp
gevv_vvv_vari.hpp
grad.hpp
init_chainablestack.hpp
matrix_vari.hpp
nested_size.hpp
precomp_v_vari.hpp
precomp_vv_vari.hpp
precomp_vvv_vari.hpp
precomputed_gradients.hpp
print_stack.hpp
recover_memory.hpp
recover_memory_nested.hpp
set_zero_all_adjoints.hpp
set_zero_all_adjoints_nested.hpp
start_nested.hpp
std_complex.hpp
std_numeric_limits.hpp
stored_gradient_vari.hpp
v_vari.hpp
var.hpp
vari.hpp
vd_vari.hpp
vdd_vari.hpp
vdv_vari.hpp
vector_vari.hpp
vv_vari.hpp
vvd_vari.hpp
vvv_vari.hpp

stan/math/meta

ad_promotable.hpp
append_return_type.hpp
child_type.hpp
common_type.hpp
contains_fvar.hpp
contains_std_vector.hpp
contains_vector.hpp
include_summand.hpp
index_type.hpp
is_constant.hpp
is_eigen.hpp
is_fvar.hpp
is_var.hpp
is_var_or_arithmetic.hpp
is_vector.hpp
is_vector_like.hpp
partials_return_type.hpp
partials_type.hpp
promote_args.hpp
promote_elements.hpp
promote_scalar.hpp
promote_scalar_type.hpp
require_generics.hpp
return_type.hpp
scalar_type.hpp
scalar_type_pre.hpp
value_type.hpp

stan/math/err/

check_2F1_converges.hpp
check_3F2_converges.hpp
check_bounded.hpp
check_cholesky_factor.hpp
check_cholesky_factor_corr.hpp
check_column_index.hpp
check_consistent_size.hpp
check_consistent_size_mvt.hpp
check_consistent_sizes.hpp
check_consistent_sizes_mvt.hpp
check_corr_matrix.hpp
check_cov_matrix.hpp
check_finite.hpp
check_greater.hpp
check_greater_or_equal.hpp
check_ldlt_factor.hpp
check_less.hpp
check_less_or_equal.hpp
check_lower_triangular.hpp
check_matching_dims.hpp
check_matching_sizes.hpp
check_multiplicable.hpp
check_nonempty.hpp
check_nonnegative.hpp
check_nonzero_size.hpp
check_not_nan.hpp
check_ordered.hpp
check_pos_definite.hpp
check_pos_semidefinite.hpp
check_positive.hpp
check_positive_finite.hpp
check_positive_ordered.hpp
check_range.hpp
check_row_index.hpp
check_simplex.hpp
check_size_match.hpp
check_spsd_matrix.hpp
check_square.hpp
check_std_vector_index.hpp
check_symmetric.hpp
check_unit_vector.hpp
check_vector.hpp
constraint_tolerance.hpp
domain_error.hpp
domain_error_vec.hpp
error_index.hpp
invalid_argument.hpp
invalid_argument_vec.hpp
is_cholesky_factor.hpp
is_cholesky_factor_corr.hpp
is_column_index.hpp
is_corr_matrix.hpp
is_ldlt_factor.hpp
is_less_or_equal.hpp
is_lower_triangular.hpp
is_mat_finite.hpp
is_matching_dims.hpp
is_matching_size.hpp
is_nonzero_size.hpp
is_not_nan.hpp
is_ordered.hpp
is_pos_definite.hpp
is_positive.hpp
is_scal_finite.hpp
is_size_match.hpp
is_square.hpp
is_symmetric.hpp
is_unit_vector.hpp
out_of_range.hpp
validate_non_negative_index.hpp

stan/math/util/

StdVectorBuilder.hpp
VectorBuilder.hpp
array_builder.hpp
bool_constant.hpp
get.hpp
length.hpp
length_mvt.hpp
likely.hpp
max_size.hpp
max_size_mvt.hpp
size_of.hpp

stan/math/fun/

F32.hpp
LDLT_factor.hpp
LDLT_factor.hpp>
Phi.hpp
Phi_approx.hpp
abs.hpp
accumulator.hpp
acos.hpp
acosh.hpp
add.hpp
add_diag.hpp
append_array.hpp
append_col.hpp
append_row.hpp
as_bool.hpp
asin.hpp
asinh.hpp
assign.hpp
atan.hpp
atanh.hpp
autocorrelation.hpp
autocovariance.hpp
bessel_first_kind.hpp
bessel_second_kind.hpp
beta.hpp
binary_log_loss.hpp
binomial_coefficient_log.hpp
block.hpp
boost_policy.hpp
cbrt.hpp
ceil.hpp
chol2inv.hpp
cholesky_corr_constrain.hpp
cholesky_corr_free.hpp
cholesky_decompose.hpp
cholesky_factor_constrain.hpp
cholesky_factor_free.hpp
choose.hpp
col.hpp
cols.hpp
columns_dot_product.hpp
columns_dot_self.hpp
common_type.hpp
constants.hpp
corr_constrain.hpp
corr_free.hpp
corr_matrix_constrain.hpp
corr_matrix_free.hpp
cos.hpp
cosh.hpp
cov_exp_quad.hpp
cov_matrix_constrain.hpp
cov_matrix_constrain_lkj.hpp
cov_matrix_free.hpp
cov_matrix_free_lkj.hpp
crossprod.hpp
csr_extract_u.hpp
csr_extract_v.hpp
csr_extract_w.hpp
csr_matrix_times_vector.hpp
csr_to_dense_matrix.hpp
csr_u_to_z.hpp
cumulative_sum.hpp
determinant.hpp
diag_matrix.hpp
diag_post_multiply.hpp
diag_pre_multiply.hpp
diagonal.hpp
digamma.hpp
dims.hpp
distance.hpp
divide.hpp
dot.hpp
dot_product.hpp
dot_self.hpp
eigenvalues_sym.hpp
eigenvectors_sym.hpp
elt_divide.hpp
elt_multiply.hpp
erf.hpp
erfc.hpp
exp.hpp
exp2.hpp
expm1.hpp
fabs.hpp
factor_U.hpp
factor_cov_matrix.hpp
falling_factorial.hpp
fdim.hpp
fill.hpp
finite_diff_stepsize.hpp
floor.hpp
fma.hpp
fmax.hpp
fmin.hpp
gamma_p.hpp
gamma_q.hpp
get_base1.hpp
get_base1_lhs.hpp
get_lp.hpp
gp_dot_prod_cov.hpp
gp_exponential_cov.hpp
gp_matern32_cov.hpp
gp_matern52_cov.hpp
gp_periodic_cov.hpp
grad_2F1.hpp
grad_F32.hpp
grad_inc_beta.hpp
grad_reg_inc_beta.hpp>
grad_reg_lower_inc_gamma.hpp>
head.hpp
ibeta.hpp>
identity_free.hpp
if_else.hpp
inc_beta.hpp
initialize.hpp
int_step.hpp
inv.hpp
inv_Phi.hpp
inv_cloglog.hpp
inv_logit.hpp
inv_sqrt.hpp
inv_square.hpp
inverse.hpp
inverse_softmax.hpp
inverse_spd.hpp
is_any_nan.hpp
is_inf.hpp
is_nan.hpp
is_uninitialized.hpp
lb_constrain.hpp
lb_free.hpp
lbeta.hpp
ldexp.hpp
lgamma.hpp
lmgamma.hpp
locscale_constrain.hpp
locscale_free.hpp
log.hpp
log10.hpp
log1m.hpp
log1m_exp.hpp
log1m_inv_logit.hpp
log1p.hpp
log1p_exp.hpp
log2.hpp
log_determinant.hpp
log_determinant_ldlt.hpp
log_determinant_spd.hpp
log_diff_exp.hpp
log_falling_factorial.hpp
log_inv_logit.hpp
log_inv_logit_diff.hpp
log_mix.hpp
log_modified_bessel_first_kind.hpp
log_rising_factorial.hpp
log_softmax.hpp
log_sum_exp.hpp
logical_and.hpp
logical_eq.hpp
logical_gt.hpp
logical_gte.hpp
logical_lt.hpp
logical_lte.hpp
logical_negation.hpp
logical_neq.hpp
logical_or.hpp
logit.hpp
lub_constrain.hpp
lub_free.hpp
make_nu.hpp
matrix_exp.hpp
matrix_exp_multiply.hpp
max.hpp
mdivide_left.hpp
mdivide_left_ldlt.hpp
mdivide_left_spd.hpp
mdivide_left_tri.hpp
mdivide_left_tri_low.hpp
mdivide_right.hpp
mdivide_right_ldlt.hpp
mdivide_right_spd.hpp
mdivide_right_tri.hpp
mdivide_right_tri_low.hpp
mean.hpp
min.hpp
minus.hpp
modified_bessel_first_kind.hpp
modified_bessel_second_kind.hpp
modulus.hpp
multiply.hpp
multiply_log.hpp
multiply_lower_tri_self_transpose.hpp
num_elements.hpp
offset_multiplier_constrain.hpp
offset_multiplier_free.hpp
operator_addition.hpp
operator_divide_equal.hpp
operator_division.hpp
operator_equal.hpp
operator_greater_than.hpp
operator_greater_than_or_equal.hpp
operator_less_than.hpp
operator_less_than_or_equal.hpp
operator_logical_and.hpp
operator_logical_or.hpp
operator_minus_equal.hpp
operator_multiplication.hpp
operator_multiply_equal.hpp
operator_not_equal.hpp
operator_plus_equal.hpp
operator_subtraction.hpp
operator_unary_decrement.hpp
operator_unary_increment.hpp
operator_unary_minus.hpp
operator_unary_negative.hpp
operator_unary_not.hpp
operator_unary_plus.hpp
ordered_constrain.hpp
ordered_free.hpp
owens_t.hpp
positive_constrain.hpp
positive_free.hpp
positive_ordered_constrain.hpp
positive_ordered_free.hpp
primitive_value.hpp
prob_constrain.hpp
prob_free.hpp
prod.hpp
promote_common.hpp
promote_elements.hpp
promote_scalar.hpp
promote_scalar_type.hpp
qr_Q.hpp
qr_R.hpp
qr_thin_Q.hpp
qr_thin_R.hpp
quad_form.hpp
quad_form_diag.hpp
quad_form_sym.hpp
rank.hpp
read_corr_L.hpp
read_corr_matrix.hpp
read_cov_L.hpp
read_cov_matrix.hpp
rep_array.hpp
rep_matrix.hpp
rep_row_vector.hpp
rep_vector.hpp
resize.hpp
rising_factorial.hpp
round.hpp
row.hpp
rows.hpp
rows_dot_product.hpp
rows_dot_self.hpp
scale_matrix_exp_multiply.hpp
scaled_add.hpp
sd.hpp
segment.hpp
sign.hpp
simplex_constrain.hpp
simplex_free.hpp
sin.hpp
singular_values.hpp
sinh.hpp
size.hpp
size_zero.hpp
softmax.hpp
sort_asc.hpp
sort_desc.hpp
sort_indices.hpp
sort_indices_asc.hpp
sort_indices_desc.hpp
sqrt.hpp
square.hpp
squared_distance.hpp
stan_print.hpp
std_isinf.hpp
std_isnan.hpp
step.hpp
sub.hpp
sub_col.hpp
sub_row.hpp
subtract.hpp
sum.hpp
tail.hpp
tan.hpp
tanh.hpp
tcrossprod.hpp
tgamma.hpp
to_array_1d.hpp
to_array_2d.hpp
to_matrix.hpp
to_row_vector.hpp
to_vector.hpp
trace.hpp
trace_gen_inv_quad_form_ldlt.hpp
trace_gen_quad_form.hpp
trace_inv_quad_form_ldlt.hpp
trace_quad_form.hpp
transpose.hpp
trigamma.hpp
trunc.hpp
typedefs.hpp
ub_constrain.hpp
ub_free.hpp
unit_vector_constrain.hpp
unit_vector_free.hpp
value_of.hpp
value_of_rec.hpp
variance.hpp
welford_covar_estimator.hpp
welford_var_estimator.hpp

stan/math/functor

adj_jac_apply.hpp
algebra_solver_newton.hpp
algebra_solver_powell.hpp
apply_scalar_unary.hpp
coupled_ode_observer.hpp
coupled_ode_system.hpp
cvodes_ode_data.hpp
cvodes_utils.hpp
derivative.hpp
finite_diff_grad_hessian.hpp
finite_diff_grad_hessian_auto.hpp
grad_hessian.hpp
grad_tr_mat_times_hessian.hpp
gradient.hpp
gradient_dot_vector.hpp
hessian.hpp
hessian_times_vector.hpp
integrate_1d.hpp
integrate_dae.hpp
integrate_ode_adams.hpp
integrate_ode_bdf.hpp
integrate_ode_rk45.hpp
jacobian.hpp
map_rect_concurrent.hpp
map_rect_reduce.hpp
mpi_cluster.hpp
mpi_command.hpp
mpi_distributed_apply.hpp
partial_derivative.hpp

stan/math/prob

bernoulli_ccdf_log.hpp
bernoulli_cdf.hpp
bernoulli_cdf_log.hpp
bernoulli_lccdf.hpp
bernoulli_lcdf.hpp
bernoulli_log.hpp
bernoulli_logit_log.hpp
bernoulli_logit_lpmf.hpp
bernoulli_logit_rng.hpp
bernoulli_lpmf.hpp
bernoulli_rng.hpp
beta_binomial_ccdf_log.hpp
beta_binomial_cdf.hpp
beta_binomial_cdf_log.hpp
beta_binomial_lccdf.hpp>
beta_binomial_lcdf.hpp
beta_binomial_log.hpp
beta_binomial_lpmf.hpp
beta_binomial_rng.hpp
beta_ccdf_log.hpp
beta_cdf.hpp
beta_cdf_log.hpp
beta_lccdf.hpp
beta_lcdf.hpp
beta_log.hpp
beta_lpdf.hpp
beta_proportion_ccdf_log.hpp
beta_proportion_cdf_log.hpp
beta_proportion_lccdf.hpp
beta_proportion_lcdf.hpp
beta_proportion_log.hpp
beta_proportion_lpdf.hpp
beta_proportion_rng.hpp
beta_rng.hpp
binomial_ccdf_log.hpp>
binomial_cdf.hpp
binomial_cdf_log.hpp
binomial_lccdf.hpp
binomial_lcdf.hpp
binomial_log.hpp
binomial_logit_log.hpp
binomial_logit_lpmf.hpp
binomial_lpmf.hpp
binomial_rng.hpp
cauchy_ccdf_log.hpp
cauchy_cdf.hpp
cauchy_cdf_log.hpp
cauchy_lccdf.hpp
cauchy_lcdf.hpp
cauchy_log.hpp
cauchy_lpdf.hpp
cauchy_rng.hpp
chi_square_ccdf_log.hpp
chi_square_cdf.hpp
chi_square_cdf_log.hpp
chi_square_lccdf.hpp
chi_square_lcdf.hpp
chi_square_log.hpp
chi_square_lpdf.hpp
chi_square_rng.hpp
double_exponential_ccdf_log.hpp
double_exponential_cdf.hpp
double_exponential_cdf_log.hpp
double_exponential_lccdf.hpp
double_exponential_lcdf.hpp
double_exponential_log.hpp
double_exponential_lpdf.hpp
double_exponential_rng.hpp
exp_mod_normal_ccdf_log.hpp>
exp_mod_normal_cdf.hpp
exp_mod_normal_cdf_log.hpp
exp_mod_normal_lccdf.hpp
exp_mod_normal_lcdf.hpp
exp_mod_normal_log.hpp
exp_mod_normal_lpdf.hpp
exp_mod_normal_rng.hpp
exponential_ccdf_log.hpp
exponential_cdf.hpp
exponential_cdf_log.hpp
exponential_lccdf.hpp
exponential_lcdf.hpp
exponential_log.hpp
exponential_lpdf.hpp
exponential_rng.hpp
frechet_ccdf_log.hpp
frechet_cdf.hpp
frechet_cdf_log.hpp
frechet_lccdf.hpp
frechet_lcdf.hpp
frechet_log.hpp
frechet_lpdf.hpp
frechet_rng.hpp
gamma_ccdf_log.hpp
gamma_cdf.hpp
gamma_cdf_log.hpp
gamma_lccdf.hpp
gamma_lcdf.hpp
gamma_log.hpp
gamma_lpdf.hpp
gamma_rng.hpp
gumbel_ccdf_log.hpp
gumbel_cdf.hpp
gumbel_cdf_log.hpp
gumbel_lccdf.hpp
gumbel_lcdf.hpp
gumbel_log.hpp
gumbel_lpdf.hpp
gumbel_rng.hpp
hypergeometric_log.hpp
hypergeometric_lpmf.hpp
hypergeometric_rng.hpp
inv_chi_square_ccdf_log.hpp
inv_chi_square_cdf.hpp
inv_chi_square_cdf_log.hpp
inv_chi_square_lccdf.hpp
inv_chi_square_lcdf.hpp
inv_chi_square_log.hpp
inv_chi_square_lpdf.hpp>
inv_chi_square_rng.hpp
inv_gamma_ccdf_log.hpp
inv_gamma_cdf.hpp
inv_gamma_cdf_log.hpp
inv_gamma_lccdf.hpp
inv_gamma_lcdf.hpp
inv_gamma_log.hpp
inv_gamma_lpdf.hpp
inv_gamma_rng.hpp
logistic_ccdf_log.hpp
logistic_cdf.hpp
logistic_cdf_log.hpp
logistic_lccdf.hpp
logistic_lcdf.hpp
logistic_log.hpp
logistic_lpdf.hpp
logistic_rng.hpp
lognormal_ccdf_log.hpp
lognormal_cdf.hpp
lognormal_cdf_log.hpp
lognormal_lccdf.hpp
lognormal_lcdf.hpp
lognormal_log.hpp
lognormal_lpdf.hpp
lognormal_rng.hpp
neg_binomial_2_ccdf_log.hpp
neg_binomial_2_cdf.hpp
neg_binomial_2_cdf_log.hpp
neg_binomial_2_lccdf.hpp
neg_binomial_2_lcdf.hpp
neg_binomial_2_log.hpp
neg_binomial_2_log_log.hpp
neg_binomial_2_log_lpmf.hpp
neg_binomial_2_log_rng.hpp
neg_binomial_2_lpmf.hpp
neg_binomial_2_rng.hpp
neg_binomial_ccdf_log.hpp
neg_binomial_cdf.hpp
neg_binomial_cdf_log.hpp
neg_binomial_lccdf.hpp
neg_binomial_lcdf.hpp
neg_binomial_log.hpp
neg_binomial_lpmf.hpp
neg_binomial_rng.hpp
normal_ccdf_log.hpp
normal_cdf.hpp
normal_cdf_log.hpp
normal_lccdf.hpp
normal_lcdf.hpp
normal_log.hpp
normal_lpdf.hpp
normal_rng.hpp
normal_sufficient_log.hpp
normal_sufficient_lpdf.hpp
pareto_ccdf_log.hpp
pareto_cdf.hpp
pareto_cdf_log.hpp
pareto_lccdf.hpp
pareto_lcdf.hpp
pareto_log.hpp
pareto_lpdf.hpp
pareto_rng.hpp
pareto_type_2_ccdf_log.hpp
pareto_type_2_cdf.hpp
pareto_type_2_cdf_log.hpp
pareto_type_2_lccdf.hpp
pareto_type_2_lcdf.hpp
pareto_type_2_log.hpp
pareto_type_2_lpdf.hpp
pareto_type_2_rng.hpp
poisson_ccdf_log.hpp
poisson_cdf.hpp
poisson_cdf_log.hpp
poisson_lccdf.hpp
poisson_lcdf.hpp
poisson_log.hpp
poisson_log_log.hpp
poisson_log_lpmf.hpp
poisson_log_rng.hpp
poisson_lpmf.hpp
poisson_rng.hpp
rayleigh_ccdf_log.hpp
rayleigh_cdf.hpp
rayleigh_cdf_log.hpp
rayleigh_lccdf.hpp
rayleigh_lcdf.hpp
rayleigh_log.hpp
rayleigh_lpdf.hpp
rayleigh_rng.hpp
scaled_inv_chi_square_ccdf_log.hpp
scaled_inv_chi_square_cdf.hpp
scaled_inv_chi_square_cdf_log.hpp
scaled_inv_chi_square_lccdf.hpp
scaled_inv_chi_square_lcdf.hpp
scaled_inv_chi_square_log.hpp
scaled_inv_chi_square_lpdf.hpp
scaled_inv_chi_square_rng.hpp
skew_normal_ccdf_log.hpp
skew_normal_cdf.hpp
skew_normal_cdf_log.hpp
skew_normal_lccdf.hpp
skew_normal_lcdf.hpp
skew_normal_log.hpp
skew_normal_lpdf.hpp
skew_normal_rng.hpp
std_normal_log.hpp
std_normal_lpdf.hpp
student_t_ccdf_log.hpp
student_t_cdf.hpp
student_t_cdf_log.hpp
student_t_lccdf.hpp
student_t_lcdf.hpp
student_t_log.hpp
student_t_lpdf.hpp
student_t_rng.hpp
uniform_ccdf_log.hpp
uniform_cdf.hpp
uniform_cdf_log.hpp
uniform_lccdf.hpp
uniform_lcdf.hpp
uniform_log.hpp
uniform_lpdf.hpp
uniform_rng.hpp
von_mises_log.hpp
von_mises_lpdf.hpp
von_mises_rng.hpp
weibull_ccdf_log.hpp
weibull_cdf.hpp
weibull_cdf_log.hpp
weibull_lccdf.hpp
weibull_lcdf.hpp
weibull_log.hpp
weibull_lpdf.hpp
weibull_rng.hpp
wiener_log.hpp
wiener_lpdf.hpp