def validate_csv_files(self) -> None: """ Checks that csv output files for all chains are consistent. Populates attributes for draws, column_names, num_params, metric_type. Raises exception when inconsistencies detected. """ dzero = {} for i in range(self.runset.chains): if i == 0: dzero = check_sampler_csv( path=self.runset.csv_files[i], is_fixed_param=self._is_fixed_param, iter_sampling=self._iter_sampling, iter_warmup=self._iter_warmup, save_warmup=self._save_warmup, thin=self._thin, ) else: drest = check_sampler_csv( path=self.runset.csv_files[i], is_fixed_param=self._is_fixed_param, iter_sampling=self._iter_sampling, iter_warmup=self._iter_warmup, save_warmup=self._save_warmup, thin=self._thin, ) for key in dzero: if ( key not in ['id', 'diagnostic_file'] and dzero[key] != drest[key] ): raise ValueError( 'csv file header mismatch, ' 'file {}, key {} is {}, expected {}'.format( self.runset.csv_files[i], key, dzero[key], drest[key], ) ) self._draws_sampling = dzero['draws_sampling'] if self._save_warmup: self._draws_warmup = dzero['draws_warmup'] else: self._draws_warmup = 0 self._column_names = dzero['column_names'] if not self._is_fixed_param: self._num_params = dzero['num_params'] self._metric_type = dzero.get('metric') self._stan_variable_dims = parse_var_dims(dzero['column_names'])
def test_parse_scalar_vec_scalar(self): x = [ 'foo', 'phi.1', 'phi.2', 'phi.3', 'phi.4', 'phi.5', 'phi.6', 'phi.7', 'phi.8', 'phi.9', 'phi.10', 'bar', ] vars_dict = parse_var_dims(x) self.assertEqual(len(vars_dict), 3) self.assertEqual(vars_dict['foo'], 1) self.assertEqual(vars_dict['phi'], (10,)) self.assertEqual(vars_dict['bar'], 1)
def test_parse_scalar_vec_scalar(self): x = [ 'foo', 'phi[1]', 'phi[2]', 'phi[3]', 'phi[4]', 'phi[5]', 'phi[6]', 'phi[7]', 'phi[8]', 'phi[9]', 'phi[10]', 'bar', ] vars_dict = parse_var_dims(x) self.assertEqual(len(vars_dict), 3) self.assertEqual(vars_dict['foo'], 1) self.assertEqual(vars_dict['phi'], (10, )) self.assertEqual(vars_dict['bar'], 1)
def test_parse_scalar_matrix_vec(self): x = [ 'foo', 'phi.1.1', 'phi.1.2', 'phi.1.3', 'phi.1.4', 'phi.1.5', 'phi.2.1', 'phi.2.2', 'phi.2.3', 'phi.2.4', 'phi.2.5', 'bar.1', 'bar.2', ] vars_dict = parse_var_dims(x) self.assertEqual(len(vars_dict), 3) self.assertEqual(vars_dict['foo'], 1) self.assertEqual(vars_dict['phi'], (2, 5)) self.assertEqual(vars_dict['bar'], (2,))
def test_parse_scalar_matrix_vec(self): x = [ 'foo', 'phi[1,1]', 'phi[1,2]', 'phi[1,3]', 'phi[1,4]', 'phi[1,5]', 'phi[2,1]', 'phi[2,2]', 'phi[2,3]', 'phi[2,4]', 'phi[2,5]', 'bar[1]', 'bar[2]', ] vars_dict = parse_var_dims(x) self.assertEqual(len(vars_dict), 3) self.assertEqual(vars_dict['foo'], 1) self.assertEqual(vars_dict['phi'], (2, 5)) self.assertEqual(vars_dict['bar'], (2, ))
def test_parse_scalars(self): x = ['foo', 'foo1'] vars_dict = parse_var_dims(x) self.assertEqual(len(vars_dict), 2) self.assertEqual(vars_dict['foo'], 1) self.assertEqual(vars_dict['foo1'], 1)
def test_parse_missing(self): with self.assertRaises(ValueError): parse_var_dims(None)
def test_parse_empty(self): x = [] vars_dict = parse_var_dims(x) self.assertEqual(len(vars_dict), 0)