cmdstanpy icon indicating copy to clipboard operation
cmdstanpy copied to clipboard

Stan Model not compiling with external c++

Open mathDR opened this issue 3 years ago • 13 comments

Summary:

Attempting a minimal example of compiling against external c++ code from this example

Description:

Using a Stan model of

functions {
  real make_odds(real theta);
}
data {
  int<lower=0> N;
  array[N] int<lower=0, upper=1> y;
}
parameters {
  real<lower=0, upper=1> theta;
}
model {
  theta ~ beta(1, 1); // uniform prior on interval 0, 1
  y ~ bernoulli(theta);
}
generated quantities {
  real odds;
  odds = make_odds(theta);
}

and an external bernoulli.hpp:

#include <boost/math/tools/promotion.hpp>
#include <ostream>

namespace bernoulli_model_namespace {
    template <typename T0__>  inline  typename
          boost::math::tools::promote_args<T0__>::type
          make_odds(const T0__& theta, std::ostream* pstream__) {
            return theta / (1 - theta);
       }
}

I get a

15:22:19 - cmdstanpy - INFO - compiling stan file .../bernoulli_external.stan to exe file .../bernoulli_external
15:22:22 - cmdstanpy - WARNING - CmdStan's precompiled header (PCH) files may need to be rebuilt.If your model failed to compile please run cmdstanpy.rebuild_cmdstan().
If the issue persists please open a bug report

(where I replaced the actual directory structure on my computer with ...).

I ran cmdstanpy.rebuild_cmdstan() and the issue persists.

Additional Information:

None

Current Version:

Output of cmdstanpy.show_versions(): INSTALLED VERSIONS

python: 3.7.7 (default, Aug 20 2020, 14:13:25) [Clang 12.0.0 (clang-1200.0.31.1)] python-bits: 64 OS: Darwin OS-release: 21.6.0 machine: x86_64 processor: i386 byteorder: little LC_ALL: None LANG: en_US.UTF-8 LOCALE: ('en_US', 'UTF-8') cmdstan_folder: /Users/danmarthaler/.cmdstan/cmdstan-2.30.1 cmdstan: (2, 30) cmdstanpy: 1.0.4 pandas: 1.3.5 xarray: 0.20.2 tdqm: None numpy: 1.21.6 ujson: 3.1.0 at least the cmdstan and cmdstanpy versions used.

mathDR avatar Sep 02 '22 19:09 mathDR

Can you enable debug logging (https://mc-stan.org/cmdstanpy/users-guide/outputs.html#logging) and post the output that yields?

WardBrian avatar Sep 02 '22 19:09 WardBrian

@WardBrian here you go

15:59:29 - cmdstanpy - INFO - compiling stan file /Users/danmarthaler/marthaler/holidays/new_model/external_example/bernoulli_external.stan to exe file /Users/danmarthaler/marthaler/holidays/new_model/external_example/bernoulli_external
15:59:29 - cmdstanpy - DEBUG - cmd: make STANCFLAGS+=--allow-undefined USER_HEADER=/Users/danmarthaler/marthaler/holidays/new_model/external_example/make_odds.hpp /Users/danmarthaler/marthaler/holidays/new_model/external_example/bernoulli_external
cwd: /Users/danmarthaler/.cmdstan/cmdstan-2.30.1
15:59:29 - cmdstanpy - DEBUG - Console output:
cc        -Wl,-L,"/Users/danmarthaler/.cmdstan/cmdstan-2.30.1/stan/lib/stan_math/lib/tbb" -Wl,-rpath,"/Users/danmarthaler/.cmdstan/cmdstan-2.30.1/stan/lib/stan_math/lib/tbb"      /Users/danmarthaler/marthaler/holidays/new_model/external_example/bernoulli_external.o stan/src/stan/model/model_header.hpp.gch         -Wl,-L,"/Users/danmarthaler/.cmdstan/cmdstan-2.30.1/stan/lib/stan_math/lib/tbb" -Wl,-rpath,"/Users/danmarthaler/.cmdstan/cmdstan-2.30.1/stan/lib/stan_math/lib/tbb"   -o /Users/danmarthaler/marthaler/holidays/new_model/external_example/bernoulli_external
error: invalid value 'precompiled-header' in '-x precompiled-header'
make: *** [/Users/danmarthaler/marthaler/holidays/new_model/external_example/bernoulli_external] Error 1

Command ['make', 'STANCFLAGS+=--allow-undefined', 'USER_HEADER=/Users/danmarthaler/marthaler/holidays/new_model/external_example/make_odds.hpp', '/Users/danmarthaler/marthaler/holidays/new_model/external_example/bernoulli_external']
	error during processing No such file or directory

15:59:29 - cmdstanpy - WARNING - CmdStan's precompiled header (PCH) files may need to be rebuilt.If your model failed to compile please run cmdstanpy.rebuild_cmdstan().
If the issue persists please open a bug report

mathDR avatar Sep 02 '22 20:09 mathDR

It appears that the compiler is not finding the make_odds.hpp file? Is it not supposed to reside in the same directory as the stan file?

mathDR avatar Sep 02 '22 20:09 mathDR

error: invalid value 'precompiled-header' in '-x precompiled-header'

This is not an error I've ever seen before. Could you try running os.environ['PRECOMPILED_HEADERS'] = 'false' and trying again with the debug logging?

WardBrian avatar Sep 06 '22 14:09 WardBrian

Hey @WardBrian I am on PTO this week, but will report back early next!

mathDR avatar Sep 07 '22 03:09 mathDR

Okay I am back. Here is the all.log with os.environ['PRECOMPILED_HEADERS'] = 'false':

09:18:54 - cmdstanpy - INFO - compiling stan file /Users/danmarthaler/marthaler/holidays/new_model/external_example/bernoulli_external.stan to exe file /Users/danmarthaler/marthaler/holidays/new_model/external_example/bernoulli_external
09:18:54 - cmdstanpy - DEBUG - cmd: make STANCFLAGS+=--allow-undefined USER_HEADER=/Users/danmarthaler/marthaler/holidays/new_model/external_example/make_odds.hpp /Users/danmarthaler/marthaler/holidays/new_model/external_example/bernoulli_external
cwd: /Users/danmarthaler/.cmdstan/cmdstan-2.30.1
09:19:07 - cmdstanpy - DEBUG - Console output:

--- Translating Stan model to C++ code ---
bin/stanc --allow-undefined --o=/Users/danmarthaler/marthaler/holidays/new_model/external_example/bernoulli_external.hpp /Users/danmarthaler/marthaler/holidays/new_model/external_example/bernoulli_external.stan

--- Compiling, linking C++ code ---
clang++ -std=c++1y -Wno-unknown-warning-option -Wno-tautological-compare -Wno-sign-compare -D_REENTRANT -Wno-ignored-attributes      -I stan/lib/stan_math/lib/tbb_2020.3/include    -O3 -I src -I stan/src -I lib/rapidjson_1.1.0/ -I lib/CLI11-1.9.1/ -I stan/lib/stan_math/ -I stan/lib/stan_math/lib/eigen_3.3.9 -I stan/lib/stan_math/lib/boost_1.78.0 -I stan/lib/stan_math/lib/sundials_6.1.1/include -I stan/lib/stan_math/lib/sundials_6.1.1/src/sundials    -DBOOST_DISABLE_ASSERTS          -c -include /Users/danmarthaler/marthaler/holidays/new_model/external_example/make_odds.hpp -x c++ -o /Users/danmarthaler/marthaler/holidays/new_model/external_example/bernoulli_external.o /Users/danmarthaler/marthaler/holidays/new_model/external_example/bernoulli_external.hpp
clang++ -std=c++1y -Wno-unknown-warning-option -Wno-tautological-compare -Wno-sign-compare -D_REENTRANT -Wno-ignored-attributes      -I stan/lib/stan_math/lib/tbb_2020.3/include    -O3 -I src -I stan/src -I lib/rapidjson_1.1.0/ -I lib/CLI11-1.9.1/ -I stan/lib/stan_math/ -I stan/lib/stan_math/lib/eigen_3.3.9 -I stan/lib/stan_math/lib/boost_1.78.0 -I stan/lib/stan_math/lib/sundials_6.1.1/include -I stan/lib/stan_math/lib/sundials_6.1.1/src/sundials    -DBOOST_DISABLE_ASSERTS                -Wl,-L,"/Users/danmarthaler/.cmdstan/cmdstan-2.30.1/stan/lib/stan_math/lib/tbb" -Wl,-rpath,"/Users/danmarthaler/.cmdstan/cmdstan-2.30.1/stan/lib/stan_math/lib/tbb"      /Users/danmarthaler/marthaler/holidays/new_model/external_example/bernoulli_external.o src/cmdstan/main.o        -Wl,-L,"/Users/danmarthaler/.cmdstan/cmdstan-2.30.1/stan/lib/stan_math/lib/tbb" -Wl,-rpath,"/Users/danmarthaler/.cmdstan/cmdstan-2.30.1/stan/lib/stan_math/lib/tbb"   stan/lib/stan_math/lib/sundials_6.1.1/lib/libsundials_nvecserial.a stan/lib/stan_math/lib/sundials_6.1.1/lib/libsundials_cvodes.a stan/lib/stan_math/lib/sundials_6.1.1/lib/libsundials_idas.a stan/lib/stan_math/lib/sundials_6.1.1/lib/libsundials_kinsol.a  stan/lib/stan_math/lib/tbb/libtbb.dylib stan/lib/stan_math/lib/tbb/libtbbmalloc.dylib stan/lib/stan_math/lib/tbb/libtbbmalloc_proxy.dylib -o /Users/danmarthaler/marthaler/holidays/new_model/external_example/bernoulli_external
Undefined symbols for architecture x86_64:
  "boost::math::tools::promote_args<double, float, float, float, float, float>::type bernoulli_external_model_namespace::make_odds<double, (void*)0>(double const&, std::__1::basic_ostream<char, std::__1::char_traits<char> >*)", referenced from:
      void bernoulli_external_model_namespace::bernoulli_external_model::write_array_impl<boost::random::additive_combine_engine<boost::random::linear_congruential_engine<unsigned int, 40014u, 0u, 2147483563u>, boost::random::linear_congruential_engine<unsigned int, 40692u, 0u, 2147483399u> >, Eigen::Matrix<double, -1, 1, 0, -1, 1>, std::__1::vector<int, std::__1::allocator<int> >, Eigen::Matrix<double, -1, 1, 0, -1, 1>, (void*)0, (void*)0, (void*)0>(boost::random::additive_combine_engine<boost::random::linear_congruential_engine<unsigned int, 40014u, 0u, 2147483563u>, boost::random::linear_congruential_engine<unsigned int, 40692u, 0u, 2147483399u> >&, Eigen::Matrix<double, -1, 1, 0, -1, 1>&, std::__1::vector<int, std::__1::allocator<int> >&, Eigen::Matrix<double, -1, 1, 0, -1, 1>&, bool, bool, std::__1::basic_ostream<char, std::__1::char_traits<char> >*) const in bernoulli_external.o
      void bernoulli_external_model_namespace::bernoulli_external_model::write_array_impl<boost::random::additive_combine_engine<boost::random::linear_congruential_engine<unsigned int, 40014u, 0u, 2147483563u>, boost::random::linear_congruential_engine<unsigned int, 40692u, 0u, 2147483399u> >, std::__1::vector<double, std::__1::allocator<double> >, std::__1::vector<int, std::__1::allocator<int> >, std::__1::vector<double, std::__1::allocator<double> >, (void*)0, (void*)0, (void*)0>(boost::random::additive_combine_engine<boost::random::linear_congruential_engine<unsigned int, 40014u, 0u, 2147483563u>, boost::random::linear_congruential_engine<unsigned int, 40692u, 0u, 2147483399u> >&, std::__1::vector<double, std::__1::allocator<double> >&, std::__1::vector<int, std::__1::allocator<int> >&, std::__1::vector<double, std::__1::allocator<double> >&, bool, bool, std::__1::basic_ostream<char, std::__1::char_traits<char> >*) const in bernoulli_external.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [/Users/danmarthaler/marthaler/holidays/new_model/external_example/bernoulli_external] Error 1

Command ['make', 'STANCFLAGS+=--allow-undefined', 'USER_HEADER=/Users/danmarthaler/marthaler/holidays/new_model/external_example/make_odds.hpp', '/Users/danmarthaler/marthaler/holidays/new_model/external_example/bernoulli_external']
	error during processing No such file or directory

mathDR avatar Sep 12 '22 13:09 mathDR

Huh, that's a new one for me. Can you try changing the hpp file to use stan::promote_args_t<T0__> instead of typename boost::math::tools::promote_args as the return type? I'm not sure why this would make a difference, but I know that that Stan has switched to using that more

WardBrian avatar Sep 12 '22 13:09 WardBrian

@WardBrian Unfortunately my computer died this morning. I am getting a replacement, but that will be a macbook pro M1 chip, so I may not be able to reproduce this issue. I will run the example when I get my new machine and report back.

mathDR avatar Sep 13 '22 00:09 mathDR

Okay I think the same error is plaguing me on my new Apple M1.

What I have done: external_bernoulli.stan:

functions {
  real make_odds(real theta);
}
data {
  int<lower=0> N;
  array[N] int<lower=0, upper=1> y;
}
parameters {
  real<lower=0, upper=1> theta;
}
model {
  theta ~ beta(1, 1); // uniform prior on interval 0, 1
  y ~ bernoulli(theta);
}
generated quantities {
  real odds;
  odds = make_odds(theta);
}

make_odds.hpp:

#include <stan/model/model_header.hpp>
#include <ostream>

namespace bernoulli_model_namespace {
  template <typename T0__,
            stan::require_all_t<stan::is_stan_scalar<T0__>>* = nullptr>
    stan::promote_args_t<T0__>
    make_odds(const T0__& theta, std::ostream* pstream__) {
      return theta / (1. - theta);
    }
}

Then I run

model_external = CmdStanModel(
    stan_file='external_bernoulli.stan',
    user_header='make_odds.hpp',
)

and get

15:26:11 - cmdstanpy - INFO - compiling stan file /Users/daniel.marthaler/dev/marthaler/holidays/external_function/external_bernoulli.stan to exe file /Users/daniel.marthaler/dev/marthaler/holidays/external_function/external_bernoulli
15:26:11 - cmdstanpy - DEBUG - cmd: make STANCFLAGS+=--allow-undefined USER_HEADER=/Users/daniel.marthaler/dev/marthaler/holidays/external_function/make_odds.hpp /Users/daniel.marthaler/dev/marthaler/holidays/external_function/external_bernoulli
cwd: /Users/daniel.marthaler/.cmdstan/cmdstan-2.30.1
15:26:13 - cmdstanpy - DEBUG - Console output:

--- Translating Stan model to C++ code ---
bin/stanc --allow-undefined --o=/Users/daniel.marthaler/dev/marthaler/holidays/external_function/external_bernoulli.hpp /Users/daniel.marthaler/dev/marthaler/holidays/external_function/external_bernoulli.stan

--- Compiling, linking C++ code ---
clang++ -std=c++1y -Wno-unknown-warning-option -Wno-tautological-compare -Wno-sign-compare -D_REENTRANT -Wno-ignored-attributes      -I stan/lib/stan_math/lib/tbb_2020.3/include    -O3 -I src -I stan/src -I lib/rapidjson_1.1.0/ -I lib/CLI11-1.9.1/ -I stan/lib/stan_math/ -I stan/lib/stan_math/lib/eigen_3.3.9 -I stan/lib/stan_math/lib/boost_1.78.0 -I stan/lib/stan_math/lib/sundials_6.1.1/include -I stan/lib/stan_math/lib/sundials_6.1.1/src/sundials    -DBOOST_DISABLE_ASSERTS          -c -include-pch stan/src/stan/model/model_header.hpp.gch -include /Users/daniel.marthaler/dev/marthaler/holidays/external_function/make_odds.hpp -x c++ -o /Users/daniel.marthaler/dev/marthaler/holidays/external_function/external_bernoulli.o /Users/daniel.marthaler/dev/marthaler/holidays/external_function/external_bernoulli.hpp
clang++ -std=c++1y -Wno-unknown-warning-option -Wno-tautological-compare -Wno-sign-compare -D_REENTRANT -Wno-ignored-attributes      -I stan/lib/stan_math/lib/tbb_2020.3/include    -O3 -I src -I stan/src -I lib/rapidjson_1.1.0/ -I lib/CLI11-1.9.1/ -I stan/lib/stan_math/ -I stan/lib/stan_math/lib/eigen_3.3.9 -I stan/lib/stan_math/lib/boost_1.78.0 -I stan/lib/stan_math/lib/sundials_6.1.1/include -I stan/lib/stan_math/lib/sundials_6.1.1/src/sundials    -DBOOST_DISABLE_ASSERTS                -Wl,-L,"/Users/daniel.marthaler/.cmdstan/cmdstan-2.30.1/stan/lib/stan_math/lib/tbb" -Wl,-rpath,"/Users/daniel.marthaler/.cmdstan/cmdstan-2.30.1/stan/lib/stan_math/lib/tbb"      /Users/daniel.marthaler/dev/marthaler/holidays/external_function/external_bernoulli.o src/cmdstan/main.o        -Wl,-L,"/Users/daniel.marthaler/.cmdstan/cmdstan-2.30.1/stan/lib/stan_math/lib/tbb" -Wl,-rpath,"/Users/daniel.marthaler/.cmdstan/cmdstan-2.30.1/stan/lib/stan_math/lib/tbb"   stan/lib/stan_math/lib/sundials_6.1.1/lib/libsundials_nvecserial.a stan/lib/stan_math/lib/sundials_6.1.1/lib/libsundials_cvodes.a stan/lib/stan_math/lib/sundials_6.1.1/lib/libsundials_idas.a stan/lib/stan_math/lib/sundials_6.1.1/lib/libsundials_kinsol.a  stan/lib/stan_math/lib/tbb/libtbb.dylib stan/lib/stan_math/lib/tbb/libtbbmalloc.dylib stan/lib/stan_math/lib/tbb/libtbbmalloc_proxy.dylib -o /Users/daniel.marthaler/dev/marthaler/holidays/external_function/external_bernoulli
Undefined symbols for architecture arm64:
  "boost::math::tools::promote_args<double, float, float, float, float, float>::type external_bernoulli_model_namespace::make_odds<double, (void*)0>(double const&, std::__1::basic_ostream<char, std::__1::char_traits<char> >*)", referenced from:
      void external_bernoulli_model_namespace::external_bernoulli_model::write_array_impl<boost::random::additive_combine_engine<boost::random::linear_congruential_engine<unsigned int, 40014u, 0u, 2147483563u>, boost::random::linear_congruential_engine<unsigned int, 40692u, 0u, 2147483399u> >, Eigen::Matrix<double, -1, 1, 0, -1, 1>, std::__1::vector<int, std::__1::allocator<int> >, Eigen::Matrix<double, -1, 1, 0, -1, 1>, (void*)0, (void*)0, (void*)0>(boost::random::additive_combine_engine<boost::random::linear_congruential_engine<unsigned int, 40014u, 0u, 2147483563u>, boost::random::linear_congruential_engine<unsigned int, 40692u, 0u, 2147483399u> >&, Eigen::Matrix<double, -1, 1, 0, -1, 1>&, std::__1::vector<int, std::__1::allocator<int> >&, Eigen::Matrix<double, -1, 1, 0, -1, 1>&, bool, bool, std::__1::basic_ostream<char, std::__1::char_traits<char> >*) const in external_bernoulli.o
      void external_bernoulli_model_namespace::external_bernoulli_model::write_array_impl<boost::random::additive_combine_engine<boost::random::linear_congruential_engine<unsigned int, 40014u, 0u, 2147483563u>, boost::random::linear_congruential_engine<unsigned int, 40692u, 0u, 2147483399u> >, std::__1::vector<double, std::__1::allocator<double> >, std::__1::vector<int, std::__1::allocator<int> >, std::__1::vector<double, std::__1::allocator<double> >, (void*)0, (void*)0, (void*)0>(boost::random::additive_combine_engine<boost::random::linear_congruential_engine<unsigned int, 40014u, 0u, 2147483563u>, boost::random::linear_congruential_engine<unsigned int, 40692u, 0u, 2147483399u> >&, std::__1::vector<double, std::__1::allocator<double> >&, std::__1::vector<int, std::__1::allocator<int> >&, std::__1::vector<double, std::__1::allocator<double> >&, bool, bool, std::__1::basic_ostream<char, std::__1::char_traits<char> >*) const in external_bernoulli.o
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [/Users/daniel.marthaler/dev/marthaler/holidays/external_function/external_bernoulli] Error 1

Command ['make', 'STANCFLAGS+=--allow-undefined', 'USER_HEADER=/Users/daniel.marthaler/dev/marthaler/holidays/external_function/make_odds.hpp', '/Users/daniel.marthaler/dev/marthaler/holidays/external_function/external_bernoulli']
	error during processing No such file or directory

15:26:13 - cmdstanpy - WARNING - CmdStan's precompiled header (PCH) files may need to be rebuilt.If your model failed to compile please run cmdstanpy.rebuild_cmdstan().
If the issue persists please open a bug report

mathDR avatar Sep 14 '22 19:09 mathDR

Now if I set os.environ['PRECOMPILED_HEADERS'] = 'false' and run I get:

15:27:29 - cmdstanpy - INFO - compiling stan file /Users/daniel.marthaler/dev/marthaler/holidays/external_function/external_bernoulli.stan to exe file /Users/daniel.marthaler/dev/marthaler/holidays/external_function/external_bernoulli
15:27:29 - cmdstanpy - DEBUG - cmd: make STANCFLAGS+=--allow-undefined USER_HEADER=/Users/daniel.marthaler/dev/marthaler/holidays/external_function/make_odds.hpp /Users/daniel.marthaler/dev/marthaler/holidays/external_function/external_bernoulli
cwd: /Users/daniel.marthaler/.cmdstan/cmdstan-2.30.1
15:27:29 - cmdstanpy - DEBUG - Console output:
cc        -Wl,-L,"/Users/daniel.marthaler/.cmdstan/cmdstan-2.30.1/stan/lib/stan_math/lib/tbb" -Wl,-rpath,"/Users/daniel.marthaler/.cmdstan/cmdstan-2.30.1/stan/lib/stan_math/lib/tbb"      /Users/daniel.marthaler/dev/marthaler/holidays/external_function/external_bernoulli.o         -Wl,-L,"/Users/daniel.marthaler/.cmdstan/cmdstan-2.30.1/stan/lib/stan_math/lib/tbb" -Wl,-rpath,"/Users/daniel.marthaler/.cmdstan/cmdstan-2.30.1/stan/lib/stan_math/lib/tbb"   -o /Users/daniel.marthaler/dev/marthaler/holidays/external_function/external_bernoulli
Undefined symbols for architecture arm64:
  "boost::math::tools::promote_args<double, float, float, float, float, float>::type external_bernoulli_model_namespace::make_odds<double, (void*)0>(double const&, std::__1::basic_ostream<char, std::__1::char_traits<char> >*)", referenced from:
      void external_bernoulli_model_namespace::external_bernoulli_model::write_array_impl<boost::random::additive_combine_engine<boost::random::linear_congruential_engine<unsigned int, 40014u, 0u, 2147483563u>, boost::random::linear_congruential_engine<unsigned int, 40692u, 0u, 2147483399u> >, Eigen::Matrix<double, -1, 1, 0, -1, 1>, std::__1::vector<int, std::__1::allocator<int> >, Eigen::Matrix<double, -1, 1, 0, -1, 1>, (void*)0, (void*)0, (void*)0>(boost::random::additive_combine_engine<boost::random::linear_congruential_engine<unsigned int, 40014u, 0u, 2147483563u>, boost::random::linear_congruential_engine<unsigned int, 40692u, 0u, 2147483399u> >&, Eigen::Matrix<double, -1, 1, 0, -1, 1>&, std::__1::vector<int, std::__1::allocator<int> >&, Eigen::Matrix<double, -1, 1, 0, -1, 1>&, bool, bool, std::__1::basic_ostream<char, std::__1::char_traits<char> >*) const in external_bernoulli.o
      void external_bernoulli_model_namespace::external_bernoulli_model::write_array_impl<boost::random::additive_combine_engine<boost::random::linear_congruential_engine<unsigned int, 40014u, 0u, 2147483563u>, boost::random::linear_congruential_engine<unsigned int, 40692u, 0u, 2147483399u> >, std::__1::vector<double, std::__1::allocator<double> >, std::__1::vector<int, std::__1::allocator<int> >, std::__1::vector<double, std::__1::allocator<double> >, (void*)0, (void*)0, (void*)0>(boost::random::additive_combine_engine<boost::random::linear_congruential_engine<unsigned int, 40014u, 0u, 2147483563u>, boost::random::linear_congruential_engine<unsigned int, 40692u, 0u, 2147483399u> >&, std::__1::vector<double, std::__1::allocator<double> >&, std::__1::vector<int, std::__1::allocator<int> >&, std::__1::vector<double, std::__1::allocator<double> >&, bool, bool, std::__1::basic_ostream<char, std::__1::char_traits<char> >*) const in external_bernoulli.o
  "tbb::internal::task_scheduler_observer_v3::observe(bool)", referenced from:
      stan::math::ad_tape_observer::ad_tape_observer() in external_bernoulli.o
      tbb::interface6::task_scheduler_observer::~task_scheduler_observer() in external_bernoulli.o
      tbb::interface6::task_scheduler_observer::~task_scheduler_observer() in external_bernoulli.o
      tbb::interface6::task_scheduler_observer::~task_scheduler_observer() in external_bernoulli.o
      tbb::internal::task_scheduler_observer_v3::~task_scheduler_observer_v3() in external_bernoulli.o
      tbb::internal::task_scheduler_observer_v3::~task_scheduler_observer_v3() in external_bernoulli.o
      tbb::internal::task_scheduler_observer_v3::~task_scheduler_observer_v3() in external_bernoulli.o
      ...
  "std::logic_error::what() const", referenced from:
      vtable for boost::wrapexcept<std::logic_error> in external_bernoulli.o
  "std::runtime_error::what() const", referenced from:
      vtable for boost::wrapexcept<std::overflow_error> in external_bernoulli.o
  "std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> >::str() const", referenced from:
      stan::math::internal::eight_byte_aligned_malloc(unsigned long) in external_bernoulli.o
      stan::lang::rethrow_located(std::exception const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in external_bernoulli.o
      void stan::math::throw_domain_error<int>(char const*, char const*, int const&, char const*, char const*) in external_bernoulli.o
      stan::math::validate_non_negative_index(char const*, char const*, int)::'lambda'()::operator()() const in external_bernoulli.o
      __ZN4stan4math22throw_domain_error_vecIN5Eigen12CwiseUnaryOpIZZNS0_12value_of_recINS2_3MapIKNS2_5ArrayIiLin1ELi1ELi0ELin1ELi1EEELi0ENS2_6StrideILi0ELi0EEEEEvvEEDaOT_ENKUlRSD_E_clISB_EESC_SF_EUlSD_E_KSB_EEEEvPKcSM_RKSD_mSM_SM_ in external_bernoulli.o
      void stan::math::throw_domain_error<double>(char const*, char const*, double const&, char const*, char const*) in external_bernoulli.o
      void stan::math::internal::elementwise_throw_domain_error<char const*, char const*, char const*, char const*, int, char const*, char const*, char const*>(char const* const, char const* const, char const* const, char const* const, int const, char const* const, char const* const, char const* const) in external_bernoulli.o
      ...
  "std::__1::__vector_base_common<true>::__throw_length_error() const", referenced from:
      std::__1::__vector_base<char*, std::__1::allocator<char*> >::__throw_length_error() const in external_bernoulli.o
      std::__1::__vector_base<unsigned long, std::__1::allocator<unsigned long> >::__throw_length_error() const in external_bernoulli.o
      std::__1::__vector_base<int, std::__1::allocator<int> >::__throw_length_error() const in external_bernoulli.o
      std::__1::__vector_base<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >::__throw_length_error() const in external_bernoulli.o
      std::__1::__vector_base<double, std::__1::allocator<double> >::__throw_length_error() const in external_bernoulli.o
      std::__1::__vector_base<stan::math::vari_base*, std::__1::allocator<stan::math::vari_base*> >::__throw_length_error() const in external_bernoulli.o
      std::__1::__vector_base<stan::math::var_value<double, void>, stan::math::arena_allocator<stan::math::var_value<double, void> > >::__throw_length_error() const in external_bernoulli.o
      ...
  "std::__1::__basic_string_common<true>::__throw_length_error() const", referenced from:
      std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::__throw_length_error() const in external_bernoulli.o
  "std::__1::locale::use_facet(std::__1::locale::id&) const", referenced from:
      stan::math::internal::eight_byte_aligned_malloc(unsigned long) in external_bernoulli.o
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in external_bernoulli.o
  "std::__1::ios_base::getloc() const", referenced from:
      stan::math::internal::eight_byte_aligned_malloc(unsigned long) in external_bernoulli.o
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in external_bernoulli.o
  "std::bad_typeid::bad_typeid()", referenced from:
      stan::lang::located_exception<std::bad_typeid>::located_exception(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in external_bernoulli.o
  "std::bad_typeid::~bad_typeid()", referenced from:
      stan::lang::located_exception<std::bad_typeid>::~located_exception() in external_bernoulli.o
      stan::lang::located_exception<std::bad_typeid>::located_exception(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in external_bernoulli.o
      stan::lang::located_exception<std::bad_typeid>::~located_exception() in external_bernoulli.o
  "std::logic_error::logic_error(char const*)", referenced from:
      long double boost::math::detail::owens_t_dispatch<long double, boost::math::policies::policy<boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy> >(long double, long double, long double, boost::math::policies::policy<boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy> const&, std::__1::integral_constant<int, 64> const&) in external_bernoulli.o
  "std::logic_error::logic_error(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)", referenced from:
      stan::lang::rethrow_located(std::exception const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in external_bernoulli.o
  "std::logic_error::logic_error(char const*)", referenced from:
      std::length_error::length_error(char const*) in external_bernoulli.o
      stan::math::validate_non_negative_index(char const*, char const*, int)::'lambda'()::operator()() const in external_bernoulli.o
  "std::logic_error::logic_error(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)", referenced from:
      stan::lang::rethrow_located(std::exception const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in external_bernoulli.o
      void stan::math::throw_domain_error<int>(char const*, char const*, int const&, char const*, char const*) in external_bernoulli.o
      void stan::math::throw_domain_error<double>(char const*, char const*, double const&, char const*, char const*) in external_bernoulli.o
      void stan::math::internal::elementwise_throw_domain_error<char const*, char const*, char const*, char const*, int, char const*, char const*, char const*>(char const* const, char const* const, char const* const, char const* const, int const, char const* const, char const* const, char const* const) in external_bernoulli.o
  "std::logic_error::logic_error(std::logic_error const&)", referenced from:
      boost::wrapexcept<std::logic_error>::wrapexcept(std::logic_error const&) in external_bernoulli.o
      boost::wrapexcept<std::logic_error>::clone() const in external_bernoulli.o
      boost::wrapexcept<std::logic_error>::wrapexcept(boost::wrapexcept<std::logic_error> const&) in external_bernoulli.o
  "std::logic_error::~logic_error()", referenced from:
      stan::lang::rethrow_located(std::exception const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in external_bernoulli.o
      long double boost::math::detail::owens_t_dispatch<long double, boost::math::policies::policy<boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy> >(long double, long double, long double, boost::math::policies::policy<boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy> const&, std::__1::integral_constant<int, 64> const&) in external_bernoulli.o
  "std::logic_error::~logic_error()", referenced from:
      boost::wrapexcept<std::logic_error>::~wrapexcept() in external_bernoulli.o
      boost::wrapexcept<std::logic_error>::clone() const in external_bernoulli.o
      boost::wrapexcept<std::logic_error>::~wrapexcept() in external_bernoulli.o
      non-virtual thunk to boost::wrapexcept<std::logic_error>::~wrapexcept() in external_bernoulli.o
      non-virtual thunk to boost::wrapexcept<std::logic_error>::~wrapexcept() in external_bernoulli.o
      non-virtual thunk to boost::wrapexcept<std::logic_error>::~wrapexcept() in external_bernoulli.o
      non-virtual thunk to boost::wrapexcept<std::logic_error>::~wrapexcept() in external_bernoulli.o
      ...
  "std::range_error::~range_error()", referenced from:
      stan::lang::rethrow_located(std::exception const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in external_bernoulli.o
  "std::domain_error::~domain_error()", referenced from:
      stan::lang::rethrow_located(std::exception const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in external_bernoulli.o
      void stan::math::throw_domain_error<int>(char const*, char const*, int const&, char const*, char const*) in external_bernoulli.o
      void stan::math::throw_domain_error<double>(char const*, char const*, double const&, char const*, char const*) in external_bernoulli.o
      void stan::math::internal::elementwise_throw_domain_error<char const*, char const*, char const*, char const*, int, char const*, char const*, char const*>(char const* const, char const* const, char const* const, char const* const, int const, char const* const, char const* const, char const* const) in external_bernoulli.o
  "std::length_error::~length_error()", referenced from:
      std::__1::__throw_length_error(char const*) in external_bernoulli.o
      stan::lang::rethrow_located(std::exception const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in external_bernoulli.o
  "std::out_of_range::~out_of_range()", referenced from:
      stan::lang::rethrow_located(std::exception const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in external_bernoulli.o
  "std::bad_exception::~bad_exception()", referenced from:
      stan::lang::located_exception<std::bad_exception>::~located_exception() in external_bernoulli.o
      stan::lang::located_exception<std::bad_exception>::located_exception(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in external_bernoulli.o
      stan::lang::located_exception<std::bad_exception>::~located_exception() in external_bernoulli.o
  "std::runtime_error::runtime_error(char const*)", referenced from:
      stan::io::deserializer<double>::check_r_capacity(unsigned long) const::'lambda'()::operator()() const in external_bernoulli.o
      stan::io::deserializer<stan::math::var_value<double, void> >::check_r_capacity(unsigned long) const::'lambda'()::operator()() const in external_bernoulli.o
  "std::runtime_error::runtime_error(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)", referenced from:
      stan::math::internal::eight_byte_aligned_malloc(unsigned long) in external_bernoulli.o
      stan::lang::rethrow_located(std::exception const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in external_bernoulli.o
      auto stan::io::serializer<double>::check_r_capacity(unsigned long) const::'lambda'(auto, auto, auto)::operator()<unsigned long, unsigned long, unsigned long>(auto, auto, auto) const in external_bernoulli.o
  "std::runtime_error::runtime_error(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)", referenced from:
      stan::lang::rethrow_located(std::exception const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in external_bernoulli.o
      void boost::math::policies::detail::raise_error<std::overflow_error, long double>(char const*, char const*) in external_bernoulli.o
      void boost::math::policies::detail::raise_error<std::overflow_error, double>(char const*, char const*) in external_bernoulli.o
  "std::runtime_error::runtime_error(std::runtime_error const&)", referenced from:
      boost::wrapexcept<std::overflow_error>::wrapexcept(std::overflow_error const&) in external_bernoulli.o
      boost::wrapexcept<std::overflow_error>::clone() const in external_bernoulli.o
      boost::wrapexcept<std::overflow_error>::wrapexcept(boost::wrapexcept<std::overflow_error> const&) in external_bernoulli.o
  "std::runtime_error::~runtime_error()", referenced from:
      stan::math::internal::eight_byte_aligned_malloc(unsigned long) in external_bernoulli.o
      stan::lang::rethrow_located(std::exception const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in external_bernoulli.o
      stan::io::deserializer<double>::check_r_capacity(unsigned long) const::'lambda'()::operator()() const in external_bernoulli.o
      stan::io::deserializer<stan::math::var_value<double, void> >::check_r_capacity(unsigned long) const::'lambda'()::operator()() const in external_bernoulli.o
      auto stan::io::serializer<double>::check_r_capacity(unsigned long) const::'lambda'(auto, auto, auto)::operator()<unsigned long, unsigned long, unsigned long>(auto, auto, auto) const in external_bernoulli.o
  "std::overflow_error::~overflow_error()", referenced from:
      stan::lang::rethrow_located(std::exception const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in external_bernoulli.o
      void boost::math::policies::detail::raise_error<std::overflow_error, long double>(char const*, char const*) in external_bernoulli.o
      void boost::math::policies::detail::raise_error<std::overflow_error, double>(char const*, char const*) in external_bernoulli.o
  "std::overflow_error::~overflow_error()", referenced from:
      boost::wrapexcept<std::overflow_error>::~wrapexcept() in external_bernoulli.o
      boost::wrapexcept<std::overflow_error>::clone() const in external_bernoulli.o
      boost::wrapexcept<std::overflow_error>::~wrapexcept() in external_bernoulli.o
      non-virtual thunk to boost::wrapexcept<std::overflow_error>::~wrapexcept() in external_bernoulli.o
      non-virtual thunk to boost::wrapexcept<std::overflow_error>::~wrapexcept() in external_bernoulli.o
      non-virtual thunk to boost::wrapexcept<std::overflow_error>::~wrapexcept() in external_bernoulli.o
      non-virtual thunk to boost::wrapexcept<std::overflow_error>::~wrapexcept() in external_bernoulli.o
      ...
  "std::underflow_error::~underflow_error()", referenced from:
      stan::lang::rethrow_located(std::exception const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in external_bernoulli.o
  "std::invalid_argument::~invalid_argument()", referenced from:
      stan::lang::rethrow_located(std::exception const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in external_bernoulli.o
      stan::math::validate_non_negative_index(char const*, char const*, int)::'lambda'()::operator()() const in external_bernoulli.o
  "std::__1::__next_prime(unsigned long)", referenced from:
      stan::math::ad_tape_observer::on_scheduler_entry(bool) in external_bernoulli.o
  "std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::append(char const*)", referenced from:
      external_bernoulli_model_namespace::external_bernoulli_model::constrained_param_names(std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >&, bool, bool) const in external_bernoulli.o
      external_bernoulli_model_namespace::external_bernoulli_model::unconstrained_param_names(std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >&, bool, bool) const in external_bernoulli.o
      stan::lang::located_exception<std::bad_alloc>::located_exception(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in external_bernoulli.o
      stan::lang::located_exception<std::bad_cast>::located_exception(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in external_bernoulli.o
      stan::lang::located_exception<std::bad_exception>::located_exception(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in external_bernoulli.o
      stan::lang::located_exception<std::bad_typeid>::located_exception(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in external_bernoulli.o
      stan::lang::located_exception<std::exception>::located_exception(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in external_bernoulli.o
      ...
  "std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::append(char const*, unsigned long)", referenced from:
      stan::lang::located_exception<std::bad_alloc>::located_exception(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in external_bernoulli.o
      stan::lang::located_exception<std::bad_cast>::located_exception(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in external_bernoulli.o
      stan::lang::located_exception<std::bad_exception>::located_exception(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in external_bernoulli.o
      stan::lang::located_exception<std::bad_typeid>::located_exception(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in external_bernoulli.o
      stan::lang::located_exception<std::exception>::located_exception(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in external_bernoulli.o
      auto stan::io::serializer<double>::check_r_capacity(unsigned long) const::'lambda'(auto, auto, auto)::operator()<unsigned long, unsigned long, unsigned long>(auto, auto, auto) const in external_bernoulli.o
      void boost::math::policies::detail::raise_error<std::overflow_error, long double>(char const*, char const*) in external_bernoulli.o
      ...
  "std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::insert(unsigned long, char const*)", referenced from:
      auto void stan::math::check_greater_or_equal<int, int, (void*)0>(char const*, char const*, int const&, int const&)::'lambda'(int, int, auto, auto, auto...)::operator()<int, int, char const*, char const*>(int, int, auto, auto, auto...) const in external_bernoulli.o
      std::__1::vector<int, std::__1::allocator<int> >& void stan::math::check_greater_or_equal<std::__1::vector<int, std::__1::allocator<int> >, int, (void*)0, (void*)0, (void*)0>(char const*, char const*, std::__1::vector<int, std::__1::allocator<int> > const&, int const&)::'lambda'(std::__1::vector<int, std::__1::allocator<int> >&&, int, auto, auto, auto)::operator()<Eigen::CwiseUnaryOp<std::__1::vector<int, std::__1::allocator<int> >& auto stan::math::value_of_rec<Eigen::Map<Eigen::Array<int, -1, 1, 0, -1, 1> const, 0, Eigen::Stride<0, 0> >, void, void>(std::__1::vector<int, std::__1::allocator<int> >&&)::'lambda'(std::__1::vector<int, std::__1::allocator<int> >&)::operator()<Eigen::Map<Eigen::Array<int, -1, 1, 0, -1, 1> const, 0, Eigen::Stride<0, 0> > >('lambda'(std::__1::vector<int, std::__1::allocator<int> >&)) const::'lambda'(std::__1::vector<int, std::__1::allocator<int> >), Eigen::Map<Eigen::Array<int, -1, 1, 0, -1, 1> const, 0, Eigen::Stride<0, 0> > const>&, int, char const*, char const*, long>(std::__1::vector<int, std::__1::allocator<int> >&&, int, auto, auto, auto) const in external_bernoulli.o
      std::__1::vector<int, std::__1::allocator<int> >& void stan::math::check_less_or_equal<std::__1::vector<int, std::__1::allocator<int> >, int, (void*)0, (void*)0, (void*)0>(char const*, char const*, std::__1::vector<int, std::__1::allocator<int> > const&, int const&)::'lambda'(std::__1::vector<int, std::__1::allocator<int> >&&, int, auto, auto, auto)::operator()<Eigen::CwiseUnaryOp<std::__1::vector<int, std::__1::allocator<int> >& auto stan::math::value_of_rec<Eigen::Map<Eigen::Array<int, -1, 1, 0, -1, 1> const, 0, Eigen::Stride<0, 0> >, void, void>(std::__1::vector<int, std::__1::allocator<int> >&&)::'lambda'(std::__1::vector<int, std::__1::allocator<int> >&)::operator()<Eigen::Map<Eigen::Array<int, -1, 1, 0, -1, 1> const, 0, Eigen::Stride<0, 0> > >('lambda'(std::__1::vector<int, std::__1::allocator<int> >&)) const::'lambda'(std::__1::vector<int, std::__1::allocator<int> >), Eigen::Map<Eigen::Array<int, -1, 1, 0, -1, 1> const, 0, Eigen::Stride<0, 0> > const>&, int, char const*, char const*, long>(std::__1::vector<int, std::__1::allocator<int> >&&, int, auto, auto, auto) const in external_bernoulli.o
      auto void stan::math::check_less<int, int, (void*)0>(char const*, char const*, int const&, int const&)::'lambda'(int, int, auto, auto, auto...)::operator()<int, int, char const*, char const*>(int, int, auto, auto, auto...) const in external_bernoulli.o
      auto void stan::math::check_less_or_equal<double, int, (void*)0>(char const*, char const*, double const&, int const&)::'lambda'(double, int, auto, auto, auto...)::operator()<double, int, char const*, char const*>(double, int, auto, auto, auto...) const in external_bernoulli.o
      auto void stan::math::check_greater_or_equal<double, double, (void*)0>(char const*, char const*, double const&, double const&)::'lambda'(double, double, auto, auto, auto...)::operator()<double, double, char const*, char const*>(double, double, auto, auto, auto...) const in external_bernoulli.o
  "std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::replace(unsigned long, unsigned long, char const*)", referenced from:
      boost::math::policies::detail::replace_all_in_string(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, char const*, char const*) in external_bernoulli.o
  "std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::basic_string(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)", referenced from:
      external_bernoulli_model_namespace::external_bernoulli_model::model_compile_info() const in external_bernoulli.o
      external_bernoulli_model_namespace::external_bernoulli_model::get_param_names(std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >&) const in external_bernoulli.o
  "std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::~basic_string()", referenced from:
      __GLOBAL__sub_I_external_bernoulli.hpp in external_bernoulli.o
  "std::__1::basic_ostream<char, std::__1::char_traits<char> >::put(char)", referenced from:
      stan::math::internal::eight_byte_aligned_malloc(unsigned long) in external_bernoulli.o
  "std::__1::basic_ostream<char, std::__1::char_traits<char> >::flush()", referenced from:
      stan::math::internal::eight_byte_aligned_malloc(unsigned long) in external_bernoulli.o
  "std::__1::basic_ostream<char, std::__1::char_traits<char> >::sentry::sentry(std::__1::basic_ostream<char, std::__1::char_traits<char> >&)", referenced from:
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in external_bernoulli.o
  "std::__1::basic_ostream<char, std::__1::char_traits<char> >::sentry::~sentry()", referenced from:
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in external_bernoulli.o
  "std::__1::basic_ostream<char, std::__1::char_traits<char> >::~basic_ostream()", referenced from:
      void stan::math::throw_domain_error<int>(char const*, char const*, int const&, char const*, char const*) in external_bernoulli.o
      __ZN4stan4math22throw_domain_error_vecIN5Eigen12CwiseUnaryOpIZZNS0_12value_of_recINS2_3MapIKNS2_5ArrayIiLin1ELi1ELi0ELin1ELi1EEELi0ENS2_6StrideILi0ELi0EEEEEvvEEDaOT_ENKUlRSD_E_clISB_EESC_SF_EUlSD_E_KSB_EEEEvPKcSM_RKSD_mSM_SM_ in external_bernoulli.o
      void stan::math::throw_domain_error<double>(char const*, char const*, double const&, char const*, char const*) in external_bernoulli.o
      void stan::math::throw_domain_error_vec<std::__1::vector<int, std::__1::allocator<int> > >(char const*, char const*, std::__1::vector<int, std::__1::allocator<int> > const&, unsigned long, char const*, char const*) in external_bernoulli.o
  "std::__1::basic_ostream<char, std::__1::char_traits<char> >::operator<<(double)", referenced from:
      void stan::math::throw_domain_error<double>(char const*, char const*, double const&, char const*, char const*) in external_bernoulli.o
      stan::math::internal::bounded<double, double, double, false>::check(char const*, char const*, double const&, double const&, double const&) in external_bernoulli.o
  "std::__1::basic_ostream<char, std::__1::char_traits<char> >::operator<<(int)", referenced from:
      void stan::math::throw_domain_error<int>(char const*, char const*, int const&, char const*, char const*) in external_bernoulli.o
      stan::math::validate_non_negative_index(char const*, char const*, int)::'lambda'()::operator()() const in external_bernoulli.o
      void stan::math::internal::elementwise_throw_domain_error<char const*, char const*, char const*, char const*, int, char const*, char const*, char const*>(char const* const, char const* const, char const* const, char const* const, int const, char const* const, char const* const, char const* const) in external_bernoulli.o
      stan::math::internal::bounded<double, int, int, false>::check(char const*, char const*, double const&, int const&, int const&) in external_bernoulli.o
      stan::math::internal::bounded<std::__1::vector<int, std::__1::allocator<int> >, int, int, true>::check(char const*, char const*, std::__1::vector<int, std::__1::allocator<int> > const&, int const&, int const&) in external_bernoulli.o
  "std::__1::basic_ostream<char, std::__1::char_traits<char> >::operator<<(unsigned long)", referenced from:
      stan::math::internal::eight_byte_aligned_malloc(unsigned long) in external_bernoulli.o
      __ZN4stan4math22throw_domain_error_vecIN5Eigen12CwiseUnaryOpIZZNS0_12value_of_recINS2_3MapIKNS2_5ArrayIiLin1ELi1ELi0ELin1ELi1EEELi0ENS2_6StrideILi0ELi0EEEEEvvEEDaOT_ENKUlRSD_E_clISB_EESC_SF_EUlSD_E_KSB_EEEEvPKcSM_RKSD_mSM_SM_ in external_bernoulli.o
      void stan::math::throw_domain_error_vec<std::__1::vector<int, std::__1::allocator<int> > >(char const*, char const*, std::__1::vector<int, std::__1::allocator<int> > const&, unsigned long, char const*, char const*) in external_bernoulli.o
  "std::__1::basic_iostream<char, std::__1::char_traits<char> >::~basic_iostream()", referenced from:
      stan::math::internal::eight_byte_aligned_malloc(unsigned long) in external_bernoulli.o
      std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> >::basic_stringstream() in external_bernoulli.o
      stan::lang::rethrow_located(std::exception const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in external_bernoulli.o
      stan::math::validate_non_negative_index(char const*, char const*, int)::'lambda'()::operator()() const in external_bernoulli.o
      void stan::math::internal::elementwise_throw_domain_error<char const*, char const*, char const*, char const*, int, char const*, char const*, char const*>(char const* const, char const* const, char const* const, char const* const, int const, char const* const, char const* const, char const* const) in external_bernoulli.o
      stan::math::internal::bounded<double, int, int, false>::check(char const*, char const*, double const&, int const&, int const&) in external_bernoulli.o
      stan::math::internal::bounded<std::__1::vector<int, std::__1::allocator<int> >, int, int, true>::check(char const*, char const*, std::__1::vector<int, std::__1::allocator<int> > const&, int const&, int const&) in external_bernoulli.o
      ...
  "std::__1::basic_streambuf<char, std::__1::char_traits<char> >::basic_streambuf()", referenced from:
      std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> >::basic_stringstream() in external_bernoulli.o
      void stan::math::throw_domain_error<int>(char const*, char const*, int const&, char const*, char const*) in external_bernoulli.o
      __ZN4stan4math22throw_domain_error_vecIN5Eigen12CwiseUnaryOpIZZNS0_12value_of_recINS2_3MapIKNS2_5ArrayIiLin1ELi1ELi0ELin1ELi1EEELi0ENS2_6StrideILi0ELi0EEEEEvvEEDaOT_ENKUlRSD_E_clISB_EESC_SF_EUlSD_E_KSB_EEEEvPKcSM_RKSD_mSM_SM_ in external_bernoulli.o
      void stan::math::throw_domain_error<double>(char const*, char const*, double const&, char const*, char const*) in external_bernoulli.o
      void stan::math::throw_domain_error_vec<std::__1::vector<int, std::__1::allocator<int> > >(char const*, char const*, std::__1::vector<int, std::__1::allocator<int> > const&, unsigned long, char const*, char const*) in external_bernoulli.o
  "std::__1::basic_streambuf<char, std::__1::char_traits<char> >::~basic_streambuf()", referenced from:
      stan::math::internal::eight_byte_aligned_malloc(unsigned long) in external_bernoulli.o
      stan::lang::rethrow_located(std::exception const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in external_bernoulli.o
      void stan::math::throw_domain_error<int>(char const*, char const*, int const&, char const*, char const*) in external_bernoulli.o
      stan::math::validate_non_negative_index(char const*, char const*, int)::'lambda'()::operator()() const in external_bernoulli.o
      __ZN4stan4math22throw_domain_error_vecIN5Eigen12CwiseUnaryOpIZZNS0_12value_of_recINS2_3MapIKNS2_5ArrayIiLin1ELi1ELi0ELin1ELi1EEELi0ENS2_6StrideILi0ELi0EEEEEvvEEDaOT_ENKUlRSD_E_clISB_EESC_SF_EUlSD_E_KSB_EEEEvPKcSM_RKSD_mSM_SM_ in external_bernoulli.o
      void stan::math::throw_domain_error<double>(char const*, char const*, double const&, char const*, char const*) in external_bernoulli.o
      void stan::math::internal::elementwise_throw_domain_error<char const*, char const*, char const*, char const*, int, char const*, char const*, char const*>(char const* const, char const* const, char const* const, char const* const, int const, char const* const, char const* const, char const* const) in external_bernoulli.o
      ...
  "std::__1::ctype<char>::id", referenced from:
      stan::math::internal::eight_byte_aligned_malloc(unsigned long) in external_bernoulli.o
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in external_bernoulli.o
  "std::__1::mutex::lock()", referenced from:
      stan::math::ad_tape_observer::on_scheduler_entry(bool) in external_bernoulli.o
      stan::math::ad_tape_observer::on_scheduler_exit(bool) in external_bernoulli.o
  "std::__1::mutex::unlock()", referenced from:
      stan::math::ad_tape_observer::on_scheduler_entry(bool) in external_bernoulli.o
      stan::math::ad_tape_observer::on_scheduler_exit(bool) in external_bernoulli.o
  "std::__1::mutex::~mutex()", referenced from:
      stan::math::ad_tape_observer::ad_tape_observer() in external_bernoulli.o
      stan::math::ad_tape_observer::~ad_tape_observer() in external_bernoulli.o
  "std::__1::locale::~locale()", referenced from:
      stan::math::internal::eight_byte_aligned_malloc(unsigned long) in external_bernoulli.o
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in external_bernoulli.o
  "std::__1::ios_base::__set_badbit_and_consider_rethrow()", referenced from:
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in external_bernoulli.o
  "std::__1::ios_base::init(void*)", referenced from:
      std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> >::basic_stringstream() in external_bernoulli.o
      void stan::math::throw_domain_error<int>(char const*, char const*, int const&, char const*, char const*) in external_bernoulli.o
      __ZN4stan4math22throw_domain_error_vecIN5Eigen12CwiseUnaryOpIZZNS0_12value_of_recINS2_3MapIKNS2_5ArrayIiLin1ELi1ELi0ELin1ELi1EEELi0ENS2_6StrideILi0ELi0EEEEEvvEEDaOT_ENKUlRSD_E_clISB_EESC_SF_EUlSD_E_KSB_EEEEvPKcSM_RKSD_mSM_SM_ in external_bernoulli.o
      void stan::math::throw_domain_error<double>(char const*, char const*, double const&, char const*, char const*) in external_bernoulli.o
      void stan::math::throw_domain_error_vec<std::__1::vector<int, std::__1::allocator<int> > >(char const*, char const*, std::__1::vector<int, std::__1::allocator<int> > const&, unsigned long, char const*, char const*) in external_bernoulli.o
  "std::__1::ios_base::clear(unsigned int)", referenced from:
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in external_bernoulli.o
  "std::__1::basic_ios<char, std::__1::char_traits<char> >::~basic_ios()", referenced from:
      stan::math::internal::eight_byte_aligned_malloc(unsigned long) in external_bernoulli.o
      std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> >::basic_stringstream() in external_bernoulli.o
      stan::lang::rethrow_located(std::exception const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in external_bernoulli.o
      void stan::math::throw_domain_error<int>(char const*, char const*, int const&, char const*, char const*) in external_bernoulli.o
      stan::math::validate_non_negative_index(char const*, char const*, int)::'lambda'()::operator()() const in external_bernoulli.o
      __ZN4stan4math22throw_domain_error_vecIN5Eigen12CwiseUnaryOpIZZNS0_12value_of_recINS2_3MapIKNS2_5ArrayIiLin1ELi1ELi0ELin1ELi1EEELi0ENS2_6StrideILi0ELi0EEEEEvvEEDaOT_ENKUlRSD_E_clISB_EESC_SF_EUlSD_E_KSB_EEEEvPKcSM_RKSD_mSM_SM_ in external_bernoulli.o
      void stan::math::throw_domain_error<double>(char const*, char const*, double const&, char const*, char const*) in external_bernoulli.o
      ...
  "std::__1::to_string(double)", referenced from:
      auto void stan::math::check_greater_or_equal<int, int, (void*)0>(char const*, char const*, int const&, int const&)::'lambda'(int, int, auto, auto, auto...)::operator()<int, int, char const*, char const*>(int, int, auto, auto, auto...) const in external_bernoulli.o
      std::__1::vector<int, std::__1::allocator<int> >& void stan::math::check_greater_or_equal<std::__1::vector<int, std::__1::allocator<int> >, int, (void*)0, (void*)0, (void*)0>(char const*, char const*, std::__1::vector<int, std::__1::allocator<int> > const&, int const&)::'lambda'(std::__1::vector<int, std::__1::allocator<int> >&&, int, auto, auto, auto)::operator()<Eigen::CwiseUnaryOp<std::__1::vector<int, std::__1::allocator<int> >& auto stan::math::value_of_rec<Eigen::Map<Eigen::Array<int, -1, 1, 0, -1, 1> const, 0, Eigen::Stride<0, 0> >, void, void>(std::__1::vector<int, std::__1::allocator<int> >&&)::'lambda'(std::__1::vector<int, std::__1::allocator<int> >&)::operator()<Eigen::Map<Eigen::Array<int, -1, 1, 0, -1, 1> const, 0, Eigen::Stride<0, 0> > >('lambda'(std::__1::vector<int, std::__1::allocator<int> >&)) const::'lambda'(std::__1::vector<int, std::__1::allocator<int> >), Eigen::Map<Eigen::Array<int, -1, 1, 0, -1, 1> const, 0, Eigen::Stride<0, 0> > const>&, int, char const*, char const*, long>(std::__1::vector<int, std::__1::allocator<int> >&&, int, auto, auto, auto) const in external_bernoulli.o
      std::__1::vector<int, std::__1::allocator<int> >& void stan::math::check_less_or_equal<std::__1::vector<int, std::__1::allocator<int> >, int, (void*)0, (void*)0, (void*)0>(char const*, char const*, std::__1::vector<int, std::__1::allocator<int> > const&, int const&)::'lambda'(std::__1::vector<int, std::__1::allocator<int> >&&, int, auto, auto, auto)::operator()<Eigen::CwiseUnaryOp<std::__1::vector<int, std::__1::allocator<int> >& auto stan::math::value_of_rec<Eigen::Map<Eigen::Array<int, -1, 1, 0, -1, 1> const, 0, Eigen::Stride<0, 0> >, void, void>(std::__1::vector<int, std::__1::allocator<int> >&&)::'lambda'(std::__1::vector<int, std::__1::allocator<int> >&)::operator()<Eigen::Map<Eigen::Array<int, -1, 1, 0, -1, 1> const, 0, Eigen::Stride<0, 0> > >('lambda'(std::__1::vector<int, std::__1::allocator<int> >&)) const::'lambda'(std::__1::vector<int, std::__1::allocator<int> >), Eigen::Map<Eigen::Array<int, -1, 1, 0, -1, 1> const, 0, Eigen::Stride<0, 0> > const>&, int, char const*, char const*, long>(std::__1::vector<int, std::__1::allocator<int> >&&, int, auto, auto, auto) const in external_bernoulli.o
      auto void stan::math::check_less<int, int, (void*)0>(char const*, char const*, int const&, int const&)::'lambda'(int, int, auto, auto, auto...)::operator()<int, int, char const*, char const*>(int, int, auto, auto, auto...) const in external_bernoulli.o
      auto void stan::math::check_less_or_equal<double, int, (void*)0>(char const*, char const*, double const&, int const&)::'lambda'(double, int, auto, auto, auto...)::operator()<double, int, char const*, char const*>(double, int, auto, auto, auto...) const in external_bernoulli.o
      auto void stan::math::check_greater_or_equal<double, double, (void*)0>(char const*, char const*, double const&, double const&)::'lambda'(double, double, auto, auto, auto...)::operator()<double, double, char const*, char const*>(double, double, auto, auto, auto...) const in external_bernoulli.o
  "std::__1::to_string(unsigned long)", referenced from:
      auto stan::io::serializer<double>::check_r_capacity(unsigned long) const::'lambda'(auto, auto, auto)::operator()<unsigned long, unsigned long, unsigned long>(auto, auto, auto) const in external_bernoulli.o
  "std::bad_cast::bad_cast()", referenced from:
      stan::lang::located_exception<std::bad_cast>::located_exception(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in external_bernoulli.o
  "std::bad_cast::~bad_cast()", referenced from:
      stan::lang::located_exception<std::bad_cast>::~located_exception() in external_bernoulli.o
      stan::lang::located_exception<std::bad_cast>::located_exception(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in external_bernoulli.o
      stan::lang::located_exception<std::bad_cast>::~located_exception() in external_bernoulli.o
  "std::bad_alloc::bad_alloc()", referenced from:
      stan::math::stack_alloc::stack_alloc(unsigned long) in external_bernoulli.o
      stan::math::stack_alloc::move_to_next_block(unsigned long) in external_bernoulli.o
      Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 1, 0, -1, 1> >::resize(long, long) in external_bernoulli.o
  "std::bad_alloc::bad_alloc()", referenced from:
      stan::lang::located_exception<std::bad_alloc>::located_exception(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in external_bernoulli.o
  "std::bad_alloc::~bad_alloc()", referenced from:
      stan::math::stack_alloc::stack_alloc(unsigned long) in external_bernoulli.o
      stan::math::stack_alloc::move_to_next_block(unsigned long) in external_bernoulli.o
      Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 1, 0, -1, 1> >::resize(long, long) in external_bernoulli.o
  "std::bad_alloc::~bad_alloc()", referenced from:
      stan::lang::located_exception<std::bad_alloc>::~located_exception() in external_bernoulli.o
      stan::lang::located_exception<std::bad_alloc>::located_exception(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in external_bernoulli.o
      stan::lang::located_exception<std::bad_alloc>::~located_exception() in external_bernoulli.o
  "std::exception::~exception()", referenced from:
      stan::lang::located_exception<std::exception>::~located_exception() in external_bernoulli.o
      stan::lang::located_exception<std::exception>::located_exception(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in external_bernoulli.o
      stan::lang::located_exception<std::exception>::~located_exception() in external_bernoulli.o
  "std::terminate()", referenced from:
      ___clang_call_terminate in external_bernoulli.o
  "typeinfo for std::bad_typeid", referenced from:
      stan::lang::rethrow_located(std::exception const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in external_bernoulli.o
      typeinfo for stan::lang::located_exception<std::bad_typeid> in external_bernoulli.o
  "typeinfo for std::logic_error", referenced from:
      stan::lang::rethrow_located(std::exception const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in external_bernoulli.o
      typeinfo for boost::wrapexcept<std::logic_error> in external_bernoulli.o
  "typeinfo for std::range_error", referenced from:
      stan::lang::rethrow_located(std::exception const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in external_bernoulli.o
  "typeinfo for std::domain_error", referenced from:
      stan::lang::rethrow_located(std::exception const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in external_bernoulli.o
      void stan::math::throw_domain_error<int>(char const*, char const*, int const&, char const*, char const*) in external_bernoulli.o
      void stan::math::throw_domain_error<double>(char const*, char const*, double const&, char const*, char const*) in external_bernoulli.o
      void stan::math::internal::elementwise_throw_domain_error<char const*, char const*, char const*, char const*, int, char const*, char const*, char const*>(char const* const, char const* const, char const* const, char const* const, int const, char const* const, char const* const, char const* const) in external_bernoulli.o
  "typeinfo for std::length_error", referenced from:
      std::__1::__throw_length_error(char const*) in external_bernoulli.o
      stan::lang::rethrow_located(std::exception const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in external_bernoulli.o
  "typeinfo for std::out_of_range", referenced from:
      stan::lang::rethrow_located(std::exception const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in external_bernoulli.o
  "typeinfo for std::bad_exception", referenced from:
      stan::lang::rethrow_located(std::exception const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in external_bernoulli.o
      typeinfo for stan::lang::located_exception<std::bad_exception> in external_bernoulli.o
  "typeinfo for std::runtime_error", referenced from:
      stan::math::internal::eight_byte_aligned_malloc(unsigned long) in external_bernoulli.o
      stan::lang::rethrow_located(std::exception const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in external_bernoulli.o
      stan::io::deserializer<double>::check_r_capacity(unsigned long) const::'lambda'()::operator()() const in external_bernoulli.o
      stan::io::deserializer<stan::math::var_value<double, void> >::check_r_capacity(unsigned long) const::'lambda'()::operator()() const in external_bernoulli.o
      auto stan::io::serializer<double>::check_r_capacity(unsigned long) const::'lambda'(auto, auto, auto)::operator()<unsigned long, unsigned long, unsigned long>(auto, auto, auto) const in external_bernoulli.o
  "typeinfo for std::overflow_error", referenced from:
      stan::lang::rethrow_located(std::exception const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in external_bernoulli.o
      typeinfo for boost::wrapexcept<std::overflow_error> in external_bernoulli.o
  "typeinfo for std::underflow_error", referenced from:
      stan::lang::rethrow_located(std::exception const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in external_bernoulli.o
  "typeinfo for std::invalid_argument", referenced from:
      stan::lang::rethrow_located(std::exception const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in external_bernoulli.o
      stan::math::validate_non_negative_index(char const*, char const*, int)::'lambda'()::operator()() const in external_bernoulli.o
  "typeinfo for std::bad_cast", referenced from:
      stan::lang::rethrow_located(std::exception const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in external_bernoulli.o
      typeinfo for stan::lang::located_exception<std::bad_cast> in external_bernoulli.o
  "typeinfo for std::bad_alloc", referenced from:
      stan::math::stack_alloc::stack_alloc(unsigned long) in external_bernoulli.o
      stan::lang::rethrow_located(std::exception const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in external_bernoulli.o
      stan::math::stack_alloc::move_to_next_block(unsigned long) in external_bernoulli.o
      Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 1, 0, -1, 1> >::resize(long, long) in external_bernoulli.o
      typeinfo for stan::lang::located_exception<std::bad_alloc> in external_bernoulli.o
  "typeinfo for std::exception", referenced from:
      stan::lang::rethrow_located(std::exception const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in external_bernoulli.o
      GCC_except_table56 in external_bernoulli.o
      GCC_except_table118 in external_bernoulli.o
      GCC_except_table132 in external_bernoulli.o
      GCC_except_table150 in external_bernoulli.o
      GCC_except_table152 in external_bernoulli.o
      GCC_except_table156 in external_bernoulli.o
      ...
  "VTT for std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> >", referenced from:
      stan::math::internal::eight_byte_aligned_malloc(unsigned long) in external_bernoulli.o
      std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> >::basic_stringstream() in external_bernoulli.o
      stan::lang::rethrow_located(std::exception const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in external_bernoulli.o
      stan::math::validate_non_negative_index(char const*, char const*, int)::'lambda'()::operator()() const in external_bernoulli.o
      void stan::math::internal::elementwise_throw_domain_error<char const*, char const*, char const*, char const*, int, char const*, char const*, char const*>(char const* const, char const* const, char const* const, char const* const, int const, char const* const, char const* const, char const* const) in external_bernoulli.o
      stan::math::internal::bounded<double, int, int, false>::check(char const*, char const*, double const&, int const&, int const&) in external_bernoulli.o
      stan::math::internal::bounded<std::__1::vector<int, std::__1::allocator<int> >, int, int, true>::check(char const*, char const*, std::__1::vector<int, std::__1::allocator<int> > const&, int const&, int const&) in external_bernoulli.o
      ...
  "VTT for std::__1::basic_ostringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> >", referenced from:
      void stan::math::throw_domain_error<int>(char const*, char const*, int const&, char const*, char const*) in external_bernoulli.o
      __ZN4stan4math22throw_domain_error_vecIN5Eigen12CwiseUnaryOpIZZNS0_12value_of_recINS2_3MapIKNS2_5ArrayIiLin1ELi1ELi0ELin1ELi1EEELi0ENS2_6StrideILi0ELi0EEEEEvvEEDaOT_ENKUlRSD_E_clISB_EESC_SF_EUlSD_E_KSB_EEEEvPKcSM_RKSD_mSM_SM_ in external_bernoulli.o
      void stan::math::throw_domain_error<double>(char const*, char const*, double const&, char const*, char const*) in external_bernoulli.o
      void stan::math::throw_domain_error_vec<std::__1::vector<int, std::__1::allocator<int> > >(char const*, char const*, std::__1::vector<int, std::__1::allocator<int> > const&, unsigned long, char const*, char const*) in external_bernoulli.o
  "vtable for __cxxabiv1::__class_type_info", referenced from:
      typeinfo for tbb::internal::task_scheduler_observer_v3 in external_bernoulli.o
      typeinfo for stan::model::prob_grad in external_bernoulli.o
      typeinfo for stan::math::vari_base in external_bernoulli.o
      typeinfo for boost::exception_detail::clone_base in external_bernoulli.o
      typeinfo for boost::exception in external_bernoulli.o
  NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
  "vtable for __cxxabiv1::__si_class_type_info", referenced from:
      typeinfo for tbb::interface6::task_scheduler_observer in external_bernoulli.o
      typeinfo for stan::math::ad_tape_observer in external_bernoulli.o
      typeinfo for stan::model::model_base in external_bernoulli.o
      typeinfo for stan::model::model_base_crtp<external_bernoulli_model_namespace::external_bernoulli_model> in external_bernoulli.o
      typeinfo for external_bernoulli_model_namespace::external_bernoulli_model in external_bernoulli.o
      typeinfo for stan::lang::located_exception<std::bad_alloc> in external_bernoulli.o
      typeinfo for stan::lang::located_exception<std::bad_cast> in external_bernoulli.o
      ...
  NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
  "vtable for __cxxabiv1::__vmi_class_type_info", referenced from:
      typeinfo for boost::wrapexcept<std::overflow_error> in external_bernoulli.o
      typeinfo for boost::wrapexcept<std::logic_error> in external_bernoulli.o
  NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
  "vtable for std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> >", referenced from:
      stan::math::internal::eight_byte_aligned_malloc(unsigned long) in external_bernoulli.o
      std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> >::basic_stringstream() in external_bernoulli.o
      stan::lang::rethrow_located(std::exception const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in external_bernoulli.o
      void stan::math::throw_domain_error<int>(char const*, char const*, int const&, char const*, char const*) in external_bernoulli.o
      stan::math::validate_non_negative_index(char const*, char const*, int)::'lambda'()::operator()() const in external_bernoulli.o
      __ZN4stan4math22throw_domain_error_vecIN5Eigen12CwiseUnaryOpIZZNS0_12value_of_recINS2_3MapIKNS2_5ArrayIiLin1ELi1ELi0ELin1ELi1EEELi0ENS2_6StrideILi0ELi0EEEEEvvEEDaOT_ENKUlRSD_E_clISB_EESC_SF_EUlSD_E_KSB_EEEEvPKcSM_RKSD_mSM_SM_ in external_bernoulli.o
      void stan::math::throw_domain_error<double>(char const*, char const*, double const&, char const*, char const*) in external_bernoulli.o
      ...
  NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
  "vtable for std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> >", referenced from:
      std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> >::basic_stringstream() in external_bernoulli.o
  NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
  "vtable for std::__1::basic_ostringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> >", referenced from:
      void stan::math::throw_domain_error<int>(char const*, char const*, int const&, char const*, char const*) in external_bernoulli.o
      __ZN4stan4math22throw_domain_error_vecIN5Eigen12CwiseUnaryOpIZZNS0_12value_of_recINS2_3MapIKNS2_5ArrayIiLin1ELi1ELi0ELin1ELi1EEELi0ENS2_6StrideILi0ELi0EEEEEvvEEDaOT_ENKUlRSD_E_clISB_EESC_SF_EUlSD_E_KSB_EEEEvPKcSM_RKSD_mSM_SM_ in external_bernoulli.o
      void stan::math::throw_domain_error<double>(char const*, char const*, double const&, char const*, char const*) in external_bernoulli.o
      void stan::math::throw_domain_error_vec<std::__1::vector<int, std::__1::allocator<int> > >(char const*, char const*, std::__1::vector<int, std::__1::allocator<int> > const&, unsigned long, char const*, char const*) in external_bernoulli.o
  NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
  "vtable for std::range_error", referenced from:
      stan::lang::rethrow_located(std::exception const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in external_bernoulli.o
  NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
  "vtable for std::domain_error", referenced from:
      stan::lang::rethrow_located(std::exception const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in external_bernoulli.o
      void stan::math::throw_domain_error<int>(char const*, char const*, int const&, char const*, char const*) in external_bernoulli.o
      void stan::math::throw_domain_error<double>(char const*, char const*, double const&, char const*, char const*) in external_bernoulli.o
      void stan::math::internal::elementwise_throw_domain_error<char const*, char const*, char const*, char const*, int, char const*, char const*, char const*>(char const* const, char const* const, char const* const, char const* const, int const, char const* const, char const* const, char const* const) in external_bernoulli.o
  NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
  "vtable for std::length_error", referenced from:
      std::length_error::length_error(char const*) in external_bernoulli.o
      stan::lang::rethrow_located(std::exception const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in external_bernoulli.o
  NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
  "vtable for std::out_of_range", referenced from:
      stan::lang::rethrow_located(std::exception const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in external_bernoulli.o
  NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
  "vtable for std::overflow_error", referenced from:
      stan::lang::rethrow_located(std::exception const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in external_bernoulli.o
      void boost::math::policies::detail::raise_error<std::overflow_error, long double>(char const*, char const*) in external_bernoulli.o
      boost::wrapexcept<std::overflow_error>::clone() const in external_bernoulli.o
      boost::wrapexcept<std::overflow_error>::wrapexcept(boost::wrapexcept<std::overflow_error> const&) in external_bernoulli.o
      void boost::math::policies::detail::raise_error<std::overflow_error, double>(char const*, char const*) in external_bernoulli.o
  NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
  "vtable for std::underflow_error", referenced from:
      stan::lang::rethrow_located(std::exception const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in external_bernoulli.o
  NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
  "vtable for std::invalid_argument", referenced from:
      stan::lang::rethrow_located(std::exception const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in external_bernoulli.o
      stan::math::validate_non_negative_index(char const*, char const*, int)::'lambda'()::operator()() const in external_bernoulli.o
  NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
  "operator delete(void*)", referenced from:
      new_model(stan::io::var_context&, unsigned int, std::__1::basic_ostream<char, std::__1::char_traits<char> >*) in external_bernoulli.o
      stan::math::ad_tape_observer::ad_tape_observer() in external_bernoulli.o
      stan::math::ad_tape_observer::on_scheduler_entry(bool) in external_bernoulli.o
      std::__1::unordered_map<std::__1::__thread_id, std::__1::unique_ptr<stan::math::AutodiffStackSingleton<stan::math::vari_base, stan::math::chainable_alloc>, std::__1::default_delete<stan::math::AutodiffStackSingleton<stan::math::vari_base, stan::math::chainable_alloc> > >, std::__1::hash<std::__1::__thread_id>, std::__1::equal_to<std::__1::__thread_id>, std::__1::allocator<std::__1::pair<std::__1::__thread_id const, std::__1::unique_ptr<stan::math::AutodiffStackSingleton<stan::math::vari_base, stan::math::chainable_alloc>, std::__1::default_delete<stan::math::AutodiffStackSingleton<stan::math::vari_base, stan::math::chainable_alloc> > > > > >::~unordered_map() in external_bernoulli.o
      stan::math::ad_tape_observer::on_scheduler_exit(bool) in external_bernoulli.o
      stan::math::ad_tape_observer::~ad_tape_observer() in external_bernoulli.o
      tbb::interface6::task_scheduler_observer::~task_scheduler_observer() in external_bernoulli.o
      ...
  "operator new(unsigned long)", referenced from:
      std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::basic_string<std::nullptr_t>(char const*) in external_bernoulli.o
      new_model(stan::io::var_context&, unsigned int, std::__1::basic_ostream<char, std::__1::char_traits<char> >*) in external_bernoulli.o
      stan::math::ad_tape_observer::on_scheduler_entry(bool) in external_bernoulli.o
      std::__1::__hash_table<std::__1::__hash_value_type<std::__1::__thread_id, std::__1::unique_ptr<stan::math::AutodiffStackSingleton<stan::math::vari_base, stan::math::chainable_alloc>, std::__1::default_delete<stan::math::AutodiffStackSingleton<stan::math::vari_base, stan::math::chainable_alloc> > > >, std::__1::__unordered_map_hasher<std::__1::__thread_id, std::__1::__hash_value_type<std::__1::__thread_id, std::__1::unique_ptr<stan::math::AutodiffStackSingleton<stan::math::vari_base, stan::math::chainable_alloc>, std::__1::default_delete<stan::math::AutodiffStackSingleton<stan::math::vari_base, stan::math::chainable_alloc> > > >, std::__1::hash<std::__1::__thread_id>, std::__1::equal_to<std::__1::__thread_id>, true>, std::__1::__unordered_map_equal<std::__1::__thread_id, std::__1::__hash_value_type<std::__1::__thread_id, std::__1::unique_ptr<stan::math::AutodiffStackSingleton<stan::math::vari_base, stan::math::chainable_alloc>, std::__1::default_delete<stan::math::AutodiffStackSingleton<stan::math::vari_base, stan::math::chainable_alloc> > > >, std::__1::equal_to<std::__1::__thread_id>, std::__1::hash<std::__1::__thread_id>, true>, std::__1::allocator<std::__1::__hash_value_type<std::__1::__thread_id, std::__1::unique_ptr<stan::math::AutodiffStackSingleton<stan::math::vari_base, stan::math::chainable_alloc>, std::__1::default_delete<stan::math::AutodiffStackSingleton<stan::math::vari_base, stan::math::chainable_alloc> > > > > >::__rehash(unsigned long) in external_bernoulli.o
      stan::math::AutodiffStackSingleton<stan::math::vari_base, stan::math::chainable_alloc>::init() in external_bernoulli.o
      stan::math::stack_alloc::stack_alloc(unsigned long) in external_bernoulli.o
      std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> > std::__1::__pad_and_output<char, std::__1::char_traits<char> >(std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> >, char const*, char const*, char const*, std::__1::ios_base&, char) in external_bernoulli.o
      ...
  "___cxa_allocate_exception", referenced from:
      std::__1::__throw_length_error(char const*) in external_bernoulli.o
      stan::math::stack_alloc::stack_alloc(unsigned long) in external_bernoulli.o
      stan::math::internal::eight_byte_aligned_malloc(unsigned long) in external_bernoulli.o
      stan::lang::rethrow_located(std::exception const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in external_bernoulli.o
      void stan::math::throw_domain_error<int>(char const*, char const*, int const&, char const*, char const*) in external_bernoulli.o
      stan::math::validate_non_negative_index(char const*, char const*, int)::'lambda'()::operator()() const in external_bernoulli.o
      void stan::math::throw_domain_error<double>(char const*, char const*, double const&, char const*, char const*) in external_bernoulli.o
      ...
  "___cxa_bad_cast", referenced from:
      stan::lang::rethrow_located(std::exception const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in external_bernoulli.o
  "___cxa_begin_catch", referenced from:
      ___clang_call_terminate in external_bernoulli.o
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in external_bernoulli.o
      external_bernoulli_model_namespace::external_bernoulli_model::external_bernoulli_model(stan::io::var_context&, unsigned int, std::__1::basic_ostream<char, std::__1::char_traits<char> >*) in external_bernoulli.o
      stan::lang::rethrow_located(std::exception const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in external_bernoulli.o
      stan::scalar_type<Eigen::Matrix<double, -1, 1, 0, -1, 1>, void>::type external_bernoulli_model_namespace::external_bernoulli_model::log_prob_impl<false, false, Eigen::Matrix<double, -1, 1, 0, -1, 1>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, (void*)0, (void*)0>(Eigen::Matrix<double, -1, 1, 0, -1, 1>&, Eigen::Matrix<int, -1, 1, 0, -1, 1>&, std::__1::basic_ostream<char, std::__1::char_traits<char> >*) const in external_bernoulli.o
      stan::scalar_type<Eigen::Matrix<stan::math::var_value<double, void>, -1, 1, 0, -1, 1>, void>::type external_bernoulli_model_namespace::external_bernoulli_model::log_prob_impl<false, false, Eigen::Matrix<stan::math::var_value<double, void>, -1, 1, 0, -1, 1>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, (void*)0, (void*)0>(Eigen::Matrix<stan::math::var_value<double, void>, -1, 1, 0, -1, 1>&, Eigen::Matrix<int, -1, 1, 0, -1, 1>&, std::__1::basic_ostream<char, std::__1::char_traits<char> >*) const in external_bernoulli.o
      stan::scalar_type<Eigen::Matrix<double, -1, 1, 0, -1, 1>, void>::type external_bernoulli_model_namespace::external_bernoulli_model::log_prob_impl<false, true, Eigen::Matrix<double, -1, 1, 0, -1, 1>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, (void*)0, (void*)0>(Eigen::Matrix<double, -1, 1, 0, -1, 1>&, Eigen::Matrix<int, -1, 1, 0, -1, 1>&, std::__1::basic_ostream<char, std::__1::char_traits<char> >*) const in external_bernoulli.o
      ...
  "___cxa_call_unexpected", referenced from:
      stan::lang::located_exception<std::bad_alloc>::located_exception(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in external_bernoulli.o
      stan::lang::located_exception<std::bad_cast>::located_exception(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in external_bernoulli.o
      stan::lang::located_exception<std::bad_exception>::located_exception(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in external_bernoulli.o
      stan::lang::located_exception<std::bad_typeid>::located_exception(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in external_bernoulli.o
      stan::lang::located_exception<std::exception>::located_exception(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in external_bernoulli.o
  "___cxa_end_catch", referenced from:
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in external_bernoulli.o
      external_bernoulli_model_namespace::external_bernoulli_model::external_bernoulli_model(stan::io::var_context&, unsigned int, std::__1::basic_ostream<char, std::__1::char_traits<char> >*) in external_bernoulli.o
      stan::lang::rethrow_located(std::exception const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in external_bernoulli.o
      stan::scalar_type<Eigen::Matrix<double, -1, 1, 0, -1, 1>, void>::type external_bernoulli_model_namespace::external_bernoulli_model::log_prob_impl<false, false, Eigen::Matrix<double, -1, 1, 0, -1, 1>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, (void*)0, (void*)0>(Eigen::Matrix<double, -1, 1, 0, -1, 1>&, Eigen::Matrix<int, -1, 1, 0, -1, 1>&, std::__1::basic_ostream<char, std::__1::char_traits<char> >*) const in external_bernoulli.o
      stan::scalar_type<Eigen::Matrix<stan::math::var_value<double, void>, -1, 1, 0, -1, 1>, void>::type external_bernoulli_model_namespace::external_bernoulli_model::log_prob_impl<false, false, Eigen::Matrix<stan::math::var_value<double, void>, -1, 1, 0, -1, 1>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, (void*)0, (void*)0>(Eigen::Matrix<stan::math::var_value<double, void>, -1, 1, 0, -1, 1>&, Eigen::Matrix<int, -1, 1, 0, -1, 1>&, std::__1::basic_ostream<char, std::__1::char_traits<char> >*) const in external_bernoulli.o
      stan::scalar_type<Eigen::Matrix<double, -1, 1, 0, -1, 1>, void>::type external_bernoulli_model_namespace::external_bernoulli_model::log_prob_impl<false, true, Eigen::Matrix<double, -1, 1, 0, -1, 1>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, (void*)0, (void*)0>(Eigen::Matrix<double, -1, 1, 0, -1, 1>&, Eigen::Matrix<int, -1, 1, 0, -1, 1>&, std::__1::basic_ostream<char, std::__1::char_traits<char> >*) const in external_bernoulli.o
      stan::scalar_type<Eigen::Matrix<stan::math::var_value<double, void>, -1, 1, 0, -1, 1>, void>::type external_bernoulli_model_namespace::external_bernoulli_model::log_prob_impl<false, true, Eigen::Matrix<stan::math::var_value<double, void>, -1, 1, 0, -1, 1>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, (void*)0, (void*)0>(Eigen::Matrix<stan::math::var_value<double, void>, -1, 1, 0, -1, 1>&, Eigen::Matrix<int, -1, 1, 0, -1, 1>&, std::__1::basic_ostream<char, std::__1::char_traits<char> >*) const in external_bernoulli.o
      ...
  "___cxa_free_exception", referenced from:
      std::__1::__throw_length_error(char const*) in external_bernoulli.o
      stan::math::internal::eight_byte_aligned_malloc(unsigned long) in external_bernoulli.o
      stan::lang::rethrow_located(std::exception const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in external_bernoulli.o
      void stan::math::throw_domain_error<int>(char const*, char const*, int const&, char const*, char const*) in external_bernoulli.o
      stan::math::validate_non_negative_index(char const*, char const*, int)::'lambda'()::operator()() const in external_bernoulli.o
      void stan::math::throw_domain_error<double>(char const*, char const*, double const&, char const*, char const*) in external_bernoulli.o
      stan::io::deserializer<double>::check_r_capacity(unsigned long) const::'lambda'()::operator()() const in external_bernoulli.o
      ...
  "___cxa_pure_virtual", referenced from:
      vtable for boost::exception_detail::clone_base in external_bernoulli.o
      vtable for boost::exception in external_bernoulli.o
  "___cxa_throw", referenced from:
      std::__1::__throw_length_error(char const*) in external_bernoulli.o
      stan::math::stack_alloc::stack_alloc(unsigned long) in external_bernoulli.o
      stan::math::internal::eight_byte_aligned_malloc(unsigned long) in external_bernoulli.o
      stan::lang::rethrow_located(std::exception const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in external_bernoulli.o
      void stan::math::throw_domain_error<int>(char const*, char const*, int const&, char const*, char const*) in external_bernoulli.o
      stan::math::validate_non_negative_index(char const*, char const*, int)::'lambda'()::operator()() const in external_bernoulli.o
      void stan::math::throw_domain_error<double>(char const*, char const*, double const&, char const*, char const*) in external_bernoulli.o
      ...
  "___dynamic_cast", referenced from:
      stan::lang::rethrow_located(std::exception const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in external_bernoulli.o
  "___gxx_personality_v0", referenced from:
      new_model(stan::io::var_context&, unsigned int, std::__1::basic_ostream<char, std::__1::char_traits<char> >*) in external_bernoulli.o
      stan::math::ad_tape_observer::ad_tape_observer() in external_bernoulli.o
      stan::math::ad_tape_observer::on_scheduler_entry(bool) in external_bernoulli.o
      tbb::interface6::task_scheduler_observer::~task_scheduler_observer() in external_bernoulli.o
      stan::math::ad_tape_observer::on_scheduler_exit(bool) in external_bernoulli.o
      tbb::interface6::task_scheduler_observer::~task_scheduler_observer() in external_bernoulli.o
      tbb::interface6::task_scheduler_observer::~task_scheduler_observer() in external_bernoulli.o
      ...
  "_main", referenced from:
     implicit entry/start for main executable
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [/Users/daniel.marthaler/dev/marthaler/holidays/external_function/external_bernoulli] Error 1

Command ['make', 'STANCFLAGS+=--allow-undefined', 'USER_HEADER=/Users/daniel.marthaler/dev/marthaler/holidays/external_function/make_odds.hpp', '/Users/daniel.marthaler/dev/marthaler/holidays/external_function/external_bernoulli']
	error during processing No such file or directory

mathDR avatar Sep 14 '22 19:09 mathDR

I'm going to ping @rok-cesnovar on this. I believe he has an M1 Mac to mirror your example on

WardBrian avatar Sep 14 '22 19:09 WardBrian

Okay. Do you want me to open a new issue?

mathDR avatar Sep 14 '22 19:09 mathDR

I think it is fine to leave here for now, if we determine it belongs somewhere better like the CmdStan repo we can transfer it then.

WardBrian avatar Sep 14 '22 19:09 WardBrian

Hi @mathDR - if you're still facing this issue, I just wanted to alert you to the fact that recent versions of Stan have changed how external C++ is handled in such a way that should have fixed this. The CmdStan documentation has been updated here: https://mc-stan.org/docs/cmdstan-guide/using-external-cpp-code.html

WardBrian avatar Jun 14 '23 18:06 WardBrian

THANK YOU!!!

mathDR avatar Jun 14 '23 19:06 mathDR