Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions src/stan_math_backend/Locations.ml
Original file line number Diff line number Diff line change
Expand Up @@ -38,10 +38,11 @@ let pp_globals ppf location_list =
:: ( List.filter ~f:(fun x -> x <> Location_span.empty) location_list
|> List.map ~f:(fun x -> " (in " ^ Location_span.to_string x ^ ")") )
in
let location_count = List.length location_list in
Fmt.pf ppf
"@ stan::math::profile_map profiles__;@ static int current_statement__= \
0;@ static const std::vector<std::string> locations_array__ = @ \
{@[<hov>%a@]};@ "
"@ stan::math::profile_map profiles__;@ static constexpr std::array<const \
char*, @[<hov>%d@]> locations_array__ = @ {@[<hov>%a@]};@ "
location_count
Fmt.(list ~sep:comma (fmt "%S"))
location_list

Expand Down
32 changes: 19 additions & 13 deletions src/stan_math_backend/Stan_math_code_gen.ml
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ let pp_unused = fmt "(void) %s; // suppress unused var warning"
@param fname Name of the function.
*)
let pp_function__ ppf (prog_name, fname) =
pf ppf {|@[<v>static const char* function__ = "%s_namespace::%s";@,%a@]|}
pf ppf {|@[<v>static constexpr char* function__ = "%s_namespace::%s";@,%a@]|}
prog_name fname pp_unused "function__"

(** Print the body of exception handling for functions *)
Expand Down Expand Up @@ -217,10 +217,11 @@ let pp_fun_def ppf Program.({fdrt; fdname; fdargs; fdbody; _})
in
let pp_body ppf (Stmt.Fixed.({pattern; _}) as fdbody) =
pf ppf "@[<hv 8>using local_scalar_t__ = %a;@]@," pp_promoted_scalar fdargs ;
pf ppf "int current_statement__ = 0; @ " ;
if List.exists ~f:(fun (_, _, t) -> UnsizedType.is_eigen_type t) fdargs
then pp_eigen_arg_to_ref ppf fdargs ;
if not (is_dist || is_lp) then (
pf ppf "%s@ " "const static bool propto__ = true;" ;
pf ppf "%s@ " "static constexpr bool propto__ = true;" ;
pf ppf "%s@ " "(void) propto__;" ) ;
pf ppf "%s@ "
"local_scalar_t__ DUMMY_VAR__(std::numeric_limits<double>::quiet_NaN());" ;
Expand Down Expand Up @@ -397,6 +398,7 @@ let pp_ctor ppf p =
in
pp_block ppf
( (fun ppf {Program.prog_name; prepare_data; output_vars; _} ->
pf ppf "int current_statement__ = 0;@ " ;
pf ppf "using local_scalar_t__ = double ;@ " ;
pf ppf "boost::ecuyer1988 base_rng__ = @ " ;
pf ppf " stan::services::util::create_rng(random_seed__, 0);@ " ;
Expand Down Expand Up @@ -493,10 +495,11 @@ let pp_method_b ppf rt name params intro ?(outro = nop) ?(cv_attr = ["const"])
(** Print the write_array method of the model class *)
let pp_write_array ppf {Program.prog_name; generate_quantities; _} =
pf ppf
"template <typename RNG, typename VecR, typename VecI, typename VecVar, \
stan::require_vector_like_vt<std::is_floating_point, VecR>* = nullptr, \
stan::require_vector_like_vt<std::is_integral, VecI>* = nullptr, \
stan::require_std_vector_vt<std::is_floating_point, VecVar>* = nullptr>" ;
"template <typename RNG, typename VecR, typename VecI, typename VecVar, @ \
stan::require_vector_like_vt<std::is_floating_point, VecR>* = nullptr, @ \
stan::require_vector_like_vt<std::is_integral, VecI>* = nullptr, @ \
stan::require_std_vector_vt<std::is_floating_point, VecVar>* = nullptr> \
@ " ;
let params =
[ "RNG& base_rng__"; "VecR& params_r__"; "VecI& params_i__"
; "VecVar& vars__"; "const bool emit_transformed_parameters__ = true"
Expand All @@ -509,6 +512,7 @@ let pp_write_array ppf {Program.prog_name; generate_quantities; _} =
; "stan::io::reader<local_scalar_t__> in__(params_r__, params_i__);"
; "double lp__ = 0.0;"
; "(void) lp__; // dummy to suppress unused var warning"
; "int current_statement__ = 0; "
; "stan::math::accumulator<double> lp_accum__;"
; "local_scalar_t__ \
DUMMY_VAR__(std::numeric_limits<double>::quiet_NaN());" ]
Expand Down Expand Up @@ -637,17 +641,18 @@ let pp_unconstrained_param_names ppf {Program.output_vars; _} =
(** Print the `transform_inits` method of the model class *)
let pp_transform_inits ppf {Program.transform_inits; _} =
pf ppf
"template <typename VecVar, typename VecI, \
stan::require_std_vector_t<VecVar>* = nullptr, \
stan::require_vector_like_vt<std::is_integral, VecI>* = nullptr>" ;
"template <typename VecVar, typename VecI, @ \
stan::require_std_vector_t<VecVar>* = nullptr, @ \
stan::require_vector_like_vt<std::is_integral, VecI>* = nullptr> @ " ;
let params =
[ "const stan::io::var_context& context__"; "VecI& params_i__"
; "VecVar& vars__"; "std::ostream* pstream__ = nullptr" ]
in
let intro ppf () =
pf ppf
"using local_scalar_t__ = \
double;@,vars__.clear();@,vars__.reserve(num_params_r__);"
double;@,vars__.clear();@,vars__.reserve(num_params_r__);@ int \
current_statement__ = 0; "
in
let cv_attr = ["const"] in
pp_method_b ppf "void" "transform_inits_impl" params intro transform_inits
Expand All @@ -656,9 +661,9 @@ let pp_transform_inits ppf {Program.transform_inits; _} =
(** Print the `log_prob` method of the model class *)
let pp_log_prob ppf Program.({prog_name; log_prob; _}) =
pf ppf
"template <bool propto__, bool jacobian__, typename VecR, typename VecI, \
stan::require_vector_like_t<VecR>* = nullptr, \
stan::require_vector_like_vt<std::is_integral, VecI>* = nullptr>" ;
"template <bool propto__, bool jacobian__ , typename VecR, typename VecI, \
@ stan::require_vector_like_t<VecR>* = nullptr, @ \
stan::require_vector_like_vt<std::is_integral, VecI>* = nullptr> @ " ;
let params =
[ "VecR& params_r__"; "VecI& params_i__"
; "std::ostream* pstream__ = nullptr" ]
Expand All @@ -669,6 +674,7 @@ let pp_log_prob ppf Program.({prog_name; log_prob; _}) =
; "using local_scalar_t__ = T__;"; "T__ lp__(0.0);"
; "stan::math::accumulator<T__> lp_accum__;"
; "stan::io::reader<local_scalar_t__> in__(params_r__, params_i__);"
; "int current_statement__ = 0;"
; "local_scalar_t__ \
DUMMY_VAR__(std::numeric_limits<double>::quiet_NaN());" ]
pp_unused "DUMMY_VAR__" pp_function__ (prog_name, "log_prob")
Expand Down
26 changes: 18 additions & 8 deletions test/integration/cli-args/filename_good.expected
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,7 @@ using namespace stan::math;


stan::math::profile_map profiles__;
static int current_statement__= 0;
static const std::vector<std::string> locations_array__ =
static constexpr std::array<const char*, 3> locations_array__ =
{" (found before start of program)",
" (in 'filename_good.stan', line 2, column 4 to column 11)",
" (in 'filename_good.stan', line 3, column 4 to column 19)"};
Expand All @@ -46,11 +45,12 @@ class filename_good_model final : public model_base_crtp<filename_good_model> {
filename_good_model(stan::io::var_context& context__,
unsigned int random_seed__ = 0,
std::ostream* pstream__ = nullptr) : model_base_crtp(0) {
int current_statement__ = 0;
using local_scalar_t__ = double ;
boost::ecuyer1988 base_rng__ =
stan::services::util::create_rng(random_seed__, 0);
(void) base_rng__; // suppress unused var warning
static const char* function__ = "filename_good_model_namespace::filename_good_model";
static constexpr char* function__ = "filename_good_model_namespace::filename_good_model";
(void) function__; // suppress unused var warning
local_scalar_t__ DUMMY_VAR__(std::numeric_limits<double>::quiet_NaN());
(void) DUMMY_VAR__; // suppress unused var warning
Expand Down Expand Up @@ -82,7 +82,9 @@ class filename_good_model final : public model_base_crtp<filename_good_model> {
throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***");
}
}
template <bool propto__, bool jacobian__, typename VecR, typename VecI, stan::require_vector_like_t<VecR>* = nullptr, stan::require_vector_like_vt<std::is_integral, VecI>* = nullptr>
template <bool propto__, bool jacobian__ , typename VecR, typename VecI,
stan::require_vector_like_t<VecR>* = nullptr,
stan::require_vector_like_vt<std::is_integral, VecI>* = nullptr>
inline stan::scalar_type_t<VecR> log_prob_impl(VecR& params_r__,
VecI& params_i__,
std::ostream* pstream__ = nullptr) const {
Expand All @@ -91,9 +93,10 @@ class filename_good_model final : public model_base_crtp<filename_good_model> {
T__ lp__(0.0);
stan::math::accumulator<T__> lp_accum__;
stan::io::reader<local_scalar_t__> in__(params_r__, params_i__);
int current_statement__ = 0;
local_scalar_t__ DUMMY_VAR__(std::numeric_limits<double>::quiet_NaN());
(void) DUMMY_VAR__; // suppress unused var warning
static const char* function__ = "filename_good_model_namespace::log_prob";
static constexpr char* function__ = "filename_good_model_namespace::log_prob";
(void) function__; // suppress unused var warning

try {
Expand All @@ -107,7 +110,10 @@ class filename_good_model final : public model_base_crtp<filename_good_model> {
return lp_accum__.sum();
} // log_prob_impl()

template <typename RNG, typename VecR, typename VecI, typename VecVar, stan::require_vector_like_vt<std::is_floating_point, VecR>* = nullptr, stan::require_vector_like_vt<std::is_integral, VecI>* = nullptr, stan::require_std_vector_vt<std::is_floating_point, VecVar>* = nullptr>
template <typename RNG, typename VecR, typename VecI, typename VecVar,
stan::require_vector_like_vt<std::is_floating_point, VecR>* = nullptr,
stan::require_vector_like_vt<std::is_integral, VecI>* = nullptr,
stan::require_std_vector_vt<std::is_floating_point, VecVar>* = nullptr>
inline void write_array_impl(RNG& base_rng__, VecR& params_r__,
VecI& params_i__, VecVar& vars__,
const bool emit_transformed_parameters__ = true,
Expand All @@ -118,10 +124,11 @@ class filename_good_model final : public model_base_crtp<filename_good_model> {
stan::io::reader<local_scalar_t__> in__(params_r__, params_i__);
double lp__ = 0.0;
(void) lp__; // dummy to suppress unused var warning
int current_statement__ = 0;
stan::math::accumulator<double> lp_accum__;
local_scalar_t__ DUMMY_VAR__(std::numeric_limits<double>::quiet_NaN());
(void) DUMMY_VAR__; // suppress unused var warning
static const char* function__ = "filename_good_model_namespace::write_array";
static constexpr char* function__ = "filename_good_model_namespace::write_array";
(void) function__; // suppress unused var warning

try {
Expand All @@ -139,13 +146,16 @@ class filename_good_model final : public model_base_crtp<filename_good_model> {
}
} // write_array_impl()

template <typename VecVar, typename VecI, stan::require_std_vector_t<VecVar>* = nullptr, stan::require_vector_like_vt<std::is_integral, VecI>* = nullptr>
template <typename VecVar, typename VecI,
stan::require_std_vector_t<VecVar>* = nullptr,
stan::require_vector_like_vt<std::is_integral, VecI>* = nullptr>
inline void transform_inits_impl(const stan::io::var_context& context__,
VecI& params_i__, VecVar& vars__,
std::ostream* pstream__ = nullptr) const {
using local_scalar_t__ = double;
vars__.clear();
vars__.reserve(num_params_r__);
int current_statement__ = 0;

try {
int pos__;
Expand Down
26 changes: 18 additions & 8 deletions test/integration/good/code-gen/cl.expected
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,7 @@ using namespace stan::math;


stan::math::profile_map profiles__;
static int current_statement__= 0;
static const std::vector<std::string> locations_array__ =
static constexpr std::array<const char*, 217> locations_array__ =
{" (found before start of program)",
" (in 'optimize_glm.stan', line 27, column 2 to column 20)",
" (in 'optimize_glm.stan', line 28, column 2 to column 17)",
Expand Down Expand Up @@ -283,11 +282,12 @@ class optimize_glm_model final : public model_base_crtp<optimize_glm_model> {
optimize_glm_model(stan::io::var_context& context__,
unsigned int random_seed__ = 0,
std::ostream* pstream__ = nullptr) : model_base_crtp(0) {
int current_statement__ = 0;
using local_scalar_t__ = double ;
boost::ecuyer1988 base_rng__ =
stan::services::util::create_rng(random_seed__, 0);
(void) base_rng__; // suppress unused var warning
static const char* function__ = "optimize_glm_model_namespace::optimize_glm_model";
static constexpr char* function__ = "optimize_glm_model_namespace::optimize_glm_model";
(void) function__; // suppress unused var warning
local_scalar_t__ DUMMY_VAR__(std::numeric_limits<double>::quiet_NaN());
(void) DUMMY_VAR__; // suppress unused var warning
Expand Down Expand Up @@ -556,7 +556,9 @@ class optimize_glm_model final : public model_base_crtp<optimize_glm_model> {
throw std::runtime_error("*** IF YOU SEE THIS, PLEASE REPORT A BUG ***");
}
}
template <bool propto__, bool jacobian__, typename VecR, typename VecI, stan::require_vector_like_t<VecR>* = nullptr, stan::require_vector_like_vt<std::is_integral, VecI>* = nullptr>
template <bool propto__, bool jacobian__ , typename VecR, typename VecI,
stan::require_vector_like_t<VecR>* = nullptr,
stan::require_vector_like_vt<std::is_integral, VecI>* = nullptr>
inline stan::scalar_type_t<VecR> log_prob_impl(VecR& params_r__,
VecI& params_i__,
std::ostream* pstream__ = nullptr) const {
Expand All @@ -565,9 +567,10 @@ class optimize_glm_model final : public model_base_crtp<optimize_glm_model> {
T__ lp__(0.0);
stan::math::accumulator<T__> lp_accum__;
stan::io::reader<local_scalar_t__> in__(params_r__, params_i__);
int current_statement__ = 0;
local_scalar_t__ DUMMY_VAR__(std::numeric_limits<double>::quiet_NaN());
(void) DUMMY_VAR__; // suppress unused var warning
static const char* function__ = "optimize_glm_model_namespace::log_prob";
static constexpr char* function__ = "optimize_glm_model_namespace::log_prob";
(void) function__; // suppress unused var warning

try {
Expand Down Expand Up @@ -1270,7 +1273,10 @@ class optimize_glm_model final : public model_base_crtp<optimize_glm_model> {
return lp_accum__.sum();
} // log_prob_impl()

template <typename RNG, typename VecR, typename VecI, typename VecVar, stan::require_vector_like_vt<std::is_floating_point, VecR>* = nullptr, stan::require_vector_like_vt<std::is_integral, VecI>* = nullptr, stan::require_std_vector_vt<std::is_floating_point, VecVar>* = nullptr>
template <typename RNG, typename VecR, typename VecI, typename VecVar,
stan::require_vector_like_vt<std::is_floating_point, VecR>* = nullptr,
stan::require_vector_like_vt<std::is_integral, VecI>* = nullptr,
stan::require_std_vector_vt<std::is_floating_point, VecVar>* = nullptr>
inline void write_array_impl(RNG& base_rng__, VecR& params_r__,
VecI& params_i__, VecVar& vars__,
const bool emit_transformed_parameters__ = true,
Expand All @@ -1281,10 +1287,11 @@ class optimize_glm_model final : public model_base_crtp<optimize_glm_model> {
stan::io::reader<local_scalar_t__> in__(params_r__, params_i__);
double lp__ = 0.0;
(void) lp__; // dummy to suppress unused var warning
int current_statement__ = 0;
stan::math::accumulator<double> lp_accum__;
local_scalar_t__ DUMMY_VAR__(std::numeric_limits<double>::quiet_NaN());
(void) DUMMY_VAR__; // suppress unused var warning
static const char* function__ = "optimize_glm_model_namespace::write_array";
static constexpr char* function__ = "optimize_glm_model_namespace::write_array";
(void) function__; // suppress unused var warning

try {
Expand Down Expand Up @@ -1379,13 +1386,16 @@ class optimize_glm_model final : public model_base_crtp<optimize_glm_model> {
}
} // write_array_impl()

template <typename VecVar, typename VecI, stan::require_std_vector_t<VecVar>* = nullptr, stan::require_vector_like_vt<std::is_integral, VecI>* = nullptr>
template <typename VecVar, typename VecI,
stan::require_std_vector_t<VecVar>* = nullptr,
stan::require_vector_like_vt<std::is_integral, VecI>* = nullptr>
inline void transform_inits_impl(const stan::io::var_context& context__,
VecI& params_i__, VecVar& vars__,
std::ostream* pstream__ = nullptr) const {
using local_scalar_t__ = double;
vars__.clear();
vars__.reserve(num_params_r__);
int current_statement__ = 0;

try {
int pos__;
Expand Down
Loading