// Code generated by stanc v2.29.2 #include namespace bernoulli_model_namespace { using stan::model::model_base_crtp; using namespace stan::math; stan::math::profile_map profiles__; static constexpr std::array locations_array__ = {" (found before start of program)", " (in 'examples/bernoulli/bernoulli.stan', line 9, column 2 to column 31)", " (in 'examples/bernoulli/bernoulli.stan', line 16, column 2 to column 12)", " (in 'examples/bernoulli/bernoulli.stan', line 17, column 2 to column 26)", " (in 'examples/bernoulli/bernoulli.stan', line 12, column 2 to column 21)", " (in 'examples/bernoulli/bernoulli.stan', line 13, column 2 to column 23)", " (in 'examples/bernoulli/bernoulli.stan', line 5, column 2 to column 17)", " (in 'examples/bernoulli/bernoulli.stan', line 6, column 8 to column 9)", " (in 'examples/bernoulli/bernoulli.stan', line 6, column 2 to column 35)"}; template * = nullptr> stan::promote_args_t make_odds(const T0__& theta, std::ostream* pstream__) ; class bernoulli_model final : public model_base_crtp { private: int N; std::vector y; public: ~bernoulli_model() { } inline std::string model_name() const final { return "bernoulli_model"; } inline std::vector model_compile_info() const noexcept { return std::vector{"stanc_version = stanc3 v2.29.2", "stancflags = --allow-undefined"}; } bernoulli_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 constexpr const char* function__ = "bernoulli_model_namespace::bernoulli_model"; (void) function__; // suppress unused var warning local_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); (void) DUMMY_VAR__; // suppress unused var warning try { int pos__ = std::numeric_limits::min(); pos__ = 1; current_statement__ = 6; context__.validate_dims("data initialization","N","int", std::vector{}); N = std::numeric_limits::min(); current_statement__ = 6; N = context__.vals_i("N")[(1 - 1)]; current_statement__ = 6; stan::math::check_greater_or_equal(function__, "N", N, 0); current_statement__ = 7; stan::math::validate_non_negative_index("y", "N", N); current_statement__ = 8; context__.validate_dims("data initialization","y","int", std::vector{static_cast(N)}); y = std::vector(N, std::numeric_limits::min()); current_statement__ = 8; y = context__.vals_i("y"); current_statement__ = 8; stan::math::check_greater_or_equal(function__, "y", y, 0); current_statement__ = 8; stan::math::check_less_or_equal(function__, "y", y, 1); } catch (const std::exception& e) { stan::lang::rethrow_located(e, locations_array__[current_statement__]); } num_params_r__ = 1; } template * = nullptr, stan::require_vector_like_vt* = nullptr> inline stan::scalar_type_t log_prob_impl(VecR& params_r__, VecI& params_i__, std::ostream* pstream__ = nullptr) const { using T__ = stan::scalar_type_t; using local_scalar_t__ = T__; T__ lp__(0.0); stan::math::accumulator lp_accum__; stan::io::deserializer in__(params_r__, params_i__); int current_statement__ = 0; local_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); (void) DUMMY_VAR__; // suppress unused var warning static constexpr const char* function__ = "bernoulli_model_namespace::log_prob"; (void) function__; // suppress unused var warning try { local_scalar_t__ theta = DUMMY_VAR__; current_statement__ = 1; theta = in__.template read_constrain_lub( 0, 1, lp__); { current_statement__ = 4; lp_accum__.add(stan::math::beta_lpdf(theta, 1, 1)); current_statement__ = 5; lp_accum__.add(stan::math::bernoulli_lpmf(y, theta)); } } catch (const std::exception& e) { stan::lang::rethrow_located(e, locations_array__[current_statement__]); } lp_accum__.add(lp__); return lp_accum__.sum(); } // log_prob_impl() template * = nullptr, stan::require_vector_like_vt* = nullptr, stan::require_std_vector_vt* = nullptr> inline void write_array_impl(RNG& base_rng__, VecR& params_r__, VecI& params_i__, VecVar& vars__, const bool emit_transformed_parameters__ = true, const bool emit_generated_quantities__ = true, std::ostream* pstream__ = nullptr) const { using local_scalar_t__ = double; stan::io::deserializer in__(params_r__, params_i__); stan::io::serializer out__(vars__); static constexpr bool propto__ = true; (void) propto__; double lp__ = 0.0; (void) lp__; // dummy to suppress unused var warning int current_statement__ = 0; stan::math::accumulator lp_accum__; local_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); constexpr bool jacobian__ = false; (void) DUMMY_VAR__; // suppress unused var warning static constexpr const char* function__ = "bernoulli_model_namespace::write_array"; (void) function__; // suppress unused var warning try { double theta = std::numeric_limits::quiet_NaN(); current_statement__ = 1; theta = in__.template read_constrain_lub( 0, 1, lp__); out__.write(theta); if (stan::math::logical_negation((stan::math::primitive_value( emit_transformed_parameters__) || stan::math::primitive_value( emit_generated_quantities__)))) { return ; } if (stan::math::logical_negation(emit_generated_quantities__)) { return ; } double odds = std::numeric_limits::quiet_NaN(); current_statement__ = 3; odds = make_odds(theta, pstream__); out__.write(odds); } catch (const std::exception& e) { stan::lang::rethrow_located(e, locations_array__[current_statement__]); } } // write_array_impl() template * = nullptr, stan::require_vector_like_vt* = nullptr> inline void transform_inits_impl(VecVar& params_r__, VecI& params_i__, VecVar& vars__, std::ostream* pstream__ = nullptr) const { using local_scalar_t__ = double; stan::io::deserializer in__(params_r__, params_i__); stan::io::serializer out__(vars__); int current_statement__ = 0; local_scalar_t__ DUMMY_VAR__(std::numeric_limits::quiet_NaN()); try { int pos__ = std::numeric_limits::min(); pos__ = 1; local_scalar_t__ theta = DUMMY_VAR__; theta = in__.read(); out__.write_free_lub(0, 1, theta); } catch (const std::exception& e) { stan::lang::rethrow_located(e, locations_array__[current_statement__]); } } // transform_inits_impl() inline void get_param_names(std::vector& names__) const { names__ = std::vector{"theta", "odds"}; } // get_param_names() inline void get_dims(std::vector>& dimss__) const { dimss__ = std::vector>{std::vector{}, std::vector{}}; } // get_dims() inline void constrained_param_names( std::vector& param_names__, bool emit_transformed_parameters__ = true, bool emit_generated_quantities__ = true) const final { param_names__.emplace_back(std::string() + "theta"); if (emit_transformed_parameters__) { } if (emit_generated_quantities__) { param_names__.emplace_back(std::string() + "odds"); } } // constrained_param_names() inline void unconstrained_param_names( std::vector& param_names__, bool emit_transformed_parameters__ = true, bool emit_generated_quantities__ = true) const final { param_names__.emplace_back(std::string() + "theta"); if (emit_transformed_parameters__) { } if (emit_generated_quantities__) { param_names__.emplace_back(std::string() + "odds"); } } // unconstrained_param_names() inline std::string get_constrained_sizedtypes() const { return std::string("[{\"name\":\"theta\",\"type\":{\"name\":\"real\"},\"block\":\"parameters\"},{\"name\":\"odds\",\"type\":{\"name\":\"real\"},\"block\":\"generated_quantities\"}]"); } // get_constrained_sizedtypes() inline std::string get_unconstrained_sizedtypes() const { return std::string("[{\"name\":\"theta\",\"type\":{\"name\":\"real\"},\"block\":\"parameters\"},{\"name\":\"odds\",\"type\":{\"name\":\"real\"},\"block\":\"generated_quantities\"}]"); } // get_unconstrained_sizedtypes() // Begin method overload boilerplate template inline void write_array(RNG& base_rng, Eigen::Matrix& params_r, Eigen::Matrix& vars, const bool emit_transformed_parameters = true, const bool emit_generated_quantities = true, std::ostream* pstream = nullptr) const { const size_t num_params__ = 1; const size_t num_transformed = 0; const size_t num_gen_quantities = 1; std::vector vars_vec(num_params__ + (emit_transformed_parameters * num_transformed) + (emit_generated_quantities * num_gen_quantities)); std::vector params_i; write_array_impl(base_rng, params_r, params_i, vars_vec, emit_transformed_parameters, emit_generated_quantities, pstream); vars = Eigen::Map>( vars_vec.data(), vars_vec.size()); } template inline void write_array(RNG& base_rng, std::vector& params_r, std::vector& params_i, std::vector& vars, bool emit_transformed_parameters = true, bool emit_generated_quantities = true, std::ostream* pstream = nullptr) const { const size_t num_params__ = 1; const size_t num_transformed = 0; const size_t num_gen_quantities = 1; vars.resize(num_params__ + (emit_transformed_parameters * num_transformed) + (emit_generated_quantities * num_gen_quantities)); write_array_impl(base_rng, params_r, params_i, vars, emit_transformed_parameters, emit_generated_quantities, pstream); } template inline T_ log_prob(Eigen::Matrix& params_r, std::ostream* pstream = nullptr) const { Eigen::Matrix params_i; return log_prob_impl(params_r, params_i, pstream); } template inline T__ log_prob(std::vector& params_r, std::vector& params_i, std::ostream* pstream = nullptr) const { return log_prob_impl(params_r, params_i, pstream); } inline void transform_inits(const stan::io::var_context& context, Eigen::Matrix& params_r, std::ostream* pstream = nullptr) const final { std::vector params_r_vec(params_r.size()); std::vector params_i; transform_inits(context, params_i, params_r_vec, pstream); params_r = Eigen::Map>( params_r_vec.data(), params_r_vec.size()); } inline void transform_inits(const stan::io::var_context& context, std::vector& params_i, std::vector& vars, std::ostream* pstream__ = nullptr) const { constexpr std::array names__{"theta"}; const std::array constrain_param_sizes__{1}; const auto num_constrained_params__ = std::accumulate( constrain_param_sizes__.begin(), constrain_param_sizes__.end(), 0); std::vector params_r_flat__(num_constrained_params__); Eigen::Index size_iter__ = 0; Eigen::Index flat_iter__ = 0; for (auto&& param_name__ : names__) { const auto param_vec__ = context.vals_r(param_name__); for (Eigen::Index i = 0; i < constrain_param_sizes__[size_iter__]; ++i) { params_r_flat__[flat_iter__] = param_vec__[i]; ++flat_iter__; } ++size_iter__; } vars.resize(num_params_r__); transform_inits_impl(params_r_flat__, params_i, vars, pstream__); } // transform_inits() }; } using stan_model = bernoulli_model_namespace::bernoulli_model; #ifndef USING_R // Boilerplate stan::model::model_base& new_model( stan::io::var_context& data_context, unsigned int seed, std::ostream* msg_stream) { stan_model* m = new stan_model(data_context, seed, msg_stream); return *m; } stan::math::profile_map& get_stan_profile_data() { return bernoulli_model_namespace::profiles__; } #endif