Esempio n. 1
0
 def test_sampler_diags(self):
     stan = os.path.join(DATAFILES_PATH, 'bernoulli.stan')
     jdata = os.path.join(DATAFILES_PATH, 'bernoulli.data.json')
     bern_model = CmdStanModel(stan_file=stan)
     bern_fit = bern_model.sample(data=jdata,
                                  chains=2,
                                  seed=12345,
                                  iter_warmup=100,
                                  iter_sampling=100)
     diags = bern_fit.sampler_diagnostics()
     self.assertEqual(SAMPLER_STATE, list(diags))
     for key in diags:
         self.assertEqual(diags[key].shape, (100, 2))
Esempio n. 2
0
    def test_sample_plus_quantities_dedup(self):
        stan = os.path.join(DATAFILES_PATH, 'bernoulli_ppc.stan')
        model = CmdStanModel(stan_file=stan)

        jdata = os.path.join(DATAFILES_PATH, 'bernoulli.data.json')
        bern_fit = model.sample(data=jdata,
                                chains=4,
                                cores=2,
                                seed=12345,
                                iter_sampling=100)
        bern_gqs = model.generate_quantities(data=jdata, mcmc_sample=bern_fit)
        self.assertEqual(bern_gqs.sample_plus_quantities.shape[1],
                         bern_gqs.mcmc_sample.shape[1])
 def test_variational_eta_small(self):
     stan = os.path.join(datafiles_path, 'variational',
                         'eta_should_be_small.stan')
     model = CmdStanModel(stan_file=stan)
     vi = model.variational(algorithm='meanfield', seed=12345)
     self.assertEqual(vi.column_names,
                      ('lp__', 'log_p__', 'log_g__', 'mu.1', 'mu.2'))
     self.assertAlmostEqual(fabs(vi.variational_params_dict['mu.1']),
                            0.08,
                            places=1)
     self.assertAlmostEqual(fabs(vi.variational_params_dict['mu.2']),
                            0.09,
                            places=1)
     self.assertTrue(True)
Esempio n. 4
0
    def test_bernoulli_bad(self):
        stan = os.path.join(DATAFILES_PATH, 'bernoulli.stan')
        bern_model = CmdStanModel(stan_file=stan)

        with self.assertRaisesRegex(RuntimeError, 'variable does not exist'):
            bern_model.sample(chains=2, cores=2, seed=12345, iter_sampling=100)

        with self.assertRaisesRegex(RuntimeError, 'variable does not exist'):
            bern_model.sample(
                data={'foo': 1},
                chains=2,
                cores=2,
                seed=12345,
                iter_sampling=100,
            )
        if platform.system() != 'Windows':
            jdata = os.path.join(DATAFILES_PATH, 'bernoulli.data.json')
            dirname1 = 'tmp1' + str(time())
            os.mkdir(dirname1, mode=644)
            dirname2 = 'tmp2' + str(time())
            path = os.path.join(dirname1, dirname2)
            with self.assertRaisesRegex(ValueError,
                                        'invalid path for output files'):
                bern_model.sample(data=jdata, chains=1, output_dir=path)
            os.rmdir(dirname1)
    def test_gen_quantities_csv_files_bad(self):
        stan = os.path.join(DATAFILES_PATH, 'bernoulli_ppc.stan')
        model = CmdStanModel(stan_file=stan)
        jdata = os.path.join(DATAFILES_PATH, 'bernoulli.data.json')

        # synthesize list of filenames
        goodfiles_path = os.path.join(DATAFILES_PATH, 'runset-bad',
                                      'bad-draws-bern')
        csv_files = []
        for i in range(4):
            csv_files.append('{}-{}.csv'.format(goodfiles_path, i + 1))

        with self.assertRaisesRegex(Exception, 'Invalid mcmc_sample'):
            model.generate_quantities(data=jdata, mcmc_sample=csv_files)
Esempio n. 6
0
    def test_multi_proc(self):
        logistic_stan = os.path.join(DATAFILES_PATH, 'logistic.stan')
        logistic_model = CmdStanModel(stan_file=logistic_stan)
        logistic_data = os.path.join(DATAFILES_PATH, 'logistic.data.R')

        with LogCapture() as log:
            logging.getLogger()
            logistic_model.sample(data=logistic_data, chains=4, cores=1)
        log.check_present(
            ('cmdstanpy', 'INFO', 'finish chain 1'),
            ('cmdstanpy', 'INFO', 'start chain 2'),
        )
        with LogCapture() as log:
            logging.getLogger()
            logistic_model.sample(data=logistic_data, chains=4, cores=2)
        if cpu_count() >= 4:
            # finish chains 1, 2 before starting chains 3, 4
            log.check_present(
                ('cmdstanpy', 'INFO', 'finish chain 1'),
                ('cmdstanpy', 'INFO', 'start chain 4'),
            )
        if cpu_count() >= 4:
            with LogCapture() as log:
                logging.getLogger()
                logistic_model.sample(data=logistic_data, chains=4, cores=4)
                log.check_present(
                    ('cmdstanpy', 'INFO', 'start chain 4'),
                    ('cmdstanpy', 'INFO', 'finish chain 1'),
                )
Esempio n. 7
0
 def test_custom_metric(self):
     stan = os.path.join(DATAFILES_PATH, 'bernoulli.stan')
     jdata = os.path.join(DATAFILES_PATH, 'bernoulli.data.json')
     bern_model = CmdStanModel(stan_file=stan)
     jmetric = os.path.join(DATAFILES_PATH, 'bernoulli.metric.json')
     # just test that it runs without error
     bern_model.sample(
         data=jdata,
         chains=2,
         cores=2,
         seed=12345,
         iter_sampling=200,
         metric=jmetric,
     )
Esempio n. 8
0
    def test_exe_only(self):
        stan = os.path.join(DATAFILES_PATH, 'bernoulli.stan')
        bern_model = CmdStanModel(stan_file=stan)
        exe_only = os.path.join(DATAFILES_PATH, 'exe_only')
        shutil.copyfile(bern_model.exe_file, exe_only)
        os.chmod(exe_only, 0o755)

        bern2_model = CmdStanModel(exe_file=exe_only)
        jdata = os.path.join(DATAFILES_PATH, 'bernoulli.data.json')
        mle = bern2_model.optimize(data=jdata)
        self.assertEqual(mle.optimized_params_np[0],
                         mle.optimized_params_dict['lp__'])
        self.assertEqual(mle.optimized_params_np[1],
                         mle.optimized_params_dict['theta'])
Esempio n. 9
0
    def test_dont_save_warmup(self):
        stan = os.path.join(DATAFILES_PATH, 'bernoulli.stan')
        jdata = os.path.join(DATAFILES_PATH, 'bernoulli.data.json')

        bern_model = CmdStanModel(stan_file=stan)
        bern_fit = bern_model.sample(
            data=jdata,
            chains=2,
            seed=12345,
            iter_warmup=200,
            iter_sampling=100,
            save_warmup=False,
        )
        self.assertEqual(bern_fit.column_names, tuple(BERNOULLI_COLS))
        self.assertEqual(bern_fit.num_draws_sampling, 100)
        self.assertEqual(bern_fit.draws().shape, (100, 2, len(BERNOULLI_COLS)))
        with LogCapture() as log:
            self.assertEqual(
                bern_fit.draws(inc_warmup=True).shape,
                (100, 2, len(BERNOULLI_COLS)),
            )
        log.check_present((
            'cmdstanpy',
            'WARNING',
            'draws from warmup iterations not available,'
            ' must run sampler with "save_warmup=True".',
        ))
        with LogCapture() as log:
            self.assertEqual(
                bern_fit.draws(inc_warmup=True, concat_chains=True).shape,
                (200, len(BERNOULLI_COLS)),
            )
        log.check_present((
            'cmdstanpy',
            'WARNING',
            'draws from warmup iterations not available,'
            ' must run sampler with "save_warmup=True".',
        ))
        with LogCapture() as log:
            self.assertEqual(
                bern_fit.draws_pd(inc_warmup=True).shape,
                (200, len(BERNOULLI_COLS)),
            )
        log.check_present((
            'cmdstanpy',
            'WARNING',
            'draws from warmup iterations not available,'
            ' must run sampler with "save_warmup=True".',
        ))
Esempio n. 10
0
    def test_set_mle_attrs(self):
        stan = os.path.join(datafiles_path, 'optimize', 'rosenbrock.stan')
        model = CmdStanModel(stan_file=stan)
        no_data = {}
        args = OptimizeArgs(algorithm='Newton')
        cmdstan_args = CmdStanArgs(
            model_name=model.name,
            model_exe=model.exe_file,
            chain_ids=None,
            data=no_data,
            method_args=args,
        )
        runset = RunSet(args=cmdstan_args, chains=1)
        mle = CmdStanMLE(runset)
        self.assertIn('CmdStanMLE: model=rosenbrock', mle.__repr__())
        self.assertIn('method=optimize', mle.__repr__())

        self.assertEqual(mle._column_names, ())
        self.assertEqual(mle._mle, {})

        output = os.path.join(datafiles_path, 'optimize', 'rosenbrock_mle.csv')
        mle._set_mle_attrs(output)
        self.assertEqual(mle.column_names, ('lp__', 'x', 'y'))
        self.assertAlmostEqual(mle.optimized_params_dict['x'], 1, places=3)
        self.assertAlmostEqual(mle.optimized_params_dict['y'], 1, places=3)
Esempio n. 11
0
 def test_model_includes_implicit(self):
     stan = os.path.join(DATAFILES_PATH, 'bernoulli_include.stan')
     exe = os.path.join(DATAFILES_PATH, 'bernoulli_include' + EXTENSION)
     if os.path.exists(exe):
         os.remove(exe)
     model2 = CmdStanModel(stan_file=stan)
     self.assertTrue(model2.exe_file.endswith(exe.replace('\\', '/')))
Esempio n. 12
0
 def test_model_includes_explicit(self):
     if os.path.exists(BERN_EXE):
         os.remove(BERN_EXE)
     model = CmdStanModel(stan_file=BERN_STAN,
                          stanc_options={'include_paths': DATAFILES_PATH})
     self.assertEqual(BERN_STAN, model.stan_file)
     self.assertTrue(model.exe_file.endswith(BERN_EXE.replace('\\', '/')))
Esempio n. 13
0
    def test_set_variational_attrs(self):
        stan = os.path.join(datafiles_path, 'variational',
                            'eta_should_be_big.stan')
        model = CmdStanModel(stan_file=stan)
        no_data = {}
        args = VariationalArgs(algorithm='meanfield')
        cmdstan_args = CmdStanArgs(model_name=model.name,
                                   model_exe=model.exe_file,
                                   chain_ids=None,
                                   data=no_data,
                                   method_args=args)
        runset = RunSet(args=cmdstan_args, chains=1)
        vi = CmdStanVB(runset)
        self.assertIn('CmdStanVB: model=eta_should_be_big', vi.__repr__())
        self.assertIn('method=variational', vi.__repr__())

        # check CmdStanVB.__init__ state
        self.assertEqual(vi._column_names, ())
        self.assertEqual(vi._variational_mean, {})
        self.assertEqual(vi._variational_sample, None)

        # process csv file, check attrs
        output = os.path.join(datafiles_path, 'variational',
                              'eta_big_output.csv')
        vi._set_variational_attrs(output)
        self.assertEqual(vi.column_names,
                         ('lp__', 'log_p__', 'log_g__', 'mu.1', 'mu.2'))
        self.assertAlmostEqual(vi.variational_params_dict['mu.1'],
                               31.0299,
                               places=2)
        self.assertAlmostEqual(vi.variational_params_dict['mu.2'],
                               28.8141,
                               places=2)
        self.assertEqual(vi.variational_sample.shape, (1000, 5))
Esempio n. 14
0
 def test_model_includes_implicit(self):
     stan = os.path.join(DATAFILES_PATH, 'bernoulli_include.stan')
     exe = os.path.join(DATAFILES_PATH, 'bernoulli_include' + EXTENSION)
     if os.path.exists(exe):
         os.remove(exe)
     model2 = CmdStanModel(stan_file=stan)
     self.assertPathsEqual(model2.exe_file, exe)
Esempio n. 15
0
 def test_instantiate(self):
     stan = os.path.join(DATAFILES_PATH, 'variational',
                         'eta_should_be_big.stan')
     model = CmdStanModel(stan_file=stan)
     no_data = {}
     args = VariationalArgs(algorithm='meanfield')
     cmdstan_args = CmdStanArgs(
         model_name=model.name,
         model_exe=model.exe_file,
         chain_ids=None,
         data=no_data,
         method_args=args,
     )
     runset = RunSet(args=cmdstan_args, chains=1)
     runset._csv_files = [
         os.path.join(DATAFILES_PATH, 'variational', 'eta_big_output.csv')
     ]
     variational = CmdStanVB(runset)
     self.assertIn('CmdStanVB: model=eta_should_be_big',
                   variational.__repr__())
     self.assertIn('method=variational', variational.__repr__())
     self.assertEqual(
         variational.column_names,
         ('lp__', 'log_p__', 'log_g__', 'mu[1]', 'mu[2]'),
     )
     self.assertAlmostEqual(variational.variational_params_dict['mu[1]'],
                            31.0299,
                            places=2)
     self.assertAlmostEqual(variational.variational_params_dict['mu[2]'],
                            28.8141,
                            places=2)
     self.assertEqual(variational.variational_sample.shape, (1000, 5))
Esempio n. 16
0
    def test_check_sampler_csv_thin(self):
        stan = os.path.join(DATAFILES_PATH, 'bernoulli.stan')
        bern_model = CmdStanModel(stan_file=stan)
        bern_model.compile()
        jdata = os.path.join(DATAFILES_PATH, 'bernoulli.data.json')
        bern_fit = bern_model.sample(
            data=jdata,
            chains=1,
            parallel_chains=1,
            seed=12345,
            iter_sampling=490,
            iter_warmup=490,
            thin=7,
            max_treedepth=11,
            adapt_delta=0.98,
        )
        csv_file = bern_fit.runset.csv_files[0]
        dict = check_sampler_csv(
            path=csv_file,
            is_fixed_param=False,
            iter_sampling=490,
            iter_warmup=490,
            thin=7,
        )
        self.assertEqual(dict['num_samples'], 490)
        self.assertEqual(dict['thin'], 7)
        self.assertEqual(dict['draws_sampling'], 70)
        self.assertEqual(dict['seed'], 12345)
        self.assertEqual(dict['max_depth'], 11)
        self.assertEqual(dict['delta'], 0.98)

        with self.assertRaisesRegex(ValueError, 'config error'):
            check_sampler_csv(
                path=csv_file,
                is_fixed_param=False,
                iter_sampling=490,
                iter_warmup=490,
                thin=9,
            )
        with self.assertRaisesRegex(ValueError,
                                    'expected 490 draws, found 70'):
            check_sampler_csv(
                path=csv_file,
                is_fixed_param=False,
                iter_sampling=490,
                iter_warmup=490,
            )
Esempio n. 17
0
    def test_save_csv(self):
        stan = os.path.join(DATAFILES_PATH, 'bernoulli.stan')
        jdata = os.path.join(DATAFILES_PATH, 'bernoulli.data.json')
        bern_model = CmdStanModel(stan_file=stan)
        bern_fit = bern_model.sample(data=jdata,
                                     chains=4,
                                     cores=2,
                                     seed=12345,
                                     sampling_iters=200)
        for i in range(bern_fit.runset.chains):
            csv_file = bern_fit.runset.csv_files[i]
            txt_file = ''.join([os.path.splitext(csv_file)[0], '.txt'])
            self.assertTrue(os.path.exists(csv_file))
            self.assertTrue(os.path.exists(txt_file))

        # save files to good dir
        bern_fit.save_csvfiles(dir=DATAFILES_PATH)
        for i in range(bern_fit.runset.chains):
            csv_file = bern_fit.runset.csv_files[i]
            self.assertTrue(os.path.exists(csv_file))
        with self.assertRaisesRegex(Exception, 'file exists'):
            bern_fit.save_csvfiles(dir=DATAFILES_PATH)

        tmp2_dir = os.path.join(HERE, 'tmp2')
        os.mkdir(tmp2_dir)
        bern_fit.save_csvfiles(dir=tmp2_dir)
        for i in range(bern_fit.runset.chains):
            csv_file = bern_fit.runset.csv_files[i]
            self.assertTrue(os.path.exists(csv_file))
        for i in range(bern_fit.runset.chains):  # cleanup datafile_path dir
            os.remove(bern_fit.runset.csv_files[i])
            os.remove(bern_fit.runset.console_files[i])
        shutil.rmtree(tmp2_dir, ignore_errors=True)

        # regenerate to tmpdir, save to good dir
        bern_fit = bern_model.sample(data=jdata,
                                     chains=4,
                                     cores=2,
                                     seed=12345,
                                     sampling_iters=200)
        bern_fit.save_csvfiles()  # default dir
        for i in range(bern_fit.runset.chains):
            csv_file = bern_fit.runset.csv_files[i]
            self.assertTrue(os.path.exists(csv_file))
        for i in range(bern_fit.runset.chains):  # cleanup default dir
            os.remove(bern_fit.runset.csv_files[i])
            os.remove(bern_fit.runset.console_files[i])
Esempio n. 18
0
 def test_model_includes_explicit(self):
     if os.path.exists(BERN_EXE):
         os.remove(BERN_EXE)
     model = CmdStanModel(
         stan_file=BERN_STAN, stanc_options={'include_paths': DATAFILES_PATH}
     )
     self.assertEqual(BERN_STAN, model.stan_file)
     self.assertPathsEqual(model.exe_file, BERN_EXE)
Esempio n. 19
0
    def test_ctor_compile_arg(self):
        # instantiate, don't compile
        if os.path.exists(BERN_EXE):
            os.remove(BERN_EXE)
        model = CmdStanModel(stan_file=BERN_STAN, compile=False)
        self.assertEqual(BERN_STAN, model.stan_file)
        self.assertEqual(None, model.exe_file)

        model = CmdStanModel(stan_file=BERN_STAN, compile=True)
        self.assertPathsEqual(model.exe_file, BERN_EXE)
        exe_time = os.path.getmtime(model.exe_file)

        model = CmdStanModel(stan_file=BERN_STAN)
        self.assertTrue(exe_time == os.path.getmtime(model.exe_file))

        model = CmdStanModel(stan_file=BERN_STAN, compile='force')
        self.assertTrue(exe_time < os.path.getmtime(model.exe_file))
    def test_show_console(self):
        stan = os.path.join(DATAFILES_PATH, 'bernoulli.stan')
        bern_model = CmdStanModel(stan_file=stan)
        jdata = os.path.join(DATAFILES_PATH, 'bernoulli.data.json')
        bern_fit = bern_model.sample(
            data=jdata,
            chains=4,
            parallel_chains=2,
            seed=12345,
            iter_sampling=100,
        )
        stan = os.path.join(DATAFILES_PATH, 'bernoulli_ppc.stan')
        model = CmdStanModel(stan_file=stan)

        sys_stdout = io.StringIO()
        with contextlib.redirect_stdout(sys_stdout):
            model.generate_quantities(
                data=jdata,
                mcmc_sample=bern_fit,
                show_console=True,
            )
        console = sys_stdout.getvalue()
        self.assertTrue('Chain [1] method = generate' in console)
        self.assertTrue('Chain [2] method = generate' in console)
        self.assertTrue('Chain [3] method = generate' in console)
        self.assertTrue('Chain [4] method = generate' in console)
Esempio n. 21
0
    def test_dont_save_warmup(self):
        stan = os.path.join(DATAFILES_PATH, 'bernoulli.stan')
        jdata = os.path.join(DATAFILES_PATH, 'bernoulli.data.json')

        bern_model = CmdStanModel(stan_file=stan)
        bern_fit = bern_model.sample(
            data=jdata,
            chains=2,
            seed=12345,
            iter_warmup=200,
            iter_sampling=100,
            save_warmup=False,
        )
        self.assertEqual(bern_fit.column_names, tuple(BERNOULLI_COLS))
        self.assertEqual(bern_fit.num_draws_warmup, 0)
        self.assertEqual(bern_fit.warmup, None)
        self.assertEqual(bern_fit.num_draws, 100)
        self.assertEqual(bern_fit.sample.shape, (100, 2, len(BERNOULLI_COLS)))
Esempio n. 22
0
 def test_variable_bern(self):
     stan = os.path.join(DATAFILES_PATH, 'bernoulli.stan')
     jdata = os.path.join(DATAFILES_PATH, 'bernoulli.data.json')
     bern_model = CmdStanModel(stan_file=stan)
     bern_fit = bern_model.sample(data=jdata,
                                  chains=2,
                                  seed=12345,
                                  iter_warmup=100,
                                  iter_sampling=100)
     self.assertEqual(1, len(bern_fit._stan_variable_dims))
     self.assertTrue('theta' in bern_fit._stan_variable_dims)
     self.assertEqual(bern_fit._stan_variable_dims['theta'], 1)
     theta = bern_fit.stan_variable(name='theta')
     self.assertEqual(theta.shape, (200, ))
     with self.assertRaises(ValueError):
         bern_fit.stan_variable(name='eta')
     with self.assertRaises(ValueError):
         bern_fit.stan_variable(name='lp__')
Esempio n. 23
0
 def test_model_syntax_error(self):
     stan = os.path.join(DATAFILES_PATH, 'bad_syntax.stan')
     with LogCapture(level=logging.WARNING) as log:
         logging.getLogger()
         with self.assertRaises(ValueError):
             CmdStanModel(stan_file=stan)
     log.check_present(
         ('cmdstanpy', 'WARNING', StringComparison(r'(?s).*Syntax error.*'))
     )
Esempio n. 24
0
 def test_variational_eta_small(self):
     stan = os.path.join(DATAFILES_PATH, 'variational',
                         'eta_should_be_small.stan')
     model = CmdStanModel(stan_file=stan)
     variational = model.variational(algorithm='meanfield', seed=12345)
     self.assertEqual(
         variational.column_names,
         ('lp__', 'log_p__', 'log_g__', 'mu[1]', 'mu[2]'),
     )
     self.assertAlmostEqual(fabs(
         variational.variational_params_dict['mu[1]']),
                            0.08,
                            places=1)
     self.assertAlmostEqual(fabs(
         variational.variational_params_dict['mu[2]']),
                            0.09,
                            places=1)
     self.assertTrue(True)
Esempio n. 25
0
    def test_gen_quantities_csv_files(self):
        stan = os.path.join(DATAFILES_PATH, 'bernoulli_ppc.stan')
        model = CmdStanModel(stan_file=stan)

        jdata = os.path.join(DATAFILES_PATH, 'bernoulli.data.json')

        # synthesize list of filenames
        goodfiles_path = os.path.join(DATAFILES_PATH, 'runset-good', 'bern')
        csv_files = []
        for i in range(4):
            csv_files.append('{}-{}.csv'.format(goodfiles_path, i + 1))

        bern_gqs = model.generate_quantities(data=jdata, mcmc_sample=csv_files)
        self.assertEqual(
            bern_gqs.runset._args.method, Method.GENERATE_QUANTITIES
        )
        self.assertIn('CmdStanGQ: model=bernoulli_ppc', bern_gqs.__repr__())
        self.assertIn('method=generate_quantities', bern_gqs.__repr__())

        # check results - ouput files, quantities of interest, draws
        self.assertEqual(bern_gqs.runset.chains, 4)
        for i in range(bern_gqs.runset.chains):
            self.assertEqual(bern_gqs.runset._retcode(i), 0)
            csv_file = bern_gqs.runset.csv_files[i]
            self.assertTrue(os.path.exists(csv_file))
        column_names = [
            'y_rep[1]',
            'y_rep[2]',
            'y_rep[3]',
            'y_rep[4]',
            'y_rep[5]',
            'y_rep[6]',
            'y_rep[7]',
            'y_rep[8]',
            'y_rep[9]',
            'y_rep[10]',
        ]
        self.assertEqual(bern_gqs.column_names, tuple(column_names))
        self.assertEqual(
            bern_gqs.sample_plus_quantities.shape[1],
            bern_gqs.mcmc_sample.shape[1]
            + bern_gqs.generated_quantities_pd.shape[1],
        )
Esempio n. 26
0
 def test_optimize_good_dict(self):
     exe = os.path.join(DATAFILES_PATH, 'bernoulli' + EXTENSION)
     stan = os.path.join(DATAFILES_PATH, 'bernoulli.stan')
     model = CmdStanModel(stan_file=stan, exe_file=exe)
     with open(os.path.join(DATAFILES_PATH, 'bernoulli.data.json')) as fd:
         data = json.load(fd)
     with open(os.path.join(DATAFILES_PATH, 'bernoulli.init.json')) as fd:
         init = json.load(fd)
     mle = model.optimize(
         data=data,
         seed=1239812093,
         inits=init,
         algorithm='BFGS',
         init_alpha=0.001,
         iter=100,
     )
     # test numpy output
     self.assertAlmostEqual(mle.optimized_params_np[0], -5, places=2)
     self.assertAlmostEqual(mle.optimized_params_np[1], 0.2, places=3)
Esempio n. 27
0
    def test_model_good(self):
        stan = os.path.join(datafiles_path, 'bernoulli.stan')
        exe = os.path.join(datafiles_path, 'bernoulli' + EXTENSION)

        # compile on instantiation
        model = CmdStanModel(stan_file=stan)
        self.assertEqual(stan, model.stan_file)
        self.assertTrue(model.exe_file.endswith(exe.replace('\\', '/')))

        # instantiate with existing exe
        model = CmdStanModel(stan_file=stan, exe_file=exe)
        self.assertEqual(stan, model.stan_file)
        self.assertTrue(model.exe_file.endswith(exe))

        # instantiate, don't compile
        os.remove(exe)
        model = CmdStanModel(stan_file=stan, compile=False)
        self.assertEqual(stan, model.stan_file)
        self.assertEqual(None, model.exe_file)
Esempio n. 28
0
    def test_fixed_param_good(self):
        stan = os.path.join(DATAFILES_PATH, 'datagen_poisson_glm.stan')
        datagen_model = CmdStanModel(stan_file=stan)
        no_data = {}
        datagen_fit = datagen_model.sample(data=no_data,
                                           seed=12345,
                                           sampling_iters=100,
                                           fixed_param=True)
        self.assertEqual(datagen_fit.runset._args.method, Method.SAMPLE)

        for i in range(datagen_fit.runset.chains):
            csv_file = datagen_fit.runset.csv_files[i]
            txt_file = ''.join([os.path.splitext(csv_file)[0], '.txt'])
            self.assertTrue(os.path.exists(csv_file))
            self.assertTrue(os.path.exists(txt_file))

        self.assertEqual(datagen_fit.runset.chains, 1)

        column_names = [
            'lp__', 'accept_stat__', 'N', 'y_sim.1', 'y_sim.2', 'y_sim.3',
            'y_sim.4', 'y_sim.5', 'y_sim.6', 'y_sim.7', 'y_sim.8', 'y_sim.9',
            'y_sim.10', 'y_sim.11', 'y_sim.12', 'y_sim.13', 'y_sim.14',
            'y_sim.15', 'y_sim.16', 'y_sim.17', 'y_sim.18', 'y_sim.19',
            'y_sim.20', 'x_sim.1', 'x_sim.2', 'x_sim.3', 'x_sim.4', 'x_sim.5',
            'x_sim.6', 'x_sim.7', 'x_sim.8', 'x_sim.9', 'x_sim.10', 'x_sim.11',
            'x_sim.12', 'x_sim.13', 'x_sim.14', 'x_sim.15', 'x_sim.16',
            'x_sim.17', 'x_sim.18', 'x_sim.19', 'x_sim.20', 'pop_sim.1',
            'pop_sim.2', 'pop_sim.3', 'pop_sim.4', 'pop_sim.5', 'pop_sim.6',
            'pop_sim.7', 'pop_sim.8', 'pop_sim.9', 'pop_sim.10', 'pop_sim.11',
            'pop_sim.12', 'pop_sim.13', 'pop_sim.14', 'pop_sim.15',
            'pop_sim.16', 'pop_sim.17', 'pop_sim.18', 'pop_sim.19',
            'pop_sim.20', 'alpha_sim', 'beta_sim', 'eta.1', 'eta.2', 'eta.3',
            'eta.4', 'eta.5', 'eta.6', 'eta.7', 'eta.8', 'eta.9', 'eta.10',
            'eta.11', 'eta.12', 'eta.13', 'eta.14', 'eta.15', 'eta.16',
            'eta.17', 'eta.18', 'eta.19', 'eta.20'
        ]
        self.assertEqual(datagen_fit.column_names, tuple(column_names))
        self.assertEqual(datagen_fit.draws, 100)
        self.assertEqual(datagen_fit.sample.shape, (100, 1, len(column_names)))
        self.assertEqual(datagen_fit.metric, None)
        self.assertEqual(datagen_fit.metric_type, None)
        self.assertEqual(datagen_fit.stepsize, None)
Esempio n. 29
0
    def test_save_warmup_thin(self):
        stan = os.path.join(DATAFILES_PATH, 'bernoulli.stan')
        jdata = os.path.join(DATAFILES_PATH, 'bernoulli.data.json')

        bern_model = CmdStanModel(stan_file=stan)
        bern_fit = bern_model.sample(
            data=jdata,
            chains=2,
            seed=12345,
            iter_warmup=200,
            iter_sampling=100,
            thin=5,
            save_warmup=True,
        )
        self.assertEqual(bern_fit.column_names, tuple(BERNOULLI_COLS))
        self.assertEqual(bern_fit.num_draws, 60)
        self.assertEqual(bern_fit.draws().shape, (20, 2, len(BERNOULLI_COLS)))
        self.assertEqual(
            bern_fit.draws(inc_warmup=True).shape,
            (60, 2, len(BERNOULLI_COLS)))
Esempio n. 30
0
    def test_save_csv(self):
        stan = os.path.join(datafiles_path, 'bernoulli.stan')
        jdata = os.path.join(datafiles_path, 'bernoulli.data.json')
        bern_model = CmdStanModel(stan_file=stan)
        bern_fit = bern_model.sample(data=jdata,
                                     chains=4,
                                     cores=2,
                                     seed=12345,
                                     sampling_iters=200)

        for i in range(bern_fit.runset.chains):
            csv_file = bern_fit.runset.csv_files[i]
            txt_file = ''.join([os.path.splitext(csv_file)[0], '.txt'])
            self.assertTrue(os.path.exists(csv_file))
            self.assertTrue(os.path.exists(txt_file))

        # save files to good dir
        basename = 'bern_save_csvfiles_test'
        bern_fit.save_csvfiles(dir=datafiles_path, basename=basename)
        for i in range(bern_fit.runset.chains):
            csv_file = bern_fit.runset.csv_files[i]
            self.assertTrue(os.path.exists(csv_file))
        with self.assertRaisesRegex(Exception, 'file exists'):
            bern_fit.save_csvfiles(dir=datafiles_path, basename=basename)
        for i in range(bern_fit.runset.chains):  # cleanup datafile_path dir
            os.remove(bern_fit.runset.csv_files[i])
            os.remove(bern_fit.runset.console_files[i])

        # regenerate to tmpdir, save to good dir
        bern_fit = bern_model.sample(data=jdata,
                                     chains=4,
                                     cores=2,
                                     seed=12345,
                                     sampling_iters=200)
        bern_fit.save_csvfiles(basename=basename)  # default dir
        for i in range(bern_fit.runset.chains):
            csv_file = bern_fit.runset.csv_files[i]
            self.assertTrue(os.path.exists(csv_file))
        for i in range(bern_fit.runset.chains):  # cleanup default dir
            os.remove(bern_fit.runset.csv_files[i])
            os.remove(bern_fit.runset.console_files[i])