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))
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)
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)
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'), )
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, )
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'])
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".', ))
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)
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('\\', '/')))
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('\\', '/')))
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))
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)
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))
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, )
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])
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)
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)
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)))
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__')
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.*')) )
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)
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], )
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)
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)
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)
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)))
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])